<?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>54455</bug_id>
          
          <creation_ts>2011-02-15 06:41:40 -0800</creation_ts>
          <short_desc>Web Inspector: move Database and DOMStorage related things from InspectorAgent</short_desc>
          <delta_ts>2011-02-16 03:22:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</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="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>351222</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-15 06:41:40 -0800</bug_when>
    <thetext>Some set of instrumentation calls should work even if we have no InspectorFrontend instance and corresponding agents.
At the moment we are using InspectorAgent instance for such calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351231</commentid>
    <comment_count>1</comment_count>
      <attachid>82447</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-15 06:54:28 -0800</bug_when>
    <thetext>Created attachment 82447
[patch] initial version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351249</commentid>
    <comment_count>2</comment_count>
      <attachid>82447</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-15 07:29:55 -0800</bug_when>
    <thetext>Comment on attachment 82447
[patch] initial version

View in context: https://bugs.webkit.org/attachment.cgi?id=82447&amp;action=review

&gt; Source/WebCore/ChangeLog:5
&gt; +        Web Inspector: move Database and DOMStorage related things from InspectorAgent to thecorresponding agents.

thecorresponding -&gt;  the corresponding

&gt; Source/WebCore/inspector/InspectorAgent.cpp:142
&gt; +    , m_databaseAgentResources(InspectorDatabaseAgent::createOfflineStorage())

Consider renaming createOfflineStorage to createStorage

&gt; Source/WebCore/inspector/InspectorAgent.cpp:463
&gt; +    m_databaseAgentResources-&gt;pushDataCollectedOffline(m_frontend);

pushDataCollectedOffline should be a method on the database agent.

&gt; Source/WebCore/inspector/InspectorAgent.cpp:466
&gt; +    m_domStorageAgentResources-&gt;pushDataCollectedOffline(m_frontend);

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351284</commentid>
    <comment_count>3</comment_count>
      <attachid>82447</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-15 08:25:17 -0800</bug_when>
    <thetext>Comment on attachment 82447
[patch] initial version

View in context: https://bugs.webkit.org/attachment.cgi?id=82447&amp;action=review

&gt;&gt; Source/WebCore/inspector/InspectorAgent.cpp:142
&gt;&gt; +    , m_databaseAgentResources(InspectorDatabaseAgent::createOfflineStorage())
&gt; 
&gt; Consider renaming createOfflineStorage to createStorage

This does not really make the agents modular.

&gt; Source/WebCore/inspector/InspectorAgent.cpp:393
&gt; +    m_databaseAgent = InspectorDatabaseAgent::create(databaseAgentResources(), m_frontend);

Pass inspectorAgent into it instead.

&gt;&gt; Source/WebCore/inspector/InspectorAgent.cpp:463
&gt;&gt; +    m_databaseAgentResources-&gt;pushDataCollectedOffline(m_frontend);
&gt; 
&gt; pushDataCollectedOffline should be a method on the database agent.

This should be done upon agent instantiation, from within agent.

&gt;&gt; Source/WebCore/inspector/InspectorAgent.cpp:466
&gt;&gt; +    m_domStorageAgentResources-&gt;pushDataCollectedOffline(m_frontend);
&gt; 
&gt; Same here.

ditto.

&gt; Source/WebCore/inspector/InspectorAgent.h:105
&gt; +    virtual void pushDataCollectedOffline(InspectorFrontend*) = 0;

I think adding pushToFrontend method to the storage does not make much sense. Storage should be simple, it should store.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351391</commentid>
    <comment_count>4</comment_count>
      <attachid>82482</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-15 10:31:10 -0800</bug_when>
    <thetext>Created attachment 82482
[patch] second version

