<?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>59763</bug_id>
          
          <creation_ts>2011-04-28 17:06:25 -0700</creation_ts>
          <short_desc>DFG JIT - Unify FPRReg &amp; FPRegisterID</short_desc>
          <delta_ts>2011-04-28 18:50:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>394942</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-04-28 17:06:25 -0700</bug_when>
    <thetext>(Following on from GPRReg/RegisterID unification).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394945</commentid>
    <comment_count>1</comment_count>
      <attachid>91595</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-04-28 17:07:54 -0700</bug_when>
    <thetext>Created attachment 91595
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394950</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-28 17:09:30 -0700</bug_when>
    <thetext>Attachment 91595 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGFPRInfo.h:60:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGFPRInfo.h:91:  fpr_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394959</commentid>
    <comment_count>3</comment_count>
      <attachid>91599</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-04-28 17:15:45 -0700</bug_when>
    <thetext>Created attachment 91599
Tweaked Patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394961</commentid>
    <comment_count>4</comment_count>
      <attachid>91600</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-04-28 17:16:58 -0700</bug_when>
    <thetext>Created attachment 91600
Ooops! reverted Node changes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394962</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-28 17:17:08 -0700</bug_when>
    <thetext>Attachment 91599 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGFPRInfo.h:60:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGFPRInfo.h:91:  fpr_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394964</commentid>
    <comment_count>6</comment_count>
      <attachid>91601</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-04-28 17:18:15 -0700</bug_when>
    <thetext>Created attachment 91601
Double ooops! - revert platform change!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394967</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-28 17:19:46 -0700</bug_when>
    <thetext>Attachment 91600 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGFPRInfo.h:60:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGFPRInfo.h:91:  fpr_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394969</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-28 17:20:32 -0700</bug_when>
    <thetext>Attachment 91601 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGFPRInfo.h:60:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGFPRInfo.h:91:  fpr_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395011</commentid>
    <comment_count>9</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-04-28 18:50:35 -0700</bug_when>
    <thetext>ixed in r85271</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91595</attachid>
            <date>2011-04-28 17:07:54 -0700</date>
            <delta_ts>2011-04-28 17:15:45 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>59763.patch</filename>
            <type>text/plain</type>
            <size>50025</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODUyNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDQtMjggIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTc2MworICAgICAgICBERkcgSklUIC0g
