<?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>54112</bug_id>
          
          <creation_ts>2011-02-09 09:13:31 -0800</creation_ts>
          <short_desc>Web Inspector: Add Start/Stop commands for (sub-)frontend lifetime agents.</short_desc>
          <delta_ts>2011-03-15 23:50:48 -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>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>
          <dependson>54135</dependson>
    
    <dependson>54875</dependson>
    
    <dependson>54891</dependson>
    
    <dependson>54951</dependson>
    
    <dependson>55369</dependson>
    
    <dependson>55461</dependson>
    
    <dependson>55673</dependson>
    
    <dependson>55770</dependson>
    
    <dependson>55820</dependson>
    
    <dependson>56204</dependson>
    
    <dependson>56389</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</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>348288</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-09 09:13:31 -0800</bug_when>
    <thetext>I&apos;d like to convert protocol from:

[domain=Inspector] void startTimelineProfiler();
[domain=Inspector] void stopTimelineProfiler();

To

[domain=Timeline] void start();
[domain=Timeline] void stop();

I&apos;d also like to make following agents create lazily:

DOM, Runtime, DOMStorage, Database, AppCache agents

They will have start() and stop() methods as well, but will start on demand after calling one of their methors. stop() will make them stop sending notifications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348358</commentid>
    <comment_count>1</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2011-02-09 10:29:48 -0800</bug_when>
    <thetext>You&apos;re talking about Inspector.idl, right?

There&apos;s may be a semantic issue here, in that you will have multiple &quot;start&quot; and &quot;stop&quot; methods defined in the IDL.  I realize that the Inspector.idl isn&apos;t strictly WebIDL, but it clearly is very close.  Does WebIDL support this kind of &quot;overloading&quot; in interfaces?  (I hope not!)

Alternatives:

- split Inspector.idl into separate IDL files, each with their own interface

- keep everything in Inspector.idl, but put multiple interfaces in it, instead of the singular interface &quot;Inspector&quot; today.  Obviously, every domain becomes a new interface.

I should mention that I&apos;m also a consumer of Inspector.idl for weinre.  Part of my build process is to build a JSON representation of the IDL, so that I can build proxies and verify methods exist in implementations.  So I&apos;d be hit by either of these changes.  But I&apos;d love to see either of these changes over the current state of Inspector.idl today - I don&apos;t think it&apos;s a big hit to change my JSON-builder (which parses the IDL).  I&apos;d prefer the second approach, I think.

I should mention also that I can actually cope with the original suggested change (multiple &quot;start&quot; methods in the IDL), it just doesn&apos;t seem like the cleanest story.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348470</commentid>
    <comment_count>2</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-09 12:32:58 -0800</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=54135 for the IDL part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353430</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-17 22:44:39 -0800</bug_when>
    <thetext>Ok, now that IDL is split we can go on with this one.

Originally, I was pushing for agent lifetime being &lt; than frontend lifetime. I.e. agent was created upon request from the front-end and then was destroyed once it was not needed upon stop. Timeline agent existed only between the start and stop calls, debugger agent only existed while debugging was enabled, etc. The idea is nice, but I now think it overcomplicates things for no good reason:

- Now that we want to make sart and stop a part of the domain itself, timeline agent should somehow create itself upon start and wipe itself out form its inspectorAgent container upon stop. To achieve this we either need to make start / stop static and allow agents register themselves in InspectorAgent or invent some other wipe-out mechanism that is going to add nothing but indirection. It sounds kinda complex.
- Originally, we were thinking &quot;agent lifetime spans within frontend, should we need some instrumentation outside these bounds, instrumented data should be stored in some managers / storages that live in inspector agent&quot;. However, this is bad for following reasons: a) it provides coupling between InspectorAgent and subagents and b) we were lazy and there are InspectorCSSAgent, InspectorConsoleAgent that live as much as the page c) InspectorDatabase with its in-agent storage looks ugly.
- I really think we should nuke inspector agent -&gt; subagent dependency in order to make addition of agents modular, with no need to modify core InspectorAgent structure.


It all adds up and here is another plan that I would suggest:
[PLAN B]

- Sub-agents (or now first-class-citizen agents)&apos;s lifetime == InspectorController lifetime.
- They all share base class with the following API: setFrontend and clearFrontend.
- They live in a single Vector of pointers, InspectorController only knows their base API above, they are constructed in the InspectorController constructor. Exception is agents that should be called upon WebKit calls such as startUserInitiatedProfiling. They are both referenced in vector (owned) and in raw pointer of a more concrete class in InspectorController.
- InspectorInstrumentation is mapping page to InspectorAgent today. Instead, it will map page to the struct of &quot;active agents&quot;. You can think of this struct as of a reduced InspectorAgent (without ownership of agents).
- Agents receive start / stop calls from the front-end and upon these calls, they register themselves in the inspector instrumentation as &quot;active&quot;.
- There are inter-agent dependencies (BrowserDebugger -&gt; Debugger, InspectorAgent -&gt; DomAgent). Let agents receive their dependencies in the constructor for now.
- To handle didCommitLoad gently, InspectorInstrumentation will have two methods:
didCommitLoad and didCommitLoadForMainFrame. ResourceAgent will be called in the first, rest of the agents in the second. They all will have didCommitLoadForMainFrame in their APIs.
- Workers are likely to have their own instrumentation interface. They are free to reuse debugger agent and a part of its protocol, they will not expose databases (we can always explore databases from the main thread), they are likely to use their own network instrumentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353596</commentid>
    <comment_count>4</comment_count>
      <attachid>82963</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-18 08:28:32 -0800</bug_when>
    <thetext>Created attachment 82963
Preliminary patch