(In reply to comment #2)
&gt; (From update of attachment 82447 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82447&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:5
&gt; &gt; +        Web Inspector: move Database and DOMStorage related things from InspectorAgent to thecorresponding agents.
&gt; 
&gt; thecorresponding -&gt;  the corresponding

done

&gt; &gt; Source/WebCore/inspector/InspectorAgent.cpp:142
&gt; &gt; +    , m_databaseAgentResources(InspectorDatabaseAgent::createOfflineStorage())
&gt; 
&gt; Consider renaming createOfflineStorage to createStorage

done


&gt; &gt; Source/WebCore/inspector/InspectorAgent.cpp:463
&gt; &gt; +    m_databaseAgentResources-&gt;pushDataCollectedOffline(m_frontend);
&gt; 
&gt; pushDataCollectedOffline should be a method on the database agent.

This call is moved into ctor of InspectorDatabaseAgent.

&gt; &gt; Source/WebCore/inspector/InspectorAgent.cpp:466
&gt; &gt; +    m_domStorageAgentResources-&gt;pushDataCollectedOffline(m_frontend);
&gt; 
&gt; Same here.


This call is moved into ctor of InspectorDOMStorageAgent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351968</commentid>
    <comment_count>5</comment_count>
      <attachid>82482</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-16 03:21:49 -0800</bug_when>
    <thetext>Comment on attachment 82482
[patch] second version

Clearing flags on attachment: 82482

Committed r78692: &lt;http://trac.webkit.org/changeset/78692&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351969</commentid>
    <comment_count>6</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-16 03:22:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82447</attachid>
            <date>2011-02-15 06:54:28 -0800</date>
            <delta_ts>2011-02-15 10:31:10 -0800</delta_ts>
            <desc>[patch] initial version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24065</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YzRhNTQxLi42NmVhM2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTEtMDItMTUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IG1vdmUgRGF0YWJhc2UgYW5kIERPTVN0b3JhZ2UgcmVsYXRlZCB0aGluZ3MgZnJvbSBJ
bnNwZWN0b3JBZ2VudCB0byB0aGVjb3JyZXNwb25kaW5nIGFnZW50cy4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0NTUKKworICAgICAgICBTb21l
IHNldCBvZiBpbnN0cnVtZW50YXRpb24gY2FsbHMgc2hvdWxkIHdvcmsgZXZlbiBpZiB3ZSBoYXZl
IG5vIEluc3BlY3RvckZyb250ZW5kIGluc3RhbmNlIGFuZCBjb3JyZXNwb25kaW5nIGFnZW50cy4K
KyAgICAgICAgQXQgdGhlIG1vbWVudCB3ZSBhcmUgdXNpbmcgSW5zcGVjdG9yQWdlbnQgaW5zdGFu
Y2UgZm9yIHN1Y2ggY2FsbHMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpjcmVhdGVGcm9udGVuZExpZmV0aW1l
QWdlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpwdXNoRGF0YUNvbGxl
Y3RlZE9mZmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZENvbW1p
dExvYWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yT2ZmbGluZVJlc291cmNlc0Jhc2U6On5JbnNwZWN0b3JPZmZsaW5l
UmVzb3VyY2VzQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPZmZsaW5lUmVzb3Vy
Y2VzQmFzZTo6SW5zcGVjdG9yT2ZmbGluZVJlc291cmNlc0Jhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6OmRhdGFiYXNlQWdlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRvbVN0b3JhZ2VBZ2VudFJlc291cmNlcyk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OlJlc291cmNlczo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpSZXNvdXJjZXM6OnB1c2hEYXRh
Q29sbGVjdGVkT2ZmbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6On5JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjcmVhdGVPZmZsaW5lU3RvcmFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNlbGVjdERP
TVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojpn
ZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50
OjpSZXNvdXJjZXM6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNl
QWdlbnQ6OlJlc291cmNlczo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpZE9wZW5EYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmNyZWF0ZU9mZmxp
bmVTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRh
dGFiYXNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
c2VsZWN0RGF0YWJhc2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFn
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjcmVhdGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2VJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkVXNl
RE9NU3RvcmFnZUltcGwpOgorCiAyMDExLTAyLTE0ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxv
dkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDZhNDRh
NDEuLjBjMWU1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50
LmNwcApAQCAtMTA2LDE0ICsxMDYsMTEgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZS5oPgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1ZGUgIkRhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIgogI2VuZGlmCiAKICNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgiCi0j
aW5jbHVkZSAiU3RvcmFnZS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkBAIC0xNDEsNiArMTM4LDEyIEBA
IEluc3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudChQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGll
bnQqIGNsaWVudCkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZnJvbnRlbmQoMCkK
ICAgICAsIG1fY3NzQWdlbnQobmV3IEluc3BlY3RvckNTU0FnZW50KCkpCisjaWYgRU5BQkxFKERB
VEFCQVNFKQorICAgICwgbV9kYXRhYmFzZUFnZW50UmVzb3VyY2VzKEluc3BlY3RvckRhdGFiYXNl
QWdlbnQ6OmNyZWF0ZU9mZmxpbmVTdG9yYWdlKCkpCisjZW5kaWYKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCisgICAgLCBtX2RvbVN0b3JhZ2VBZ2VudFJlc291cmNlcyhJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmNyZWF0ZU9mZmxpbmVTdG9yYWdlKCkpCisjZW5kaWYKICAgICAsIG1fc3RhdGUo
bmV3IEluc3BlY3RvclN0YXRlKGNsaWVudCkpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJ
bmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fY29uc29sZUFnZW50KG5l
dyBJbnNwZWN0b3JDb25zb2xlQWdlbnQodGhpcykpCkBAIC0zODcsMTEgKzM5MCwxMSBAQCB2b2lk
IEluc3BlY3RvckFnZW50OjpjcmVhdGVGcm9udGVuZExpZmV0aW1lQWdlbnRzKCkKICAgICBtX3J1
bnRpbWVBZ2VudCA9IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y3JlYXRlKG1faW5qZWN0ZWRTY3Jp
cHRIb3N0LmdldCgpKTsKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBtX2RhdGFiYXNlQWdl
bnQgPSBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjcmVhdGUoJm1fZGF0YWJhc2VSZXNvdXJjZXMs
IG1fZnJvbnRlbmQpOworICAgIG1fZGF0YWJhc2VBZ2VudCA9IEluc3BlY3RvckRhdGFiYXNlQWdl
bnQ6OmNyZWF0ZShkYXRhYmFzZUFnZW50UmVzb3VyY2VzKCksIG1fZnJvbnRlbmQpOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgbV9kb21TdG9yYWdlQWdlbnQgPSBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNyZWF0ZSgmbV9kb21TdG9yYWdlUmVzb3VyY2VzLCBtX2Zy
b250ZW5kKTsKKyAgICBtX2RvbVN0b3JhZ2VBZ2VudCA9IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6Y3JlYXRlKGRvbVN0b3JhZ2VBZ2VudFJlc291cmNlcygpLCBtX2Zyb250ZW5kKTsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKQEAgLTQ1NywxNCArNDYw
LDEwIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgpCiAg
ICAgbV9kb21BZ2VudC0+c2V0RG9jdW1lbnQobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+
ZG9jdW1lbnQoKSk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgRGF0YWJhc2VSZXNvdXJj
ZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7
Ci0gICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNl
UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsgKytpdCkKLSAgICAgICAgaXQt
PnNlY29uZC0+YmluZChtX2Zyb250ZW5kKTsKKyAgICBtX2RhdGFiYXNlQWdlbnRSZXNvdXJjZXMt
PnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZShtX2Zyb250ZW5kKTsKICNlbmRpZgogI2lmIEVOQUJM
RShET01fU1RPUkFHRSkKLSAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21T
dG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOwotICAgIGZvciAoRE9NU3Rv
cmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+Ymlu
ZChtX2Zyb250ZW5kKTsKKyAgICBtX2RvbVN0b3JhZ2VBZ2VudFJlc291cmNlcy0+cHVzaERhdGFD
b2xsZWN0ZWRPZmZsaW5lKG1fZnJvbnRlbmQpOwogI2VuZGlmCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpICYmIEVOQUJMRShXT1JLRVJTKQogICAgIFdvcmtlcnNNYXA6Oml0ZXJhdG9y
IHdvcmtlcnNFbmQgPSBtX3dvcmtlcnMuZW5kKCk7CkBAIC01NDQsMTAgKzU0MywxMCBAQCB2b2lk
IEluc3BlY3RvckFnZW50OjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAg
ICAgICAgIG1fd29ya2Vycy5jbGVhcigpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERBVEFCQVNFKQot
ICAgICAgICBtX2RhdGFiYXNlUmVzb3VyY2VzLmNsZWFyKCk7CisgICAgICAgIG1fZGF0YWJhc2VB
Z2VudFJlc291cmNlcy0+Y2xlYXIoKTsKICNlbmRpZgogI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
LSAgICAgICAgbV9kb21TdG9yYWdlUmVzb3VyY2VzLmNsZWFyKCk7CisgICAgICAgIG1fZG9tU3Rv
cmFnZUFnZW50UmVzb3VyY2VzLT5jbGVhcigpOwogI2VuZGlmCiAKICAgICAgICAgaWYgKG1fZnJv
bnRlbmQpCkBAIC02ODMsMjIgKzY4Miw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZERlc3Ry
b3lXb3JrZXIoaW50cHRyX3QgaWQpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCiAKLSNp
ZiBFTkFCTEUoREFUQUJBU0UpCi12b2lkIEluc3BlY3RvckFnZW50OjpkaWRPcGVuRGF0YWJhc2Uo
UGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICBpZiAoIWVuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2U+IHJlc291cmNlID0gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTo6Y3JlYXRlKGRhdGFi
YXNlLCBkb21haW4sIG5hbWUsIHZlcnNpb24pOwotCi0gICAgbV9kYXRhYmFzZVJlc291cmNlcy5z
ZXQocmVzb3VyY2UtPmlkKCksIHJlc291cmNlKTsKLQotICAgIC8vIFJlc291cmNlcyBhcmUgb25s
eSBib3VuZCB3aGlsZSB2aXNpYmxlLgotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICByZXNv
dXJjZS0+YmluZChtX2Zyb250ZW5kKTsKLX0KLSNlbmRpZgotCiB2b2lkIEluc3BlY3RvckFnZW50
OjpnZXRDb29raWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNvb2tpZXMsIFdURjo6U3RyaW5n
KiBjb29raWVzU3RyaW5nKQogewogICAgIC8vIElmIHdlIGNhbiBnZXQgcmF3IGNvb2tpZXMuCkBA
IC03ODMsMjggKzc2Niw2IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRlbGV0ZUNvb2tpZShjb25z
dCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluCiAgICAgfQogfQogCi0j
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkVXNlRE9NU3Rv
cmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1l
KiBmcmFtZSkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3Rv
cmFnZVJlc291cmNlcy5lbmQoKTsKLSAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3Jh
Z2VFbmQ7ICsraXQpCi0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1NhbWVIb3N0QW5kVHlwZShm
cmFtZSwgaXNMb2NhbFN0b3JhZ2UpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRy
PFN0b3JhZ2U+IGRvbVN0b3JhZ2UgPSBTdG9yYWdlOjpjcmVhdGUoZnJhbWUsIHN0b3JhZ2VBcmVh
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiByZXNvdXJjZSA9IElu
c3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6Y3JlYXRlKGRvbVN0b3JhZ2UuZ2V0KCksIGlzTG9j
YWxTdG9yYWdlLCBmcmFtZSk7Ci0KLSAgICBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuc2V0KHJlc291
cmNlLT5pZCgpLCByZXNvdXJjZSk7Ci0KLSAgICAvLyBSZXNvdXJjZXMgYXJlIG9ubHkgYm91bmQg
d2hpbGUgdmlzaWJsZS4KLSAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgcmVzb3VyY2UtPmJp
bmQobV9mcm9udGVuZCk7Ci19Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaAppbmRleCBlYWRiOTg4
Li45OTlkN2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaApA
QCAtOTksNiArOTksMTcgQEAgY2xhc3MgV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdDsKIGNsYXNz
IFdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlOwogI2VuZGlmCiAKK2NsYXNzIEluc3BlY3Rvck9m
ZmxpbmVSZXNvdXJjZXNCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JP
ZmZsaW5lUmVzb3VyY2VzQmFzZSk7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHB1c2hEYXRh
Q29sbGVjdGVkT2ZmbGluZShJbnNwZWN0b3JGcm9udGVuZCopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXIoKSA9IDA7CisgICAgdmlydHVhbCB+SW5zcGVjdG9yT2ZmbGluZVJlc291cmNlc0Jh
c2UoKSB7fQorCitwcm90ZWN0ZWQ6CisgICAgSW5zcGVjdG9yT2ZmbGluZVJlc291cmNlc0Jhc2Uo
KSB7fQorfTsKKwogY2xhc3MgSW5zcGVjdG9yQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEluc3BlY3RvckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTE0
NSw5ICsxNTYsMTEgQEAgcHVibGljOgogICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVs
aW5lQWdlbnQoKSB7IHJldHVybiBtX3RpbWVsaW5lQWdlbnQuZ2V0KCk7IH0KICNpZiBFTkFCTEUo
REFUQUJBU0UpCiAgICAgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogZGF0YWJhc2VBZ2VudCgpIHsg
cmV0dXJuIG1fZGF0YWJhc2VBZ2VudC5nZXQoKTsgfQorICAgIEluc3BlY3Rvck9mZmxpbmVSZXNv
dXJjZXNCYXNlKiBkYXRhYmFzZUFnZW50UmVzb3VyY2VzKCkgeyByZXR1cm4gbV9kYXRhYmFzZUFn
ZW50UmVzb3VyY2VzLmdldCgpOyB9CiAjZW5kaWYKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAg
ICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBkb21TdG9yYWdlQWdlbnQoKSB7IHJldHVybiBt
X2RvbVN0b3JhZ2VBZ2VudC5nZXQoKTsgfQorICAgIEluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNC
YXNlKiBkb21TdG9yYWdlQWdlbnRSZXNvdXJjZXMoKSB7IHJldHVybiBtX2RvbVN0b3JhZ2VBZ2Vu
dFJlc291cmNlcy5nZXQoKTsgfQogI2VuZGlmCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiAgICAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQqIGJyb3dzZXJEZWJ1Z2dlckFn
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9icm93c2VyRGVidWdnZXJBZ2VudC5nZXQoKTsgfQpAQCAt
MTgzLDEwICsxOTYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludHB0
cl90KTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIHZvaWQgZGlkT3BlbkRh
dGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+LCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotI2VuZGlmCi0KICNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCiAgICAgdm9pZCBkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiwg
Ym9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqKTsKICNlbmRpZgpAQCAtMjc1LDEwICsyODQsMTIg
QEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBPd25QdHI8SW5zcGVjdG9y
RGF0YWJhc2VBZ2VudD4gbV9kYXRhYmFzZUFnZW50OworICAgIE93blB0cjxJbnNwZWN0b3JPZmZs
aW5lUmVzb3VyY2VzQmFzZT4gbV9kYXRhYmFzZUFnZW50UmVzb3VyY2VzOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgT3duUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dD4gbV9kb21TdG9yYWdlQWdlbnQ7CisgICAgT3duUHRyPEluc3BlY3Rvck9mZmxpbmVSZXNvdXJj
ZXNCYXNlPiBtX2RvbVN0b3JhZ2VBZ2VudFJlc291cmNlczsKICNlbmRpZgogCiAgICAgT3duUHRy
PEluc3BlY3RvclRpbWVsaW5lQWdlbnQ+IG1fdGltZWxpbmVBZ2VudDsKQEAgLTI5MywxNSArMzA0
LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2VBZ2VudD4gbV9yZXNv
dXJjZUFnZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JSdW50aW1lQWdlbnQ+IG1fcnVudGltZUFn
ZW50OwogCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJl
ZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+IERhdGFiYXNlUmVzb3VyY2VzTWFwOwot
ICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwIG1fZGF0YWJhc2VSZXNvdXJjZXM7Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPElu
c3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01TdG9yYWdlUmVzb3VyY2VzTWFwOwotICAg
IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXAgbV9kb21TdG9yYWdlUmVzb3VyY2VzOwotI2VuZGlmCi0K
ICAgICBSZWZQdHI8SW5qZWN0ZWRTY3JpcHRIb3N0PiBtX2luamVjdGVkU2NyaXB0SG9zdDsKICAg
ICBPd25QdHI8SW5zcGVjdG9yQ29uc29sZUFnZW50PiBtX2NvbnNvbGVBZ2VudDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNw
cAppbmRleCAwOTE5YjY0Li42MDg1ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtMzYsMjMgKzM2LDU0IEBA
CiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2UuaCIK
KyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgogCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3R5cGVkZWYg
SGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+ID4gRE9NU3Rv
cmFnZVJlc291cmNlc01hcDsKKworY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpSZXNv
dXJjZXMgOiBwdWJsaWMgSW5zcGVjdG9yT2ZmbGluZVJlc291cmNlc0Jhc2UgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoSW5zcGVjdG9yRnJvbnRl
bmQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSB7IG1fbWFwLmNsZWFyKCk7IH0KKworICAg
IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXAgbV9tYXA7Cit9OworCit2b2lkIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6UmVzb3VyY2VzOjpwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoSW5zcGVjdG9y
RnJvbnRlbmQqIGZyb250ZW5kKQoreworICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJh
dG9yIHJlc291cmNlc0VuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7
ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPmJpbmQoZnJvbnRlbmQpOworfQorCitJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChJbnNwZWN0b3JPZmZs
aW5lUmVzb3VyY2VzQmFzZSogZG9tU3RvcmFnZUFnZW50UmVzb3VyY2VzLCBJbnNwZWN0b3JGcm9u
dGVuZCogZnJvbnRlbmQpCisgICAgOiBtX3Jlc291cmNlcyhzdGF0aWNfY2FzdDxJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OlJlc291cmNlcyo+KGRvbVN0b3JhZ2VBZ2VudFJlc291cmNlcykpCisg
ICAgLCBtX2Zyb250ZW5kKGZyb250ZW5kKQoreworICAgIEFTU0VSVChkb21TdG9yYWdlQWdlbnRS
ZXNvdXJjZXMpOworfQorCiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6On5JbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQoKQogewotICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRv
bVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMtPmVuZCgpOwotICAgIGZvciAoRE9N
U3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMt
PmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpCisgICAgRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLT5tX21hcC5lbmQo
KTsKKyAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNv
dXJjZXMtPm1fbWFwLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpCiAgICAgICAg
IGl0LT5zZWNvbmQtPnVuYmluZCgpOwogfQogCitQYXNzT3duUHRyPEluc3BlY3Rvck9mZmxpbmVS
ZXNvdXJjZXNCYXNlPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNyZWF0ZU9mZmxpbmVTdG9y
YWdlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlc291cmNlcygpKTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VFbnRyaWVzKGxvbmcgc3Rv
cmFnZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBlbnRyaWVzKQogewogICAgIEluc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJlc291
cmNlRm9ySWQoc3RvcmFnZUlkKTsKQEAgLTk5LDggKzEzMCw4IEBAIHZvaWQgSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYm9vbCBpc0xvY2FsU3RvcmFnZSA9IChmcmFtZS0+ZG9t
V2luZG93KCktPmxvY2FsU3RvcmFnZShlYykgPT0gc3RvcmFnZSAmJiAhZWMpOwogICAgIGxvbmcg
c3RvcmFnZVJlc291cmNlSWQgPSAwOwotICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJh
dG9yIGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMtPmVuZCgpOwotICAgIGZv
ciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNv
dXJjZXMtPmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpIHsKKyAgICBET01TdG9y
YWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJjZXMtPm1f
bWFwLmVuZCgpOworICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQg
PSBtX3Jlc291cmNlcy0+bV9tYXAuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkg
ewogICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9j
YWxTdG9yYWdlKSkgewogICAgICAgICAgICAgc3RvcmFnZVJlc291cmNlSWQgPSBpdC0+Zmlyc3Q7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTExMCwyMCArMTQxLDM1IEBAIHZvaWQgSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50OjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpCiAgICAg
ICAgIG1fZnJvbnRlbmQtPnNlbGVjdERPTVN0b3JhZ2Uoc3RvcmFnZVJlc291cmNlSWQpOwogfQog
Ci1JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChET01T
dG9yYWdlUmVzb3VyY2VzTWFwKiBkb21TdG9yYWdlUmVzb3VyY2VzLCBJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCi0gICAgOiBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMoZG9tU3RvcmFnZVJlc291
cmNlcykKLSAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCi17Ci19Ci0KIEluc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlUmVz
b3VyY2VGb3JJZChsb25nIHN0b3JhZ2VJZCkKIHsKLSAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFw
OjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy0+ZmluZChzdG9yYWdlSWQpOwot
ICAgIGlmIChpdCA9PSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMtPmVuZCgpKQorICAgIERPTVN0b3Jh
Z2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMtPm1fbWFwLmZpbmQoc3Rv
cmFnZUlkKTsKKyAgICBpZiAoaXQgPT0gbV9yZXNvdXJjZXMtPm1fbWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKIH0KIAordm9pZCBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50LCBTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3Jh
Z2UsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFJlc291cmNlcyogcmVzb3VyY2VzID0gc3RhdGljX2Nh
c3Q8UmVzb3VyY2VzKj4oaW5zcGVjdG9yQWdlbnQtPmRvbVN0b3JhZ2VBZ2VudFJlc291cmNlcygp
KTsKKyAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0g
cmVzb3VyY2VzLT5tX21hcC5lbmQoKTsKKyAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6
Oml0ZXJhdG9yIGl0ID0gcmVzb3VyY2VzLT5tX21hcC5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdl
RW5kOyArK2l0KQorICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5cGUoZnJh
bWUsIGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxT
dG9yYWdlPiBkb21TdG9yYWdlID0gU3RvcmFnZTo6Y3JlYXRlKGZyYW1lLCBzdG9yYWdlQXJlYSk7
CisgICAgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2U6OmNyZWF0ZShkb21TdG9yYWdlLmdldCgpLCBpc0xvY2Fs
U3RvcmFnZSwgZnJhbWUpOworCisgICAgcmVzb3VyY2VzLT5tX21hcC5zZXQocmVzb3VyY2UtPmlk
KCksIHJlc291cmNlKTsKKworICAgIC8vIFJlc291cmNlcyBhcmUgb25seSBib3VuZCB3aGlsZSB2
aXNpYmxlLgorICAgIGlmIChpbnNwZWN0b3JBZ2VudC0+ZnJvbnRlbmQoKSkKKyAgICAgICAgcmVz
b3VyY2UtPmJpbmQoaW5zcGVjdG9yQWdlbnQtPmZyb250ZW5kKCkpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoRE9N
X1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudC5oCmluZGV4IDk4N2M1MzAuLjk1YWQ4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKQEAgLTM1LDE5ICsz
NSwyNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZyYW1lOworY2xhc3MgSW5z
cGVjdG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOworY2xhc3MgSW5zcGVjdG9y
T2ZmbGluZVJlc291cmNlc0Jhc2U7CiBjbGFzcyBTdG9yYWdlOworY2xhc3MgU3RvcmFnZUFyZWE7
CiAKIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01T
dG9yYWdlUmVzb3VyY2VzTWFwOworICAgIGNsYXNzIFJlc291cmNlczsKIAotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudD4gY3JlYXRlKERPTVN0b3JhZ2VSZXNv
dXJjZXNNYXAqIGRvbVN0b3JhZ2VSZXNvdXJjZXMsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVu
ZCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ+IGNyZWF0
ZShJbnNwZWN0b3JPZmZsaW5lUmVzb3VyY2VzQmFzZSogZG9tU3RvcmFnZVJlc291cmNlcywgSW5z
cGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoZG9tU3RvcmFnZVJlc291cmNlcywgZnJvbnRl
bmQpKTsKICAgICB9CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yT2ZmbGluZVJlc291
cmNlc0Jhc2U+IGNyZWF0ZU9mZmxpbmVTdG9yYWdlKCk7CiAKICAgICB2aXJ0dWFsIH5JbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQoKTsKIApAQCAtNTksMTIgKzY0LDE1IEBAIHB1YmxpYzoKICAgICAv
LyBDYWxsZWQgZnJvbSB0aGUgaW5qZWN0ZWQgc2NyaXB0LgogICAgIHZvaWQgc2VsZWN0RE9NU3Rv
cmFnZShTdG9yYWdlKiBzdG9yYWdlKTsKIAorICAgIC8vIENhbGxlZCBmcm9tIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbgorICAgIHN0YXRpYyB2b2lkIGRpZFVzZURPTVN0b3JhZ2UoSW5zcGVjdG9y
QWdlbnQqLCBTdG9yYWdlQXJlYSosIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKik7CisKIHBy
aXZhdGU6Ci0gICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KERPTVN0b3JhZ2VSZXNvdXJjZXNN
YXAqLCBJbnNwZWN0b3JGcm9udGVuZCopOworICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChJ
bnNwZWN0b3JPZmZsaW5lUmVzb3VyY2VzQmFzZSosIEluc3BlY3RvckZyb250ZW5kKik7CiAKICAg
ICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklk
KGxvbmcgc3RvcmFnZUlkKTsKIAotICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXAqIG1fZG9tU3Rv
cmFnZVJlc291cmNlczsKKyAgICBSZXNvdXJjZXMqIG1fcmVzb3VyY2VzOwogICAgIEluc3BlY3Rv
ckZyb250ZW5kKiBtX2Zyb250ZW5kOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IDIyMWJkZjI3Li5mNjc5YTg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwCkBAIC0yMTgsMTEgKzIxOCw1NiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFj
ZQogCit0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZT4gPiBEYXRhYmFzZVJlc291cmNlc01hcDsKKworY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dDo6UmVzb3VyY2VzIDogcHVibGljIEluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNCYXNlIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKEluc3BlY3Rv
ckZyb250ZW5kKik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgeyBtX21hcC5jbGVhcigpOyB9
CisKKyAgICBEYXRhYmFzZVJlc291cmNlc01hcCBtX21hcDsKK307CisKK3ZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudDo6UmVzb3VyY2VzOjpwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoSW5zcGVj
dG9yRnJvbnRlbmQqIGZyb250ZW5kKQoreworICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVy
YXRvciBkYXRhYmFzZXNFbmQgPSBtX21hcC5lbmQoKTsKKyAgICBmb3IgKERhdGFiYXNlUmVzb3Vy
Y2VzTWFwOjppdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsg
KytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+YmluZChmcm9udGVuZCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlkT3BlbkRhdGFiYXNlKEluc3BlY3RvckFnZW50KiBpbnNw
ZWN0b3JBZ2VudCwgUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYg
ZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAg
ICBpZiAoIWluc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiByZXNvdXJjZSA9IEluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2U6OmNyZWF0ZShkYXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKTsK
KworICAgIFJlc291cmNlcyogcmVzb3VyY2VzID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VzKj4oaW5z
cGVjdG9yQWdlbnQtPmRhdGFiYXNlQWdlbnRSZXNvdXJjZXMoKSk7CisgICAgQVNTRVJUKHJlc291
cmNlcyk7CisgICAgcmVzb3VyY2VzLT5tX21hcC5zZXQocmVzb3VyY2UtPmlkKCksIHJlc291cmNl
KTsKKworICAgIC8vIFJlc291cmNlcyBhcmUgb25seSBib3VuZCB3aGlsZSB2aXNpYmxlLgorICAg
IGlmIChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQgPSBpbnNwZWN0b3JBZ2VudC0+ZnJvbnRl
bmQoKSkKKyAgICAgICAgcmVzb3VyY2UtPmJpbmQoZnJvbnRlbmQpOworfQorCitJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50KEluc3BlY3Rvck9mZmxpbmVSZXNv
dXJjZXNCYXNlKiByZXNvdXJjZXMsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKKyAgICA6
IG1fcmVzb3VyY2VzKHN0YXRpY19jYXN0PFJlc291cmNlcyo+KHJlc291cmNlcykpCisgICAgLCBt
X2Zyb250ZW5kUHJvdmlkZXIoRnJvbnRlbmRQcm92aWRlcjo6Y3JlYXRlKGZyb250ZW5kKSkKK3sK
KyAgICBBU1NFUlQocmVzb3VyY2VzKTsKK30KKwogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6fklu
c3BlY3RvckRhdGFiYXNlQWdlbnQoKQogewogICAgIG1fZnJvbnRlbmRQcm92aWRlci0+Y2xlYXJG
cm9udGVuZCgpOwogfQogCitQYXNzT3duUHRyPEluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNCYXNl
PiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjcmVhdGVPZmZsaW5lU3RvcmFnZSgpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBSZXNvdXJjZXMoKSk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKGxvbmcgZGF0YWJhc2VJZCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiogbmFtZXMpCiB7CiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gZGF0
YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsKQEAgLTI1Miw4ICsyOTcsOCBAQCB2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwobG9uZyBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IHF1ZXJ5LCBibwogCiBEYXRhYmFzZSogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGF0YWJhc2VG
b3JJZChsb25nIGRhdGFiYXNlSWQpCiB7Ci0gICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9kYXRhYmFzZVJlc291cmNlcy0+ZmluZChkYXRhYmFzZUlkKTsKLSAgICBpZiAo
aXQgPT0gbV9kYXRhYmFzZVJlc291cmNlcy0+ZW5kKCkpCisgICAgRGF0YWJhc2VSZXNvdXJjZXNN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMtPm1fbWFwLmZpbmQoZGF0YWJhc2VJZCk7Cisg
ICAgaWYgKGl0ID09IG1fcmVzb3VyY2VzLT5tX21hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgcmV0dXJuIGl0LT5zZWNvbmQtPmRhdGFiYXNlKCk7CiB9CkBAIC0yNjMsNyArMzA4LDcg
QEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpzZWxlY3REYXRhYmFzZShEYXRhYmFzZSog
ZGF0YWJhc2UpCiAgICAgaWYgKCFtX2Zyb250ZW5kUHJvdmlkZXItPmZyb250ZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9kYXRhYmFzZVJlc291cmNlcy0+YmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZVJlc291cmNl
cy0+ZW5kKCk7ICsraXQpIHsKKyAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRv
ciBpdCA9IG1fcmVzb3VyY2VzLT5tX21hcC5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy0+bV9t
YXAuZW5kKCk7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmRhdGFiYXNlKCkgPT0g
ZGF0YWJhc2UpIHsKICAgICAgICAgICAgIG1fZnJvbnRlbmRQcm92aWRlci0+ZnJvbnRlbmQoKS0+
c2VsZWN0RGF0YWJhc2UoaXQtPmZpcnN0KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcxLDEy
ICszMTYsNiBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OnNlbGVjdERhdGFiYXNlKERh
dGFiYXNlKiBkYXRhYmFzZSkKICAgICB9CiB9CiAKLUluc3BlY3RvckRhdGFiYXNlQWdlbnQ6Oklu
c3BlY3RvckRhdGFiYXNlQWdlbnQoRGF0YWJhc2VSZXNvdXJjZXNNYXAqIGRhdGFiYXNlUmVzb3Vy
Y2VzLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCi0gICAgOiBtX2RhdGFiYXNlUmVzb3Vy
Y2VzKGRhdGFiYXNlUmVzb3VyY2VzKQotICAgICwgbV9mcm9udGVuZFByb3ZpZGVyKEZyb250ZW5k
UHJvdmlkZXI6OmNyZWF0ZShmcm9udGVuZCkpCi17Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJMRShEQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCmlu
ZGV4IDRhZDNlNjIuLjU0OTZkNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaApAQCAtMzYsMjEgKzM2LDIzIEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlOworY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFz
cyBJbnNwZWN0b3JBcnJheTsKLWNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7CiBjbGFz
cyBJbnNwZWN0b3JGcm9udGVuZDsKK2NsYXNzIEluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNCYXNl
OwogCiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50IHsKIHB1YmxpYzoKICAgICBjbGFzcyBG
cm9udGVuZFByb3ZpZGVyOworICAgIGNsYXNzIFJlc291cmNlczsKIAotICAgIHR5cGVkZWYgSGFz
aE1hcDxpbnQsIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+IERhdGFiYXNlUmVz
b3VyY2VzTWFwOwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dD4gY3JlYXRlKERhdGFiYXNlUmVzb3VyY2VzTWFwKiBkYXRhYmFzZVJlc291cmNlcywgSW5zcGVj
dG9yRnJvbnRlbmQqIGZyb250ZW5kKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckRh
dGFiYXNlQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JPZmZsaW5lUmVzb3VyY2VzQmFzZSogc3RvcmFn
ZSwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50KGRhdGFiYXNlUmVzb3VyY2VzLCBmcm9u
dGVuZCkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvckRhdGFiYXNlQWdl
bnQoc3RvcmFnZSwgZnJvbnRlbmQpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
bnNwZWN0b3JPZmZsaW5lUmVzb3VyY2VzQmFzZT4gY3JlYXRlT2ZmbGluZVN0b3JhZ2UoKTsKKwog
ICAgIHZpcnR1YWwgfkluc3BlY3RvckRhdGFiYXNlQWdlbnQoKTsKIAogICAgIC8vIENhbGxlZCBm
cm9tIHRoZSBmcm9udC1lbmQuCkBAIC02MSwxMCArNjMsMTEgQEAgcHVibGljOgogICAgIERhdGFi
YXNlKiBkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJhc2VJZCk7CiAgICAgdm9pZCBzZWxlY3REYXRh
YmFzZShEYXRhYmFzZSogZGF0YWJhc2UpOwogCisgICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFi
YXNlKEluc3BlY3RvckFnZW50KiwgUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmluZyYg
ZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiBwcml2
YXRlOgotICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQoRGF0YWJhc2VSZXNvdXJjZXNNYXAqLCBJ
bnNwZWN0b3JGcm9udGVuZCopOworICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQoSW5zcGVjdG9y
T2ZmbGluZVJlc291cmNlc0Jhc2UqLCBJbnNwZWN0b3JGcm9udGVuZCopOwogCi0gICAgRGF0YWJh
c2VSZXNvdXJjZXNNYXAqIG1fZGF0YWJhc2VSZXNvdXJjZXM7CisgICAgUmVzb3VyY2VzKiBtX3Jl
c291cmNlczsKICAgICBSZWZQdHI8RnJvbnRlbmRQcm92aWRlcj4gbV9mcm9udGVuZFByb3ZpZGVy
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmNwcAppbmRleCBlN2JiMWViLi5hMGMyODEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAt
NDIsNyArNDIsOSBAQAogI2luY2x1ZGUgIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ29uc29sZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmgiCkBAIC01ODUsMTQgKzU4NywxNCBAQCBib29sIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6cHJvZmlsZXJFbmFibGVkSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbgogI2lmIEVOQUJMRShEQVRBQkFTRSkKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRPcGVuRGF0YWJhc2VJbXBsKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgUGFz
c1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKLSAgICBpbnNwZWN0b3JBZ2Vu
dC0+ZGlkT3BlbkRhdGFiYXNlKGRhdGFiYXNlLCBkb21haW4sIG5hbWUsIHZlcnNpb24pOworICAg
IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpZE9wZW5EYXRhYmFzZShpbnNwZWN0b3JBZ2VudCwg
ZGF0YWJhc2UsIGRvbWFpbiwgbmFtZSwgdmVyc2lvbik7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShET01fU1RPUkFHRSkKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRVc2VET01T
dG9yYWdlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIFN0b3JhZ2VBcmVhKiBz
dG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogewotICAgIGlu
c3BlY3RvckFnZW50LT5kaWRVc2VET01TdG9yYWdlKHN0b3JhZ2VBcmVhLCBpc0xvY2FsU3RvcmFn
ZSwgZnJhbWUpOworICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkVXNlRE9NU3RvcmFn
ZShpbnNwZWN0b3JBZ2VudCwgc3RvcmFnZUFyZWEsIGlzTG9jYWxTdG9yYWdlLCBmcmFtZSk7CiB9
CiAjZW5kaWYKIAo=
</data>
<flag name="review"
          id="74119"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82482</attachid>
            <date>2011-02-15 10:31:10 -0800</date>
            <delta_ts>2011-02-16 03:21:49 -0800</delta_ts>
            <desc>[patch] second version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24206</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYmZiYTBlLi4xNWM3NjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTEtMDItMTUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IG1vdmUgRGF0YWJhc2UgYW5kIERPTVN0b3JhZ2UgcmVsYXRlZCB0aGluZ3MgZnJvbSBJ
bnNwZWN0b3JBZ2VudCB0byB0aGUgY29ycmVzcG9uZGluZyBhZ2VudHMuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NDU1CisKKyAgICAgICAgU29t
ZSBzZXQgb2YgaW5zdHJ1bWVudGF0aW9uIGNhbGxzIHNob3VsZCB3b3JrIGV2ZW4gaWYgd2UgaGF2
ZSBubyBJbnNwZWN0b3JGcm9udGVuZCBpbnN0YW5jZSBhbmQgY29ycmVzcG9uZGluZyBhZ2VudHMu
CisgICAgICAgIEF0IHRoZSBtb21lbnQgd2UgYXJlIHVzaW5nIEluc3BlY3RvckFnZW50IGluc3Rh
bmNlIGZvciBzdWNoIGNhbGxzLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6Y3JlYXRlRnJvbnRlbmRMaWZldGlt
ZUFnZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cHVzaERhdGFDb2xs
ZWN0ZWRPZmZsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRDb21t
aXRMb2FkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNCYXNlOjp+SW5zcGVjdG9yT2ZmbGlu
ZVJlc291cmNlc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT2ZmbGluZVJlc291
cmNlc0Jhc2U6Okluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNCYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50OjpkYXRhYmFzZUFnZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50Ojpkb21TdG9yYWdlQWdlbnRSZXNvdXJjZXMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpSZXNvdXJjZXM6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6UmVzb3VyY2VzOjpwdXNoRGF0
YUNvbGxlY3RlZE9mZmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50Ojp+SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y3JlYXRlT2ZmbGluZVN0b3Jh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZWxlY3RE
T01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRh
dGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dDo6UmVzb3VyY2VzOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpSZXNvdXJjZXM6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkaWRPcGVuRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6SW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjcmVhdGVPZmZs
aW5lU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpk
YXRhYmFzZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6
OnNlbGVjdERhdGFiYXNlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Y3JlYXRl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkT3BlbkRhdGFiYXNl
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFVz
ZURPTVN0b3JhZ2VJbXBsKToKKwogMjAxMS0wMi0xNSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggNmE0NGE0
MS4uNmZlYzQzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQu
Y3BwCkBAIC0xMDYsMTQgKzEwNiwxMSBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlLmg+CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShET01fU1RPUkFHRSkKICNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIKLSNp
bmNsdWRlICJTdG9yYWdlLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKQEAgLTE0MSw2ICsxMzgsMTIgQEAg
SW5zcGVjdG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVu
dCogY2xpZW50KQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9mcm9udGVuZCgwKQog
ICAgICwgbV9jc3NBZ2VudChuZXcgSW5zcGVjdG9yQ1NTQWdlbnQoKSkKKyNpZiBFTkFCTEUoREFU
QUJBU0UpCisgICAgLCBtX2RhdGFiYXNlQWdlbnRSZXNvdXJjZXMoSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6Y3JlYXRlU3RvcmFnZSgpKQorI2VuZGlmCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQor
ICAgICwgbV9kb21TdG9yYWdlQWdlbnRSZXNvdXJjZXMoSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpjcmVhdGVTdG9yYWdlKCkpCisjZW5kaWYKICAgICAsIG1fc3RhdGUobmV3IEluc3BlY3RvclN0
YXRlKGNsaWVudCkpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmplY3RlZFNjcmlwdEhv
c3Q6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fY29uc29sZUFnZW50KG5ldyBJbnNwZWN0b3JDb25z
b2xlQWdlbnQodGhpcykpCkBAIC0zODcsMTEgKzM5MCwxMSBAQCB2b2lkIEluc3BlY3RvckFnZW50
OjpjcmVhdGVGcm9udGVuZExpZmV0aW1lQWdlbnRzKCkKICAgICBtX3J1bnRpbWVBZ2VudCA9IElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Y3JlYXRlKG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpKTsK
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBtX2RhdGFiYXNlQWdlbnQgPSBJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpjcmVhdGUoJm1fZGF0YWJhc2VSZXNvdXJjZXMsIG1fZnJvbnRlbmQpOwor
ICAgIG1fZGF0YWJhc2VBZ2VudCA9IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmNyZWF0ZShkYXRh
YmFzZUFnZW50UmVzb3VyY2VzKCksIG1fZnJvbnRlbmQpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCi0gICAgbV9kb21TdG9yYWdlQWdlbnQgPSBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmNyZWF0ZSgmbV9kb21TdG9yYWdlUmVzb3VyY2VzLCBtX2Zyb250ZW5kKTsKKyAgICBt
X2RvbVN0b3JhZ2VBZ2VudCA9IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y3JlYXRlKGRvbVN0
b3JhZ2VBZ2VudFJlc291cmNlcygpLCBtX2Zyb250ZW5kKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKQEAgLTQ1NiwxNiArNDU5LDYgQEAgdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCkKIHsKICAgICBtX2RvbUFnZW50
LT5zZXREb2N1bWVudChtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpKTsK
IAotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0
b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKTsKLSAgICBmb3IgKERh
dGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5k
KG1fZnJvbnRlbmQpOwotI2VuZGlmCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIERPTVN0
b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VS
ZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRv
ciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmQpOwotI2VuZGlmCiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRShXT1JLRVJTKQogICAgIFdv
cmtlcnNNYXA6Oml0ZXJhdG9yIHdvcmtlcnNFbmQgPSBtX3dvcmtlcnMuZW5kKCk7CiAgICAgZm9y
IChXb3JrZXJzTWFwOjppdGVyYXRvciBpdCA9IG1fd29ya2Vycy5iZWdpbigpOyBpdCAhPSB3b3Jr
ZXJzRW5kOyArK2l0KSB7CkBAIC01NDQsMTAgKzUzNywxMCBAQCB2b2lkIEluc3BlY3RvckFnZW50
OjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIG1fd29ya2Vy
cy5jbGVhcigpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotICAgICAgICBtX2RhdGFi
YXNlUmVzb3VyY2VzLmNsZWFyKCk7CisgICAgICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmNs
ZWFyKHRoaXMpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgICAgICBtX2Rv
bVN0b3JhZ2VSZXNvdXJjZXMuY2xlYXIoKTsKKyAgICAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpjbGVhcih0aGlzKTsKICNlbmRpZgogCiAgICAgICAgIGlmIChtX2Zyb250ZW5kKQpAQCAt
NjgzLDIyICs2NzYsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpkaWREZXN0cm95V29ya2VyKGlu
dHB0cl90IGlkKQogfQogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQogCi0jaWYgRU5BQkxFKERB
VEFCQVNFKQotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkT3BlbkRhdGFiYXNlKFBhc3NSZWZQdHI8
RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiByZXNv
dXJjZSA9IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmNyZWF0ZShkYXRhYmFzZSwgZG9tYWlu
LCBuYW1lLCB2ZXJzaW9uKTsKLQotICAgIG1fZGF0YWJhc2VSZXNvdXJjZXMuc2V0KHJlc291cmNl
LT5pZCgpLCByZXNvdXJjZSk7Ci0KLSAgICAvLyBSZXNvdXJjZXMgYXJlIG9ubHkgYm91bmQgd2hp
bGUgdmlzaWJsZS4KLSAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgcmVzb3VyY2UtPmJpbmQo
bV9mcm9udGVuZCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBJbnNwZWN0b3JBZ2VudDo6Z2V0Q29va2ll
cyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb29raWVzLCBXVEY6OlN0cmluZyogY29va2llc1N0
cmluZykKIHsKICAgICAvLyBJZiB3ZSBjYW4gZ2V0IHJhdyBjb29raWVzLgpAQCAtNzgzLDI4ICs3
NjAsNiBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBj
b29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbgogICAgIH0KIH0KIAotI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UoU3RvcmFn
ZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCi17
Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERPTVN0b3JhZ2VS
ZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJj
ZXMuZW5kKCk7Ci0gICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9
IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0
KQotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9j
YWxTdG9yYWdlKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxTdG9yYWdlPiBk
b21TdG9yYWdlID0gU3RvcmFnZTo6Y3JlYXRlKGZyYW1lLCBzdG9yYWdlQXJlYSk7Ci0gICAgUmVm
UHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JET01T
dG9yYWdlUmVzb3VyY2U6OmNyZWF0ZShkb21TdG9yYWdlLmdldCgpLCBpc0xvY2FsU3RvcmFnZSwg
ZnJhbWUpOwotCi0gICAgbV9kb21TdG9yYWdlUmVzb3VyY2VzLnNldChyZXNvdXJjZS0+aWQoKSwg
cmVzb3VyY2UpOwotCi0gICAgLy8gUmVzb3VyY2VzIGFyZSBvbmx5IGJvdW5kIHdoaWxlIHZpc2li
bGUuCi0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIHJlc291cmNlLT5iaW5kKG1fZnJvbnRl
bmQpOwotfQotI2VuZGlmCi0KICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiB2b2lkIEluc3BlY3Rv
ckFnZW50OjpkaWRDcmVhdGVXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCkKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKaW5kZXggZWFkYjk4OC4uNDYxYWZiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKQEAgLTk5LDYgKzk5
LDE1IEBAIGNsYXNzIFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3Q7CiBjbGFzcyBXZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZTsKICNlbmRpZgogCitjbGFzcyBJbnNwZWN0b3JPZmZsaW5lUmVzb3Vy
Y2VzQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yT2ZmbGluZVJlc291
cmNlc0Jhc2UpOworcHVibGljOgorICAgIHZpcnR1YWwgfkluc3BlY3Rvck9mZmxpbmVSZXNvdXJj
ZXNCYXNlKCkge30KKworcHJvdGVjdGVkOgorICAgIEluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNC
YXNlKCkge30KK307CisKIGNsYXNzIEluc3BlY3RvckFnZW50IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShJbnNwZWN0b3JBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBA
IC0xNDUsOSArMTU0LDExIEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0
aW1lbGluZUFnZW50KCkgeyByZXR1cm4gbV90aW1lbGluZUFnZW50LmdldCgpOyB9CiAjaWYgRU5B
QkxFKERBVEFCQVNFKQogICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIGRhdGFiYXNlQWdlbnQo
KSB7IHJldHVybiBtX2RhdGFiYXNlQWdlbnQuZ2V0KCk7IH0KKyAgICBJbnNwZWN0b3JPZmZsaW5l
UmVzb3VyY2VzQmFzZSogZGF0YWJhc2VBZ2VudFJlc291cmNlcygpIHsgcmV0dXJuIG1fZGF0YWJh
c2VBZ2VudFJlc291cmNlcy5nZXQoKTsgfQogI2VuZGlmCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQogICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogZG9tU3RvcmFnZUFnZW50KCkgeyByZXR1
cm4gbV9kb21TdG9yYWdlQWdlbnQuZ2V0KCk7IH0KKyAgICBJbnNwZWN0b3JPZmZsaW5lUmVzb3Vy
Y2VzQmFzZSogZG9tU3RvcmFnZUFnZW50UmVzb3VyY2VzKCkgeyByZXR1cm4gbV9kb21TdG9yYWdl
QWdlbnRSZXNvdXJjZXMuZ2V0KCk7IH0KICNlbmRpZgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQogICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdn
ZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCk7IH0K
QEAgLTE4MywxNCArMTk0LDYgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRGVzdHJveVdvcmtlcihp
bnRwdHJfdCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICB2b2lkIGRpZE9w
ZW5EYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlPiwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLSNlbmRpZgotCi0jaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQotICAgIHZvaWQgZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJl
YSosIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKik7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShX
RUJfU09DS0VUUykKICAgICB2b2lkIGRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJM
KTsKICAgICB2b2lkIHdpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QmKTsKQEAgLTI3
NSwxMCArMjc4LDEyIEBAIHByaXZhdGU6CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgT3du
UHRyPEluc3BlY3RvckRhdGFiYXNlQWdlbnQ+IG1fZGF0YWJhc2VBZ2VudDsKKyAgICBPd25QdHI8
SW5zcGVjdG9yT2ZmbGluZVJlc291cmNlc0Jhc2U+IG1fZGF0YWJhc2VBZ2VudFJlc291cmNlczsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgIE93blB0cjxJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ+IG1fZG9tU3RvcmFnZUFnZW50OworICAgIE93blB0cjxJbnNwZWN0b3JP
ZmZsaW5lUmVzb3VyY2VzQmFzZT4gbV9kb21TdG9yYWdlQWdlbnRSZXNvdXJjZXM7CiAjZW5kaWYK
IAogICAgIE93blB0cjxJbnNwZWN0b3JUaW1lbGluZUFnZW50PiBtX3RpbWVsaW5lQWdlbnQ7CkBA
IC0yOTMsMTUgKzI5OCw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNl
QWdlbnQ+IG1fcmVzb3VyY2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9yUnVudGltZUFnZW50
PiBtX3J1bnRpbWVBZ2VudDsKIAotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICB0eXBlZGVmIEhh
c2hNYXA8aW50LCBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gPiBEYXRhYmFzZVJl
c291cmNlc01hcDsKLSAgICBEYXRhYmFzZVJlc291cmNlc01hcCBtX2RhdGFiYXNlUmVzb3VyY2Vz
OwotI2VuZGlmCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIHR5cGVkZWYgSGFzaE1hcDxp
bnQsIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+ID4gRE9NU3RvcmFnZVJlc291
cmNlc01hcDsKLSAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwIG1fZG9tU3RvcmFnZVJlc291cmNl
czsKLSNlbmRpZgotCiAgICAgUmVmUHRyPEluamVjdGVkU2NyaXB0SG9zdD4gbV9pbmplY3RlZFNj
cmlwdEhvc3Q7CiAgICAgT3duUHRyPEluc3BlY3RvckNvbnNvbGVBZ2VudD4gbV9jb25zb2xlQWdl
bnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudC5jcHAKaW5kZXggMDkxOWI2NC4uZTAxNjQzYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTM2
LDIzICszNiw0NyBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvckFnZW50Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRl
ICJTdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJWb2lkQ2Fs
bGJhY2suaCIKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCit0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlPiA+IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA7CisKK2NsYXNzIEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6UmVzb3VyY2VzIDogcHVibGljIEluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNCYXNl
IHsKK3B1YmxpYzoKKyAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwIG1fbWFwOworfTsKKworSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoSW5zcGVjdG9y
T2ZmbGluZVJlc291cmNlc0Jhc2UqIGRvbVN0b3JhZ2VBZ2VudFJlc291cmNlcywgSW5zcGVjdG9y
RnJvbnRlbmQqIGZyb250ZW5kKQorICAgIDogbV9yZXNvdXJjZXMoc3RhdGljX2Nhc3Q8SW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpSZXNvdXJjZXMqPihkb21TdG9yYWdlQWdlbnRSZXNvdXJjZXMp
KQorICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKK3sKKyAgICBBU1NFUlQoZG9tU3RvcmFnZUFn
ZW50UmVzb3VyY2VzKTsKKyAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNv
dXJjZXNFbmQgPSBtX3Jlc291cmNlcy0+bV9tYXAuZW5kKCk7CisgICAgZm9yIChET01TdG9yYWdl
UmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLT5tX21hcC5iZWdpbigpOyBp
dCAhPSByZXNvdXJjZXNFbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9u
dGVuZCk7Cit9CisKIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6fkluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudCgpCiB7Ci0gICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3Rv
cmFnZUVuZCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy0+ZW5kKCk7Ci0gICAgZm9yIChET01TdG9y
YWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy0+YmVn
aW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkKKyAgICBET01TdG9yYWdlUmVzb3VyY2Vz
TWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9yZXNvdXJjZXMtPm1fbWFwLmVuZCgpOwor
ICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNl
cy0+bV9tYXAuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkKICAgICAgICAgaXQt
PnNlY29uZC0+dW5iaW5kKCk7CiB9CiAKK1Bhc3NPd25QdHI8SW5zcGVjdG9yT2ZmbGluZVJlc291
cmNlc0Jhc2U+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y3JlYXRlU3RvcmFnZSgpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZXNvdXJjZXMoKSk7Cit9CisKIHZvaWQgSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlRW50cmllcyhsb25nIHN0b3JhZ2VJZCwgUmVm
UHRyPEluc3BlY3RvckFycmF5PiogZW50cmllcykKIHsKICAgICBJbnNwZWN0b3JET01TdG9yYWdl
UmVzb3VyY2UqIHN0b3JhZ2VSZXNvdXJjZSA9IGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKHN0
b3JhZ2VJZCk7CkBAIC05OSw4ICsxMjMsOCBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6c2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKQogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSAoZnJhbWUtPmRvbVdpbmRvdygpLT5s
b2NhbFN0b3JhZ2UoZWMpID09IHN0b3JhZ2UgJiYgIWVjKTsKICAgICBsb25nIHN0b3JhZ2VSZXNv
dXJjZUlkID0gMDsKLSAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9y
YWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLT5lbmQoKTsKLSAgICBmb3IgKERPTVN0b3Jh
Z2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLT5iZWdp
bigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7CisgICAgRE9NU3RvcmFnZVJlc291cmNl
c01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fcmVzb3VyY2VzLT5tX21hcC5lbmQoKTsK
KyAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJj
ZXMtPm1fbWFwLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpIHsKICAgICAgICAg
aWYgKGl0LT5zZWNvbmQtPmlzU2FtZUhvc3RBbmRUeXBlKGZyYW1lLCBpc0xvY2FsU3RvcmFnZSkp
IHsKICAgICAgICAgICAgIHN0b3JhZ2VSZXNvdXJjZUlkID0gaXQtPmZpcnN0OwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMTAsMjAgKzEzNCw0MSBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6c2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKQogICAgICAgICBtX2Zyb250
ZW5kLT5zZWxlY3RET01TdG9yYWdlKHN0b3JhZ2VSZXNvdXJjZUlkKTsKIH0KIAotSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50OjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoRE9NU3RvcmFnZVJlc291
cmNlc01hcCogZG9tU3RvcmFnZVJlc291cmNlcywgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
KQotICAgIDogbV9kb21TdG9yYWdlUmVzb3VyY2VzKGRvbVN0b3JhZ2VSZXNvdXJjZXMpCi0gICAg
LCBtX2Zyb250ZW5kKGZyb250ZW5kKQotewotfQotCiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2UqIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQo
bG9uZyBzdG9yYWdlSWQpCiB7Ci0gICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3Ig
aXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMtPmZpbmQoc3RvcmFnZUlkKTsKLSAgICBpZiAoaXQg
PT0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLT5lbmQoKSkKKyAgICBET01TdG9yYWdlUmVzb3VyY2Vz
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLT5tX21hcC5maW5kKHN0b3JhZ2VJZCk7Cisg
ICAgaWYgKGl0ID09IG1fcmVzb3VyY2VzLT5tX21hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpkaWRVc2VET01TdG9yYWdlKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCwgU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSog
ZnJhbWUpCit7CisgICAgaWYgKCFpbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZXNvdXJjZXMqIHJlc291cmNlcyA9IHN0YXRpY19jYXN0PFJlc291cmNl
cyo+KGluc3BlY3RvckFnZW50LT5kb21TdG9yYWdlQWdlbnRSZXNvdXJjZXMoKSk7CisgICAgRE9N
U3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IHJlc291cmNlcy0+
bV9tYXAuZW5kKCk7CisgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBp
dCA9IHJlc291cmNlcy0+bV9tYXAuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkK
KyAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZUhvc3RBbmRUeXBlKGZyYW1lLCBpc0xvY2Fs
U3RvcmFnZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8U3RvcmFnZT4gZG9t
U3RvcmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZShmcmFtZSwgc3RvcmFnZUFyZWEpOworICAgIFJlZlB0
cjxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+IHJlc291cmNlID0gSW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlOjpjcmVhdGUoZG9tU3RvcmFnZS5nZXQoKSwgaXNMb2NhbFN0b3JhZ2UsIGZy
YW1lKTsKKworICAgIHJlc291cmNlcy0+bV9tYXAuc2V0KHJlc291cmNlLT5pZCgpLCByZXNvdXJj
ZSk7CisKKyAgICAvLyBSZXNvdXJjZXMgYXJlIG9ubHkgYm91bmQgd2hpbGUgdmlzaWJsZS4KKyAg
ICBpZiAoaW5zcGVjdG9yQWdlbnQtPmZyb250ZW5kKCkpCisgICAgICAgIHJlc291cmNlLT5iaW5k
KGluc3BlY3RvckFnZW50LT5mcm9udGVuZCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmNsZWFyKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKK3sKKyAgICBz
dGF0aWNfY2FzdDxSZXNvdXJjZXMqPihpbnNwZWN0b3JBZ2VudC0+ZG9tU3RvcmFnZUFnZW50UmVz
b3VyY2VzKCkpLT5tX21hcC5jbGVhcigpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJMRShET01fU1RPUkUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgK
aW5kZXggOTg3YzUzMC4uMTQ3NzlmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaApAQCAtMzUsMjAgKzM1LDI3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRnJhbWU7CitjbGFzcyBJbnNwZWN0b3JBZ2VudDsK
IGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CitjbGFzcyBJbnNwZWN0b3JPZmZsaW5lUmVzb3Vy
Y2VzQmFzZTsKIGNsYXNzIFN0b3JhZ2U7CitjbGFzcyBTdG9yYWdlQXJlYTsKIAogY2xhc3MgSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50
LCBSZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiA+IERPTVN0b3JhZ2VSZXNvdXJj
ZXNNYXA7CisgICAgY2xhc3MgUmVzb3VyY2VzOwogCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50PiBjcmVhdGUoRE9NU3RvcmFnZVJlc291cmNlc01hcCogZG9t
U3RvcmFnZVJlc291cmNlcywgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQorICAgIHN0YXRp
YyBQYXNzT3duUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudD4gY3JlYXRlKEluc3BlY3Rvck9m
ZmxpbmVSZXNvdXJjZXNCYXNlKiBkb21TdG9yYWdlUmVzb3VyY2VzLCBJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudChkb21TdG9yYWdlUmVzb3VyY2VzLCBmcm9udGVuZCkpOwogICAgIH0K
IAorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNCYXNlPiBj
cmVhdGVTdG9yYWdlKCk7CisgICAgc3RhdGljIHZvaWQgY2xlYXIoSW5zcGVjdG9yQWdlbnQqKTsK
KwogICAgIHZpcnR1YWwgfkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCgpOwogCiAgICAgLy8gQ2Fs
bGVkIGZyb20gdGhlIGZyb250LWVuZC4KQEAgLTU5LDEyICs2NiwxNSBAQCBwdWJsaWM6CiAgICAg
Ly8gQ2FsbGVkIGZyb20gdGhlIGluamVjdGVkIHNjcmlwdC4KICAgICB2b2lkIHNlbGVjdERPTVN0
b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSk7CiAKKyAgICAvLyBDYWxsZWQgZnJvbSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24KKyAgICBzdGF0aWMgdm9pZCBkaWRVc2VET01TdG9yYWdlKEluc3BlY3Rv
ckFnZW50KiwgU3RvcmFnZUFyZWEqLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSopOworCiBw
cml2YXRlOgotICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChET01TdG9yYWdlUmVzb3VyY2Vz
TWFwKiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsKKyAgICBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQo
SW5zcGVjdG9yT2ZmbGluZVJlc291cmNlc0Jhc2UqLCBJbnNwZWN0b3JGcm9udGVuZCopOwogCiAg
ICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJ
ZChsb25nIHN0b3JhZ2VJZCk7CiAKLSAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwKiBtX2RvbVN0
b3JhZ2VSZXNvdXJjZXM7CisgICAgUmVzb3VyY2VzKiBtX3Jlc291cmNlczsKICAgICBJbnNwZWN0
b3JGcm9udGVuZCogbV9mcm9udGVuZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAppbmRleCAyMjFiZGYyNy4uZjkwOWU3
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZUFnZW50LmNwcApAQCAtMjE4LDExICsyMTgsNTUgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3Bh
Y2UKIAordHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2U+ID4gRGF0YWJhc2VSZXNvdXJjZXNNYXA7CisKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdl
bnQ6OlJlc291cmNlcyA6IHB1YmxpYyBJbnNwZWN0b3JPZmZsaW5lUmVzb3VyY2VzQmFzZSB7Citw
dWJsaWM6CisgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXAgbV9tYXA7Cit9OworCit2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ6OmRpZE9wZW5EYXRhYmFzZShJbnNwZWN0b3JBZ2VudCogaW5zcGVj
dG9yQWdlbnQsIFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRv
bWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAg
aWYgKCFpbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlOjpjcmVhdGUoZGF0YWJhc2UsIGRvbWFpbiwgbmFtZSwgdmVyc2lvbik7CisK
KyAgICBSZXNvdXJjZXMqIHJlc291cmNlcyA9IHN0YXRpY19jYXN0PFJlc291cmNlcyo+KGluc3Bl
Y3RvckFnZW50LT5kYXRhYmFzZUFnZW50UmVzb3VyY2VzKCkpOworICAgIEFTU0VSVChyZXNvdXJj
ZXMpOworICAgIHJlc291cmNlcy0+bV9tYXAuc2V0KHJlc291cmNlLT5pZCgpLCByZXNvdXJjZSk7
CisKKyAgICAvLyBSZXNvdXJjZXMgYXJlIG9ubHkgYm91bmQgd2hpbGUgdmlzaWJsZS4KKyAgICBp
ZiAoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kID0gaW5zcGVjdG9yQWdlbnQtPmZyb250ZW5k
KCkpCisgICAgICAgIHJlc291cmNlLT5iaW5kKGZyb250ZW5kKTsKK30KKwordm9pZCBJbnNwZWN0
b3JEYXRhYmFzZUFnZW50OjpjbGVhcihJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCit7
CisgICAgc3RhdGljX2Nhc3Q8UmVzb3VyY2VzKj4oaW5zcGVjdG9yQWdlbnQtPmRhdGFiYXNlQWdl
bnRSZXNvdXJjZXMoKSktPm1fbWFwLmNsZWFyKCk7Cit9CisKKworSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6SW5zcGVjdG9yRGF0YWJhc2VBZ2VudChJbnNwZWN0b3JPZmZsaW5lUmVzb3VyY2VzQmFz
ZSogcmVzb3VyY2VzLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCisgICAgOiBtX3Jlc291
cmNlcyhzdGF0aWNfY2FzdDxSZXNvdXJjZXMqPihyZXNvdXJjZXMpKQorICAgICwgbV9mcm9udGVu
ZFByb3ZpZGVyKEZyb250ZW5kUHJvdmlkZXI6OmNyZWF0ZShmcm9udGVuZCkpCit7CisgICAgQVNT
RVJUKHJlc291cmNlcyk7CisgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFi
YXNlc0VuZCA9IG1fcmVzb3VyY2VzLT5tX21hcC5lbmQoKTsKKyAgICBmb3IgKERhdGFiYXNlUmVz
b3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLT5tX21hcC5iZWdpbigpOyBpdCAh
PSBkYXRhYmFzZXNFbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPmJpbmQobV9mcm9udGVu
ZFByb3ZpZGVyLT5mcm9udGVuZCgpKTsKK30KKwogSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6fklu
c3BlY3RvckRhdGFiYXNlQWdlbnQoKQogewogICAgIG1fZnJvbnRlbmRQcm92aWRlci0+Y2xlYXJG
cm9udGVuZCgpOwogfQogCitQYXNzT3duUHRyPEluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNCYXNl
PiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjcmVhdGVTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFJlc291cmNlcygpKTsKK30KKwogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMobG9uZyBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBuYW1lcykKIHsKICAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSBkYXRhYmFzZUZv
cklkKGRhdGFiYXNlSWQpOwpAQCAtMjUyLDggKzI5Niw4IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudDo6ZXhlY3V0ZVNRTChsb25nIGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGJvCiAKIERhdGFiYXNlKiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkYXRhYmFzZUZvcklkKGxv
bmcgZGF0YWJhc2VJZCkKIHsKLSAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQg
PSBtX2RhdGFiYXNlUmVzb3VyY2VzLT5maW5kKGRhdGFiYXNlSWQpOwotICAgIGlmIChpdCA9PSBt
X2RhdGFiYXNlUmVzb3VyY2VzLT5lbmQoKSkKKyAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6aXRl
cmF0b3IgaXQgPSBtX3Jlc291cmNlcy0+bV9tYXAuZmluZChkYXRhYmFzZUlkKTsKKyAgICBpZiAo
aXQgPT0gbV9yZXNvdXJjZXMtPm1fbWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gaXQtPnNlY29uZC0+ZGF0YWJhc2UoKTsKIH0KQEAgLTI2Myw3ICszMDcsNyBAQCB2b2lk
IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OnNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFz
ZSkKICAgICBpZiAoIW1fZnJvbnRlbmRQcm92aWRlci0+ZnJvbnRlbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2Rh
dGFiYXNlUmVzb3VyY2VzLT5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlUmVzb3VyY2VzLT5lbmQo
KTsgKytpdCkgeworICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9yZXNvdXJjZXMtPm1fbWFwLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2VzLT5tX21hcC5lbmQo
KTsgKytpdCkgewogICAgICAgICBpZiAoaXQtPnNlY29uZC0+ZGF0YWJhc2UoKSA9PSBkYXRhYmFz
ZSkgewogICAgICAgICAgICAgbV9mcm9udGVuZFByb3ZpZGVyLT5mcm9udGVuZCgpLT5zZWxlY3RE
YXRhYmFzZShpdC0+Zmlyc3QpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzEsMTIgKzMxNSw2
IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6c2VsZWN0RGF0YWJhc2UoRGF0YWJhc2Uq
IGRhdGFiYXNlKQogICAgIH0KIH0KIAotSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6SW5zcGVjdG9y
RGF0YWJhc2VBZ2VudChEYXRhYmFzZVJlc291cmNlc01hcCogZGF0YWJhc2VSZXNvdXJjZXMsIElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKLSAgICA6IG1fZGF0YWJhc2VSZXNvdXJjZXMoZGF0
YWJhc2VSZXNvdXJjZXMpCi0gICAgLCBtX2Zyb250ZW5kUHJvdmlkZXIoRnJvbnRlbmRQcm92aWRl
cjo6Y3JlYXRlKGZyb250ZW5kKSkKLXsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKERBVEFCQVNFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKaW5kZXggNGFk
M2U2Mi4uNDA3MWNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudC5oCkBAIC0zNiwyMSArMzYsMjQgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRGF0YWJhc2U7CitjbGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3Bl
Y3RvckFycmF5OwotY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKIGNsYXNzIEluc3Bl
Y3RvckZyb250ZW5kOworY2xhc3MgSW5zcGVjdG9yT2ZmbGluZVJlc291cmNlc0Jhc2U7CiAKIGNs
YXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQgewogcHVibGljOgogICAgIGNsYXNzIEZyb250ZW5k
UHJvdmlkZXI7CisgICAgY2xhc3MgUmVzb3VyY2VzOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+ID4gRGF0YWJhc2VSZXNvdXJjZXNN
YXA7Ci0KLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PiBjcmVh
dGUoRGF0YWJhc2VSZXNvdXJjZXNNYXAqIGRhdGFiYXNlUmVzb3VyY2VzLCBJbnNwZWN0b3JGcm9u
dGVuZCogZnJvbnRlbmQpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRGF0YWJhc2VB
Z2VudD4gY3JlYXRlKEluc3BlY3Rvck9mZmxpbmVSZXNvdXJjZXNCYXNlKiBzdG9yYWdlLCBJbnNw
ZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluc3BlY3RvckRhdGFiYXNlQWdlbnQoZGF0YWJhc2VSZXNvdXJjZXMsIGZyb250ZW5kKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudChzdG9y
YWdlLCBmcm9udGVuZCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rv
ck9mZmxpbmVSZXNvdXJjZXNCYXNlPiBjcmVhdGVTdG9yYWdlKCk7CisgICAgc3RhdGljIHZvaWQg
Y2xlYXIoSW5zcGVjdG9yQWdlbnQqKTsKKwogICAgIHZpcnR1YWwgfkluc3BlY3RvckRhdGFiYXNl
QWdlbnQoKTsKIAogICAgIC8vIENhbGxlZCBmcm9tIHRoZSBmcm9udC1lbmQuCkBAIC02MSwxMCAr
NjQsMTEgQEAgcHVibGljOgogICAgIERhdGFiYXNlKiBkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJh
c2VJZCk7CiAgICAgdm9pZCBzZWxlY3REYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpOwogCisg
ICAgc3RhdGljIHZvaWQgZGlkT3BlbkRhdGFiYXNlKEluc3BlY3RvckFnZW50KiwgUGFzc1JlZlB0
cjxEYXRhYmFzZT4sIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbik7CiBwcml2YXRlOgotICAgIEluc3BlY3RvckRhdGFiYXNlQWdl
bnQoRGF0YWJhc2VSZXNvdXJjZXNNYXAqLCBJbnNwZWN0b3JGcm9udGVuZCopOworICAgIEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQoSW5zcGVjdG9yT2ZmbGluZVJlc291cmNlc0Jhc2UqLCBJbnNwZWN0
b3JGcm9udGVuZCopOwogCi0gICAgRGF0YWJhc2VSZXNvdXJjZXNNYXAqIG1fZGF0YWJhc2VSZXNv
dXJjZXM7CisgICAgUmVzb3VyY2VzKiBtX3Jlc291cmNlczsKICAgICBSZWZQdHI8RnJvbnRlbmRQ
cm92aWRlcj4gbV9mcm9udGVuZFByb3ZpZGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBlN2JiMWVi
Li5hMGMyODEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtNDIsNyArNDIsOSBAQAogI2luY2x1ZGUgIkluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29uc29sZUFnZW50LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFn
ZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdl
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgiCkBAIC01ODUsMTQgKzU4
NywxNCBAQCBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cHJvZmlsZXJFbmFibGVkSW1w
bChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbgogI2lmIEVOQUJMRShEQVRBQkFTRSkKIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRPcGVuRGF0YWJhc2VJbXBsKEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNv
bnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbikKIHsKLSAgICBpbnNwZWN0b3JBZ2VudC0+ZGlkT3BlbkRhdGFiYXNlKGRhdGFiYXNlLCBk
b21haW4sIG5hbWUsIHZlcnNpb24pOworICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpZE9w
ZW5EYXRhYmFzZShpbnNwZWN0b3JBZ2VudCwgZGF0YWJhc2UsIGRvbWFpbiwgbmFtZSwgdmVyc2lv
bik7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRVc2VET01TdG9yYWdlSW1wbChJbnNwZWN0b3JBZ2VudCogaW5z
cGVjdG9yQWdlbnQsIFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFn
ZSwgRnJhbWUqIGZyYW1lKQogewotICAgIGluc3BlY3RvckFnZW50LT5kaWRVc2VET01TdG9yYWdl
KHN0b3JhZ2VBcmVhLCBpc0xvY2FsU3RvcmFnZSwgZnJhbWUpOworICAgIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6ZGlkVXNlRE9NU3RvcmFnZShpbnNwZWN0b3JBZ2VudCwgc3RvcmFnZUFyZWEs
IGlzTG9jYWxTdG9yYWdlLCBmcmFtZSk7CiB9CiAjZW5kaWYKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>