VW5pZnkgRlBSUmVnICYgRlBSZWdpc3RlcklECisKKyAgICAgICAgKEZvbGxvd2luZyBvbiBmcm9t
IEdQUlJlZy9SZWdpc3RlcklEIHVuaWZpY2F0aW9uKS4KKworICAgICAgICAqIGRmZy9ERkdGUFJJ
bmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6RlBSSW5mbzo6dG9SZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkRGRzo6RlBSSW5mbzo6ZGVidWdOYW1lKToKKyAgICAgICAgKiBkZmcvREZHR1BSSW5m
by5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmJveERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6dW5ib3hE
b3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZsdXNoUmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0ZsdXNoZWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNldHVwVHdvU3R1YkFyZ3MpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNldHVwU3R1YkFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FsbE9wZXJhdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6R1BSUmVzdWx0Ojpsb2NrZWRSZXN1bHQpOgorICAgICAgICAoSlND
OjpERkc6OkZQUlJlc3VsdDo6bG9ja2VkUmVzdWx0KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpmaWxsTnVtZXJpY1Rv
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxh
dGl2ZVRvTm9uU3BlY3VsYXRpdmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpj
b21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpFbnRyeUxvY2F0aW9uOjpFbnRyeUxvY2F0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6dmFsdWVUb051bWJlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9JbnQzMik6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6Om51bWJlclRvSW50MzIpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
Tm9uU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJ
VDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1
bGF0aXZlSklUOjpzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBkZmcvREZHUmVn
aXN0ZXJCYW5rLmg6CisgICAgICAgIChKU0M6OkRGRzo6UmVnaXN0ZXJCYW5rOjppdGVyYXRvcjo6
cmVnSUQpOgorICAgICAgICAoSlNDOjpERkc6OlJlZ2lzdGVyQmFuazo6aXRlcmF0b3I6OmRlYnVn
TmFtZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisKIDIwMTEtMDQtMjggIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZlcnQgIjxodHRwOi8vd2Via2l0Lm9yZy9iLzU5NzA1PiBXVEY6
OnBvc3RUaW1lcigpIGxlYWtzIGEgQ0ZSdW5Mb29wVGltZXJSZWYgZXZlcnkgdGltZSBpdCdzIGNh
bGxlZCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCShyZXZpc2lv
biA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywzMyArMzMsNjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi0vLyBBYnN0cmFjdGVkIHNlcXVlbnRpYWwgbnVtYmVyaW5nIG9mIGF2YWlsYWJs
ZSBtYWNoaW5lIHJlZ2lzdGVycyAoYXMgb3Bwb3NlZCB0byBHUFJSZWcsCi0vLyB3aGljaCBhcmUg
bm9uLXNlcXVlbnRpYWwsIGFuZCBub3QgYWJzdHJhY3RlZCBmcm9tIHRoZSByZWdpc3RlciBudW1i
ZXJpbmcgdXNlZCBieSB0aGUgdW5kZXJseWluZyBwcm9jZXNzb3IpLgotZW51bSBGUFJSZWcgeyBm
cHIwLCBmcHIxLCBmcHIyLCBmcHIzLCBmcHI0LCBmcHI1LCBudW1iZXJPZkZQUnMsIEludmFsaWRG
UFJSZWcgPSAweEZGRkZGRkZGIH07Ci0KLWlubGluZSBGUFJSZWcgbmV4dChGUFJSZWcmIHJlZykK
LXsKLSAgICBBU1NFUlQocmVnIDwgbnVtYmVyT2ZGUFJzKTsKLSAgICByZXR1cm4gcmVnID0gc3Rh
dGljX2Nhc3Q8RlBSUmVnPihyZWcgKyAxKTsKLX0KK3R5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkZQ
UmVnaXN0ZXJJRCBGUFJSZWc7CisjZGVmaW5lIEludmFsaWRGUFJSZWcgKChGUFJSZWcpLTEpCiAK
LWNsYXNzIEZQUkJhbmtJbmZvIHsKK2NsYXNzIEZQUkluZm8gewogcHVibGljOgogICAgIHR5cGVk
ZWYgRlBSUmVnIFJlZ2lzdGVyVHlwZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVy
T2ZSZWdpc3RlcnMgPSA2OwogCisgICAgLy8gVGVtcG9yYXJ5IHJlZ2lzdGVycy4KKyAgICBzdGF0
aWMgY29uc3QgRlBSUmVnIGZwUmVnVDAgPSBYODZSZWdpc3RlcnM6OnhtbTA7CisgICAgc3RhdGlj
IGNvbnN0IEZQUlJlZyBmcFJlZ1QxID0gWDg2UmVnaXN0ZXJzOjp4bW0xOworICAgIHN0YXRpYyBj
b25zdCBGUFJSZWcgZnBSZWdUMiA9IFg4NlJlZ2lzdGVyczo6eG1tMjsKKyAgICBzdGF0aWMgY29u
c3QgRlBSUmVnIGZwUmVnVDMgPSBYODZSZWdpc3RlcnM6OnhtbTM7CisgICAgc3RhdGljIGNvbnN0
IEZQUlJlZyBmcFJlZ1Q0ID0gWDg2UmVnaXN0ZXJzOjp4bW00OworICAgIHN0YXRpYyBjb25zdCBG
UFJSZWcgZnBSZWdUNSA9IFg4NlJlZ2lzdGVyczo6eG1tNTsKKyAgICAvLyBUaGVzZSBjb25zdGFu
dHMgcHJvdmlkZSB0aGUgbmFtZXMgZm9yIHRoZSBnZW5lcmFsIHB1cnBvc2UgYXJndW1lbnQgJiBy
ZXR1cm4gdmFsdWUgcmVnaXN0ZXJzLgorICAgIHN0YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRG
UFIwID0gWDg2UmVnaXN0ZXJzOjp4bW0wOyAvLyBmcFJlZ1QwCisgICAgc3RhdGljIGNvbnN0IEZQ
UlJlZyBhcmd1bWVudEZQUjEgPSBYODZSZWdpc3RlcnM6OnhtbTE7IC8vIGZwUmVnVDEKKyAgICBz
dGF0aWMgY29uc3QgRlBSUmVnIGFyZ3VtZW50RlBSMiA9IFg4NlJlZ2lzdGVyczo6eG1tMjsgLy8g
ZnBSZWdUMgorICAgIHN0YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRGUFIzID0gWDg2UmVnaXN0
ZXJzOjp4bW0zOyAvLyBmcFJlZ1QzCisgICAgc3RhdGljIGNvbnN0IEZQUlJlZyByZXR1cm5WYWx1
ZUZQUiA9IFg4NlJlZ2lzdGVyczo6eG1tMDsgLy8gZnBSZWdUMAorCisgICAgLy8gRlBSUmVnIG1h
cHBpbmcgaXMgZGlyZWN0LCB0aGUgbWFjaGluZSByZWdzaXRlciBudW1iZXJzIGNhbgorICAgIC8v
IGJlIHVzZWQgZGlyZWN0bHkgYXMgaW5kaWNlcyBpbnRvIHRoZSBGUFIgUmVnaXN0ZXJCYW5rLgor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMCA9PSAwLCB4bW0wX2lzXzApOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMSA9PSAxLCB4bW0xX2lzXzEpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMiA9PSAyLCB4bW0yX2lzXzIpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMyA9PSAzLCB4bW0zX2lzXzMpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tNCA9PSA0LCB4bW00X2lzXzQpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tNSA9PSA1LCB4bW01X2lzXzUpOwog
ICAgIHN0YXRpYyBGUFJSZWcgdG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAg
ICAgIHJldHVybiAoRlBSUmVnKWluZGV4OwogICAgIH0KLQogICAgIHN0YXRpYyB1bnNpZ25lZCB0
b0luZGV4KEZQUlJlZyByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gKHVuc2lnbmVkKXJlZzsK
ICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnTmFt
ZShGUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkRlBSUmVn
KTsKKyAgICAgICAgQVNTRVJUKHJlZyA8IDE2KTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IG5hbWVGb3JSZWdpc3RlclsxNl0gPSB7CisgICAgICAgICAgICAieG1tMCIsICJ4bW0xIiwgInht
bTIiLCAieG1tMyIsCisgICAgICAgICAgICAieG1tNCIsICJ4bW01IiwgInhtbTYiLCAieG1tNyIs
CisgICAgICAgICAgICAieG1tOCIsICJ4bW05IiwgInhtbTEwIiwgInhtbTExIiwKKyAgICAgICAg
ICAgICJ4bW0xMiIsICJ4bW0xMyIsICJ4bW0xNCIsICJ4bW0xNSIKKyAgICAgICAgfTsKKyAgICAg
ICAgcmV0dXJuIG5hbWVGb3JSZWdpc3RlcltyZWddOworICAgIH0KKyNlbmRpZgogfTsKIAotdHlw
ZWRlZiBSZWdpc3RlckJhbms8RlBSQmFua0luZm8+OjppdGVyYXRvciBmcHJfaXRlcmF0b3I7Cit0
eXBlZGVmIFJlZ2lzdGVyQmFuazxGUFJJbmZvPjo6aXRlcmF0b3IgZnByX2l0ZXJhdG9yOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsMTIgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnVDcgPSBYODZSZWdpc3RlcnM6OnI5OwogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnVDggPSBYODZSZWdpc3RlcnM6OnIxMDsKICAgICAvLyBU
aGVzZSBjb25zdGFudHMgcHJvdmlkZSB0aGUgbmFtZXMgZm9yIHRoZSBnZW5lcmFsIHB1cnBvc2Ug
YXJndW1lbnQgJiByZXR1cm4gdmFsdWUgcmVnaXN0ZXJzLgotICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgYXJndW1lbnRSZWdpc3RlcjAgPSBYODZSZWdpc3RlcnM6OmVkaTsgLy8gcmVnVDQKLSAgICBz
dGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50UmVnaXN0ZXIxID0gWDg2UmVnaXN0ZXJzOjplc2k7
IC8vIHJlZ1Q1Ci0gICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudFJlZ2lzdGVyMiA9IFg4
NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQotICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1l
bnRSZWdpc3RlcjMgPSBYODZSZWdpc3RlcnM6OmVjeDsgLy8gcmVnVDIKLSAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHJldHVyblZhbHVlUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVn
VDAKLSAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlUmVnaXN0ZXIyID0gWDg2UmVn
aXN0ZXJzOjplZHg7IC8vIHJlZ1QxCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQ
UjAgPSBYODZSZWdpc3RlcnM6OmVkaTsgLy8gcmVnVDQKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IGFyZ3VtZW50R1BSMSA9IFg4NlJlZ2lzdGVyczo6ZXNpOyAvLyByZWdUNQorICAgIHN0YXRpYyBj
b25zdCBHUFJSZWcgYXJndW1lbnRHUFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCisg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjMgPSBYODZSZWdpc3RlcnM6OmVjeDsg
Ly8gcmVnVDIKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVn
aXN0ZXJzOjplYXg7IC8vIHJlZ1QwCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1
ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKIAogICAgIHN0YXRpYyBHUFJSZWcg
dG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDg1MjUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIEZQUlJlZyBKSVRDb2RlR2VuZXJhdG9y
OjpmaWxsRG91YmxlKE5vZGUKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEb3VibGVDb25zdGFu
dChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRl
KCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIodmFsdWVPZkRv
dWJsZUNvbnN0YW50KG5vZGVJbmRleCkpKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bW92ZVB0clRvRG91YmxlKGdwciwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAg
ICAgICAgICAgIHVubG9jayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihm
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CkBAIC0xNjIsOCArMTYyLDYg
QEAgRlBSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxEb3VibGUoTm9kZQogICAgICAgICBGUFJS
ZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgR1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0
ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAgdGhpcyBhbGxvY2F0aW9uIG9uIHRoZSBsYXN0IHVz
ZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8KIAotICAgICAgICBKSVRDb21waWxlcjo6RlBSZWdp
c3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwotCiAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOwogCiAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNEb3VibGUoanNWYWx1ZUdw
cik7CkBAIC0xNzEsMTIgKzE2OSwxMiBAQCBGUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbERv
dWJsZShOb2RlCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91
YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwg
dGVtcEdwcik7CiAgICAgICAgIG1faml0LmFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHRlbXBHcHIpOwotICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwg
ZnBSZWcpOworICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwgZnByKTsKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsK
IAogICAgICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCiAgICAgICAgIGlzSW50ZWdl
ci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFs
dWVHcHIsIGZwUmVnKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoanNWYWx1
ZUdwciwgZnByKTsKICAgICAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7CiAKICAg
ICAgICAgbV9ncHJzLnJlbGVhc2UoanNWYWx1ZUdwcik7CkBAIC0xOTIsMTAgKzE5MCw4IEBAIEZQ
UlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAg
ICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBHUFJSZWcgcmVnID0gZ3ByOwotICAgICAg
ICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVn
aXN0ZXJJRChmcHIpOwogCi0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZywg
ZnBSZWcpOworICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShncHIsIGZwcik7CiAK
ICAgICAgICAgbV9ncHJzLnJlbGVhc2UoZ3ByKTsKICAgICAgICAgbV9ncHJzLnVubG9jayhncHIp
OwpAQCAtMzk1LDE3ICszOTEsMTMgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNp
c3RlbmN5KAogICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAg
ICBmb3IgKEZQUlJlZyBpID0gZnByMDsgaSA8IG51bWJlck9mRlBSczsgbmV4dChpKSkgewotICAg
ICAgICBpZiAobV9mcHJzLmlzTG9ja2VkKGkpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IGZwciAlZCBpcyBsb2NrZWQuXG4iLCBp
KTsKKyAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXIuaXNMb2NrZWQoKSkgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVk
OiBmcHIgJXMgaXMgbG9ja2VkLlxuIiwgaXRlci5kZWJ1Z05hbWUoKSk7CiAgICAgICAgICAgICBm
YWlsZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIGZw
ckNvbnRlbnRzW251bWJlck9mRlBSc107Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZGUFJzOyArK2kpCi0gICAgICAgIGZwckNvbnRlbnRzW2ldID0gSW52YWxpZFZpcnR1
YWxSZWdpc3RlcjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nZW5lcmF0aW9uSW5m
by5zaXplKCk7ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gKFZpcnR1YWxSZWdpc3RlcilpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKQEAgLTQzMSw3ICs0MjMsMTAgQEAgdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KAogICAgICAgICBjYXNlIERhdGFG
b3JtYXREb3VibGU6IHsKICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbmZvLmZwcigpOwogICAg
ICAgICAgICAgQVNTRVJUKGZwciAhPSBJbnZhbGlkRlBSUmVnKTsKLSAgICAgICAgICAgIGZwckNv
bnRlbnRzW2Zwcl0gPSB2aXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAobV9mcHJzLm5h
bWUoZnByKSAhPSB2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIHZp
cnR1YWwgcmVnaXN0ZXIgJWQgKGZwciAlcykuXG4iLCB2aXJ0dWFsUmVnaXN0ZXIsIEZQUkluZm86
OmRlYnVnTmFtZShmcHIpKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDQz
LDE0ICs0MzgsMjAgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KAog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGlmIChpdGVyLmdwcigp
ICE9IGluZm8uZ3ByKCkpIHsKKyAgICAgICAgaWYgKGl0ZXIucmVnSUQoKSAhPSBpbmZvLmdwcigp
KSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBm
YWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIGdwciAlcyAodmlydHVhbCByZWdpc3RlciAlZCkuXG4i
LCBpdGVyLmRlYnVnTmFtZSgpLCB2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAgICAgZmFpbGVk
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICBmb3IgKEZQUlJlZyBpID0gZnByMDsgaSA8
IG51bWJlck9mRlBSczsgbmV4dChpKSkgewotICAgICAgICBpZiAobV9mcHJzLm5hbWUoaSkgIT0g
ZnByQ29udGVudHNbaV0pIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJ
U1RFTkNZX0NIRUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZnByICVkICglZCAhPSAlZCku
XG4iLCBpLCBtX2ZwcnMubmFtZShpKSwgZnByQ29udGVudHNbaV0pOworCisgICAgZm9yIChmcHJf
aXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBpdGVyLm5h
bWUoKTsKKyAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIGlmIChpdGVy
LnJlZ0lEKCkgIT0gaW5mby5mcHIoKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJE
RkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVkOiBuYW1lIG1pc21hdGNoIGZvciBmcHIgJXMgKHZp
cnR1YWwgcmVnaXN0ZXIgJWQpLlxuIiwgaXRlci5kZWJ1Z05hbWUoKSwgdmlydHVhbFJlZ2lzdGVy
KTsKICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNiBAQCBjbGFzcyBKSVRDb2RlR2Vu
ZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIgVHJ1c3RlZEltbTMyOwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkltbTMyIElt
bTMyOwotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVy
SUQ7CiAKICAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2V0IHByaW9yaXRpZXMg
Zm9yIHNwaWxsIG9yZGVyIGZvcgogICAgIC8vIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCkBAIC0x
NTcsMTYgKzE1NiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBjb252ZXJ0
IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMgYm94ZWQgYW5kIEpTVmFsdWVzLgogICAgIEdQ
UlJlZyBib3hEb3VibGUoRlBSUmVnIGZwciwgR1BSUmVnIGdwcikKICAgICB7Ci0gICAgICAgIEpJ
VENvbXBpbGVyOjpGUFJlZ2lzdGVySUQgZnBSZWcgPSBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3Rl
cklEKGZwcik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGVUb1B0cihmcFJlZywgZ3ByKTsKKyAg
ICAgICAgbV9qaXQubW92ZURvdWJsZVRvUHRyKGZwciwgZ3ByKTsKICAgICAgICAgbV9qaXQuc3Vi
UHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKICAgICAgICAgcmV0dXJu
IGdwcjsKICAgICB9CiAgICAgRlBSUmVnIHVuYm94RG91YmxlKEdQUlJlZyBncHIsIEZQUlJlZyBm
cHIpCiAgICAgewotICAgICAgICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklU
Q29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwogICAgICAgICBtX2ppdC5hZGRQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAgICBtX2ppdC5tb3ZlUHRy
VG9Eb3VibGUoZ3ByLCBmcFJlZyk7CisgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIs
IGZwcik7CiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQogICAgIEdQUlJlZyBib3hEb3VibGUo
RlBSUmVnIGZwcikKQEAgLTI1NiwxMSArMjUzLDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgICAg
ICAgICBpdGVyLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBm
b3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5leHQoZnByKSkgewot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBtX2ZwcnMubmFtZShmcHIpOwotICAg
ICAgICAgICAgaWYgKG5hbWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewotICAgICAgICAg
ICAgICAgIHNwaWxsKG5hbWUpOwotICAgICAgICAgICAgICAgIG1fZnBycy5yZWxlYXNlKGZwcik7
CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAh
PSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBzcGlsbChpdGVyLm5h
bWUoKSk7CisgICAgICAgICAgICAgICAgaXRlci5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yNzQsOSArMjcwLDggQEAgcHJvdGVjdGVkOgogICAgICAgICAg
ICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoRlBSUmVnIGZwciA9
IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbmFtZSA9IG1fZnBycy5uYW1lKGZwcik7Ci0gICAgICAgICAgICBpZiAobmFt
ZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBp
dGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTQ4NSw2MCArNDgwLDYwIEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpZiAoc3JjQiAh
PSBkZXN0QSkgewogICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBlYXN5IGNhc2VzIC0gdHdvIHNp
bXBsZSBtb3Zlcy4KLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZw
clRvUmVnaXN0ZXJJRChzcmNBKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChkZXN0QSkp
OwotICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3Rl
cklEKHNyY0IpLCBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RCKSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlRG91YmxlKHNyY0EsIGRlc3RBKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmVEb3VibGUoc3JjQiwgZGVzdEIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAoc3JjQSAhPSBkZXN0QikgewogICAgICAgICAgICAgLy8gSGFu
ZGxlIHRoZSBub24tc3dhcCBjYXNlIC0ganVzdCBwdXQgc3JjQiBpbiBwbGFjZSBmaXJzdC4KLSAg
ICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChz
cmNCKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChkZXN0QikpOwotICAgICAgICAgICAg
bV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKHNyY0EpLCBKSVRD
b21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RBKSk7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
RG91YmxlKHNyY0IsIGRlc3RCKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoc3JjQSwg
ZGVzdEEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJU
KHNyY0IgPT0gZGVzdEEgJiYgc3JjQSA9PSBkZXN0Qik7CiAgICAgICAgIC8vIE5lZWQgdG8gc3dh
cDsgcGljayBhIHRlbXBvcmFyeSByZWdpc3Rlci4KICAgICAgICAgRlBSUmVnIHRlbXA7Ci0gICAg
ICAgIGlmIChkZXN0QSAhPSBKSVRDb21waWxlcjo6YXJndW1lbnRGUFIzICYmIGRlc3RBICE9IEpJ
VENvbXBpbGVyOjphcmd1bWVudEZQUjMpCi0gICAgICAgICAgICB0ZW1wID0gSklUQ29tcGlsZXI6
OmFyZ3VtZW50RlBSMzsKLSAgICAgICAgZWxzZSBpZiAoZGVzdEEgIT0gSklUQ29tcGlsZXI6OmFy
Z3VtZW50RlBSMiAmJiBkZXN0QSAhPSBKSVRDb21waWxlcjo6YXJndW1lbnRGUFIyKQotICAgICAg
ICAgICAgdGVtcCA9IEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjI7CisgICAgICAgIGlmIChkZXN0
QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjMgJiYgZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRG
UFIzKQorICAgICAgICAgICAgdGVtcCA9IEZQUkluZm86OmFyZ3VtZW50RlBSMzsKKyAgICAgICAg
ZWxzZSBpZiAoZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRGUFIyICYmIGRlc3RBICE9IEZQUklu
Zm86OmFyZ3VtZW50RlBSMikKKyAgICAgICAgICAgIHRlbXAgPSBGUFJJbmZvOjphcmd1bWVudEZQ
UjI7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGRlc3RBICE9IEpJVENvbXBp
bGVyOjphcmd1bWVudEZQUjEgJiYgZGVzdEEgIT0gSklUQ29tcGlsZXI6OmFyZ3VtZW50RlBSMSk7
Ci0gICAgICAgICAgICB0ZW1wID0gSklUQ29tcGlsZXI6OmFyZ3VtZW50RlBSMTsKKyAgICAgICAg
ICAgIEFTU0VSVChkZXN0QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjEgJiYgZGVzdEEgIT0gRlBS
SW5mbzo6YXJndW1lbnRGUFIxKTsKKyAgICAgICAgICAgIHRlbXAgPSBGUFJJbmZvOjphcmd1bWVu
dEZQUjE7CiAgICAgICAgIH0KLSAgICAgICAgbV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6
ZnByVG9SZWdpc3RlcklEKGRlc3RBKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRCh0ZW1w
KSk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJ
RChkZXN0QiksIEpJVENvbXBpbGVyOjpmcHJUb1JlZ2lzdGVySUQoZGVzdEEpKTsKLSAgICAgICAg
bV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKHRlbXApLCBKSVRD
b21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RCKSk7CisgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUoZGVzdEEsIHRlbXApOworICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKGRlc3RCLCBkZXN0QSk7
CisgICAgICAgIG1faml0Lm1vdmVEb3VibGUodGVtcCwgZGVzdEIpOwogICAgIH0KICAgICB2b2lk
IHNldHVwU3R1YkFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewotICAg
ICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxLCBHUFJJbmZv
Ojphcmd1bWVudFJlZ2lzdGVyMj4oYXJnMSwgYXJnMik7CisgICAgICAgIHNldHVwVHdvU3R1YkFy
Z3M8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+KGFyZzEsIGFy
ZzIpOwogICAgIH0KICAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgLy8gSWYgbmVpdGhlciBvZiBh
cmcyL2FyZzMgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2FuIG1vdmUgYXJnMSBpbnRvIHBsYWNl
LgogICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBUd29TdHViQXJncyB0byBmaXggYXJn
Mi9hcmczLgotICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSAm
JiBhcmczICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKSB7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKTsKLSAgICAgICAgICAgIHNl
dHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjIsIEdQUkluZm86OmFyZ3Vt
ZW50UmVnaXN0ZXIzPihhcmcyLCBhcmczKTsKKyAgICAgICAgaWYgKGFyZzIgIT0gR1BSSW5mbzo6
YXJndW1lbnRHUFIxICYmIGFyZzMgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxKSB7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1l
bnRHUFIzPihhcmcyLCBhcmczKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIElmIG5laXRoZXIgb2YgYXJnMS9hcmczIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdl
IGNhbiBtb3ZlIGFyZzIgaW50byBwbGFjZS4KICAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNl
dHVwVHdvU3R1YkFyZ3MgdG8gZml4IGFyZzEvYXJnMy4KLSAgICAgICAgaWYgKGFyZzEgIT0gR1BS
SW5mbzo6YXJndW1lbnRSZWdpc3RlcjIgJiYgYXJnMyAhPSBHUFJJbmZvOjphcmd1bWVudFJlZ2lz
dGVyMikgewotICAgICAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudFJl
Z2lzdGVyMik7Ci0gICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50
UmVnaXN0ZXIxLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMz4oYXJnMSwgYXJnMyk7CisgICAg
ICAgIGlmIChhcmcxICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMiAmJiBhcmczICE9IEdQUkluZm86
OmFyZ3VtZW50R1BSMikgeworICAgICAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgICAgICAgICAgc2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMz4oYXJnMSwgYXJnMyk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiBuZWl0aGVyIG9mIGFyZzEvYXJn
MiBhcmUgaW4gb3VyIHdheSwgdGhlbiB3ZSBjYW4gbW92ZSBhcmczIGludG8gcGxhY2UuCiAgICAg
ICAgIC8vIFRoZW4gd2UgY2FuIHVzZSBzZXR1cFR3b1N0dWJBcmdzIHRvIGZpeCBhcmcxL2FyZzIu
Ci0gICAgICAgIGlmIChhcmcxICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIzICYmIGFyZzIg
IT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUo
YXJnMywgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpOwotICAgICAgICAgICAgc2V0dXBUd29T
dHViQXJnczxHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdp
c3RlcjI+KGFyZzEsIGFyZzIpOworICAgICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjMgJiYgYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgICAgIHNldHVw
VHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+
KGFyZzEsIGFyZzIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTU0Nywy
NSArNTQyLDI1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQnV0IGFyZSB0aGV5IGluIHRoZSBy
aWdodCBvbmVzPwogCiAgICAgICAgIC8vIEZpcnN0LCBlbnN1cmUgYXJnMSBpcyBpbiBwbGFjZS4K
LSAgICAgICAgaWYgKGFyZzEgIT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpIHsKLSAgICAg
ICAgICAgIG1faml0LnN3YXAoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOworICAg
ICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjEpIHsKKyAgICAgICAgICAgIG1f
aml0LnN3YXAoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKIAotICAgICAgICAgICAgLy8g
SWYgYXJnMSB3YXNuJ3QgaW4gYXJndW1lbnRSZWdpc3RlcjEsIG9uZSBvZiBhcmcyL2FyZzMgbXVz
dCBiZS4KLSAgICAgICAgICAgIEFTU0VSVChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0
ZXIxIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOwotICAgICAgICAgICAg
Ly8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRSZWdpc3RlcjEgaXQgbm8gbG9uZ2VyIGlzIChkdWUg
dG8gdGhlIHN3YXApLgorICAgICAgICAgICAgLy8gSWYgYXJnMSB3YXNuJ3QgaW4gYXJndW1lbnRH
UFIxLCBvbmUgb2YgYXJnMi9hcmczIG11c3QgYmUuCisgICAgICAgICAgICBBU1NFUlQoYXJnMiA9
PSBHUFJJbmZvOjphcmd1bWVudEdQUjEgfHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgLy8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRHUFIxIGl0IG5vIGxvbmdl
ciBpcyAoZHVlIHRvIHRoZSBzd2FwKS4KICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBhcmczIG11
c3QgaGF2ZSBiZWVuLiBNYXJrIGhpbSBhcyBtb3ZlZC4KLSAgICAgICAgICAgIGlmIChhcmcyID09
IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKQorICAgICAgICAgICAgaWYgKGFyZzIgPT0gR1BS
SW5mbzo6YXJndW1lbnRHUFIxKQogICAgICAgICAgICAgICAgIGFyZzIgPSBhcmcxOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGFyZzMgPSBhcmcxOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gRWl0aGVyIGFyZzIgJiBhcmczIG5lZWQgc3dhcHBpbmcsIG9yIHdlJ3JlIGFsbCBk
b25lLgotICAgICAgICBBU1NFUlQoKGFyZzIgPT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjIg
fHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMykKLSAgICAgICAgICAgIHx8IChh
cmcyID09IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIzIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJn
dW1lbnRSZWdpc3RlcjIpKTsKKyAgICAgICAgQVNTRVJUKChhcmcyID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiB8fCBhcmczID09IEdQUkluZm86OmFyZ3VtZW50R1BSMykKKyAgICAgICAgICAgIHx8
IChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50R1BSMyB8fCBhcmczID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMikpOwogCi0gICAgICAgIGlmIChhcmcyICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0
ZXIyKQotICAgICAgICAgICAgbV9qaXQuc3dhcChHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMiwg
R1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpOworICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpCisgICAgICAgICAgICBtX2ppdC5zd2FwKEdQUkluZm86OmFyZ3VtZW50
R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRo
b2RzIGFkZCBjYWxscyB0byBDKysgaGVscGVyIGZ1bmN0aW9ucy4KQEAgLTU3MywxMiArNTY4LDEy
IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAKLSAg
ICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSk7Ci0gICAg
ICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUklu
Zm86OmFyZ3VtZW50UmVnaXN0ZXIyKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjApOworICAgICAgICBtX2pp
dC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIsIHJlc3VsdCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdCk7CiAgICAgfQogICAgIHZvaWQgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSWRlbnRpZmllciog
aWRlbnRpZmllcikKICAgICB7CkBAIC01ODgsNDkgKzU4Myw0OSBAQCBwcm90ZWN0ZWQ6CiAgICAg
ewogICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOwogCi0gICAgICAgIG1faml0Lm1vdmUoYXJn
MSwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMCk7CisgICAg
ICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKIAogICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0g
ICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVSZWdpc3RlciwgcmVzdWx0KTsK
KyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAg
ICB9CiAgICAgdm9pZCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNGbHVz
aGVkKCkpOwogCi0gICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdp
c3RlcjEpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMCk7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVSZWdpc3RlciwgcmVzdWx0KTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICB9CiAgICAgdm9pZCBjYWxsT3BlcmF0
aW9uKFpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAK
ICAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIpOwotICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVy
MCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIsIHJlc3VsdCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdCk7CiAgICAgfQogICAgIHZvaWQgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOwogCiAgICAgICAgIHNldHVwU3R1
YkFyZ3VtZW50cyhhcmcxLCBhcmcyKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjApOworICAgICAgICBtX2pp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogCiAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKLSAg
ICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZVJlZ2lzdGVyLCByZXN1bHQpOwor
ICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOwogICAg
IH0KICAgICB2b2lkIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpKUCBvcGVyYXRpb24s
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAg
IEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAKICAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEs
IGFyZzIpOwotICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHBv
aW50ZXIpLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMyk7Ci0gICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsK
KyAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQpAQCAtNjQzLDcgKzYzOCw3
IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKIAogICAgICAgICBz
ZXR1cFN0dWJBcmd1bWVudHMoYXJnMSwgYXJnMiwgYXJnMyk7Ci0gICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsK
KyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CiAgICAgfQpAQCAtNjUxLDEwICs2NDYsMTAgQEAgcHJvdGVjdGVkOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKIAotICAgICAgICBzZXR1cFR3b1N0dWJBcmdz
PEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjAsIEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjE+KGFy
ZzEsIGFyZzIpOworICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEZQUkluZm86OmFyZ3VtZW50RlBS
MCwgRlBSSW5mbzo6YXJndW1lbnRGUFIxPihhcmcxLCBhcmcyKTsKIAogICAgICAgICBtX2ppdC5h
cHBlbmRDYWxsKG9wZXJhdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGls
ZXI6OmZwUmV0dXJuVmFsdWVSZWdpc3RlciwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChy
ZXN1bHQpKTsKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UiwgcmVzdWx0KTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQpAQCAtNzA0LDcgKzY5OSw3IEBAIHByb3Rl
Y3RlZDoKICAgICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgogICAgIFZl
Y3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87CiAgICAgUmVnaXN0ZXJC
YW5rPEdQUkluZm8+IG1fZ3ByczsKLSAgICBSZWdpc3RlckJhbms8RlBSQmFua0luZm8+IG1fZnBy
czsKKyAgICBSZWdpc3RlckJhbms8RlBSSW5mbz4gbV9mcHJzOwogCiAgICAgVmVjdG9yPE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbD4gbV9ibG9ja0hlYWRzOwogICAgIHN0cnVjdCBCcmFuY2hSZWNvcmQg
ewpAQCAtODA4LDExICs4MDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Zwck9ySW52
YWxpZDsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGdwcigpCi0g
ICAgewotICAgICAgICByZXR1cm4gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIoKSk7
Ci0gICAgfQotCiBwcml2YXRlOgogICAgIEpJVENvZGVHZW5lcmF0b3IqIG1faml0OwogICAgIE5v
ZGVJbmRleCBtX2luZGV4OwpAQCAtOTEzLDEyICs5MDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2ZwcjsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGdw
cigpCi0gICAgewotICAgICAgICBBU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7Ci0gICAg
ICAgIHJldHVybiBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKG1fZnByKTsKLSAgICB9Ci0K
IHByb3RlY3RlZDoKICAgICBGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBGUFJS
ZWcgbG9ja2VkRlBSKQogICAgICAgICA6IG1faml0KGppdCkKQEAgLTk0Niw4ICs5MzAsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBHUFJSZWcgbG9ja2VkUmVzdWx0KEpJVENvZGVH
ZW5lcmF0b3IqIGppdCkKICAgICB7Ci0gICAgICAgIGppdC0+bG9jayhHUFJJbmZvOjpyZXR1cm5W
YWx1ZVJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0
ZXI7CisgICAgICAgIGppdC0+bG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHJldHVybiBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjsKICAgICB9CiB9OwogCkBAIC05NjEsOCAr
OTQ1LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgRlBSUmVnIGxvY2tlZFJlc3Vs
dChKSVRDb2RlR2VuZXJhdG9yKiBqaXQpCiAgICAgewotICAgICAgICBqaXQtPmxvY2soSklUQ29t
cGlsZXI6OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgcmV0dXJuIEpJVENvbXBpbGVyOjpyZXR1
cm5WYWx1ZUZQUjsKKyAgICAgICAgaml0LT5sb2NrKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsK
KyAgICAgICAgcmV0dXJuIEZQUkluZm86OnJldHVyblZhbHVlRlBSOwogICAgIH0KIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZp
c2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNiArNDcsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6
ZmlsbE51bWVyaWNUb0RvdWJsZShObwogICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkgewogICAg
ICAgICBBU1NFUlQobm9kZS5vcCA9PSBEb3VibGVDb25zdGFudCk7CiAgICAgICAgIG1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERv
dWJsZVRvSW50cHRyKHZhbHVlT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpKSkpLCB0ZW1wb3Jh
cnkpOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHJUb1JlZ2lzdGVySUQo
ZnByKSk7CisgICAgICAgIG1vdmVQdHJUb0RvdWJsZSh0ZW1wb3JhcnksIGZwcik7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkp
LCB0ZW1wb3JhcnkpOwogICAgICAgICBKdW1wIGlzSW50ZWdlciA9IGJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0ZW1wb3JhcnksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CiAgICAgICAgIGppdEFzc2VydElzSlNEb3VibGUodGVtcG9yYXJ5KTsKICAgICAg
ICAgYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGVtcG9yYXJ5KTsKLSAg
ICAgICAgbW92ZVB0clRvRG91YmxlKHRlbXBvcmFyeSwgZnByVG9SZWdpc3RlcklEKGZwcikpOwor
ICAgICAgICBtb3ZlUHRyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHIpOwogICAgICAgICBKdW1wIGhh
c1VuYm94ZWREb3VibGUgPSBqdW1wKCk7CiAgICAgICAgIGlzSW50ZWdlci5saW5rKHRoaXMpOwot
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZSh0ZW1wb3JhcnksIGZwclRvUmVnaXN0ZXJJRChm
cHIpKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHIpOwogICAg
ICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsodGhpcyk7CiAgICAgfQogfQpAQCAtMTQyLDI1ICsx
NDIsMjUgQEAgdm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTgogICAgIH0K
IAogICAgIC8vIFNwaWxsIGFsbCBGUFJzIGluIHVzZSBieSB0aGUgc3BlY3VsYXRpdmUgcGF0aC4K
LSAgICBmb3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5leHQoZnBy
KSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gY2hlY2subV9mcHJJbmZvW2Zwcl07
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraW5kZXgpIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGNoZWNr
Lm1fZnBySW5mb1tpbmRleF07CiAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IGdyYXBoKClbbm9kZUluZGV4XS52aXJ0dWFsUmVnaXN0ZXIoKTsKIAotICAgICAgICBt
b3ZlRG91YmxlVG9QdHIoZnByVG9SZWdpc3RlcklEKGZwciksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgbW92ZURvdWJsZVRvUHRyKEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpLCBHUFJJbmZv
OjpyZWdUMCk7CiAgICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgfQogCiAgICAgLy8gRmlsbCBhbGwgRlBScyBp
biB1c2UgYnkgdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgotICAgIGZvciAoRlBSUmVnIGZwciA9
IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBlbnRyeS5tX2ZwckluZm9bZnByXTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgewor
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZW50cnkubV9mcHJJbmZvW2luZGV4XTsKICAg
ICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBmaWxsTnVtZXJpY1RvRG91YmxlKG5vZGVJbmRleCwgZnByLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgIGZpbGxOdW1lcmljVG9Eb3VibGUobm9kZUluZGV4LCBGUFJJbmZvOjp0b1Jl
Z2lzdGVyKGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIH0KIAogICAgIC8vIEZpbGwgYWxs
IEdQUnMgaW4gdXNlIGJ5IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KQEAgLTMxMywxOSArMzEz
LDE5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAgICAgICAg
Ly8gdG8gbG9vayB1cCBoYW5kbGVyIGluZm9ybWF0aW9uLiBUaGUgaWRlbnRpZmllciB3ZSB1c2Ug
aXMgdGhlIHJldHVybiBhZGRyZXNzCiAgICAgICAgIC8vIG9mIHRoZSBjYWxsIG91dCBmcm9tIEpJ
VCBjb2RlIHRoYXQgdGhyZXcgdGhlIGV4Y2VwdGlvbjsgdGhpcyBpcyBzdGlsbAogICAgICAgICAv
LyBhdmFpbGFibGUgb24gdGhlIHN0YWNrLCBqdXN0IGJlbG93IHRoZSBzdGFjayBwb2ludGVyIQot
ICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dFJlZ2lzdGVyMCk7Ci0gICAgICAgIHBlZWsoR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEsIC0x
KTsKKyAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgcGVlayhHUFJJbmZvOjphcmd1bWVudEdQUjEsIC0xKTsKICAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKCksIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBsZWF2ZXMgdGhlIGhh
bmRsZXIgQ2FsbEZyYW1lKiBpbiB0aGUgcmV0dXJuVmFsdWVSZWdpc3RlciwKLSAgICAgICAgLy8g
YW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIGluIHJldHVyblZhbHVlUmVnaXN0ZXIyLgot
ICAgICAgICBqdW1wKEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIyKTsKKyAgICAgICAgLy8g
bG9va3VwRXhjZXB0aW9uSGFuZGxlciBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB0
aGUgcmV0dXJuVmFsdWVHUFIsCisgICAgICAgIC8vIGFuZCB0aGUgYWRkcmVzcyBvZiB0aGUgaGFu
ZGxlciBpbiByZXR1cm5WYWx1ZUdQUjIuCisgICAgICAgIGp1bXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKICAgICB9CiAKICAgICAvLyBHZW5lcmF0ZSB0aGUgcmVnaXN0ZXIgZmlsZSBjaGVj
azsgaWYgdGhlIGZhc3QgY2hlY2sgaW4gdGhlIGZ1bmN0aW9uIGhlYWQgZmFpbHMsCiAgICAgLy8g
d2UgbmVlZCB0byBjYWxsIG91dCB0byBhIGhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVy
IG1vcmUgc3BhY2UgaXMgYXZhaWxhYmxlLgogICAgIC8vIEZJWE1FOiBjaGFuZ2UgdGhpcyBmcm9t
IGEgY3RpIGNhbGwgdG8gYSBERkcgc3R5bGUgb3BlcmF0aW9uIChub3JtYWwgQyBjYWxsaW5nIGNv
bnZlbnRpb25zKS4KICAgICByZWdpc3RlckZpbGVDaGVjay5saW5rKHRoaXMpOwotICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsKKyAgICBt
b3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIHBv
a2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklU
U3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwogICAgIENhbGwgY2FsbFJl
Z2lzdGVyRmlsZUNoZWNrID0gY2FsbCgpOwogICAgIGp1bXAoZnJvbVJlZ2lzdGVyRmlsZUNoZWNr
KTsKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24o
SklUQ29kCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1Qy
KTsKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIsIFJlZ2lzdGVy
RmlsZTo6UmV0dXJuUEMpOwogICAgIGJyYW5jaDMyKEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwgSW1t
MzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywg
dGhpcyk7Ci0gICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRS
ZWdpc3RlcjApOworICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09G
RlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7
CiAgICAgQ2FsbCBjYWxsQXJpdHlDaGVjayA9IGNhbGwoKTsKICAgICBtb3ZlKEdQUkluZm86OnJl
Z1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDI4ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgeyBy
ZXR1cm4gbV9nbG9iYWxEYXRhOyB9CiAKICNpZiBDUFUoWDg2XzY0KQotICAgIC8vIFRlbXBvcmFy
eSByZWdpc3RlcnMuCi0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QwID0gWDg2
UmVnaXN0ZXJzOjp4bW0wOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9
IFg4NlJlZ2lzdGVyczo6eG1tMTsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVn
VDIgPSBYODZSZWdpc3RlcnM6OnhtbTI7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1QzID0gWDg2UmVnaXN0ZXJzOjp4bW0zOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUNCA9IFg4NlJlZ2lzdGVyczo6eG1tNDsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdp
c3RlcklEIGZwUmVnVDUgPSBYODZSZWdpc3RlcnM6OnhtbTU7Ci0KLSAgICAvLyBUaGVzZSBjb25z
dGFudHMgcHJvdmlkZSBib3RoIEZQUmVnaXN0ZXJJRCAmIEZQUlJlZyBzdHlsZSBuYW1lcyBmb3Ig
dGhlCi0gICAgLy8gZmxvYXRpbmcgcG9pbnQgYXJndW1lbnQgJiByZXR1cm4gdmFsdWUgcmVnaXN0
ZXIuCi0gICAgc3RhdGljIGNvbnN0IEZQUlJlZyBhcmd1bWVudEZQUjAgPSBmcHIwOwotICAgIHN0
YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRGUFIxID0gZnByMTsKLSAgICBzdGF0aWMgY29uc3Qg
RlBSUmVnIGFyZ3VtZW50RlBSMiA9IGZwcjI7Ci0gICAgc3RhdGljIGNvbnN0IEZQUlJlZyBhcmd1
bWVudEZQUjMgPSBmcHIzOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBBcmd1bWVu
dFJlZ2lzdGVyMCA9IGZwUmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcEFy
Z3VtZW50UmVnaXN0ZXIxID0gZnBSZWdUMTsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklE
IGZwQXJndW1lbnRSZWdpc3RlcjIgPSBmcFJlZ1QyOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBBcmd1bWVudFJlZ2lzdGVyMyA9IGZwUmVnVDM7Ci0gICAgc3RhdGljIGNvbnN0IEZQ
UlJlZyByZXR1cm5WYWx1ZUZQUiA9IGZwcjA7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJldHVyblZhbHVlUmVnaXN0ZXIgPSBmcFJlZ1QwOwotCi0KICAgICB2b2lkIHByZXNlcnZl
UmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJSZWcgcmVnKQogICAgIHsKICAgICAgICAgcG9wKHJl
Zyk7CkBAIC0xODAsMTMgKzE1OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdp
c3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRlBSZWdpc3RlcklEIGZwclRvUmVnaXN0ZXJJ
RChGUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZyA8IG51bWJlck9mRlBScyk7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgaWRGb3JSZWdpc3RlcltudW1iZXJP
ZkZQUnNdID0geyBmcFJlZ1QwLCBmcFJlZ1QxLCBmcFJlZ1QyLCBmcFJlZ1QzLCBmcFJlZ1Q0LCBm
cFJlZ1Q1IH07Ci0gICAgICAgIHJldHVybiBpZEZvclJlZ2lzdGVyW3JlZ107Ci0gICAgfQotCiAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgdm9pZCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gODUy
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsMTEgKzI3LDExIEBACiAjZGVmaW5lIERGR05vZGVfaAogCiAvLyBFbWl0IHZhcmlv
dXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0
aGUgZGF0YWZsb3cgZ3JhcGhzLgotI2RlZmluZSBERkdfREVCVUdfVkVSQk9TRSAwCisjZGVmaW5l
IERGR19ERUJVR19WRVJCT1NFIDEKIC8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGR5bmFtaWMgY2hl
Y2tzIGludG8gdGhlIGluc3RydWN0aW9uIHN0cmVhbS4KLSNkZWZpbmUgREZHX0pJVF9BU1NFUlQg
MAorI2RlZmluZSBERkdfSklUX0FTU0VSVCAxCiAvLyBDb25zaXN0ZW5jeSBjaGVjayBjb250ZW50
cyBjb21waWxlciBkYXRhIHN0cnVjdHVyZXMuCi0jZGVmaW5lIERGR19DT05TSVNURU5DWV9DSEVD
SyAwCisjZGVmaW5lIERGR19DT05TSVNURU5DWV9DSEVDSyAxCiAvLyBFbWl0IGEgYnJlYWtwb2lu
dCBpbnRvIHRoZSBoZWFkIG9mIGV2ZXJ5IGdlbmVyYXRlZCBmdW5jdGlvbiwgdG8gYWlkIGRlYnVn
Z2luZyBpbiBHREIuCiAjZGVmaW5lIERGR19KSVRfQlJFQUtfT05fRVZFUllfRlVOQ1RJT04gMAog
Ly8gRW1pdCBhIGJyZWFrcG9pbnQgaW50byB0aGUgaGVhZCBvZiBldmVyeSBnZW5lcmF0ZWQgbm9k
ZSwgdG8gYWlkIGRlYnVnZ2luZyBpbiBHREIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gODUyNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsMTQgKzQ2LDEzIEBAIEVudHJ5TG9jYXRpb246OkVudHJ5TG9jYXRp
b24oTWFjcm9Bc3NlbWIKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2dwckluZm9baXRl
ci5pbmRleCgpXS5ub2RlSW5kZXggPSBOb05vZGU7CiAgICAgfQotICAgIGZvciAoRlBSUmVnIGZw
ciA9IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBqaXQtPm1fZnBycy5uYW1lKGZwcik7Ci0gICAg
ICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewotICAg
ICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07CisgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IGppdC0+bV9mcHJz
LmJlZ2luKCk7IGl0ZXIgIT0gaml0LT5tX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBp
ZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIubmFtZSgp
XTsKICAgICAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1h
dERvdWJsZSk7Ci0gICAgICAgICAgICBtX2ZwckluZm9bZnByXSA9IGluZm8ubm9kZUluZGV4KCk7
CisgICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXSA9IGluZm8ubm9kZUluZGV4KCk7
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9mcHJJbmZvW2Zwcl0gPSBOb05vZGU7Cisg
ICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXSA9IE5vTm9kZTsKICAgICB9CiB9CiAK
QEAgLTYyLDMwICs2MSwyOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjp2YWx1ZVRvTnVtYmVy
KEpTCiAgICAgR1BSUmVnIGpzVmFsdWVHcHIgPSBvcGVyYW5kLmdwcigpOwogICAgIEdQUlJlZyB0
ZW1wR3ByID0gYWxsb2NhdGUoKTsgLy8gRklYTUU6IGNhbiB3ZSBza2lwIHRoaXMgYWxsb2NhdGlv
biBvbiB0aGUgbGFzdCB1c2Ugb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXI/CiAKLSAgICBKSVRDb21w
aWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChm
cHIpOwotCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9uTnVtZXJpYyA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhl
cmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgIG1faml0Lm1vdmUo
anNWYWx1ZUdwciwgdGVtcEdwcik7CiAgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgdGVtcEdwcik7Ci0gICAgbV9qaXQubW92ZVB0clRvRG91YmxlKHRlbXBH
cHIsIGZwUmVnKTsKKyAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwgZnByKTsKICAg
ICBKSVRDb21waWxlcjo6SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCiAg
ICAgLy8gTmV4dCBoYW5kbGUgY2VsbHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKICAgICBub25O
dW1lcmljLmxpbmsoJm1faml0KTsKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhmcHIsIGpz
VmFsdWVHcHIpOwotICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgR1BSSW5mbzo6YXJndW1lbnRS
ZWdpc3RlcjEpOwotICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsKKyAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIpOwotICAgIG1faml0Lm1vdmVEb3Vi
bGUoSklUQ29tcGlsZXI6OmZwUmV0dXJuVmFsdWVSZWdpc3RlciwgZnBSZWcpOworICAgIG1faml0
Lm1vdmVEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIGZwcik7CiAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhmcHIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvTnVt
YmVyID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIC8vIEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vy
cy4KICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKGpzVmFsdWVHcHIsIGZwUmVnKTsKKyAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZShqc1ZhbHVlR3ByLCBmcHIpOwogICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwog
ICAgIGhhc0NhbGxlZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKIApAQCAtMTAwLDEwICs5NywxMCBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjp2YWx1ZVRvSW50MzIoSlNWCiAKICAgICAvLyBGaXJz
dCBoYW5kbGUgbm9uLWludGVnZXJzCiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0
LCBqc1ZhbHVlR3ByKTsKLSAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIEdQUkluZm86OmFyZ3Vt
ZW50UmVnaXN0ZXIxKTsKLSAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMCk7CisgICAgbV9qaXQubW92ZShqc1ZhbHVlR3By
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIpOwotICAgIG1faml0Lnplcm9F
eHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIsIHJlc3VsdCk7CisgICAg
bV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7
CiAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHQpOwogICAgIEpJVENvbXBpbGVyOjpK
dW1wIGhhc0NhbGxlZFRvSW50MzIgPSBtX2ppdC5qdW1wKCk7CiAgICAgCkBAIC0xMTUsMTUgKzEx
MiwxMyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjp2YWx1ZVRvSW50MzIoSlNWCiAKIHZvaWQg
Tm9uU3BlY3VsYXRpdmVKSVQ6Om51bWJlclRvSW50MzIoRlBSUmVnIGZwciwgR1BSUmVnIGdwcikK
IHsKLSAgICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZw
clRvUmVnaXN0ZXJJRChmcHIpOwotCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9J
bnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwUmVnLCBncHIsIEpJ
VENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7CisgICAgSklUQ29tcGlsZXI6
Okp1bXAgdHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0lu
dDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOwog
CiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKIAotICAgIG1faml0Lm1vdmVEb3Vi
bGUoZnBSZWcsIEpJVENvbXBpbGVyOjpmcEFyZ3VtZW50UmVnaXN0ZXIwKTsKKyAgICBtX2ppdC5t
b3ZlRG91YmxlKGZwciwgRlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKICAgICBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKHRvSW50MzIpOwotICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQ
UkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIsIGdwcik7CisgICAgbV9qaXQuemVyb0V4dGVuZDMy
VG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGdwcik7CiAKICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKGdwcik7CiAKQEAgLTI3NCwxMCArMjY5LDEwIEBAIHZvaWQgTm9uU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CiAgICAg
ICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEZQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9E
b3VibGUob3AxLmdwcigpLCByZXN1bHQuZnByKCkpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHBvc2l0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJU
aGFuT3JFcXVhbCwgb3AxLmdwcigpLCBUcnVzdGVkSW1tMzIoMCkpOwotICAgICAgICBtX2ppdC5h
ZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgIG1faml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVB
ZGRyZXNzKCZ0d29Ub1RoZTMyKSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgcG9zaXRpdmUubGlu
aygmbV9qaXQpOwogCiAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGls
ZUluZGV4KTsKQEAgLTI4Nyw3ICsyODIsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKFNwZWN1bGF0CiAgICAgY2FzZSBJbnQzMlRvTnVtYmVyOiB7CiAgICAgICAgIEludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdw
cigpLCByZXN1bHQuZnByKCkpOwogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMyOSw3ICszMjQsNyBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGlmIChp
c0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkpIHsKICAgICAgICAgICAgIEludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigp
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUo
b3AxLmdwcigpLCByZXN1bHQuZnByKCkpOwogICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3Vs
dC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTMzNyw3ICszMzIsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1
bGF0CiAgICAgICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSkpIHsKICAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAgICAgIEZQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJs
ZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CiAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtMzY4LDkgKzM2Myw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3Bl
Y3VsYXQKICAgICAgICAgRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwogICAg
ICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIHJlZzEgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVnMiA9IG9wMi5ncHIoKTsKLSAgICAgICAgbV9qaXQu
YWRkRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcx
ID0gb3AxLmZwcigpOworICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAg
bV9qaXQuYWRkRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKICAgICAgICAgZG91
YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
QEAgLTM4MSw5ICszNzYsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1
bGF0CiAgICAgICAgIERvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpGUFJlZ2lzdGVySUQgcmVnMSA9IG9wMS5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkZQUmVnaXN0ZXJJRCByZWcyID0gb3AyLmdwcigpOwotICAgICAgICBtX2ppdC5zdWJEb3Vi
bGUocmVnMSwgcmVnMiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEu
ZnByKCk7CisgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5z
dWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKIAogICAgICAgICBkb3VibGVSZXN1
bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzk0
LDkgKzM4OSw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAg
ICAgICAgRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwogICAgICAgICBGUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RlBSZWdpc3RlcklEIHJlZzEgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpGUFJlZ2lzdGVySUQgcmVnMiA9IG9wMi5ncHIoKTsKLSAgICAgICAgbV9qaXQubXVsRG91Ymxl
KHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZw
cigpOworICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgbV9qaXQubXVs
RG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKICAgICAgICAgZG91YmxlUmVzdWx0
KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTQwNyw5
ICs0MDIsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAg
ICAgIERvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgRlBSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJl
Z2lzdGVySUQgcmVnMSA9IG9wMS5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVn
aXN0ZXJJRCByZWcyID0gb3AyLmdwcigpOwotICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwg
cmVnMiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Cisg
ICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5kaXZEb3VibGUo
cmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKIAogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0
LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNjIxLDE3ICs2MTYs
MTcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogCiAgICAgY2Fz
ZSBSZXR1cm46IHsKICAgICAgICAgQVNTRVJUKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyICE9
IEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUklu
Zm86OnJldHVyblZhbHVlUmVnaXN0ZXIpOwotICAgICAgICBBU1NFUlQoR1BSSW5mbzo6cmV0dXJu
VmFsdWVSZWdpc3RlciAhPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIEFT
U0VSVChHUFJJbmZvOjpyZWdUMSAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IEFTU0VSVChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiAhPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CiAKICNpZiBERkdfU1VDQ0VTU19TVEFUUwogICAgICAgICBzdGF0aWMgU2FtcGxpbmdD
b3VudGVyIGNvdW50ZXIoIk5vblNwZWN1bGF0aXZlSklUIik7CiAgICAgICAgIG1faml0LmVtaXRD
b3VudChjb3VudGVyKTsKICNlbmRpZgogCi0gICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGlu
IHJldHVyblZhbHVlUmVnaXN0ZXIuCisgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJl
dHVyblZhbHVlR1BSLgogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVS
ZWdpc3Rlcik7CisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CiAKICAgICAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAgICAg
IG1faml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJu
UEMsIEdQUkluZm86OnJlZ1QxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9uU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDg1MjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw3ICs1NCw3IEBAIHN0cnVjdCBFbnRyeUxvY2F0aW9uIHsKICAgICAgICAgRGF0YUZvcm1h
dCBmb3JtYXQ7CiAgICAgfTsKICAgICBSZWdpc3RlckluZm8gbV9ncHJJbmZvW0dQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzXTsKLSAgICBOb2RlSW5kZXggbV9mcHJJbmZvW251bWJlck9mRlBSc107
CisgICAgTm9kZUluZGV4IG1fZnBySW5mb1tGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107CiB9
OwogCiAvLyA9PT0gTm9uU3BlY3VsYXRpdmVKSVQgPT09CkBAIC0xNzgsMTAgKzE3OCw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKICAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVyLm5hbWUoKSwgZXhjbHVk
ZSk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChGUFJSZWcgZnByID0gZnByMDsgZnByIDwgbnVt
YmVyT2ZGUFJzOyBuZXh0KGZwcikpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1l
ID0gbV9mcHJzLm5hbWUoZnByKTsKLSAgICAgICAgICAgIGlmIChuYW1lICE9IEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxGUFIobmFtZSwgY2FuVHJh
bXBsZSk7CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsg
aXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFt
ZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgc2lsZW50U3Bp
bGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUpOwogICAgICAgICB9CiAgICAgfQogICAgIHZv
aWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoRlBSUmVnIGV4Y2x1ZGUsIEdQUlJlZyBwcmVzZXJ2
ZSA9IEludmFsaWRHUFJSZWcpCkBAIC0xOTQsMTAgKzE5Myw5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAg
ICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVyLm5hbWUoKSk7CiAgICAgICAgIH0KLSAgICAgICAg
Zm9yIChGUFJSZWcgZnByID0gZnByMDsgZnByIDwgbnVtYmVyT2ZGUFJzOyBuZXh0KGZwcikpIHsK
LSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gbV9mcHJzLm5hbWUoZnByKTsKLSAg
ICAgICAgICAgIGlmIChuYW1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAg
ICAgICAgc2lsZW50U3BpbGxGUFIobmFtZSwgY2FuVHJhbXBsZSwgZXhjbHVkZSk7CisgICAgICAg
IGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgc2lsZW50U3BpbGxGUFIoaXRlci5uYW1l
KCksIGNhblRyYW1wbGUsIGV4Y2x1ZGUpOwogICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVkZSkKQEAgLTIwNiwxMCArMjA0LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgaWYgKGV4Y2x1ZGUgPT0gR1BSSW5mbzo6cmVnVDApCiAgICAgICAg
ICAgICBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVnVDE7CiAgICAgICAgIAotICAgICAgICBmb3Ig
KEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5leHQoZnByKSkgewotICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBtX2ZwcnMubmFtZShmcHIpOwotICAgICAg
ICAgICAgaWYgKG5hbWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgICAg
ICBzaWxlbnRGaWxsRlBSKG5hbWUsIGNhblRyYW1wbGUpOworICAgICAgICBmb3IgKGZwcl9pdGVy
YXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIp
IHsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQorICAgICAgICAgICAgICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUp
OwogICAgICAgICB9CiAgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVn
aW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0
ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0yMjAsMTUgKzIxNywxMCBA
QCBwcml2YXRlOgogICAgIHsKICAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpy
ZWdUMDsKICAgICAgICAgCi0gICAgICAgIGZvciAoRlBSUmVnIGZwciA9IGZwcjA7IGZwciA8IG51
bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFt
ZSA9IG1fZnBycy5uYW1lKGZwcik7Ci0gICAgICAgICAgICBpZiAobmFtZSAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgICAgIEFTU0VSVChm
cHIgIT0gZXhjbHVkZSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShleGNs
dWRlKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxGUFIobmFtZSwgY2FuVHJh
bXBsZSwgZXhjbHVkZSk7CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMu
YmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYg
KGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKGV4Y2x1ZGUsIGl0ZXIucmVnSUQoKSAhPSBleGNsdWRlKTsKKyAgICAg
ICAgICAgICAgICBzaWxlbnRGaWxsRlBSKGl0ZXIubmFtZSgpLCBjYW5UcmFtcGxlLCBleGNsdWRl
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBp
dGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAkocmV2aXNp
b24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
bV9iYW5rLT5yZWxlYXNlQXRJbmRleChtX2luZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIFJl
Z0lEIGdwcigpIGNvbnN0CisgICAgICAgIFJlZ0lEIHJlZ0lEKCkgY29uc3QKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjp0b1JlZ2lzdGVyKG1faW5kZXgpOwogICAgICAg
ICB9CkBAIC0yMzMsNyArMjMzLDcgQEAgcHVibGljOgogI2lmbmRlZiBOREVCVUcKICAgICAgICAg
Y29uc3QgY2hhciogZGVidWdOYW1lKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIEJhbmtJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpOworICAgICAgICAgICAgcmV0dXJuIEJhbmtJ
bmZvOjpkZWJ1Z05hbWUocmVnSUQoKSk7CiAgICAgICAgIH0KICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDE0ICsxNTEsMTMgQEAgU3BlY3VsYXRpb25DaGVj
azo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1f
Z3BySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IE5vTm9kZTsKICAgICB9Ci0gICAgZm9y
IChGUFJSZWcgZnByID0gZnByMDsgZnByIDwgbnVtYmVyT2ZGUFJzOyBuZXh0KGZwcikpIHsKLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGppdC0+bV9mcHJzLm5hbWUo
ZnByKTsKLSAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKSB7Ci0gICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9ICBqaXQtPm1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0g
aml0LT5tX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBqaXQtPm1fZnBycy5lbmQoKTsgKytpdGVyKSB7
CisgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7Cisg
ICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9ICBqaXQtPm1fZ2VuZXJhdGlvbkluZm9b
aXRlci5uYW1lKCldOwogICAgICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9
PSBEYXRhRm9ybWF0RG91YmxlKTsKLSAgICAgICAgICAgIG1fZnBySW5mb1tmcHJdID0gaW5mby5u
b2RlSW5kZXgoKTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldID0gaW5mby5u
b2RlSW5kZXgoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ZwckluZm9bZnByXSA9
IE5vTm9kZTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldID0gTm9Ob2RlOwog
ICAgIH0KIH0KIApAQCAtNzc1LDE3ICs3NzQsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBSZXR1cm46IHsKICAgICAgICAgQVNTRVJUKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyICE9IEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgQVNT
RVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIpOwotICAg
ICAgICBBU1NFUlQoR1BSSW5mbzo6cmV0dXJuVmFsdWVSZWdpc3RlciAhPSBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAhPSBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiAhPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICNpZiBERkdfU1VDQ0VTU19TVEFU
UwogICAgICAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVyIGNvdW50ZXIoIlNwZWN1bGF0aXZlSklU
Iik7CiAgICAgICAgIG1faml0LmVtaXRDb3VudChjb3VudGVyKTsKICNlbmRpZgogCi0gICAgICAg
IC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlUmVnaXN0ZXIuCisgICAgICAgIC8v
IFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSLgogICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIo
KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVSZWdpc3Rlcik7CisgICAgICAgIG1faml0Lm1vdmUob3Ax
LmdwcigpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICAgICAgLy8gR3JhYiB0aGUg
cmV0dXJuIGFkZHJlc3MuCiAgICAgICAgIG1faml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDg1
MjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHN0cnVjdCBTcGVjdWxhdGlvbkNoZWNrIHsK
ICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CiAgICAgfTsKICAgICBSZWdpc3RlckluZm8gbV9n
cHJJbmZvW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKLSAgICBOb2RlSW5kZXggbV9mcHJJ
bmZvW251bWJlck9mRlBSc107CisgICAgTm9kZUluZGV4IG1fZnBySW5mb1tGUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyc107CiB9OwogdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8U3BlY3VsYXRpb25D
aGVjaywgMTY+IFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3I7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91599</attachid>
            <date>2011-04-28 17:15:45 -0700</date>
            <delta_ts>2011-04-28 17:16:58 -0700</delta_ts>
            <desc>Tweaked Patch!</desc>
            <filename>59763.2.patch</filename>
            <type>text/plain</type>
            <size>55314</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODUyNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDQtMjggIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTc2MworICAgICAgICBERkcgSklUIC0g
