<?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>27997</bug_id>
          
          <creation_ts>2009-08-04 14:36:35 -0700</creation_ts>
          <short_desc>[V8] Style cleaning for WorkerContextExecutionProxy.</short_desc>
          <delta_ts>2009-08-06 14:32:17 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>137130</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-08-04 14:36:35 -0700</bug_when>
    <thetext>Style cleaning for WorkerContextExecutionProxy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137147</commentid>
    <comment_count>1</comment_count>
      <attachid>34092</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-08-04 15:13:57 -0700</bug_when>
    <thetext>Created attachment 34092
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137229</commentid>
    <comment_count>2</comment_count>
      <attachid>34092</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-04 18:59:11 -0700</bug_when>
    <thetext>Comment on attachment 34092
Proposed Patch

More ChangeLog information would help me understand what all you&apos;re changing here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137249</commentid>
    <comment_count>3</comment_count>
      <attachid>34116</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-08-04 21:32:00 -0700</bug_when>
    <thetext>Created attachment 34116
Add info to ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137608</commentid>
    <comment_count>4</comment_count>
      <attachid>34116</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-06 11:34:50 -0700</bug_when>
    <thetext>Comment on attachment 34116
Add info to ChangeLog

This looks good overall. A couple of comments:

&gt; diff --git a/WebCore/bindings/v8/ScheduledAction.cpp b/WebCore/bindings/v8/ScheduledAction.cpp
&gt; index 298f6b1..ce4ecf1 100644
&gt; --- a/WebCore/bindings/v8/ScheduledAction.cpp
&gt; +++ b/WebCore/bindings/v8/ScheduledAction.cpp
&gt; @@ -134,7 +134,7 @@ void ScheduledAction::execute(WorkerContext* workerContext)
&gt;  
&gt;      if (!m_function.IsEmpty() &amp;&amp; m_function-&gt;IsFunction()) {
&gt;          v8::HandleScope handleScope;
&gt; -        v8::Local&lt;v8::Context&gt; v8Context = scriptController-&gt;proxy()-&gt;GetContext();
&gt; +        v8::Local&lt;v8::Context&gt; v8Context = scriptController-&gt;proxy()-&gt;context();

Be careful, abarth is working on change to remove V8Proxy::context(), talk w/him.


&gt; +v8::Local&lt;v8::Function&gt; V8DOMWrapper::getConstructor(V8ClassIndex::V8WrapperType type, v8::Handle&lt;v8::Context&gt; context)
&gt; +{
&gt; +    // Enter the scope for this context to get the correct constructor.
&gt; +    v8::Context::Scope scope(context);
&gt; +
&gt; +    return getConstructor(type, V8Proxy::getHiddenObjectPrototype(context));
&gt; +}

Can we have a better, more specific name for this method and perhaps make it private? It shouldn&apos;t be used outside of this class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137609</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-06 11:52:31 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; -        v8::Local&lt;v8::Context&gt; v8Context = scriptController-&gt;proxy()-&gt;GetContext();
&gt; &gt; +        v8::Local&lt;v8::Context&gt; v8Context = scriptController-&gt;proxy()-&gt;context();

V8Proxy::context() must die.  It&apos;s not worth renaming it at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137629</commentid>
    <comment_count>6</comment_count>
      <attachid>34221</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-08-06 13:18:18 -0700</bug_when>
    <thetext>Created attachment 34221
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137630</commentid>
    <comment_count>7</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-08-06 13:19:48 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 34116 [details])