This patch makes DOM and Console agent always exist and introduces NativeAgents class which is supposed to hold all agents that are currently used for WebCore instrumentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353800</commentid>
    <comment_count>5</comment_count>
      <attachid>82963</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-18 13:30:38 -0800</bug_when>
    <thetext>Comment on attachment 82963
Preliminary patch

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

&gt; Source/WebCore/inspector/InspectorAgent.cpp:427
&gt;      m_cssAgent-&gt;setDOMAgent(0);

I think we can this line and the same call in InspectorAgent::setFrontend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368222</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-03-15 23:50:48 -0700</bug_when>
    <thetext>After a series of changes all agents exist while inspected page exists and each agent handles its own start/stop commands. Closing this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82963</attachid>
            <date>2011-02-18 08:28:32 -0800</date>
            <delta_ts>2011-02-21 05:51:12 -0800</delta_ts>
            <desc>Preliminary patch</desc>
            <filename>split-agents.patch</filename>
            <type>text/plain</type>
            <size>22992</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAwY2M1YmY5Li5iNmNlNzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NjI1LDYgKzU2MjUsNyBAQAogCQlGMzkyMjQ5
RDEyNkYxMUFFMDBBOTI2RDkgLyogU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM5MjI0OUIxMjZGMTFBRTAwQTky
NkQ5IC8qIFNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCAqLzsgfTsKIAkJRjM5QkU5NUIxMjY3M0JG
NDAwRTBBNjc0IC8qIFNjcmlwdEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzlCRTk1OTEyNjczQkY0MDBFMEE2NzQgLyogU2NyaXB0
QXJndW1lbnRzLmNwcCAqLzsgfTsKIAkJRjM5QkU5NUMxMjY3M0JGNDAwRTBBNjc0IC8qIFNjcmlw
dEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjM5QkU5NUExMjY3M0JGNDAwRTBBNjc0IC8qIFNjcmlwdEFyZ3VtZW50cy5oICovOyB9Owor
CQlGM0FCRkUwQzEzMEU5REEwMDBFN0Y3RDEgLyogTmF0aXZlQWdlbnRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGM0FCRkUwQjEzMEU5REEwMDBFN0Y3
RDEgLyogTmF0aXZlQWdlbnRzLmggKi87IH07CiAJCUYzRDQ2MTQ4MTE2MUQ1MzIwMENBMEQwOSAv
KiBKU0Vycm9ySGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGM0Q0NjE0NjExNjFENTMyMDBDQTBEMDkgLyogSlNFcnJvckhhbmRsZXIuY3Bw
ICovOyB9OwogCQlGM0Q0NjE0OTExNjFENTMyMDBDQTBEMDkgLyogSlNFcnJvckhhbmRsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzRDQ2MTQ3MTE2
MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5oICovOyB9OwogCQlGM0Q0QzQ3ODEyRTA3
NjYzMDAzREExNTAgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjNENEM0NzYxMkUwNzY2MzAw
M0RBMTUwIC8qIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCAqLzsgfTsKQEAgLTEx
OTkwLDYgKzExOTkxLDcgQEAKIAkJRjM5MjI0OUIxMjZGMTFBRTAwQTkyNkQ5IC8qIFNjcmlwdENh
bGxTdGFja0ZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
Q2FsbFN0YWNrRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGMzlCRTk1
OTEyNjczQkY0MDBFMEE2NzQgLyogU2NyaXB0QXJndW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEFyZ3VtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUYzOUJFOTVBMTI2NzNCRjQwMEUwQTY3NCAvKiBTY3JpcHRBcmd1bWVu
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0QXJndW1lbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUYzQUJGRTBCMTMwRTlEQTAwMEU3RjdEMSAv
KiBOYXRpdmVBZ2VudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZl
QWdlbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzRDQ2MTQ2MTE2MUQ1MzIw
MENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0Vycm9ySGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUYzRDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Vycm9ySGFuZGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGM0Q0QzQ3NjEyRTA3NjYzMDAzREExNTAgLyogSW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTMwMjEsNiArMTMwMjMsNyBAQAogCQkJCUYzNzVDQzA2MTE1MEQzMDAwMDhE
REI4MSAvKiBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oICovLAogCQkJCTFDODFCQTA1MEU5NzM0
ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCAqLywKIAkJCQlCQ0M2NEY1RjBE
Q0ZCODRFMDA4MUVGM0IgLyogbG9jYWxpemVkU3RyaW5ncy5qcyAqLywKKwkJCQlGM0FCRkUwQjEz
MEU5REEwMDBFN0Y3RDEgLyogTmF0aXZlQWdlbnRzLmggKi8sCiAJCQkJRjM5QkU5NTkxMjY3M0JG
NDAwRTBBNjc0IC8qIFNjcmlwdEFyZ3VtZW50cy5jcHAgKi8sCiAJCQkJRjM5QkU5NUExMjY3M0JG
NDAwRTBBNjc0IC8qIFNjcmlwdEFyZ3VtZW50cy5oICovLAogCQkJCTdBRkQ0QThBMTEzMUMyNzYw
MDM1Qjg4MyAvKiBTY3JpcHRCcmVha3BvaW50LmggKi8sCkBAIC0yMjQ0MSw2ICsyMjQ0NCw3IEBA
CiAJCQkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCUI4REJEQjRFMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlEM0Q0RTk3MzEzMEM3Q0ZFMDA3
QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlGM0FCRkUw
QzEzMEU5REEwMDBFN0Y3RDEgLyogTmF0aXZlQWdlbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDZmZWM0M2QuLjQ1
NjY3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcApA
QCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIk5hdGl2ZUFnZW50cy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQcm9ncmVz
c1RyYWNrZXIuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAtMTM3LDcgKzEzOCw5IEBAIEluc3Bl
Y3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudChQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNs
aWVudCkKICAgICA6IG1faW5zcGVjdGVkUGFnZShwYWdlKQogICAgICwgbV9jbGllbnQoY2xpZW50
KQogICAgICwgbV9mcm9udGVuZCgwKQorICAgICwgbV9uYXRpdmVBZ2VudHMobmV3IE5hdGl2ZUFn
ZW50cygpKQogICAgICwgbV9jc3NBZ2VudChuZXcgSW5zcGVjdG9yQ1NTQWdlbnQoKSkKKyAgICAs
IG1fZG9tQWdlbnQoSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX25hdGl2ZUFnZW50cy5nZXQo
KSwgbV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCkpKQogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAg
ICAsIG1fZGF0YWJhc2VBZ2VudFJlc291cmNlcyhJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjcmVh
dGVTdG9yYWdlKCkpCiAjZW5kaWYKQEAgLTE0Niw3ICsxNDksNyBAQCBJbnNwZWN0b3JBZ2VudDo6
SW5zcGVjdG9yQWdlbnQoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAjZW5k
aWYKICAgICAsIG1fc3RhdGUobmV3IEluc3BlY3RvclN0YXRlKGNsaWVudCkpCiAgICAgLCBtX2lu
amVjdGVkU2NyaXB0SG9zdChJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKLSAgICAs
IG1fY29uc29sZUFnZW50KG5ldyBJbnNwZWN0b3JDb25zb2xlQWdlbnQodGhpcykpCisgICAgLCBt
X2NvbnNvbGVBZ2VudChuZXcgSW5zcGVjdG9yQ29uc29sZUFnZW50KG1fbmF0aXZlQWdlbnRzLmdl
dCgpLCB0aGlzLCBtX3N0YXRlLmdldCgpLCBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSwgbV9k
b21BZ2VudC5nZXQoKSkpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLCBt
X3Byb2ZpbGVyQWdlbnQoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKHRoaXMpKQogI2Vu
ZGlmCkBAIC0zODYsNyArMzg5LDcgQEAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogSW5zcGVjdG9y
QWdlbnQ6OnJlc291cmNlQWdlbnQoKQogCiB2b2lkIEluc3BlY3RvckFnZW50OjpjcmVhdGVGcm9u
dGVuZExpZmV0aW1lQWdlbnRzKCkKIHsKLSAgICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSwgbV9mcm9udGVuZCk7CisgICAg
bV9kb21BZ2VudC0+c2V0RnJvbnRlbmQobV9mcm9udGVuZCk7CiAgICAgbV9ydW50aW1lQWdlbnQg
PSBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQo
KSk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCkBAIC00MjIsNyArNDI1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKQogCiAgICAgLy8gVGhp
cyBzaG91bGQgYmUgaW52b2tlZCBwcmlvciB0byBtX2RvbUFnZW50IGRlc3RydWN0aW9uLgogICAg
IG1fY3NzQWdlbnQtPnNldERPTUFnZW50KDApOwotICAgIG1fZG9tQWdlbnQuY2xlYXIoKTsKKyAg
ICBtX2RvbUFnZW50LT5zZXRGcm9udGVuZCgwKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6
cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKQEAgLTU0Myw4ICs1NDYsOCBAQCB2b2lkIEluc3BlY3Rv
ckFnZW50OjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXIodGhpcyk7CiAjZW5kaWYKIAotICAgICAgICBp
ZiAobV9mcm9udGVuZCkKLSAgICAgICAgICAgIG1fZG9tQWdlbnQtPnNldERvY3VtZW50KG1faW5z
cGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkpOworICAgICAgICBpZiAoSW5zcGVj
dG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gbV9uYXRpdmVBZ2VudHMtPmluc3BlY3RvckRPTUFnZW50
KCkpCisgICAgICAgICAgICBkb21BZ2VudC0+c2V0RG9jdW1lbnQobV9pbnNwZWN0ZWRQYWdlLT5t
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAgICAgfQogfQogCkBAIC01NTMsOCArNTU2LDggQEAg
dm9pZCBJbnNwZWN0b3JBZ2VudDo6ZG9tQ29udGVudExvYWRlZEV2ZW50RmlyZWQoRG9jdW1lbnRM
b2FkZXIqIGxvYWRlciwgY29uc3QgS1UKICAgICBpZiAoIWVuYWJsZWQoKSB8fCAhaXNNYWluUmVz
b3VyY2VMb2FkZXIobG9hZGVyLCB1cmwpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9k
b21BZ2VudCkKLSAgICAgICAgbV9kb21BZ2VudC0+bWFpbkZyYW1lRE9NQ29udGVudExvYWRlZCgp
OworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBtX25hdGl2ZUFnZW50cy0+
aW5zcGVjdG9yRE9NQWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPm1haW5GcmFtZURPTUNvbnRl
bnRMb2FkZWQoKTsKICAgICBpZiAobV90aW1lbGluZUFnZW50KQogICAgICAgICBtX3RpbWVsaW5l
QWdlbnQtPmRpZE1hcmtET01Db250ZW50RXZlbnQoKTsKICAgICBpZiAobV9mcm9udGVuZCkKQEAg
LTU2Niw4ICs1NjksOCBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojpsb2FkRXZlbnRGaXJlZChEb2N1
bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJMJiB1cmwpCiAgICAgaWYgKCFlbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2RvbUFnZW50KQotICAgICAgICBtX2RvbUFn
ZW50LT5sb2FkRXZlbnRGaXJlZChsb2FkZXItPmZyYW1lKCktPmRvY3VtZW50KCkpOworICAgIGlm
IChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBtX25hdGl2ZUFnZW50cy0+aW5zcGVjdG9y
RE9NQWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPmxvYWRFdmVudEZpcmVkKGxvYWRlci0+ZnJh
bWUoKS0+ZG9jdW1lbnQoKSk7CiAKICAgICBpZiAoIWlzTWFpblJlc291cmNlTG9hZGVyKGxvYWRl
ciwgdXJsKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQWdlbnQuaAppbmRleCA0NjFhZmJhLi5lMzVmMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnQuaApAQCAtNzksNiArNzksNyBAQCBjbGFzcyBJbnNwZWN0b3JW
YWx1ZTsKIGNsYXNzIEluc3BlY3RvcldvcmtlclJlc291cmNlOwogY2xhc3MgSW50UmVjdDsKIGNs
YXNzIEtVUkw7CitjbGFzcyBOYXRpdmVBZ2VudHM7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsK
IGNsYXNzIFJlc291cmNlUmVxdWVzdDsKQEAgLTI3Myw2ICsyNzQsNyBAQCBwcml2YXRlOgogICAg
IFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50Owog
ICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOworICAgIE93blB0cjxOYXRpdmVBZ2Vu
dHM+IG1fbmF0aXZlQWdlbnRzOyAgCiAgICAgT3duUHRyPEluc3BlY3RvckNTU0FnZW50PiBtX2Nz
c0FnZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApp
bmRleCA3ZDExYTdhLi5jZjFjNDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
Ikluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUFnZW50cy5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAj
aW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCkBAIC01NCwxNyArNTUsMjcgQEAgc3RhdGljIGNv
bnN0IGNoYXIgbW9uaXRvcmluZ1hIUltdID0gIm1vbml0b3JpbmdYSFIiOwogc3RhdGljIGNvbnN0
IGNoYXIgY29uc29sZU1lc3NhZ2VzRW5hYmxlZFtdID0gImNvbnNvbGVNZXNzYWdlc0VuYWJsZWQi
OwogfQogCi1JbnNwZWN0b3JDb25zb2xlQWdlbnQ6Okluc3BlY3RvckNvbnNvbGVBZ2VudChJbnNw
ZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCi0gICAgOiBtX2luc3BlY3RvckFnZW50KGluc3Bl
Y3RvckFnZW50KQorSW5zcGVjdG9yQ29uc29sZUFnZW50OjpJbnNwZWN0b3JDb25zb2xlQWdlbnQo
TmF0aXZlQWdlbnRzKiBuYXRpdmVBZ2VudHMsIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCwgSW5zcGVjdG9yU3RhdGUqIHN0YXRlLCBJbmplY3RlZFNjcmlwdEhvc3QqIGluamVjdGVkU2Ny
aXB0SG9zdCwgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KQorICAgIDogbV9uYXRpdmVBZ2Vu
dHMobmF0aXZlQWdlbnRzKQorICAgICwgbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkK
KyAgICAsIG1faW5zcGVjdG9yU3RhdGUoc3RhdGUpCisgICAgLCBtX2luamVjdGVkU2NyaXB0SG9z
dChpbmplY3RlZFNjcmlwdEhvc3QpCisgICAgLCBtX2luc3BlY3RvckRPTUFnZW50KGRvbUFnZW50
KQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9wcmV2aW91c01lc3NhZ2UoMCkKICAgICAs
IG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQoMCkKIHsKKyAgICBtX25hdGl2ZUFnZW50cy0+
c2V0SW5zcGVjdG9yQ29uc29sZUFnZW50KHRoaXMpOwogfQogCiBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6On5JbnNwZWN0b3JDb25zb2xlQWdlbnQoKQogeworICAgIG1fbmF0aXZlQWdlbnRzLT5zZXRJ
bnNwZWN0b3JDb25zb2xlQWdlbnQoMCk7CisgICAgbV9uYXRpdmVBZ2VudHMgPSAwOwogICAgIG1f
aW5zcGVjdG9yQWdlbnQgPSAwOworICAgIG1faW5zcGVjdG9yU3RhdGUgPSAwOworICAgIG1faW5q
ZWN0ZWRTY3JpcHRIb3N0ID0gMDsKKyAgICBtX2luc3BlY3RvckRPTUFnZW50ID0gMDsKIH0KIAog
dm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQoYm9v
bCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKQEAgLTc4LDcgKzg5LDcgQEAgdm9pZCBJbnNwZWN0
b3JDb25zb2xlQWdlbnQ6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKCkKICAgICBtX2NvbnNvbGVNZXNz
YWdlcy5jbGVhcigpOwogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQgPSAwOwogICAg
IG1fcHJldmlvdXNNZXNzYWdlID0gMDsKLSAgICBtX2luc3BlY3RvckFnZW50LT5pbmplY3RlZFNj
cmlwdEhvc3QoKS0+cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCgwIC8qIHJlbGVhc2UgdGhlIGdy
b3VwIGluIGFsbCBzY3JpcHRzICovLCAiY29uc29sZSIpOworICAgIG1faW5qZWN0ZWRTY3JpcHRI
b3N0LT5yZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKDAgLyogcmVsZWFzZSB0aGUgZ3JvdXAgaW4g
YWxsIHNjcmlwdHMgKi8sICJjb25zb2xlIik7CiAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBk
b21BZ2VudCA9IG1faW5zcGVjdG9yQWdlbnQtPmRvbUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50
LT5yZWxlYXNlRGFuZ2xpbmdOb2RlcygpOwogICAgIGlmIChtX2Zyb250ZW5kKQpAQCAtMTY5LDcg
KzE4MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpyZXNvdXJjZVJldHJpZXZlZEJ5
WE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwsCiB7CiAgICAgaWYgKCFtX2luc3BlY3Rv
ckFnZW50LT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9pbnNwZWN0b3JB
Z2VudC0+c3RhdGUoKS0+Z2V0Qm9vbGVhbihDb25zb2xlQWdlbnRTdGF0ZTo6bW9uaXRvcmluZ1hI
UikpCisgICAgaWYgKG1faW5zcGVjdG9yU3RhdGUtPmdldEJvb2xlYW4oQ29uc29sZUFnZW50U3Rh
dGU6Om1vbml0b3JpbmdYSFIpKQogICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2Fn
ZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgIlhIUiBmaW5pc2hlZCBs
b2FkaW5nOiBcIiIgKyB1cmwgKyAiXCIuIiwgc2VuZExpbmVOdW1iZXIsIHNlbmRVUkwpOwogfQog
CkBAIC0xOTcsMTIgKzIwOCwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlkRmFp
bExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdQogCiB2b2lkIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoYm9vbCBlbmFibGVk
KQogewotICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldEJvb2xlYW4oQ29uc29sZUFn
ZW50U3RhdGU6Om1vbml0b3JpbmdYSFIsIGVuYWJsZWQpOworICAgIG1faW5zcGVjdG9yU3RhdGUt
PnNldEJvb2xlYW4oQ29uc29sZUFnZW50U3RhdGU6Om1vbml0b3JpbmdYSFIsIGVuYWJsZWQpOwog
fQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0Q29uc29sZU1lc3NhZ2VzRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+c2V0Qm9v
bGVhbihDb25zb2xlQWdlbnRTdGF0ZTo6Y29uc29sZU1lc3NhZ2VzRW5hYmxlZCwgZW5hYmxlZCk7
CisgICAgbV9pbnNwZWN0b3JTdGF0ZS0+c2V0Qm9vbGVhbihDb25zb2xlQWdlbnRTdGF0ZTo6Y29u
c29sZU1lc3NhZ2VzRW5hYmxlZCwgZW5hYmxlZCk7CiAgICAgaWYgKCFlbmFibGVkIHx8ICFtX2Zy
b250ZW5kKQogICAgICAgICByZXR1cm47CiAKQEAgLTIxMCw3ICsyMjEsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6c2V0Q29uc29sZU1lc3NhZ2VzRW5hYmxlZChib29sIGVuYWJsZWQp
CiAgICAgICAgIG1fZnJvbnRlbmQtPnVwZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50KG1f
ZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQpOwogICAgIHVuc2lnbmVkIG1lc3NhZ2VDb3VudCA9
IG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bWVzc2FnZUNvdW50OyArK2kpCi0gICAgICAgIG1fY29uc29sZU1lc3NhZ2VzW2ldLT5hZGRUb0Zy
b250ZW5kKG1fZnJvbnRlbmQsIG1faW5zcGVjdG9yQWdlbnQtPmluamVjdGVkU2NyaXB0SG9zdCgp
KTsKKyAgICAgICAgbV9jb25zb2xlTWVzc2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQobV9mcm9udGVu
ZCwgbV9pbmplY3RlZFNjcmlwdEhvc3QpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6YWRkQ29uc29sZU1lc3NhZ2UoUGFzc093blB0cjxDb25zb2xlTWVzc2FnZT4gY29uc29sZU1l
c3NhZ2UpCkBAIC0yMjAsMTMgKzIzMSwxMyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
YWRkQ29uc29sZU1lc3NhZ2UoUGFzc093blB0cjxDb25zb2xlTWVzc2FnZT4gY29uc29sZQogCiAg
ICAgaWYgKG1fcHJldmlvdXNNZXNzYWdlICYmIG1fcHJldmlvdXNNZXNzYWdlLT5pc0VxdWFsKGNv
bnNvbGVNZXNzYWdlLmdldCgpKSkgewogICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZS0+aW5jcmVt
ZW50Q291bnQoKTsKLSAgICAgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldEJv
b2xlYW4oQ29uc29sZUFnZW50U3RhdGU6OmNvbnNvbGVNZXNzYWdlc0VuYWJsZWQpICYmIG1fZnJv
bnRlbmQpCisgICAgICAgIGlmIChtX2luc3BlY3RvclN0YXRlLT5nZXRCb29sZWFuKENvbnNvbGVB
Z2VudFN0YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVkKSAmJiBtX2Zyb250ZW5kKQogICAgICAg
ICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPnVwZGF0ZVJlcGVhdENvdW50SW5Db25zb2xlKG1fZnJv
bnRlbmQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlID0gY29uc29s
ZU1lc3NhZ2UuZ2V0KCk7CiAgICAgICAgIG1fY29uc29sZU1lc3NhZ2VzLmFwcGVuZChjb25zb2xl
TWVzc2FnZSk7Ci0gICAgICAgIGlmIChtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRCb29s
ZWFuKENvbnNvbGVBZ2VudFN0YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVkKSAmJiBtX2Zyb250
ZW5kKQotICAgICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmFkZFRvRnJvbnRlbmQobV9mcm9u
dGVuZCwgbV9pbnNwZWN0b3JBZ2VudC0+aW5qZWN0ZWRTY3JpcHRIb3N0KCkpOworICAgICAgICBp
ZiAobV9pbnNwZWN0b3JTdGF0ZS0+Z2V0Qm9vbGVhbihDb25zb2xlQWdlbnRTdGF0ZTo6Y29uc29s
ZU1lc3NhZ2VzRW5hYmxlZCkgJiYgbV9mcm9udGVuZCkKKyAgICAgICAgICAgIG1fcHJldmlvdXNN
ZXNzYWdlLT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmQsIG1faW5qZWN0ZWRTY3JpcHRIb3N0KTsK
ICAgICB9CiAKICAgICBpZiAoIW1fZnJvbnRlbmQgJiYgbV9jb25zb2xlTWVzc2FnZXMuc2l6ZSgp
ID49IG1heGltdW1Db25zb2xlTWVzc2FnZXMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaAppbmRleCAxMGZmYjAyLi40OTkwMDM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCkBA
IC0zOCw4ICszOCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbnNvbGVNZXNz
YWdlOwogY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKIGNs
YXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9yU3RhdGU7CitjbGFzcyBJbmpl
Y3RlZFNjcmlwdEhvc3Q7CitjbGFzcyBOYXRpdmVBZ2VudHM7CiBjbGFzcyBSZXNvdXJjZUVycm9y
OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFNjcmlwdEFyZ3VtZW50czsKQEAgLTQ5
LDcgKzUyLDcgQEAgY2xhc3MgU2NyaXB0UHJvZmlsZTsKIGNsYXNzIEluc3BlY3RvckNvbnNvbGVB
Z2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ29uc29sZUFnZW50KTsK
IHB1YmxpYzoKLSAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQoSW5zcGVjdG9yQWdlbnQqKTsKKyAg
ICBJbnNwZWN0b3JDb25zb2xlQWdlbnQoTmF0aXZlQWdlbnRzKiwgSW5zcGVjdG9yQWdlbnQqLCBJ
bnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0SG9zdCosIEluc3BlY3RvckRPTUFnZW50Kik7
CiAgICAgfkluc3BlY3RvckNvbnNvbGVBZ2VudCgpOwogCiAgICAgdm9pZCBzZXRDb25zb2xlTWVz
c2FnZXNFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOwpAQCAtNzcsNyArODAs
MTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQoYm9vbCk7
CiAgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShQYXNzT3duUHRyPENvbnNvbGVNZXNzYWdlPik7
CiAKKyAgICBOYXRpdmVBZ2VudHMqIG1fbmF0aXZlQWdlbnRzOwogICAgIEluc3BlY3RvckFnZW50
KiBtX2luc3BlY3RvckFnZW50OworICAgIEluc3BlY3RvclN0YXRlKiBtX2luc3BlY3RvclN0YXRl
OworICAgIEluamVjdGVkU2NyaXB0SG9zdCogbV9pbmplY3RlZFNjcmlwdEhvc3Q7CisgICAgSW5z
cGVjdG9yRE9NQWdlbnQqIG1faW5zcGVjdG9yRE9NQWdlbnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRl
bmQqIG1fZnJvbnRlbmQ7CiAgICAgQ29uc29sZU1lc3NhZ2UqIG1fcHJldmlvdXNNZXNzYWdlOwog
ICAgIFZlY3RvcjxPd25QdHI8Q29uc29sZU1lc3NhZ2U+ID4gbV9jb25zb2xlTWVzc2FnZXM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBl
MjIyZWRiLi5lZGJhMmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJJbmplY3RlZFNjcmlw
dEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIk11dGF0
aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJOYXRpdmVBZ2VudHMuaCIKICNpbmNsdWRlICJOb2RlLmgi
CiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCkBAIC0yMDcs
OSArMjA4LDEwIEBAIHB1YmxpYzoKIAogfQogCi1JbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9y
RE9NQWdlbnQoSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QsIEluc3BlY3Rv
ckZyb250ZW5kKiBmcm9udGVuZCkKLSAgICA6IG1faW5qZWN0ZWRTY3JpcHRIb3N0KGluamVjdGVk
U2NyaXB0SG9zdCkKLSAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCitJbnNwZWN0b3JET01BZ2Vu
dDo6SW5zcGVjdG9yRE9NQWdlbnQoTmF0aXZlQWdlbnRzKiBuYXRpdmVBZ2VudHMsIEluamVjdGVk
U2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRIb3N0KQorICAgIDogbV9uYXRpdmVBZ2VudHMobmF0
aXZlQWdlbnRzKQorICAgICwgbV9pbmplY3RlZFNjcmlwdEhvc3QoaW5qZWN0ZWRTY3JpcHRIb3N0
KQorICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9kb21MaXN0ZW5lcigwKQogICAgICwgbV9s
YXN0Tm9kZUlkKDEpCiAgICAgLCBtX21hdGNoSm9ic1RpbWVyKHRoaXMsICZJbnNwZWN0b3JET01B
Z2VudDo6b25NYXRjaEpvYnNUaW1lcikKQEAgLTIyMSw2ICsyMjMsMTggQEAgSW5zcGVjdG9yRE9N
QWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCgpCiAgICAgcmVzZXQoKTsKIH0KIAordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6c2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQor
eworICAgIEFTU0VSVCghZnJvbnRlbmQgXiAhbV9mcm9udGVuZCk7CisgICAgbV9mcm9udGVuZCA9
IGZyb250ZW5kOworICAgIGlmIChmcm9udGVuZCkgeworICAgICAgICBtX25hdGl2ZUFnZW50cy0+
c2V0SW5zcGVjdG9yRE9NQWdlbnQodGhpcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9uYXRp
dmVBZ2VudHMtPnNldEluc3BlY3RvckRPTUFnZW50KDApOworICAgICAgICByZXNldCgpOworICAg
IH0KK30KKwogVmVjdG9yPERvY3VtZW50Kj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50cygp
CiB7CiAgICAgVmVjdG9yPERvY3VtZW50Kj4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA0ZTYwM2RhLi4yOTUyNjU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNTMsNiArNTMs
NyBAQCBjbGFzcyBFdmVudDsKIGNsYXNzIEluc3BlY3RvckRPTUFnZW50OwogY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmQ7CiBjbGFzcyBNYXRjaEpvYjsKK2NsYXNzIE5hdGl2ZUFnZW50czsKIGNsYXNz
IE5hbWVOb2RlTWFwOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CkBAIC04MywxNCArODQsMTUg
QEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50
KikgPSAwOwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JET01BZ2Vu
dD4gY3JlYXRlKEluamVjdGVkU2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRIb3N0LCBJbnNwZWN0
b3JGcm9udGVuZCogZnJvbnRlbmQpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRE9N
QWdlbnQ+IGNyZWF0ZShOYXRpdmVBZ2VudHMqIG5hdGl2ZUFnZW50cywgSW5qZWN0ZWRTY3JpcHRI
b3N0KiBpbmplY3RlZFNjcmlwdEhvc3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluc3BlY3RvckRPTUFnZW50KGluamVjdGVkU2NyaXB0SG9zdCwgZnJvbnRlbmQpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JET01BZ2VudChuYXRpdmVBZ2VudHMs
IGluamVjdGVkU2NyaXB0SG9zdCkpOwogICAgIH0KIAotICAgIEluc3BlY3RvckRPTUFnZW50KElu
amVjdGVkU2NyaXB0SG9zdCosIEluc3BlY3RvckZyb250ZW5kKik7CiAgICAgfkluc3BlY3RvckRP
TUFnZW50KCk7CiAKKyAgICB2b2lkIHNldEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKik7CisK
ICAgICBWZWN0b3I8RG9jdW1lbnQqPiBkb2N1bWVudHMoKTsKICAgICB2b2lkIHJlc2V0KCk7CiAK
QEAgLTE0NCw2ICsxNDYsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNXaGl0ZXNwYWNl
KE5vZGUqKTsKIAogcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JET01BZ2VudChOYXRpdmVBZ2VudHMq
LCBJbmplY3RlZFNjcmlwdEhvc3QqKTsKKwogICAgIC8vIE5vZGUtcmVsYXRlZCBtZXRob2RzLgog
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIGxvbmc+IE5vZGVUb0lkTWFwOwogICAg
IGxvbmcgYmluZChOb2RlKiwgTm9kZVRvSWRNYXAqKTsKQEAgLTE3MCw2ICsxNzQsNyBAQCBwcml2
YXRlOgogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JOb2RlSWQobG9uZyBu
b2RlSWQpOwogCisgICAgTmF0aXZlQWdlbnRzKiBtX25hdGl2ZUFnZW50czsKICAgICBJbmplY3Rl
ZFNjcmlwdEhvc3QqIG1faW5qZWN0ZWRTY3JpcHRIb3N0OwogICAgIEluc3BlY3RvckZyb250ZW5k
KiBtX2Zyb250ZW5kOwogICAgIERPTUxpc3RlbmVyKiBtX2RvbUxpc3RlbmVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL05hdGl2ZUFnZW50cy5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL05hdGl2ZUFnZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJjNzEzNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvTmF0aXZlQWdlbnRzLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5hdGl2ZUFnZW50c19o
CisjZGVmaW5lIE5hdGl2ZUFnZW50c19oCisKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OworY2xhc3MgSW5zcGVjdG9yQ29u
c29sZUFnZW50OworY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JET01B
Z2VudDsKK2NsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDsKK2NsYXNzIEluc3BlY3RvckRh
dGFiYXNlQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OworY2xhc3MgSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudDsKK2NsYXNzIEluc3BlY3RvclJlc291cmNlQWdlbnQ7CitjbGFzcyBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JTdG9yYWdlQWdlbnQ7CitjbGFz
cyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OworCitjbGFzcyBOYXRpdmVBZ2VudHMgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE5hdGl2ZUFnZW50cyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgTmF0aXZlQWdlbnRzKCkKKyAgICAgICAgOiBtX2luc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50KDApCisgICAgICAgICwgbV9pbnNwZWN0b3JDb25zb2xlQWdl
bnQoMCkKKyAgICAgICAgLCBtX2luc3BlY3RvckNTU0FnZW50KDApCisgICAgICAgICwgbV9pbnNw
ZWN0b3JET01BZ2VudCgwKQorICAgICAgICAsIG1faW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KDAp
CisgICAgICAgICwgbV9pbnNwZWN0b3JEYXRhYmFzZUFnZW50KDApCisgICAgICAgICwgbV9pbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50KDApCisgICAgICAgICwgbV9pbnNwZWN0b3JQcm9maWxlckFnZW50
KDApCisgICAgICAgICwgbV9pbnNwZWN0b3JSZXNvdXJjZUFnZW50KDApCisgICAgICAgICwgbV9p
bnNwZWN0b3JSdW50aW1lQWdlbnQoMCkKKyAgICAgICAgLCBtX2luc3BlY3RvclN0b3JhZ2VBZ2Vu
dCgwKQorICAgICAgICAsIG1faW5zcGVjdG9yVGltZWxpbmVBZ2VudCgwKQorICAgIHsgfQorICAg
IH5OYXRpdmVBZ2VudHMoKSB7IH0KKworICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
KiBpbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ7IH0KKyAgICB2b2lkIHNldEluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50KEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBhZ2VudCkgeyBtX2lu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50ID0gYWdlbnQ7IH0KKworICAgIEluc3BlY3RvckNv
bnNvbGVBZ2VudCogaW5zcGVjdG9yQ29uc29sZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNw
ZWN0b3JDb25zb2xlQWdlbnQ7IH0KKyAgICB2b2lkIHNldEluc3BlY3RvckNvbnNvbGVBZ2VudChJ
bnNwZWN0b3JDb25zb2xlQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yQ29uc29sZUFnZW50ID0g
YWdlbnQ7IH0KKworICAgIEluc3BlY3RvckNTU0FnZW50KiBpbnNwZWN0b3JDU1NBZ2VudCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTQWdlbnQ7IH0KKyAgICB2b2lkIHNldEluc3BlY3Rv
ckNTU0FnZW50KEluc3BlY3RvckNTU0FnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvckNTU0FnZW50
ID0gYWdlbnQ7IH0KKworICAgIEluc3BlY3RvckRPTUFnZW50KiBpbnNwZWN0b3JET01BZ2VudCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRE9NQWdlbnQ7IH0KKyAgICB2b2lkIHNldEluc3Bl
Y3RvckRPTUFnZW50KEluc3BlY3RvckRPTUFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvckRPTUFn
ZW50ID0gYWdlbnQ7IH0KKworICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogaW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ7IH0KKyAgICB2b2lkIHNldEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50ID0gYWdlbnQ7
IH0KKworICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIGluc3BlY3RvckRhdGFiYXNlQWdlbnQo
KSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckRhdGFiYXNlQWdlbnQ7IH0KKyAgICB2b2lkIHNl
dEluc3BlY3RvckRhdGFiYXNlQWdlbnQoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogYWdlbnQpIHsg
bV9pbnNwZWN0b3JEYXRhYmFzZUFnZW50ID0gYWdlbnQ7IH0KKworICAgIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQqIGluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ7IH0KKyAgICB2b2lkIHNldEluc3BlY3RvckRlYnVnZ2VyQWdlbnQo
SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JEZWJ1Z2dlckFnZW50
ID0gYWdlbnQ7IH0KKworICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIGluc3BlY3RvclByb2Zp
bGVyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclByb2ZpbGVyQWdlbnQ7IH0KKyAg
ICB2b2lkIHNldEluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCog
YWdlbnQpIHsgbV9pbnNwZWN0b3JQcm9maWxlckFnZW50ID0gYWdlbnQ7IH0KKworICAgIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQqIGluc3BlY3RvclJlc291cmNlQWdlbnQoKSBjb25zdCB7IHJldHVy
biBtX2luc3BlY3RvclJlc291cmNlQWdlbnQ7IH0KKyAgICB2b2lkIHNldEluc3BlY3RvclJlc291
cmNlQWdlbnQoSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JSZXNv
dXJjZUFnZW50ID0gYWdlbnQ7IH0KKworICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudCogaW5zcGVj
dG9yUnVudGltZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JSdW50aW1lQWdlbnQ7
IH0KKyAgICB2b2lkIHNldEluc3BlY3RvclJ1bnRpbWVBZ2VudChJbnNwZWN0b3JSdW50aW1lQWdl
bnQqIGFnZW50KSB7IG1faW5zcGVjdG9yUnVudGltZUFnZW50ID0gYWdlbnQ7IH0KKworICAgIElu
c3BlY3RvclN0b3JhZ2VBZ2VudCogaW5zcGVjdG9yU3RvcmFnZUFnZW50KCkgY29uc3QgeyByZXR1
cm4gbV9pbnNwZWN0b3JTdG9yYWdlQWdlbnQ7IH0KKyAgICB2b2lkIHNldEluc3BlY3RvclN0b3Jh
Z2VBZ2VudChJbnNwZWN0b3JTdG9yYWdlQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yU3RvcmFn
ZUFnZW50ID0gYWdlbnQ7IH0KKworICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIGluc3BlY3Rv
clRpbWVsaW5lQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclRpbWVsaW5lQWdlbnQ7
IH0KKyAgICB2b2lkIHNldEluc3BlY3RvclRpbWVsaW5lQWdlbnQoSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogYWdlbnQpIHsgbV9pbnNwZWN0b3JUaW1lbGluZUFnZW50ID0gYWdlbnQ7IH0KKworcHJp
dmF0ZToKKyAgICBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCogbV9pbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudDsKKyAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQqIG1faW5zcGVjdG9y
Q29uc29sZUFnZW50OworICAgIEluc3BlY3RvckNTU0FnZW50KiBtX2luc3BlY3RvckNTU0FnZW50
OworICAgIEluc3BlY3RvckRPTUFnZW50KiBtX2luc3BlY3RvckRPTUFnZW50OworICAgIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudCogbV9pbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ7CisgICAgSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudCogbV9pbnNwZWN0b3JEYXRhYmFzZUFnZW50OworICAgIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQqIG1faW5zcGVjdG9yRGVidWdnZXJBZ2VudDsKKyAgICBJbnNwZWN0
b3JQcm9maWxlckFnZW50KiBtX2luc3BlY3RvclByb2ZpbGVyQWdlbnQ7CisgICAgSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudCogbV9pbnNwZWN0b3JSZXNvdXJjZUFnZW50OworICAgIEluc3BlY3RvclJ1
bnRpbWVBZ2VudCogbV9pbnNwZWN0b3JSdW50aW1lQWdlbnQ7CisgICAgSW5zcGVjdG9yU3RvcmFn
ZUFnZW50KiBtX2luc3BlY3RvclN0b3JhZ2VBZ2VudDsKKyAgICBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50KiBtX2luc3BlY3RvclRpbWVsaW5lQWdlbnQ7Cit9OworCit9CisKKyNlbmRpZiAvLyAhZGVm
aW5lZChOYXRpdmVBZ2VudHNfaCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>