VW5pZnkgRlBSUmVnICYgRlBSZWdpc3RlcklECisKKyAgICAgICAgKEZvbGxvd2luZyBvbiBmcm9t
IEdQUlJlZy9SZWdpc3RlcklEIHVuaWZpY2F0aW9uKS4KKworICAgICAgICAqIGRmZy9ERkdGUFJJ
bmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6RlBSSW5mbzo6dG9SZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkRGRzo6RlBSSW5mbzo6ZGVidWdOYW1lKToKKyAgICAgICAgKiBkZmcvREZHR1BSSW5m
by5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmJveERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6dW5ib3hE
b3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZsdXNoUmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0ZsdXNoZWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNldHVwVHdvU3R1YkFyZ3MpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNldHVwU3R1YkFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FsbE9wZXJhdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6R1BSUmVzdWx0Ojpsb2NrZWRSZXN1bHQpOgorICAgICAgICAoSlND
OjpERkc6OkZQUlJlc3VsdDo6bG9ja2VkUmVzdWx0KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpmaWxsTnVtZXJpY1Rv
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxh
dGl2ZVRvTm9uU3BlY3VsYXRpdmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpj
b21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpFbnRyeUxvY2F0aW9uOjpFbnRyeUxvY2F0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6dmFsdWVUb051bWJlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9JbnQzMik6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6Om51bWJlclRvSW50MzIpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
Tm9uU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJ
VDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1
bGF0aXZlSklUOjpzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBkZmcvREZHUmVn
aXN0ZXJCYW5rLmg6CisgICAgICAgIChKU0M6OkRGRzo6UmVnaXN0ZXJCYW5rOjppdGVyYXRvcjo6
cmVnSUQpOgorICAgICAgICAoSlNDOjpERkc6OlJlZ2lzdGVyQmFuazo6aXRlcmF0b3I6OmRlYnVn
TmFtZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisKIDIwMTEtMDQtMjggIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZlcnQgIjxodHRwOi8vd2Via2l0Lm9yZy9iLzU5NzA1PiBXVEY6
OnBvc3RUaW1lcigpIGxlYWtzIGEgQ0ZSdW5Mb29wVGltZXJSZWYgZXZlcnkgdGltZSBpdCdzIGNh
bGxlZCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCShyZXZpc2lv
biA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywzMyArMzMsNjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi0vLyBBYnN0cmFjdGVkIHNlcXVlbnRpYWwgbnVtYmVyaW5nIG9mIGF2YWlsYWJs
ZSBtYWNoaW5lIHJlZ2lzdGVycyAoYXMgb3Bwb3NlZCB0byBHUFJSZWcsCi0vLyB3aGljaCBhcmUg
bm9uLXNlcXVlbnRpYWwsIGFuZCBub3QgYWJzdHJhY3RlZCBmcm9tIHRoZSByZWdpc3RlciBudW1i
ZXJpbmcgdXNlZCBieSB0aGUgdW5kZXJseWluZyBwcm9jZXNzb3IpLgotZW51bSBGUFJSZWcgeyBm
cHIwLCBmcHIxLCBmcHIyLCBmcHIzLCBmcHI0LCBmcHI1LCBudW1iZXJPZkZQUnMsIEludmFsaWRG
UFJSZWcgPSAweEZGRkZGRkZGIH07Ci0KLWlubGluZSBGUFJSZWcgbmV4dChGUFJSZWcmIHJlZykK
LXsKLSAgICBBU1NFUlQocmVnIDwgbnVtYmVyT2ZGUFJzKTsKLSAgICByZXR1cm4gcmVnID0gc3Rh
dGljX2Nhc3Q8RlBSUmVnPihyZWcgKyAxKTsKLX0KK3R5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkZQ
UmVnaXN0ZXJJRCBGUFJSZWc7CisjZGVmaW5lIEludmFsaWRGUFJSZWcgKChGUFJSZWcpLTEpCiAK
LWNsYXNzIEZQUkJhbmtJbmZvIHsKK2NsYXNzIEZQUkluZm8gewogcHVibGljOgogICAgIHR5cGVk
ZWYgRlBSUmVnIFJlZ2lzdGVyVHlwZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVy
T2ZSZWdpc3RlcnMgPSA2OwogCisgICAgLy8gVGVtcG9yYXJ5IHJlZ2lzdGVycy4KKyAgICBzdGF0
aWMgY29uc3QgRlBSUmVnIGZwUmVnVDAgPSBYODZSZWdpc3RlcnM6OnhtbTA7CisgICAgc3RhdGlj
IGNvbnN0IEZQUlJlZyBmcFJlZ1QxID0gWDg2UmVnaXN0ZXJzOjp4bW0xOworICAgIHN0YXRpYyBj
b25zdCBGUFJSZWcgZnBSZWdUMiA9IFg4NlJlZ2lzdGVyczo6eG1tMjsKKyAgICBzdGF0aWMgY29u
c3QgRlBSUmVnIGZwUmVnVDMgPSBYODZSZWdpc3RlcnM6OnhtbTM7CisgICAgc3RhdGljIGNvbnN0
IEZQUlJlZyBmcFJlZ1Q0ID0gWDg2UmVnaXN0ZXJzOjp4bW00OworICAgIHN0YXRpYyBjb25zdCBG
UFJSZWcgZnBSZWdUNSA9IFg4NlJlZ2lzdGVyczo6eG1tNTsKKyAgICAvLyBUaGVzZSBjb25zdGFu
dHMgcHJvdmlkZSB0aGUgbmFtZXMgZm9yIHRoZSBnZW5lcmFsIHB1cnBvc2UgYXJndW1lbnQgJiBy
ZXR1cm4gdmFsdWUgcmVnaXN0ZXJzLgorICAgIHN0YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRG
UFIwID0gWDg2UmVnaXN0ZXJzOjp4bW0wOyAvLyBmcFJlZ1QwCisgICAgc3RhdGljIGNvbnN0IEZQ
UlJlZyBhcmd1bWVudEZQUjEgPSBYODZSZWdpc3RlcnM6OnhtbTE7IC8vIGZwUmVnVDEKKyAgICBz
dGF0aWMgY29uc3QgRlBSUmVnIGFyZ3VtZW50RlBSMiA9IFg4NlJlZ2lzdGVyczo6eG1tMjsgLy8g
ZnBSZWdUMgorICAgIHN0YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRGUFIzID0gWDg2UmVnaXN0
ZXJzOjp4bW0zOyAvLyBmcFJlZ1QzCisgICAgc3RhdGljIGNvbnN0IEZQUlJlZyByZXR1cm5WYWx1
ZUZQUiA9IFg4NlJlZ2lzdGVyczo6eG1tMDsgLy8gZnBSZWdUMAorCisgICAgLy8gRlBSUmVnIG1h
cHBpbmcgaXMgZGlyZWN0LCB0aGUgbWFjaGluZSByZWdzaXRlciBudW1iZXJzIGNhbgorICAgIC8v
IGJlIHVzZWQgZGlyZWN0bHkgYXMgaW5kaWNlcyBpbnRvIHRoZSBGUFIgUmVnaXN0ZXJCYW5rLgor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMCA9PSAwLCB4bW0wX2lzXzApOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMSA9PSAxLCB4bW0xX2lzXzEpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMiA9PSAyLCB4bW0yX2lzXzIpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMyA9PSAzLCB4bW0zX2lzXzMpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tNCA9PSA0LCB4bW00X2lzXzQpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tNSA9PSA1LCB4bW01X2lzXzUpOwog
ICAgIHN0YXRpYyBGUFJSZWcgdG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAg
ICAgIHJldHVybiAoRlBSUmVnKWluZGV4OwogICAgIH0KLQogICAgIHN0YXRpYyB1bnNpZ25lZCB0
b0luZGV4KEZQUlJlZyByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gKHVuc2lnbmVkKXJlZzsK
ICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnTmFt
ZShGUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkRlBSUmVn
KTsKKyAgICAgICAgQVNTRVJUKHJlZyA8IDE2KTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IG5hbWVGb3JSZWdpc3RlclsxNl0gPSB7CisgICAgICAgICAgICAieG1tMCIsICJ4bW0xIiwgInht
bTIiLCAieG1tMyIsCisgICAgICAgICAgICAieG1tNCIsICJ4bW01IiwgInhtbTYiLCAieG1tNyIs
CisgICAgICAgICAgICAieG1tOCIsICJ4bW05IiwgInhtbTEwIiwgInhtbTExIiwKKyAgICAgICAg
ICAgICJ4bW0xMiIsICJ4bW0xMyIsICJ4bW0xNCIsICJ4bW0xNSIKKyAgICAgICAgfTsKKyAgICAg
ICAgcmV0dXJuIG5hbWVGb3JSZWdpc3RlcltyZWddOworICAgIH0KKyNlbmRpZgogfTsKIAotdHlw
ZWRlZiBSZWdpc3RlckJhbms8RlBSQmFua0luZm8+OjppdGVyYXRvciBmcHJfaXRlcmF0b3I7Cit0
eXBlZGVmIFJlZ2lzdGVyQmFuazxGUFJJbmZvPjo6aXRlcmF0b3IgZnByX2l0ZXJhdG9yOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsMTIgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnVDcgPSBYODZSZWdpc3RlcnM6OnI5OwogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnVDggPSBYODZSZWdpc3RlcnM6OnIxMDsKICAgICAvLyBU
aGVzZSBjb25zdGFudHMgcHJvdmlkZSB0aGUgbmFtZXMgZm9yIHRoZSBnZW5lcmFsIHB1cnBvc2Ug
YXJndW1lbnQgJiByZXR1cm4gdmFsdWUgcmVnaXN0ZXJzLgotICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgYXJndW1lbnRSZWdpc3RlcjAgPSBYODZSZWdpc3RlcnM6OmVkaTsgLy8gcmVnVDQKLSAgICBz
dGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50UmVnaXN0ZXIxID0gWDg2UmVnaXN0ZXJzOjplc2k7
IC8vIHJlZ1Q1Ci0gICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudFJlZ2lzdGVyMiA9IFg4
NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQotICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1l
bnRSZWdpc3RlcjMgPSBYODZSZWdpc3RlcnM6OmVjeDsgLy8gcmVnVDIKLSAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHJldHVyblZhbHVlUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVn
VDAKLSAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlUmVnaXN0ZXIyID0gWDg2UmVn
aXN0ZXJzOjplZHg7IC8vIHJlZ1QxCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQ
UjAgPSBYODZSZWdpc3RlcnM6OmVkaTsgLy8gcmVnVDQKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IGFyZ3VtZW50R1BSMSA9IFg4NlJlZ2lzdGVyczo6ZXNpOyAvLyByZWdUNQorICAgIHN0YXRpYyBj
b25zdCBHUFJSZWcgYXJndW1lbnRHUFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCisg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjMgPSBYODZSZWdpc3RlcnM6OmVjeDsg
Ly8gcmVnVDIKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVn
aXN0ZXJzOjplYXg7IC8vIHJlZ1QwCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1
ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKIAogICAgIHN0YXRpYyBHUFJSZWcg
dG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDg1MjUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIEZQUlJlZyBKSVRDb2RlR2VuZXJhdG9y
OjpmaWxsRG91YmxlKE5vZGUKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEb3VibGVDb25zdGFu
dChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRl
KCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIodmFsdWVPZkRv
dWJsZUNvbnN0YW50KG5vZGVJbmRleCkpKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bW92ZVB0clRvRG91YmxlKGdwciwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAg
ICAgICAgICAgIHVubG9jayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihm
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CkBAIC0xNjIsOCArMTYyLDYg
QEAgRlBSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxEb3VibGUoTm9kZQogICAgICAgICBGUFJS
ZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgR1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0
ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAgdGhpcyBhbGxvY2F0aW9uIG9uIHRoZSBsYXN0IHVz
ZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8KIAotICAgICAgICBKSVRDb21waWxlcjo6RlBSZWdp
c3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwotCiAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOwogCiAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNEb3VibGUoanNWYWx1ZUdw
cik7CkBAIC0xNzEsMTIgKzE2OSwxMiBAQCBGUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbERv
dWJsZShOb2RlCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91
YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwg
dGVtcEdwcik7CiAgICAgICAgIG1faml0LmFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHRlbXBHcHIpOwotICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwg
ZnBSZWcpOworICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwgZnByKTsKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsK
IAogICAgICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCiAgICAgICAgIGlzSW50ZWdl
ci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFs
dWVHcHIsIGZwUmVnKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoanNWYWx1
ZUdwciwgZnByKTsKICAgICAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7CiAKICAg
ICAgICAgbV9ncHJzLnJlbGVhc2UoanNWYWx1ZUdwcik7CkBAIC0xOTIsMTAgKzE5MCw4IEBAIEZQ
UlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAg
ICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBHUFJSZWcgcmVnID0gZ3ByOwotICAgICAg
ICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVn
aXN0ZXJJRChmcHIpOwogCi0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZywg
ZnBSZWcpOworICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShncHIsIGZwcik7CiAK
ICAgICAgICAgbV9ncHJzLnJlbGVhc2UoZ3ByKTsKICAgICAgICAgbV9ncHJzLnVubG9jayhncHIp
OwpAQCAtMzk1LDE3ICszOTEsMTMgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNp
c3RlbmN5KAogICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAg
ICBmb3IgKEZQUlJlZyBpID0gZnByMDsgaSA8IG51bWJlck9mRlBSczsgbmV4dChpKSkgewotICAg
ICAgICBpZiAobV9mcHJzLmlzTG9ja2VkKGkpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IGZwciAlZCBpcyBsb2NrZWQuXG4iLCBp
KTsKKyAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXIuaXNMb2NrZWQoKSkgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVk
OiBmcHIgJXMgaXMgbG9ja2VkLlxuIiwgaXRlci5kZWJ1Z05hbWUoKSk7CiAgICAgICAgICAgICBm
YWlsZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIGZw
ckNvbnRlbnRzW251bWJlck9mRlBSc107Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZGUFJzOyArK2kpCi0gICAgICAgIGZwckNvbnRlbnRzW2ldID0gSW52YWxpZFZpcnR1
YWxSZWdpc3RlcjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nZW5lcmF0aW9uSW5m
by5zaXplKCk7ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gKFZpcnR1YWxSZWdpc3RlcilpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKQEAgLTQzMSw3ICs0MjMsMTAgQEAgdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KAogICAgICAgICBjYXNlIERhdGFG
b3JtYXREb3VibGU6IHsKICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbmZvLmZwcigpOwogICAg
ICAgICAgICAgQVNTRVJUKGZwciAhPSBJbnZhbGlkRlBSUmVnKTsKLSAgICAgICAgICAgIGZwckNv
bnRlbnRzW2Zwcl0gPSB2aXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAobV9mcHJzLm5h
bWUoZnByKSAhPSB2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIHZp
cnR1YWwgcmVnaXN0ZXIgJWQgKGZwciAlcykuXG4iLCB2aXJ0dWFsUmVnaXN0ZXIsIEZQUkluZm86
OmRlYnVnTmFtZShmcHIpKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDQz
LDE0ICs0MzgsMjAgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KAog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGlmIChpdGVyLmdwcigp
ICE9IGluZm8uZ3ByKCkpIHsKKyAgICAgICAgaWYgKGl0ZXIucmVnSUQoKSAhPSBpbmZvLmdwcigp
KSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBm
YWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIGdwciAlcyAodmlydHVhbCByZWdpc3RlciAlZCkuXG4i
LCBpdGVyLmRlYnVnTmFtZSgpLCB2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAgICAgZmFpbGVk
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICBmb3IgKEZQUlJlZyBpID0gZnByMDsgaSA8
IG51bWJlck9mRlBSczsgbmV4dChpKSkgewotICAgICAgICBpZiAobV9mcHJzLm5hbWUoaSkgIT0g
ZnByQ29udGVudHNbaV0pIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJ
U1RFTkNZX0NIRUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZnByICVkICglZCAhPSAlZCku
XG4iLCBpLCBtX2ZwcnMubmFtZShpKSwgZnByQ29udGVudHNbaV0pOworCisgICAgZm9yIChmcHJf
aXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBpdGVyLm5h
bWUoKTsKKyAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIGlmIChpdGVy
LnJlZ0lEKCkgIT0gaW5mby5mcHIoKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJE
RkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVkOiBuYW1lIG1pc21hdGNoIGZvciBmcHIgJXMgKHZp
cnR1YWwgcmVnaXN0ZXIgJWQpLlxuIiwgaXRlci5kZWJ1Z05hbWUoKSwgdmlydHVhbFJlZ2lzdGVy
KTsKICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNiBAQCBjbGFzcyBKSVRDb2RlR2Vu
ZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIgVHJ1c3RlZEltbTMyOwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkltbTMyIElt
bTMyOwotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVy
SUQ7CiAKICAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2V0IHByaW9yaXRpZXMg
Zm9yIHNwaWxsIG9yZGVyIGZvcgogICAgIC8vIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCkBAIC0x
NTcsMTYgKzE1NiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBjb252ZXJ0
IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMgYm94ZWQgYW5kIEpTVmFsdWVzLgogICAgIEdQ
UlJlZyBib3hEb3VibGUoRlBSUmVnIGZwciwgR1BSUmVnIGdwcikKICAgICB7Ci0gICAgICAgIEpJ
VENvbXBpbGVyOjpGUFJlZ2lzdGVySUQgZnBSZWcgPSBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3Rl
cklEKGZwcik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGVUb1B0cihmcFJlZywgZ3ByKTsKKyAg
ICAgICAgbV9qaXQubW92ZURvdWJsZVRvUHRyKGZwciwgZ3ByKTsKICAgICAgICAgbV9qaXQuc3Vi
UHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKICAgICAgICAgcmV0dXJu
IGdwcjsKICAgICB9CiAgICAgRlBSUmVnIHVuYm94RG91YmxlKEdQUlJlZyBncHIsIEZQUlJlZyBm
cHIpCiAgICAgewotICAgICAgICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklU
Q29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwogICAgICAgICBtX2ppdC5hZGRQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAgICBtX2ppdC5tb3ZlUHRy
VG9Eb3VibGUoZ3ByLCBmcFJlZyk7CisgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIs
IGZwcik7CiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQogICAgIEdQUlJlZyBib3hEb3VibGUo
RlBSUmVnIGZwcikKQEAgLTI1NiwxMSArMjUzLDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgICAg
ICAgICBpdGVyLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBm
b3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5leHQoZnByKSkgewot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBtX2ZwcnMubmFtZShmcHIpOwotICAg
ICAgICAgICAgaWYgKG5hbWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewotICAgICAgICAg
ICAgICAgIHNwaWxsKG5hbWUpOwotICAgICAgICAgICAgICAgIG1fZnBycy5yZWxlYXNlKGZwcik7
CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAh
PSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBzcGlsbChpdGVyLm5h
bWUoKSk7CisgICAgICAgICAgICAgICAgaXRlci5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yNzQsOSArMjcwLDggQEAgcHJvdGVjdGVkOgogICAgICAgICAg
ICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoRlBSUmVnIGZwciA9
IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbmFtZSA9IG1fZnBycy5uYW1lKGZwcik7Ci0gICAgICAgICAgICBpZiAobmFt
ZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBp
dGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTQ4NSw2MCArNDgwLDYwIEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpZiAoc3JjQiAh
PSBkZXN0QSkgewogICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBlYXN5IGNhc2VzIC0gdHdvIHNp
bXBsZSBtb3Zlcy4KLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZw
clRvUmVnaXN0ZXJJRChzcmNBKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChkZXN0QSkp
OwotICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3Rl
cklEKHNyY0IpLCBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RCKSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlRG91YmxlKHNyY0EsIGRlc3RBKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmVEb3VibGUoc3JjQiwgZGVzdEIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAoc3JjQSAhPSBkZXN0QikgewogICAgICAgICAgICAgLy8gSGFu
ZGxlIHRoZSBub24tc3dhcCBjYXNlIC0ganVzdCBwdXQgc3JjQiBpbiBwbGFjZSBmaXJzdC4KLSAg
ICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChz
cmNCKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChkZXN0QikpOwotICAgICAgICAgICAg
bV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKHNyY0EpLCBKSVRD
b21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RBKSk7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
RG91YmxlKHNyY0IsIGRlc3RCKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoc3JjQSwg
ZGVzdEEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJU
KHNyY0IgPT0gZGVzdEEgJiYgc3JjQSA9PSBkZXN0Qik7CiAgICAgICAgIC8vIE5lZWQgdG8gc3dh
cDsgcGljayBhIHRlbXBvcmFyeSByZWdpc3Rlci4KICAgICAgICAgRlBSUmVnIHRlbXA7Ci0gICAg
ICAgIGlmIChkZXN0QSAhPSBKSVRDb21waWxlcjo6YXJndW1lbnRGUFIzICYmIGRlc3RBICE9IEpJ
VENvbXBpbGVyOjphcmd1bWVudEZQUjMpCi0gICAgICAgICAgICB0ZW1wID0gSklUQ29tcGlsZXI6
OmFyZ3VtZW50RlBSMzsKLSAgICAgICAgZWxzZSBpZiAoZGVzdEEgIT0gSklUQ29tcGlsZXI6OmFy
Z3VtZW50RlBSMiAmJiBkZXN0QSAhPSBKSVRDb21waWxlcjo6YXJndW1lbnRGUFIyKQotICAgICAg
ICAgICAgdGVtcCA9IEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjI7CisgICAgICAgIGlmIChkZXN0
QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjMgJiYgZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRG
UFIzKQorICAgICAgICAgICAgdGVtcCA9IEZQUkluZm86OmFyZ3VtZW50RlBSMzsKKyAgICAgICAg
ZWxzZSBpZiAoZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRGUFIyICYmIGRlc3RBICE9IEZQUklu
Zm86OmFyZ3VtZW50RlBSMikKKyAgICAgICAgICAgIHRlbXAgPSBGUFJJbmZvOjphcmd1bWVudEZQ
UjI7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGRlc3RBICE9IEpJVENvbXBp
bGVyOjphcmd1bWVudEZQUjEgJiYgZGVzdEEgIT0gSklUQ29tcGlsZXI6OmFyZ3VtZW50RlBSMSk7
Ci0gICAgICAgICAgICB0ZW1wID0gSklUQ29tcGlsZXI6OmFyZ3VtZW50RlBSMTsKKyAgICAgICAg
ICAgIEFTU0VSVChkZXN0QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjEgJiYgZGVzdEEgIT0gRlBS
SW5mbzo6YXJndW1lbnRGUFIxKTsKKyAgICAgICAgICAgIHRlbXAgPSBGUFJJbmZvOjphcmd1bWVu
dEZQUjE7CiAgICAgICAgIH0KLSAgICAgICAgbV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6
ZnByVG9SZWdpc3RlcklEKGRlc3RBKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRCh0ZW1w
KSk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJ
RChkZXN0QiksIEpJVENvbXBpbGVyOjpmcHJUb1JlZ2lzdGVySUQoZGVzdEEpKTsKLSAgICAgICAg
bV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKHRlbXApLCBKSVRD
b21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RCKSk7CisgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUoZGVzdEEsIHRlbXApOworICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKGRlc3RCLCBkZXN0QSk7
CisgICAgICAgIG1faml0Lm1vdmVEb3VibGUodGVtcCwgZGVzdEIpOwogICAgIH0KICAgICB2b2lk
IHNldHVwU3R1YkFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewotICAg
ICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxLCBHUFJJbmZv
Ojphcmd1bWVudFJlZ2lzdGVyMj4oYXJnMSwgYXJnMik7CisgICAgICAgIHNldHVwVHdvU3R1YkFy
Z3M8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+KGFyZzEsIGFy
ZzIpOwogICAgIH0KICAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgLy8gSWYgbmVpdGhlciBvZiBh
cmcyL2FyZzMgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2FuIG1vdmUgYXJnMSBpbnRvIHBsYWNl
LgogICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBUd29TdHViQXJncyB0byBmaXggYXJn
Mi9hcmczLgotICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSAm
JiBhcmczICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKSB7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKTsKLSAgICAgICAgICAgIHNl
dHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjIsIEdQUkluZm86OmFyZ3Vt
ZW50UmVnaXN0ZXIzPihhcmcyLCBhcmczKTsKKyAgICAgICAgaWYgKGFyZzIgIT0gR1BSSW5mbzo6
YXJndW1lbnRHUFIxICYmIGFyZzMgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxKSB7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1l
bnRHUFIzPihhcmcyLCBhcmczKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIElmIG5laXRoZXIgb2YgYXJnMS9hcmczIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdl
IGNhbiBtb3ZlIGFyZzIgaW50byBwbGFjZS4KICAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNl
dHVwVHdvU3R1YkFyZ3MgdG8gZml4IGFyZzEvYXJnMy4KLSAgICAgICAgaWYgKGFyZzEgIT0gR1BS
SW5mbzo6YXJndW1lbnRSZWdpc3RlcjIgJiYgYXJnMyAhPSBHUFJJbmZvOjphcmd1bWVudFJlZ2lz
dGVyMikgewotICAgICAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudFJl
Z2lzdGVyMik7Ci0gICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50
UmVnaXN0ZXIxLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMz4oYXJnMSwgYXJnMyk7CisgICAg
ICAgIGlmIChhcmcxICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMiAmJiBhcmczICE9IEdQUkluZm86
OmFyZ3VtZW50R1BSMikgeworICAgICAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgICAgICAgICAgc2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMz4oYXJnMSwgYXJnMyk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiBuZWl0aGVyIG9mIGFyZzEvYXJn
MiBhcmUgaW4gb3VyIHdheSwgdGhlbiB3ZSBjYW4gbW92ZSBhcmczIGludG8gcGxhY2UuCiAgICAg
ICAgIC8vIFRoZW4gd2UgY2FuIHVzZSBzZXR1cFR3b1N0dWJBcmdzIHRvIGZpeCBhcmcxL2FyZzIu
Ci0gICAgICAgIGlmIChhcmcxICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIzICYmIGFyZzIg
IT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUo
YXJnMywgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpOwotICAgICAgICAgICAgc2V0dXBUd29T
dHViQXJnczxHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdp
c3RlcjI+KGFyZzEsIGFyZzIpOworICAgICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjMgJiYgYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgICAgIHNldHVw
VHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+
KGFyZzEsIGFyZzIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTU0Nywy
NSArNTQyLDI1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQnV0IGFyZSB0aGV5IGluIHRoZSBy
aWdodCBvbmVzPwogCiAgICAgICAgIC8vIEZpcnN0LCBlbnN1cmUgYXJnMSBpcyBpbiBwbGFjZS4K
LSAgICAgICAgaWYgKGFyZzEgIT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpIHsKLSAgICAg
ICAgICAgIG1faml0LnN3YXAoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOworICAg
ICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjEpIHsKKyAgICAgICAgICAgIG1f
aml0LnN3YXAoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKIAotICAgICAgICAgICAgLy8g
SWYgYXJnMSB3YXNuJ3QgaW4gYXJndW1lbnRSZWdpc3RlcjEsIG9uZSBvZiBhcmcyL2FyZzMgbXVz
dCBiZS4KLSAgICAgICAgICAgIEFTU0VSVChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0
ZXIxIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOwotICAgICAgICAgICAg
Ly8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRSZWdpc3RlcjEgaXQgbm8gbG9uZ2VyIGlzIChkdWUg
dG8gdGhlIHN3YXApLgorICAgICAgICAgICAgLy8gSWYgYXJnMSB3YXNuJ3QgaW4gYXJndW1lbnRH
UFIxLCBvbmUgb2YgYXJnMi9hcmczIG11c3QgYmUuCisgICAgICAgICAgICBBU1NFUlQoYXJnMiA9
PSBHUFJJbmZvOjphcmd1bWVudEdQUjEgfHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgLy8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRHUFIxIGl0IG5vIGxvbmdl
ciBpcyAoZHVlIHRvIHRoZSBzd2FwKS4KICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBhcmczIG11
c3QgaGF2ZSBiZWVuLiBNYXJrIGhpbSBhcyBtb3ZlZC4KLSAgICAgICAgICAgIGlmIChhcmcyID09
IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKQorICAgICAgICAgICAgaWYgKGFyZzIgPT0gR1BS
SW5mbzo6YXJndW1lbnRHUFIxKQogICAgICAgICAgICAgICAgIGFyZzIgPSBhcmcxOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGFyZzMgPSBhcmcxOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gRWl0aGVyIGFyZzIgJiBhcmczIG5lZWQgc3dhcHBpbmcsIG9yIHdlJ3JlIGFsbCBk
b25lLgotICAgICAgICBBU1NFUlQoKGFyZzIgPT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjIg
fHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMykKLSAgICAgICAgICAgIHx8IChh
cmcyID09IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIzIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJn
dW1lbnRSZWdpc3RlcjIpKTsKKyAgICAgICAgQVNTRVJUKChhcmcyID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiB8fCBhcmczID09IEdQUkluZm86OmFyZ3VtZW50R1BSMykKKyAgICAgICAgICAgIHx8
IChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50R1BSMyB8fCBhcmczID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMikpOwogCi0gICAgICAgIGlmIChhcmcyICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0
ZXIyKQotICAgICAgICAgICAgbV9qaXQuc3dhcChHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMiwg
R1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpOworICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpCisgICAgICAgICAgICBtX2ppdC5zd2FwKEdQUkluZm86OmFyZ3VtZW50
R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRo
b2RzIGFkZCBjYWxscyB0byBDKysgaGVscGVyIGZ1bmN0aW9ucy4KQEAgLTU3MywxMiArNTY4LDEy
IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAKLSAg
ICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSk7Ci0gICAg
ICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUklu
Zm86OmFyZ3VtZW50UmVnaXN0ZXIyKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjApOworICAgICAgICBtX2pp
dC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIsIHJlc3VsdCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdCk7CiAgICAgfQogICAgIHZvaWQgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSWRlbnRpZmllciog
aWRlbnRpZmllcikKICAgICB7CkBAIC01ODgsNDkgKzU4Myw0OSBAQCBwcm90ZWN0ZWQ6CiAgICAg
ewogICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOwogCi0gICAgICAgIG1faml0Lm1vdmUoYXJn
MSwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMCk7CisgICAg
ICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKIAogICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0g
ICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVSZWdpc3RlciwgcmVzdWx0KTsK
KyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAg
ICB9CiAgICAgdm9pZCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNGbHVz
aGVkKCkpOwogCi0gICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdp
c3RlcjEpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMCk7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVSZWdpc3RlciwgcmVzdWx0KTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICB9CiAgICAgdm9pZCBjYWxsT3BlcmF0
aW9uKFpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAK
ICAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIpOwotICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVy
MCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIsIHJlc3VsdCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdCk7CiAgICAgfQogICAgIHZvaWQgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOwogCiAgICAgICAgIHNldHVwU3R1
YkFyZ3VtZW50cyhhcmcxLCBhcmcyKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjApOworICAgICAgICBtX2pp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogCiAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKLSAg
ICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZVJlZ2lzdGVyLCByZXN1bHQpOwor
ICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOwogICAg
IH0KICAgICB2b2lkIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpKUCBvcGVyYXRpb24s
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAg
IEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAKICAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEs
IGFyZzIpOwotICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHBv
aW50ZXIpLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMyk7Ci0gICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsK
KyAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQpAQCAtNjQzLDcgKzYzOCw3
IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKIAogICAgICAgICBz
ZXR1cFN0dWJBcmd1bWVudHMoYXJnMSwgYXJnMiwgYXJnMyk7Ci0gICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsK
KyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CiAgICAgfQpAQCAtNjUxLDEwICs2NDYsMTAgQEAgcHJvdGVjdGVkOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKIAotICAgICAgICBzZXR1cFR3b1N0dWJBcmdz
PEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjAsIEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjE+KGFy
ZzEsIGFyZzIpOworICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEZQUkluZm86OmFyZ3VtZW50RlBS
MCwgRlBSSW5mbzo6YXJndW1lbnRGUFIxPihhcmcxLCBhcmcyKTsKIAogICAgICAgICBtX2ppdC5h
cHBlbmRDYWxsKG9wZXJhdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGls
ZXI6OmZwUmV0dXJuVmFsdWVSZWdpc3RlciwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChy
ZXN1bHQpKTsKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UiwgcmVzdWx0KTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQpAQCAtNzA0LDcgKzY5OSw3IEBAIHByb3Rl
Y3RlZDoKICAgICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgogICAgIFZl
Y3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87CiAgICAgUmVnaXN0ZXJC
YW5rPEdQUkluZm8+IG1fZ3ByczsKLSAgICBSZWdpc3RlckJhbms8RlBSQmFua0luZm8+IG1fZnBy
czsKKyAgICBSZWdpc3RlckJhbms8RlBSSW5mbz4gbV9mcHJzOwogCiAgICAgVmVjdG9yPE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbD4gbV9ibG9ja0hlYWRzOwogICAgIHN0cnVjdCBCcmFuY2hSZWNvcmQg
ewpAQCAtODA4LDExICs4MDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Zwck9ySW52
YWxpZDsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGdwcigpCi0g
ICAgewotICAgICAgICByZXR1cm4gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIoKSk7
Ci0gICAgfQotCiBwcml2YXRlOgogICAgIEpJVENvZGVHZW5lcmF0b3IqIG1faml0OwogICAgIE5v
ZGVJbmRleCBtX2luZGV4OwpAQCAtOTEzLDEyICs5MDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2ZwcjsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGdw
cigpCi0gICAgewotICAgICAgICBBU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7Ci0gICAg
ICAgIHJldHVybiBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKG1fZnByKTsKLSAgICB9Ci0K
IHByb3RlY3RlZDoKICAgICBGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBGUFJS
ZWcgbG9ja2VkRlBSKQogICAgICAgICA6IG1faml0KGppdCkKQEAgLTk0Niw4ICs5MzAsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBHUFJSZWcgbG9ja2VkUmVzdWx0KEpJVENvZGVH
ZW5lcmF0b3IqIGppdCkKICAgICB7Ci0gICAgICAgIGppdC0+bG9jayhHUFJJbmZvOjpyZXR1cm5W
YWx1ZVJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0
ZXI7CisgICAgICAgIGppdC0+bG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHJldHVybiBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjsKICAgICB9CiB9OwogCkBAIC05NjEsOCAr
OTQ1LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgRlBSUmVnIGxvY2tlZFJlc3Vs
dChKSVRDb2RlR2VuZXJhdG9yKiBqaXQpCiAgICAgewotICAgICAgICBqaXQtPmxvY2soSklUQ29t
cGlsZXI6OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgcmV0dXJuIEpJVENvbXBpbGVyOjpyZXR1
cm5WYWx1ZUZQUjsKKyAgICAgICAgaml0LT5sb2NrKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsK
KyAgICAgICAgcmV0dXJuIEZQUkluZm86OnJldHVyblZhbHVlRlBSOwogICAgIH0KIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZp
c2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNiArNDcsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6
ZmlsbE51bWVyaWNUb0RvdWJsZShObwogICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkgewogICAg
ICAgICBBU1NFUlQobm9kZS5vcCA9PSBEb3VibGVDb25zdGFudCk7CiAgICAgICAgIG1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERv
dWJsZVRvSW50cHRyKHZhbHVlT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpKSkpLCB0ZW1wb3Jh
cnkpOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHJUb1JlZ2lzdGVySUQo
ZnByKSk7CisgICAgICAgIG1vdmVQdHJUb0RvdWJsZSh0ZW1wb3JhcnksIGZwcik7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkp
LCB0ZW1wb3JhcnkpOwogICAgICAgICBKdW1wIGlzSW50ZWdlciA9IGJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0ZW1wb3JhcnksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CiAgICAgICAgIGppdEFzc2VydElzSlNEb3VibGUodGVtcG9yYXJ5KTsKICAgICAg
ICAgYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGVtcG9yYXJ5KTsKLSAg
ICAgICAgbW92ZVB0clRvRG91YmxlKHRlbXBvcmFyeSwgZnByVG9SZWdpc3RlcklEKGZwcikpOwor
ICAgICAgICBtb3ZlUHRyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHIpOwogICAgICAgICBKdW1wIGhh
c1VuYm94ZWREb3VibGUgPSBqdW1wKCk7CiAgICAgICAgIGlzSW50ZWdlci5saW5rKHRoaXMpOwot
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZSh0ZW1wb3JhcnksIGZwclRvUmVnaXN0ZXJJRChm
cHIpKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHIpOwogICAg
ICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsodGhpcyk7CiAgICAgfQogfQpAQCAtMTQyLDI1ICsx
NDIsMjUgQEAgdm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTgogICAgIH0K
IAogICAgIC8vIFNwaWxsIGFsbCBGUFJzIGluIHVzZSBieSB0aGUgc3BlY3VsYXRpdmUgcGF0aC4K
LSAgICBmb3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5leHQoZnBy
KSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gY2hlY2subV9mcHJJbmZvW2Zwcl07
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraW5kZXgpIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGNoZWNr
Lm1fZnBySW5mb1tpbmRleF07CiAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IGdyYXBoKClbbm9kZUluZGV4XS52aXJ0dWFsUmVnaXN0ZXIoKTsKIAotICAgICAgICBt
b3ZlRG91YmxlVG9QdHIoZnByVG9SZWdpc3RlcklEKGZwciksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgbW92ZURvdWJsZVRvUHRyKEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpLCBHUFJJbmZv
OjpyZWdUMCk7CiAgICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgfQogCiAgICAgLy8gRmlsbCBhbGwgRlBScyBp
biB1c2UgYnkgdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgotICAgIGZvciAoRlBSUmVnIGZwciA9
IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBlbnRyeS5tX2ZwckluZm9bZnByXTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgewor
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZW50cnkubV9mcHJJbmZvW2luZGV4XTsKICAg
ICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBmaWxsTnVtZXJpY1RvRG91YmxlKG5vZGVJbmRleCwgZnByLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgIGZpbGxOdW1lcmljVG9Eb3VibGUobm9kZUluZGV4LCBGUFJJbmZvOjp0b1Jl
Z2lzdGVyKGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIH0KIAogICAgIC8vIEZpbGwgYWxs
IEdQUnMgaW4gdXNlIGJ5IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KQEAgLTMxMywxOSArMzEz
LDE5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAgICAgICAg
Ly8gdG8gbG9vayB1cCBoYW5kbGVyIGluZm9ybWF0aW9uLiBUaGUgaWRlbnRpZmllciB3ZSB1c2Ug
aXMgdGhlIHJldHVybiBhZGRyZXNzCiAgICAgICAgIC8vIG9mIHRoZSBjYWxsIG91dCBmcm9tIEpJ
VCBjb2RlIHRoYXQgdGhyZXcgdGhlIGV4Y2VwdGlvbjsgdGhpcyBpcyBzdGlsbAogICAgICAgICAv
LyBhdmFpbGFibGUgb24gdGhlIHN0YWNrLCBqdXN0IGJlbG93IHRoZSBzdGFjayBwb2ludGVyIQot
ICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dFJlZ2lzdGVyMCk7Ci0gICAgICAgIHBlZWsoR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEsIC0x
KTsKKyAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgcGVlayhHUFJJbmZvOjphcmd1bWVudEdQUjEsIC0xKTsKICAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKCksIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBsZWF2ZXMgdGhlIGhh
bmRsZXIgQ2FsbEZyYW1lKiBpbiB0aGUgcmV0dXJuVmFsdWVSZWdpc3RlciwKLSAgICAgICAgLy8g
YW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIGluIHJldHVyblZhbHVlUmVnaXN0ZXIyLgot
ICAgICAgICBqdW1wKEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIyKTsKKyAgICAgICAgLy8g
bG9va3VwRXhjZXB0aW9uSGFuZGxlciBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB0
aGUgcmV0dXJuVmFsdWVHUFIsCisgICAgICAgIC8vIGFuZCB0aGUgYWRkcmVzcyBvZiB0aGUgaGFu
ZGxlciBpbiByZXR1cm5WYWx1ZUdQUjIuCisgICAgICAgIGp1bXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKICAgICB9CiAKICAgICAvLyBHZW5lcmF0ZSB0aGUgcmVnaXN0ZXIgZmlsZSBjaGVj
azsgaWYgdGhlIGZhc3QgY2hlY2sgaW4gdGhlIGZ1bmN0aW9uIGhlYWQgZmFpbHMsCiAgICAgLy8g
d2UgbmVlZCB0byBjYWxsIG91dCB0byBhIGhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVy
IG1vcmUgc3BhY2UgaXMgYXZhaWxhYmxlLgogICAgIC8vIEZJWE1FOiBjaGFuZ2UgdGhpcyBmcm9t
IGEgY3RpIGNhbGwgdG8gYSBERkcgc3R5bGUgb3BlcmF0aW9uIChub3JtYWwgQyBjYWxsaW5nIGNv
bnZlbnRpb25zKS4KICAgICByZWdpc3RlckZpbGVDaGVjay5saW5rKHRoaXMpOwotICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsKKyAgICBt
b3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIHBv
a2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklU
U3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwogICAgIENhbGwgY2FsbFJl
Z2lzdGVyRmlsZUNoZWNrID0gY2FsbCgpOwogICAgIGp1bXAoZnJvbVJlZ2lzdGVyRmlsZUNoZWNr
KTsKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24o
SklUQ29kCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1Qy
KTsKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIsIFJlZ2lzdGVy
RmlsZTo6UmV0dXJuUEMpOwogICAgIGJyYW5jaDMyKEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwgSW1t
MzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywg
dGhpcyk7Ci0gICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRS
ZWdpc3RlcjApOworICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09G
RlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7
CiAgICAgQ2FsbCBjYWxsQXJpdHlDaGVjayA9IGNhbGwoKTsKICAgICBtb3ZlKEdQUkluZm86OnJl
Z1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDI4ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgeyBy
ZXR1cm4gbV9nbG9iYWxEYXRhOyB9CiAKICNpZiBDUFUoWDg2XzY0KQotICAgIC8vIFRlbXBvcmFy
eSByZWdpc3RlcnMuCi0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QwID0gWDg2
UmVnaXN0ZXJzOjp4bW0wOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9
IFg4NlJlZ2lzdGVyczo6eG1tMTsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVn
VDIgPSBYODZSZWdpc3RlcnM6OnhtbTI7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1QzID0gWDg2UmVnaXN0ZXJzOjp4bW0zOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUNCA9IFg4NlJlZ2lzdGVyczo6eG1tNDsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdp
c3RlcklEIGZwUmVnVDUgPSBYODZSZWdpc3RlcnM6OnhtbTU7Ci0KLSAgICAvLyBUaGVzZSBjb25z
dGFudHMgcHJvdmlkZSBib3RoIEZQUmVnaXN0ZXJJRCAmIEZQUlJlZyBzdHlsZSBuYW1lcyBmb3Ig
dGhlCi0gICAgLy8gZmxvYXRpbmcgcG9pbnQgYXJndW1lbnQgJiByZXR1cm4gdmFsdWUgcmVnaXN0
ZXIuCi0gICAgc3RhdGljIGNvbnN0IEZQUlJlZyBhcmd1bWVudEZQUjAgPSBmcHIwOwotICAgIHN0
YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRGUFIxID0gZnByMTsKLSAgICBzdGF0aWMgY29uc3Qg
RlBSUmVnIGFyZ3VtZW50RlBSMiA9IGZwcjI7Ci0gICAgc3RhdGljIGNvbnN0IEZQUlJlZyBhcmd1
bWVudEZQUjMgPSBmcHIzOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBBcmd1bWVu
dFJlZ2lzdGVyMCA9IGZwUmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcEFy
Z3VtZW50UmVnaXN0ZXIxID0gZnBSZWdUMTsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklE
IGZwQXJndW1lbnRSZWdpc3RlcjIgPSBmcFJlZ1QyOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBBcmd1bWVudFJlZ2lzdGVyMyA9IGZwUmVnVDM7Ci0gICAgc3RhdGljIGNvbnN0IEZQ
UlJlZyByZXR1cm5WYWx1ZUZQUiA9IGZwcjA7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJldHVyblZhbHVlUmVnaXN0ZXIgPSBmcFJlZ1QwOwotCi0KICAgICB2b2lkIHByZXNlcnZl
UmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJSZWcgcmVnKQogICAgIHsKICAgICAgICAgcG9wKHJl
Zyk7CkBAIC0xODAsMTMgKzE1OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdp
c3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRlBSZWdpc3RlcklEIGZwclRvUmVnaXN0ZXJJ
RChGUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZyA8IG51bWJlck9mRlBScyk7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgaWRGb3JSZWdpc3RlcltudW1iZXJP
ZkZQUnNdID0geyBmcFJlZ1QwLCBmcFJlZ1QxLCBmcFJlZ1QyLCBmcFJlZ1QzLCBmcFJlZ1Q0LCBm
cFJlZ1Q1IH07Ci0gICAgICAgIHJldHVybiBpZEZvclJlZ2lzdGVyW3JlZ107Ci0gICAgfQotCiAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgdm9pZCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gODUy
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsMTEgKzI3LDExIEBACiAjZGVmaW5lIERGR05vZGVfaAogCiAvLyBFbWl0IHZhcmlv
dXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0
aGUgZGF0YWZsb3cgZ3JhcGhzLgotI2RlZmluZSBERkdfREVCVUdfVkVSQk9TRSAwCisjZGVmaW5l
IERGR19ERUJVR19WRVJCT1NFIDEKIC8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGR5bmFtaWMgY2hl
Y2tzIGludG8gdGhlIGluc3RydWN0aW9uIHN0cmVhbS4KLSNkZWZpbmUgREZHX0pJVF9BU1NFUlQg
MAorI2RlZmluZSBERkdfSklUX0FTU0VSVCAxCiAvLyBDb25zaXN0ZW5jeSBjaGVjayBjb250ZW50
cyBjb21waWxlciBkYXRhIHN0cnVjdHVyZXMuCi0jZGVmaW5lIERGR19DT05TSVNURU5DWV9DSEVD
SyAwCisjZGVmaW5lIERGR19DT05TSVNURU5DWV9DSEVDSyAxCiAvLyBFbWl0IGEgYnJlYWtwb2lu
dCBpbnRvIHRoZSBoZWFkIG9mIGV2ZXJ5IGdlbmVyYXRlZCBmdW5jdGlvbiwgdG8gYWlkIGRlYnVn
Z2luZyBpbiBHREIuCiAjZGVmaW5lIERGR19KSVRfQlJFQUtfT05fRVZFUllfRlVOQ1RJT04gMAog
Ly8gRW1pdCBhIGJyZWFrcG9pbnQgaW50byB0aGUgaGVhZCBvZiBldmVyeSBnZW5lcmF0ZWQgbm9k
ZSwgdG8gYWlkIGRlYnVnZ2luZyBpbiBHREIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gODUyNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsMTQgKzQ2LDEzIEBAIEVudHJ5TG9jYXRpb246OkVudHJ5TG9jYXRp
b24oTWFjcm9Bc3NlbWIKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2dwckluZm9baXRl
ci5pbmRleCgpXS5ub2RlSW5kZXggPSBOb05vZGU7CiAgICAgfQotICAgIGZvciAoRlBSUmVnIGZw
ciA9IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBqaXQtPm1fZnBycy5uYW1lKGZwcik7Ci0gICAg
ICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewotICAg
ICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07CisgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IGppdC0+bV9mcHJz
LmJlZ2luKCk7IGl0ZXIgIT0gaml0LT5tX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBp
ZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIubmFtZSgp
XTsKICAgICAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1h
dERvdWJsZSk7Ci0gICAgICAgICAgICBtX2ZwckluZm9bZnByXSA9IGluZm8ubm9kZUluZGV4KCk7
CisgICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXSA9IGluZm8ubm9kZUluZGV4KCk7
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9mcHJJbmZvW2Zwcl0gPSBOb05vZGU7Cisg
ICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXSA9IE5vTm9kZTsKICAgICB9CiB9CiAK
QEAgLTYyLDMwICs2MSwyOCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjp2YWx1ZVRvTnVtYmVy
KEpTCiAgICAgR1BSUmVnIGpzVmFsdWVHcHIgPSBvcGVyYW5kLmdwcigpOwogICAgIEdQUlJlZyB0
ZW1wR3ByID0gYWxsb2NhdGUoKTsgLy8gRklYTUU6IGNhbiB3ZSBza2lwIHRoaXMgYWxsb2NhdGlv
biBvbiB0aGUgbGFzdCB1c2Ugb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXI/CiAKLSAgICBKSVRDb21w
aWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChm
cHIpOwotCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9uTnVtZXJpYyA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhl
cmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgIG1faml0Lm1vdmUo
anNWYWx1ZUdwciwgdGVtcEdwcik7CiAgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgdGVtcEdwcik7Ci0gICAgbV9qaXQubW92ZVB0clRvRG91YmxlKHRlbXBH
cHIsIGZwUmVnKTsKKyAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwgZnByKTsKICAg
ICBKSVRDb21waWxlcjo6SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCiAg
ICAgLy8gTmV4dCBoYW5kbGUgY2VsbHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKICAgICBub25O
dW1lcmljLmxpbmsoJm1faml0KTsKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhmcHIsIGpz
VmFsdWVHcHIpOwotICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgR1BSSW5mbzo6YXJndW1lbnRS
ZWdpc3RlcjEpOwotICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsKKyAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIpOwotICAgIG1faml0Lm1vdmVEb3Vi
bGUoSklUQ29tcGlsZXI6OmZwUmV0dXJuVmFsdWVSZWdpc3RlciwgZnBSZWcpOworICAgIG1faml0
Lm1vdmVEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIGZwcik7CiAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhmcHIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvTnVt
YmVyID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIC8vIEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vy
cy4KICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKGpzVmFsdWVHcHIsIGZwUmVnKTsKKyAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZShqc1ZhbHVlR3ByLCBmcHIpOwogICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwog
ICAgIGhhc0NhbGxlZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKIApAQCAtMTAwLDEwICs5NywxMCBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjp2YWx1ZVRvSW50MzIoSlNWCiAKICAgICAvLyBGaXJz
dCBoYW5kbGUgbm9uLWludGVnZXJzCiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0
LCBqc1ZhbHVlR3ByKTsKLSAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIEdQUkluZm86OmFyZ3Vt
ZW50UmVnaXN0ZXIxKTsKLSAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMCk7CisgICAgbV9qaXQubW92ZShqc1ZhbHVlR3By
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvSW50MzIpOwotICAgIG1faml0Lnplcm9F
eHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIsIHJlc3VsdCk7CisgICAg
bV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7
CiAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHQpOwogICAgIEpJVENvbXBpbGVyOjpK
dW1wIGhhc0NhbGxlZFRvSW50MzIgPSBtX2ppdC5qdW1wKCk7CiAgICAgCkBAIC0xMTUsMTUgKzEx
MiwxMyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjp2YWx1ZVRvSW50MzIoSlNWCiAKIHZvaWQg
Tm9uU3BlY3VsYXRpdmVKSVQ6Om51bWJlclRvSW50MzIoRlBSUmVnIGZwciwgR1BSUmVnIGdwcikK
IHsKLSAgICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZw
clRvUmVnaXN0ZXJJRChmcHIpOwotCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9J
bnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwUmVnLCBncHIsIEpJ
VENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlU3VjY2Vzc2Z1bCk7CisgICAgSklUQ29tcGlsZXI6
Okp1bXAgdHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0lu
dDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOwog
CiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKIAotICAgIG1faml0Lm1vdmVEb3Vi
bGUoZnBSZWcsIEpJVENvbXBpbGVyOjpmcEFyZ3VtZW50UmVnaXN0ZXIwKTsKKyAgICBtX2ppdC5t
b3ZlRG91YmxlKGZwciwgRlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKICAgICBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKHRvSW50MzIpOwotICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQ
UkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIsIGdwcik7CisgICAgbV9qaXQuemVyb0V4dGVuZDMy
VG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGdwcik7CiAKICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKGdwcik7CiAKQEAgLTI3NCwxMCArMjY5LDEwIEBAIHZvaWQgTm9uU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CiAgICAg
ICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEZQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9E
b3VibGUob3AxLmdwcigpLCByZXN1bHQuZnByKCkpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHBvc2l0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJU
aGFuT3JFcXVhbCwgb3AxLmdwcigpLCBUcnVzdGVkSW1tMzIoMCkpOwotICAgICAgICBtX2ppdC5h
ZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgIG1faml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVB
ZGRyZXNzKCZ0d29Ub1RoZTMyKSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgcG9zaXRpdmUubGlu
aygmbV9qaXQpOwogCiAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGls
ZUluZGV4KTsKQEAgLTI4Nyw3ICsyODIsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKFNwZWN1bGF0CiAgICAgY2FzZSBJbnQzMlRvTnVtYmVyOiB7CiAgICAgICAgIEludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdw
cigpLCByZXN1bHQuZnByKCkpOwogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMyOSw3ICszMjQsNyBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGlmIChp
c0tub3duSW50ZWdlcihub2RlLmNoaWxkMSkpIHsKICAgICAgICAgICAgIEludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigp
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUo
b3AxLmdwcigpLCByZXN1bHQuZnByKCkpOwogICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3Vs
dC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTMzNyw3ICszMzIsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1
bGF0CiAgICAgICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSkpIHsKICAgICAgICAg
ICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAgICAgIEZQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJs
ZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CiAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtMzY4LDkgKzM2Myw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3Bl
Y3VsYXQKICAgICAgICAgRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwogICAg
ICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIHJlZzEgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVnMiA9IG9wMi5ncHIoKTsKLSAgICAgICAgbV9qaXQu
YWRkRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcx
ID0gb3AxLmZwcigpOworICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAg
bV9qaXQuYWRkRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKICAgICAgICAgZG91
YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
QEAgLTM4MSw5ICszNzYsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1
bGF0CiAgICAgICAgIERvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpGUFJlZ2lzdGVySUQgcmVnMSA9IG9wMS5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkZQUmVnaXN0ZXJJRCByZWcyID0gb3AyLmdwcigpOwotICAgICAgICBtX2ppdC5zdWJEb3Vi
bGUocmVnMSwgcmVnMiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEu
ZnByKCk7CisgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5z
dWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKIAogICAgICAgICBkb3VibGVSZXN1
bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzk0
LDkgKzM4OSw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAg
ICAgICAgRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwogICAgICAgICBGUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RlBSZWdpc3RlcklEIHJlZzEgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpGUFJlZ2lzdGVySUQgcmVnMiA9IG9wMi5ncHIoKTsKLSAgICAgICAgbV9qaXQubXVsRG91Ymxl
KHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZw
cigpOworICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgbV9qaXQubXVs
RG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKICAgICAgICAgZG91YmxlUmVzdWx0
KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTQwNyw5
ICs0MDIsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAg
ICAgIERvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgRlBSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJl
Z2lzdGVySUQgcmVnMSA9IG9wMS5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVn
aXN0ZXJJRCByZWcyID0gb3AyLmdwcigpOwotICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwg
cmVnMiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Cisg
ICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5kaXZEb3VibGUo
cmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKIAogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0
LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNjIxLDE3ICs2MTYs
MTcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogCiAgICAgY2Fz
ZSBSZXR1cm46IHsKICAgICAgICAgQVNTRVJUKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyICE9
IEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUklu
Zm86OnJldHVyblZhbHVlUmVnaXN0ZXIpOwotICAgICAgICBBU1NFUlQoR1BSSW5mbzo6cmV0dXJu
VmFsdWVSZWdpc3RlciAhPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIEFT
U0VSVChHUFJJbmZvOjpyZWdUMSAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IEFTU0VSVChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiAhPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CiAKICNpZiBERkdfU1VDQ0VTU19TVEFUUwogICAgICAgICBzdGF0aWMgU2FtcGxpbmdD
b3VudGVyIGNvdW50ZXIoIk5vblNwZWN1bGF0aXZlSklUIik7CiAgICAgICAgIG1faml0LmVtaXRD
b3VudChjb3VudGVyKTsKICNlbmRpZgogCi0gICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGlu
IHJldHVyblZhbHVlUmVnaXN0ZXIuCisgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJl
dHVyblZhbHVlR1BSLgogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVS
ZWdpc3Rlcik7CisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CiAKICAgICAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAgICAg
IG1faml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJu
UEMsIEdQUkluZm86OnJlZ1QxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9uU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDg1MjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw3ICs1NCw3IEBAIHN0cnVjdCBFbnRyeUxvY2F0aW9uIHsKICAgICAgICAgRGF0YUZvcm1h
dCBmb3JtYXQ7CiAgICAgfTsKICAgICBSZWdpc3RlckluZm8gbV9ncHJJbmZvW0dQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzXTsKLSAgICBOb2RlSW5kZXggbV9mcHJJbmZvW251bWJlck9mRlBSc107
CisgICAgTm9kZUluZGV4IG1fZnBySW5mb1tGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107CiB9
OwogCiAvLyA9PT0gTm9uU3BlY3VsYXRpdmVKSVQgPT09CkBAIC05OSwxNCArOTksMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVy
Rm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwotICAgICAgICBHUFJSZWcgcmVnID0gaW5m
by5ncHIoKTsKIAogICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVn
ZXIpIHsKLSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwgcmVnKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBpbmZvLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFG
b3JtYXRKUyB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCk7Ci0gICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihyZWcsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHNwaWxsTWUpKTsKICAgICAgICAgfQogICAgIH0KICAgICB2b2lkIHNpbGVudFNwaWxs
RlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBHUFJSZWcgY2FuVHJhbXBsZSwgRlBSUmVnIGV4
Y2x1ZGUgPSBJbnZhbGlkRlBSUmVnKQpAQCAtMTMxLDIyICsxMzAsMjEgQEAgcHJpdmF0ZToKICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKICAgICAgICAgQVNT
RVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdERvdWJsZSk7CiAgICAgICAgIERhdGFGb3JtYXQgcmVn
aXN0ZXJGb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7Ci0gICAgICAgIEdQUlJlZyByZWcg
PSBpbmZvLmdwcigpOwogCiAgICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
SW50ZWdlcikgewogICAgICAgICAgICAgaWYgKG5vZGUuaXNDb25zdGFudCgpKSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBy
ZWcpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZUluZGV4KSksIGluZm8uZ3ByKCkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCBy
ZWcpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cihzcGlsbE1lKSwgaW5mby5ncHIoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBtX2ppdC5tb3Zl
KGNvbnN0YW50QXNKU1ZhbHVlQXNJbW1QdHIobm9kZUluZGV4KSwgcmVnKTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoY29uc3RhbnRBc0pTVmFsdWVBc0ltbVB0cihub2RlSW5kZXgpLCBpbmZvLmdw
cigpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQg
JiBEYXRhRm9ybWF0SlMgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOwotICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwg
cmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
c3BpbGxNZSksIGluZm8uZ3ByKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgc2lsZW50
RmlsbEZQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgR1BSUmVnIGNhblRyYW1wbGUsIEZQUlJl
ZyBleGNsdWRlID0gSW52YWxpZEZQUlJlZykKQEAgLTE1OSwxMCArMTU3LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKICAgICAgICAg
QVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKIAotICAg
ICAgICBpZiAobm9kZS5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBp
bmZvLmdwcigpOwotICAgICAgICAgICAgbV9qaXQubW92ZShjb25zdGFudEFzSlNWYWx1ZUFzSW1t
UHRyKG5vZGVJbmRleCksIHJlZyk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChub2Rl
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIG1faml0Lm1vdmUoY29uc3RhbnRBc0pTVmFsdWVB
c0ltbVB0cihub2RlSW5kZXgpLCBpbmZvLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCBjYW5U
cmFtcGxlKTsKICAgICAgICAgICAgIHVuYm94RG91YmxlKGNhblRyYW1wbGUsIGluZm8uZnByKCkp
OwogICAgICAgICB9CkBAIC0xNzgsMTAgKzE3NSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgICAgICAg
ICBzaWxlbnRTcGlsbEdQUihpdGVyLm5hbWUoKSwgZXhjbHVkZSk7CiAgICAgICAgIH0KLSAgICAg
ICAgZm9yIChGUFJSZWcgZnByID0gZnByMDsgZnByIDwgbnVtYmVyT2ZGUFJzOyBuZXh0KGZwcikp
IHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gbV9mcHJzLm5hbWUoZnByKTsK
LSAgICAgICAgICAgIGlmIChuYW1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAg
ICAgICAgICAgc2lsZW50U3BpbGxGUFIobmFtZSwgY2FuVHJhbXBsZSk7CisgICAgICAgIGZvciAo
ZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7
ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgc2lsZW50U3BpbGxGUFIoaXRlci5uYW1lKCksIGNh
blRyYW1wbGUpOwogICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMoRlBSUmVnIGV4Y2x1ZGUsIEdQUlJlZyBwcmVzZXJ2ZSA9IEludmFsaWRHUFJSZWcpCkBA
IC0xOTQsMTAgKzE5MCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQ
UihpdGVyLm5hbWUoKSk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChGUFJSZWcgZnByID0gZnBy
MDsgZnByIDwgbnVtYmVyT2ZGUFJzOyBuZXh0KGZwcikpIHsKLSAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBuYW1lID0gbV9mcHJzLm5hbWUoZnByKTsKLSAgICAgICAgICAgIGlmIChuYW1lICE9
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxGUFIo
bmFtZSwgY2FuVHJhbXBsZSwgZXhjbHVkZSk7CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0
ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAg
ICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAg
ICAgICAgICAgICAgc2lsZW50U3BpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGV4Y2x1
ZGUpOwogICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhH
UFJSZWcgZXhjbHVkZSkKQEAgLTIwNiwxMCArMjAxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgaWYg
KGV4Y2x1ZGUgPT0gR1BSSW5mbzo6cmVnVDApCiAgICAgICAgICAgICBjYW5UcmFtcGxlID0gR1BS
SW5mbzo6cmVnVDE7CiAgICAgICAgIAotICAgICAgICBmb3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBm
cHIgPCBudW1iZXJPZkZQUnM7IG5leHQoZnByKSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG5hbWUgPSBtX2ZwcnMubmFtZShmcHIpOwotICAgICAgICAgICAgaWYgKG5hbWUgIT0gSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgICAgICBzaWxlbnRGaWxsRlBSKG5hbWUs
IGNhblRyYW1wbGUpOworICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmIChp
dGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIHNp
bGVudEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUpOwogICAgICAgICB9CiAgICAgICAg
IGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMu
ZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIpCkBAIC0yMjAsMTUgKzIxNCwxMCBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdUMDsKICAgICAgICAgCi0gICAg
ICAgIGZvciAoRlBSUmVnIGZwciA9IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIp
KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZSA9IG1fZnBycy5uYW1lKGZwcik7
Ci0gICAgICAgICAgICBpZiAobmFtZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7Ci0jaWZu
ZGVmIE5ERUJVRwotICAgICAgICAgICAgICAgIEFTU0VSVChmcHIgIT0gZXhjbHVkZSk7Ci0jZWxz
ZQotICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShleGNsdWRlKTsKLSNlbmRpZgotICAgICAg
ICAgICAgICAgIHNpbGVudEZpbGxGUFIobmFtZSwgY2FuVHJhbXBsZSwgZXhjbHVkZSk7CisgICAg
ICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2Zw
cnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGV4Y2x1
ZGUsIGl0ZXIucmVnSUQoKSAhPSBleGNsdWRlKTsKKyAgICAgICAgICAgICAgICBzaWxlbnRGaWxs
RlBSKGl0ZXIubmFtZSgpLCBjYW5UcmFtcGxlLCBleGNsdWRlKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7
IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZWdpc3RlckJhbmsuaAkocmV2aXNpb24gODUyNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZ2lzdGVyQmFuay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjUsNyArMjI1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9iYW5rLT5yZWxlYXNlQXRJbmRl
eChtX2luZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZ0lEIGdwcigpIGNvbnN0CisgICAg
ICAgIFJlZ0lEIHJlZ0lEKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEJh
bmtJbmZvOjp0b1JlZ2lzdGVyKG1faW5kZXgpOwogICAgICAgICB9CkBAIC0yMzMsNyArMjMzLDcg
QEAgcHVibGljOgogI2lmbmRlZiBOREVCVUcKICAgICAgICAgY29uc3QgY2hhciogZGVidWdOYW1l
KCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjpkZWJ1Z05h
bWUoZ3ByKCkpOworICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjpkZWJ1Z05hbWUocmVnSUQo
KSk7CiAgICAgICAgIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gODUyNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTUxLDE0ICsxNTEsMTMgQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhN
YWNybwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fZ3BySW5mb1tpdGVyLmluZGV4KCld
Lm5vZGVJbmRleCA9IE5vTm9kZTsKICAgICB9Ci0gICAgZm9yIChGUFJSZWcgZnByID0gZnByMDsg
ZnByIDwgbnVtYmVyT2ZGUFJzOyBuZXh0KGZwcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IGppdC0+bV9mcHJzLm5hbWUoZnByKTsKLSAgICAgICAgaWYgKHZp
cnR1YWxSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9ICBqaXQtPm1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXTsKKyAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gaml0LT5tX2ZwcnMuYmVnaW4oKTsg
aXRlciAhPSBqaXQtPm1fZnBycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLm5h
bWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9ICBqaXQtPm1fZ2VuZXJhdGlvbkluZm9baXRlci5uYW1lKCldOwogICAgICAg
ICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsK
LSAgICAgICAgICAgIG1fZnBySW5mb1tmcHJdID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAg
ICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldID0gaW5mby5ub2RlSW5kZXgoKTsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBtX2ZwckluZm9bZnByXSA9IE5vTm9kZTsKKyAgICAgICAgICAg
IG1fZnBySW5mb1tpdGVyLmluZGV4KCldID0gTm9Ob2RlOwogICAgIH0KIH0KIApAQCAtNDMxLDgg
KzQzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCi0gICAgICAgICAgICBHUFJS
ZWcgcmVnID0gb3AyLmdwcigpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZywgSW1tMzIoaW1tMSksIHJl
c3VsdC5ncHIoKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hB
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJl
c3VsdC5ncHIoKSkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDMsOCArNDQxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBv
cDEuZ3ByKCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnLCBJbW0zMihpbW0yKSwgcmVzdWx0Lmdwcigp
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0Lmdwcigp
KSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ3Niw4ICs0NzMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKIAotICAgICAgICAgICAgR1BSUmVnIHJlZyA9IG9wMS5ncHIoKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok92ZXJmbG93LCByZWcsIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6
Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAg
ICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNDg3LDkgKzQ4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
IAotICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlZzIg
PSBvcDIuZ3ByKCk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIo
TWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBi
cmVhazsKQEAgLTc3NSwxNyArNzY5LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKIAogICAgIGNhc2UgUmV0dXJuOiB7CiAgICAgICAgIEFTU0VSVChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciAhPSBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIEFTU0VSVChH
UFJJbmZvOjpyZWdUMSAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKLSAgICAgICAg
QVNTRVJUKEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIgIT0gR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICBBU1NFUlQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgIT0g
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAjaWYgREZHX1NVQ0NFU1NfU1RBVFMKICAg
ICAgICAgc3RhdGljIFNhbXBsaW5nQ291bnRlciBjb3VudGVyKCJTcGVjdWxhdGl2ZUpJVCIpOwog
ICAgICAgICBtX2ppdC5lbWl0Q291bnQoY291bnRlcik7CiAjZW5kaWYKIAotICAgICAgICAvLyBS
ZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1cm5WYWx1ZVJlZ2lzdGVyLgorICAgICAgICAvLyBSZXR1
cm4gdGhlIHJlc3VsdCBpbiByZXR1cm5WYWx1ZUdQUi4KICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIEdQ
UkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIo
KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVy
biBhZGRyZXNzLgogICAgICAgICBtX2ppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihS
ZWdpc3RlckZpbGU6OlJldHVyblBDLCBHUFJJbmZvOjpyZWdUMSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA4NTI1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjayB7CiAgICAg
ICAgIERhdGFGb3JtYXQgZm9ybWF0OwogICAgIH07CiAgICAgUmVnaXN0ZXJJbmZvIG1fZ3BySW5m
b1tHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107Ci0gICAgTm9kZUluZGV4IG1fZnBySW5mb1tu
dW1iZXJPZkZQUnNdOworICAgIE5vZGVJbmRleCBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnNdOwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ss
IDE2PiBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMTAyMCw3ICsxMDIwLDcgQEAKICNpZiBF
TkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTY0KSAmJiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEVO
QUJMRV9ERkdfSklUIDEKIC8qIEVuYWJsZWQgd2l0aCByZXN0cmljdGlvbnMgdG8gY2lyY3VtdmVu
dCBrbm93biBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4gKi8KLSNkZWZpbmUgRU5BQkxFX0RGR19K
SVRfUkVTVFJJQ1RJT05TIDEKKyNkZWZpbmUgRU5BQkxFX0RGR19KSVRfUkVTVFJJQ1RJT05TIDAK
ICNlbmRpZgogCiAvKiBFbnN1cmUgdGhhdCBlaXRoZXIgdGhlIEpJVCBvciB0aGUgaW50ZXJwcmV0
ZXIgaGFzIGJlZW4gZW5hYmxlZC4gKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91600</attachid>
            <date>2011-04-28 17:16:58 -0700</date>
            <delta_ts>2011-04-28 17:18:15 -0700</delta_ts>
            <desc>Ooops! reverted Node changes!</desc>
            <filename>59763.3.patch</filename>
            <type>text/plain</type>
            <size>54438</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODUyNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDQtMjggIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTc2MworICAgICAgICBERkcgSklUIC0g