&gt; This looks good overall. A couple of comments:
&gt; 
&gt; &gt; diff --git a/WebCore/bindings/v8/ScheduledAction.cpp b/WebCore/bindings/v8/ScheduledAction.cpp
&gt; &gt; index 298f6b1..ce4ecf1 100644
&gt; &gt; --- a/WebCore/bindings/v8/ScheduledAction.cpp
&gt; &gt; +++ b/WebCore/bindings/v8/ScheduledAction.cpp
&gt; &gt; @@ -134,7 +134,7 @@ void ScheduledAction::execute(WorkerContext* workerContext)
&gt; &gt;  
&gt; &gt;      if (!m_function.IsEmpty() &amp;&amp; m_function-&gt;IsFunction()) {
&gt; &gt;          v8::HandleScope handleScope;
&gt; &gt; -        v8::Local&lt;v8::Context&gt; v8Context = scriptController-&gt;proxy()-&gt;GetContext();
&gt; &gt; +        v8::Local&lt;v8::Context&gt; v8Context = scriptController-&gt;proxy()-&gt;context();
&gt; 
&gt; Be careful, abarth is working on change to remove V8Proxy::context(), talk
&gt; w/him.
&gt; 
Per discussion, we keep it as context() since this is for WorkerContextExecutionProxy.
&gt; 
&gt; &gt; +v8::Local&lt;v8::Function&gt; V8DOMWrapper::getConstructor(V8ClassIndex::V8WrapperType type, v8::Handle&lt;v8::Context&gt; context)
&gt; &gt; +{
&gt; &gt; +    // Enter the scope for this context to get the correct constructor.
&gt; &gt; +    v8::Context::Scope scope(context);
&gt; &gt; +
&gt; &gt; +    return getConstructor(type, V8Proxy::getHiddenObjectPrototype(context));
&gt; &gt; +}
&gt; 
&gt; Can we have a better, more specific name for this method and perhaps make it
&gt; private? It shouldn&apos;t be used outside of this class.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137631</commentid>
    <comment_count>8</comment_count>
      <attachid>34221</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-06 13:19:59 -0700</bug_when>
    <thetext>Comment on attachment 34221
Proposed Patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137660</commentid>
    <comment_count>9</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-08-06 14:32:17 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/46859.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34092</attachid>
            <date>2009-08-04 15:13:57 -0700</date>
            <delta_ts>2009-08-04 21:32:00 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>27997</filename>
            <type>text/plain</type>
            <size>24210</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjQwNjE2ZS4uMDY2NGRmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAwOS0wOC0wNCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1Y4XSBTdHlsZSBjbGVhbmluZyBmb3IgV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mjc5OTcKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmdldENvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmpl
Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6flY4V29ya2VyQ29udGV4dEV2ZW50
TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZlbnRM
aXN0ZW5lcjo6cmVwb3J0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0
RXZlbnRMaXN0ZW5lcjo6Z2V0UmVjZWl2ZXJPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6d2Vha09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mv
djgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhh
bmRsZUNvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6ZGlzcG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRFdmVudFRvVjhPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252
ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFdvcmtlckNvbnRleHRUb1Y4T2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6dG9WOCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmZvcmdldFY4RXZlbnRPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZW1v
dmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dF
VFRFUik6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorCiAyMDA5LTA4
LTA0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmUgSHlhdHQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQppbmRleCAzMmQ1ODZkLi5jZDE5OWI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTQzNyw3ICs0MzcsOCBAQCBFTkQKICAgICB9
IGVsc2lmICgkY2xhc3NJbmRleCBlcSAiREVESUNBVEVEV09SS0VSQ09OVEVYVCIgb3IgJGNsYXNz
SW5kZXggZXEgIldPUktFUkNPTlRFWFQiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7Ildvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIn0gPSAxOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCA8PEVORCk7Ci0gICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6
cmV0cmlldmUoKS0+R2V0Q29uc3RydWN0b3IodHlwZSk7CisgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlckNv
bnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7CisgICAg
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IodHlwZSwgd29ya2VyQ29udGV4dCk7
CiBFTkQKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Iik7CkBAIC0yMDQ4LDE0ICsyMDQ5LDE0IEBAIHN1YiBS
ZXR1cm5OYXRpdmVUb0pTVmFsdWUKIAogICAgIGlmICgkdHlwZSBlcSAiRGVkaWNhdGVkV29ya2Vy
Q29udGV4dCIgb3IgJHR5cGUgZXEgIldvcmtlckNvbnRleHQiKSB7CiAgICAgICAgICRpbXBsSW5j
bHVkZXN7IldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIn0gPSAxOwotICAgICAgICByZXR1
cm4gInJldHVybiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OldvcmtlckNvbnRleHRUb1Y4
T2JqZWN0KCR2YWx1ZSkiOworICAgICAgICByZXR1cm4gInJldHVybiBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OmNvbnZlcnRXb3JrZXJDb250ZXh0VG9WOE9iamVjdCgkdmFsdWUpIjsKICAg
ICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIldvcmtlckxvY2F0aW9uIiBvciAkdHlwZSBlcSAiV29y
a2VyTmF2aWdhdG9yIikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuaCJ9ID0gMTsKICAgICAgICAgbXkgJGNsYXNzSW5kZXggPSB1YygkdHlwZSk7
CiAKLSAgICAgICAgcmV0dXJuICJyZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpU
b1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsICR2YWx1ZSkiOworICAgICAgICBy
ZXR1cm4gInJldHVybiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsICR2YWx1ZSkiOwogICAgIH0KIAogICAgIGVs
c2UgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCmluZGV4IDI5OGY2YjEu
LmNlNGVjZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9u
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKQEAgLTEz
NCw3ICsxMzQsNyBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShXb3JrZXJDb250ZXh0
KiB3b3JrZXJDb250ZXh0KQogCiAgICAgaWYgKCFtX2Z1bmN0aW9uLklzRW1wdHkoKSAmJiBtX2Z1
bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpIHsKICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwotICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHNjcmlwdENv
bnRyb2xsZXItPnByb3h5KCktPkdldENvbnRleHQoKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiB2OENvbnRleHQgPSBzY3JpcHRDb250cm9sbGVyLT5wcm94eSgpLT5jb250ZXh0KCk7
CiAgICAgICAgIEFTU0VSVCghdjhDb250ZXh0LklzRW1wdHkoKSk7CiAgICAgICAgIHY4OjpDb250
ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogICAgICAgICBtX2Z1bmN0aW9uLT5DYWxsKHY4
Q29udGV4dC0+R2xvYmFsKCksIG1fYXJnYywgbV9hcmd2KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmNwcAppbmRleCBmMGMzYTc5Li5kNWRjNGJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuY3BwCkBAIC00OTIsMTAgKzQ5MiwxOSBAQCB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
PiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZQogICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OkZ1bmN0aW9uPigpOwogICAgIC8vIEhvdG1haWwgZml4LCBzZWUgY29tbWVudHMgYWJvdmUuCi0g
ICAgdmFsdWUtPlNldCh2ODo6U3RyaW5nOjpOZXcoIl9fcHJvdG9fXyIpLCBvYmplY3RQcm90b3R5
cGUpOworICAgIGlmICghb2JqZWN0UHJvdG90eXBlLklzRW1wdHkoKSkKKyAgICAgICAgdmFsdWUt
PlNldCh2ODo6U3RyaW5nOjpOZXcoIl9fcHJvdG9fXyIpLCBvYmplY3RQcm90b3R5cGUpOwogICAg
IHJldHVybiB2YWx1ZTsKIH0KIAordjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVy
OjpnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3sKKyAgICAvLyBFbnRlciB0aGUgc2NvcGUgZm9y
IHRoaXMgY29udGV4dCB0byBnZXQgdGhlIGNvcnJlY3QgY29uc3RydWN0b3IuCisgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworCisgICAgcmV0dXJuIGdldENvbnN0cnVjdG9y
KHR5cGUsIFY4UHJveHk6OmdldEhpZGRlbk9iamVjdFByb3RvdHlwZShjb250ZXh0KSk7Cit9CisK
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIERPTVdpbmRvdyogd2luZG93KQogewogICAg
IEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsKQEAgLTUwNSwxMCArNTE0LDIxIEBAIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4
dCA9IFY4UHJveHk6OmNvbnRleHQoZnJhbWUpOwogICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7Ci0gICAgLy8gRW50ZXIg
dGhlIHNjb3BlIGZvciB0aGlzIERPTVdpbmRvdyB0byBnZXQgdGhlIGNvcnJlY3QgY29uc3RydWN0
b3IuCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCi0gICAgcmV0dXJu
IGdldENvbnN0cnVjdG9yKHR5cGUsIFY4UHJveHk6OmdldEhpZGRlbk9iamVjdFByb3RvdHlwZShj
b250ZXh0KSk7CisgICAgcmV0dXJuIGdldENvbnN0cnVjdG9yKHR5cGUsIGNvbnRleHQpOworfQor
Cit2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCBXb3JrZXJDb250ZXh0KikKK3sKKyAgICBX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHByb3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5OjpyZXRyaWV2ZSgpOworICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVybiB2ODo6
TG9jYWw8djg6OkZ1bmN0aW9uPigpOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29u
dGV4dCA9IHByb3h5LT5jb250ZXh0KCk7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKTsKKworICAgIHJldHVybiBnZXRD
b25zdHJ1Y3Rvcih0eXBlLCBjb250ZXh0KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUsIHZvaWQqIGltcGwpCkBAIC01MjUsNyArNTQ1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXAKICAgICAgICAgIHx8IHR5cGUgPT0gVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVEVY
Q0VQVElPTgogICAgICAgICAgfHwgdHlwZSA9PSBWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JUKQog
ICAgICAgICAmJiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCkpIHsKLSAg
ICAgICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6VG9WOE9iamVjdCh0eXBl
LCBpbXBsKTsKKyAgICAgICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29u
dmVydFRvVjhPYmplY3QodHlwZSwgaW1wbCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0FjdGl2ZURv
bU9iamVjdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggZjYyMzBl
Yy4uYWE1ODFiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
aAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCkBAIC04Niw2ICs4Niw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKICAgICBj
bGFzcyBWOEV2ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgVjhPYmplY3RFdmVudExpc3RlbmVyOwor
ICAgIGNsYXNzIFdvcmtlckNvbnRleHQ7CiAKICAgICBjbGFzcyBWOERPTVdyYXBwZXIgewogICAg
IHB1YmxpYzoKQEAgLTE5Nyw3ICsxOTgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRUZW1wbGF0
ZShWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUpOwogICAgICAgICBzdGF0aWMgdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4gZ2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBlKTsKKyAgICAgICAgc3RhdGlj
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCk7CiAgICAgICAgIHN0
YXRpYyB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUsIERPTVdpbmRvdyopOworICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj4gZ2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCBX
b3JrZXJDb250ZXh0Kik7CiAKICAgICAgICAgLy8gQ2hlY2tzIHdoZXRoZXIgYSBET00gb2JqZWN0
IGhhcyBhIEpTIHdyYXBwZXIuCiAgICAgICAgIHN0YXRpYyBib29sIGRvbU9iamVjdEhhc0pTV3Jh
cHBlcih2b2lkKik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29u
dGV4dEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRl
eHRFdmVudExpc3RlbmVyLmNwcAppbmRleCA5YWU1Y2Q4Li4zZDI4MDE3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKQEAg
LTQ5LDcgKzQ5LDcgQEAgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6VjhXb3JrZXJDb250
ZXh0RXZlbnRMaXN0ZW5lcihXb3JrZXJDb250ZXh0RXhlY3V0aW8KIFY4V29ya2VyQ29udGV4dEV2
ZW50TGlzdGVuZXI6On5WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyKCkKIHsKICAgICBpZiAo
bV9wcm94eSkKLSAgICAgICAgbV9wcm94eS0+UmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzKTsKKyAg
ICAgICAgbV9wcm94eS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzKTsKICAgICBkaXNwb3NlTGlz
dGVuZXJPYmplY3QoKTsKIH0KIApAQCAtNjUsNyArNjUsNyBAQCB2b2lkIFY4V29ya2VyQ29udGV4
dEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2
ZW50KQogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0gICAgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IG1fcHJveHktPkdldENvbnRleHQoKTsKKyAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gbV9wcm94eS0+Y29udGV4dCgpOwogICAgIGlm
IChjb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC03Myw3ICs3Myw3IEBA
IHZvaWQgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2
ZW50LCBib29sIGlzV2luZG93RXZlbnQpCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNv
bnRleHQpOwogCiAgICAgLy8gR2V0IHRoZSBWOCB3cmFwcGVyIGZvciB0aGUgZXZlbnQgb2JqZWN0
LgotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50ID0gV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpFdmVudFRvVjhPYmplY3QoZXZlbnQpOworICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc0V2ZW50ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0RXZlbnRU
b1Y4T2JqZWN0KGV2ZW50KTsKIAogICAgIGludm9rZUV2ZW50SGFuZGxlcihjb250ZXh0LCBldmVu
dCwganNFdmVudCwgaXNXaW5kb3dFdmVudCk7CiB9CkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgVjhX
b3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6cmVwb3J0RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBjb25zdCBTdHJpCiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAg
ICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gbV9wcm94eS0+R2V0Q29udGV4dCgp
OworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX3Byb3h5LT5jb250ZXh0
KCk7CiAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTE0OCw3ICsxNDgsNyBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gVjhXb3JrZXJDb250ZXh0
RXZlbnRMaXN0ZW5lcjo6Z2V0UmVjZWl2ZXJPYmplY3QoRXZlbnQqIGV2ZQogICAgICAgICByZXR1
cm4gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7CiAKICAgICBFdmVudFRhcmdl
dCogdGFyZ2V0ID0gZXZlbnQtPmN1cnJlbnRUYXJnZXQoKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdmFsdWUgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OkV2ZW50VGFyZ2V0VG9W
OE9iamVjdCh0YXJnZXQpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdCh0YXJn
ZXQpOwogICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8
djg6Ok9iamVjdD4oKTsKICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpOZXcodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKaW5k
ZXggYmVjMjVmMS4uY2U1NjU2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdv
cmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwCkBAIC00Myw3ICs0Myw3
IEBAIHN0YXRpYyB2b2lkIHdlYWtPYmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2sodjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiwgdm9pZCogcGFyCiAgICAgVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOFdvcmtlckNvbnRleHRPYmplY3RF
dmVudExpc3RlbmVyKj4ocGFyYW1ldGVyKTsKIAogICAgIC8vIFJlbW92ZSB0aGUgd3JhcHBlcgot
ICAgIGxpc3RlbmVyLT5wcm94eSgpLT5SZW1vdmVFdmVudExpc3RlbmVyKGxpc3RlbmVyKTsKKyAg
ICBsaXN0ZW5lci0+cHJveHkoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7CiAKICAg
ICBsaXN0ZW5lci0+ZGlzcG9zZUxpc3RlbmVyT2JqZWN0KCk7CiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggOGE0Y2Qx
Ny4uNmJkZWEzMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcApAQCAtMzUsOCArMzUsOCBAQAogCiAjaW5jbHVkZSAiV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5LmgiCiAKLSNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXJDb250
ZXh0LmgiCiAjaW5jbHVkZSAiRE9NQ29yZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkRlZGljYXRl
ZFdvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKQEAgLTY4LDE5ICs2OCwxOSBAQCBz
dGF0aWMgdm9pZCBoYW5kbGVDb25zb2xlTWVzc2FnZSh2ODo6SGFuZGxlPHY4OjpNZXNzYWdlPiBt
ZXNzYWdlLCB2ODo6SGFuZGxlPHY4OgogICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSog
cHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCk7CiAgICAgaWYg
KCFwcm94eSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IHByb3h5LT53b3JrZXJDb250ZXh0KCk7CiAgICAgaWYgKCF3b3JrZXJDb250
ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IGVycm9yTWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UtPkdldCgpOwogICAgIEFTU0VSVCghZXJyb3JN
ZXNzYWdlU3RyaW5nLklzRW1wdHkoKSk7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHRvV2Vi
Q29yZVN0cmluZyhlcnJvck1lc3NhZ2VTdHJpbmcpOwotICAgIAorCiAgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHJlc291cmNlTmFtZSA9IG1lc3NhZ2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgp
OwogICAgIGJvb2wgdXNlVVJMID0gKHJlc291cmNlTmFtZS5Jc0VtcHR5KCkgfHwgIXJlc291cmNl
TmFtZS0+SXNTdHJpbmcoKSk7CiAgICAgU3RyaW5nIHJlc291cmNlTmFtZVN0cmluZyA9IHVzZVVS
TCA/IHdvcmtlckNvbnRleHQtPnVybCgpIDogdG9XZWJDb3JlU3RyaW5nKHJlc291cmNlTmFtZSk7
Ci0gICAgCisKICAgICB3b3JrZXJDb250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlv
biwgSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIGVy
cm9yTWVzc2FnZSwgbWVzc2FnZS0+R2V0TGluZU51bWJlcigpLCByZXNvdXJjZU5hbWVTdHJpbmcp
OwogfQogCkBAIC05OSw4ICs5OSw3IEBAIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6fldv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSgpCiB2b2lkIFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6ZGlzcG9zZSgpCiB7CiAgICAgLy8gRGlzY29ubmVjdCBhbGwgZXZlbnQgbGlzdGVuZXJz
LgotICAgIGlmIChtX2xpc3RlbmVycy5nZXQoKSkKLSAgICB7CisgICAgaWYgKG1fbGlzdGVuZXJz
LmdldCgpKSB7CiAgICAgICAgIGZvciAoVjhFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgaXRl
cmF0b3IobV9saXN0ZW5lcnMtPmJlZ2luKCkpOyBpdGVyYXRvciAhPSBtX2xpc3RlbmVycy0+ZW5k
KCk7ICsraXRlcmF0b3IpCiAgICAgICAgICAgIHN0YXRpY19jYXN0PFY4V29ya2VyQ29udGV4dEV2
ZW50TGlzdGVuZXIqPigqaXRlcmF0b3IpLT5kaXNjb25uZWN0KCk7CiAKQEAgLTE2OSw3ICsxNjgs
NyBAQCB2b2lkIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6aW5pdENvbnRleHRJZk5lZWRl
ZCgpCiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBpbXBsaWNpdFByb3RvU3RyaW5nID0gdjg6
OlN0cmluZzo6TmV3KCJfX3Byb3RvX18iKTsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBKUyBvYmpl
Y3QgYW5kIHVzZSBpdCBhcyB0aGUgcHJvdG90eXBlIGZvciB0aGUgc2hhZG93IGdsb2JhbCBvYmpl
Y3QuCi0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdvcmtlckNvbnRleHRDb25zdHJ1Y3Rv
ciA9IEdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6REVESUNBVEVEV09SS0VSQ09OVEVYVCk7
CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHdvcmtlckNvbnRleHRDb25zdHJ1Y3RvciA9
IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpERURJQ0FURURXT1JL
RVJDT05URVhULCBjb250ZXh0KTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4ganNXb3JrZXJD
b250ZXh0ID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKHdvcmtlckNvbnRleHRDb25zdHJ1
Y3Rvcik7CiAgICAgLy8gQmFpbCBvdXQgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCiAgICAgaWYgKGpz
V29ya2VyQ29udGV4dC5Jc0VtcHR5KCkpIHsKQEAgLTE5MCwyOSArMTg5LDEzIEBAIHZvaWQgV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAgICBtX2xp
c3RlbmVycy5zZXQobmV3IFY4RXZlbnRMaXN0ZW5lckxpc3QoKSk7CiB9CiAKLXY4OjpMb2NhbDx2
ODo6RnVuY3Rpb24+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6R2V0Q29uc3RydWN0b3Io
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUpCi17Ci0gICAgLy8gRW50ZXIgdGhlIGNv
bnRleHQgb2YgdGhlIHByb3h5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBpcwotICAg
IC8vIGNvbnN0cnVjdGVkIGluIHRoZSBjb250ZXh0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwcm94
eS4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUobV9jb250ZXh0KTsKLSAgICB2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBsYXRlID0gVjhET01XcmFwcGVy
OjpnZXRUZW1wbGF0ZSh0eXBlKTsKLQotICAgIC8vIEdldHRpbmcgdGhlIGZ1bmN0aW9uIG1pZ2h0
IGZhaWwgaWYgd2UncmUgcnVubmluZyBvdXQgb2Ygc3RhY2sgb3IgbWVtb3J5LgotICAgIHY4OjpU
cnlDYXRjaCB0cnlDYXRjaDsKLSAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiB2YWx1ZSA9IGZ1
bmN0aW9uVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7Ci0gICAgaWYgKHZhbHVlLklzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7Ci0KLSAgICByZXR1cm4g
dmFsdWU7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHZvaWQq
IGltcGwpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9p
ZCogaW1wbCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwog
CiAgICAgaWYgKHR5cGUgPT0gVjhDbGFzc0luZGV4OjpERURJQ0FURURXT1JLRVJDT05URVhUKQot
ICAgICAgICByZXR1cm4gV29ya2VyQ29udGV4dFRvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8V29ya2Vy
Q29udGV4dCo+KGltcGwpKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRXb3JrZXJDb250ZXh0VG9W
OE9iamVjdChzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oaW1wbCkpOwogCiAgICAgYm9vbCBp
c0FjdGl2ZURvbU9iamVjdCA9IGZhbHNlOwogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMjc5LDcg
KzI2Miw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RXZl
bnRUb1Y4T2JqZWN0KEV2ZW50KiBldmVudCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRFdmVudFRvVjhPYmplY3QoRXZlbnQqIGV2ZW50
KQogewogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwpAQCAtMjk2
LDcgKzI3OSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OkV2ZW50VG9WOE9iamVjdChFdmVudCogZXZlbnQpCiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiByZXN1bHQgPSB0b1Y4KHR5cGUsIFY4Q2xhc3NJbmRleDo6RVZFTlQsIGV2ZW50KTsK
ICAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkgewogICAgICAgICAvLyBJbnN0YW50aWF0aW9uIGZh
aWxlZC4gQXZvaWQgdXBkYXRpbmcgdGhlIERPTSBvYmplY3QgbWFwIGFuZCByZXR1cm4gbnVsbCB3
aGljaAotICAgICAgICAvLyBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgY2FsbGVycyBvZiB0aGlzIGZ1
bmN0aW9uIGluIGNhc2UgdGhlIGV2ZW50IGlzIE5VTEwuCisgICAgICAgIC8vIGlzIGFscmVhZHkg
aGFuZGxlZCBieSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gaW4gY2FzZSB0aGUgZXZlbnQgaXMg
bnVsbC4KICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAgICAgfQogCkBAIC0zMDcsNTMgKzI5
MCw1MiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
OjpFdmVudFRvVjhPYmplY3QoRXZlbnQqIGV2ZW50KQogfQogCiAvLyBBIEpTIG9iamVjdCBvZiB0
eXBlIEV2ZW50VGFyZ2V0IGluIHRoZSB3b3JrZXIgY29udGV4dCBjYW4gb25seSBiZSBXb3JrZXIg
b3IgV29ya2VyQ29udGV4dC4KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OkV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCogdGFyZ2V0KQor
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVy
dEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCogdGFyZ2V0KQogewogICAgIGlmICgh
dGFyZ2V0KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIAogICAgIERlZGljYXRlZFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSB0YXJnZXQtPnRvRGVkaWNhdGVkV29ya2VyQ29udGV4
dCgpOwogICAgIGlmICh3b3JrZXJDb250ZXh0KQotICAgICAgICByZXR1cm4gV29ya2VyQ29udGV4
dFRvVjhPYmplY3Qod29ya2VyQ29udGV4dCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0V29ya2Vy
Q29udGV4dFRvVjhPYmplY3Qod29ya2VyQ29udGV4dCk7CiAKICAgICBXb3JrZXIqIHdvcmtlciA9
IHRhcmdldC0+dG9Xb3JrZXIoKTsKICAgICBpZiAod29ya2VyKQotICAgICAgICByZXR1cm4gVG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OldPUktFUiwgd29ya2VyKTsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V09SS0VSLCB3b3JrZXIpOwogCiAgICAgWE1M
SHR0cFJlcXVlc3QqIHhociA9IHRhcmdldC0+dG9YTUxIdHRwUmVxdWVzdCgpOwogICAgIGlmICh4
aHIpCi0gICAgICAgIHJldHVybiBUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVF
U1QsIHhocik7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OlhNTEhUVFBSRVFVRVNULCB4aHIpOwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpXb3JrZXJDb250ZXh0VG9WOE9iamVjdChX
b3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFdvcmtlckNvbnRleHRUb1Y4T2JqZWN0KFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQpCiB7CiAgICAgaWYgKCF3b3JrZXJDb250ZXh0KQog
ICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleHQgPSB3b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+cHJveHkoKS0+R2V0Q29udGV4dCgp
OworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB3b3JrZXJDb250ZXh0LT5z
Y3JpcHQoKS0+cHJveHkoKS0+Y29udGV4dCgpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBnbG9iYWwgPSBjb250ZXh0LT5HbG9iYWwoKTsKICAgICBBU1NFUlQoIWdsb2JhbC5Jc0VtcHR5
KCkpOwogICAgIHJldHVybiBnbG9iYWw7CiB9CiAKLXY4OjpMb2NhbDx2ODo6T2JqZWN0PiBXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnRvVjgoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IGRlc2NUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgY3B0clR5cGUsIHZvaWQqIGlt
cGwpCit2ODo6TG9jYWw8djg6Ok9iamVjdD4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojp0
b1Y4KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkZXNjcmlwdG9yVHlwZSwgVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlIGNwdHJUeXBlLCB2b2lkKiBpbXBsKQogewogICAgIHY4OjpMb2Nh
bDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uOwogICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eSogcHJveHkgPSByZXRyaWV2ZSgpOwogICAgIGlmIChwcm94eSkKLSAgICAgICAgZnVuY3Rpb24g
PSBwcm94eS0+R2V0Q29uc3RydWN0b3IoZGVzY1R5cGUpOworICAgICAgICBmdW5jdGlvbiA9IFY4
RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoZGVzY3JpcHRvclR5cGUsIHByb3h5LT53b3JrZXJD
b250ZXh0KCkpOwogICAgIGVsc2UKLSAgICAgICAgZnVuY3Rpb24gPSBWOERPTVdyYXBwZXI6Omdl
dFRlbXBsYXRlKGRlc2NUeXBlKS0+R2V0RnVuY3Rpb24oKTsKKyAgICAgICAgZnVuY3Rpb24gPSBW
OERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKGRlc2NyaXB0b3JUeXBlKS0+R2V0RnVuY3Rpb24oKTsK
IAogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZSA9IFNhZmVBbGxvY2F0aW9uOjpu
ZXdJbnN0YW5jZShmdW5jdGlvbik7Ci0gICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5KCkpIHsKKyAg
ICBpZiAoIWluc3RhbmNlLklzRW1wdHkoKSkKICAgICAgICAgLy8gQXZvaWQgc2V0dGluZyB0aGUg
RE9NIHdyYXBwZXIgZm9yIGZhaWxlZCBhbGxvY2F0aW9ucy4KICAgICAgICAgVjhET01XcmFwcGVy
OjpzZXRET01XcmFwcGVyKGluc3RhbmNlLCBWOENsYXNzSW5kZXg6OlRvSW50KGNwdHJUeXBlKSwg
aW1wbCk7Ci0gICAgfQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIApAQCAtMzYyLDggKzM0NCw4
IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpmb3JnZXRWOEV2ZW50T2JqZWN0
KEV2ZW50KiBldmVudCkKICAgICBpZiAoZ2V0RE9NT2JqZWN0TWFwKCkuY29udGFpbnMoZXZlbnQp
KSB7CiAgICAgICAgIGdldERPTU9iamVjdE1hcCgpLmZvcmdldChldmVudCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKIH0KIAogU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgaW50IGJhc2VMaW5lLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqIHN0YXRlKQpAQCAt
NDU4LDcgKzQ0MCw3IEBAIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHk6OmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50CiAgICAgcmV0dXJuIGZpbmRP
ckNyZWF0ZUV2ZW50TGlzdGVuZXJIZWxwZXIob2JqZWN0LCBpc0lubGluZSwgZmluZE9ubHksIHRy
dWUpOwogfQogCi12b2lkIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6UmVtb3ZlRXZlbnRM
aXN0ZW5lcihWOEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQordm9pZCBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OnJlbW92ZUV2ZW50TGlzdGVuZXIoVjhFdmVudExpc3RlbmVyKiBsaXN0ZW5l
cikKIHsKICAgICBtX2xpc3RlbmVycy0+cmVtb3ZlKGxpc3RlbmVyKTsKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmggYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCmluZGV4IDM4N2U0
YzYuLmI4NTVmZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkuaApAQCAtMzQsMTAgKzM0LDEwIEBACiAKICNpZiBFTkFCTEUoV09SS0VS
UykKIAotI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRl
ICJWOEV2ZW50TGlzdGVuZXJMaXN0LmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgorI2luY2x1ZGUg
PHY4Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IApAQCAtNjQsMTUgKzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkoV29ya2VyQ29udGV4dCopOwogICAgICAgICB+V29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5KCk7CiAKLSAgICAgICAgLy8gRklYTUU6IGZvbGxvd2luZyBmdW5j
dGlvbiBzaG91bGQgaGF2ZSBjYW1lbENhc2VkIG5hbWVzIG9uY2UgVjggY29kZS1nZW5lcmF0aW5n
IHNjcmlwdCBpcyBtaWdyYXRlZC4KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBHZXRD
b250ZXh0KCkgeyByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7
IH0KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gR2V0Q29uc3RydWN0b3IoVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlKTsKLSAgICAgICAgdm9pZCBSZW1vdmVFdmVudExpc3RlbmVy
KFY4RXZlbnRMaXN0ZW5lciopOwotCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogaW1w
bCk7Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gRXZlbnRUb1Y4T2JqZWN0
KEV2ZW50KiBldmVudCk7Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gRXZl
bnRUYXJnZXRUb1Y4T2JqZWN0KEV2ZW50VGFyZ2V0KiB0YXJnZXQpOwotICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRUb1Y4T2JqZWN0KFdvcmtlckNvbnRl
eHQqIHdjKTsKKyAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKFY4RXZlbnRMaXN0ZW5l
ciopOwogCiAgICAgICAgIC8vIEZpbmRzL2NyZWF0ZXMgZXZlbnQgbGlzdGVuZXIgd3JhcHBlcnMu
CiAgICAgICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVFdmVudExp
c3RlbmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IGxpc3RlbmVyLCBib29sIGlzSW5saW5lLCBib29s
IGZpbmRPbmx5KTsKQEAgLTg2LDEyICs3OCwyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIEV2YWx1YXRlIGEgc2NyaXB0IGZpbGUgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVu
dmlyb25tZW50LgogICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNj
cmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lLCBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uU3RhdGUqKTsKIAorICAgICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9m
IHRoZSBjb250ZXh0LgorICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7
IHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsgfQorCiAgICAg
ICAgIC8vIFJldHVybnMgV29ya2VyQ29udGV4dCBvYmplY3QuCiAgICAgICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQoKSB7IHJldHVybiBtX3dvcmtlckNvbnRleHQ7IH0KIAogICAgICAg
ICAvLyBSZXR1cm5zIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSBvYmplY3Qgb2YgdGhlIGN1
cnJlbnRseSBleGVjdXRpbmcgY29udGV4dC4gMCB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBjdXJy
ZW50IGV4ZWN1dGluZyBjb250ZXh0IGlzIG5vdCB0aGUgd29ya2VyIGNvbnRleHQuCiAgICAgICAg
IHN0YXRpYyBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHJldHJpZXZlKCk7CiAKKyAgICAg
ICAgLy8gV2UgaGF2ZSB0byBrZWVwIGFsbCB0aGVzZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBoZXJl
IGJlZm9yZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkgaXMgcmVmYWN0b3ItZWQuCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUs
IFBhc3NSZWZQdHI8VD4gaW1wbCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb1Y4T2JqZWN0KHR5cGUsIGltcGwuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlLCB2b2lkKiBpbXBsKTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KEV2ZW50Kik7CisgICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRh
cmdldCopOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRXb3Jr
ZXJDb250ZXh0VG9WOE9iamVjdChXb3JrZXJDb250ZXh0Kik7CisKICAgICBwcml2YXRlOgogICAg
ICAgICB2b2lkIGluaXRWOElmTmVlZGVkKCk7CiAgICAgICAgIHZvaWQgaW5pdENvbnRleHRJZk5l
ZWRlZCgpOwpAQCAtMTAxLDcgKzEwNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ly8gUnVuIGFuIGFscmVhZHkgY29tcGlsZWQgc2NyaXB0LgogICAgICAgICB2ODo6TG9jYWw8djg6
OlZhbHVlPiBydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6U2NyaXB0Pik7CiAKLSAgICAgICAgc3Rh
dGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB0b1Y4KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSBkZXNjVHlwZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGNwdHJUeXBlLCB2b2lkKiBp
bXBsKTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB0b1Y4KFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSBkZXNjcmlwdG9yVHlwZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIGNwdHJUeXBlLCB2b2lkKiBpbXBsKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBmb3Jn
ZXRWOEV2ZW50T2JqZWN0KEV2ZW50Kik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCmluZGV4IDllNzlmYTkuLjFlM2UxMjUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1
c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcApAQCAtMzIsMTAgKzMyLDggQEAKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogCi0j
aW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCi0KLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5n
LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCkBAIC00Myw2ICs0MSw3IEBACiAjaW5j
bHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVudExpc3Rl
bmVyLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzQ5
LDcgQEAgQUNDRVNTT1JfR0VUVEVSKFdvcmtlckNvbnRleHRTZWxmKQogewogICAgIElOQ19TVEFU
UyhMIkRPTS5Xb3JrZXJDb250ZXh0LnNlbGYuX2dldCIpOwogICAgIFdvcmtlckNvbnRleHQqIHdv
cmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V29y
a2VyQ29udGV4dD4oaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6V29ya2VyQ29udGV4dFRvVjhPYmplY3Qod29ya2VyQ29udGV4dCk7CisgICAg
cmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFdvcmtlckNvbnRleHRU
b1Y4T2JqZWN0KHdvcmtlckNvbnRleHQpOwogfQogCiBBQ0NFU1NPUl9HRVRURVIoV29ya2VyQ29u
dGV4dE9uZXJyb3IpCkBAIC0xNjAsNyArMTU5LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtl
ckNvbnRleHRTZXRUaW1lb3V0KQogICAgIHJldHVybiBTZXRUaW1lb3V0T3JJbnRlcnZhbChhcmdz
LCB0cnVlKTsKIH0KIAotQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNvbnRleHRTZXRJbnRlcnZh
bCkgeworQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNvbnRleHRTZXRJbnRlcnZhbCkKK3sKICAg
ICBJTkNfU1RBVFMoTCJET00uV29ya2VyQ29udGV4dC5zZXRJbnRlcnZhbCgpIik7CiAgICAgcmV0
dXJuIFNldFRpbWVvdXRPckludGVydmFsKGFyZ3MsIGZhbHNlKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34116</attachid>
            <date>2009-08-04 21:32:00 -0700</date>
            <delta_ts>2009-08-06 13:18:18 -0700</delta_ts>
            <desc>Add info to ChangeLog</desc>
            <filename>27997_2</filename>
            <type>text/plain</type>
            <size>24755</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjQwNjE2ZS4uNjlhNGM1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAwOS0wOC0wNCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1Y4XSBTdHlsZSBjbGVhbmluZyBmb3IgV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mjc5OTcKKworICAgICAgICBDbGVhbnVwIFdvcmtlckNvbnRleHRFeGVjdXRpb29uUHJveHkgcmVs
YXRlZCBmaWxlcyB0byBmb2xsb3cKKyAgICAgICAgV2ViS2l0IGNvZGluZyBzdHlsZXMgYWZ0ZXIg
YWxsIFY4IGJpbmRpbmcgY29kZXMgYXJlIHVwc3RyZWFtZWQuCisgICAgICAgIDEpIExvd2VyLWNh
c2UgdGhlIGZpcnN0IGxldHRlciBvZiByZW1haW5pbmcgZnVuY3RpbnMgaW4gY2xhc3MKKyAgICAg
ICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LiBVcGRhdGUgdGhlIFY4IGNvZGUgZ2Vu
ZXJhdG9yCisgICAgICAgICAgIGFuZCBhbGwgb3RoZXIgcmVmZXJlbmNlcyBhY2NvcmRpbmdseS4K
KyAgICAgICAgMikgSW50ZWdyYXRlIGdldENvbnN0cnVjdG9yIGZyb20gV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5CisgICAgICAgICAgIHRvIFY4RE9NV3JhcHBlci4KKyAgICAgICAgMykgT3Ro
ZXIgbWlzYyBjaGFuZ2VzLCBsaWtlIHJlbW92aW5nIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGFuZAor
ICAgICAgICAgICBzb3J0aW5nIHRoZSBpbmNsdWRlIGZpbGVzLgorCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3MvdjgvU2No
ZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6ZXhl
Y3V0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0
RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyOjp+VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpyZXBvcnRFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpnZXRSZWNlaXZl
ck9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0T2JqZWN0RXZl
bnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3ZWFrT2JqZWN0RXZlbnRMaXN0ZW5l
ckNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlQ29uc29sZU1lc3NhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpkaXNwb3NlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6aW5pdENvbnRleHRJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OmNvbnZlcnRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6Y29udmVydEV2ZW50VG9WOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0
V29ya2VyQ29udGV4dFRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5Ojp0b1Y4KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmplY3Qp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6
OkNBTExCQUNLX0ZVTkNfREVDTCk6CisKIDIwMDktMDgtMDQgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDMyZDU4NmQu
LmNkMTk5YjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQpAQCAtNDM3LDcgKzQzNyw4IEBAIEVORAogICAgIH0gZWxzaWYgKCRjbGFzc0luZGV4IGVxICJE
RURJQ0FURURXT1JLRVJDT05URVhUIiBvciAkY2xhc3NJbmRleCBlcSAiV09SS0VSQ09OVEVYVCIp
IHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmgi
fSA9IDE7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKLSAgICByZXR1
cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpLT5HZXRDb25zdHJ1Y3Rv
cih0eXBlKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JL
RVJDT05URVhULCBpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpnZXRD
b25zdHJ1Y3Rvcih0eXBlLCB3b3JrZXJDb250ZXh0KTsKIEVORAogICAgIH0gZWxzZSB7CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsi
KTsKQEAgLTIwNDgsMTQgKzIwNDksMTQgQEAgc3ViIFJldHVybk5hdGl2ZVRvSlNWYWx1ZQogCiAg
ICAgaWYgKCR0eXBlIGVxICJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0IiBvciAkdHlwZSBlcSAiV29y
a2VyQ29udGV4dCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmgifSA9IDE7Ci0gICAgICAgIHJldHVybiAicmV0dXJuIFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6V29ya2VyQ29udGV4dFRvVjhPYmplY3QoJHZhbHVlKSI7CisgICAgICAg
IHJldHVybiAicmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFdvcmtl
ckNvbnRleHRUb1Y4T2JqZWN0KCR2YWx1ZSkiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAi
V29ya2VyTG9jYXRpb24iIG9yICR0eXBlIGVxICJXb3JrZXJOYXZpZ2F0b3IiKSB7CiAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIn0gPSAxOwogICAg
ICAgICBteSAkY2xhc3NJbmRleCA9IHVjKCR0eXBlKTsKIAotICAgICAgICByZXR1cm4gInJldHVy
biBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4Ojok
Y2xhc3NJbmRleCwgJHZhbHVlKSI7CisgICAgICAgIHJldHVybiAicmV0dXJuIFdvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xhc3NJ
bmRleCwgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
aGVkdWxlZEFjdGlvbi5jcHAKaW5kZXggMjk4ZjZiMS4uY2U0ZWNmMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcApAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgU2NoZWR1
bGVkQWN0aW9uOjpleGVjdXRlKFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQpCiAKICAgICBp
ZiAoIW1fZnVuY3Rpb24uSXNFbXB0eSgpICYmIG1fZnVuY3Rpb24tPklzRnVuY3Rpb24oKSkgewog
ICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgICAgIHY4OjpMb2NhbDx2
ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gc2NyaXB0Q29udHJvbGxlci0+cHJveHkoKS0+R2V0Q29u
dGV4dCgpOworICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHNjcmlw
dENvbnRyb2xsZXItPnByb3h5KCktPmNvbnRleHQoKTsKICAgICAgICAgQVNTRVJUKCF2OENvbnRl
eHQuSXNFbXB0eSgpKTsKICAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4
dCk7CiAgICAgICAgIG1fZnVuY3Rpb24tPkNhbGwodjhDb250ZXh0LT5HbG9iYWwoKSwgbV9hcmdj
LCBtX2FyZ3YpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IGYwYzNhNzku
LmQ1ZGM0YmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKQEAgLTQ5MiwxMCAr
NDkyLDE5IEBAIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3Ry
dWN0b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlCiAgICAgaWYgKHZhbHVlLklzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7CiAgICAgLy8gSG90
bWFpbCBmaXgsIHNlZSBjb21tZW50cyBhYm92ZS4KLSAgICB2YWx1ZS0+U2V0KHY4OjpTdHJpbmc6
Ok5ldygiX19wcm90b19fIiksIG9iamVjdFByb3RvdHlwZSk7CisgICAgaWYgKCFvYmplY3RQcm90
b3R5cGUuSXNFbXB0eSgpKQorICAgICAgICB2YWx1ZS0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiX19w
cm90b19fIiksIG9iamVjdFByb3RvdHlwZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCit2ODo6
TG9jYWw8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0
KQoreworICAgIC8vIEVudGVyIHRoZSBzY29wZSBmb3IgdGhpcyBjb250ZXh0IHRvIGdldCB0aGUg
Y29ycmVjdCBjb25zdHJ1Y3Rvci4KKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4
dCk7CisKKyAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3IodHlwZSwgVjhQcm94eTo6Z2V0SGlkZGVu
T2JqZWN0UHJvdG90eXBlKGNvbnRleHQpKTsKK30KKwogdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4g
VjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUg
dHlwZSwgRE9NV2luZG93KiB3aW5kb3cpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gd2luZG93LT5m
cmFtZSgpOwpAQCAtNTA1LDEwICs1MTQsMjEgQEAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhE
T01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUKICAg
ICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6Y29udGV4dChmcmFt
ZSk7CiAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4oKTsKLSAgICAvLyBFbnRlciB0aGUgc2NvcGUgZm9yIHRoaXMgRE9NV2lu
ZG93IHRvIGdldCB0aGUgY29ycmVjdCBjb25zdHJ1Y3Rvci4KLSAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgc2NvcGUoY29udGV4dCk7CiAKLSAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3IodHlwZSwgVjhQ
cm94eTo6Z2V0SGlkZGVuT2JqZWN0UHJvdG90eXBlKGNvbnRleHQpKTsKKyAgICByZXR1cm4gZ2V0
Q29uc3RydWN0b3IodHlwZSwgY29udGV4dCk7Cit9CisKK3Y4OjpMb2NhbDx2ODo6RnVuY3Rpb24+
IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUsIFdvcmtlckNvbnRleHQqKQoreworICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eSogcHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCk7CisgICAg
aWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7CisK
KyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gcHJveHktPmNvbnRleHQoKTsK
KyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OkZ1bmN0aW9uPigpOworCisgICAgcmV0dXJuIGdldENvbnN0cnVjdG9yKHR5cGUsIGNvbnRleHQp
OwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogaW1wbCkKQEAgLTUy
NSw3ICs1NDUsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cAogICAgICAgICAgfHwgdHlwZSA9
PSBWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNURVhDRVBUSU9OCiAgICAgICAgICB8fCB0eXBl
ID09IFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQpCiAgICAgICAgICYmIFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKSkgewotICAgICAgICByZXR1cm4gV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5OjpUb1Y4T2JqZWN0KHR5cGUsIGltcGwpOworICAgICAgICByZXR1cm4g
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdCh0eXBlLCBpbXBs
KTsKICAgICB9CiAKICAgICBib29sIGlzQWN0aXZlRG9tT2JqZWN0ID0gZmFsc2U7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuaAppbmRleCBmNjIzMGVjLi5hYTU4MWI4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmgKQEAgLTg2LDYgKzg2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwogICAgIGNsYXNzIFY4RXZlbnRMaXN0ZW5lcjsKICAg
ICBjbGFzcyBWOE9iamVjdEV2ZW50TGlzdGVuZXI7CisgICAgY2xhc3MgV29ya2VyQ29udGV4dDsK
IAogICAgIGNsYXNzIFY4RE9NV3JhcHBlciB7CiAgICAgcHVibGljOgpAQCAtMTk3LDcgKzE5OCw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRlbXBsYXRlKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSk7CiAgICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1
Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBv
YmplY3RQcm90b3R5cGUpOworICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4g
Z2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjb250ZXh0KTsKICAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6RnVuY3Rp
b24+IGdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgRE9NV2luZG93
Kik7CisgICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1Y3Rv
cihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIFdvcmtlckNvbnRleHQqKTsKIAogICAgICAg
ICAvLyBDaGVja3Mgd2hldGhlciBhIERPTSBvYmplY3QgaGFzIGEgSlMgd3JhcHBlci4KICAgICAg
ICAgc3RhdGljIGJvb2wgZG9tT2JqZWN0SGFzSlNXcmFwcGVyKHZvaWQqKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwCmluZGV4
IDlhZTVjZDguLjNkMjgwMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3Jr
ZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdv
cmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcApAQCAtNDksNyArNDksNyBAQCBWOFdvcmtlckNv
bnRleHRFdmVudExpc3RlbmVyOjpWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyKFdvcmtlckNv
bnRleHRFeGVjdXRpbwogVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6flY4V29ya2VyQ29u
dGV4dEV2ZW50TGlzdGVuZXIoKQogewogICAgIGlmIChtX3Byb3h5KQotICAgICAgICBtX3Byb3h5
LT5SZW1vdmVFdmVudExpc3RlbmVyKHRoaXMpOworICAgICAgICBtX3Byb3h5LT5yZW1vdmVFdmVu
dExpc3RlbmVyKHRoaXMpOwogICAgIGRpc3Bvc2VMaXN0ZW5lck9iamVjdCgpOwogfQogCkBAIC02
NSw3ICs2NSw3IEBAIHZvaWQgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQoRXZlbnQqIGV2ZW50LCBib29sIGlzV2luZG93RXZlbnQpCiAKICAgICB2ODo6SGFuZGxlU2Nv
cGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0g
bV9wcm94eS0+R2V0Q29udGV4dCgpOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQgPSBtX3Byb3h5LT5jb250ZXh0KCk7CiAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBWOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkK
ICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7CiAKICAgICAvLyBHZXQgdGhl
IFY4IHdyYXBwZXIgZm9yIHRoZSBldmVudCBvYmplY3QuCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGpzRXZlbnQgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OkV2ZW50VG9WOE9iamVj
dChldmVudCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRFdmVudFRvVjhPYmplY3QoZXZlbnQpOwogCiAgICAg
aW52b2tlRXZlbnRIYW5kbGVyKGNvbnRleHQsIGV2ZW50LCBqc0V2ZW50LCBpc1dpbmRvd0V2ZW50
KTsKIH0KQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVy
OjpyZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmkKIAogICAgIHY4
OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleHQgPSBtX3Byb3h5LT5HZXRDb250ZXh0KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY29udGV4dCA9IG1fcHJveHktPmNvbnRleHQoKTsKICAgICBpZiAoY29udGV4dC5Jc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTQ4LDcgKzE0OCw3IEBAIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpnZXRSZWNlaXZl
ck9iamVjdChFdmVudCogZXZlCiAgICAgICAgIHJldHVybiB2ODo6Q29udGV4dDo6R2V0Q3VycmVu
dCgpLT5HbG9iYWwoKTsKIAogICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudC0+Y3VycmVu
dFRhcmdldCgpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IFdvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eTo6RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KHRhcmdldCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpj
b252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KHRhcmdldCk7CiAgICAgaWYgKHZhbHVlLklzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0PigpOwogICAgIHJldHVy
biB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KHZhbHVlKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4
dE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNv
bnRleHRPYmplY3RFdmVudExpc3RlbmVyLmNwcAppbmRleCBiZWMyNWYxLi5jZTU2NTYzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlz
dGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0T2JqZWN0
RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHZvaWQgd2Vha09iamVj
dEV2ZW50TGlzdGVuZXJDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+LCB2b2lkKiBw
YXIKICAgICBWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0
YXRpY19jYXN0PFY4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIqPihwYXJhbWV0ZXIp
OwogCiAgICAgLy8gUmVtb3ZlIHRoZSB3cmFwcGVyCi0gICAgbGlzdGVuZXItPnByb3h5KCktPlJl
bW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXIpOworICAgIGxpc3RlbmVyLT5wcm94eSgpLT5yZW1v
dmVFdmVudExpc3RlbmVyKGxpc3RlbmVyKTsKIAogICAgIGxpc3RlbmVyLT5kaXNwb3NlTGlzdGVu
ZXJPYmplY3QoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcAppbmRleCA4YTRjZDE3Li42YmRlYTMzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC0z
NSw4ICszNSw4IEBACiAKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIK
IAotI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJET01Db3Jl
RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIgogI2luY2x1
ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKICNpbmNsdWRlICJNZXNz
YWdlUG9ydC5oIgpAQCAtNjgsMTkgKzY4LDE5IEBAIHN0YXRpYyB2b2lkIGhhbmRsZUNvbnNvbGVN
ZXNzYWdlKHY4OjpIYW5kbGU8djg6Ok1lc3NhZ2U+IG1lc3NhZ2UsIHY4OjpIYW5kbGU8djg6CiAg
ICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6cmV0cmlldmUoKTsKICAgICBpZiAoIXByb3h5KQogICAgICAgICByZXR1cm47
Ci0gICAgCisKICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gcHJveHktPndvcmtl
ckNvbnRleHQoKTsKICAgICBpZiAoIXdvcmtlckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSAg
ICAKKwogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gZXJyb3JNZXNzYWdlU3RyaW5nID0gbWVz
c2FnZS0+R2V0KCk7CiAgICAgQVNTRVJUKCFlcnJvck1lc3NhZ2VTdHJpbmcuSXNFbXB0eSgpKTsK
ICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gdG9XZWJDb3JlU3RyaW5nKGVycm9yTWVzc2FnZVN0
cmluZyk7Ci0gICAgCisKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzb3VyY2VOYW1lID0g
bWVzc2FnZS0+R2V0U2NyaXB0UmVzb3VyY2VOYW1lKCk7CiAgICAgYm9vbCB1c2VVUkwgPSAocmVz
b3VyY2VOYW1lLklzRW1wdHkoKSB8fCAhcmVzb3VyY2VOYW1lLT5Jc1N0cmluZygpKTsKICAgICBT
dHJpbmcgcmVzb3VyY2VOYW1lU3RyaW5nID0gdXNlVVJMID8gd29ya2VyQ29udGV4dC0+dXJsKCkg
OiB0b1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1lKTsKLSAgICAKKwogICAgIHdvcmtlckNvbnRl
eHQtPmFkZE1lc3NhZ2UoQ29uc29sZURlc3RpbmF0aW9uLCBKU01lc3NhZ2VTb3VyY2UsIExvZ01l
c3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgZXJyb3JNZXNzYWdlLCBtZXNzYWdlLT5HZXRM
aW5lTnVtYmVyKCksIHJlc291cmNlTmFtZVN0cmluZyk7CiB9CiAKQEAgLTk5LDggKzk5LDcgQEAg
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojp+V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
KCkKIHZvaWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpkaXNwb3NlKCkKIHsKICAgICAv
LyBEaXNjb25uZWN0IGFsbCBldmVudCBsaXN0ZW5lcnMuCi0gICAgaWYgKG1fbGlzdGVuZXJzLmdl
dCgpKQotICAgIHsKKyAgICBpZiAobV9saXN0ZW5lcnMuZ2V0KCkpIHsKICAgICAgICAgZm9yIChW
OEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBpdGVyYXRvcihtX2xpc3RlbmVycy0+YmVnaW4o
KSk7IGl0ZXJhdG9yICE9IG1fbGlzdGVuZXJzLT5lbmQoKTsgKytpdGVyYXRvcikKICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcio+KCppdGVyYXRvcikt
PmRpc2Nvbm5lY3QoKTsKIApAQCAtMTY5LDcgKzE2OCw3IEBAIHZvaWQgV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAgICB2ODo6SGFuZGxlPHY4OjpT
dHJpbmc+IGltcGxpY2l0UHJvdG9TdHJpbmcgPSB2ODo6U3RyaW5nOjpOZXcoIl9fcHJvdG9fXyIp
OwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IEpTIG9iamVjdCBhbmQgdXNlIGl0IGFzIHRoZSBwcm90
b3R5cGUgZm9yIHRoZSBzaGFkb3cgZ2xvYmFsIG9iamVjdC4KLSAgICB2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvbj4gd29ya2VyQ29udGV4dENvbnN0cnVjdG9yID0gR2V0Q29uc3RydWN0b3IoVjhDbGFz
c0luZGV4OjpERURJQ0FURURXT1JLRVJDT05URVhUKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5j
dGlvbj4gd29ya2VyQ29udGV4dENvbnN0cnVjdG9yID0gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1
Y3RvcihWOENsYXNzSW5kZXg6OkRFRElDQVRFRFdPUktFUkNPTlRFWFQsIGNvbnRleHQpOwogICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBqc1dvcmtlckNvbnRleHQgPSBTYWZlQWxsb2NhdGlvbjo6
bmV3SW5zdGFuY2Uod29ya2VyQ29udGV4dENvbnN0cnVjdG9yKTsKICAgICAvLyBCYWlsIG91dCBp
ZiBhbGxvY2F0aW9uIGZhaWxlZC4KICAgICBpZiAoanNXb3JrZXJDb250ZXh0LklzRW1wdHkoKSkg
ewpAQCAtMTkwLDI5ICsxODksMTMgQEAgdm9pZCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OmluaXRDb250ZXh0SWZOZWVkZWQoKQogICAgIG1fbGlzdGVuZXJzLnNldChuZXcgVjhFdmVudExp
c3RlbmVyTGlzdCgpKTsKIH0KIAotdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5OjpHZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgdHlwZSkKLXsKLSAgICAvLyBFbnRlciB0aGUgY29udGV4dCBvZiB0aGUgcHJveHkgdG8gbWFr
ZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIGlzCi0gICAgLy8gY29uc3RydWN0ZWQgaW4gdGhlIGNv
bnRleHQgY29ycmVzcG9uZGluZyB0byB0aGlzIHByb3h5LgotICAgIHY4OjpDb250ZXh0OjpTY29w
ZSBzY29wZShtX2NvbnRleHQpOwotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IGZ1bmN0aW9uVGVtcGxhdGUgPSBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKHR5cGUpOwotCi0g
ICAgLy8gR2V0dGluZyB0aGUgZnVuY3Rpb24gbWlnaHQgZmFpbCBpZiB3ZSdyZSBydW5uaW5nIG91
dCBvZiBzdGFjayBvciBtZW1vcnkuCi0gICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOwotICAgIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+IHZhbHVlID0gZnVuY3Rpb25UZW1wbGF0ZS0+R2V0RnVuY3Rp
b24oKTsKLSAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4oKTsKLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogaW1wbCkKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKQogewogICAgIGlmICghaW1w
bCkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAKICAgICBpZiAodHlwZSA9PSBWOENsYXNz
SW5kZXg6OkRFRElDQVRFRFdPUktFUkNPTlRFWFQpCi0gICAgICAgIHJldHVybiBXb3JrZXJDb250
ZXh0VG9WOE9iamVjdChzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oaW1wbCkpOworICAgICAg
ICByZXR1cm4gY29udmVydFdvcmtlckNvbnRleHRUb1Y4T2JqZWN0KHN0YXRpY19jYXN0PFdvcmtl
ckNvbnRleHQqPihpbXBsKSk7CiAKICAgICBib29sIGlzQWN0aXZlRG9tT2JqZWN0ID0gZmFsc2U7
CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0yNzksNyArMjYyLDcgQEAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OlY4V3IKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpFdmVudFRvVjhPYmplY3QoRXZlbnQqIGV2ZW50
KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29u
dmVydEV2ZW50VG9WOE9iamVjdChFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKCFldmVudCkKICAg
ICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CkBAIC0yOTYsNyArMjc5LDcgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RXZlbnRUb1Y4T2JqZWN0KEV2
ZW50KiBldmVudCkKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc3VsdCA9IHRvVjgodHlw
ZSwgVjhDbGFzc0luZGV4OjpFVkVOVCwgZXZlbnQpOwogICAgIGlmIChyZXN1bHQuSXNFbXB0eSgp
KSB7CiAgICAgICAgIC8vIEluc3RhbnRpYXRpb24gZmFpbGVkLiBBdm9pZCB1cGRhdGluZyB0aGUg
RE9NIG9iamVjdCBtYXAgYW5kIHJldHVybiBudWxsIHdoaWNoCi0gICAgICAgIC8vIGlzIGFscmVh
ZHkgaGFuZGxlZCBieSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gaW4gY2FzZSB0aGUgZXZlbnQg
aXMgTlVMTC4KKyAgICAgICAgLy8gaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IGNhbGxlcnMgb2YgdGhp
cyBmdW5jdGlvbiBpbiBjYXNlIHRoZSBldmVudCBpcyBudWxsLgogICAgICAgICByZXR1cm4gdjg6
Ok51bGwoKTsKICAgICB9CiAKQEAgLTMwNyw1MyArMjkwLDUyIEBAIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OkV2ZW50VG9WOE9iamVjdChFdmVudCog
ZXZlbnQpCiB9CiAKIC8vIEEgSlMgb2JqZWN0IG9mIHR5cGUgRXZlbnRUYXJnZXQgaW4gdGhlIHdv
cmtlciBjb250ZXh0IGNhbiBvbmx5IGJlIFdvcmtlciBvciBXb3JrZXJDb250ZXh0Lgotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RXZlbnRUYXJnZXRU
b1Y4T2JqZWN0KEV2ZW50VGFyZ2V0KiB0YXJnZXQpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KEV2
ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybiB2
ODo6TnVsbCgpOwogCiAgICAgRGVkaWNhdGVkV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9
IHRhcmdldC0+dG9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0KCk7CiAgICAgaWYgKHdvcmtlckNvbnRl
eHQpCi0gICAgICAgIHJldHVybiBXb3JrZXJDb250ZXh0VG9WOE9iamVjdCh3b3JrZXJDb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRXb3JrZXJDb250ZXh0VG9WOE9iamVjdCh3b3JrZXJD
b250ZXh0KTsKIAogICAgIFdvcmtlciogd29ya2VyID0gdGFyZ2V0LT50b1dvcmtlcigpOwogICAg
IGlmICh3b3JrZXIpCi0gICAgICAgIHJldHVybiBUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V09S
S0VSLCB3b3JrZXIpOworICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjpXT1JLRVIsIHdvcmtlcik7CiAKICAgICBYTUxIdHRwUmVxdWVzdCogeGhyID0gdGFyZ2V0
LT50b1hNTEh0dHBSZXF1ZXN0KCk7CiAgICAgaWYgKHhocikKLSAgICAgICAgcmV0dXJuIFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgeGhyKTsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIHhocik7CiAK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OldvcmtlckNvbnRleHRUb1Y4T2JqZWN0KFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRl
eHQpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpj
b252ZXJ0V29ya2VyQ29udGV4dFRvVjhPYmplY3QoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCkKIHsKICAgICBpZiAoIXdvcmtlckNvbnRleHQpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgp
OwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHdvcmtlckNvbnRleHQt
PnNjcmlwdCgpLT5wcm94eSgpLT5HZXRDb250ZXh0KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY29udGV4dCA9IHdvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5wcm94eSgpLT5jb250ZXh0
KCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRleHQtPkdsb2Jh
bCgpOwogICAgIEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7CiAgICAgcmV0dXJuIGdsb2JhbDsK
IH0KIAotdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6
dG9WOChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZGVzY1R5cGUsIFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSBjcHRyVHlwZSwgdm9pZCogaW1wbCkKK3Y4OjpMb2NhbDx2ODo6T2JqZWN0
PiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnRvVjgoVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIGRlc2NyaXB0b3JUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgY3B0clR5
cGUsIHZvaWQqIGltcGwpCiB7CiAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb247
CiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IHJldHJpZXZlKCk7CiAg
ICAgaWYgKHByb3h5KQotICAgICAgICBmdW5jdGlvbiA9IHByb3h5LT5HZXRDb25zdHJ1Y3Rvcihk
ZXNjVHlwZSk7CisgICAgICAgIGZ1bmN0aW9uID0gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3Rv
cihkZXNjcmlwdG9yVHlwZSwgcHJveHktPndvcmtlckNvbnRleHQoKSk7CiAgICAgZWxzZQotICAg
ICAgICBmdW5jdGlvbiA9IFY4RE9NV3JhcHBlcjo6Z2V0VGVtcGxhdGUoZGVzY1R5cGUpLT5HZXRG
dW5jdGlvbigpOworICAgICAgICBmdW5jdGlvbiA9IFY4RE9NV3JhcHBlcjo6Z2V0VGVtcGxhdGUo
ZGVzY3JpcHRvclR5cGUpLT5HZXRGdW5jdGlvbigpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGZ1bmN0aW9uKTsKLSAg
ICBpZiAoIWluc3RhbmNlLklzRW1wdHkoKSkgeworICAgIGlmICghaW5zdGFuY2UuSXNFbXB0eSgp
KQogICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIHRoZSBET00gd3JhcHBlciBmb3IgZmFpbGVkIGFs
bG9jYXRpb25zLgogICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoaW5zdGFuY2Us
IFY4Q2xhc3NJbmRleDo6VG9JbnQoY3B0clR5cGUpLCBpbXBsKTsKLSAgICB9CiAgICAgcmV0dXJu
IGluc3RhbmNlOwogfQogCkBAIC0zNjIsOCArMzQ0LDggQEAgYm9vbCBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OmZvcmdldFY4RXZlbnRPYmplY3QoRXZlbnQqIGV2ZW50KQogICAgIGlmIChn
ZXRET01PYmplY3RNYXAoKS5jb250YWlucyhldmVudCkpIHsKICAgICAgICAgZ2V0RE9NT2JqZWN0
TWFwKCkuZm9yZ2V0KGV2ZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBTY3Jp
cHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUsIFdvcmtlckNv
bnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCkBAIC00NTgsNyArNDQwLDcgQEAgUGFzc1JlZlB0
cjxWOEV2ZW50TGlzdGVuZXI+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZmluZE9yQ3Jl
YXRlT2JqZWN0RXZlbnQKICAgICByZXR1cm4gZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lckhlbHBl
cihvYmplY3QsIGlzSW5saW5lLCBmaW5kT25seSwgdHJ1ZSk7CiB9CiAKLXZvaWQgV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5OjpSZW1vdmVFdmVudExpc3RlbmVyKFY4RXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIpCit2b2lkIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihWOEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAgIG1fbGlzdGVuZXJzLT5y
ZW1vdmUobGlzdGVuZXIpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmgKaW5kZXggMzg3ZTRjNi4uYjg1NWZmMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCkBAIC0zNCwx
MCArMzQsMTAgQEAKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogCi0jaW5jbHVkZSA8djguaD4KICNp
bmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIK
ICNpbmNsdWRlICJWOEluZGV4LmgiCisjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02NCwxNSArNjQsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eShXb3Jr
ZXJDb250ZXh0Kik7CiAgICAgICAgIH5Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkoKTsKIAot
ICAgICAgICAvLyBGSVhNRTogZm9sbG93aW5nIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGNhbWVsQ2Fz
ZWQgbmFtZXMgb25jZSBWOCBjb2RlLWdlbmVyYXRpbmcgc2NyaXB0IGlzIG1pZ3JhdGVkLgotICAg
ICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IEdldENvbnRleHQoKSB7IHJldHVybiB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsgfQotICAgICAgICB2ODo6TG9jYWw8djg6
OkZ1bmN0aW9uPiBHZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUpOwot
ICAgICAgICB2b2lkIFJlbW92ZUV2ZW50TGlzdGVuZXIoVjhFdmVudExpc3RlbmVyKik7Ci0KLSAg
ICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKTsKLSAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBFdmVudFRvVjhPYmplY3QoRXZlbnQqIGV2ZW50KTsKLSAgICAgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRU
YXJnZXQqIHRhcmdldCk7Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29y
a2VyQ29udGV4dFRvVjhPYmplY3QoV29ya2VyQ29udGV4dCogd2MpOworICAgICAgICB2b2lkIHJl
bW92ZUV2ZW50TGlzdGVuZXIoVjhFdmVudExpc3RlbmVyKik7CiAKICAgICAgICAgLy8gRmluZHMv
Y3JlYXRlcyBldmVudCBsaXN0ZW5lciB3cmFwcGVycy4KICAgICAgICAgUGFzc1JlZlB0cjxWOEV2
ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1
ZT4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUsIGJvb2wgZmluZE9ubHkpOwpAQCAtODYsMTIgKzc4
LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQg
ZmlsZSBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuCiAgICAgICAgIFNjcmlw
dFZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVO
YW1lLCBpbnQgYmFzZUxpbmUsIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSopOwogCisgICAg
ICAgIC8vIFJldHVybnMgYSBsb2NhbCBoYW5kbGUgb2YgdGhlIGNvbnRleHQuCisgICAgICAgIHY4
OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCgpIHsgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD46Ok5ldyhtX2NvbnRleHQpOyB9CisKICAgICAgICAgLy8gUmV0dXJucyBXb3JrZXJDb250
ZXh0IG9iamVjdC4KICAgICAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCgpIHsgcmV0
dXJuIG1fd29ya2VyQ29udGV4dDsgfQogCiAgICAgICAgIC8vIFJldHVybnMgV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5IG9iamVjdCBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb250ZXh0
LiAwIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIGN1cnJlbnQgZXhlY3V0aW5nIGNvbnRleHQgaXMg
bm90IHRoZSB3b3JrZXIgY29udGV4dC4KICAgICAgICAgc3RhdGljIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eSogcmV0cmlldmUoKTsKIAorICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYWxs
IHRoZXNlIGNvbnZlcnNpb24gZnVuY3Rpb25zIGhlcmUgYmVmb3JlIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eSBpcyByZWZhY3Rvci1lZC4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0VG9WOE9iamVjdChW
OENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgUGFzc1JlZlB0cjxUPiBpbXBsKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QodHlwZSwgaW1wbC5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHZvaWQqIGltcGwp
OworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRvVjhP
YmplY3QoRXZlbnQqKTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252
ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KEV2ZW50VGFyZ2V0Kik7CisgICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFdvcmtlckNvbnRleHRUb1Y4T2JqZWN0KFdvcmtl
ckNvbnRleHQqKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgaW5pdFY4SWZOZWVkZWQo
KTsKICAgICAgICAgdm9pZCBpbml0Q29udGV4dElmTmVlZGVkKCk7CkBAIC0xMDEsNyArMTA3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBSdW4gYW4gYWxyZWFkeSBjb21waWxl
ZCBzY3JpcHQuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJ1blNjcmlwdCh2ODo6SGFu
ZGxlPHY4OjpTY3JpcHQ+KTsKIAotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IHRvVjgoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRlc2NUeXBlLCBWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgY3B0clR5cGUsIHZvaWQqIGltcGwpOworICAgICAgICBzdGF0aWMgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IHRvVjgoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRlc2Ny
aXB0b3JUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgY3B0clR5cGUsIHZvaWQqIGlt
cGwpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGZvcmdldFY4RXZlbnRPYmplY3QoRXZlbnQqKTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1
c3RvbS5jcHAKaW5kZXggOWU3OWZhOS4uMWUzZTEyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCkBAIC0zMiwxMCArMzIs
OCBAQAogCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAKLSNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJE
T01UaW1lci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJTY2hlZHVs
ZWRBY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJp
bmRpbmcuaCIKQEAgLTQzLDYgKzQxLDcgQEAKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJXb3JrZXJD
b250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsNyArNDksNyBAQCBBQ0NFU1NPUl9HRVRURVIoV29y
a2VyQ29udGV4dFNlbGYpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRleHQuc2Vs
Zi5fZ2V0Iik7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXb3JrZXJDb250ZXh0PihpbmZvLkhvbGRlcigp
KTsKLSAgICByZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpXb3JrZXJDb250ZXh0
VG9WOE9iamVjdCh3b3JrZXJDb250ZXh0KTsKKyAgICByZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5Ojpjb252ZXJ0V29ya2VyQ29udGV4dFRvVjhPYmplY3Qod29ya2VyQ29udGV4dCk7
CiB9CiAKIEFDQ0VTU09SX0dFVFRFUihXb3JrZXJDb250ZXh0T25lcnJvcikKQEAgLTE2MCw3ICsx
NTksOCBAQCBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dFNldFRpbWVvdXQpCiAgICAg
cmV0dXJuIFNldFRpbWVvdXRPckludGVydmFsKGFyZ3MsIHRydWUpOwogfQogCi1DQUxMQkFDS19G
VU5DX0RFQ0woV29ya2VyQ29udGV4dFNldEludGVydmFsKSB7CitDQUxMQkFDS19GVU5DX0RFQ0wo
V29ya2VyQ29udGV4dFNldEludGVydmFsKQorewogICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXJD
b250ZXh0LnNldEludGVydmFsKCkiKTsKICAgICByZXR1cm4gU2V0VGltZW91dE9ySW50ZXJ2YWwo
YXJncywgZmFsc2UpOwogfQo=
</data>
<flag name="review"
          id="18280"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34221</attachid>
            <date>2009-08-06 13:18:18 -0700</date>
            <delta_ts>2009-08-06 13:19:59 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>27997_3</filename>
            <type>text/plain</type>
            <size>24900</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjQwNjE2ZS4uZDA1MTY3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAwOS0wOC0wNCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1Y4XSBTdHlsZSBjbGVhbmluZyBmb3IgV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mjc5OTcKKworICAgICAgICBDbGVhbnVwIFdvcmtlckNvbnRleHRFeGVjdXRpb29uUHJveHkgcmVs
YXRlZCBmaWxlcyB0byBmb2xsb3cKKyAgICAgICAgV2ViS2l0IGNvZGluZyBzdHlsZXMgYWZ0ZXIg
YWxsIFY4IGJpbmRpbmcgY29kZXMgYXJlIHVwc3RyZWFtZWQuCisgICAgICAgIDEpIExvd2VyLWNh
c2UgdGhlIGZpcnN0IGxldHRlciBvZiByZW1haW5pbmcgZnVuY3RpbnMgaW4gY2xhc3MKKyAgICAg
ICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LiBVcGRhdGUgdGhlIFY4IGNvZGUgZ2Vu
ZXJhdG9yCisgICAgICAgICAgIGFuZCBhbGwgb3RoZXIgcmVmZXJlbmNlcyBhY2NvcmRpbmdseS4K
KyAgICAgICAgMikgSW50ZWdyYXRlIGdldENvbnN0cnVjdG9yIGZyb20gV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5CisgICAgICAgICAgIHRvIFY4RE9NV3JhcHBlci4KKyAgICAgICAgMykgT3Ro
ZXIgbWlzYyBjaGFuZ2VzLCBsaWtlIHJlbW92aW5nIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGFuZAor
ICAgICAgICAgICBzb3J0aW5nIHRoZSBpbmNsdWRlIGZpbGVzLgorCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3MvdjgvU2No
ZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6ZXhl
Y3V0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3JGb3JDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4V29y
a2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJD
b250ZXh0RXZlbnRMaXN0ZW5lcjo6flY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6cmVwb3J0
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcjo6
Z2V0UmVjZWl2ZXJPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4
dE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2Vha09iamVjdEV2
ZW50TGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUNvbnNvbGVNZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZGlz
cG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6Omlu
aXRDb250ZXh0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRFdmVudFRvVjhPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0RXZlbnRUYXJnZXRU
b1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eTo6Y29udmVydFdvcmtlckNvbnRleHRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6dG9WOCk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmZvcmdldFY4RXZlbnRPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZW1vdmVFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRU
b1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAgICAg
IChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorCiAyMDA5LTA4LTA0ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUg
SHlhdHQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRl
eCAzMmQ1ODZkLi5jZDE5OWI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0KQEAgLTQzNyw3ICs0MzcsOCBAQCBFTkQKICAgICB9IGVsc2lmICgkY2xhc3NJ
bmRleCBlcSAiREVESUNBVEVEV09SS0VSQ09OVEVYVCIgb3IgJGNsYXNzSW5kZXggZXEgIldPUktF
UkNPTlRFWFQiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IldvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eS5oIn0gPSAxOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7
Ci0gICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKS0+R2V0
Q29uc3RydWN0b3IodHlwZSk7CisgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJ
bmRleDo6V09SS0VSQ09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIFY4RE9NV3Jh
cHBlcjo6Z2V0Q29uc3RydWN0b3IodHlwZSwgd29ya2VyQ29udGV4dCk7CiBFTkQKICAgICB9IGVs
c2UgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Iik7CkBAIC0yMDQ4LDE0ICsyMDQ5LDE0IEBAIHN1YiBSZXR1cm5OYXRpdmVUb0pT
VmFsdWUKIAogICAgIGlmICgkdHlwZSBlcSAiRGVkaWNhdGVkV29ya2VyQ29udGV4dCIgb3IgJHR5
cGUgZXEgIldvcmtlckNvbnRleHQiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IldvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5oIn0gPSAxOwotICAgICAgICByZXR1cm4gInJldHVybiBXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OldvcmtlckNvbnRleHRUb1Y4T2JqZWN0KCR2YWx1ZSki
OworICAgICAgICByZXR1cm4gInJldHVybiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNv
bnZlcnRXb3JrZXJDb250ZXh0VG9WOE9iamVjdCgkdmFsdWUpIjsKICAgICB9CiAKICAgICBpZiAo
JHR5cGUgZXEgIldvcmtlckxvY2F0aW9uIiBvciAkdHlwZSBlcSAiV29ya2VyTmF2aWdhdG9yIikg
ewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCJ9
ID0gMTsKICAgICAgICAgbXkgJGNsYXNzSW5kZXggPSB1YygkdHlwZSk7CiAKLSAgICAgICAgcmV0
dXJuICJyZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6JGNsYXNzSW5kZXgsICR2YWx1ZSkiOworICAgICAgICByZXR1cm4gInJldHVybiBX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6JGNsYXNzSW5kZXgsICR2YWx1ZSkiOwogICAgIH0KIAogICAgIGVsc2UgewpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCmluZGV4IDI5OGY2YjEuLmNlNGVjZjEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKQEAgLTEzNCw3ICsxMzQsNyBAQCB2
b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0
KQogCiAgICAgaWYgKCFtX2Z1bmN0aW9uLklzRW1wdHkoKSAmJiBtX2Z1bmN0aW9uLT5Jc0Z1bmN0
aW9uKCkpIHsKICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgICAgICB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHNjcmlwdENvbnRyb2xsZXItPnByb3h5
KCktPkdldENvbnRleHQoKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiB2OENvbnRl
eHQgPSBzY3JpcHRDb250cm9sbGVyLT5wcm94eSgpLT5jb250ZXh0KCk7CiAgICAgICAgIEFTU0VS
VCghdjhDb250ZXh0LklzRW1wdHkoKSk7CiAgICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29w
ZSh2OENvbnRleHQpOwogICAgICAgICBtX2Z1bmN0aW9uLT5DYWxsKHY4Q29udGV4dC0+R2xvYmFs
KCksIG1fYXJnYywgbV9hcmd2KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XcmFwcGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAppbmRl
eCBmMGMzYTc5Li5iMjI2ZWJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V3JhcHBlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBA
IC00OTIsMTAgKzQ5MiwxOSBAQCB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6
OmdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZQogICAgIGlmICh2YWx1
ZS5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpOwog
ICAgIC8vIEhvdG1haWwgZml4LCBzZWUgY29tbWVudHMgYWJvdmUuCi0gICAgdmFsdWUtPlNldCh2
ODo6U3RyaW5nOjpOZXcoIl9fcHJvdG9fXyIpLCBvYmplY3RQcm90b3R5cGUpOworICAgIGlmICgh
b2JqZWN0UHJvdG90eXBlLklzRW1wdHkoKSkKKyAgICAgICAgdmFsdWUtPlNldCh2ODo6U3RyaW5n
OjpOZXcoIl9fcHJvdG9fXyIpLCBvYmplY3RQcm90b3R5cGUpOwogICAgIHJldHVybiB2YWx1ZTsK
IH0KIAordjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3Rv
ckZvckNvbnRleHQoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNvbnRleHQpCit7CisgICAgLy8gRW50ZXIgdGhlIHNjb3BlIGZvciB0aGlz
IGNvbnRleHQgdG8gZ2V0IHRoZSBjb3JyZWN0IGNvbnN0cnVjdG9yLgorICAgIHY4OjpDb250ZXh0
OjpTY29wZSBzY29wZShjb250ZXh0KTsKKworICAgIHJldHVybiBnZXRDb25zdHJ1Y3Rvcih0eXBl
LCBWOFByb3h5OjpnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUoY29udGV4dCkpOworfQorCiB2ODo6
TG9jYWw8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCBET01XaW5kb3cqIHdpbmRvdykKIHsKICAgICBGcmFt
ZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CkBAIC01MDUsMTAgKzUxNCwyMSBAQCB2ODo6TG9j
YWw8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZQogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBW
OFByb3h5Ojpjb250ZXh0KGZyYW1lKTsKICAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpOwotICAgIC8vIEVudGVyIHRoZSBz
Y29wZSBmb3IgdGhpcyBET01XaW5kb3cgdG8gZ2V0IHRoZSBjb3JyZWN0IGNvbnN0cnVjdG9yLgot
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKIAotICAgIHJldHVybiBnZXRD
b25zdHJ1Y3Rvcih0eXBlLCBWOFByb3h5OjpnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUoY29udGV4
dCkpOworICAgIHJldHVybiBnZXRDb25zdHJ1Y3RvckZvckNvbnRleHQodHlwZSwgY29udGV4dCk7
Cit9CisKK3Y4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0
b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIFdvcmtlckNvbnRleHQqKQorewor
ICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkgPSBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OnJldHJpZXZlKCk7CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJu
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0ID0gcHJveHktPmNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpOworCisgICAgcmV0dXJu
IGdldENvbnN0cnVjdG9yRm9yQ29udGV4dCh0eXBlLCBjb250ZXh0KTsKIH0KIAogdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHZvaWQqIGltcGwpCkBAIC01MjUsNyArNTQ1LDcgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXAKICAgICAgICAgIHx8IHR5cGUgPT0gVjhDbGFzc0luZGV4OjpY
TUxIVFRQUkVRVUVTVEVYQ0VQVElPTgogICAgICAgICAgfHwgdHlwZSA9PSBWOENsYXNzSW5kZXg6
Ok1FU1NBR0VQT1JUKQogICAgICAgICAmJiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJl
dHJpZXZlKCkpIHsKLSAgICAgICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6
VG9WOE9iamVjdCh0eXBlLCBpbXBsKTsKKyAgICAgICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmplY3QodHlwZSwgaW1wbCk7CiAgICAgfQogCiAgICAg
Ym9vbCBpc0FjdGl2ZURvbU9iamVjdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmgKaW5kZXggZjYyMzBlYy4uZGFmZmNlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdyYXBwZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5o
CkBAIC04Niw2ICs4Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdHlsZVNo
ZWV0TGlzdDsKICAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgVjhPYmplY3RF
dmVudExpc3RlbmVyOworICAgIGNsYXNzIFdvcmtlckNvbnRleHQ7CiAKICAgICBjbGFzcyBWOERP
TVdyYXBwZXIgewogICAgIHB1YmxpYzoKQEAgLTE5Niw4ICsxOTcsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB3cmFwTmF0aXZl
Tm9kZUZpbHRlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogCiAgICAgICAgIHN0YXRpYyB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZ2V0VGVtcGxhdGUoVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlKTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+
IGdldENvbnN0cnVjdG9yRm9yQ29udGV4dChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpOwogICAgICAgICBzdGF0aWMgdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4gZ2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBlKTsKICAgICAgICAgc3RhdGlj
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSwgRE9NV2luZG93Kik7CisgICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkZ1
bmN0aW9uPiBnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIFdvcmtl
ckNvbnRleHQqKTsKIAogICAgICAgICAvLyBDaGVja3Mgd2hldGhlciBhIERPTSBvYmplY3QgaGFz
IGEgSlMgd3JhcHBlci4KICAgICAgICAgc3RhdGljIGJvb2wgZG9tT2JqZWN0SGFzSlNXcmFwcGVy
KHZvaWQqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0
RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2
ZW50TGlzdGVuZXIuY3BwCmluZGV4IDlhZTVjZDguLjNkMjgwMTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcApAQCAtNDks
NyArNDksNyBAQCBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpWOFdvcmtlckNvbnRleHRF
dmVudExpc3RlbmVyKFdvcmtlckNvbnRleHRFeGVjdXRpbwogVjhXb3JrZXJDb250ZXh0RXZlbnRM
aXN0ZW5lcjo6flY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIoKQogewogICAgIGlmIChtX3By
b3h5KQotICAgICAgICBtX3Byb3h5LT5SZW1vdmVFdmVudExpc3RlbmVyKHRoaXMpOworICAgICAg
ICBtX3Byb3h5LT5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMpOwogICAgIGRpc3Bvc2VMaXN0ZW5l
ck9iamVjdCgpOwogfQogCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgVjhXb3JrZXJDb250ZXh0RXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50LCBib29sIGlzV2luZG93RXZlbnQp
CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjb250ZXh0ID0gbV9wcm94eS0+R2V0Q29udGV4dCgpOworICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX3Byb3h5LT5jb250ZXh0KCk7CiAgICAgaWYgKGNv
bnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTczLDcgKzczLDcgQEAgdm9p
ZCBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQs
IGJvb2wgaXNXaW5kb3dFdmVudCkKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4
dCk7CiAKICAgICAvLyBHZXQgdGhlIFY4IHdyYXBwZXIgZm9yIHRoZSBldmVudCBvYmplY3QuCi0g
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OkV2ZW50VG9WOE9iamVjdChldmVudCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGpzRXZlbnQgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRFdmVudFRvVjhP
YmplY3QoZXZlbnQpOwogCiAgICAgaW52b2tlRXZlbnRIYW5kbGVyKGNvbnRleHQsIGV2ZW50LCBq
c0V2ZW50LCBpc1dpbmRvd0V2ZW50KTsKIH0KQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBWOFdvcmtl
ckNvbnRleHRFdmVudExpc3RlbmVyOjpyZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IGNvbnN0IFN0cmkKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX3Byb3h5LT5HZXRDb250ZXh0KCk7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IG1fcHJveHktPmNvbnRleHQoKTsK
ICAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MTQ4LDcgKzE0OCw3IEBAIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyOjpnZXRSZWNlaXZlck9iamVjdChFdmVudCogZXZlCiAgICAgICAgIHJldHVybiB2
ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpLT5HbG9iYWwoKTsKIAogICAgIEV2ZW50VGFyZ2V0KiB0
YXJnZXQgPSBldmVudC0+Y3VycmVudFRhcmdldCgpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RXZlbnRUYXJnZXRUb1Y4T2Jq
ZWN0KHRhcmdldCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KHRhcmdldCk7
CiAgICAgaWYgKHZhbHVlLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PigpOwogICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExpc3RlbmVyLmNwcAppbmRleCBi
ZWMyNWYxLi5jZTU2NTYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2Vy
Q29udGV4dE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhXb3JrZXJDb250ZXh0T2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTQzLDcgKzQzLDcgQEAg
c3RhdGljIHZvaWQgd2Vha09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFjayh2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+LCB2b2lkKiBwYXIKICAgICBWOFdvcmtlckNvbnRleHRPYmplY3RFdmVudExp
c3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4V29ya2VyQ29udGV4dE9iamVjdEV2ZW50
TGlzdGVuZXIqPihwYXJhbWV0ZXIpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSB3cmFwcGVyCi0gICAg
bGlzdGVuZXItPnByb3h5KCktPlJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXIpOworICAgIGxp
c3RlbmVyLT5wcm94eSgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGxpc3RlbmVyKTsKIAogICAgIGxp
c3RlbmVyLT5kaXNwb3NlTGlzdGVuZXJPYmplY3QoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAppbmRleCA4YTRjZDE3Li41
OTdlMWUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuY3BwCkBAIC0zNSw4ICszNSw4IEBACiAKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkuaCIKIAotI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlckNvbnRleHQu
aCIKICNpbmNsdWRlICJET01Db3JlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRGVkaWNhdGVkV29y
a2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgpAQCAtNjgsMTkgKzY4LDE5IEBAIHN0YXRp
YyB2b2lkIGhhbmRsZUNvbnNvbGVNZXNzYWdlKHY4OjpIYW5kbGU8djg6Ok1lc3NhZ2U+IG1lc3Nh
Z2UsIHY4OjpIYW5kbGU8djg6CiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94
eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKICAgICBpZiAoIXBy
b3h5KQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJD
b250ZXh0ID0gcHJveHktPndvcmtlckNvbnRleHQoKTsKICAgICBpZiAoIXdvcmtlckNvbnRleHQp
CiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gZXJy
b3JNZXNzYWdlU3RyaW5nID0gbWVzc2FnZS0+R2V0KCk7CiAgICAgQVNTRVJUKCFlcnJvck1lc3Nh
Z2VTdHJpbmcuSXNFbXB0eSgpKTsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gdG9XZWJDb3Jl
U3RyaW5nKGVycm9yTWVzc2FnZVN0cmluZyk7Ci0gICAgCisKICAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gcmVzb3VyY2VOYW1lID0gbWVzc2FnZS0+R2V0U2NyaXB0UmVzb3VyY2VOYW1lKCk7CiAg
ICAgYm9vbCB1c2VVUkwgPSAocmVzb3VyY2VOYW1lLklzRW1wdHkoKSB8fCAhcmVzb3VyY2VOYW1l
LT5Jc1N0cmluZygpKTsKICAgICBTdHJpbmcgcmVzb3VyY2VOYW1lU3RyaW5nID0gdXNlVVJMID8g
d29ya2VyQ29udGV4dC0+dXJsKCkgOiB0b1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1lKTsKLSAg
ICAKKwogICAgIHdvcmtlckNvbnRleHQtPmFkZE1lc3NhZ2UoQ29uc29sZURlc3RpbmF0aW9uLCBK
U01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgZXJyb3JN
ZXNzYWdlLCBtZXNzYWdlLT5HZXRMaW5lTnVtYmVyKCksIHJlc291cmNlTmFtZVN0cmluZyk7CiB9
CiAKQEAgLTk5LDggKzk5LDcgQEAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojp+V29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5KCkKIHZvaWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
OjpkaXNwb3NlKCkKIHsKICAgICAvLyBEaXNjb25uZWN0IGFsbCBldmVudCBsaXN0ZW5lcnMuCi0g
ICAgaWYgKG1fbGlzdGVuZXJzLmdldCgpKQotICAgIHsKKyAgICBpZiAobV9saXN0ZW5lcnMuZ2V0
KCkpIHsKICAgICAgICAgZm9yIChWOEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBpdGVyYXRv
cihtX2xpc3RlbmVycy0+YmVnaW4oKSk7IGl0ZXJhdG9yICE9IG1fbGlzdGVuZXJzLT5lbmQoKTsg
KytpdGVyYXRvcikKICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VjhXb3JrZXJDb250ZXh0RXZlbnRM
aXN0ZW5lcio+KCppdGVyYXRvciktPmRpc2Nvbm5lY3QoKTsKIApAQCAtMTY5LDcgKzE2OCw3IEBA
IHZvaWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkK
ICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGltcGxpY2l0UHJvdG9TdHJpbmcgPSB2ODo6U3Ry
aW5nOjpOZXcoIl9fcHJvdG9fXyIpOwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IEpTIG9iamVjdCBh
bmQgdXNlIGl0IGFzIHRoZSBwcm90b3R5cGUgZm9yIHRoZSBzaGFkb3cgZ2xvYmFsIG9iamVjdC4K
LSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd29ya2VyQ29udGV4dENvbnN0cnVjdG9yID0g
R2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpERURJQ0FURURXT1JLRVJDT05URVhUKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd29ya2VyQ29udGV4dENvbnN0cnVjdG9yID0gVjhE
T01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvckZvckNvbnRleHQoVjhDbGFzc0luZGV4OjpERURJQ0FU
RURXT1JLRVJDT05URVhULCBjb250ZXh0KTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4ganNX
b3JrZXJDb250ZXh0ID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKHdvcmtlckNvbnRleHRD
b25zdHJ1Y3Rvcik7CiAgICAgLy8gQmFpbCBvdXQgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCiAgICAg
aWYgKGpzV29ya2VyQ29udGV4dC5Jc0VtcHR5KCkpIHsKQEAgLTE5MCwyOSArMTg5LDEzIEBAIHZv
aWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAg
ICBtX2xpc3RlbmVycy5zZXQobmV3IFY4RXZlbnRMaXN0ZW5lckxpc3QoKSk7CiB9CiAKLXY4OjpM
b2NhbDx2ODo6RnVuY3Rpb24+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6R2V0Q29uc3Ry
dWN0b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUpCi17Ci0gICAgLy8gRW50ZXIg
dGhlIGNvbnRleHQgb2YgdGhlIHByb3h5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiBp
cwotICAgIC8vIGNvbnN0cnVjdGVkIGluIHRoZSBjb250ZXh0IGNvcnJlc3BvbmRpbmcgdG8gdGhp
cyBwcm94eS4KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUobV9jb250ZXh0KTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBsYXRlID0gVjhET01X
cmFwcGVyOjpnZXRUZW1wbGF0ZSh0eXBlKTsKLQotICAgIC8vIEdldHRpbmcgdGhlIGZ1bmN0aW9u
IG1pZ2h0IGZhaWwgaWYgd2UncmUgcnVubmluZyBvdXQgb2Ygc3RhY2sgb3IgbWVtb3J5LgotICAg
IHY4OjpUcnlDYXRjaCB0cnlDYXRjaDsKLSAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiB2YWx1
ZSA9IGZ1bmN0aW9uVGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7Ci0gICAgaWYgKHZhbHVlLklzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7Ci0KLSAgICBy
ZXR1cm4gdmFsdWU7Ci19Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUs
IHZvaWQqIGltcGwpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlw
ZSwgdm9pZCogaW1wbCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2ODo6TnVs
bCgpOwogCiAgICAgaWYgKHR5cGUgPT0gVjhDbGFzc0luZGV4OjpERURJQ0FURURXT1JLRVJDT05U
RVhUKQotICAgICAgICByZXR1cm4gV29ya2VyQ29udGV4dFRvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8
V29ya2VyQ29udGV4dCo+KGltcGwpKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRXb3JrZXJDb250
ZXh0VG9WOE9iamVjdChzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oaW1wbCkpOwogCiAgICAg
Ym9vbCBpc0FjdGl2ZURvbU9iamVjdCA9IGZhbHNlOwogICAgIHN3aXRjaCAodHlwZSkgewpAQCAt
Mjc5LDcgKzI2Miw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eTo6RXZlbnRUb1Y4T2JqZWN0KEV2ZW50KiBldmVudCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZlcnRFdmVudFRvVjhPYmplY3QoRXZlbnQq
IGV2ZW50KQogewogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwpA
QCAtMjk2LDcgKzI3OSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk6OkV2ZW50VG9WOE9iamVjdChFdmVudCogZXZlbnQpCiAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiByZXN1bHQgPSB0b1Y4KHR5cGUsIFY4Q2xhc3NJbmRleDo6RVZFTlQsIGV2
ZW50KTsKICAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkgewogICAgICAgICAvLyBJbnN0YW50aWF0
aW9uIGZhaWxlZC4gQXZvaWQgdXBkYXRpbmcgdGhlIERPTSBvYmplY3QgbWFwIGFuZCByZXR1cm4g
bnVsbCB3aGljaAotICAgICAgICAvLyBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgY2FsbGVycyBvZiB0
aGlzIGZ1bmN0aW9uIGluIGNhc2UgdGhlIGV2ZW50IGlzIE5VTEwuCisgICAgICAgIC8vIGlzIGFs
cmVhZHkgaGFuZGxlZCBieSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gaW4gY2FzZSB0aGUgZXZl
bnQgaXMgbnVsbC4KICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAgICAgfQogCkBAIC0zMDcs
NTMgKzI5MCw1MiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5OjpFdmVudFRvVjhPYmplY3QoRXZlbnQqIGV2ZW50KQogfQogCiAvLyBBIEpTIG9iamVj
dCBvZiB0eXBlIEV2ZW50VGFyZ2V0IGluIHRoZSB3b3JrZXIgY29udGV4dCBjYW4gb25seSBiZSBX
b3JrZXIgb3IgV29ya2VyQ29udGV4dC4KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OkV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCogdGFy
Z2V0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6
Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCogdGFyZ2V0KQogewogICAg
IGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIAogICAgIERlZGljYXRl
ZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSB0YXJnZXQtPnRvRGVkaWNhdGVkV29ya2Vy
Q29udGV4dCgpOwogICAgIGlmICh3b3JrZXJDb250ZXh0KQotICAgICAgICByZXR1cm4gV29ya2Vy
Q29udGV4dFRvVjhPYmplY3Qod29ya2VyQ29udGV4dCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0
V29ya2VyQ29udGV4dFRvVjhPYmplY3Qod29ya2VyQ29udGV4dCk7CiAKICAgICBXb3JrZXIqIHdv
cmtlciA9IHRhcmdldC0+dG9Xb3JrZXIoKTsKICAgICBpZiAod29ya2VyKQotICAgICAgICByZXR1
cm4gVG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldPUktFUiwgd29ya2VyKTsKKyAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V09SS0VSLCB3b3JrZXIpOwogCiAg
ICAgWE1MSHR0cFJlcXVlc3QqIHhociA9IHRhcmdldC0+dG9YTUxIdHRwUmVxdWVzdCgpOwogICAg
IGlmICh4aHIpCi0gICAgICAgIHJldHVybiBUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6WE1MSFRU
UFJFUVVFU1QsIHhocik7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OlhNTEhUVFBSRVFVRVNULCB4aHIpOwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogfQogCi12ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpXb3JrZXJDb250ZXh0VG9WOE9i
amVjdChXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFdvcmtlckNvbnRleHRUb1Y4T2Jq
ZWN0KFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQpCiB7CiAgICAgaWYgKCF3b3JrZXJDb250
ZXh0KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQgPSB3b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+cHJveHkoKS0+R2V0Q29u
dGV4dCgpOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB3b3JrZXJDb250
ZXh0LT5zY3JpcHQoKS0+cHJveHkoKS0+Y29udGV4dCgpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBnbG9iYWwgPSBjb250ZXh0LT5HbG9iYWwoKTsKICAgICBBU1NFUlQoIWdsb2JhbC5J
c0VtcHR5KCkpOwogICAgIHJldHVybiBnbG9iYWw7CiB9CiAKLXY4OjpMb2NhbDx2ODo6T2JqZWN0
PiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnRvVjgoVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIGRlc2NUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgY3B0clR5cGUsIHZv
aWQqIGltcGwpCit2ODo6TG9jYWw8djg6Ok9iamVjdD4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5Ojp0b1Y4KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkZXNjcmlwdG9yVHlwZSwgVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGNwdHJUeXBlLCB2b2lkKiBpbXBsKQogewogICAgIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uOwogICAgIFdvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eSogcHJveHkgPSByZXRyaWV2ZSgpOwogICAgIGlmIChwcm94eSkKLSAgICAgICAgZnVu
Y3Rpb24gPSBwcm94eS0+R2V0Q29uc3RydWN0b3IoZGVzY1R5cGUpOworICAgICAgICBmdW5jdGlv
biA9IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoZGVzY3JpcHRvclR5cGUsIHByb3h5LT53
b3JrZXJDb250ZXh0KCkpOwogICAgIGVsc2UKLSAgICAgICAgZnVuY3Rpb24gPSBWOERPTVdyYXBw
ZXI6OmdldFRlbXBsYXRlKGRlc2NUeXBlKS0+R2V0RnVuY3Rpb24oKTsKKyAgICAgICAgZnVuY3Rp
b24gPSBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKGRlc2NyaXB0b3JUeXBlKS0+R2V0RnVuY3Rp
b24oKTsKIAogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZSA9IFNhZmVBbGxvY2F0
aW9uOjpuZXdJbnN0YW5jZShmdW5jdGlvbik7Ci0gICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5KCkp
IHsKKyAgICBpZiAoIWluc3RhbmNlLklzRW1wdHkoKSkKICAgICAgICAgLy8gQXZvaWQgc2V0dGlu
ZyB0aGUgRE9NIHdyYXBwZXIgZm9yIGZhaWxlZCBhbGxvY2F0aW9ucy4KICAgICAgICAgVjhET01X
cmFwcGVyOjpzZXRET01XcmFwcGVyKGluc3RhbmNlLCBWOENsYXNzSW5kZXg6OlRvSW50KGNwdHJU
eXBlKSwgaW1wbCk7Ci0gICAgfQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIApAQCAtMzYyLDgg
KzM0NCw4IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpmb3JnZXRWOEV2ZW50
T2JqZWN0KEV2ZW50KiBldmVudCkKICAgICBpZiAoZ2V0RE9NT2JqZWN0TWFwKCkuY29udGFpbnMo
ZXZlbnQpKSB7CiAgICAgICAgIGdldERPTU9iamVjdE1hcCgpLmZvcmdldChldmVudCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSwgaW50IGJhc2VMaW5lLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqIHN0YXRl
KQpAQCAtNDU4LDcgKzQ0MCw3IEBAIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHk6OmZpbmRPckNyZWF0ZU9iamVjdEV2ZW50CiAgICAgcmV0dXJu
IGZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXJIZWxwZXIob2JqZWN0LCBpc0lubGluZSwgZmluZE9u
bHksIHRydWUpOwogfQogCi12b2lkIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6UmVtb3Zl
RXZlbnRMaXN0ZW5lcihWOEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQordm9pZCBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OnJlbW92ZUV2ZW50TGlzdGVuZXIoVjhFdmVudExpc3RlbmVyKiBs
aXN0ZW5lcikKIHsKICAgICBtX2xpc3RlbmVycy0+cmVtb3ZlKGxpc3RlbmVyKTsKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCmluZGV4
IDM4N2U0YzYuLmI4NTVmZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkuaApAQCAtMzQsMTAgKzM0LDEwIEBACiAKICNpZiBFTkFCTEUo
V09SS0VSUykKIAotI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNp
bmNsdWRlICJWOEV2ZW50TGlzdGVuZXJMaXN0LmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgorI2lu
Y2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtNjQsMTUgKzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkoV29ya2VyQ29udGV4dCopOwogICAgICAgICB+V29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KCk7CiAKLSAgICAgICAgLy8gRklYTUU6IGZvbGxvd2lu
ZyBmdW5jdGlvbiBzaG91bGQgaGF2ZSBjYW1lbENhc2VkIG5hbWVzIG9uY2UgVjggY29kZS1nZW5l
cmF0aW5nIHNjcmlwdCBpcyBtaWdyYXRlZC4KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0
PiBHZXRDb250ZXh0KCkgeyByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29u
dGV4dCk7IH0KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gR2V0Q29uc3RydWN0b3Io
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlKTsKLSAgICAgICAgdm9pZCBSZW1vdmVFdmVudExp
c3RlbmVyKFY4RXZlbnRMaXN0ZW5lciopOwotCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9p
ZCogaW1wbCk7Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gRXZlbnRUb1Y4
T2JqZWN0KEV2ZW50KiBldmVudCk7Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gRXZlbnRUYXJnZXRUb1Y4T2JqZWN0KEV2ZW50VGFyZ2V0KiB0YXJnZXQpOwotICAgICAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRUb1Y4T2JqZWN0KFdvcmtl
ckNvbnRleHQqIHdjKTsKKyAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKFY4RXZlbnRM
aXN0ZW5lciopOwogCiAgICAgICAgIC8vIEZpbmRzL2NyZWF0ZXMgZXZlbnQgbGlzdGVuZXIgd3Jh
cHBlcnMuCiAgICAgICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVF
dmVudExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IGxpc3RlbmVyLCBib29sIGlzSW5saW5l
LCBib29sIGZpbmRPbmx5KTsKQEAgLTg2LDEyICs3OCwyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIC8vIEV2YWx1YXRlIGEgc2NyaXB0IGZpbGUgaW4gdGhlIGN1cnJlbnQgZXhlY3V0
aW9uIGVudmlyb25tZW50LgogICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTdHJp
bmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lLCBXb3JrZXJD
b250ZXh0RXhlY3V0aW9uU3RhdGUqKTsKIAorICAgICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFu
ZGxlIG9mIHRoZSBjb250ZXh0LgorICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRl
eHQoKSB7IHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsgfQor
CiAgICAgICAgIC8vIFJldHVybnMgV29ya2VyQ29udGV4dCBvYmplY3QuCiAgICAgICAgIFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQoKSB7IHJldHVybiBtX3dvcmtlckNvbnRleHQ7IH0KIAog
ICAgICAgICAvLyBSZXR1cm5zIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSBvYmplY3Qgb2Yg
dGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29udGV4dC4gMCB3aWxsIGJlIHJldHVybmVkIGlmIHRo
ZSBjdXJyZW50IGV4ZWN1dGluZyBjb250ZXh0IGlzIG5vdCB0aGUgd29ya2VyIGNvbnRleHQuCiAg
ICAgICAgIHN0YXRpYyBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHJldHJpZXZlKCk7CiAK
KyAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGFsbCB0aGVzZSBjb252ZXJzaW9uIGZ1bmN0aW9u
cyBoZXJlIGJlZm9yZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkgaXMgcmVmYWN0b3ItZWQu
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUsIFBhc3NSZWZQdHI8VD4gaW1wbCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb1Y4T2JqZWN0KHR5cGUsIGltcGwuZ2V0KCkpOworICAgICAgICB9CisgICAgICAg
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlLCB2b2lkKiBpbXBsKTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KEV2ZW50Kik7CisgICAgICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChF
dmVudFRhcmdldCopOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZl
cnRXb3JrZXJDb250ZXh0VG9WOE9iamVjdChXb3JrZXJDb250ZXh0Kik7CisKICAgICBwcml2YXRl
OgogICAgICAgICB2b2lkIGluaXRWOElmTmVlZGVkKCk7CiAgICAgICAgIHZvaWQgaW5pdENvbnRl
eHRJZk5lZWRlZCgpOwpAQCAtMTAxLDcgKzEwNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgLy8gUnVuIGFuIGFscmVhZHkgY29tcGlsZWQgc2NyaXB0LgogICAgICAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiBydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6U2NyaXB0Pik7CiAKLSAgICAg
ICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB0b1Y4KFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZSBkZXNjVHlwZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGNwdHJUeXBlLCB2
b2lkKiBpbXBsKTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB0b1Y4KFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkZXNjcmlwdG9yVHlwZSwgVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlIGNwdHJUeXBlLCB2b2lkKiBpbXBsKTsKIAogICAgICAgICBzdGF0aWMgYm9v
bCBmb3JnZXRWOEV2ZW50T2JqZWN0KEV2ZW50Kik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCmluZGV4IDllNzlmYTkuLjFl
M2UxMjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29u
dGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcApAQCAtMzIsMTAgKzMyLDggQEAKIAogI2lmIEVOQUJMRShXT1JLRVJT
KQogCi0jaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCi0KLSNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCkBAIC00Myw2ICs0MSw3IEBA
CiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUw
LDcgKzQ5LDcgQEAgQUNDRVNTT1JfR0VUVEVSKFdvcmtlckNvbnRleHRTZWxmKQogewogICAgIElO
Q19TVEFUUyhMIkRPTS5Xb3JrZXJDb250ZXh0LnNlbGYuX2dldCIpOwogICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRp
dmU8V29ya2VyQ29udGV4dD4oaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIFdvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eTo6V29ya2VyQ29udGV4dFRvVjhPYmplY3Qod29ya2VyQ29udGV4dCk7
CisgICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFdvcmtlckNv
bnRleHRUb1Y4T2JqZWN0KHdvcmtlckNvbnRleHQpOwogfQogCiBBQ0NFU1NPUl9HRVRURVIoV29y
a2VyQ29udGV4dE9uZXJyb3IpCkBAIC0xNjAsNyArMTU5LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KFdvcmtlckNvbnRleHRTZXRUaW1lb3V0KQogICAgIHJldHVybiBTZXRUaW1lb3V0T3JJbnRlcnZh
bChhcmdzLCB0cnVlKTsKIH0KIAotQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNvbnRleHRTZXRJ
bnRlcnZhbCkgeworQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNvbnRleHRTZXRJbnRlcnZhbCkK
K3sKICAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyQ29udGV4dC5zZXRJbnRlcnZhbCgpIik7CiAg
ICAgcmV0dXJuIFNldFRpbWVvdXRPckludGVydmFsKGFyZ3MsIGZhbHNlKTsKIH0K
</data>
<flag name="review"
          id="18379"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>