VW5pZnkgRlBSUmVnICYgRlBSZWdpc3RlcklECisKKyAgICAgICAgKEZvbGxvd2luZyBvbiBmcm9t
IEdQUlJlZy9SZWdpc3RlcklEIHVuaWZpY2F0aW9uKS4KKworICAgICAgICAqIGRmZy9ERkdGUFJJ
bmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6RlBSSW5mbzo6dG9SZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkRGRzo6RlBSSW5mbzo6ZGVidWdOYW1lKToKKyAgICAgICAgKiBkZmcvREZHR1BSSW5m
by5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmJveERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6dW5ib3hE
b3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZsdXNoUmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0ZsdXNoZWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNldHVwVHdvU3R1YkFyZ3MpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNldHVwU3R1YkFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FsbE9wZXJhdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6R1BSUmVzdWx0Ojpsb2NrZWRSZXN1bHQpOgorICAgICAgICAoSlND
OjpERkc6OkZQUlJlc3VsdDo6bG9ja2VkUmVzdWx0KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpmaWxsTnVtZXJpY1Rv
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxh
dGl2ZVRvTm9uU3BlY3VsYXRpdmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpj
b21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpFbnRyeUxvY2F0aW9uOjpFbnRyeUxvY2F0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6dmFsdWVUb051bWJlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9JbnQzMik6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6Om51bWJlclRvSW50MzIpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
Tm9uU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJ
VDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1
bGF0aXZlSklUOjpzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBkZmcvREZHUmVn
aXN0ZXJCYW5rLmg6CisgICAgICAgIChKU0M6OkRGRzo6UmVnaXN0ZXJCYW5rOjppdGVyYXRvcjo6
cmVnSUQpOgorICAgICAgICAoSlNDOjpERkc6OlJlZ2lzdGVyQmFuazo6aXRlcmF0b3I6OmRlYnVn
TmFtZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisKIDIwMTEtMDQtMjggIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZlcnQgIjxodHRwOi8vd2Via2l0Lm9yZy9iLzU5NzA1PiBXVEY6
OnBvc3RUaW1lcigpIGxlYWtzIGEgQ0ZSdW5Mb29wVGltZXJSZWYgZXZlcnkgdGltZSBpdCdzIGNh
bGxlZCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCShyZXZpc2lv
biA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywzMyArMzMsNjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi0vLyBBYnN0cmFjdGVkIHNlcXVlbnRpYWwgbnVtYmVyaW5nIG9mIGF2YWlsYWJs
ZSBtYWNoaW5lIHJlZ2lzdGVycyAoYXMgb3Bwb3NlZCB0byBHUFJSZWcsCi0vLyB3aGljaCBhcmUg
bm9uLXNlcXVlbnRpYWwsIGFuZCBub3QgYWJzdHJhY3RlZCBmcm9tIHRoZSByZWdpc3RlciBudW1i
ZXJpbmcgdXNlZCBieSB0aGUgdW5kZXJseWluZyBwcm9jZXNzb3IpLgotZW51bSBGUFJSZWcgeyBm
cHIwLCBmcHIxLCBmcHIyLCBmcHIzLCBmcHI0LCBmcHI1LCBudW1iZXJPZkZQUnMsIEludmFsaWRG
UFJSZWcgPSAweEZGRkZGRkZGIH07Ci0KLWlubGluZSBGUFJSZWcgbmV4dChGUFJSZWcmIHJlZykK
LXsKLSAgICBBU1NFUlQocmVnIDwgbnVtYmVyT2ZGUFJzKTsKLSAgICByZXR1cm4gcmVnID0gc3Rh
dGljX2Nhc3Q8RlBSUmVnPihyZWcgKyAxKTsKLX0KK3R5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkZQ
UmVnaXN0ZXJJRCBGUFJSZWc7CisjZGVmaW5lIEludmFsaWRGUFJSZWcgKChGUFJSZWcpLTEpCiAK
LWNsYXNzIEZQUkJhbmtJbmZvIHsKK2NsYXNzIEZQUkluZm8gewogcHVibGljOgogICAgIHR5cGVk
ZWYgRlBSUmVnIFJlZ2lzdGVyVHlwZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVy
T2ZSZWdpc3RlcnMgPSA2OwogCisgICAgLy8gVGVtcG9yYXJ5IHJlZ2lzdGVycy4KKyAgICBzdGF0
aWMgY29uc3QgRlBSUmVnIGZwUmVnVDAgPSBYODZSZWdpc3RlcnM6OnhtbTA7CisgICAgc3RhdGlj
IGNvbnN0IEZQUlJlZyBmcFJlZ1QxID0gWDg2UmVnaXN0ZXJzOjp4bW0xOworICAgIHN0YXRpYyBj
b25zdCBGUFJSZWcgZnBSZWdUMiA9IFg4NlJlZ2lzdGVyczo6eG1tMjsKKyAgICBzdGF0aWMgY29u
c3QgRlBSUmVnIGZwUmVnVDMgPSBYODZSZWdpc3RlcnM6OnhtbTM7CisgICAgc3RhdGljIGNvbnN0
IEZQUlJlZyBmcFJlZ1Q0ID0gWDg2UmVnaXN0ZXJzOjp4bW00OworICAgIHN0YXRpYyBjb25zdCBG
UFJSZWcgZnBSZWdUNSA9IFg4NlJlZ2lzdGVyczo6eG1tNTsKKyAgICAvLyBUaGVzZSBjb25zdGFu
dHMgcHJvdmlkZSB0aGUgbmFtZXMgZm9yIHRoZSBnZW5lcmFsIHB1cnBvc2UgYXJndW1lbnQgJiBy
ZXR1cm4gdmFsdWUgcmVnaXN0ZXJzLgorICAgIHN0YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRG
UFIwID0gWDg2UmVnaXN0ZXJzOjp4bW0wOyAvLyBmcFJlZ1QwCisgICAgc3RhdGljIGNvbnN0IEZQ
UlJlZyBhcmd1bWVudEZQUjEgPSBYODZSZWdpc3RlcnM6OnhtbTE7IC8vIGZwUmVnVDEKKyAgICBz
dGF0aWMgY29uc3QgRlBSUmVnIGFyZ3VtZW50RlBSMiA9IFg4NlJlZ2lzdGVyczo6eG1tMjsgLy8g
ZnBSZWdUMgorICAgIHN0YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRGUFIzID0gWDg2UmVnaXN0
ZXJzOjp4bW0zOyAvLyBmcFJlZ1QzCisgICAgc3RhdGljIGNvbnN0IEZQUlJlZyByZXR1cm5WYWx1
ZUZQUiA9IFg4NlJlZ2lzdGVyczo6eG1tMDsgLy8gZnBSZWdUMAorCisgICAgLy8gRlBSUmVnIG1h
cHBpbmcgaXMgZGlyZWN0LCB0aGUgbWFjaGluZSByZWdzaXRlciBudW1iZXJzIGNhbgorICAgIC8v
IGJlIHVzZWQgZGlyZWN0bHkgYXMgaW5kaWNlcyBpbnRvIHRoZSBGUFIgUmVnaXN0ZXJCYW5rLgor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMCA9PSAwLCB4bW0wX2lzXzApOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMSA9PSAxLCB4bW0xX2lzXzEpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMiA9PSAyLCB4bW0yX2lzXzIpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMyA9PSAzLCB4bW0zX2lzXzMpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tNCA9PSA0LCB4bW00X2lzXzQpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tNSA9PSA1LCB4bW01X2lzXzUpOwog
ICAgIHN0YXRpYyBGUFJSZWcgdG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAg
ICAgIHJldHVybiAoRlBSUmVnKWluZGV4OwogICAgIH0KLQogICAgIHN0YXRpYyB1bnNpZ25lZCB0
b0luZGV4KEZQUlJlZyByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gKHVuc2lnbmVkKXJlZzsK
ICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnTmFt
ZShGUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkRlBSUmVn
KTsKKyAgICAgICAgQVNTRVJUKHJlZyA8IDE2KTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IG5hbWVGb3JSZWdpc3RlclsxNl0gPSB7CisgICAgICAgICAgICAieG1tMCIsICJ4bW0xIiwgInht
bTIiLCAieG1tMyIsCisgICAgICAgICAgICAieG1tNCIsICJ4bW01IiwgInhtbTYiLCAieG1tNyIs
CisgICAgICAgICAgICAieG1tOCIsICJ4bW05IiwgInhtbTEwIiwgInhtbTExIiwKKyAgICAgICAg
ICAgICJ4bW0xMiIsICJ4bW0xMyIsICJ4bW0xNCIsICJ4bW0xNSIKKyAgICAgICAgfTsKKyAgICAg
ICAgcmV0dXJuIG5hbWVGb3JSZWdpc3RlcltyZWddOworICAgIH0KKyNlbmRpZgogfTsKIAotdHlw
ZWRlZiBSZWdpc3RlckJhbms8RlBSQmFua0luZm8+OjppdGVyYXRvciBmcHJfaXRlcmF0b3I7Cit0
eXBlZGVmIFJlZ2lzdGVyQmFuazxGUFJJbmZvPjo6aXRlcmF0b3IgZnByX2l0ZXJhdG9yOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsMTIgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnVDcgPSBYODZSZWdpc3RlcnM6OnI5OwogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnVDggPSBYODZSZWdpc3RlcnM6OnIxMDsKICAgICAvLyBU
aGVzZSBjb25zdGFudHMgcHJvdmlkZSB0aGUgbmFtZXMgZm9yIHRoZSBnZW5lcmFsIHB1cnBvc2Ug
YXJndW1lbnQgJiByZXR1cm4gdmFsdWUgcmVnaXN0ZXJzLgotICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgYXJndW1lbnRSZWdpc3RlcjAgPSBYODZSZWdpc3RlcnM6OmVkaTsgLy8gcmVnVDQKLSAgICBz
dGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50UmVnaXN0ZXIxID0gWDg2UmVnaXN0ZXJzOjplc2k7
IC8vIHJlZ1Q1Ci0gICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudFJlZ2lzdGVyMiA9IFg4
NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQotICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1l
bnRSZWdpc3RlcjMgPSBYODZSZWdpc3RlcnM6OmVjeDsgLy8gcmVnVDIKLSAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHJldHVyblZhbHVlUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVn
VDAKLSAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlUmVnaXN0ZXIyID0gWDg2UmVn
aXN0ZXJzOjplZHg7IC8vIHJlZ1QxCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQ
UjAgPSBYODZSZWdpc3RlcnM6OmVkaTsgLy8gcmVnVDQKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IGFyZ3VtZW50R1BSMSA9IFg4NlJlZ2lzdGVyczo6ZXNpOyAvLyByZWdUNQorICAgIHN0YXRpYyBj
b25zdCBHUFJSZWcgYXJndW1lbnRHUFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCisg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjMgPSBYODZSZWdpc3RlcnM6OmVjeDsg
Ly8gcmVnVDIKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVn
aXN0ZXJzOjplYXg7IC8vIHJlZ1QwCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1
ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKIAogICAgIHN0YXRpYyBHUFJSZWcg
dG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDg1MjUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIEZQUlJlZyBKSVRDb2RlR2VuZXJhdG9y
OjpmaWxsRG91YmxlKE5vZGUKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEb3VibGVDb25zdGFu
dChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRl
KCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIodmFsdWVPZkRv
dWJsZUNvbnN0YW50KG5vZGVJbmRleCkpKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bW92ZVB0clRvRG91YmxlKGdwciwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAg
ICAgICAgICAgIHVubG9jayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihm
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CkBAIC0xNjIsOCArMTYyLDYg
QEAgRlBSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxEb3VibGUoTm9kZQogICAgICAgICBGUFJS
ZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgR1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0
ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAgdGhpcyBhbGxvY2F0aW9uIG9uIHRoZSBsYXN0IHVz
ZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8KIAotICAgICAgICBKSVRDb21waWxlcjo6RlBSZWdp
c3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwotCiAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOwogCiAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNEb3VibGUoanNWYWx1ZUdw
cik7CkBAIC0xNzEsMTIgKzE2OSwxMiBAQCBGUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbERv
dWJsZShOb2RlCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91
YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwg
dGVtcEdwcik7CiAgICAgICAgIG1faml0LmFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHRlbXBHcHIpOwotICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwg
ZnBSZWcpOworICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwgZnByKTsKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsK
IAogICAgICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCiAgICAgICAgIGlzSW50ZWdl
ci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFs
dWVHcHIsIGZwUmVnKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoanNWYWx1
ZUdwciwgZnByKTsKICAgICAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7CiAKICAg
ICAgICAgbV9ncHJzLnJlbGVhc2UoanNWYWx1ZUdwcik7CkBAIC0xOTIsMTAgKzE5MCw4IEBAIEZQ
UlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAg
ICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBHUFJSZWcgcmVnID0gZ3ByOwotICAgICAg
ICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVn
aXN0ZXJJRChmcHIpOwogCi0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZywg
ZnBSZWcpOworICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShncHIsIGZwcik7CiAK
ICAgICAgICAgbV9ncHJzLnJlbGVhc2UoZ3ByKTsKICAgICAgICAgbV9ncHJzLnVubG9jayhncHIp
OwpAQCAtMzk1LDE3ICszOTEsMTMgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNp
c3RlbmN5KAogICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAg
ICBmb3IgKEZQUlJlZyBpID0gZnByMDsgaSA8IG51bWJlck9mRlBSczsgbmV4dChpKSkgewotICAg
ICAgICBpZiAobV9mcHJzLmlzTG9ja2VkKGkpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IGZwciAlZCBpcyBsb2NrZWQuXG4iLCBp
KTsKKyAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXIuaXNMb2NrZWQoKSkgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVk
OiBmcHIgJXMgaXMgbG9ja2VkLlxuIiwgaXRlci5kZWJ1Z05hbWUoKSk7CiAgICAgICAgICAgICBm
YWlsZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIGZw
ckNvbnRlbnRzW251bWJlck9mRlBSc107Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZGUFJzOyArK2kpCi0gICAgICAgIGZwckNvbnRlbnRzW2ldID0gSW52YWxpZFZpcnR1
YWxSZWdpc3RlcjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nZW5lcmF0aW9uSW5m
by5zaXplKCk7ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gKFZpcnR1YWxSZWdpc3RlcilpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKQEAgLTQzMSw3ICs0MjMsMTAgQEAgdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KAogICAgICAgICBjYXNlIERhdGFG
b3JtYXREb3VibGU6IHsKICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbmZvLmZwcigpOwogICAg
ICAgICAgICAgQVNTRVJUKGZwciAhPSBJbnZhbGlkRlBSUmVnKTsKLSAgICAgICAgICAgIGZwckNv
bnRlbnRzW2Zwcl0gPSB2aXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAobV9mcHJzLm5h
bWUoZnByKSAhPSB2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIHZp
cnR1YWwgcmVnaXN0ZXIgJWQgKGZwciAlcykuXG4iLCB2aXJ0dWFsUmVnaXN0ZXIsIEZQUkluZm86
OmRlYnVnTmFtZShmcHIpKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDQz
LDE0ICs0MzgsMjAgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KAog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGlmIChpdGVyLmdwcigp
ICE9IGluZm8uZ3ByKCkpIHsKKyAgICAgICAgaWYgKGl0ZXIucmVnSUQoKSAhPSBpbmZvLmdwcigp
KSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBm
YWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIGdwciAlcyAodmlydHVhbCByZWdpc3RlciAlZCkuXG4i
LCBpdGVyLmRlYnVnTmFtZSgpLCB2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAgICAgZmFpbGVk
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICBmb3IgKEZQUlJlZyBpID0gZnByMDsgaSA8
IG51bWJlck9mRlBSczsgbmV4dChpKSkgewotICAgICAgICBpZiAobV9mcHJzLm5hbWUoaSkgIT0g
ZnByQ29udGVudHNbaV0pIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJ
U1RFTkNZX0NIRUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZnByICVkICglZCAhPSAlZCku
XG4iLCBpLCBtX2ZwcnMubmFtZShpKSwgZnByQ29udGVudHNbaV0pOworCisgICAgZm9yIChmcHJf
aXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBpdGVyLm5h
bWUoKTsKKyAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIGlmIChpdGVy
LnJlZ0lEKCkgIT0gaW5mby5mcHIoKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJE
RkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVkOiBuYW1lIG1pc21hdGNoIGZvciBmcHIgJXMgKHZp
cnR1YWwgcmVnaXN0ZXIgJWQpLlxuIiwgaXRlci5kZWJ1Z05hbWUoKSwgdmlydHVhbFJlZ2lzdGVy
KTsKICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNiBAQCBjbGFzcyBKSVRDb2RlR2Vu
ZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIgVHJ1c3RlZEltbTMyOwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkltbTMyIElt
bTMyOwotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVy
SUQ7CiAKICAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2V0IHByaW9yaXRpZXMg
Zm9yIHNwaWxsIG9yZGVyIGZvcgogICAgIC8vIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCkBAIC0x
NTcsMTYgKzE1NiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBjb252ZXJ0
IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMgYm94ZWQgYW5kIEpTVmFsdWVzLgogICAgIEdQ
UlJlZyBib3hEb3VibGUoRlBSUmVnIGZwciwgR1BSUmVnIGdwcikKICAgICB7Ci0gICAgICAgIEpJ
VENvbXBpbGVyOjpGUFJlZ2lzdGVySUQgZnBSZWcgPSBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3Rl
cklEKGZwcik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGVUb1B0cihmcFJlZywgZ3ByKTsKKyAg
ICAgICAgbV9qaXQubW92ZURvdWJsZVRvUHRyKGZwciwgZ3ByKTsKICAgICAgICAgbV9qaXQuc3Vi
UHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKICAgICAgICAgcmV0dXJu
IGdwcjsKICAgICB9CiAgICAgRlBSUmVnIHVuYm94RG91YmxlKEdQUlJlZyBncHIsIEZQUlJlZyBm
cHIpCiAgICAgewotICAgICAgICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklU
Q29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwogICAgICAgICBtX2ppdC5hZGRQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAgICBtX2ppdC5tb3ZlUHRy
VG9Eb3VibGUoZ3ByLCBmcFJlZyk7CisgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIs
IGZwcik7CiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQogICAgIEdQUlJlZyBib3hEb3VibGUo
RlBSUmVnIGZwcikKQEAgLTI1NiwxMSArMjUzLDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgICAg
ICAgICBpdGVyLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBm
b3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5leHQoZnByKSkgewot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBtX2ZwcnMubmFtZShmcHIpOwotICAg
ICAgICAgICAgaWYgKG5hbWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewotICAgICAgICAg
ICAgICAgIHNwaWxsKG5hbWUpOwotICAgICAgICAgICAgICAgIG1fZnBycy5yZWxlYXNlKGZwcik7
CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAh
PSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBzcGlsbChpdGVyLm5h
bWUoKSk7CisgICAgICAgICAgICAgICAgaXRlci5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yNzQsOSArMjcwLDggQEAgcHJvdGVjdGVkOgogICAgICAgICAg
ICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoRlBSUmVnIGZwciA9
IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbmFtZSA9IG1fZnBycy5uYW1lKGZwcik7Ci0gICAgICAgICAgICBpZiAobmFt
ZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBp
dGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTQ4NSw2MCArNDgwLDYwIEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpZiAoc3JjQiAh
PSBkZXN0QSkgewogICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBlYXN5IGNhc2VzIC0gdHdvIHNp
bXBsZSBtb3Zlcy4KLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZw
clRvUmVnaXN0ZXJJRChzcmNBKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChkZXN0QSkp
OwotICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3Rl
cklEKHNyY0IpLCBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RCKSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlRG91YmxlKHNyY0EsIGRlc3RBKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmVEb3VibGUoc3JjQiwgZGVzdEIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAoc3JjQSAhPSBkZXN0QikgewogICAgICAgICAgICAgLy8gSGFu
ZGxlIHRoZSBub24tc3dhcCBjYXNlIC0ganVzdCBwdXQgc3JjQiBpbiBwbGFjZSBmaXJzdC4KLSAg
ICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChz
cmNCKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChkZXN0QikpOwotICAgICAgICAgICAg
bV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKHNyY0EpLCBKSVRD
b21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RBKSk7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
RG91YmxlKHNyY0IsIGRlc3RCKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoc3JjQSwg
ZGVzdEEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJU
KHNyY0IgPT0gZGVzdEEgJiYgc3JjQSA9PSBkZXN0Qik7CiAgICAgICAgIC8vIE5lZWQgdG8gc3dh
cDsgcGljayBhIHRlbXBvcmFyeSByZWdpc3Rlci4KICAgICAgICAgRlBSUmVnIHRlbXA7Ci0gICAg
ICAgIGlmIChkZXN0QSAhPSBKSVRDb21waWxlcjo6YXJndW1lbnRGUFIzICYmIGRlc3RBICE9IEpJ
VENvbXBpbGVyOjphcmd1bWVudEZQUjMpCi0gICAgICAgICAgICB0ZW1wID0gSklUQ29tcGlsZXI6
OmFyZ3VtZW50RlBSMzsKLSAgICAgICAgZWxzZSBpZiAoZGVzdEEgIT0gSklUQ29tcGlsZXI6OmFy
Z3VtZW50RlBSMiAmJiBkZXN0QSAhPSBKSVRDb21waWxlcjo6YXJndW1lbnRGUFIyKQotICAgICAg
ICAgICAgdGVtcCA9IEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjI7CisgICAgICAgIGlmIChkZXN0
QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjMgJiYgZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRG
UFIzKQorICAgICAgICAgICAgdGVtcCA9IEZQUkluZm86OmFyZ3VtZW50RlBSMzsKKyAgICAgICAg
ZWxzZSBpZiAoZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRGUFIyICYmIGRlc3RBICE9IEZQUklu
Zm86OmFyZ3VtZW50RlBSMikKKyAgICAgICAgICAgIHRlbXAgPSBGUFJJbmZvOjphcmd1bWVudEZQ
UjI7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGRlc3RBICE9IEpJVENvbXBp
bGVyOjphcmd1bWVudEZQUjEgJiYgZGVzdEEgIT0gSklUQ29tcGlsZXI6OmFyZ3VtZW50RlBSMSk7
Ci0gICAgICAgICAgICB0ZW1wID0gSklUQ29tcGlsZXI6OmFyZ3VtZW50RlBSMTsKKyAgICAgICAg
ICAgIEFTU0VSVChkZXN0QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjEgJiYgZGVzdEEgIT0gRlBS
SW5mbzo6YXJndW1lbnRGUFIxKTsKKyAgICAgICAgICAgIHRlbXAgPSBGUFJJbmZvOjphcmd1bWVu
dEZQUjE7CiAgICAgICAgIH0KLSAgICAgICAgbV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6
ZnByVG9SZWdpc3RlcklEKGRlc3RBKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRCh0ZW1w
KSk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJ
RChkZXN0QiksIEpJVENvbXBpbGVyOjpmcHJUb1JlZ2lzdGVySUQoZGVzdEEpKTsKLSAgICAgICAg
bV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKHRlbXApLCBKSVRD
b21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RCKSk7CisgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUoZGVzdEEsIHRlbXApOworICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKGRlc3RCLCBkZXN0QSk7
CisgICAgICAgIG1faml0Lm1vdmVEb3VibGUodGVtcCwgZGVzdEIpOwogICAgIH0KICAgICB2b2lk
IHNldHVwU3R1YkFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewotICAg
ICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxLCBHUFJJbmZv
Ojphcmd1bWVudFJlZ2lzdGVyMj4oYXJnMSwgYXJnMik7CisgICAgICAgIHNldHVwVHdvU3R1YkFy
Z3M8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+KGFyZzEsIGFy
ZzIpOwogICAgIH0KICAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgLy8gSWYgbmVpdGhlciBvZiBh
cmcyL2FyZzMgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2FuIG1vdmUgYXJnMSBpbnRvIHBsYWNl
LgogICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBUd29TdHViQXJncyB0byBmaXggYXJn
Mi9hcmczLgotICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSAm
JiBhcmczICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKSB7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKTsKLSAgICAgICAgICAgIHNl
dHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjIsIEdQUkluZm86OmFyZ3Vt
ZW50UmVnaXN0ZXIzPihhcmcyLCBhcmczKTsKKyAgICAgICAgaWYgKGFyZzIgIT0gR1BSSW5mbzo6
YXJndW1lbnRHUFIxICYmIGFyZzMgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxKSB7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1l
bnRHUFIzPihhcmcyLCBhcmczKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIElmIG5laXRoZXIgb2YgYXJnMS9hcmczIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdl
IGNhbiBtb3ZlIGFyZzIgaW50byBwbGFjZS4KICAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNl
dHVwVHdvU3R1YkFyZ3MgdG8gZml4IGFyZzEvYXJnMy4KLSAgICAgICAgaWYgKGFyZzEgIT0gR1BS
SW5mbzo6YXJndW1lbnRSZWdpc3RlcjIgJiYgYXJnMyAhPSBHUFJJbmZvOjphcmd1bWVudFJlZ2lz
dGVyMikgewotICAgICAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudFJl
Z2lzdGVyMik7Ci0gICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50
UmVnaXN0ZXIxLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMz4oYXJnMSwgYXJnMyk7CisgICAg
ICAgIGlmIChhcmcxICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMiAmJiBhcmczICE9IEdQUkluZm86
OmFyZ3VtZW50R1BSMikgeworICAgICAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgICAgICAgICAgc2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMz4oYXJnMSwgYXJnMyk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiBuZWl0aGVyIG9mIGFyZzEvYXJn
MiBhcmUgaW4gb3VyIHdheSwgdGhlbiB3ZSBjYW4gbW92ZSBhcmczIGludG8gcGxhY2UuCiAgICAg
ICAgIC8vIFRoZW4gd2UgY2FuIHVzZSBzZXR1cFR3b1N0dWJBcmdzIHRvIGZpeCBhcmcxL2FyZzIu
Ci0gICAgICAgIGlmIChhcmcxICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIzICYmIGFyZzIg
IT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUo
YXJnMywgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpOwotICAgICAgICAgICAgc2V0dXBUd29T
dHViQXJnczxHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdp
c3RlcjI+KGFyZzEsIGFyZzIpOworICAgICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjMgJiYgYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgICAgIHNldHVw
VHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+
KGFyZzEsIGFyZzIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTU0Nywy
NSArNTQyLDI1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQnV0IGFyZSB0aGV5IGluIHRoZSBy
aWdodCBvbmVzPwogCiAgICAgICAgIC8vIEZpcnN0LCBlbnN1cmUgYXJnMSBpcyBpbiBwbGFjZS4K
LSAgICAgICAgaWYgKGFyZzEgIT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpIHsKLSAgICAg
ICAgICAgIG1faml0LnN3YXAoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOworICAg
ICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjEpIHsKKyAgICAgICAgICAgIG1f
aml0LnN3YXAoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKIAotICAgICAgICAgICAgLy8g
SWYgYXJnMSB3YXNuJ3QgaW4gYXJndW1lbnRSZWdpc3RlcjEsIG9uZSBvZiBhcmcyL2FyZzMgbXVz
dCBiZS4KLSAgICAgICAgICAgIEFTU0VSVChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0
ZXIxIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOwotICAgICAgICAgICAg
Ly8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRSZWdpc3RlcjEgaXQgbm8gbG9uZ2VyIGlzIChkdWUg
dG8gdGhlIHN3YXApLgorICAgICAgICAgICAgLy8gSWYgYXJnMSB3YXNuJ3QgaW4gYXJndW1lbnRH
UFIxLCBvbmUgb2YgYXJnMi9hcmczIG11c3QgYmUuCisgICAgICAgICAgICBBU1NFUlQoYXJnMiA9
PSBHUFJJbmZvOjphcmd1bWVudEdQUjEgfHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgLy8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRHUFIxIGl0IG5vIGxvbmdl
ciBpcyAoZHVlIHRvIHRoZSBzd2FwKS4KICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBhcmczIG11
c3QgaGF2ZSBiZWVuLiBNYXJrIGhpbSBhcyBtb3ZlZC4KLSAgICAgICAgICAgIGlmIChhcmcyID09
IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKQorICAgICAgICAgICAgaWYgKGFyZzIgPT0gR1BS
SW5mbzo6YXJndW1lbnRHUFIxKQogICAgICAgICAgICAgICAgIGFyZzIgPSBhcmcxOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGFyZzMgPSBhcmcxOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gRWl0aGVyIGFyZzIgJiBhcmczIG5lZWQgc3dhcHBpbmcsIG9yIHdlJ3JlIGFsbCBk
b25lLgotICAgICAgICBBU1NFUlQoKGFyZzIgPT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjIg
fHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMykKLSAgICAgICAgICAgIHx8IChh
cmcyID09IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIzIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJn
dW1lbnRSZWdpc3RlcjIpKTsKKyAgICAgICAgQVNTRVJUKChhcmcyID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiB8fCBhcmczID09IEdQUkluZm86OmFyZ3VtZW50R1BSMykKKyAgICAgICAgICAgIHx8
IChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50R1BSMyB8fCBhcmczID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMikpOwogCi0gICAgICAgIGlmIChhcmcyICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0
ZXIyKQotICAgICAgICAgICAgbV9qaXQuc3dhcChHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMiwg
R1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpOworICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpCisgICAgICAgICAgICBtX2ppdC5zd2FwKEdQUkluZm86OmFyZ3VtZW50
R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRo
b2RzIGFkZCBjYWxscyB0byBDKysgaGVscGVyIGZ1bmN0aW9ucy4KQEAgLTU3MywxMiArNTY4LDEy
IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAKLSAg
ICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSk7Ci0gICAg
ICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUklu
Zm86OmFyZ3VtZW50UmVnaXN0ZXIyKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjApOworICAgICAgICBtX2pp
dC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIsIHJlc3VsdCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdCk7CiAgICAgfQogICAgIHZvaWQgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSWRlbnRpZmllciog
aWRlbnRpZmllcikKICAgICB7CkBAIC01ODgsNDkgKzU4Myw0OSBAQCBwcm90ZWN0ZWQ6CiAgICAg
ewogICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOwogCi0gICAgICAgIG1faml0Lm1vdmUoYXJn
MSwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMCk7CisgICAg
ICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKIAogICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0g
ICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVSZWdpc3RlciwgcmVzdWx0KTsK
KyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAg
ICB9CiAgICAgdm9pZCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNGbHVz
aGVkKCkpOwogCi0gICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdp
c3RlcjEpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMCk7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVSZWdpc3RlciwgcmVzdWx0KTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICB9CiAgICAgdm9pZCBjYWxsT3BlcmF0
aW9uKFpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAK
ICAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIpOwotICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVy
MCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIsIHJlc3VsdCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdCk7CiAgICAgfQogICAgIHZvaWQgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOwogCiAgICAgICAgIHNldHVwU3R1
YkFyZ3VtZW50cyhhcmcxLCBhcmcyKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjApOworICAgICAgICBtX2pp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogCiAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKLSAg
ICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZVJlZ2lzdGVyLCByZXN1bHQpOwor
ICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOwogICAg
IH0KICAgICB2b2lkIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpKUCBvcGVyYXRpb24s
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAg
IEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAKICAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEs
IGFyZzIpOwotICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHBv
aW50ZXIpLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMyk7Ci0gICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsK
KyAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQpAQCAtNjQzLDcgKzYzOCw3
IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKIAogICAgICAgICBz
ZXR1cFN0dWJBcmd1bWVudHMoYXJnMSwgYXJnMiwgYXJnMyk7Ci0gICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsK
KyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CiAgICAgfQpAQCAtNjUxLDEwICs2NDYsMTAgQEAgcHJvdGVjdGVkOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKIAotICAgICAgICBzZXR1cFR3b1N0dWJBcmdz
PEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjAsIEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjE+KGFy
ZzEsIGFyZzIpOworICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEZQUkluZm86OmFyZ3VtZW50RlBS
MCwgRlBSSW5mbzo6YXJndW1lbnRGUFIxPihhcmcxLCBhcmcyKTsKIAogICAgICAgICBtX2ppdC5h
cHBlbmRDYWxsKG9wZXJhdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGls
ZXI6OmZwUmV0dXJuVmFsdWVSZWdpc3RlciwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChy
ZXN1bHQpKTsKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UiwgcmVzdWx0KTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQpAQCAtNzA0LDcgKzY5OSw3IEBAIHByb3Rl
Y3RlZDoKICAgICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgogICAgIFZl
Y3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87CiAgICAgUmVnaXN0ZXJC
YW5rPEdQUkluZm8+IG1fZ3ByczsKLSAgICBSZWdpc3RlckJhbms8RlBSQmFua0luZm8+IG1fZnBy
czsKKyAgICBSZWdpc3RlckJhbms8RlBSSW5mbz4gbV9mcHJzOwogCiAgICAgVmVjdG9yPE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbD4gbV9ibG9ja0hlYWRzOwogICAgIHN0cnVjdCBCcmFuY2hSZWNvcmQg
ewpAQCAtODA4LDExICs4MDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Zwck9ySW52
YWxpZDsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGdwcigpCi0g
ICAgewotICAgICAgICByZXR1cm4gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIoKSk7
Ci0gICAgfQotCiBwcml2YXRlOgogICAgIEpJVENvZGVHZW5lcmF0b3IqIG1faml0OwogICAgIE5v
ZGVJbmRleCBtX2luZGV4OwpAQCAtOTEzLDEyICs5MDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2ZwcjsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGdw
cigpCi0gICAgewotICAgICAgICBBU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7Ci0gICAg
ICAgIHJldHVybiBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKG1fZnByKTsKLSAgICB9Ci0K
IHByb3RlY3RlZDoKICAgICBGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBGUFJS
ZWcgbG9ja2VkRlBSKQogICAgICAgICA6IG1faml0KGppdCkKQEAgLTk0Niw4ICs5MzAsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBHUFJSZWcgbG9ja2VkUmVzdWx0KEpJVENvZGVH
ZW5lcmF0b3IqIGppdCkKICAgICB7Ci0gICAgICAgIGppdC0+bG9jayhHUFJJbmZvOjpyZXR1cm5W
YWx1ZVJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0
ZXI7CisgICAgICAgIGppdC0+bG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHJldHVybiBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjsKICAgICB9CiB9OwogCkBAIC05NjEsOCAr
OTQ1LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgRlBSUmVnIGxvY2tlZFJlc3Vs
dChKSVRDb2RlR2VuZXJhdG9yKiBqaXQpCiAgICAgewotICAgICAgICBqaXQtPmxvY2soSklUQ29t
cGlsZXI6OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgcmV0dXJuIEpJVENvbXBpbGVyOjpyZXR1
cm5WYWx1ZUZQUjsKKyAgICAgICAgaml0LT5sb2NrKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsK
KyAgICAgICAgcmV0dXJuIEZQUkluZm86OnJldHVyblZhbHVlRlBSOwogICAgIH0KIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZp
c2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNiArNDcsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6
ZmlsbE51bWVyaWNUb0RvdWJsZShObwogICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkgewogICAg
ICAgICBBU1NFUlQobm9kZS5vcCA9PSBEb3VibGVDb25zdGFudCk7CiAgICAgICAgIG1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERv
dWJsZVRvSW50cHRyKHZhbHVlT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpKSkpLCB0ZW1wb3Jh
cnkpOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHJUb1JlZ2lzdGVySUQo
ZnByKSk7CisgICAgICAgIG1vdmVQdHJUb0RvdWJsZSh0ZW1wb3JhcnksIGZwcik7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkp
LCB0ZW1wb3JhcnkpOwogICAgICAgICBKdW1wIGlzSW50ZWdlciA9IGJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0ZW1wb3JhcnksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CiAgICAgICAgIGppdEFzc2VydElzSlNEb3VibGUodGVtcG9yYXJ5KTsKICAgICAg
ICAgYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGVtcG9yYXJ5KTsKLSAg
ICAgICAgbW92ZVB0clRvRG91YmxlKHRlbXBvcmFyeSwgZnByVG9SZWdpc3RlcklEKGZwcikpOwor
ICAgICAgICBtb3ZlUHRyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHIpOwogICAgICAgICBKdW1wIGhh
c1VuYm94ZWREb3VibGUgPSBqdW1wKCk7CiAgICAgICAgIGlzSW50ZWdlci5saW5rKHRoaXMpOwot
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZSh0ZW1wb3JhcnksIGZwclRvUmVnaXN0ZXJJRChm
cHIpKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHIpOwogICAg
ICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsodGhpcyk7CiAgICAgfQogfQpAQCAtMTQyLDI1ICsx
NDIsMjUgQEAgdm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTgogICAgIH0K
IAogICAgIC8vIFNwaWxsIGFsbCBGUFJzIGluIHVzZSBieSB0aGUgc3BlY3VsYXRpdmUgcGF0aC4K
LSAgICBmb3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5leHQoZnBy
KSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gY2hlY2subV9mcHJJbmZvW2Zwcl07
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraW5kZXgpIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGNoZWNr
Lm1fZnBySW5mb1tpbmRleF07CiAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IGdyYXBoKClbbm9kZUluZGV4XS52aXJ0dWFsUmVnaXN0ZXIoKTsKIAotICAgICAgICBt
b3ZlRG91YmxlVG9QdHIoZnByVG9SZWdpc3RlcklEKGZwciksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgbW92ZURvdWJsZVRvUHRyKEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpLCBHUFJJbmZv
OjpyZWdUMCk7CiAgICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgfQogCiAgICAgLy8gRmlsbCBhbGwgRlBScyBp
biB1c2UgYnkgdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgotICAgIGZvciAoRlBSUmVnIGZwciA9
IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBlbnRyeS5tX2ZwckluZm9bZnByXTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgewor
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZW50cnkubV9mcHJJbmZvW2luZGV4XTsKICAg
ICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBmaWxsTnVtZXJpY1RvRG91YmxlKG5vZGVJbmRleCwgZnByLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgIGZpbGxOdW1lcmljVG9Eb3VibGUobm9kZUluZGV4LCBGUFJJbmZvOjp0b1Jl
Z2lzdGVyKGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIH0KIAogICAgIC8vIEZpbGwgYWxs
IEdQUnMgaW4gdXNlIGJ5IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KQEAgLTMxMywxOSArMzEz
LDE5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAgICAgICAg
Ly8gdG8gbG9vayB1cCBoYW5kbGVyIGluZm9ybWF0aW9uLiBUaGUgaWRlbnRpZmllciB3ZSB1c2Ug
aXMgdGhlIHJldHVybiBhZGRyZXNzCiAgICAgICAgIC8vIG9mIHRoZSBjYWxsIG91dCBmcm9tIEpJ
VCBjb2RlIHRoYXQgdGhyZXcgdGhlIGV4Y2VwdGlvbjsgdGhpcyBpcyBzdGlsbAogICAgICAgICAv
LyBhdmFpbGFibGUgb24gdGhlIHN0YWNrLCBqdXN0IGJlbG93IHRoZSBzdGFjayBwb2ludGVyIQot
ICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dFJlZ2lzdGVyMCk7Ci0gICAgICAgIHBlZWsoR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEsIC0x
KTsKKyAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgcGVlayhHUFJJbmZvOjphcmd1bWVudEdQUjEsIC0xKTsKICAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKCksIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBsZWF2ZXMgdGhlIGhh
bmRsZXIgQ2FsbEZyYW1lKiBpbiB0aGUgcmV0dXJuVmFsdWVSZWdpc3RlciwKLSAgICAgICAgLy8g
YW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIGluIHJldHVyblZhbHVlUmVnaXN0ZXIyLgot
ICAgICAgICBqdW1wKEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIyKTsKKyAgICAgICAgLy8g
bG9va3VwRXhjZXB0aW9uSGFuZGxlciBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB0
aGUgcmV0dXJuVmFsdWVHUFIsCisgICAgICAgIC8vIGFuZCB0aGUgYWRkcmVzcyBvZiB0aGUgaGFu
ZGxlciBpbiByZXR1cm5WYWx1ZUdQUjIuCisgICAgICAgIGp1bXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKICAgICB9CiAKICAgICAvLyBHZW5lcmF0ZSB0aGUgcmVnaXN0ZXIgZmlsZSBjaGVj
azsgaWYgdGhlIGZhc3QgY2hlY2sgaW4gdGhlIGZ1bmN0aW9uIGhlYWQgZmFpbHMsCiAgICAgLy8g
d2UgbmVlZCB0byBjYWxsIG91dCB0byBhIGhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVy
IG1vcmUgc3BhY2UgaXMgYXZhaWxhYmxlLgogICAgIC8vIEZJWE1FOiBjaGFuZ2UgdGhpcyBmcm9t
IGEgY3RpIGNhbGwgdG8gYSBERkcgc3R5bGUgb3BlcmF0aW9uIChub3JtYWwgQyBjYWxsaW5nIGNv
bnZlbnRpb25zKS4KICAgICByZWdpc3RlckZpbGVDaGVjay5saW5rKHRoaXMpOwotICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsKKyAgICBt
b3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIHBv
a2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklU
U3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwogICAgIENhbGwgY2FsbFJl
Z2lzdGVyRmlsZUNoZWNrID0gY2FsbCgpOwogICAgIGp1bXAoZnJvbVJlZ2lzdGVyRmlsZUNoZWNr
KTsKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24o
SklUQ29kCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1Qy
KTsKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIsIFJlZ2lzdGVy
RmlsZTo6UmV0dXJuUEMpOwogICAgIGJyYW5jaDMyKEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwgSW1t
MzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywg
dGhpcyk7Ci0gICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRS
ZWdpc3RlcjApOworICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09G
RlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7
CiAgICAgQ2FsbCBjYWxsQXJpdHlDaGVjayA9IGNhbGwoKTsKICAgICBtb3ZlKEdQUkluZm86OnJl
Z1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDI4ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgeyBy
ZXR1cm4gbV9nbG9iYWxEYXRhOyB9CiAKICNpZiBDUFUoWDg2XzY0KQotICAgIC8vIFRlbXBvcmFy
eSByZWdpc3RlcnMuCi0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QwID0gWDg2
UmVnaXN0ZXJzOjp4bW0wOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9
IFg4NlJlZ2lzdGVyczo6eG1tMTsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVn
VDIgPSBYODZSZWdpc3RlcnM6OnhtbTI7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1QzID0gWDg2UmVnaXN0ZXJzOjp4bW0zOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUNCA9IFg4NlJlZ2lzdGVyczo6eG1tNDsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdp
c3RlcklEIGZwUmVnVDUgPSBYODZSZWdpc3RlcnM6OnhtbTU7Ci0KLSAgICAvLyBUaGVzZSBjb25z
dGFudHMgcHJvdmlkZSBib3RoIEZQUmVnaXN0ZXJJRCAmIEZQUlJlZyBzdHlsZSBuYW1lcyBmb3Ig
dGhlCi0gICAgLy8gZmxvYXRpbmcgcG9pbnQgYXJndW1lbnQgJiByZXR1cm4gdmFsdWUgcmVnaXN0
ZXIuCi0gICAgc3RhdGljIGNvbnN0IEZQUlJlZyBhcmd1bWVudEZQUjAgPSBmcHIwOwotICAgIHN0
YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRGUFIxID0gZnByMTsKLSAgICBzdGF0aWMgY29uc3Qg
RlBSUmVnIGFyZ3VtZW50RlBSMiA9IGZwcjI7Ci0gICAgc3RhdGljIGNvbnN0IEZQUlJlZyBhcmd1
bWVudEZQUjMgPSBmcHIzOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBBcmd1bWVu
dFJlZ2lzdGVyMCA9IGZwUmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcEFy
Z3VtZW50UmVnaXN0ZXIxID0gZnBSZWdUMTsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklE
IGZwQXJndW1lbnRSZWdpc3RlcjIgPSBmcFJlZ1QyOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBBcmd1bWVudFJlZ2lzdGVyMyA9IGZwUmVnVDM7Ci0gICAgc3RhdGljIGNvbnN0IEZQ
UlJlZyByZXR1cm5WYWx1ZUZQUiA9IGZwcjA7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJldHVyblZhbHVlUmVnaXN0ZXIgPSBmcFJlZ1QwOwotCi0KICAgICB2b2lkIHByZXNlcnZl
UmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJSZWcgcmVnKQogICAgIHsKICAgICAgICAgcG9wKHJl
Zyk7CkBAIC0xODAsMTMgKzE1OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdp
c3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRlBSZWdpc3RlcklEIGZwclRvUmVnaXN0ZXJJ
RChGUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZyA8IG51bWJlck9mRlBScyk7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgaWRGb3JSZWdpc3RlcltudW1iZXJP
ZkZQUnNdID0geyBmcFJlZ1QwLCBmcFJlZ1QxLCBmcFJlZ1QyLCBmcFJlZ1QzLCBmcFJlZ1Q0LCBm
cFJlZ1Q1IH07Ci0gICAgICAgIHJldHVybiBpZEZvclJlZ2lzdGVyW3JlZ107Ci0gICAgfQotCiAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgdm9pZCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTQg
KzQ2LDEzIEBAIEVudHJ5TG9jYXRpb246OkVudHJ5TG9jYXRpb24oTWFjcm9Bc3NlbWIKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXgg
PSBOb05vZGU7CiAgICAgfQotICAgIGZvciAoRlBSUmVnIGZwciA9IGZwcjA7IGZwciA8IG51bWJl
ck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBqaXQtPm1fZnBycy5uYW1lKGZwcik7Ci0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0
ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewotICAgICAgICAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAg
Zm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IGppdC0+bV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gaml0
LT5tX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIubmFtZSgpXTsKICAgICAgICAgICAgIEFTU0VS
VChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0gICAgICAgICAg
ICBtX2ZwckluZm9bZnByXSA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICBtX2Zwcklu
Zm9baXRlci5pbmRleCgpXSA9IGluZm8ubm9kZUluZGV4KCk7CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbV9mcHJJbmZvW2Zwcl0gPSBOb05vZGU7CisgICAgICAgICAgICBtX2ZwckluZm9b
aXRlci5pbmRleCgpXSA9IE5vTm9kZTsKICAgICB9CiB9CiAKQEAgLTYyLDMwICs2MSwyOCBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjp2YWx1ZVRvTnVtYmVyKEpTCiAgICAgR1BSUmVnIGpzVmFs
dWVHcHIgPSBvcGVyYW5kLmdwcigpOwogICAgIEdQUlJlZyB0ZW1wR3ByID0gYWxsb2NhdGUoKTsg
Ly8gRklYTUU6IGNhbiB3ZSBza2lwIHRoaXMgYWxsb2NhdGlvbiBvbiB0aGUgbGFzdCB1c2Ugb2Yg
dGhlIHZpcnR1YWwgcmVnaXN0ZXI/CiAKLSAgICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZw
UmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwotCiAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm9uTnVtZXJpYyA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7CiAKICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBl
bmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdwcik7
CiAgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGVtcEdw
cik7Ci0gICAgbV9qaXQubW92ZVB0clRvRG91YmxlKHRlbXBHcHIsIGZwUmVnKTsKKyAgICBtX2pp
dC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwgZnByKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBo
YXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCiAgICAgLy8gTmV4dCBoYW5kbGUgY2Vs
bHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKICAgICBub25OdW1lcmljLmxpbmsoJm1faml0KTsK
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhmcHIsIGpzVmFsdWVHcHIpOwotICAgIG1faml0
Lm1vdmUoanNWYWx1ZUdwciwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOwotICAgIG1faml0
Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0
ZXIwKTsKKyAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGRmZ0NvbnZlcnRK
U1ZhbHVlVG9OdW1iZXIpOwotICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZwUmV0
dXJuVmFsdWVSZWdpc3RlciwgZnBSZWcpOworICAgIG1faml0Lm1vdmVEb3VibGUoRlBSSW5mbzo6
cmV0dXJuVmFsdWVGUFIsIGZwcik7CiAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhmcHIpOwog
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvTnVtYmVyID0gbV9qaXQuanVtcCgpOwog
ICAgIAogICAgIC8vIEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KICAgICBpc0ludGVnZXIubGlu
aygmbV9qaXQpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFsdWVHcHIsIGZw
UmVnKTsKKyAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShqc1ZhbHVlR3ByLCBmcHIpOwog
ICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogICAgIGhhc0NhbGxlZFRvTnVtYmVy
LmxpbmsoJm1faml0KTsKIApAQCAtMTAwLDEwICs5NywxMCBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjp2YWx1ZVRvSW50MzIoSlNWCiAKICAgICAvLyBGaXJzdCBoYW5kbGUgbm9uLWludGVnZXJz
CiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0LCBqc1ZhbHVlR3ByKTsKLSAgICBt
X2ppdC5tb3ZlKGpzVmFsdWVHcHIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKTsKLSAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudFJl
Z2lzdGVyMCk7CisgICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhkZmdDb252
ZXJ0SlNWYWx1ZVRvSW50MzIpOwotICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86
OnJldHVyblZhbHVlUmVnaXN0ZXIsIHJlc3VsdCk7CisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9Q
dHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhyZXN1bHQpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvSW50MzIg
PSBtX2ppdC5qdW1wKCk7CiAgICAgCkBAIC0xMTUsMTUgKzExMiwxMyBAQCB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjp2YWx1ZVRvSW50MzIoSlNWCiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6Om51
bWJlclRvSW50MzIoRlBSUmVnIGZwciwgR1BSUmVnIGdwcikKIHsKLSAgICBKSVRDb21waWxlcjo6
RlBSZWdpc3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwot
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNo
VHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwUmVnLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRy
dW5jYXRlU3VjY2Vzc2Z1bCk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9JbnRl
Z2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21w
aWxlcjo6QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOwogCiAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMoZ3ByKTsKIAotICAgIG1faml0Lm1vdmVEb3VibGUoZnBSZWcsIEpJVENvbXBpbGVy
OjpmcEFyZ3VtZW50UmVnaXN0ZXIwKTsKKyAgICBtX2ppdC5tb3ZlRG91YmxlKGZwciwgRlBSSW5m
bzo6YXJndW1lbnRGUFIwKTsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKHRvSW50
MzIpOwotICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIsIGdwcik7CisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIGdwcik7CiAKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGdwcik7CiAKQEAg
LTI3NCwxMCArMjY5LDEwIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CiAgICAgICAgIEludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1
bHQuZnByKCkpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHBvc2l0aXZlID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AxLmdwcigp
LCBUcnVzdGVkSW1tMzIoMCkpOwotICAgICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6
OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1f
aml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ0d29Ub1RoZTMyKSwg
cmVzdWx0LmZwcigpKTsKICAgICAgICAgcG9zaXRpdmUubGluaygmbV9qaXQpOwogCiAgICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKQEAgLTI4Nyw3ICsy
ODIsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgY2Fz
ZSBJbnQzMlRvTnVtYmVyOiB7CiAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1f
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1bHQuZnByKCkpOwog
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTMyOSw3ICszMjQsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMSkpIHsKICAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSk7CiAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAg
bV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1bHQuZnBy
KCkpOwogICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTMzNyw3ICszMzIsNyBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGlmIChpc0tu
b3duTnVtZXJpYyhub2RlLmNoaWxkMSkpIHsKICAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5m
cHIoKSk7CiAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzY4LDkgKzM2Myw5IEBA
IHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAgICAgRG91Ymxl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSwgb3AyKTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3Rl
cklEIHJlZzEgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVy
SUQgcmVnMiA9IG9wMi5ncHIoKTsKLSAgICAgICAgbV9qaXQuYWRkRG91YmxlKHJlZzEsIHJlZzIs
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgbV9qaXQuYWRkRG91YmxlKHJlZzEs
IHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM4MSw5ICszNzYsOSBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIERvdWJsZU9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVn
MSA9IG9wMS5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCByZWcy
ID0gb3AyLmdwcigpOwotICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJl
ZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwg
cmVzdWx0LmZwcigpKTsKIAogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzk0LDkgKzM4OSw5IEBAIHZvaWQgTm9u
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAgICAgRG91YmxlT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSwgb3AyKTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIHJlZzEg
PSBvcDEuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVnMiA9
IG9wMi5ncHIoKTsKLSAgICAgICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOworICAgICAgICBGUFJSZWcg
cmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJl
c3VsdC5mcHIoKSk7CiAKICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTQwNyw5ICs0MDIsOSBAQCB2b2lkIE5vblNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIERvdWJsZU9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVnMSA9IG9wMS5n
cHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCByZWcyID0gb3AyLmdw
cigpOwotICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJlZyByZWcyID0g
b3AyLmZwcigpOworICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZw
cigpKTsKIAogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNjIxLDE3ICs2MTYsMTcgQEAgdm9pZCBOb25TcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogCiAgICAgY2FzZSBSZXR1cm46IHsKICAgICAgICAg
QVNTRVJUKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyICE9IEdQUkluZm86OnJlZ1QxKTsKLSAg
ICAgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0
ZXIpOwotICAgICAgICBBU1NFUlQoR1BSSW5mbzo6cmV0dXJuVmFsdWVSZWdpc3RlciAhPSBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAh
PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiAhPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICNpZiBERkdfU1VD
Q0VTU19TVEFUUwogICAgICAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVyIGNvdW50ZXIoIk5vblNw
ZWN1bGF0aXZlSklUIik7CiAgICAgICAgIG1faml0LmVtaXRDb3VudChjb3VudGVyKTsKICNlbmRp
ZgogCi0gICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlUmVnaXN0ZXIu
CisgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSLgogICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBtX2ppdC5t
b3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVSZWdpc3Rlcik7CisgICAgICAgIG1f
aml0Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICAgICAg
Ly8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAgICAgIG1faml0LmVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDg1MjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b25TcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHN0cnVj
dCBFbnRyeUxvY2F0aW9uIHsKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CiAgICAgfTsKICAg
ICBSZWdpc3RlckluZm8gbV9ncHJJbmZvW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKLSAg
ICBOb2RlSW5kZXggbV9mcHJJbmZvW251bWJlck9mRlBSc107CisgICAgTm9kZUluZGV4IG1fZnBy
SW5mb1tGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107CiB9OwogCiAvLyA9PT0gTm9uU3BlY3Vs
YXRpdmVKSVQgPT09CkBAIC05OSwxNCArOTksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5yZWdpc3Rl
ckZvcm1hdCgpOwotICAgICAgICBHUFJSZWcgcmVnID0gaW5mby5ncHIoKTsKIAogICAgICAgICBp
ZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKLSAgICAgICAgICAgIG1f
aml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnKTsKLSAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkp
OworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBpbmZvLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGluZm8uZ3ByKCksIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyB8fCByZWdpc3RlckZv
cm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcs
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICB2b2lkIHNpbGVudFNwaWxsRlBSKFZpcnR1YWxSZWdpc3RlciBz
cGlsbE1lLCBHUFJSZWcgY2FuVHJhbXBsZSwgRlBSUmVnIGV4Y2x1ZGUgPSBJbnZhbGlkRlBSUmVn
KQpAQCAtMTMxLDIyICsxMzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
aml0LmdyYXBoKClbbm9kZUluZGV4XTsKICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZv
cm1hdERvdWJsZSk7CiAgICAgICAgIERhdGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZvLnJl
Z2lzdGVyRm9ybWF0KCk7Ci0gICAgICAgIEdQUlJlZyByZWcgPSBpbmZvLmdwcigpOwogCiAgICAg
ICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewogICAgICAgICAg
ICAgaWYgKG5vZGUuaXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSW50
MzJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMy
KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCByZWcpOworICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGluZm8u
Z3ByKCkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCByZWcpOworICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgaW5mby5ncHIo
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobm9kZS5p
c0NvbnN0YW50KCkpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKGNvbnN0YW50QXNKU1ZhbHVlQXNJ
bW1QdHIobm9kZUluZGV4KSwgcmVnKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoY29uc3RhbnRB
c0pTVmFsdWVBc0ltbVB0cihub2RlSW5kZXgpLCBpbmZvLmdwcigpKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMgfHwgcmVn
aXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgcmVnKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIGluZm8uZ3ByKCkp
OwogICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgc2lsZW50RmlsbEZQUihWaXJ0dWFsUmVnaXN0
ZXIgc3BpbGxNZSwgR1BSUmVnIGNhblRyYW1wbGUsIEZQUlJlZyBleGNsdWRlID0gSW52YWxpZEZQ
UlJlZykKQEAgLTE1OSwxMCArMTU3LDkgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSYgbm9kZSA9
IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKIAotICAgICAgICBpZiAobm9kZS5pc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBpbmZvLmdwcigpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZShjb25zdGFudEFzSlNWYWx1ZUFzSW1tUHRyKG5vZGVJbmRleCksIHJlZyk7
Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoY29uc3RhbnRBc0pTVmFsdWVBc0ltbVB0cihub2RlSW5kZXgpLCBp
bmZvLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCBjYW5UcmFtcGxlKTsKICAgICAgICAgICAg
IHVuYm94RG91YmxlKGNhblRyYW1wbGUsIGluZm8uZnByKCkpOwogICAgICAgICB9CkBAIC0xNzgs
MTAgKzE3NSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVy
Lm5hbWUoKSwgZXhjbHVkZSk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChGUFJSZWcgZnByID0g
ZnByMDsgZnByIDwgbnVtYmVyT2ZGUFJzOyBuZXh0KGZwcikpIHsKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBuYW1lID0gbV9mcHJzLm5hbWUoZnByKTsKLSAgICAgICAgICAgIGlmIChuYW1l
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxG
UFIobmFtZSwgY2FuVHJhbXBsZSk7CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBt
X2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAg
ICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAg
ICAgICAgc2lsZW50U3BpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUpOwogICAgICAgICB9
CiAgICAgfQogICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoRlBSUmVnIGV4Y2x1ZGUs
IEdQUlJlZyBwcmVzZXJ2ZSA9IEludmFsaWRHUFJSZWcpCkBAIC0xOTQsMTAgKzE5MCw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKICAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVyLm5hbWUoKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgZm9yIChGUFJSZWcgZnByID0gZnByMDsgZnByIDwgbnVtYmVyT2ZGUFJz
OyBuZXh0KGZwcikpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gbV9mcHJz
Lm5hbWUoZnByKTsKLSAgICAgICAgICAgIGlmIChuYW1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxGUFIobmFtZSwgY2FuVHJhbXBsZSwgZXhj
bHVkZSk7CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsg
aXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFt
ZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgc2lsZW50U3Bp
bGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGV4Y2x1ZGUpOwogICAgICAgICB9CiAgICAg
fQogICAgIHZvaWQgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVkZSkKQEAgLTIw
NiwxMCArMjAxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGV4Y2x1ZGUgPT0gR1BSSW5mbzo6
cmVnVDApCiAgICAgICAgICAgICBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVnVDE7CiAgICAgICAg
IAotICAgICAgICBmb3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5l
eHQoZnByKSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBtX2ZwcnMubmFt
ZShmcHIpOwotICAgICAgICAgICAgaWYgKG5hbWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikK
LSAgICAgICAgICAgICAgICBzaWxlbnRGaWxsRlBSKG5hbWUsIGNhblRyYW1wbGUpOworICAgICAg
ICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJz
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1l
KCksIGNhblRyYW1wbGUpOwogICAgICAgICB9CiAgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0
ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewogICAg
ICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0y
MjAsMTUgKzIxNCwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgR1BSUmVnIGNhblRyYW1w
bGUgPSBHUFJJbmZvOjpyZWdUMDsKICAgICAgICAgCi0gICAgICAgIGZvciAoRlBSUmVnIGZwciA9
IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbmFtZSA9IG1fZnBycy5uYW1lKGZwcik7Ci0gICAgICAgICAgICBpZiAobmFt
ZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAg
ICAgICAgIEFTU0VSVChmcHIgIT0gZXhjbHVkZSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIFVO
VVNFRF9QQVJBTShleGNsdWRlKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxG
UFIobmFtZSwgY2FuVHJhbXBsZSwgZXhjbHVkZSk7CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9y
IGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGV4Y2x1ZGUsIGl0ZXIucmVnSUQoKSAhPSBl
eGNsdWRlKTsKKyAgICAgICAgICAgICAgICBzaWxlbnRGaWxsRlBSKGl0ZXIubmFtZSgpLCBjYW5U
cmFtcGxlLCBleGNsdWRlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3Ig
KGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgp
OyArK2l0ZXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJC
YW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3Rl
ckJhbmsuaAkocmV2aXNpb24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlZ2lzdGVyQmFuay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9iYW5rLT5yZWxlYXNlQXRJbmRleChtX2luZGV4KTsKICAgICAgICAg
fQogCi0gICAgICAgIFJlZ0lEIGdwcigpIGNvbnN0CisgICAgICAgIFJlZ0lEIHJlZ0lEKCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjp0b1JlZ2lzdGVyKG1f
aW5kZXgpOwogICAgICAgICB9CkBAIC0yMzMsNyArMjMzLDcgQEAgcHVibGljOgogI2lmbmRlZiBO
REVCVUcKICAgICAgICAgY29uc3QgY2hhciogZGVidWdOYW1lKCkgY29uc3QKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpOworICAgICAgICAg
ICAgcmV0dXJuIEJhbmtJbmZvOjpkZWJ1Z05hbWUocmVnSUQoKSk7CiAgICAgICAgIH0KICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDE0ICsxNTEsMTMgQEAg
U3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIG1fZ3BySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IE5vTm9kZTsK
ICAgICB9Ci0gICAgZm9yIChGUFJSZWcgZnByID0gZnByMDsgZnByIDwgbnVtYmVyT2ZGUFJzOyBu
ZXh0KGZwcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGpp
dC0+bV9mcHJzLm5hbWUoZnByKTsKLSAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
ICBqaXQtPm1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICBmb3IgKGZwcl9p
dGVyYXRvciBpdGVyID0gaml0LT5tX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBqaXQtPm1fZnBycy5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9ICBqaXQtPm1f
Z2VuZXJhdGlvbkluZm9baXRlci5uYW1lKCldOwogICAgICAgICAgICAgQVNTRVJUKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKLSAgICAgICAgICAgIG1fZnBySW5m
b1tmcHJdID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmlu
ZGV4KCldID0gaW5mby5ub2RlSW5kZXgoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X2ZwckluZm9bZnByXSA9IE5vTm9kZTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4
KCldID0gTm9Ob2RlOwogICAgIH0KIH0KIApAQCAtNDMxLDggKzQzMCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwogCi0gICAgICAgICAgICBHUFJSZWcgcmVnID0gb3AyLmdwcigpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2Vt
Ymxlcjo6T3ZlcmZsb3csIHJlZywgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOwogCiAgICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC00NDMsOCArNDQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBvcDEuZ3ByKCk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVy
ZmxvdywgcmVnLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywg
b3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTQ3Niw4ICs0NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAot
ICAgICAgICAgICAgR1BSUmVnIHJlZyA9IG9wMS5ncHIoKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWcs
IEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCks
IEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NDg3LDkgKzQ4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAotICAgICAgICBHUFJSZWcgcmVn
MSA9IG9wMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7Ci0gICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwg
b3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTc3NSwxNyArNzY5
LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgIGNh
c2UgUmV0dXJuOiB7CiAgICAgICAgIEFTU0VSVChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciAh
PSBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAhPSBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKLSAgICAgICAgQVNTRVJUKEdQUkluZm86OnJldHVy
blZhbHVlUmVnaXN0ZXIgIT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBB
U1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBBU1NFUlQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgIT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpOwogCiAjaWYgREZHX1NVQ0NFU1NfU1RBVFMKICAgICAgICAgc3RhdGljIFNhbXBsaW5n
Q291bnRlciBjb3VudGVyKCJTcGVjdWxhdGl2ZUpJVCIpOwogICAgICAgICBtX2ppdC5lbWl0Q291
bnQoY291bnRlcik7CiAjZW5kaWYKIAotICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiBy
ZXR1cm5WYWx1ZVJlZ2lzdGVyLgorICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1
cm5WYWx1ZUdQUi4KICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwogCiAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgogICAgICAgICBt
X2ppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlJldHVyblBD
LCBHUFJJbmZvOjpyZWdUMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYs
NyBAQCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjayB7CiAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OwogICAgIH07CiAgICAgUmVnaXN0ZXJJbmZvIG1fZ3BySW5mb1tHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyc107Ci0gICAgTm9kZUluZGV4IG1fZnBySW5mb1tudW1iZXJPZkZQUnNdOworICAgIE5v
ZGVJbmRleCBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwogfTsKIHR5cGVk
ZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVjdWxhdGlvbkNoZWNr
VmVjdG9yOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lv
biA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAyMCw3ICsxMDIwLDcgQEAKICNpZiBFTkFCTEUoSklUKSAmJiBVU0UoSlNW
QUxVRTY0KSAmJiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEVOQUJMRV9ERkdfSklUIDEKIC8qIEVu
YWJsZWQgd2l0aCByZXN0cmljdGlvbnMgdG8gY2lyY3VtdmVudCBrbm93biBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9ucy4gKi8KLSNkZWZpbmUgRU5BQkxFX0RGR19KSVRfUkVTVFJJQ1RJT05TIDEKKyNk
ZWZpbmUgRU5BQkxFX0RGR19KSVRfUkVTVFJJQ1RJT05TIDAKICNlbmRpZgogCiAvKiBFbnN1cmUg
dGhhdCBlaXRoZXIgdGhlIEpJVCBvciB0aGUgaW50ZXJwcmV0ZXIgaGFzIGJlZW4gZW5hYmxlZC4g
Ki8K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91601</attachid>
            <date>2011-04-28 17:18:15 -0700</date>
            <delta_ts>2011-04-28 17:22:10 -0700</delta_ts>
            <desc>Double ooops! - revert platform change!</desc>
            <filename>59763.4.patch</filename>
            <type>text/plain</type>
            <size>53875</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODUyNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDQtMjggIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTc2MworICAgICAgICBERkcgSklUIC0g
VW5pZnkgRlBSUmVnICYgRlBSZWdpc3RlcklECisKKyAgICAgICAgKEZvbGxvd2luZyBvbiBmcm9t
IEdQUlJlZy9SZWdpc3RlcklEIHVuaWZpY2F0aW9uKS4KKworICAgICAgICAqIGRmZy9ERkdGUFJJ
bmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6RlBSSW5mbzo6dG9SZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkRGRzo6RlBSSW5mbzo6ZGVidWdOYW1lKToKKyAgICAgICAgKiBkZmcvREZHR1BSSW5m
by5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmJveERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6dW5ib3hE
b3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZsdXNoUmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjppc0ZsdXNoZWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNldHVwVHdvU3R1YkFyZ3MpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNldHVwU3R1YkFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FsbE9wZXJhdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6R1BSUmVzdWx0Ojpsb2NrZWRSZXN1bHQpOgorICAgICAgICAoSlND
OjpERkc6OkZQUlJlc3VsdDo6bG9ja2VkUmVzdWx0KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpmaWxsTnVtZXJpY1Rv
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxh
dGl2ZVRvTm9uU3BlY3VsYXRpdmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpj
b21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpFbnRyeUxvY2F0aW9uOjpFbnRyeUxvY2F0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6dmFsdWVUb051bWJlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9JbnQzMik6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6Om51bWJlclRvSW50MzIpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
Tm9uU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJ
VDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1
bGF0aXZlSklUOjpzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKToKKyAgICAgICAgKiBkZmcvREZHUmVn
aXN0ZXJCYW5rLmg6CisgICAgICAgIChKU0M6OkRGRzo6UmVnaXN0ZXJCYW5rOjppdGVyYXRvcjo6
cmVnSUQpOgorICAgICAgICAoSlNDOjpERkc6OlJlZ2lzdGVyQmFuazo6aXRlcmF0b3I6OmRlYnVn
TmFtZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisKIDIwMTEtMDQtMjggIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZlcnQgIjxodHRwOi8vd2Via2l0Lm9yZy9iLzU5NzA1PiBXVEY6
OnBvc3RUaW1lcigpIGxlYWtzIGEgQ0ZSdW5Mb29wVGltZXJSZWYgZXZlcnkgdGltZSBpdCdzIGNh
bGxlZCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCShyZXZpc2lv
biA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRlBSSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywzMyArMzMsNjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi0vLyBBYnN0cmFjdGVkIHNlcXVlbnRpYWwgbnVtYmVyaW5nIG9mIGF2YWlsYWJs
ZSBtYWNoaW5lIHJlZ2lzdGVycyAoYXMgb3Bwb3NlZCB0byBHUFJSZWcsCi0vLyB3aGljaCBhcmUg
bm9uLXNlcXVlbnRpYWwsIGFuZCBub3QgYWJzdHJhY3RlZCBmcm9tIHRoZSByZWdpc3RlciBudW1i
ZXJpbmcgdXNlZCBieSB0aGUgdW5kZXJseWluZyBwcm9jZXNzb3IpLgotZW51bSBGUFJSZWcgeyBm
cHIwLCBmcHIxLCBmcHIyLCBmcHIzLCBmcHI0LCBmcHI1LCBudW1iZXJPZkZQUnMsIEludmFsaWRG
UFJSZWcgPSAweEZGRkZGRkZGIH07Ci0KLWlubGluZSBGUFJSZWcgbmV4dChGUFJSZWcmIHJlZykK
LXsKLSAgICBBU1NFUlQocmVnIDwgbnVtYmVyT2ZGUFJzKTsKLSAgICByZXR1cm4gcmVnID0gc3Rh
dGljX2Nhc3Q8RlBSUmVnPihyZWcgKyAxKTsKLX0KK3R5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkZQ
UmVnaXN0ZXJJRCBGUFJSZWc7CisjZGVmaW5lIEludmFsaWRGUFJSZWcgKChGUFJSZWcpLTEpCiAK
LWNsYXNzIEZQUkJhbmtJbmZvIHsKK2NsYXNzIEZQUkluZm8gewogcHVibGljOgogICAgIHR5cGVk
ZWYgRlBSUmVnIFJlZ2lzdGVyVHlwZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVy
T2ZSZWdpc3RlcnMgPSA2OwogCisgICAgLy8gVGVtcG9yYXJ5IHJlZ2lzdGVycy4KKyAgICBzdGF0
aWMgY29uc3QgRlBSUmVnIGZwUmVnVDAgPSBYODZSZWdpc3RlcnM6OnhtbTA7CisgICAgc3RhdGlj
IGNvbnN0IEZQUlJlZyBmcFJlZ1QxID0gWDg2UmVnaXN0ZXJzOjp4bW0xOworICAgIHN0YXRpYyBj
b25zdCBGUFJSZWcgZnBSZWdUMiA9IFg4NlJlZ2lzdGVyczo6eG1tMjsKKyAgICBzdGF0aWMgY29u
c3QgRlBSUmVnIGZwUmVnVDMgPSBYODZSZWdpc3RlcnM6OnhtbTM7CisgICAgc3RhdGljIGNvbnN0
IEZQUlJlZyBmcFJlZ1Q0ID0gWDg2UmVnaXN0ZXJzOjp4bW00OworICAgIHN0YXRpYyBjb25zdCBG
UFJSZWcgZnBSZWdUNSA9IFg4NlJlZ2lzdGVyczo6eG1tNTsKKyAgICAvLyBUaGVzZSBjb25zdGFu
dHMgcHJvdmlkZSB0aGUgbmFtZXMgZm9yIHRoZSBnZW5lcmFsIHB1cnBvc2UgYXJndW1lbnQgJiBy
ZXR1cm4gdmFsdWUgcmVnaXN0ZXJzLgorICAgIHN0YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRG
UFIwID0gWDg2UmVnaXN0ZXJzOjp4bW0wOyAvLyBmcFJlZ1QwCisgICAgc3RhdGljIGNvbnN0IEZQ
UlJlZyBhcmd1bWVudEZQUjEgPSBYODZSZWdpc3RlcnM6OnhtbTE7IC8vIGZwUmVnVDEKKyAgICBz
dGF0aWMgY29uc3QgRlBSUmVnIGFyZ3VtZW50RlBSMiA9IFg4NlJlZ2lzdGVyczo6eG1tMjsgLy8g
ZnBSZWdUMgorICAgIHN0YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRGUFIzID0gWDg2UmVnaXN0
ZXJzOjp4bW0zOyAvLyBmcFJlZ1QzCisgICAgc3RhdGljIGNvbnN0IEZQUlJlZyByZXR1cm5WYWx1
ZUZQUiA9IFg4NlJlZ2lzdGVyczo6eG1tMDsgLy8gZnBSZWdUMAorCisgICAgLy8gRlBSUmVnIG1h
cHBpbmcgaXMgZGlyZWN0LCB0aGUgbWFjaGluZSByZWdzaXRlciBudW1iZXJzIGNhbgorICAgIC8v
IGJlIHVzZWQgZGlyZWN0bHkgYXMgaW5kaWNlcyBpbnRvIHRoZSBGUFIgUmVnaXN0ZXJCYW5rLgor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMCA9PSAwLCB4bW0wX2lzXzApOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMSA9PSAxLCB4bW0xX2lzXzEpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMiA9PSAyLCB4bW0yX2lzXzIpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tMyA9PSAzLCB4bW0zX2lzXzMpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tNCA9PSA0LCB4bW00X2lzXzQpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFg4NlJlZ2lzdGVyczo6eG1tNSA9PSA1LCB4bW01X2lzXzUpOwog
ICAgIHN0YXRpYyBGUFJSZWcgdG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAg
ICAgIHJldHVybiAoRlBSUmVnKWluZGV4OwogICAgIH0KLQogICAgIHN0YXRpYyB1bnNpZ25lZCB0
b0luZGV4KEZQUlJlZyByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gKHVuc2lnbmVkKXJlZzsK
ICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnTmFt
ZShGUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkRlBSUmVn
KTsKKyAgICAgICAgQVNTRVJUKHJlZyA8IDE2KTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IG5hbWVGb3JSZWdpc3RlclsxNl0gPSB7CisgICAgICAgICAgICAieG1tMCIsICJ4bW0xIiwgInht
bTIiLCAieG1tMyIsCisgICAgICAgICAgICAieG1tNCIsICJ4bW01IiwgInhtbTYiLCAieG1tNyIs
CisgICAgICAgICAgICAieG1tOCIsICJ4bW05IiwgInhtbTEwIiwgInhtbTExIiwKKyAgICAgICAg
ICAgICJ4bW0xMiIsICJ4bW0xMyIsICJ4bW0xNCIsICJ4bW0xNSIKKyAgICAgICAgfTsKKyAgICAg
ICAgcmV0dXJuIG5hbWVGb3JSZWdpc3RlcltyZWddOworICAgIH0KKyNlbmRpZgogfTsKIAotdHlw
ZWRlZiBSZWdpc3RlckJhbms8RlBSQmFua0luZm8+OjppdGVyYXRvciBmcHJfaXRlcmF0b3I7Cit0
eXBlZGVmIFJlZ2lzdGVyQmFuazxGUFJJbmZvPjo6aXRlcmF0b3IgZnByX2l0ZXJhdG9yOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsMTIgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnVDcgPSBYODZSZWdpc3RlcnM6OnI5OwogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnVDggPSBYODZSZWdpc3RlcnM6OnIxMDsKICAgICAvLyBU
aGVzZSBjb25zdGFudHMgcHJvdmlkZSB0aGUgbmFtZXMgZm9yIHRoZSBnZW5lcmFsIHB1cnBvc2Ug
YXJndW1lbnQgJiByZXR1cm4gdmFsdWUgcmVnaXN0ZXJzLgotICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgYXJndW1lbnRSZWdpc3RlcjAgPSBYODZSZWdpc3RlcnM6OmVkaTsgLy8gcmVnVDQKLSAgICBz
dGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50UmVnaXN0ZXIxID0gWDg2UmVnaXN0ZXJzOjplc2k7
IC8vIHJlZ1Q1Ci0gICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudFJlZ2lzdGVyMiA9IFg4
NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQotICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1l
bnRSZWdpc3RlcjMgPSBYODZSZWdpc3RlcnM6OmVjeDsgLy8gcmVnVDIKLSAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHJldHVyblZhbHVlUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsgLy8gcmVn
VDAKLSAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlUmVnaXN0ZXIyID0gWDg2UmVn
aXN0ZXJzOjplZHg7IC8vIHJlZ1QxCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQ
UjAgPSBYODZSZWdpc3RlcnM6OmVkaTsgLy8gcmVnVDQKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IGFyZ3VtZW50R1BSMSA9IFg4NlJlZ2lzdGVyczo6ZXNpOyAvLyByZWdUNQorICAgIHN0YXRpYyBj
b25zdCBHUFJSZWcgYXJndW1lbnRHUFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7IC8vIHJlZ1QxCisg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjMgPSBYODZSZWdpc3RlcnM6OmVjeDsg
Ly8gcmVnVDIKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVn
aXN0ZXJzOjplYXg7IC8vIHJlZ1QwCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1
ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8gcmVnVDEKIAogICAgIHN0YXRpYyBHUFJSZWcg
dG9SZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDg1MjUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIEZQUlJlZyBKSVRDb2RlR2VuZXJhdG9y
OjpmaWxsRG91YmxlKE5vZGUKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEb3VibGVDb25zdGFu
dChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRl
KCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIodmFsdWVPZkRv
dWJsZUNvbnN0YW50KG5vZGVJbmRleCkpKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bW92ZVB0clRvRG91YmxlKGdwciwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAg
ICAgICAgICAgIHVubG9jayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihm
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CkBAIC0xNjIsOCArMTYyLDYg
QEAgRlBSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxEb3VibGUoTm9kZQogICAgICAgICBGUFJS
ZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgR1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0
ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAgdGhpcyBhbGxvY2F0aW9uIG9uIHRoZSBsYXN0IHVz
ZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8KIAotICAgICAgICBKSVRDb21waWxlcjo6RlBSZWdp
c3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwotCiAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOwogCiAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNEb3VibGUoanNWYWx1ZUdw
cik7CkBAIC0xNzEsMTIgKzE2OSwxMiBAQCBGUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbERv
dWJsZShOb2RlCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91
YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwg
dGVtcEdwcik7CiAgICAgICAgIG1faml0LmFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHRlbXBHcHIpOwotICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwg
ZnBSZWcpOworICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwgZnByKTsKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsK
IAogICAgICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCiAgICAgICAgIGlzSW50ZWdl
ci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFs
dWVHcHIsIGZwUmVnKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoanNWYWx1
ZUdwciwgZnByKTsKICAgICAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7CiAKICAg
ICAgICAgbV9ncHJzLnJlbGVhc2UoanNWYWx1ZUdwcik7CkBAIC0xOTIsMTAgKzE5MCw4IEBAIEZQ
UlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAg
ICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBHUFJSZWcgcmVnID0gZ3ByOwotICAgICAg
ICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVn
aXN0ZXJJRChmcHIpOwogCi0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZywg
ZnBSZWcpOworICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShncHIsIGZwcik7CiAK
ICAgICAgICAgbV9ncHJzLnJlbGVhc2UoZ3ByKTsKICAgICAgICAgbV9ncHJzLnVubG9jayhncHIp
OwpAQCAtMzk1LDE3ICszOTEsMTMgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNp
c3RlbmN5KAogICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAg
ICBmb3IgKEZQUlJlZyBpID0gZnByMDsgaSA8IG51bWJlck9mRlBSczsgbmV4dChpKSkgewotICAg
ICAgICBpZiAobV9mcHJzLmlzTG9ja2VkKGkpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IGZwciAlZCBpcyBsb2NrZWQuXG4iLCBp
KTsKKyAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXIuaXNMb2NrZWQoKSkgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVk
OiBmcHIgJXMgaXMgbG9ja2VkLlxuIiwgaXRlci5kZWJ1Z05hbWUoKSk7CiAgICAgICAgICAgICBm
YWlsZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgVmlydHVhbFJlZ2lzdGVyIGZw
ckNvbnRlbnRzW251bWJlck9mRlBSc107Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZGUFJzOyArK2kpCi0gICAgICAgIGZwckNvbnRlbnRzW2ldID0gSW52YWxpZFZpcnR1
YWxSZWdpc3RlcjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nZW5lcmF0aW9uSW5m
by5zaXplKCk7ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gKFZpcnR1YWxSZWdpc3RlcilpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKQEAgLTQzMSw3ICs0MjMsMTAgQEAgdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KAogICAgICAgICBjYXNlIERhdGFG
b3JtYXREb3VibGU6IHsKICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBpbmZvLmZwcigpOwogICAg
ICAgICAgICAgQVNTRVJUKGZwciAhPSBJbnZhbGlkRlBSUmVnKTsKLSAgICAgICAgICAgIGZwckNv
bnRlbnRzW2Zwcl0gPSB2aXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAobV9mcHJzLm5h
bWUoZnByKSAhPSB2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIHZp
cnR1YWwgcmVnaXN0ZXIgJWQgKGZwciAlcykuXG4iLCB2aXJ0dWFsUmVnaXN0ZXIsIEZQUkluZm86
OmRlYnVnTmFtZShmcHIpKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDQz
LDE0ICs0MzgsMjAgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNpc3RlbmN5KAog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGlmIChpdGVyLmdwcigp
ICE9IGluZm8uZ3ByKCkpIHsKKyAgICAgICAgaWYgKGl0ZXIucmVnSUQoKSAhPSBpbmZvLmdwcigp
KSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBm
YWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIGdwciAlcyAodmlydHVhbCByZWdpc3RlciAlZCkuXG4i
LCBpdGVyLmRlYnVnTmFtZSgpLCB2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAgICAgZmFpbGVk
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICBmb3IgKEZQUlJlZyBpID0gZnByMDsgaSA8
IG51bWJlck9mRlBSczsgbmV4dChpKSkgewotICAgICAgICBpZiAobV9mcHJzLm5hbWUoaSkgIT0g
ZnByQ29udGVudHNbaV0pIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJ
U1RFTkNZX0NIRUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZnByICVkICglZCAhPSAlZCku
XG4iLCBpLCBtX2ZwcnMubmFtZShpKSwgZnByQ29udGVudHNbaV0pOworCisgICAgZm9yIChmcHJf
aXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBpdGVyLm5h
bWUoKTsKKyAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciA9PSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIGlmIChpdGVy
LnJlZ0lEKCkgIT0gaW5mby5mcHIoKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJE
RkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVkOiBuYW1lIG1pc21hdGNoIGZvciBmcHIgJXMgKHZp
cnR1YWwgcmVnaXN0ZXIgJWQpLlxuIiwgaXRlci5kZWJ1Z05hbWUoKSwgdmlydHVhbFJlZ2lzdGVy
KTsKICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNiBAQCBjbGFzcyBKSVRDb2RlR2Vu
ZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIgVHJ1c3RlZEltbTMyOwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkltbTMyIElt
bTMyOwotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVy
SUQ7CiAKICAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2V0IHByaW9yaXRpZXMg
Zm9yIHNwaWxsIG9yZGVyIGZvcgogICAgIC8vIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCkBAIC0x
NTcsMTYgKzE1NiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBjb252ZXJ0
IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMgYm94ZWQgYW5kIEpTVmFsdWVzLgogICAgIEdQ
UlJlZyBib3hEb3VibGUoRlBSUmVnIGZwciwgR1BSUmVnIGdwcikKICAgICB7Ci0gICAgICAgIEpJ
VENvbXBpbGVyOjpGUFJlZ2lzdGVySUQgZnBSZWcgPSBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3Rl
cklEKGZwcik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGVUb1B0cihmcFJlZywgZ3ByKTsKKyAg
ICAgICAgbV9qaXQubW92ZURvdWJsZVRvUHRyKGZwciwgZ3ByKTsKICAgICAgICAgbV9qaXQuc3Vi
UHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKICAgICAgICAgcmV0dXJu
IGdwcjsKICAgICB9CiAgICAgRlBSUmVnIHVuYm94RG91YmxlKEdQUlJlZyBncHIsIEZQUlJlZyBm
cHIpCiAgICAgewotICAgICAgICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZwUmVnID0gSklU
Q29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwogICAgICAgICBtX2ppdC5hZGRQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAgICBtX2ppdC5tb3ZlUHRy
VG9Eb3VibGUoZ3ByLCBmcFJlZyk7CisgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIs
IGZwcik7CiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQogICAgIEdQUlJlZyBib3hEb3VibGUo
RlBSUmVnIGZwcikKQEAgLTI1NiwxMSArMjUzLDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgICAg
ICAgICBpdGVyLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBm
b3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5leHQoZnByKSkgewot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBtX2ZwcnMubmFtZShmcHIpOwotICAg
ICAgICAgICAgaWYgKG5hbWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewotICAgICAgICAg
ICAgICAgIHNwaWxsKG5hbWUpOwotICAgICAgICAgICAgICAgIG1fZnBycy5yZWxlYXNlKGZwcik7
CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAh
PSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBzcGlsbChpdGVyLm5h
bWUoKSk7CisgICAgICAgICAgICAgICAgaXRlci5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yNzQsOSArMjcwLDggQEAgcHJvdGVjdGVkOgogICAgICAgICAg
ICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoRlBSUmVnIGZwciA9
IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbmFtZSA9IG1fZnBycy5uYW1lKGZwcik7Ci0gICAgICAgICAgICBpZiAobmFt
ZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBp
dGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTQ4NSw2MCArNDgwLDYwIEBAIHByb3RlY3RlZDoKIAogICAgICAgICBpZiAoc3JjQiAh
PSBkZXN0QSkgewogICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBlYXN5IGNhc2VzIC0gdHdvIHNp
bXBsZSBtb3Zlcy4KLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZw
clRvUmVnaXN0ZXJJRChzcmNBKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChkZXN0QSkp
OwotICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3Rl
cklEKHNyY0IpLCBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RCKSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlRG91YmxlKHNyY0EsIGRlc3RBKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmVEb3VibGUoc3JjQiwgZGVzdEIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAoc3JjQSAhPSBkZXN0QikgewogICAgICAgICAgICAgLy8gSGFu
ZGxlIHRoZSBub24tc3dhcCBjYXNlIC0ganVzdCBwdXQgc3JjQiBpbiBwbGFjZSBmaXJzdC4KLSAg
ICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChz
cmNCKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChkZXN0QikpOwotICAgICAgICAgICAg
bV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKHNyY0EpLCBKSVRD
b21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RBKSk7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
RG91YmxlKHNyY0IsIGRlc3RCKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoc3JjQSwg
ZGVzdEEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJU
KHNyY0IgPT0gZGVzdEEgJiYgc3JjQSA9PSBkZXN0Qik7CiAgICAgICAgIC8vIE5lZWQgdG8gc3dh
cDsgcGljayBhIHRlbXBvcmFyeSByZWdpc3Rlci4KICAgICAgICAgRlBSUmVnIHRlbXA7Ci0gICAg
ICAgIGlmIChkZXN0QSAhPSBKSVRDb21waWxlcjo6YXJndW1lbnRGUFIzICYmIGRlc3RBICE9IEpJ
VENvbXBpbGVyOjphcmd1bWVudEZQUjMpCi0gICAgICAgICAgICB0ZW1wID0gSklUQ29tcGlsZXI6
OmFyZ3VtZW50RlBSMzsKLSAgICAgICAgZWxzZSBpZiAoZGVzdEEgIT0gSklUQ29tcGlsZXI6OmFy
Z3VtZW50RlBSMiAmJiBkZXN0QSAhPSBKSVRDb21waWxlcjo6YXJndW1lbnRGUFIyKQotICAgICAg
ICAgICAgdGVtcCA9IEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjI7CisgICAgICAgIGlmIChkZXN0
QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjMgJiYgZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRG
UFIzKQorICAgICAgICAgICAgdGVtcCA9IEZQUkluZm86OmFyZ3VtZW50RlBSMzsKKyAgICAgICAg
ZWxzZSBpZiAoZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRGUFIyICYmIGRlc3RBICE9IEZQUklu
Zm86OmFyZ3VtZW50RlBSMikKKyAgICAgICAgICAgIHRlbXAgPSBGUFJJbmZvOjphcmd1bWVudEZQ
UjI7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGRlc3RBICE9IEpJVENvbXBp
bGVyOjphcmd1bWVudEZQUjEgJiYgZGVzdEEgIT0gSklUQ29tcGlsZXI6OmFyZ3VtZW50RlBSMSk7
Ci0gICAgICAgICAgICB0ZW1wID0gSklUQ29tcGlsZXI6OmFyZ3VtZW50RlBSMTsKKyAgICAgICAg
ICAgIEFTU0VSVChkZXN0QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjEgJiYgZGVzdEEgIT0gRlBS
SW5mbzo6YXJndW1lbnRGUFIxKTsKKyAgICAgICAgICAgIHRlbXAgPSBGUFJJbmZvOjphcmd1bWVu
dEZQUjE7CiAgICAgICAgIH0KLSAgICAgICAgbV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6
ZnByVG9SZWdpc3RlcklEKGRlc3RBKSwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRCh0ZW1w
KSk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJ
RChkZXN0QiksIEpJVENvbXBpbGVyOjpmcHJUb1JlZ2lzdGVySUQoZGVzdEEpKTsKLSAgICAgICAg
bV9qaXQubW92ZURvdWJsZShKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKHRlbXApLCBKSVRD
b21waWxlcjo6ZnByVG9SZWdpc3RlcklEKGRlc3RCKSk7CisgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUoZGVzdEEsIHRlbXApOworICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKGRlc3RCLCBkZXN0QSk7
CisgICAgICAgIG1faml0Lm1vdmVEb3VibGUodGVtcCwgZGVzdEIpOwogICAgIH0KICAgICB2b2lk
IHNldHVwU3R1YkFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewotICAg
ICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxLCBHUFJJbmZv
Ojphcmd1bWVudFJlZ2lzdGVyMj4oYXJnMSwgYXJnMik7CisgICAgICAgIHNldHVwVHdvU3R1YkFy
Z3M8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+KGFyZzEsIGFy
ZzIpOwogICAgIH0KICAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgLy8gSWYgbmVpdGhlciBvZiBh
cmcyL2FyZzMgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2FuIG1vdmUgYXJnMSBpbnRvIHBsYWNl
LgogICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBUd29TdHViQXJncyB0byBmaXggYXJn
Mi9hcmczLgotICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSAm
JiBhcmczICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKSB7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKTsKLSAgICAgICAgICAgIHNl
dHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjIsIEdQUkluZm86OmFyZ3Vt
ZW50UmVnaXN0ZXIzPihhcmcyLCBhcmczKTsKKyAgICAgICAgaWYgKGFyZzIgIT0gR1BSSW5mbzo6
YXJndW1lbnRHUFIxICYmIGFyZzMgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxKSB7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1l
bnRHUFIzPihhcmcyLCBhcmczKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIElmIG5laXRoZXIgb2YgYXJnMS9hcmczIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdl
IGNhbiBtb3ZlIGFyZzIgaW50byBwbGFjZS4KICAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNl
dHVwVHdvU3R1YkFyZ3MgdG8gZml4IGFyZzEvYXJnMy4KLSAgICAgICAgaWYgKGFyZzEgIT0gR1BS
SW5mbzo6YXJndW1lbnRSZWdpc3RlcjIgJiYgYXJnMyAhPSBHUFJJbmZvOjphcmd1bWVudFJlZ2lz
dGVyMikgewotICAgICAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudFJl
Z2lzdGVyMik7Ci0gICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50
UmVnaXN0ZXIxLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMz4oYXJnMSwgYXJnMyk7CisgICAg
ICAgIGlmIChhcmcxICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMiAmJiBhcmczICE9IEdQUkluZm86
OmFyZ3VtZW50R1BSMikgeworICAgICAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgICAgICAgICAgc2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMz4oYXJnMSwgYXJnMyk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiBuZWl0aGVyIG9mIGFyZzEvYXJn
MiBhcmUgaW4gb3VyIHdheSwgdGhlbiB3ZSBjYW4gbW92ZSBhcmczIGludG8gcGxhY2UuCiAgICAg
ICAgIC8vIFRoZW4gd2UgY2FuIHVzZSBzZXR1cFR3b1N0dWJBcmdzIHRvIGZpeCBhcmcxL2FyZzIu
Ci0gICAgICAgIGlmIChhcmcxICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIzICYmIGFyZzIg
IT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUo
YXJnMywgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpOwotICAgICAgICAgICAgc2V0dXBUd29T
dHViQXJnczxHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdp
c3RlcjI+KGFyZzEsIGFyZzIpOworICAgICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjMgJiYgYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgICAgIHNldHVw
VHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+
KGFyZzEsIGFyZzIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTU0Nywy
NSArNTQyLDI1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQnV0IGFyZSB0aGV5IGluIHRoZSBy
aWdodCBvbmVzPwogCiAgICAgICAgIC8vIEZpcnN0LCBlbnN1cmUgYXJnMSBpcyBpbiBwbGFjZS4K
LSAgICAgICAgaWYgKGFyZzEgIT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpIHsKLSAgICAg
ICAgICAgIG1faml0LnN3YXAoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOworICAg
ICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjEpIHsKKyAgICAgICAgICAgIG1f
aml0LnN3YXAoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKIAotICAgICAgICAgICAgLy8g
SWYgYXJnMSB3YXNuJ3QgaW4gYXJndW1lbnRSZWdpc3RlcjEsIG9uZSBvZiBhcmcyL2FyZzMgbXVz
dCBiZS4KLSAgICAgICAgICAgIEFTU0VSVChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0
ZXIxIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOwotICAgICAgICAgICAg
Ly8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRSZWdpc3RlcjEgaXQgbm8gbG9uZ2VyIGlzIChkdWUg
dG8gdGhlIHN3YXApLgorICAgICAgICAgICAgLy8gSWYgYXJnMSB3YXNuJ3QgaW4gYXJndW1lbnRH
UFIxLCBvbmUgb2YgYXJnMi9hcmczIG11c3QgYmUuCisgICAgICAgICAgICBBU1NFUlQoYXJnMiA9
PSBHUFJJbmZvOjphcmd1bWVudEdQUjEgfHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgLy8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRHUFIxIGl0IG5vIGxvbmdl
ciBpcyAoZHVlIHRvIHRoZSBzd2FwKS4KICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBhcmczIG11
c3QgaGF2ZSBiZWVuLiBNYXJrIGhpbSBhcyBtb3ZlZC4KLSAgICAgICAgICAgIGlmIChhcmcyID09
IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKQorICAgICAgICAgICAgaWYgKGFyZzIgPT0gR1BS
SW5mbzo6YXJndW1lbnRHUFIxKQogICAgICAgICAgICAgICAgIGFyZzIgPSBhcmcxOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGFyZzMgPSBhcmcxOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gRWl0aGVyIGFyZzIgJiBhcmczIG5lZWQgc3dhcHBpbmcsIG9yIHdlJ3JlIGFsbCBk
b25lLgotICAgICAgICBBU1NFUlQoKGFyZzIgPT0gR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjIg
fHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMykKLSAgICAgICAgICAgIHx8IChh
cmcyID09IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIzIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJn
dW1lbnRSZWdpc3RlcjIpKTsKKyAgICAgICAgQVNTRVJUKChhcmcyID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiB8fCBhcmczID09IEdQUkluZm86OmFyZ3VtZW50R1BSMykKKyAgICAgICAgICAgIHx8
IChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50R1BSMyB8fCBhcmczID09IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMikpOwogCi0gICAgICAgIGlmIChhcmcyICE9IEdQUkluZm86OmFyZ3VtZW50UmVnaXN0
ZXIyKQotICAgICAgICAgICAgbV9qaXQuc3dhcChHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMiwg
R1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjMpOworICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpCisgICAgICAgICAgICBtX2ppdC5zd2FwKEdQUkluZm86OmFyZ3VtZW50
R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRo
b2RzIGFkZCBjYWxscyB0byBDKysgaGVscGVyIGZ1bmN0aW9ucy4KQEAgLTU3MywxMiArNTY4LDEy
IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAKLSAg
ICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMSk7Ci0gICAg
ICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUklu
Zm86OmFyZ3VtZW50UmVnaXN0ZXIyKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjApOworICAgICAgICBtX2pp
dC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIsIHJlc3VsdCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdCk7CiAgICAgfQogICAgIHZvaWQgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSWRlbnRpZmllciog
aWRlbnRpZmllcikKICAgICB7CkBAIC01ODgsNDkgKzU4Myw0OSBAQCBwcm90ZWN0ZWQ6CiAgICAg
ewogICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOwogCi0gICAgICAgIG1faml0Lm1vdmUoYXJn
MSwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMCk7CisgICAg
ICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKIAogICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0g
ICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVSZWdpc3RlciwgcmVzdWx0KTsK
KyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAg
ICB9CiAgICAgdm9pZCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNGbHVz
aGVkKCkpOwogCi0gICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRSZWdp
c3RlcjEpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMCk7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVSZWdpc3RlciwgcmVzdWx0KTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICB9CiAgICAgdm9pZCBjYWxsT3BlcmF0
aW9uKFpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAK
ICAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIpOwotICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVy
MCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIsIHJlc3VsdCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdCk7CiAgICAgfQogICAgIHZvaWQgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOwogCiAgICAgICAgIHNldHVwU3R1
YkFyZ3VtZW50cyhhcmcxLCBhcmcyKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjApOworICAgICAgICBtX2pp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogCiAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKLSAg
ICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZVJlZ2lzdGVyLCByZXN1bHQpOwor
ICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOwogICAg
IH0KICAgICB2b2lkIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpKUCBvcGVyYXRpb24s
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAg
IEFTU0VSVChpc0ZsdXNoZWQoKSk7CiAKICAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEs
IGFyZzIpOwotICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHBv
aW50ZXIpLCBHUFJJbmZvOjphcmd1bWVudFJlZ2lzdGVyMyk7Ci0gICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsK
KyAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQpAQCAtNjQzLDcgKzYzOCw3
IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKIAogICAgICAgICBz
ZXR1cFN0dWJBcmd1bWVudHMoYXJnMSwgYXJnMiwgYXJnMyk7Ci0gICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsK
KyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKIAogICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CiAgICAgfQpAQCAtNjUxLDEwICs2NDYsMTAgQEAgcHJvdGVjdGVkOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKIAotICAgICAgICBzZXR1cFR3b1N0dWJBcmdz
PEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjAsIEpJVENvbXBpbGVyOjphcmd1bWVudEZQUjE+KGFy
ZzEsIGFyZzIpOworICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEZQUkluZm86OmFyZ3VtZW50RlBS
MCwgRlBSSW5mbzo6YXJndW1lbnRGUFIxPihhcmcxLCBhcmcyKTsKIAogICAgICAgICBtX2ppdC5h
cHBlbmRDYWxsKG9wZXJhdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGls
ZXI6OmZwUmV0dXJuVmFsdWVSZWdpc3RlciwgSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChy
ZXN1bHQpKTsKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UiwgcmVzdWx0KTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQpAQCAtNzA0LDcgKzY5OSw3IEBAIHByb3Rl
Y3RlZDoKICAgICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgogICAgIFZl
Y3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87CiAgICAgUmVnaXN0ZXJC
YW5rPEdQUkluZm8+IG1fZ3ByczsKLSAgICBSZWdpc3RlckJhbms8RlBSQmFua0luZm8+IG1fZnBy
czsKKyAgICBSZWdpc3RlckJhbms8RlBSSW5mbz4gbV9mcHJzOwogCiAgICAgVmVjdG9yPE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbD4gbV9ibG9ja0hlYWRzOwogICAgIHN0cnVjdCBCcmFuY2hSZWNvcmQg
ewpAQCAtODA4LDExICs4MDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Zwck9ySW52
YWxpZDsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGdwcigpCi0g
ICAgewotICAgICAgICByZXR1cm4gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIoKSk7
Ci0gICAgfQotCiBwcml2YXRlOgogICAgIEpJVENvZGVHZW5lcmF0b3IqIG1faml0OwogICAgIE5v
ZGVJbmRleCBtX2luZGV4OwpAQCAtOTEzLDEyICs5MDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX2ZwcjsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGdw
cigpCi0gICAgewotICAgICAgICBBU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7Ci0gICAg
ICAgIHJldHVybiBKSVRDb21waWxlcjo6ZnByVG9SZWdpc3RlcklEKG1fZnByKTsKLSAgICB9Ci0K
IHByb3RlY3RlZDoKICAgICBGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBGUFJS
ZWcgbG9ja2VkRlBSKQogICAgICAgICA6IG1faml0KGppdCkKQEAgLTk0Niw4ICs5MzAsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBHUFJSZWcgbG9ja2VkUmVzdWx0KEpJVENvZGVH
ZW5lcmF0b3IqIGppdCkKICAgICB7Ci0gICAgICAgIGppdC0+bG9jayhHUFJJbmZvOjpyZXR1cm5W
YWx1ZVJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0
ZXI7CisgICAgICAgIGppdC0+bG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IHJldHVybiBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjsKICAgICB9CiB9OwogCkBAIC05NjEsOCAr
OTQ1LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgRlBSUmVnIGxvY2tlZFJlc3Vs
dChKSVRDb2RlR2VuZXJhdG9yKiBqaXQpCiAgICAgewotICAgICAgICBqaXQtPmxvY2soSklUQ29t
cGlsZXI6OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgcmV0dXJuIEpJVENvbXBpbGVyOjpyZXR1
cm5WYWx1ZUZQUjsKKyAgICAgICAgaml0LT5sb2NrKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsK
KyAgICAgICAgcmV0dXJuIEZQUkluZm86OnJldHVyblZhbHVlRlBSOwogICAgIH0KIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZp
c2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNiArNDcsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6
ZmlsbE51bWVyaWNUb0RvdWJsZShObwogICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkgewogICAg
ICAgICBBU1NFUlQobm9kZS5vcCA9PSBEb3VibGVDb25zdGFudCk7CiAgICAgICAgIG1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERv
dWJsZVRvSW50cHRyKHZhbHVlT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpKSkpLCB0ZW1wb3Jh
cnkpOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHJUb1JlZ2lzdGVySUQo
ZnByKSk7CisgICAgICAgIG1vdmVQdHJUb0RvdWJsZSh0ZW1wb3JhcnksIGZwcik7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkp
LCB0ZW1wb3JhcnkpOwogICAgICAgICBKdW1wIGlzSW50ZWdlciA9IGJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0ZW1wb3JhcnksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CiAgICAgICAgIGppdEFzc2VydElzSlNEb3VibGUodGVtcG9yYXJ5KTsKICAgICAg
ICAgYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGVtcG9yYXJ5KTsKLSAg
ICAgICAgbW92ZVB0clRvRG91YmxlKHRlbXBvcmFyeSwgZnByVG9SZWdpc3RlcklEKGZwcikpOwor
ICAgICAgICBtb3ZlUHRyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHIpOwogICAgICAgICBKdW1wIGhh
c1VuYm94ZWREb3VibGUgPSBqdW1wKCk7CiAgICAgICAgIGlzSW50ZWdlci5saW5rKHRoaXMpOwot
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZSh0ZW1wb3JhcnksIGZwclRvUmVnaXN0ZXJJRChm
cHIpKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHIpOwogICAg
ICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsodGhpcyk7CiAgICAgfQogfQpAQCAtMTQyLDI1ICsx
NDIsMjUgQEAgdm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTgogICAgIH0K
IAogICAgIC8vIFNwaWxsIGFsbCBGUFJzIGluIHVzZSBieSB0aGUgc3BlY3VsYXRpdmUgcGF0aC4K
LSAgICBmb3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5leHQoZnBy
KSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gY2hlY2subV9mcHJJbmZvW2Zwcl07
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraW5kZXgpIHsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGNoZWNr
Lm1fZnBySW5mb1tpbmRleF07CiAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IGdyYXBoKClbbm9kZUluZGV4XS52aXJ0dWFsUmVnaXN0ZXIoKTsKIAotICAgICAgICBt
b3ZlRG91YmxlVG9QdHIoZnByVG9SZWdpc3RlcklEKGZwciksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgbW92ZURvdWJsZVRvUHRyKEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpLCBHUFJJbmZv
OjpyZWdUMCk7CiAgICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgfQogCiAgICAgLy8gRmlsbCBhbGwgRlBScyBp
biB1c2UgYnkgdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgotICAgIGZvciAoRlBSUmVnIGZwciA9
IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBlbnRyeS5tX2ZwckluZm9bZnByXTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpbmRleCkgewor
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZW50cnkubV9mcHJJbmZvW2luZGV4XTsKICAg
ICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBmaWxsTnVtZXJpY1RvRG91YmxlKG5vZGVJbmRleCwgZnByLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgIGZpbGxOdW1lcmljVG9Eb3VibGUobm9kZUluZGV4LCBGUFJJbmZvOjp0b1Jl
Z2lzdGVyKGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIH0KIAogICAgIC8vIEZpbGwgYWxs
IEdQUnMgaW4gdXNlIGJ5IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KQEAgLTMxMywxOSArMzEz
LDE5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKICAgICAgICAg
Ly8gdG8gbG9vayB1cCBoYW5kbGVyIGluZm9ybWF0aW9uLiBUaGUgaWRlbnRpZmllciB3ZSB1c2Ug
aXMgdGhlIHJldHVybiBhZGRyZXNzCiAgICAgICAgIC8vIG9mIHRoZSBjYWxsIG91dCBmcm9tIEpJ
VCBjb2RlIHRoYXQgdGhyZXcgdGhlIGV4Y2VwdGlvbjsgdGhpcyBpcyBzdGlsbAogICAgICAgICAv
LyBhdmFpbGFibGUgb24gdGhlIHN0YWNrLCBqdXN0IGJlbG93IHRoZSBzdGFjayBwb2ludGVyIQot
ICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dFJlZ2lzdGVyMCk7Ci0gICAgICAgIHBlZWsoR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEsIC0x
KTsKKyAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgcGVlayhHUFJJbmZvOjphcmd1bWVudEdQUjEsIC0xKTsKICAg
ICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKCksIGxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBsZWF2ZXMgdGhlIGhh
bmRsZXIgQ2FsbEZyYW1lKiBpbiB0aGUgcmV0dXJuVmFsdWVSZWdpc3RlciwKLSAgICAgICAgLy8g
YW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyIGluIHJldHVyblZhbHVlUmVnaXN0ZXIyLgot
ICAgICAgICBqdW1wKEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0ZXIyKTsKKyAgICAgICAgLy8g
bG9va3VwRXhjZXB0aW9uSGFuZGxlciBsZWF2ZXMgdGhlIGhhbmRsZXIgQ2FsbEZyYW1lKiBpbiB0
aGUgcmV0dXJuVmFsdWVHUFIsCisgICAgICAgIC8vIGFuZCB0aGUgYWRkcmVzcyBvZiB0aGUgaGFu
ZGxlciBpbiByZXR1cm5WYWx1ZUdQUjIuCisgICAgICAgIGp1bXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKICAgICB9CiAKICAgICAvLyBHZW5lcmF0ZSB0aGUgcmVnaXN0ZXIgZmlsZSBjaGVj
azsgaWYgdGhlIGZhc3QgY2hlY2sgaW4gdGhlIGZ1bmN0aW9uIGhlYWQgZmFpbHMsCiAgICAgLy8g
d2UgbmVlZCB0byBjYWxsIG91dCB0byBhIGhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVy
IG1vcmUgc3BhY2UgaXMgYXZhaWxhYmxlLgogICAgIC8vIEZJWE1FOiBjaGFuZ2UgdGhpcyBmcm9t
IGEgY3RpIGNhbGwgdG8gYSBERkcgc3R5bGUgb3BlcmF0aW9uIChub3JtYWwgQyBjYWxsaW5nIGNv
bnZlbnRpb25zKS4KICAgICByZWdpc3RlckZpbGVDaGVjay5saW5rKHRoaXMpOwotICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIwKTsKKyAgICBt
b3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIHBv
a2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklU
U3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwogICAgIENhbGwgY2FsbFJl
Z2lzdGVyRmlsZUNoZWNrID0gY2FsbCgpOwogICAgIGp1bXAoZnJvbVJlZ2lzdGVyRmlsZUNoZWNr
KTsKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24o
SklUQ29kCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1Qy
KTsKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIsIFJlZ2lzdGVy
RmlsZTo6UmV0dXJuUEMpOwogICAgIGJyYW5jaDMyKEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwgSW1t
MzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywg
dGhpcyk7Ci0gICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRS
ZWdpc3RlcjApOworICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAgICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09G
RlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7
CiAgICAgQ2FsbCBjYWxsQXJpdHlDaGVjayA9IGNhbGwoKTsKICAgICBtb3ZlKEdQUkluZm86OnJl
Z1QwLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDI4ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKCkgeyBy
ZXR1cm4gbV9nbG9iYWxEYXRhOyB9CiAKICNpZiBDUFUoWDg2XzY0KQotICAgIC8vIFRlbXBvcmFy
eSByZWdpc3RlcnMuCi0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QwID0gWDg2
UmVnaXN0ZXJzOjp4bW0wOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9
IFg4NlJlZ2lzdGVyczo6eG1tMTsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVn
VDIgPSBYODZSZWdpc3RlcnM6OnhtbTI7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1QzID0gWDg2UmVnaXN0ZXJzOjp4bW0zOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUNCA9IFg4NlJlZ2lzdGVyczo6eG1tNDsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdp
c3RlcklEIGZwUmVnVDUgPSBYODZSZWdpc3RlcnM6OnhtbTU7Ci0KLSAgICAvLyBUaGVzZSBjb25z
dGFudHMgcHJvdmlkZSBib3RoIEZQUmVnaXN0ZXJJRCAmIEZQUlJlZyBzdHlsZSBuYW1lcyBmb3Ig
dGhlCi0gICAgLy8gZmxvYXRpbmcgcG9pbnQgYXJndW1lbnQgJiByZXR1cm4gdmFsdWUgcmVnaXN0
ZXIuCi0gICAgc3RhdGljIGNvbnN0IEZQUlJlZyBhcmd1bWVudEZQUjAgPSBmcHIwOwotICAgIHN0
YXRpYyBjb25zdCBGUFJSZWcgYXJndW1lbnRGUFIxID0gZnByMTsKLSAgICBzdGF0aWMgY29uc3Qg
RlBSUmVnIGFyZ3VtZW50RlBSMiA9IGZwcjI7Ci0gICAgc3RhdGljIGNvbnN0IEZQUlJlZyBhcmd1
bWVudEZQUjMgPSBmcHIzOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBBcmd1bWVu
dFJlZ2lzdGVyMCA9IGZwUmVnVDA7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcEFy
Z3VtZW50UmVnaXN0ZXIxID0gZnBSZWdUMTsKLSAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklE
IGZwQXJndW1lbnRSZWdpc3RlcjIgPSBmcFJlZ1QyOwotICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBBcmd1bWVudFJlZ2lzdGVyMyA9IGZwUmVnVDM7Ci0gICAgc3RhdGljIGNvbnN0IEZQ
UlJlZyByZXR1cm5WYWx1ZUZQUiA9IGZwcjA7Ci0gICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJldHVyblZhbHVlUmVnaXN0ZXIgPSBmcFJlZ1QwOwotCi0KICAgICB2b2lkIHByZXNlcnZl
UmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJSZWcgcmVnKQogICAgIHsKICAgICAgICAgcG9wKHJl
Zyk7CkBAIC0xODAsMTMgKzE1OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdp
c3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRlBSZWdpc3RlcklEIGZwclRvUmVnaXN0ZXJJ
RChGUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlZyA8IG51bWJlck9mRlBScyk7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgaWRGb3JSZWdpc3RlcltudW1iZXJP
ZkZQUnNdID0geyBmcFJlZ1QwLCBmcFJlZ1QxLCBmcFJlZ1QyLCBmcFJlZ1QzLCBmcFJlZ1Q0LCBm
cFJlZ1Q1IH07Ci0gICAgICAgIHJldHVybiBpZEZvclJlZ2lzdGVyW3JlZ107Ci0gICAgfQotCiAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgdm9pZCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTQg
KzQ2LDEzIEBAIEVudHJ5TG9jYXRpb246OkVudHJ5TG9jYXRpb24oTWFjcm9Bc3NlbWIKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXgg
PSBOb05vZGU7CiAgICAgfQotICAgIGZvciAoRlBSUmVnIGZwciA9IGZwcjA7IGZwciA8IG51bWJl
ck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBqaXQtPm1fZnBycy5uYW1lKGZwcik7Ci0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0
ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewotICAgICAgICAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAg
Zm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IGppdC0+bV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gaml0
LT5tX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIubmFtZSgpXTsKICAgICAgICAgICAgIEFTU0VS
VChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0gICAgICAgICAg
ICBtX2ZwckluZm9bZnByXSA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICBtX2Zwcklu
Zm9baXRlci5pbmRleCgpXSA9IGluZm8ubm9kZUluZGV4KCk7CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbV9mcHJJbmZvW2Zwcl0gPSBOb05vZGU7CisgICAgICAgICAgICBtX2ZwckluZm9b
aXRlci5pbmRleCgpXSA9IE5vTm9kZTsKICAgICB9CiB9CiAKQEAgLTYyLDMwICs2MSwyOCBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjp2YWx1ZVRvTnVtYmVyKEpTCiAgICAgR1BSUmVnIGpzVmFs
dWVHcHIgPSBvcGVyYW5kLmdwcigpOwogICAgIEdQUlJlZyB0ZW1wR3ByID0gYWxsb2NhdGUoKTsg
Ly8gRklYTUU6IGNhbiB3ZSBza2lwIHRoaXMgYWxsb2NhdGlvbiBvbiB0aGUgbGFzdCB1c2Ugb2Yg
dGhlIHZpcnR1YWwgcmVnaXN0ZXI/CiAKLSAgICBKSVRDb21waWxlcjo6RlBSZWdpc3RlcklEIGZw
UmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwotCiAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm9uTnVtZXJpYyA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7CiAKICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBl
bmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdwcik7
CiAgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGVtcEdw
cik7Ci0gICAgbV9qaXQubW92ZVB0clRvRG91YmxlKHRlbXBHcHIsIGZwUmVnKTsKKyAgICBtX2pp
dC5tb3ZlUHRyVG9Eb3VibGUodGVtcEdwciwgZnByKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBo
YXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCiAgICAgLy8gTmV4dCBoYW5kbGUgY2Vs
bHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKICAgICBub25OdW1lcmljLmxpbmsoJm1faml0KTsK
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhmcHIsIGpzVmFsdWVHcHIpOwotICAgIG1faml0
Lm1vdmUoanNWYWx1ZUdwciwgR1BSSW5mbzo6YXJndW1lbnRSZWdpc3RlcjEpOwotICAgIG1faml0
Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0
ZXIwKTsKKyAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGRmZ0NvbnZlcnRK
U1ZhbHVlVG9OdW1iZXIpOwotICAgIG1faml0Lm1vdmVEb3VibGUoSklUQ29tcGlsZXI6OmZwUmV0
dXJuVmFsdWVSZWdpc3RlciwgZnBSZWcpOworICAgIG1faml0Lm1vdmVEb3VibGUoRlBSSW5mbzo6
cmV0dXJuVmFsdWVGUFIsIGZwcik7CiAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhmcHIpOwog
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvTnVtYmVyID0gbV9qaXQuanVtcCgpOwog
ICAgIAogICAgIC8vIEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KICAgICBpc0ludGVnZXIubGlu
aygmbV9qaXQpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFsdWVHcHIsIGZw
UmVnKTsKKyAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShqc1ZhbHVlR3ByLCBmcHIpOwog
ICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogICAgIGhhc0NhbGxlZFRvTnVtYmVy
LmxpbmsoJm1faml0KTsKIApAQCAtMTAwLDEwICs5NywxMCBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjp2YWx1ZVRvSW50MzIoSlNWCiAKICAgICAvLyBGaXJzdCBoYW5kbGUgbm9uLWludGVnZXJz
CiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0LCBqc1ZhbHVlR3ByKTsKLSAgICBt
X2ppdC5tb3ZlKGpzVmFsdWVHcHIsIEdQUkluZm86OmFyZ3VtZW50UmVnaXN0ZXIxKTsKLSAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudFJl
Z2lzdGVyMCk7CisgICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhkZmdDb252
ZXJ0SlNWYWx1ZVRvSW50MzIpOwotICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86
OnJldHVyblZhbHVlUmVnaXN0ZXIsIHJlc3VsdCk7CisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9Q
dHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhyZXN1bHQpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvSW50MzIg
PSBtX2ppdC5qdW1wKCk7CiAgICAgCkBAIC0xMTUsMTUgKzExMiwxMyBAQCB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjp2YWx1ZVRvSW50MzIoSlNWCiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6Om51
bWJlclRvSW50MzIoRlBSUmVnIGZwciwgR1BSUmVnIGdwcikKIHsKLSAgICBKSVRDb21waWxlcjo6
RlBSZWdpc3RlcklEIGZwUmVnID0gSklUQ29tcGlsZXI6OmZwclRvUmVnaXN0ZXJJRChmcHIpOwot
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNo
VHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwUmVnLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRy
dW5jYXRlU3VjY2Vzc2Z1bCk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9JbnRl
Z2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21w
aWxlcjo6QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOwogCiAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMoZ3ByKTsKIAotICAgIG1faml0Lm1vdmVEb3VibGUoZnBSZWcsIEpJVENvbXBpbGVy
OjpmcEFyZ3VtZW50UmVnaXN0ZXIwKTsKKyAgICBtX2ppdC5tb3ZlRG91YmxlKGZwciwgRlBSSW5m
bzo6YXJndW1lbnRGUFIwKTsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKHRvSW50
MzIpOwotICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIsIGdwcik7CisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIGdwcik7CiAKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGdwcik7CiAKQEAg
LTI3NCwxMCArMjY5LDEwIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CiAgICAgICAgIEludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1
bHQuZnByKCkpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHBvc2l0aXZlID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AxLmdwcigp
LCBUcnVzdGVkSW1tMzIoMCkpOwotICAgICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6
OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1f
aml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ0d29Ub1RoZTMyKSwg
cmVzdWx0LmZwcigpKTsKICAgICAgICAgcG9zaXRpdmUubGluaygmbV9qaXQpOwogCiAgICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKQEAgLTI4Nyw3ICsy
ODIsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgY2Fz
ZSBJbnQzMlRvTnVtYmVyOiB7CiAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1f
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1bHQuZnByKCkpOwog
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTMyOSw3ICszMjQsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMSkpIHsKICAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSk7CiAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAg
bV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1bHQuZnBy
KCkpOwogICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTMzNyw3ICszMzIsNyBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGlmIChpc0tu
b3duTnVtZXJpYyhub2RlLmNoaWxkMSkpIHsKICAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5m
cHIoKSk7CiAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzY4LDkgKzM2Myw5IEBA
IHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAgICAgRG91Ymxl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSwgb3AyKTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3Rl
cklEIHJlZzEgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVy
SUQgcmVnMiA9IG9wMi5ncHIoKTsKLSAgICAgICAgbV9qaXQuYWRkRG91YmxlKHJlZzEsIHJlZzIs
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgbV9qaXQuYWRkRG91YmxlKHJlZzEs
IHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM4MSw5ICszNzYsOSBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIERvdWJsZU9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVn
MSA9IG9wMS5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCByZWcy
ID0gb3AyLmdwcigpOwotICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJl
ZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwg
cmVzdWx0LmZwcigpKTsKIAogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzk0LDkgKzM4OSw5IEBAIHZvaWQgTm9u
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAgICAgRG91YmxlT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSwgb3AyKTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIHJlZzEg
PSBvcDEuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVnMiA9
IG9wMi5ncHIoKTsKLSAgICAgICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOworICAgICAgICBGUFJSZWcg
cmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJl
c3VsdC5mcHIoKSk7CiAKICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTQwNyw5ICs0MDIsOSBAQCB2b2lkIE5vblNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIERvdWJsZU9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgcmVnMSA9IG9wMS5n
cHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCByZWcyID0gb3AyLmdw
cigpOwotICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJlZyByZWcyID0g
b3AyLmZwcigpOworICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZw
cigpKTsKIAogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNjIxLDE3ICs2MTYsMTcgQEAgdm9pZCBOb25TcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogCiAgICAgY2FzZSBSZXR1cm46IHsKICAgICAgICAg
QVNTRVJUKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyICE9IEdQUkluZm86OnJlZ1QxKTsKLSAg
ICAgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUkluZm86OnJldHVyblZhbHVlUmVnaXN0
ZXIpOwotICAgICAgICBBU1NFUlQoR1BSSW5mbzo6cmV0dXJuVmFsdWVSZWdpc3RlciAhPSBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAh
PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIEFTU0VSVChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiAhPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICNpZiBERkdfU1VD
Q0VTU19TVEFUUwogICAgICAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVyIGNvdW50ZXIoIk5vblNw
ZWN1bGF0aXZlSklUIik7CiAgICAgICAgIG1faml0LmVtaXRDb3VudChjb3VudGVyKTsKICNlbmRp
ZgogCi0gICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlUmVnaXN0ZXIu
CisgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSLgogICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBtX2ppdC5t
b3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVSZWdpc3Rlcik7CisgICAgICAgIG1f
aml0Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAKICAgICAgICAg
Ly8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCiAgICAgICAgIG1faml0LmVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDg1MjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b25TcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHN0cnVj
dCBFbnRyeUxvY2F0aW9uIHsKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CiAgICAgfTsKICAg
ICBSZWdpc3RlckluZm8gbV9ncHJJbmZvW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKLSAg
ICBOb2RlSW5kZXggbV9mcHJJbmZvW251bWJlck9mRlBSc107CisgICAgTm9kZUluZGV4IG1fZnBy
SW5mb1tGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107CiB9OwogCiAvLyA9PT0gTm9uU3BlY3Vs
YXRpdmVKSVQgPT09CkBAIC05OSwxNCArOTksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5yZWdpc3Rl
ckZvcm1hdCgpOwotICAgICAgICBHUFJSZWcgcmVnID0gaW5mby5ncHIoKTsKIAogICAgICAgICBp
ZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKLSAgICAgICAgICAgIG1f
aml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnKTsKLSAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkp
OworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBpbmZvLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGluZm8uZ3ByKCksIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyB8fCByZWdpc3RlckZv
cm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcs
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICB2b2lkIHNpbGVudFNwaWxsRlBSKFZpcnR1YWxSZWdpc3RlciBz
cGlsbE1lLCBHUFJSZWcgY2FuVHJhbXBsZSwgRlBSUmVnIGV4Y2x1ZGUgPSBJbnZhbGlkRlBSUmVn
KQpAQCAtMTMxLDIyICsxMzAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
aml0LmdyYXBoKClbbm9kZUluZGV4XTsKICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZv
cm1hdERvdWJsZSk7CiAgICAgICAgIERhdGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZvLnJl
Z2lzdGVyRm9ybWF0KCk7Ci0gICAgICAgIEdQUlJlZyByZWcgPSBpbmZvLmdwcigpOwogCiAgICAg
ICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewogICAgICAgICAg
ICAgaWYgKG5vZGUuaXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSW50
MzJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMy
KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCByZWcpOworICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGluZm8u
Z3ByKCkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCByZWcpOworICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgaW5mby5ncHIo
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobm9kZS5p
c0NvbnN0YW50KCkpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKGNvbnN0YW50QXNKU1ZhbHVlQXNJ
bW1QdHIobm9kZUluZGV4KSwgcmVnKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoY29uc3RhbnRB
c0pTVmFsdWVBc0ltbVB0cihub2RlSW5kZXgpLCBpbmZvLmdwcigpKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMgfHwgcmVn
aXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgcmVnKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIGluZm8uZ3ByKCkp
OwogICAgICAgICB9CiAgICAgfQogICAgIHZvaWQgc2lsZW50RmlsbEZQUihWaXJ0dWFsUmVnaXN0
ZXIgc3BpbGxNZSwgR1BSUmVnIGNhblRyYW1wbGUsIEZQUlJlZyBleGNsdWRlID0gSW52YWxpZEZQ
UlJlZykKQEAgLTE1OSwxMCArMTU3LDkgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSYgbm9kZSA9
IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKIAotICAgICAgICBpZiAobm9kZS5pc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBpbmZvLmdwcigpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZShjb25zdGFudEFzSlNWYWx1ZUFzSW1tUHRyKG5vZGVJbmRleCksIHJlZyk7
Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoY29uc3RhbnRBc0pTVmFsdWVBc0ltbVB0cihub2RlSW5kZXgpLCBp
bmZvLmdwcigpKTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCBjYW5UcmFtcGxlKTsKICAgICAgICAgICAg
IHVuYm94RG91YmxlKGNhblRyYW1wbGUsIGluZm8uZnByKCkpOwogICAgICAgICB9CkBAIC0xNzgs
MTAgKzE3NSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVy
Lm5hbWUoKSwgZXhjbHVkZSk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChGUFJSZWcgZnByID0g
ZnByMDsgZnByIDwgbnVtYmVyT2ZGUFJzOyBuZXh0KGZwcikpIHsKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBuYW1lID0gbV9mcHJzLm5hbWUoZnByKTsKLSAgICAgICAgICAgIGlmIChuYW1l
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxG
UFIobmFtZSwgY2FuVHJhbXBsZSk7CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBt
X2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAg
ICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAg
ICAgICAgc2lsZW50U3BpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUpOwogICAgICAgICB9
CiAgICAgfQogICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoRlBSUmVnIGV4Y2x1ZGUs
IEdQUlJlZyBwcmVzZXJ2ZSA9IEludmFsaWRHUFJSZWcpCkBAIC0xOTQsMTAgKzE5MCw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKICAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVyLm5hbWUoKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgZm9yIChGUFJSZWcgZnByID0gZnByMDsgZnByIDwgbnVtYmVyT2ZGUFJz
OyBuZXh0KGZwcikpIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gbV9mcHJz
Lm5hbWUoZnByKTsKLSAgICAgICAgICAgIGlmIChuYW1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxGUFIobmFtZSwgY2FuVHJhbXBsZSwgZXhj
bHVkZSk7CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsg
aXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFt
ZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgc2lsZW50U3Bp
bGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGV4Y2x1ZGUpOwogICAgICAgICB9CiAgICAg
fQogICAgIHZvaWQgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVkZSkKQEAgLTIw
NiwxMCArMjAxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGV4Y2x1ZGUgPT0gR1BSSW5mbzo6
cmVnVDApCiAgICAgICAgICAgICBjYW5UcmFtcGxlID0gR1BSSW5mbzo6cmVnVDE7CiAgICAgICAg
IAotICAgICAgICBmb3IgKEZQUlJlZyBmcHIgPSBmcHIwOyBmcHIgPCBudW1iZXJPZkZQUnM7IG5l
eHQoZnByKSkgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBtX2ZwcnMubmFt
ZShmcHIpOwotICAgICAgICAgICAgaWYgKG5hbWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikK
LSAgICAgICAgICAgICAgICBzaWxlbnRGaWxsRlBSKG5hbWUsIGNhblRyYW1wbGUpOworICAgICAg
ICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJz
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1l
KCksIGNhblRyYW1wbGUpOwogICAgICAgICB9CiAgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0
ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewogICAg
ICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0y
MjAsMTUgKzIxNCwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgR1BSUmVnIGNhblRyYW1w
bGUgPSBHUFJJbmZvOjpyZWdUMDsKICAgICAgICAgCi0gICAgICAgIGZvciAoRlBSUmVnIGZwciA9
IGZwcjA7IGZwciA8IG51bWJlck9mRlBSczsgbmV4dChmcHIpKSB7Ci0gICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbmFtZSA9IG1fZnBycy5uYW1lKGZwcik7Ci0gICAgICAgICAgICBpZiAobmFt
ZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAg
ICAgICAgIEFTU0VSVChmcHIgIT0gZXhjbHVkZSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIFVO
VVNFRF9QQVJBTShleGNsdWRlKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxG
UFIobmFtZSwgY2FuVHJhbXBsZSwgZXhjbHVkZSk7CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9y
IGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGV4Y2x1ZGUsIGl0ZXIucmVnSUQoKSAhPSBl
eGNsdWRlKTsKKyAgICAgICAgICAgICAgICBzaWxlbnRGaWxsRlBSKGl0ZXIubmFtZSgpLCBjYW5U
cmFtcGxlLCBleGNsdWRlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3Ig
KGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgp
OyArK2l0ZXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJC
YW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWdpc3Rl
ckJhbmsuaAkocmV2aXNpb24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlZ2lzdGVyQmFuay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9iYW5rLT5yZWxlYXNlQXRJbmRleChtX2luZGV4KTsKICAgICAgICAg
fQogCi0gICAgICAgIFJlZ0lEIGdwcigpIGNvbnN0CisgICAgICAgIFJlZ0lEIHJlZ0lEKCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjp0b1JlZ2lzdGVyKG1f
aW5kZXgpOwogICAgICAgICB9CkBAIC0yMzMsNyArMjMzLDcgQEAgcHVibGljOgogI2lmbmRlZiBO
REVCVUcKICAgICAgICAgY29uc3QgY2hhciogZGVidWdOYW1lKCkgY29uc3QKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEJhbmtJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpOworICAgICAgICAg
ICAgcmV0dXJuIEJhbmtJbmZvOjpkZWJ1Z05hbWUocmVnSUQoKSk7CiAgICAgICAgIH0KICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gODUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDE0ICsxNTEsMTMgQEAg
U3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIG1fZ3BySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IE5vTm9kZTsK
ICAgICB9Ci0gICAgZm9yIChGUFJSZWcgZnByID0gZnByMDsgZnByIDwgbnVtYmVyT2ZGUFJzOyBu
ZXh0KGZwcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGpp
dC0+bV9mcHJzLm5hbWUoZnByKTsKLSAgICAgICAgaWYgKHZpcnR1YWxSZWdpc3RlciAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
ICBqaXQtPm1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICBmb3IgKGZwcl9p
dGVyYXRvciBpdGVyID0gaml0LT5tX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBqaXQtPm1fZnBycy5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9ICBqaXQtPm1f
Z2VuZXJhdGlvbkluZm9baXRlci5uYW1lKCldOwogICAgICAgICAgICAgQVNTRVJUKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKLSAgICAgICAgICAgIG1fZnBySW5m
b1tmcHJdID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmlu
ZGV4KCldID0gaW5mby5ub2RlSW5kZXgoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X2ZwckluZm9bZnByXSA9IE5vTm9kZTsKKyAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4
KCldID0gTm9Ob2RlOwogICAgIH0KIH0KIApAQCAtNDMxLDggKzQzMCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwogCi0gICAgICAgICAgICBHUFJSZWcgcmVnID0gb3AyLmdwcigpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2Vt
Ymxlcjo6T3ZlcmZsb3csIHJlZywgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOwogCiAgICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC00NDMsOCArNDQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBvcDEuZ3ByKCk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVy
ZmxvdywgcmVnLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywg
b3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTQ3Niw4ICs0NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAot
ICAgICAgICAgICAgR1BSUmVnIHJlZyA9IG9wMS5ncHIoKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWcs
IEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCks
IEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NDg3LDkgKzQ4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAotICAgICAgICBHUFJSZWcgcmVn
MSA9IG9wMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7Ci0gICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwg
b3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTc3NSwxNyArNzY5
LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgIGNh
c2UgUmV0dXJuOiB7CiAgICAgICAgIEFTU0VSVChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciAh
PSBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAhPSBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKLSAgICAgICAgQVNTRVJUKEdQUkluZm86OnJldHVy
blZhbHVlUmVnaXN0ZXIgIT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBB
U1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBBU1NFUlQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgIT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpOwogCiAjaWYgREZHX1NVQ0NFU1NfU1RBVFMKICAgICAgICAgc3RhdGljIFNhbXBsaW5n
Q291bnRlciBjb3VudGVyKCJTcGVjdWxhdGl2ZUpJVCIpOwogICAgICAgICBtX2ppdC5lbWl0Q291
bnQoY291bnRlcik7CiAjZW5kaWYKIAotICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiBy
ZXR1cm5WYWx1ZVJlZ2lzdGVyLgorICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1
cm5WYWx1ZUdQUi4KICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIEdQUkluZm86OnJldHVyblZhbHVlUmVn
aXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwogCiAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgogICAgICAgICBt
X2ppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlJldHVyblBD
LCBHUFJJbmZvOjpyZWdUMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA4NTI1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYs
NyBAQCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjayB7CiAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OwogICAgIH07CiAgICAgUmVnaXN0ZXJJbmZvIG1fZ3BySW5mb1tHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyc107Ci0gICAgTm9kZUluZGV4IG1fZnBySW5mb1tudW1iZXJPZkZQUnNdOworICAgIE5v
ZGVJbmRleCBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwogfTsKIHR5cGVk
ZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVjdWxhdGlvbkNoZWNr
VmVjdG9yOwogCg==
</data>
<flag name="review"
          id="84451"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>