<?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>27209</bug_id>
          
          <creation_ts>2009-07-13 02:10:31 -0700</creation_ts>
          <short_desc>Add WebSocket.idl</short_desc>
          <delta_ts>2009-08-06 21:11:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fumitoshi Ukai">ukai</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>jorlow</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>131276</commentid>
    <comment_count>0</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-07-13 02:10:31 -0700</bug_when>
    <thetext>Add WebSocket.idl in WebCore/websockets/
http://dev.w3.org/html5/websockets/#the-websocket-interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131277</commentid>
    <comment_count>1</comment_count>
      <attachid>32653</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-07-13 02:13:46 -0700</bug_when>
    <thetext>Created attachment 32653
Add WebSocket.idl


---
 2 files changed, 63 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131376</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-07-13 12:21:20 -0700</bug_when>
    <thetext>&gt; +module websockets {
&gt; +
&gt; +    interface [
&gt; +        CustomMarkFunction,
&gt; +        NoStaticTables

Why does this need a custom mark function or no static tables?  (Not saying it doesn&apos;t..just wondering.)

Also, add Conditional=WEB_SOCKETS

&gt; +    ] WebSocket {
&gt; +        readonly attribute DOMString URL;
&gt; +
&gt; +        // ready state
&gt; +        const unsigned short CONNECTING = 0;
&gt; +        const unsigned short OPEN = 1;
&gt; +        const unsigned short CLOSED = 2;
&gt; +        readonly attribute long readyState;

Why are the constants shorts and the attribute a long?

&gt; +
&gt; +        // networking
&gt; +        attribute EventListener onopen;
&gt; +        attribute EventListener onmessage;
&gt; +        attribute EventListener onclose;
&gt; +
&gt; +        [Custom] void send(in DOMString data)
&gt; +          raises(DOMException);

Why does this need to be custom?  (Not saying it doesn&apos;t, just wondering.)

&gt; +        void close();
&gt; +    };
&gt; +}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131379</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-07-13 12:24:53 -0700</bug_when>
    <thetext>It is a bit hard to review this without the implementation file it binds and the custom bindings needed by the extended attributes.  Can you add that as well, even if only in a stubbed out form?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131515</commentid>
    <comment_count>4</comment_count>
      <attachid>32705</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-07-14 03:16:52 -0700</bug_when>
    <thetext>Created attachment 32705
add WebSocket.idl and its implementation and bindings


---
 7 files changed, 603 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131517</commentid>
    <comment_count>5</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-07-14 03:21:04 -0700</bug_when>
    <thetext>Thanks for review.

Added some implementation and binding code.


&gt; Why does this need a custom mark function or no static tables?  (Not saying it doesn&apos;t..just wondering.)

I think custom mark function is necessary to prevent GC when it&apos;s open and active.
I&apos;m not sure no static tables.  I just follow XMLHttpRequest.
Added Conditional=WEB_SOCKETS.

&gt; Why are the constants shorts and the attribute a long?
not sure, but spec says so: http://dev.w3.org/html5/websockets/


If you want to see more implementation, please take a look at http://codereview.chromium.org/155079

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132482</commentid>
    <comment_count>6</comment_count>
      <attachid>32916</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-07-16 23:03:04 -0700</bug_when>
    <thetext>Created attachment 32916
add WebSocket.idl


---
 7 files changed, 629 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133182</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-20 11:43:53 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I&apos;m not sure no static tables.  I just follow XMLHttpRequest.

NoStaticTables is needed for interfaces that will be used from worker threads.

&gt; If you want to see more implementation, please take a look at
&gt; http://codereview.chromium.org/155079

I do not think that implementing Web Sockets elsewhere and pushing it into Bugzilla just for landing will work smoothly.

The most interesting aspect of WebSockets implementation, and one that I didn&apos;t see discussed yet, is what kind of back-end we need. It is not clear whether existing HTTP back-ends for supported platforms allow for the level of control needed for Web Sockets - it is possible that we&apos;ll actually need a new cross-platform HTTP implementation for these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133188</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-07-20 12:02:52 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; I&apos;m not sure no static tables.  I just follow XMLHttpRequest.
&gt; 
&gt; NoStaticTables is needed for interfaces that will be used from worker threads.
&gt; 
&gt; &gt; If you want to see more implementation, please take a look at
&gt; &gt; http://codereview.chromium.org/155079
&gt; 
&gt; I do not think that implementing Web Sockets elsewhere and pushing it into
&gt; Bugzilla just for landing will work smoothly.

I&apos;m not sure I agree.  WebKit developers often seem to write the entire implementation, break it into patches, discuss each patch on its own merit, and iterate.  I believe that&apos;s precisely what&apos;s happening here.

&gt; The most interesting aspect of WebSockets implementation, and one that I didn&apos;t
&gt; see discussed yet, is what kind of back-end we need. It is not clear whether
&gt; existing HTTP back-ends for supported platforms allow for the level of control
&gt; needed for Web Sockets - it is possible that we&apos;ll actually need a new
&gt; cross-platform HTTP implementation for these.

My understanding is that this code has been tested end-to-end on at least one platform, so it&apos;s possible that won&apos;t be necessary.

If, however, there are http stack limitations, Chromium recently wrote a cross platform network stack that might be useful here.  It&apos;s my understanding that it was written to have minimal dependencies on Chromium as well.

But aren&apos;t we getting ahead of ourselves?  This bug is for adding the idl files.  This needs to happen whether or not radical changes to the http implementation are necessary, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133202</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-20 12:51:16 -0700</bug_when>
    <thetext>&gt; But aren&apos;t we getting ahead of ourselves?  This bug is for adding the idl
&gt; files.  This needs to happen whether or not radical changes to the http
&gt; implementation are necessary, right?

Do we have a better place for this discussion? I&apos;ll be happy to take it there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133204</commentid>
    <comment_count>10</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-07-20 13:04:43 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; But aren&apos;t we getting ahead of ourselves?  This bug is for adding the idl
&gt; &gt; files.  This needs to happen whether or not radical changes to the http
&gt; &gt; implementation are necessary, right?
&gt; 
&gt; Do we have a better place for this discussion? I&apos;ll be happy to take it there.

Sorry, I guess I should have just created a new bug in the first place.  Let&apos;s discuss the protocol/http aspect of it here? https://bugs.webkit.org/show_bug.cgi?id=27459</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133377</commentid>
    <comment_count>11</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-07-20 23:45:37 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; I&apos;m not sure no static tables.  I just follow XMLHttpRequest.
&gt; &gt; 
&gt; &gt; NoStaticTables is needed for interfaces that will be used from worker threads.

Hmm, then WebSocket also needs NoStaticTables, because it will be used from worker threads as spec says (cf. http://dev.w3.org/html5/workers/)

&gt; &gt; 
&gt; &gt; &gt; If you want to see more implementation, please take a look at
&gt; &gt; &gt; http://codereview.chromium.org/155079
&gt; &gt; 
&gt; &gt; I do not think that implementing Web Sockets elsewhere and pushing it into
&gt; &gt; Bugzilla just for landing will work smoothly.
&gt; 
&gt; I&apos;m not sure I agree.  WebKit developers often seem to write the entire
&gt; implementation, break it into patches, discuss each patch on its own merit, and
&gt; iterate.  I believe that&apos;s precisely what&apos;s happening here.

Yes, I&apos;ve just uploaded my work-in-progress code to codereview.chromium.org  just to be shared with other people before ready to review in webkit.
I won&apos;t try to push it for landing.  I&apos;ll try to break it into patches (like this bug), discuss each patch and iterate. 

&gt; 
&gt; &gt; The most interesting aspect of WebSockets implementation, and one that I didn&apos;t
&gt; &gt; see discussed yet, is what kind of back-end we need. It is not clear whether
&gt; &gt; existing HTTP back-ends for supported platforms allow for the level of control
&gt; &gt; needed for Web Sockets - it is possible that we&apos;ll actually need a new
&gt; &gt; cross-platform HTTP implementation for these.
&gt; 
&gt; My understanding is that this code has been tested end-to-end on at least one
&gt; platform, so it&apos;s possible that won&apos;t be necessary.
&gt; 
&gt; If, however, there are http stack limitations, Chromium recently wrote a cross
&gt; platform network stack that might be useful here.  It&apos;s my understanding that
&gt; it was written to have minimal dependencies on Chromium as well.
&gt; 
&gt; But aren&apos;t we getting ahead of ourselves?  This bug is for adding the idl
&gt; files.  This needs to happen whether or not radical changes to the http
&gt; implementation are necessary, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135515</commentid>
    <comment_count>12</comment_count>
      <attachid>33698</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-07-29 00:57:19 -0700</bug_when>
    <thetext>Created attachment 33698
add WebSocket.idl and js binding classes.


---
 7 files changed, 619 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135947</commentid>
    <comment_count>13</comment_count>
      <attachid>33698</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-30 12:50:43 -0700</bug_when>
    <thetext>Comment on attachment 33698
add WebSocket.idl and js binding classes.

I think that the patch should also update project files for all build systems (or at the very least, Mac). If the code is not functional as is, it should be guarded with ENABLE() ifdefs.

&gt; +JSWebSocketConstructor::JSWebSocketConstructor(ExecState* exec, JSDOMGlobalObject* globalObject)
&gt; +        : DOMConstructorObject(JSWebSocketConstructor::createStructure(globalObject-&gt;objectPrototype()), globalObject)

Please use 4 spaces to indent.

&gt; +{
&gt; +    putDirect(exec-&gt;propertyNames().prototype, JSWebSocketPrototype::self(exec, globalObject), None);
&gt; +}

Looking at existing constructors, I believe you may also need to add a length property.

&gt; +    RefPtr&lt;WebSocket&gt; websocket = WebSocket::create(context);

&quot;Websocket&quot; is not a word, please capitalize the variable name accordingly (webSocket).

&gt; +        const String protocol = args.at(1).toString(exec);

I think you intended to assign to a reference here.

Please add a test for what happens when toString() raises an exception for either argument. Also, I&apos;m not sure exactly what behavior is intended here, but you may need to consider null arguments, not just undefined ones.

&gt; +        websocket-&gt;connect(url, protocol, ec);

Why is ec ignored?

&gt; +    // TODO(ukai): garbage collection policy?

We use FIXME comments which say what exactly is wrong with the code. It is not clear how others could use this comment.

&gt; +    if (m_impl-&gt;readyState() != WebSocket::CLOSED)
&gt; +        markIfNotNull(m_impl-&gt;onmessage());
&gt; +    // EventListeners?

Ditto.

&gt; +    JSValue ret = jsBoolean(impl()-&gt;send(args.at(0).toString(exec), ec));

What happens if toString raises an exception? Please add a test (if the code is not functional as is, please try to add it locally for later submission, let&apos;s just not forget about it).

&gt; +// TODO(ukai): addEventListener/removeEventListener?

Should be a FIXME, explaining what needs to be done (is it just unfinished code that can be pretty much copied from elsewhere, or something that needs to be carefully considered first?)
&gt; +WebSocket::WebSocket(ScriptExecutionContext* context)
&gt; +        : ActiveDOMObject(context, this)
&gt; +        , m_state(CONNECTING)
&gt; +        , m_protocol(&quot;&quot;)

Please use 4-space indentation.

&gt; +    m_url = url.copy();

Why copy the URL? As a comment in KURL.h explains, this is only needed if you intend to use the KURL object on another thread.

&gt; +    notImplemented();

No need to use notImplemented in cross-platform code that&apos;s just unfinished - it&apos;s helpful for port maintainers to learn what unimplemented code paths they hit, but not in this case.

Multiple TODOs in this file that need to be FIXMEs.

&gt; +class WebSocket : public RefCounted&lt;WebSocket&gt;, public EventTarget, public ActiveDOMObject {

Inheriting from ActiveDOMObject is needed when you want to use its GC protection features. Is this the plan?

&gt; +    // avoid error: request for member &apos;deref&apos; is ambiguous.
&gt; +    using RefCounted&lt;WebSocket&gt;::ref;
&gt; +    using RefCounted&lt;WebSocket&gt;::deref;

This is something we routinely do in other code, probably no need to specifically comment here. If you prefer to keep this comment, please turn it into a full sentence starting with a capital letter.

This looks pretty good to me, but r- for now, since there are quite a few comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136606</commentid>
    <comment_count>14</comment_count>
      <attachid>33966</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-03 02:26:09 -0700</bug_when>
    <thetext>Created attachment 33966
Add WebSocket.idl and js binding classes.


---
 10 files changed, 678 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136607</commentid>
    <comment_count>15</comment_count>
      <attachid>33967</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-03 02:35:49 -0700</bug_when>
    <thetext>Created attachment 33967
add WebSocket.idl and js binding classes


---
 10 files changed, 680 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136609</commentid>
    <comment_count>16</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-03 02:43:15 -0700</bug_when>
    <thetext>(In reply to comment #13)

Thanks for review!

&gt; (From update of attachment 33698 [details])
&gt; I think that the patch should also update project files for all build systems
&gt; (or at the very least, Mac). If the code is not functional as is, it should be
&gt; guarded with ENABLE() ifdefs.

I updated build system (for GNUmakefile.am and WebCore.xcodeproj).

&gt; 
&gt; &gt; +JSWebSocketConstructor::JSWebSocketConstructor(ExecState* exec, JSDOMGlobalObject* globalObject)
&gt; &gt; +        : DOMConstructorObject(JSWebSocketConstructor::createStructure(globalObject-&gt;objectPrototype()), globalObject)
&gt; 
&gt; Please use 4 spaces to indent.

Fixed.

&gt; 
&gt; &gt; +{
&gt; &gt; +    putDirect(exec-&gt;propertyNames().prototype, JSWebSocketPrototype::self(exec, globalObject), None);
&gt; &gt; +}
&gt; 
&gt; Looking at existing constructors, I believe you may also need to add a length
&gt; property.

A length property is used for a number of expected arguments, so we should set 1 for WebSocket?

&gt; 
&gt; &gt; +    RefPtr&lt;WebSocket&gt; websocket = WebSocket::create(context);
&gt; 
&gt; &quot;Websocket&quot; is not a word, please capitalize the variable name accordingly
&gt; (webSocket).

Fixed.

&gt; 
&gt; &gt; +        const String protocol = args.at(1).toString(exec);
&gt; 
&gt; I think you intended to assign to a reference here.

Yes, Fixed.

&gt; 
&gt; Please add a test for what happens when toString() raises an exception for
&gt; either argument. Also, I&apos;m not sure exactly what behavior is intended here, but
&gt; you may need to consider null arguments, not just undefined ones.

Added check code for exceptions and null.

&gt; 
&gt; &gt; +        websocket-&gt;connect(url, protocol, ec);
&gt; 
&gt; Why is ec ignored?

Added setDOMException.

&gt; 
&gt; &gt; +    // TODO(ukai): garbage collection policy?
&gt; 
&gt; We use FIXME comments which say what exactly is wrong with the code. It is not
&gt; clear how others could use this comment.

Ok.  Changed them to FIXME.

&gt; 
&gt; &gt; +    if (m_impl-&gt;readyState() != WebSocket::CLOSED)
&gt; &gt; +        markIfNotNull(m_impl-&gt;onmessage());
&gt; &gt; +    // EventListeners?
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; +    JSValue ret = jsBoolean(impl()-&gt;send(args.at(0).toString(exec), ec));
&gt; 
&gt; What happens if toString raises an exception? Please add a test (if the code is
&gt; not functional as is, please try to add it locally for later submission, let&apos;s
&gt; just not forget about it).

Sure.

&gt; 
&gt; &gt; +// TODO(ukai): addEventListener/removeEventListener?
&gt; 
&gt; Should be a FIXME, explaining what needs to be done (is it just unfinished code
&gt; that can be pretty much copied from elsewhere, or something that needs to be
&gt; carefully considered first?)

I think it can be pretty much copied from elsewhere.  Should I include them now?

&gt; &gt; +WebSocket::WebSocket(ScriptExecutionContext* context)
&gt; &gt; +        : ActiveDOMObject(context, this)
&gt; &gt; +        , m_state(CONNECTING)
&gt; &gt; +        , m_protocol(&quot;&quot;)
&gt; 
&gt; Please use 4-space indentation.

Fixed.

&gt; 
&gt; &gt; +    m_url = url.copy();
&gt; 
&gt; Why copy the URL? As a comment in KURL.h explains, this is only needed if you
&gt; intend to use the KURL object on another thread.

Fixed.

&gt; 
&gt; &gt; +    notImplemented();
&gt; 
&gt; No need to use notImplemented in cross-platform code that&apos;s just unfinished -
&gt; it&apos;s helpful for port maintainers to learn what unimplemented code paths they
&gt; hit, but not in this case.

I see.  Just marked with FIXME comments.

&gt; 
&gt; Multiple TODOs in this file that need to be FIXMEs.
&gt; 
&gt; &gt; +class WebSocket : public RefCounted&lt;WebSocket&gt;, public EventTarget, public ActiveDOMObject {
&gt; 
&gt; Inheriting from ActiveDOMObject is needed when you want to use its GC
&gt; protection features. Is this the plan?

I think we need to use GC protection as XMLHttpRequest does.  What do you think of?

&gt; 
&gt; &gt; +    // avoid error: request for member &apos;deref&apos; is ambiguous.
&gt; &gt; +    using RefCounted&lt;WebSocket&gt;::ref;
&gt; &gt; +    using RefCounted&lt;WebSocket&gt;::deref;
&gt; 
&gt; This is something we routinely do in other code, probably no need to
&gt; specifically comment here. If you prefer to keep this comment, please turn it
&gt; into a full sentence starting with a capital letter.

Ok, removed the comment.

&gt; 
&gt; This looks pretty good to me, but r- for now, since there are quite a few
&gt; comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136712</commentid>
    <comment_count>17</comment_count>
      <attachid>33967</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-03 10:55:49 -0700</bug_when>
    <thetext>Comment on attachment 33967
add WebSocket.idl and js binding classes


&gt; +static JSObject* constructWebSocket(ExecState* exec, JSObject* constructor, const ArgList&amp; args)
&gt; +{
&gt; +    JSWebSocketConstructor* jsConstructor = static_cast&lt;JSWebSocketConstructor*&gt;(constructor);
&gt; +    ScriptExecutionContext* context = jsConstructor-&gt;scriptExecutionContext();
&gt; +    if (!context)
&gt; +        return throwError(exec, ReferenceError, &quot;WebSocket constructor associated document is unavailable&quot;);
&gt; +
&gt; +    if (args.size() == 0)
&gt; +        return throwError(exec, SyntaxError, &quot;Not enough arguments&quot;);
&gt; +
&gt; +    if (args.at(0).isUndefined())
&gt; +        return throwError(exec, SyntaxError, &quot;undefined URL&quot;);

I don&apos;t think this is necessary.  toStringing undefined will work fine.

&gt; +
&gt; +    const String&amp; urlString = args.at(0).toString(exec);
&gt; +    if (exec-&gt;hadException())
&gt; +        return throwError(exec, SyntaxError, &quot;wrong URL&quot;);
&gt; +    const KURL&amp; url = context-&gt;completeURL(urlString);
&gt; +    RefPtr&lt;WebSocket&gt; webSocket = WebSocket::create(context);
&gt; +    ExceptionCode ec = 0;
&gt; +    if (args.size() &lt; 2)
&gt; +        webSocket-&gt;connect(url, ec);
&gt; +    else {
&gt; +        if (args.at(1).isUndefined())
&gt; +            return throwError(exec, SyntaxError, &quot;protocol is undefined&quot;);

This also seems unnecessary.


&gt; +        const String&amp; protocol = args.at(1).toString(exec);
&gt; +        if (exec-&gt;hadException())
&gt; +            return throwError(exec, SyntaxError, &quot;wrong protocol&quot;);

I don&apos;t understand this exception.  We should just propagate the existing exception that was thrown by returning jsUndefined.

&gt; +        if (!protocol.length())
&gt; +            return throwError(exec, SyntaxError, &quot;protocol is empty&quot;);

This also seems unnecessary.

&gt; +        webSocket-&gt;connect(url, protocol, ec);
&gt; +    }
&gt; +    setDOMException(exec, ec);
&gt; +    return CREATE_DOM_OBJECT_WRAPPER(exec, jsConstructor-&gt;globalObject(), WebSocket, webSocket.get());
&gt; +}
&gt; +</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136716</commentid>
    <comment_count>18</comment_count>
      <attachid>33967</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-03 11:01:18 -0700</bug_when>
    <thetext>Comment on attachment 33967
add WebSocket.idl and js binding classes

&gt; +    putDirect(exec-&gt;propertyNames().length, jsNumber(exec, 1), ReadOnly|DontDelete|DontEnum);

Per the coding style, there should be spaces around binary operators.

I do not have a good answer to your question - comparing with existing code, it seems ok, but it may be worth asking JS experts.

&gt; +    // FIXME(ukai): mark if EventListeners is registered.

We also don&apos;t use names in FIXME comments - if it becomes really necessary who added a comment, one can use svn blame, but it&apos;s rarely interesting.

&gt; +    , m_protocol(&quot;&quot;)

What&apos;s the difference between null and empty m_protocol? Is this initialization really necessary?

&gt; +WebSocket::~WebSocket()
&gt; +{
&gt; +    if (m_state != CLOSED)
&gt; +        close();
&gt; +}

There&apos;s a check for m_state inside close() already.

&gt; I updated build system (for GNUmakefile.am and WebCore.xcodeproj).

You could add a ChangeLog comment explaining that other build systems will be updated once the code is functional, to avoid confusing people into thinking that we forgot about other build systems.

&gt; &gt; &gt; +// TODO(ukai): addEventListener/removeEventListener?
&gt; &gt; 
&gt; I think it can be pretty much copied from elsewhere.  Should I include them
&gt; now?

Either way is ok with me.

&gt; I think we need to use GC protection as XMLHttpRequest does.  What do you think
&gt; of?

Sure, sounds good. I was asking only because no ACtiveDOMObject methods were being called, but of course, most of implementation is not here yet.

Combined with Sam&apos;s comments, it seems that another quick review round would be useful, so r- for now. Thanks for updating the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136894</commentid>
    <comment_count>19</comment_count>
      <attachid>34035</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-03 21:45:18 -0700</bug_when>
    <thetext>Created attachment 34035
Add WebSocket.idl and js binding classes


---
 10 files changed, 675 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136895</commentid>
    <comment_count>20</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-03 21:47:11 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 33967 [details])
&gt; 
&gt; &gt; +static JSObject* constructWebSocket(ExecState* exec, JSObject* constructor, const ArgList&amp; args)
&gt; &gt; +{
&gt; &gt; +    JSWebSocketConstructor* jsConstructor = static_cast&lt;JSWebSocketConstructor*&gt;(constructor);
&gt; &gt; +    ScriptExecutionContext* context = jsConstructor-&gt;scriptExecutionContext();
&gt; &gt; +    if (!context)
&gt; &gt; +        return throwError(exec, ReferenceError, &quot;WebSocket constructor associated document is unavailable&quot;);
&gt; &gt; +
&gt; &gt; +    if (args.size() == 0)
&gt; &gt; +        return throwError(exec, SyntaxError, &quot;Not enough arguments&quot;);
&gt; &gt; +
&gt; &gt; +    if (args.at(0).isUndefined())
&gt; &gt; +        return throwError(exec, SyntaxError, &quot;undefined URL&quot;);
&gt; 
&gt; I don&apos;t think this is necessary.  toStringing undefined will work fine.

Fixed.
&gt; 
&gt; &gt; +
&gt; &gt; +    const String&amp; urlString = args.at(0).toString(exec);
&gt; &gt; +    if (exec-&gt;hadException())
&gt; &gt; +        return throwError(exec, SyntaxError, &quot;wrong URL&quot;);
&gt; &gt; +    const KURL&amp; url = context-&gt;completeURL(urlString);
&gt; &gt; +    RefPtr&lt;WebSocket&gt; webSocket = WebSocket::create(context);
&gt; &gt; +    ExceptionCode ec = 0;
&gt; &gt; +    if (args.size() &lt; 2)
&gt; &gt; +        webSocket-&gt;connect(url, ec);
&gt; &gt; +    else {
&gt; &gt; +        if (args.at(1).isUndefined())
&gt; &gt; +            return throwError(exec, SyntaxError, &quot;protocol is undefined&quot;);
&gt; 
&gt; This also seems unnecessary.

Fixed.
&gt; 
&gt; 
&gt; &gt; +        const String&amp; protocol = args.at(1).toString(exec);
&gt; &gt; +        if (exec-&gt;hadException())
&gt; &gt; +            return throwError(exec, SyntaxError, &quot;wrong protocol&quot;);
&gt; 
&gt; I don&apos;t understand this exception.  We should just propagate the existing
&gt; exception that was thrown by returning jsUndefined.

Fixed.
&gt; 
&gt; &gt; +        if (!protocol.length())
&gt; &gt; +            return throwError(exec, SyntaxError, &quot;protocol is empty&quot;);
&gt; 
&gt; This also seems unnecessary.

WebSocket API spec says:
If protocol is specified but is either the empty string or contains characters that are not in the range U+0021 .. U+007E, then throw a SYNTAX_ERR  exception. 

So, I think we need to throw SyntaxErr exception when protocol is an empty string, isn&apos;t it?

&gt; 
&gt; &gt; +        webSocket-&gt;connect(url, protocol, ec);
&gt; &gt; +    }
&gt; &gt; +    setDOMException(exec, ec);
&gt; &gt; +    return CREATE_DOM_OBJECT_WRAPPER(exec, jsConstructor-&gt;globalObject(), WebSocket, webSocket.get());
&gt; &gt; +}
&gt; &gt; +</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136896</commentid>
    <comment_count>21</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-03 21:48:50 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 33967 [details])
&gt; &gt; +    putDirect(exec-&gt;propertyNames().length, jsNumber(exec, 1), ReadOnly|DontDelete|DontEnum);
&gt; 
&gt; Per the coding style, there should be spaces around binary operators.
&gt; 
&gt; I do not have a good answer to your question - comparing with existing code, it
&gt; seems ok, but it may be worth asking JS experts.
&gt; 
&gt; &gt; +    // FIXME(ukai): mark if EventListeners is registered.
&gt; 
&gt; We also don&apos;t use names in FIXME comments - if it becomes really necessary who
&gt; added a comment, one can use svn blame, but it&apos;s rarely interesting.

Fixed.

&gt; 
&gt; &gt; +    , m_protocol(&quot;&quot;)
&gt; 
&gt; What&apos;s the difference between null and empty m_protocol? Is this initialization
&gt; really necessary?

Hmm, may be not necessary.

&gt; 
&gt; &gt; +WebSocket::~WebSocket()
&gt; &gt; +{
&gt; &gt; +    if (m_state != CLOSED)
&gt; &gt; +        close();
&gt; &gt; +}
&gt; 
&gt; There&apos;s a check for m_state inside close() already.

Thanks. Fixed.

&gt; 
&gt; &gt; I updated build system (for GNUmakefile.am and WebCore.xcodeproj).
&gt; 
&gt; You could add a ChangeLog comment explaining that other build systems will be
&gt; updated once the code is functional, to avoid confusing people into thinking
&gt; that we forgot about other build systems.

I see. added a ChangeLog comment.

&gt; 
&gt; &gt; &gt; &gt; +// TODO(ukai): addEventListener/removeEventListener?
&gt; &gt; &gt; 
&gt; &gt; I think it can be pretty much copied from elsewhere.  Should I include them
&gt; &gt; now?
&gt; 
&gt; Either way is ok with me.
&gt; 
&gt; &gt; I think we need to use GC protection as XMLHttpRequest does.  What do you think
&gt; &gt; of?
&gt; 
&gt; Sure, sounds good. I was asking only because no ACtiveDOMObject methods were
&gt; being called, but of course, most of implementation is not here yet.
&gt; 
&gt; Combined with Sam&apos;s comments, it seems that another quick review round would be
&gt; useful, so r- for now. Thanks for updating the patch!

Thanks for review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137065</commentid>
    <comment_count>22</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-04 11:10:19 -0700</bug_when>
    <thetext>&gt; &gt; &gt; +        if (!protocol.length())
&gt; &gt; &gt; +            return throwError(exec, SyntaxError, &quot;protocol is empty&quot;);
&gt; &gt; 
&gt; &gt; This also seems unnecessary.
&gt; 
&gt; WebSocket API spec says:
&gt; If protocol is specified but is either the empty string or contains characters
&gt; that are not in the range U+0021 .. U+007E, then throw a SYNTAX_ERR  exception. 
&gt; 
&gt; So, I think we need to throw SyntaxErr exception when protocol is an empty
&gt; string, isn&apos;t it?

This is actually saying you should throw a DOM exception of type SYNTAX_ERR, which is subtly different.  This should probably be handled in the DOM code and not in the bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137072</commentid>
    <comment_count>23</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-04 11:38:32 -0700</bug_when>
    <thetext>The rest of the patch looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137233</commentid>
    <comment_count>24</comment_count>
      <attachid>34112</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-04 19:12:57 -0700</bug_when>
    <thetext>Created attachment 34112
Add WebSocket.idl and js binding classes


---
 10 files changed, 678 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137234</commentid>
    <comment_count>25</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-04 19:13:58 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; &gt; &gt; &gt; +        if (!protocol.length())
&gt; &gt; &gt; &gt; +            return throwError(exec, SyntaxError, &quot;protocol is empty&quot;);
&gt; &gt; &gt; 
&gt; &gt; &gt; This also seems unnecessary.
&gt; &gt; 
&gt; &gt; WebSocket API spec says:
&gt; &gt; If protocol is specified but is either the empty string or contains characters
&gt; &gt; that are not in the range U+0021 .. U+007E, then throw a SYNTAX_ERR  exception. 
&gt; &gt; 
&gt; &gt; So, I think we need to throw SyntaxErr exception when protocol is an empty
&gt; &gt; string, isn&apos;t it?
&gt; 
&gt; This is actually saying you should throw a DOM exception of type SYNTAX_ERR,
&gt; which is subtly different.  This should probably be handled in the DOM code and
&gt; not in the bindings.

Ah, I see.
I fixed it to DOM exception.
Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137390</commentid>
    <comment_count>26</comment_count>
      <attachid>34112</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-05 12:51:39 -0700</bug_when>
    <thetext>Comment on attachment 34112
Add WebSocket.idl and js binding classes

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137525</commentid>
    <comment_count>27</comment_count>
      <attachid>34112</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-05 23:00:04 -0700</bug_when>
    <thetext>Comment on attachment 34112
Add WebSocket.idl and js binding classes

The commit-queue says this patch does not build:

    /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -fpascal-strings -fasm-blocks -O0 -Werror -Wnon-virtual-dtor -Wnewline-eof -DDISABLE_THREAD_CHECK -DENABLE_3D_RENDERING -DENABLE_CHANNEL_MESSAGING -DENABLE_DATABASE -DENABLE_DATAGRID -DENABLE_DOM_STORAGE -DENABLE_ICONDATABASE -DENABLE_JAVASCRIPT_DEBUGGER -DENABLE_OFFLINE_WEB_APPLICATIONS -DENABLE_RUBY -DENABLE_SVG -DENABLE_SVG_ANIMATION -DENABLE_SVG_AS_IMAGE -DENABLE_SVG_DOM_OBJC_BINDINGS -DENABLE_SVG_FONTS -DENABLE_SVG_FOREIGN_OBJECT -DENABLE_SVG_USE -DENABLE_VIDEO -DENABLE_WEB_SOCKETS -DENABLE_WORKERS -DENABLE_XPATH -DENABLE_XSLT -DWEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -I/Users/abarth/git/webkit/WebKitBuild/WebCore.build/Debug/WebCore.build/WebCore.hmap -Wall -Wextra -Wcast-align -Wcast-qual -Wchar-subscripts -Wextra-tokens -Wformat=2 -Winit-self -Wmissing-format-attribute -Wmissing-noreturn -Wpacked -Wpointer-arith -Wredundant-decls -Wundef -Wwrite-strings -Wshorten-64-to-32 -F/Users/abarth/git/webkit/WebKitBuild/Debug -F/System/Library/Frameworks/Carbon.framework/Frameworks -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks -I/Users/abarth/git/webkit/WebKitBuild/Debug/include -IForwardingHeaders -Iicu -I/usr/include/libxslt -I/usr/include/libxml2 -I/Users/abarth/git/webkit/WebKitBuild/Debug/WebCoreSQLite3 -I/Users/abarth/git/webkit/WebKitBuild/Debug/DerivedSources/WebCore -I/Users/abarth/git/webkit/WebKitBuild/WebCore.build/Debug/WebCore.build/DerivedSources/i386 -I/Users/abarth/git/webkit/WebKitBuild/WebCore.build/Debug/WebCore.build/DerivedSources -include /var/folders/qt/qthS2Td+ExiMdusUTSRQrE+++TI/-Caches-/com.apple.Xcode.501/SharedPrecompiledHeaders/WebCorePrefix-diivbhagnqkgohdrnsdwdkawzyxk/WebCorePrefix.h -c /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp -o /Users/abarth/git/webkit/WebKitBuild/WebCore.build/Debug/WebCore.build/Objects-normal/i386/WebSocket.o
cc1plus: warnings being treated as errors
/Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:79: warning: unused parameter ‘message’
/Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:118: warning: unused parameter ‘eventType’
/Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:118: warning: unused parameter ‘listener’
/Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:118: warning: unused parameter ‘useCapture’
/Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:123: warning: unused parameter ‘eventType’
/Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:123: warning: unused parameter ‘listener’
/Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:123: warning: unused parameter ‘useCapture’
/Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:128: warning: unused parameter ‘event’
/Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:128: warning: unused parameter ‘ec’
/Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:162: warning: unused parameter ‘msg’</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137533</commentid>
    <comment_count>28</comment_count>
      <attachid>34202</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-05 23:39:18 -0700</bug_when>
    <thetext>Created attachment 34202
Add WebSocket.idl and js binding classes


---
 10 files changed, 678 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137534</commentid>
    <comment_count>29</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-05 23:40:15 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 34112 [details])
&gt; The commit-queue says this patch does not build:
&gt; 
&gt;     /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe
&gt; -Wno-trigraphs -fno-exceptions -fno-rtti -fpascal-strings -fasm-blocks -O0
&gt; -Werror -Wnon-virtual-dtor -Wnewline-eof -DDISABLE_THREAD_CHECK
&gt; -DENABLE_3D_RENDERING -DENABLE_CHANNEL_MESSAGING -DENABLE_DATABASE
&gt; -DENABLE_DATAGRID -DENABLE_DOM_STORAGE -DENABLE_ICONDATABASE
&gt; -DENABLE_JAVASCRIPT_DEBUGGER -DENABLE_OFFLINE_WEB_APPLICATIONS -DENABLE_RUBY
&gt; -DENABLE_SVG -DENABLE_SVG_ANIMATION -DENABLE_SVG_AS_IMAGE
&gt; -DENABLE_SVG_DOM_OBJC_BINDINGS -DENABLE_SVG_FONTS -DENABLE_SVG_FOREIGN_OBJECT
&gt; -DENABLE_SVG_USE -DENABLE_VIDEO -DENABLE_WEB_SOCKETS -DENABLE_WORKERS
&gt; -DENABLE_XPATH -DENABLE_XSLT
&gt; -DWEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST -fvisibility-inlines-hidden
&gt; -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2
&gt; -I/Users/abarth/git/webkit/WebKitBuild/WebCore.build/Debug/WebCore.build/WebCore.hmap
&gt; -Wall -Wextra -Wcast-align -Wcast-qual -Wchar-subscripts -Wextra-tokens
&gt; -Wformat=2 -Winit-self -Wmissing-format-attribute -Wmissing-noreturn -Wpacked
&gt; -Wpointer-arith -Wredundant-decls -Wundef -Wwrite-strings -Wshorten-64-to-32
&gt; -F/Users/abarth/git/webkit/WebKitBuild/Debug
&gt; -F/System/Library/Frameworks/Carbon.framework/Frameworks
&gt; -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks
&gt; -I/Users/abarth/git/webkit/WebKitBuild/Debug/include -IForwardingHeaders -Iicu
&gt; -I/usr/include/libxslt -I/usr/include/libxml2
&gt; -I/Users/abarth/git/webkit/WebKitBuild/Debug/WebCoreSQLite3
&gt; -I/Users/abarth/git/webkit/WebKitBuild/Debug/DerivedSources/WebCore
&gt; -I/Users/abarth/git/webkit/WebKitBuild/WebCore.build/Debug/WebCore.build/DerivedSources/i386
&gt; -I/Users/abarth/git/webkit/WebKitBuild/WebCore.build/Debug/WebCore.build/DerivedSources
&gt; -include
&gt; /var/folders/qt/qthS2Td+ExiMdusUTSRQrE+++TI/-Caches-/com.apple.Xcode.501/SharedPrecompiledHeaders/WebCorePrefix-diivbhagnqkgohdrnsdwdkawzyxk/WebCorePrefix.h
&gt; -c /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp -o
&gt; /Users/abarth/git/webkit/WebKitBuild/WebCore.build/Debug/WebCore.build/Objects-normal/i386/WebSocket.o
&gt; cc1plus: warnings being treated as errors
&gt; /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:79: warning: unused
&gt; parameter ‘message’
&gt; /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:118: warning: unused
&gt; parameter ‘eventType’
&gt; /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:118: warning: unused
&gt; parameter ‘listener’
&gt; /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:118: warning: unused
&gt; parameter ‘useCapture’
&gt; /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:123: warning: unused
&gt; parameter ‘eventType’
&gt; /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:123: warning: unused
&gt; parameter ‘listener’
&gt; /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:123: warning: unused
&gt; parameter ‘useCapture’
&gt; /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:128: warning: unused
&gt; parameter ‘event’
&gt; /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:128: warning: unused
&gt; parameter ‘ec’
&gt; /Users/abarth/git/webkit/WebCore/websockets/WebSocket.cpp:162: warning: unused
&gt; parameter ‘msg’

Omit the unused parameter names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137536</commentid>
    <comment_count>30</comment_count>
      <attachid>34202</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-05 23:50:16 -0700</bug_when>
    <thetext>Comment on attachment 34202
Add WebSocket.idl and js binding classes

rs=me, assuming this is the same patch as before with the extra parameter names removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137635</commentid>
    <comment_count>31</comment_count>
      <attachid>34202</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-06 13:30:44 -0700</bug_when>
    <thetext>Comment on attachment 34202
Add WebSocket.idl and js binding classes

2 out of 7 hunks FAILED -- saving rejects to file WebCore/WebCore.xcodeproj/project.pbxproj.rej
patch -p0 &quot;WebCore/WebCore.xcodeproj/project.pbxproj&quot; returned 1.  Pass --force to ignore patch failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137638</commentid>
    <comment_count>32</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-08-06 13:35:57 -0700</bug_when>
    <thetext>I&apos;ll just land this manually.

Assigning to myself for landing.

I assume landing is fine since the only reason it&apos;s marked review- is because the commit queue script choked on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137642</commentid>
    <comment_count>33</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-06 13:45:02 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; I&apos;ll just land this manually.
&gt; 
&gt; Assigning to myself for landing.
&gt; 
&gt; I assume landing is fine since the only reason it&apos;s marked review- is because
&gt; the commit queue script choked on it.

Yeah.  Thanks Jeremy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137669</commentid>
    <comment_count>34</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-08-06 15:09:06 -0700</bug_when>
    <thetext>I just fixed the failed hunk issues and am building now.

Fumitoshi, I noticed that the diff style was pretty weird.  Could you make sure that whatever&apos;s generating it is using a more standard universal diff format?

I also noticed that the ChangeLog mentioned methods in newly added Files.  I triple checked with Dimitri (the first two checks were to myself :-) and he said that these are generally avoided, so I deleted them.

Lastly, I noticed that this does not define anything for visual studio.  Is this an oversight?  If it builds and runs the tests correctly and no one&apos;s responded to this with a &quot;hold on!&quot; by the time that&apos;s done, I&apos;ll commit as is an assume that&apos;ll be changed in another patch.  Sound good?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137675</commentid>
    <comment_count>35</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-08-06 15:33:52 -0700</bug_when>
    <thetext>Landed  in 46864</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137771</commentid>
    <comment_count>36</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-08-06 20:49:29 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; I just fixed the failed hunk issues and am building now.

Thanks for landing!

&gt; 
&gt; Fumitoshi, I noticed that the diff style was pretty weird.  Could you make sure
&gt; that whatever&apos;s generating it is using a more standard universal diff format?

I just used WebKitTools/Scripts/bugzilla-tool post-commits from git repository.
Do I need some configuration?
 
&gt; I also noticed that the ChangeLog mentioned methods in newly added Files.  I
&gt; triple checked with Dimitri (the first two checks were to myself :-) and he
&gt; said that these are generally avoided, so I deleted them.

Thanks.
 
&gt; Lastly, I noticed that this does not define anything for visual studio.  Is
&gt; this an oversight?  If it builds and runs the tests correctly and no one&apos;s
&gt; responded to this with a &quot;hold on!&quot; by the time that&apos;s done, I&apos;ll commit as is
&gt; an assume that&apos;ll be changed in another patch.  Sound good?

Sounds good.
I&apos;ll add other platform build in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137779</commentid>
    <comment_count>37</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-08-06 21:03:02 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; I just used WebKitTools/Scripts/bugzilla-tool post-commits from git repository.
&gt; Do I need some configuration?

Well, if Bugzilla tool did it, I guess maybe that&apos;s the new style they want people to use or something?  Hm...donno.  I guess don&apos;t worry about it

&gt; &gt; Lastly, I noticed that this does not define anything for visual studio.  Is
&gt; &gt; this an oversight?  If it builds and runs the tests correctly and no one&apos;s
&gt; &gt; responded to this with a &quot;hold on!&quot; by the time that&apos;s done, I&apos;ll commit as is
&gt; &gt; an assume that&apos;ll be changed in another patch.  Sound good?
&gt; 
&gt; Sounds good.
&gt; I&apos;ll add other platform build in another patch.

Be sure to cc mrowe@apple.com on the patch.  He did some fix-up of the xcode project file after I committed things, so he might have some opinions on the visual studio one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137782</commentid>
    <comment_count>38</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-06 21:11:33 -0700</bug_when>
    <thetext>I wouldn&apos;t do this &quot;Be sure to cc mrowe@apple.com on the patch. &quot;

He doesn&apos;t like that much, but you can ping him in irc and ask him to take a look.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32653</attachid>
            <date>2009-07-13 02:13:46 -0700</date>
            <delta_ts>2009-07-14 03:16:48 -0700</delta_ts>
            <desc>Add WebSocket.idl</desc>
            <filename>bug-27209-20090713181345.patch</filename>
            <type>text/plain</type>
            <size>2887</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjI0ZjYzMS4uYjc3M2ExNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0wNy0xMyAgRnVtaXRvc2hpIFVr
YWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjcyMDkKKyAgICAgICAgQWRkIFdlYlNvY2tldC5pZGwgaW4gV2ViQ29yZS93ZWJzb2NrZXRzLwor
CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsOiBBZGRlZC4KKwogMjAwOS0wNy0x
MiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5pZGwgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQxM2YzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgd2Vic29j
a2V0cyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDdXN0b21NYXJrRnVuY3Rpb24sCisg
ICAgICAgIE5vU3RhdGljVGFibGVzCisgICAgXSBXZWJTb2NrZXQgeworICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIFVSTDsKKworICAgICAgICAvLyByZWFkeSBzdGF0ZQorICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05ORUNUSU5HID0gMDsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgT1BFTiA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENM
T1NFRCA9IDI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHJlYWR5U3RhdGU7CisK
KyAgICAgICAgLy8gbmV0d29ya2luZworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bm9wZW47CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubWVzc2FnZTsKKyAgICAg
ICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jbG9zZTsKKworICAgICAgICBbQ3VzdG9tXSB2
b2lkIHNlbmQoaW4gRE9NU3RyaW5nIGRhdGEpCisgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKyAgICB9OworfQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32705</attachid>
            <date>2009-07-14 03:16:52 -0700</date>
            <delta_ts>2009-07-16 23:03:00 -0700</delta_ts>
            <desc>add WebSocket.idl and its implementation and bindings</desc>
            <filename>bug-27209-20090714191651.patch</filename>
            <type>text/plain</type>
            <size>22928</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWY3MjEyZC4uYzlmY2IzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NCBAQAorMjAwOS0wNy0xNCAgRnVtaXRvc2hpIFVr
YWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjcyMDkKKyAgICAgICAgQWRkIFdlYlNvY2tldC5pZGwgaW4gV2ViQ29yZS93ZWJzb2NrZXRzLwor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29u
c3RydWN0b3I6OkpTV2ViU29ja2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb25zdHJ1Y3RXZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2Nr
ZXRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dl
YlNvY2tldENvbnN0cnVjdG9yOjptYXJrKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNv
Y2tldENvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRD
b25zdHJ1Y3Rvcjo6Y2xhc3NJbmZvKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tl
dEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXQ6Om1hcmsp
OgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXQ6OnNlbmQpOgorICAgICAgICAqIHdlYnNv
Y2tldHMvV2ViU29ja2V0LmlkbDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2Nr
ZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6V2ViU29ja2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6fldlYlNvY2tldCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXQ6OmNvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpz
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6Y2xvc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0Ojp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpyZWFk
eVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmFkZEV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJTb2NrZXQ6OmRpZENvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpk
aWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpZENsb3Nl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlzcGF0Y2hPcGVuRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaXNwYXRjaE1lc3NhZ2VFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpc3BhdGNoQ2xvc2VFdmVudCk6CisgICAgICAgICogd2Vi
c29ja2V0cy9XZWJTb2NrZXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6Oik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXQ6OnNldE9ub3Blbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6
Om9ub3Blbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnNldE9ubWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6Om9ubWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJTb2NrZXQ6OnNldE9uY2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpv
bmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6dG9XZWJTb2NrZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpyZWZFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXQ6OmRlcmVmRXZlbnRUYXJnZXQpOgorCiAyMDA5LTA3LTEzICBFcmlrIEFy
dmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIgYW5kIE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTJlNmZjZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJT
b2NrZXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTV2ViU29ja2V0Q29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkpTV2Vi
U29ja2V0LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUg
IldlYlNvY2tldC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBU1NFUlRfQ0xBU1NfRklUU19J
Tl9DRUxMKEpTV2ViU29ja2V0Q29uc3RydWN0b3IpOworCitjbGFzcyBDbGFzc0luZm8gSlNXZWJT
b2NrZXRDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiV2ViU29ja2V0Q29uc3RydWN0b3IiLCAwLCAw
LCAwIH07CisKK0pTV2ViU29ja2V0Q29uc3RydWN0b3I6OkpTV2ViU29ja2V0Q29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgICAg
ICA6IERPTU9iamVjdChKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCisgICAgICAgICwg
bV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1dlYlNvY2tldFByb3RvdHlwZTo6c2VsZihleGVjLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBOb25lKTsKK30KKworU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7Cit9CisKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0V2ViU29ja2V0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JikKK3sKKyAgICBp
ZiAoYXJncy5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOworCisgICAgaWYgKGFyZ3MuYXQoMCku
aXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IsICJ1bmRlZmluZWQgVVJMIik7CisKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0ID0gc3RhdGljX2Nhc3Q8SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgUmVmZXJlbmNlRXJyb3IsICJXZWJTb2NrZXQgY29uc3RydWN0
b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpOworCisgICAgY29uc3QgS1VS
TCYgdXJsID0gY29udGV4dC0+Y29tcGxldGVVUkwoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSk7
CisKKyAgICBSZWZQdHI8V2ViU29ja2V0PiB3ZWJzb2NrZXQgPSBXZWJTb2NrZXQ6OmNyZWF0ZShj
b250ZXh0KTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAoYXJncy5zaXplKCkg
PCAyKQorICAgICAgICB3ZWJzb2NrZXQtPmNvbm5lY3QodXJsLCBlYyk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGlmIChhcmdzLmF0KDEpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgInByb3RvY29sIGlzIHVuZGVmaW5lZCIpOwor
ICAgICAgICBjb25zdCBTdHJpbmcgcHJvdG9jb2wgPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMp
OworICAgICAgICBpZiAoIXByb3RvY29sLmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJwcm90b2NvbCBpcyBlbXB0eSIpOworICAgICAg
ICB3ZWJzb2NrZXQtPmNvbm5lY3QodXJsLCBwcm90b2NvbCwgZWMpOworICAgIH0KKyAgICByZXR1
cm4gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBXZWJTb2NrZXQsIHdlYnNvY2tldC5n
ZXQoKSk7Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6Z2V0Q29u
c3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVj
dERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0V2ViU29ja2V0OworICAgIHJldHVybiBD
b25zdHJ1Y3RUeXBlSG9zdDsKK30KKwordm9pZCBKU1dlYlNvY2tldENvbnN0cnVjdG9yOjptYXJr
KCkKK3sKKyAgICBET01PYmplY3Q6Om1hcmsoKTsKKyAgICBpZiAoIW1fZ2xvYmFsT2JqZWN0LT5t
YXJrZWQoKSkKKyAgICAgICAgbV9nbG9iYWxPYmplY3QtPm1hcmsoKTsKK30KKworCit9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNv
Y2tldENvbnN0cnVjdG9yLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3Ry
dWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU3MTc5Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9y
LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTV2ViU29ja2V0Q29uc3RydWN0b3JfaAorI2Rl
ZmluZSBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTV2ViU29ja2V0Q29uc3RydWN0b3Ig
OiBwdWJsaWMgRE9NT2JqZWN0IHsKKyAgcHVibGljOgorICAgIEpTV2ViU29ja2V0Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICBzdGF0aWMg
Y29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCisgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsK
KyAgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3RE
YXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKworICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAgLy8gSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcl9oCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmMwNDk0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
U29ja2V0Q3VzdG9tLmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU1dlYlNvY2tldC5oIgorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIldl
YlNvY2tldC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBKU1dlYlNvY2tldDo6bWFyaygp
Cit7CisgICAgQmFzZTo6bWFyaygpOworICAgIGlmIChtX2ltcGwtPnJlYWR5U3RhdGUoKSAhPSBX
ZWJTb2NrZXQ6OkNMT1NFRCkKKyAgICAgICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9ubWVzc2Fn
ZSgpKTsKK30KKworLy8gQ3VzdG9tIGZ1bmN0aW9ucworSlNWYWx1ZSBKU1dlYlNvY2tldDo6c2Vu
ZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Mu
c2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3Is
ICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaW1wbCgpLT5zZW5kKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIGVjKTsKKyAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCit9
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjczZDIxCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNvY2tldC5oIgorCisjaW5jbHVkZSAiRXZlbnQuaCIK
KyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYlNvY2tldDo6V2ViU29ja2V0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgICAgIDogQWN0aXZlRE9NT2JqZWN0KGNv
bnRleHQsIHRoaXMpCisgICAgICAgICwgbV9zdGF0ZShDT05ORUNUSU5HKQorICAgICAgICAsIG1f
cHJvdG9jb2woIiIpCit7Cit9CisKK1dlYlNvY2tldDo6fldlYlNvY2tldCgpCit7CisgICAgaWYg
KG1fc3RhdGUgIT0gQ0xPU0VEKQorICAgICAgICBjbG9zZSgpOworfQorCit2b2lkIFdlYlNvY2tl
dDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGNv
bm5lY3QodXJsLCAiIiwgZWMpOworfQorCit2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIG1fdXJsID0gdXJsLmNvcHkoKTsKKyAgICBtX3Byb3RvY29sID0gcHJvdG9jb2w7CisKKyAg
ICBpZiAoIW1fdXJsLnByb3RvY29sSXMoIndzIikgJiYgIW1fdXJsLnByb3RvY29sSXMoIndzcyIp
KSB7CisgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBUT0RPKHVrYWkpOiBDaGVjayBwcm90b2Nv
bCBpcyB2YWxpZCBmb3JtLgorICAgIC8vIFRPRE8odWthaSk6IENvbm5lY3QgV2ViU29ja2V0Q2hh
bm5lbC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6c2VuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChtX3N0
YXRlICE9IE9QRU4pIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBUT0RPKHVrYWkpOiBzZW5kIG1lc3NhZ2Ugb24gV2ViU29j
a2V0Q2hhbm5lbC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6
Y2xvc2UoKQoreworICAgIGlmIChtX3N0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgLy8gVE9ETyh1a2FpKTogY2xvc2UgV2ViU29ja2V0
Q2hhbm5lbC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitjb25zdCBLVVJMJiBXZWJTb2Nr
ZXQ6OnVybCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsOworfQorCitXZWJTb2NrZXQ6OlN0
YXRlIFdlYlNvY2tldDo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGU7
Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdlYlNvY2tldDo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6YWRkRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViU29ja2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViU29ja2V0OjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRp
ZENvbm5lY3QoKQoreworICAgIGlmIChtX3N0YXRlICE9IENPTk5FQ1RJTkcpIHsKKyAgICAgICAg
ZGlkQ2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3N0YXRlID0gT1BFTjsK
KyAgICBkaXNwYXRjaE9wZW5FdmVudCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6ZGlkUmVjZWl2
ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtc2cpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gT1BFTikK
KyAgICAgICAgcmV0dXJuOworICAgIGRpc3BhdGNoTWVzc2FnZUV2ZW50KG1zZyk7Cit9CisKK3Zv
aWQgV2ViU29ja2V0OjpkaWRDbG9zZSgpCit7CisgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICBk
aXNwYXRjaENsb3NlRXZlbnQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRpc3BhdGNoT3BlbkV2
ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6ZGlz
cGF0Y2hNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBtc2cpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRpc3BhdGNoQ2xvc2VFdmVudCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaCBiL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGZmMzk3Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCkBAIC0wLDAg
KzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViU29ja2V0X2gKKyNkZWZpbmUgV2ViU29ja2V0X2gKKworI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIK
KyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNp
bmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOworY2xh
c3MgV2ViU29ja2V0Q2hhbm5lbDsKKworY2xhc3MgV2ViU29ja2V0IDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViU29ja2V0PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJTb2NrZXQ+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgV2ViU29j
a2V0KGNvbnRleHQpKTsgfQorICAgIHZpcnR1YWwgfldlYlNvY2tldCgpOworCisgICAgZW51bSBT
dGF0ZSB7CisgICAgICAgIENPTk5FQ1RJTkcgPSAwLAorICAgICAgICBPUEVOID0gMSwKKyAgICAg
ICAgQ0xPU0VEID0gMgorICAgIH07CisKKyAgICB2b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYgdXJs
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBzZW5kKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBjbG9zZSgp
OworCisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3Q7CisgICAgU3RhdGUgcmVhZHlTdGF0ZSgp
IGNvbnN0OworCisgICAgdm9pZCBzZXRPbm9wZW4oUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKSB7IG1fb25vcGVuID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50TGlz
dGVuZXIqIG9ub3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fb25vcGVuLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7
IG1fb25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVz
c2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25tZXNzYWdlLmdldCgpOyB9CisgICAgdm9pZCBzZXRP
bmNsb3NlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uY2xv
c2UgPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25jbG9zZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb25jbG9zZS5nZXQoKTsgfQorCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2
aXJ0dWFsIFdlYlNvY2tldCogdG9XZWJTb2NrZXQoKSB7IHJldHVybiB0aGlzOyB9CisKKyAgICB2
aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1
cmUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29k
ZSYpOworCisgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXQ+OjpyZWY7CisgICAgdXNpbmcg
UmVmQ291bnRlZDxXZWJTb2NrZXQ+OjpkZXJlZjsKKworcHJpdmF0ZToKKyAgICBXZWJTb2NrZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFy
Z2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBk
ZXJlZigpOyB9CisKKyAgICAvLyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50CisgICAgdm9pZCBkaWRD
b25uZWN0KCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZyk7
CisgICAgdm9pZCBkaWRDbG9zZSgpOworCisgICAgdm9pZCBkaXNwYXRjaE9wZW5FdmVudCgpOwor
ICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBtc2cpOworICAgIHZv
aWQgZGlzcGF0Y2hDbG9zZUV2ZW50KCk7CisKKyAgICBSZWZQdHI8V2ViU29ja2V0Q2hhbm5lbD4g
bV9jaGFubmVsOworCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25vcGVuOworICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBtX29ubWVzc2FnZTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbV9vbmNsb3NlOworCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBLVVJMIG1fdXJsOworICAg
IFN0cmluZyBtX3Byb3RvY29sOworfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmICAvLyBXZWJTb2NrZXRfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5pZGwgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2E5NGU5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgd2Vic29j
a2V0cyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDdXN0b21NYXJrRnVuY3Rpb24sCisg
ICAgICAgIE5vU3RhdGljVGFibGVzLAorICAgICAgICBDb25kaXRpb25hbD1XRUJfU09DS0VUUwor
ICAgIF0gV2ViU29ja2V0IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBV
Ukw7CisKKyAgICAgICAgLy8gcmVhZHkgc3RhdGUKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgQ09OTkVDVElORyA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE9QRU4gPSAx
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDTE9TRUQgPSAyOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgbG9uZyByZWFkeVN0YXRlOworCisgICAgICAgIC8vIG5ldHdvcmtpbmcK
KyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25vcGVuOworICAgICAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3Rl
bmVyIG9uY2xvc2U7CisKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBzZW5kKGluIERPTVN0cmluZyBk
YXRhKQorICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lkIGNsb3Nl
KCk7CisgICAgfTsKK30=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32916</attachid>
            <date>2009-07-16 23:03:04 -0700</date>
            <delta_ts>2009-07-29 00:57:14 -0700</delta_ts>
            <desc>add WebSocket.idl</desc>
            <filename>bug-27209-20090717150303.patch</filename>
            <type>text/plain</type>
            <size>23820</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzIxZmJmOS4uYmNkZGE1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAwOS0wNy0xNCAgRnVtaXRvc2hpIFVr
YWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgV2ViU29ja2V0LmlkbAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcyMDkKKyAgICAgICAgCisgICAgICAgIEFkZCBX
ZWJTb2NrZXQuaWRsIGluIFdlYkNvcmUvd2Vic29ja2V0cy8KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Oik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpKU1dlYlNvY2tl
dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0V2Vi
U29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmdldENv
bnN0cnVjdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6
bWFyayk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmNsYXNzSW5m
byk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjptYXJrKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViU29ja2V0OjpzZW5kKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGw6
IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OldlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6On5XZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25u
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6c2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6dXJs
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2Nr
ZXQ6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDb25u
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJTb2NrZXQ6OmRpc3BhdGNoT3BlbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldDo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0
OjpkaXNwYXRjaENsb3NlRXZlbnQpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0OjopOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpzZXRP
bm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpvbm9wZW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0OjpzZXRPbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
U29ja2V0Ojpvbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpzZXRPbmNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6b25jbG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXQ6OnRvV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkZXJl
ZkV2ZW50VGFyZ2V0KToKKwogMjAwOS0wNy0xNiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45OWJiYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oIgorCisj
aW5jbHVkZSAiSlNXZWJTb2NrZXQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViU29ja2V0LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FTU0VS
VF9DTEFTU19GSVRTX0lOX0NFTEwoSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcik7CisKK2NvbnN0IENs
YXNzSW5mbyBKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJXZWJTb2NrZXRDb25z
dHJ1Y3RvciIsIDAsIDAsIDAgfTsKKworSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6SlNXZWJTb2Nr
ZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCisgICAgICAgIDogRE9NT2JqZWN0KEpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgp
KSkKKyAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTV2ViU29ja2V0UHJvdG90eXBl
OjpzZWxmKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIE5vbmUpOworfQorCitT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9nbG9iYWxPYmplY3QtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXZWJT
b2NrZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApCisgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKKwor
ICAgIGlmIChhcmdzLmF0KDApLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFN5bnRheEVycm9yLCAidW5kZWZpbmVkIFVSTCIpOworCisgICAgLy8gVE9ETyh1
a2FpKTogd29ya2VyPworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzdGF0
aWNfY2FzdDxKU1dlYlNvY2tldENvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIldlYlNvY2tldCBjb25zdHJ1Y3RvciBhc3NvY2lh
dGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIik7CisKKyAgICBjb25zdCBLVVJMJiB1cmwgPSBj
b250ZXh0LT5jb21wbGV0ZVVSTChhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKTsKKworICAgIFJl
ZlB0cjxXZWJTb2NrZXQ+IHdlYnNvY2tldCA9IFdlYlNvY2tldDo6Y3JlYXRlKGNvbnRleHQpOwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCisgICAg
ICAgIHdlYnNvY2tldC0+Y29ubmVjdCh1cmwsIGVjKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYg
KGFyZ3MuYXQoMSkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yLCAicHJvdG9jb2wgaXMgdW5kZWZpbmVkIik7CisgICAgICAgIGNv
bnN0IFN0cmluZyBwcm90b2NvbCA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgICAg
IGlmICghcHJvdG9jb2wubGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvciwgInByb3RvY29sIGlzIGVtcHR5Iik7CisgICAgICAgIHdlYnNvY2tl
dC0+Y29ubmVjdCh1cmwsIHByb3RvY29sLCBlYyk7CisgICAgfQorICAgIHJldHVybiBDUkVBVEVf
RE9NX09CSkVDVF9XUkFQUEVSKGV4ZWMsIFdlYlNvY2tldCwgd2Vic29ja2V0LmdldCgpKTsKK30K
KworQ29uc3RydWN0VHlwZSBKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRh
KENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RXZWJTb2NrZXQ7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5
cGVIb3N0OworfQorCit2b2lkIEpTV2ViU29ja2V0Q29uc3RydWN0b3I6Om1hcmsoKQoreworICAg
IERPTU9iamVjdDo6bWFyaygpOworICAgIGlmICghbV9nbG9iYWxPYmplY3QtPm1hcmtlZCgpKQor
ICAgICAgICBtX2dsb2JhbE9iamVjdC0+bWFyaygpOworfQorCisKK30gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3Ry
dWN0b3IuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNTcxNzkKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuaApAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTV2Vi
U29ja2V0Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNXZWJTb2NrZXRDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01PYmplY3QgeworICBwdWJsaWM6CisgICAgSlNXZWJTb2NrZXRDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgIHN0YXRpYyBjb25zdCBKU0M6
OkNsYXNzSW5mbyBzX2luZm87CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICBwcml2YXRl
OgorICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpD
b25zdHJ1Y3REYXRhJik7CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJ
bmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorCisgICAgSlNET01HbG9iYWxPYmplY3Qq
IG1fZ2xvYmFsT2JqZWN0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
ICAvLyBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNv
Y2tldEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0MTEz
MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0
b20uY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
V2ViU29ja2V0LmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0Lmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEpTV2ViU29ja2V0OjptYXJrKCkKK3sKKyAgICBC
YXNlOjptYXJrKCk7CisgICAgLy8gVE9ETyh1a2FpKTogZ2FyYmFnZSBjb2xsZWN0aW9uIHBvbGlj
eT8KKyAgICBpZiAobV9pbXBsLT5yZWFkeVN0YXRlKCkgIT0gV2ViU29ja2V0OjpDTE9TRUQpCisg
ICAgICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbm1lc3NhZ2UoKSk7CisgICAgLy8gRXZlbnRM
aXN0ZW5lcnM/Cit9CisKKy8vIEN1c3RvbSBmdW5jdGlvbnMKK0pTVmFsdWUgSlNXZWJTb2NrZXQ6
OnNlbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChh
cmdzLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVy
cm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGltcGwoKS0+c2VuZChhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBlYyk7CisgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30K
KworLy8gVE9ETyh1a2FpKTogYWRkRXZlbnRMaXN0ZW5lci9yZW1vdmVFdmVudExpc3RlbmVyPwor
Cit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRz
L1dlYlNvY2tldC5jcHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjczZDIxCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNvY2tldC5oIgorCisjaW5jbHVkZSAiRXZlbnQu
aCIKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYlNvY2tldDo6V2ViU29ja2V0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgICAgIDogQWN0aXZlRE9NT2JqZWN0
KGNvbnRleHQsIHRoaXMpCisgICAgICAgICwgbV9zdGF0ZShDT05ORUNUSU5HKQorICAgICAgICAs
IG1fcHJvdG9jb2woIiIpCit7Cit9CisKK1dlYlNvY2tldDo6fldlYlNvY2tldCgpCit7CisgICAg
aWYgKG1fc3RhdGUgIT0gQ0xPU0VEKQorICAgICAgICBjbG9zZSgpOworfQorCit2b2lkIFdlYlNv
Y2tldDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGNvbm5lY3QodXJsLCAiIiwgZWMpOworfQorCit2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIG1fdXJsID0gdXJsLmNvcHkoKTsKKyAgICBtX3Byb3RvY29sID0gcHJvdG9jb2w7CisK
KyAgICBpZiAoIW1fdXJsLnByb3RvY29sSXMoIndzIikgJiYgIW1fdXJsLnByb3RvY29sSXMoIndz
cyIpKSB7CisgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgICAgIGVjID0gU1lOVEFYX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBUT0RPKHVrYWkpOiBDaGVjayBwcm90
b2NvbCBpcyB2YWxpZCBmb3JtLgorICAgIC8vIFRPRE8odWthaSk6IENvbm5lY3QgV2ViU29ja2V0
Q2hhbm5lbC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6c2Vu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICht
X3N0YXRlICE9IE9QRU4pIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBUT0RPKHVrYWkpOiBzZW5kIG1lc3NhZ2Ugb24gV2Vi
U29ja2V0Q2hhbm5lbC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlNvY2tl
dDo6Y2xvc2UoKQoreworICAgIGlmIChtX3N0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgLy8gVE9ETyh1a2FpKTogY2xvc2UgV2ViU29j
a2V0Q2hhbm5lbC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitjb25zdCBLVVJMJiBXZWJT
b2NrZXQ6OnVybCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsOworfQorCitXZWJTb2NrZXQ6
OlN0YXRlIFdlYlNvY2tldDo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3Rh
dGU7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdlYlNvY2tldDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6YWRkRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViU29ja2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViU29ja2V0OjpkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJTb2NrZXQ6
OmRpZENvbm5lY3QoKQoreworICAgIGlmIChtX3N0YXRlICE9IENPTk5FQ1RJTkcpIHsKKyAgICAg
ICAgZGlkQ2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3N0YXRlID0gT1BF
TjsKKyAgICBkaXNwYXRjaE9wZW5FdmVudCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtc2cpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gT1BF
TikKKyAgICAgICAgcmV0dXJuOworICAgIGRpc3BhdGNoTWVzc2FnZUV2ZW50KG1zZyk7Cit9CisK
K3ZvaWQgV2ViU29ja2V0OjpkaWRDbG9zZSgpCit7CisgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAg
ICBkaXNwYXRjaENsb3NlRXZlbnQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRpc3BhdGNoT3Bl
bkV2ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6
ZGlzcGF0Y2hNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBtc2cpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRpc3BhdGNoQ2xvc2VFdmVudCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaCBiL1dlYkNvcmUvd2Vic29ja2V0
cy9XZWJTb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTdhNzg2
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCkBAIC0w
LDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViU29ja2V0X2gKKyNkZWZpbmUgV2ViU29ja2V0X2gKKwor
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2gu
aCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIK
KyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOwor
Y2xhc3MgV2ViU29ja2V0Q2hhbm5lbDsKKworY2xhc3MgV2ViU29ja2V0IDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViU29ja2V0PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJTb2NrZXQ+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
U29ja2V0KGNvbnRleHQpKTsgfQorICAgIHZpcnR1YWwgfldlYlNvY2tldCgpOworCisgICAgZW51
bSBTdGF0ZSB7CisgICAgICAgIENPTk5FQ1RJTkcgPSAwLAorICAgICAgICBPUEVOID0gMSwKKyAg
ICAgICAgQ0xPU0VEID0gMgorICAgIH07CisKKyAgICB2b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYg
dXJsLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBzZW5k
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBjbG9z
ZSgpOworCisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3Q7CisgICAgU3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRPbm9wZW4oUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyKSB7IG1fb25vcGVuID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50
TGlzdGVuZXIqIG9ub3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fb25vcGVuLmdldCgpOyB9CisgICAg
dm9pZCBzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KSB7IG1fb25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9u
bWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25tZXNzYWdlLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRPbmNsb3NlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29u
Y2xvc2UgPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25jbG9zZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb25jbG9zZS5nZXQoKTsgfQorCisgICAgLy8gRXZlbnRUYXJnZXQKKyAg
ICB2aXJ0dWFsIFdlYlNvY2tldCogdG9XZWJTb2NrZXQoKSB7IHJldHVybiB0aGlzOyB9CisKKyAg
ICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNh
cHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9u
Q29kZSYpOworCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0CisgICAgLy8gdmlydHVhbCBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworICAgIC8vIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVz
dHJveWVkKCk7CisgICAgLy8gdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsKKyAgICAv
LyB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOworICAgIC8vIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsK
KyAgICAvLyB2aXJ0dWFsIHZvaWQgc3RvcCgpOworCisgICAgLy8gYXZvaWQgZXJyb3I6IHJlcXVl
c3QgZm9yIG1lbWJlciAnZGVyZWYnIGlzIGFtYmlndW91cy4KKyAgICB1c2luZyBSZWZDb3VudGVk
PFdlYlNvY2tldD46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldD46OmRlcmVm
OworCitwcml2YXRlOgorICAgIFdlYlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVh
bCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKworICAgIC8vIFdlYlNvY2tl
dENoYW5uZWxDbGllbnQKKyAgICB2b2lkIGRpZENvbm5lY3QoKTsKKyAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbXNnKTsKKyAgICB2b2lkIGRpZENsb3NlKCk7CisKKyAg
ICB2b2lkIGRpc3BhdGNoT3BlbkV2ZW50KCk7CisgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VFdmVu
dChjb25zdCBTdHJpbmcmIG1zZyk7CisgICAgdm9pZCBkaXNwYXRjaENsb3NlRXZlbnQoKTsKKwor
ICAgIFJlZlB0cjxXZWJTb2NrZXRDaGFubmVsPiBtX2NoYW5uZWw7CisKKyAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbV9vbm9wZW47CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25tZXNz
YWdlOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uY2xvc2U7CisKKyAgICBTdGF0ZSBt
X3N0YXRlOworICAgIEtVUkwgbV91cmw7CisgICAgU3RyaW5nIG1fcHJvdG9jb2w7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgIC8vIFdlYlNvY2tldF9oCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbCBiL1dlYkNvcmUvd2Vic29ja2V0
cy9XZWJTb2NrZXQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MmY2
NjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbApA
QCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK21vZHVsZSB3ZWJzb2NrZXRzIHsKKworICAgIGludGVyZmFjZSBbCisg
ICAgICAgIEN1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMsCisgICAg
ICAgIENvbmRpdGlvbmFsPVdFQl9TT0NLRVRTCisgICAgXSBXZWJTb2NrZXQgeworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIFVSTDsKKworICAgICAgICAvLyByZWFkeSBzdGF0
ZQorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05ORUNUSU5HID0gMDsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgT1BFTiA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IENMT1NFRCA9IDI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHJlYWR5U3Rh
dGU7CisKKyAgICAgICAgLy8gbmV0d29ya2luZworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0
ZW5lciBvbm9wZW47CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubWVzc2FnZTsK
KyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jbG9zZTsKKworICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHNlbmQoaW4gRE9NU3RyaW5nIGRhdGEpCisgICAgICAgICAgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAvLyBFdmVudFRhcmdl
dCBpbnRlcmZhY2UKKyAgICAgICAgLy8gW0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGlu
IERPTVN0cmluZyB0eXBlLAorICAgICAgICAvLyAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIs
CisgICAgICAgIC8vICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgLy8gW0N1c3Rv
bV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAv
LyAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgIC8vICAgaW4gYm9vbGVhbiB1
c2VDYXB0dXJlKTsKKyAgICAgICAgLy8gYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2
dCkKKyAgICAgICAgLy8gICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworICAgIH07Cit9
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33698</attachid>
            <date>2009-07-29 00:57:19 -0700</date>
            <delta_ts>2009-08-03 02:26:03 -0700</delta_ts>
            <desc>add WebSocket.idl and js binding classes.</desc>
            <filename>bug-27209-20090729165717.patch</filename>
            <type>text/plain</type>
            <size>23718</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjA4ZTA1Zi4uZGNmODc2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAwOS0wNy0yOSAgRnVtaXRvc2hpIFVr
YWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgV2ViU29ja2V0LmlkbAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcyMDkKKyAgICAgICAgCisgICAgICAgIEFkZCBX
ZWJTb2NrZXQuaWRsIGluIFdlYkNvcmUvd2Vic29ja2V0cy8KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Oik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpKU1dlYlNvY2tl
dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0V2Vi
U29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmdldENv
bnN0cnVjdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6
bWFyayk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmNsYXNzSW5m
byk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjptYXJrKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViU29ja2V0OjpzZW5kKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGw6
IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OldlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6On5XZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25u
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6c2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6dXJs
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2Nr
ZXQ6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDb25u
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJTb2NrZXQ6OmRpc3BhdGNoT3BlbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldDo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0
OjpkaXNwYXRjaENsb3NlRXZlbnQpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0OjopOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpzZXRP
bm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpvbm9wZW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0OjpzZXRPbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
U29ja2V0Ojpvbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpzZXRPbmNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6b25jbG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXQ6OnRvV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkZXJl
ZkV2ZW50VGFyZ2V0KToKKwogMjAwOS0wNy0yOCAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdv
bWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmNlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDg3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dlYlNvY2tldENvbnN0cnVjdG9y
LmgiCisKKyNpbmNsdWRlICJKU1dlYlNvY2tldC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpT
V2ViU29ja2V0Q29uc3RydWN0b3IpOworCitjb25zdCBDbGFzc0luZm8gSlNXZWJTb2NrZXRDb25z
dHJ1Y3Rvcjo6c19pbmZvID0geyAiV2ViU29ja2V0Q29uc3RydWN0b3IiLCAwLCAwLCAwIH07CisK
K0pTV2ViU29ja2V0Q29uc3RydWN0b3I6OkpTV2ViU29ja2V0Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgICAgICA6IERPTUNv
bnN0cnVjdG9yT2JqZWN0KEpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1
dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1dlYlNvY2tldFByb3Rv
dHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKK30KKworc3RhdGljIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RXZWJTb2NrZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3Ry
dWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNXZWJTb2NrZXRDb25zdHJ1Y3Rv
cioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTV2ViU29ja2V0Q29uc3RydWN0b3IqPihj
b25zdHJ1Y3Rvcik7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ29u
c3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAiV2ViU29ja2V0
IGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKTsKKworICAg
IGlmIChhcmdzLnNpemUoKSA9PSAwKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CisKKyAgICBpZiAoYXJncy5hdCgw
KS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvciwgInVuZGVmaW5lZCBVUkwiKTsKKworICAgIGNvbnN0IEtVUkwmIHVybCA9IGNvbnRleHQt
PmNvbXBsZXRlVVJMKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFJlZlB0cjxXZWJT
b2NrZXQ+IHdlYnNvY2tldCA9IFdlYlNvY2tldDo6Y3JlYXRlKGNvbnRleHQpOworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHdlYnNv
Y2tldC0+Y29ubmVjdCh1cmwsIGVjKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGFyZ3MuYXQo
MSkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yLCAicHJvdG9jb2wgaXMgdW5kZWZpbmVkIik7CisgICAgICAgIGNvbnN0IFN0cmlu
ZyBwcm90b2NvbCA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIGlmICghcHJv
dG9jb2wubGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50
YXhFcnJvciwgInByb3RvY29sIGlzIGVtcHR5Iik7CisgICAgICAgIHdlYnNvY2tldC0+Y29ubmVj
dCh1cmwsIHByb3RvY29sLCBlYyk7CisgICAgfQorICAgIHJldHVybiBDUkVBVEVfRE9NX09CSkVD
VF9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBXZWJTb2NrZXQs
IHdlYnNvY2tldC5nZXQoKSk7Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNXZWJTb2NrZXRDb25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQorewor
ICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0V2ViU29ja2V0Owor
ICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rv
ci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5NjQ3YQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNXZWJTb2Nr
ZXRDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBKU1dlYlNvY2tldENvbnN0cnVjdG9yIDogcHVibGljIERPTUNv
bnN0cnVjdG9yT2JqZWN0IHsKKyAgcHVibGljOgorICAgIEpTV2ViU29ja2V0Q29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEpTQzo6Q29u
c3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgIHZp
cnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZz
X2luZm87IH0KK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gSlNX
ZWJTb2NrZXRDb25zdHJ1Y3Rvcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViU29ja2V0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0
b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YTBiZjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcApA
QCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dlYlNvY2tl
dC5oIgorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIldlYlNvY2tldC5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordm9pZCBKU1dlYlNvY2tldDo6bWFyaygpCit7CisgICAgQmFzZTo6bWFy
aygpOworICAgIC8vIFRPRE8odWthaSk6IGdhcmJhZ2UgY29sbGVjdGlvbiBwb2xpY3k/CisgICAg
aWYgKG1faW1wbC0+cmVhZHlTdGF0ZSgpICE9IFdlYlNvY2tldDo6Q0xPU0VEKQorICAgICAgICBt
YXJrSWZOb3ROdWxsKG1faW1wbC0+b25tZXNzYWdlKCkpOworICAgIC8vIEV2ZW50TGlzdGVuZXJz
PworfQorCisvLyBDdXN0b20gZnVuY3Rpb25zCitKU1ZhbHVlIEpTV2ViU29ja2V0OjpzZW5kKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoYXJncy5zaXpl
KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5v
dCBlbm91Z2ggYXJndW1lbnRzIik7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBK
U1ZhbHVlIHJldCA9IGpzQm9vbGVhbihpbXBsKCktPnNlbmQoYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKSwgZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBy
ZXQ7Cit9CisKKy8vIFRPRE8odWthaSk6IGFkZEV2ZW50TGlzdGVuZXIvcmVtb3ZlRXZlbnRMaXN0
ZW5lcj8KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhN2NjZgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCkBAIC0wLDAgKzEsMTcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKKworI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJTb2NrZXQ6OldlYlNv
Y2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgICAgICA6IEFjdGl2ZURP
TU9iamVjdChjb250ZXh0LCB0aGlzKQorICAgICAgICAsIG1fc3RhdGUoQ09OTkVDVElORykKKyAg
ICAgICAgLCBtX3Byb3RvY29sKCIiKQoreworfQorCitXZWJTb2NrZXQ6On5XZWJTb2NrZXQoKQor
eworICAgIGlmIChtX3N0YXRlICE9IENMT1NFRCkKKyAgICAgICAgY2xvc2UoKTsKK30KKwordm9p
ZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBjb25uZWN0KHVybCwgIiIsIGVjKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmNvbm5l
Y3QoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBtX3VybCA9IHVybC5jb3B5KCk7CisgICAgbV9wcm90b2NvbCA9IHByb3Rv
Y29sOworCisgICAgaWYgKCFtX3VybC5wcm90b2NvbElzKCJ3cyIpICYmICFtX3VybC5wcm90b2Nv
bElzKCJ3c3MiKSkgeworICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOworICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gVE9ETyh1a2FpKTogQ2hl
Y2sgcHJvdG9jb2wgaXMgdmFsaWQgZm9ybS4KKyAgICAvLyBUT0RPKHVrYWkpOiBDb25uZWN0IFdl
YlNvY2tldENoYW5uZWwuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBXZWJTb2Nr
ZXQ6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAobV9zdGF0ZSAhPSBPUEVOKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gVE9ETyh1a2FpKTogc2VuZCBt
ZXNzYWdlIG9uIFdlYlNvY2tldENoYW5uZWwuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpjbG9zZSgpCit7CisgICAgaWYgKG1f
c3RhdGUgPT0gQ0xPU0VEKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGF0ZSA9IENMT1NFRDsK
KyAgICAvLyBUT0RPKHVrYWkpOiBjbG9zZSBXZWJTb2NrZXRDaGFubmVsLgorICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK2NvbnN0IEtVUkwmIFdlYlNvY2tldDo6dXJsKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV91cmw7Cit9CisKK1dlYlNvY2tldDo6U3RhdGUgV2ViU29ja2V0OjpyZWFkeVN0
YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKwordW5zaWduZWQgbG9uZyBX
ZWJTb2NrZXQ6OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKK3sKKyAgICAvLyBUT0RPKHVrYWkpOiBh
c2sgcGxhdGZvcm0gY29kZT8KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYlNvY2tldDo6ZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpkaWRD
b25uZWN0KCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBDT05ORUNUSU5HKSB7CisgICAgICAgIGRp
ZENsb3NlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zdGF0ZSA9IE9QRU47Cisg
ICAgZGlzcGF0Y2hPcGVuRXZlbnQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRpZFJlY2VpdmVN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgbXNnKQoreworICAgIGlmIChtX3N0YXRlICE9IE9QRU4pCisg
ICAgICAgIHJldHVybjsKKyAgICBkaXNwYXRjaE1lc3NhZ2VFdmVudChtc2cpOworfQorCit2b2lk
IFdlYlNvY2tldDo6ZGlkQ2xvc2UoKQoreworICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgZGlz
cGF0Y2hDbG9zZUV2ZW50KCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpkaXNwYXRjaE9wZW5FdmVu
dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRpc3Bh
dGNoTWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgbXNnKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpkaXNwYXRjaENsb3NlRXZlbnQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV2Vi
U29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjM2Y5NwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaApAQCAtMCwwICsx
LDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlNvY2tldF9oCisjZGVmaW5lIFdlYlNvY2tldF9oCisKKyNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCisj
aW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0cmluZzsKK2NsYXNz
IFdlYlNvY2tldENoYW5uZWw7CisKK2NsYXNzIFdlYlNvY2tldCA6IHB1YmxpYyBSZWZDb3VudGVk
PFdlYlNvY2tldD4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViU29ja2V0PiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlNvY2tl
dChjb250ZXh0KSk7IH0KKyAgICB2aXJ0dWFsIH5XZWJTb2NrZXQoKTsKKworICAgIGVudW0gU3Rh
dGUgeworICAgICAgICBDT05ORUNUSU5HID0gMCwKKyAgICAgICAgT1BFTiA9IDEsCisgICAgICAg
IENMT1NFRCA9IDIKKyAgICB9OworCisgICAgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmIHVybCwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgY29ubmVjdChjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIGJvb2wgc2VuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZvaWQgY2xvc2UoKTsK
KworICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0OworICAgIFN0YXRlIHJlYWR5U3RhdGUoKSBj
b25zdDsKKyAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkgY29uc3Q7CisKKyAgICB2
b2lkIHNldE9ub3BlbihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsg
bV9vbm9wZW4gPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25vcGVuKCkg
Y29uc3QgeyByZXR1cm4gbV9vbm9wZW4uZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9ubWVzc2FnZShQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbm1lc3NhZ2UgPSBl
dmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25tZXNzYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vbm1lc3NhZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9uY2xvc2UoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25jbG9zZSA9IGV2ZW50TGlzdGVu
ZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmNsb3NlKCkgY29uc3QgeyByZXR1cm4gbV9vbmNs
b3NlLmdldCgpOyB9CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgV2ViU29ja2V0
KiB0b1dlYlNvY2tldCgpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIHZpcnR1YWwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworCisgICAgdmly
dHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAgIHZpcnR1YWwgYm9vbCBkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAvLyBB
Y3RpdmVET01PYmplY3QKKyAgICAvLyB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3Q7CisgICAgLy8gdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKKyAgICAvLyB2
aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OworICAgIC8vIHZpcnR1YWwgdm9pZCBzdXNw
ZW5kKCk7CisgICAgLy8gdmlydHVhbCB2b2lkIHJlc3VtZSgpOworICAgIC8vIHZpcnR1YWwgdm9p
ZCBzdG9wKCk7CisKKyAgICAvLyBhdm9pZCBlcnJvcjogcmVxdWVzdCBmb3IgbWVtYmVyICdkZXJl
ZicgaXMgYW1iaWd1b3VzLgorICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Pjo6cmVmOwor
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Pjo6ZGVyZWY7CisKK3ByaXZhdGU6CisgICAg
V2ViU29ja2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIHZpcnR1YWwgdm9pZCBy
ZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRh
cmdldCgpIHsgZGVyZWYoKTsgfQorCisgICAgLy8gV2ViU29ja2V0Q2hhbm5lbENsaWVudAorICAg
IHZvaWQgZGlkQ29ubmVjdCgpOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtc2cpOworICAgIHZvaWQgZGlkQ2xvc2UoKTsKKworICAgIHZvaWQgZGlzcGF0Y2hPcGVu
RXZlbnQoKTsKKyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgbXNn
KTsKKyAgICB2b2lkIGRpc3BhdGNoQ2xvc2VFdmVudCgpOworCisgICAgUmVmUHRyPFdlYlNvY2tl
dENoYW5uZWw+IG1fY2hhbm5lbDsKKworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29ub3Bl
bjsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbm1lc3NhZ2U7CisgICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG1fb25jbG9zZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgS1VSTCBt
X3VybDsKKyAgICBTdHJpbmcgbV9wcm90b2NvbDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAgLy8gV2ViU29ja2V0X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29j
a2V0cy9XZWJTb2NrZXQuaWRsIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlOTMxOQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9k
dWxlIHdlYnNvY2tldHMgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ3VzdG9tTWFya0Z1
bmN0aW9uLAorICAgICAgICBOb1N0YXRpY1RhYmxlcywKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VC
X1NPQ0tFVFMKKyAgICBdIFdlYlNvY2tldCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgVVJMOworCisgICAgICAgIC8vIHJlYWR5IHN0YXRlCisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENPTk5FQ1RJTkcgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBPUEVOID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ0xPU0VEID0gMjsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHJlYWR5U3RhdGU7CisKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQ7ICAv
LyBUT0RPKHVrYWkpCisKKyAgICAgICAgLy8gbmV0d29ya2luZworICAgICAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbm9wZW47CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
bWVzc2FnZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jbG9zZTsKKworICAg
ICAgICBbQ3VzdG9tXSBib29sZWFuIHNlbmQoaW4gRE9NU3RyaW5nIGRhdGEpCisgICAgICAgICAg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAv
LyBFdmVudFRhcmdldCBpbnRlcmZhY2UKKyAgICAgICAgLy8gW0N1c3RvbV0gdm9pZCBhZGRFdmVu
dExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAvLyAgIGluIEV2ZW50TGlzdGVu
ZXIgbGlzdGVuZXIsCisgICAgICAgIC8vICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAg
ICAgLy8gW0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBl
LAorICAgICAgICAvLyAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgIC8vICAg
aW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgLy8gYm9vbGVhbiBkaXNwYXRjaEV2ZW50
KGluIEV2ZW50IGV2dCkKKyAgICAgICAgLy8gICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworICAg
IH07Cit9
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33966</attachid>
            <date>2009-08-03 02:26:09 -0700</date>
            <delta_ts>2009-08-03 02:35:43 -0700</delta_ts>
            <desc>Add WebSocket.idl and js binding classes.</desc>
            <filename>bug-27209-20090803182607.patch</filename>
            <type>text/plain</type>
            <size>31881</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
N2RjNzMxNy4uOTEyZjE4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAwOS0wNy0yOSAgRnVtaXRvc2hpIFVr
YWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgV2ViU29ja2V0LmlkbAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcyMDkKKyAgICAgICAgCisgICAgICAgIEFkZCBX
ZWJTb2NrZXQuaWRsIGluIFdlYkNvcmUvd2Vic29ja2V0cy8KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Oik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpKU1dlYlNvY2tl
dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0V2Vi
U29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmdldENv
bnN0cnVjdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6
bWFyayk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmNsYXNzSW5m
byk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjptYXJrKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViU29ja2V0OjpzZW5kKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGw6
IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OldlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6On5XZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25u
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6c2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6dXJs
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2Nr
ZXQ6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDb25u
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJTb2NrZXQ6OmRpc3BhdGNoT3BlbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldDo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0
OjpkaXNwYXRjaENsb3NlRXZlbnQpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0OjopOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpzZXRP
bm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpvbm9wZW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0OjpzZXRPbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
U29ja2V0Ojpvbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpzZXRPbmNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6b25jbG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXQ6OnRvV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkZXJl
ZkV2ZW50VGFyZ2V0KToKKwogMjAwOS0wOC0wMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgogCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAyYzk0ZGYwLi4xNTM5ZTVjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCkBAIC00MSw2ICs0MSw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkvd21sIFwK
ICAgICAkKFdlYkNvcmUpL3dvcmtlcnMgXAogICAgICQoV2ViQ29yZSkvc3ZnIFwKKyAgICAkKFdl
YkNvcmUpL3dlYnNvY2tldHMgXAogIwogCiBET01fQ0xBU1NFUyA9IFwKQEAgLTM3Myw2ICszNzQs
NyBAQCBET01fQ0xBU1NFUyA9IFwKICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSBcCiAgICAg
V2ViS2l0UG9pbnQgXAogICAgIFdlYktpdFRyYW5zaXRpb25FdmVudCBcCisgICAgV2ViU29ja2V0
IFwKICAgICBXaGVlbEV2ZW50IFwKICAgICBXb3JrZXIgXAogICAgIFdvcmtlckNvbnRleHQgXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KaW5kZXggMGIxOGRkNS4uMDAxNGFlNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0zMTI4LDEwICszMTI4LDIwIEBA
IGVuZGlmICMgRU5EIEVOQUJMRV9TVkcKIGlmIEVOQUJMRV9XRUJfU09DS0VUUwogRkVBVFVSRV9E
RUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1dFQl9TT0NLRVRTPTEKIAorSURMX0JJTkRJTkdT
ICs9IFwKKwlXZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbAorCiB3ZWJjb3JlX2NwcGZs
YWdzICs9IFwKIAktREVOQUJMRV9XRUJfU09DS0VUUz0xIFwKIAktSSQoc3JjZGlyKS9XZWJDb3Jl
L3dlYnNvY2tldHMKIAord2ViY29yZV9zb3VyY2VzICs9IFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
U29ja2V0Q29uc3RydWN0b3IuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1
c3RvbS5jcHAgXAorCVdlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwIFwKKwlXZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0LmgKKwogZWxzZQogd2ViY29yZV9jcHBmbGFncyArPSAtREVO
QUJMRV9XRUJfU09DS0VUUz0wCiBlbmRpZiAgIyBFTkQgRU5BQkxFX1dFQl9TT0NLRVRTCkBAIC0z
MjM2LDYgKzMyNDYsNyBAQCBJRExfUEFUSCA6PSBcCiAgICAgJChXZWJDb3JlKS9zdmcgXAogICAg
ICQoV2ViQ29yZSkveG1sIFwKICAgICAkKFdlYkNvcmUpL3BsdWdpbnMgXAorICAgICQoV2ViQ29y
ZSkvd2Vic29ja2V0cyBcCiAgICAgJChXZWJDb3JlKS93b3JrZXJzCiAKIHZwYXRoICUuaWRsID0g
JChJRExfUEFUSCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZTYzYTIxYS4uMjA1MjIwOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTg1NCw2ICs4NTQsMTEgQEAKIAkJNTE3NDFEMTAwQjA3MjU5QTAwRUQ0NDJD
IC8qIEJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTc0MUQwQzBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0
LmNwcCAqLzsgfTsKIAkJNTE3NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwRDBC
MDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTc0MUQxMjBCMDcyNTlBMDBFRDQ0MkMgLyogSGlz
dG9yeUl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE3NDFEMEUwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCAqLzsgfTsKKwkJ
NTE4QTM0QzExMDI2QzgzMTAwMUI2ODk2IC8qIFdlYlNvY2tldC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThBMzRCRTEwMjZDODMxMDAxQjY4OTYg
LyogV2ViU29ja2V0LmNwcCAqLzsgfTsKKwkJNTE4QTM0QzIxMDI2QzgzMTAwMUI2ODk2IC8qIFdl
YlNvY2tldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE4QTM0QkYxMDI2QzgzMTAwMUI2ODk2IC8qIFdlYlNvY2tldC5oICovOyB9OworCQk1MThBMzRD
NzEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThBMzRDNDEwMjZDOEM5MDAx
QjY4OTYgLyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAgKi87IH07CisJCTUxOEEzNEM4MTAy
NkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThBMzRDNTEwMjZDOEM5MDAxQjY4OTYg
LyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oICovOyB9OworCQk1MThBMzRDOTEwMjZDOEM5MDAx
QjY4OTYgLyogSlNXZWJTb2NrZXRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4QTM0QzYxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29j
a2V0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNTE5NjExNkEwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFi
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
OTYxMTVFMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi87IH07CiAJCTUxOTYxMTZC
MENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5NjExNUYwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNl
LmggKi87IH07CiAJCTUxOTYxMTZEMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZVRocmVhZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk2MTE2
MTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2VUaHJlYWQuY3BwICovOyB9OwpAQCAtNTg2Miw2
ICs1ODY3LDEyIEBACiAJCTUxNzQxRDBDMEIwNzI1OUEwMEVENDQyQyAvKiBCYWNrRm9yd2FyZExp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFja0ZvcndhcmRM
aXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3NDFEMEQwQjA3MjU5QTAw
RUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIaXN0b3J5SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc0MUQwRTBC
MDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEhpc3RvcnlJdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTE4QTM0QkUxMDI2QzgzMTAwMUI2ODk2IC8qIFdlYlNvY2tldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJTb2NrZXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MThBMzRCRjEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNvY2tldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MThBMzRDMDEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJTb2NrZXQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MThBMzRDNDEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRD
b25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dl
YlNvY2tldENvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4
QTM0QzUxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MThBMzRDNjEwMjZDOEM5MDAxQjY4OTYgLyogSlNX
ZWJTb2NrZXRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNXZWJTb2NrZXRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTk2
MTE1RTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTk2MTE1RjBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE5NjExNjAwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBEYXRhYmFzZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NDk3LDYgKzk1MDgsNyBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MThBMzRC
RDEwMjZDODMxMDAxQjY4OTYgLyogd2Vic29ja2V0cyAqLywKIAkJCQk2NUM5N0FGMjA4RUE5MDg4
MDBBQ0QyNzMgLyogY29uZmlnLmggKi8sCiAJCQkJRURFQzk4MDIwQUVEN0UxNzAwNTkxMzdGIC8q
IFdlYkNvcmVQcmVmaXguaCAqLywKIAkJCQk5MzA3MDYxMzA5RTBDQTgyMDBCMTdGRTQgLyogRGVy
aXZlZFNvdXJjZXMubWFrZSAqLywKQEAgLTEwMjIwLDYgKzEwMjMyLDE2IEBACiAJCQl0YWJXaWR0
aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTUxOEEzNEJEMTAyNkM4MzEwMDFCNjg5
NiAvKiB3ZWJzb2NrZXRzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk1MThBMzRCRTEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmNwcCAqLywKKwkJ
CQk1MThBMzRCRjEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmggKi8sCisJCQkJNTE4QTM0
QzAxMDI2QzgzMTAwMUI2ODk2IC8qIFdlYlNvY2tldC5pZGwgKi8sCisJCQkpOworCQkJcGF0aCA9
IHdlYnNvY2tldHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1RENGODM2
OTBENTkxNTc4MDA5NTNCQzYgLyogcGx1Z2lucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCkBAIC0xMzQ5NSw2ICsxMzUxNyw5IEBACiAJCUJDMUEzNzkzMDk3QzZG
QjEwMDE5RjNEOCAvKiBqcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJNTE4QTM0QzQxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0
b3IuY3BwICovLAorCQkJCTUxOEEzNEM1MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldENv
bnN0cnVjdG9yLmggKi8sCisJCQkJNTE4QTM0QzYxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29j
a2V0Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9t
ICovLAogCQkJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8s
CiAJCQkJOTNGOEIzMDYwQTMwMEZFQTAwRjYxQUI4IC8qIENvZGVHZW5lcmF0b3JKUy5wbSAqLywK
QEAgLTE3MDc3LDYgKzE3MTAyLDggQEAKIAkJCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyog
QXBwbGljYXRpb25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQTNENThGMTAxQzE1
MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdBMjQ1ODdDMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTE4QTM0QzIxMDI2QzgzMTAwMUI2ODk2IC8qIFdlYlNvY2tldC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTE4QTM0QzgxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTkxMjEsNiArMTkxNDgsOSBAQAogCQkJCTI0
RjU0RUFDMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0MUEzRDU4RTEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2Vy
VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMjQ1ODdCMTAyMUVBRjQwMDBBMDBBQSAv
KiBJbnNwZWN0b3JET01BZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MThBMzRDMTEwMjZD
ODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxOEEzNEM3
MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUxOEEzNEM5MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJT
b2NrZXRDb25zdHJ1Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29u
c3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZjdhYjMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3Ry
dWN0b3IuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSAiSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oIgor
CisjaW5jbHVkZSAiSlNXZWJTb2NrZXQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViU29ja2V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1dlYlNv
Y2tldENvbnN0cnVjdG9yKTsKKworY29uc3QgQ2xhc3NJbmZvIEpTV2ViU29ja2V0Q29uc3RydWN0
b3I6OnNfaW5mbyA9IHsgIldlYlNvY2tldENvbnN0cnVjdG9yIiwgMCwgMCwgMCB9OworCitKU1dl
YlNvY2tldENvbnN0cnVjdG9yOjpKU1dlYlNvY2tldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9y
T2JqZWN0KEpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmpl
Y3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1dlYlNvY2tldFByb3RvdHlwZTo6c2Vs
ZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSksIFJlYWRPbmx5fERvbnREZWxldGV8
RG9udEVudW0pOworfQorCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdlYlNvY2tldChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykK
K3sKKyAgICBKU1dlYlNvY2tldENvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nh
c3Q8SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0ganNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgUmVmZXJlbmNlRXJyb3IsICJXZWJTb2NrZXQgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1
bWVudCBpcyB1bmF2YWlsYWJsZSIpOworCisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1
bWVudHMiKTsKKworICAgIGlmIChhcmdzLmF0KDApLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAidW5kZWZpbmVkIFVSTCIpOworCisg
ICAgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgU3ludGF4RXJyb3IsICJ3cm9uZyBVUkwiKTsKKyAgICBjb25zdCBLVVJMJiB1cmwgPSBj
b250ZXh0LT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpOworICAgIFJlZlB0cjxXZWJTb2NrZXQ+IHdl
YlNvY2tldCA9IFdlYlNvY2tldDo6Y3JlYXRlKGNvbnRleHQpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHdlYlNvY2tldC0+Y29u
bmVjdCh1cmwsIGVjKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGFyZ3MuYXQoMSkuaXNVbmRl
ZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9y
LCAicHJvdG9jb2wgaXMgdW5kZWZpbmVkIik7CisgICAgICAgIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2wgPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
ciwgIndyb25nIHByb3RvY29sIik7CisgICAgICAgIGlmICghcHJvdG9jb2wubGVuZ3RoKCkpCisg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgInByb3RvY29s
IGlzIGVtcHR5Iik7CisgICAgICAgIHdlYlNvY2tldC0+Y29ubmVjdCh1cmwsIHByb3RvY29sLCBl
Yyk7CisgICAgfQorICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIENS
RUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0
KCksIFdlYlNvY2tldCwgd2ViU29ja2V0LmdldCgpKTsKK30KKworQ29uc3RydWN0VHlwZSBKU1dl
YlNvY2tldENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0
cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1
Y3RXZWJTb2NrZXQ7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNv
Y2tldENvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5
NjQ3YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRD
b25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU1dlYlNvY2tldENvbnN0cnVj
dG9yX2gKKyNkZWZpbmUgSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1dlYlNvY2tldENv
bnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKKyAgcHVibGljOgorICAg
IEpTV2ViU29ja2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCopOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6
Q29uc3RydWN0RGF0YSYpOworICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KK307CisKK30gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAgLy8gSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcl9oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjM4NGZiZGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViU29ja2V0Q3VzdG9tLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykKKworI2luY2x1ZGUgIkpTV2ViU29ja2V0Lmgi
CisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0LmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIEpTV2ViU29ja2V0OjptYXJrKCkKK3sKKyAgICBCYXNlOjptYXJrKCk7
CisgICAgaWYgKG1faW1wbC0+cmVhZHlTdGF0ZSgpICE9IFdlYlNvY2tldDo6Q0xPU0VEKQorICAg
ICAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25tZXNzYWdlKCkpOworICAgIC8vIEZJWE1FKHVr
YWkpOiBtYXJrIGlmIEV2ZW50TGlzdGVuZXJzIGlzIHJlZ2lzdGVyZWQuCit9CisKKy8vIEN1c3Rv
bSBmdW5jdGlvbnMKK0pTVmFsdWUgSlNXZWJTb2NrZXQ6OnNlbmQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVu
dHMiKTsKKworICAgIGNvbnN0IFN0cmluZyYgbXNnID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiYmFkIG1lc3NhZ2UgZGF0YS4iKTsKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBKU1ZhbHVlIHJldCA9IGpzQm9vbGVhbihpbXBsKCktPnNlbmQo
bXNnLCBlYykpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIHJl
dDsKK30KKworLy8gRklYTUUodWthaSk6IGltcGxlbWVudCBhZGRFdmVudExpc3RlbmVyL3JlbW92
ZUV2ZW50TGlzdGVuZXIuCisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y
YzVlYTZhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5j
cHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdF
Ql9TT0NLRVRTKQorCisjaW5jbHVkZSAiV2ViU29ja2V0LmgiCisKKyNpbmNsdWRlICJFdmVudC5o
IgorI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitXZWJTb2NrZXQ6OldlYlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQor
ICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgLCBtX3N0YXRlKENPTk5F
Q1RJTkcpCisgICAgLCBtX3Byb3RvY29sKCIiKQoreworfQorCitXZWJTb2NrZXQ6On5XZWJTb2Nr
ZXQoKQoreworICAgIGlmIChtX3N0YXRlICE9IENMT1NFRCkKKyAgICAgICAgY2xvc2UoKTsKK30K
Kwordm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBjb25uZWN0KHVybCwgIiIsIGVjKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6
OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBtX3VybCA9IHVybDsKKyAgICBtX3Byb3RvY29sID0gcHJvdG9j
b2w7CisKKyAgICBpZiAoIW1fdXJsLnByb3RvY29sSXMoIndzIikgJiYgIW1fdXJsLnByb3RvY29s
SXMoIndzcyIpKSB7CisgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgICAgIGVjID0gU1lO
VEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGSVhNRSh1a2FpKTogQ2hl
Y2sgcHJvdG9jb2wgaXMgdmFsaWQgZm9ybS4KKyAgICAvLyBGSVhNRSh1a2FpKTogQ29ubmVjdCBX
ZWJTb2NrZXRDaGFubmVsLgorfQorCitib29sIFdlYlNvY2tldDo6c2VuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChtX3N0YXRlICE9IE9QRU4p
IHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAvLyBGSVhNRSh1a2FpKTogc2VuZCBtZXNzYWdlIG9uIFdlYlNvY2tldENo
YW5uZWwuCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYlNvY2tldDo6Y2xvc2UoKQor
eworICAgIGlmIChtX3N0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3Rh
dGUgPSBDTE9TRUQ7CisgICAgLy8gRklYTUUodWthaSk6IGNsb3NlIFdlYlNvY2tldENoYW5uZWwu
Cit9CisKK2NvbnN0IEtVUkwmIFdlYlNvY2tldDo6dXJsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV91cmw7Cit9CisKK1dlYlNvY2tldDo6U3RhdGUgV2ViU29ja2V0OjpyZWFkeVN0YXRlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKwordW5zaWduZWQgbG9uZyBXZWJTb2NrZXQ6
OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRSh1a2FpKTogYXNrIHBsYXRm
b3JtIGNvZGUgdG8gZ2V0IGJ1ZmZlcmVkIGFtb3VudCB0byBiZSBzZW50LgorICAgIHJldHVybiAw
OworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmFkZEV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICAvLyBGSVhNRSh1a2FpKTogaW1wbGVt
ZW50IHRoaXMuCit9CisKK3ZvaWQgV2ViU29ja2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1
c2VDYXB0dXJlKQoreworICAgIC8vIEZJWE1FKHVrYWkpOiBpbXBsZW1lbnQgdGhpcy4KK30KKwor
Ym9vbCBXZWJTb2NrZXQ6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIEZJWE1FKHVrYWkpOiBpbXBsZW1lbnQgdGhpcy4K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpkaWRDb25uZWN0KCkKK3sK
KyAgICBpZiAobV9zdGF0ZSAhPSBDT05ORUNUSU5HKSB7CisgICAgICAgIGRpZENsb3NlKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zdGF0ZSA9IE9QRU47CisgICAgZGlzcGF0Y2hP
cGVuRXZlbnQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbnN0
IFN0cmluZyYgbXNnKQoreworICAgIGlmIChtX3N0YXRlICE9IE9QRU4pCisgICAgICAgIHJldHVy
bjsKKyAgICBkaXNwYXRjaE1lc3NhZ2VFdmVudChtc2cpOworfQorCit2b2lkIFdlYlNvY2tldDo6
ZGlkQ2xvc2UoKQoreworICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgZGlzcGF0Y2hDbG9zZUV2
ZW50KCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpkaXNwYXRjaE9wZW5FdmVudCgpCit7CisgICAg
Ly8gRklYTUUodWthaSk6IGltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIFdlYlNvY2tldDo6ZGlz
cGF0Y2hNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBtc2cpCit7CisgICAgLy8gRklYTUUodWth
aSk6IGltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIFdlYlNvY2tldDo6ZGlzcGF0Y2hDbG9zZUV2
ZW50KCkKK3sKKyAgICAvLyBGSVhNRSh1a2FpKTogaW1wbGVtZW50IHRoaXMuCit9CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTE0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJTb2NrZXRfaAorI2RlZmluZSBXZWJTb2NrZXRfaAorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHJpbmc7CisKK2NsYXNzIFdlYlNvY2tldCA6IHB1
YmxpYyBSZWZDb3VudGVkPFdlYlNvY2tldD4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFj
dGl2ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViU29ja2V0
PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYlNvY2tldChjb250ZXh0KSk7IH0KKyAgICB2aXJ0dWFsIH5XZWJTb2NrZXQoKTsK
KworICAgIGVudW0gU3RhdGUgeworICAgICAgICBDT05ORUNUSU5HID0gMCwKKyAgICAgICAgT1BF
TiA9IDEsCisgICAgICAgIENMT1NFRCA9IDIKKyAgICB9OworCisgICAgdm9pZCBjb25uZWN0KGNv
bnN0IEtVUkwmIHVybCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgY29ubmVjdChjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAg
IGJvb2wgc2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAg
IHZvaWQgY2xvc2UoKTsKKworICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0OworICAgIFN0YXRl
IHJlYWR5U3RhdGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkg
Y29uc3Q7CisKKyAgICB2b2lkIHNldE9ub3BlbihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2
ZW50TGlzdGVuZXIpIHsgbV9vbm9wZW4gPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0
ZW5lciogb25vcGVuKCkgY29uc3QgeyByZXR1cm4gbV9vbm9wZW4uZ2V0KCk7IH0KKyAgICB2b2lk
IHNldE9ubWVzc2FnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsg
bV9vbm1lc3NhZ2UgPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25tZXNz
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9vbm1lc3NhZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9u
Y2xvc2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25jbG9z
ZSA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmNsb3NlKCkgY29uc3Qg
eyByZXR1cm4gbV9vbmNsb3NlLmdldCgpOyB9CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZp
cnR1YWwgV2ViU29ja2V0KiB0b1dlYlNvY2tldCgpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIHZp
cnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0OworCisgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVy
ZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2Rl
Jik7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICAvLyB2aXJ0dWFsIGJvb2wgaGFzUGVu
ZGluZ0FjdGl2aXR5KCkgY29uc3Q7CisgICAgLy8gdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95
ZWQoKTsKKyAgICAvLyB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OworICAgIC8vIHZp
cnR1YWwgdm9pZCBzdXNwZW5kKCk7CisgICAgLy8gdmlydHVhbCB2b2lkIHJlc3VtZSgpOworICAg
IC8vIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tl
dD46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldD46OmRlcmVmOworCitwcml2
YXRlOgorICAgIFdlYlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRl
cmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKworICAgIC8vIFdlYlNvY2tldENoYW5uZWxD
bGllbnQKKyAgICB2b2lkIGRpZENvbm5lY3QoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
KGNvbnN0IFN0cmluZyYgbXNnKTsKKyAgICB2b2lkIGRpZENsb3NlKCk7CisKKyAgICB2b2lkIGRp
c3BhdGNoT3BlbkV2ZW50KCk7CisgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VFdmVudChjb25zdCBT
dHJpbmcmIG1zZyk7CisgICAgdm9pZCBkaXNwYXRjaENsb3NlRXZlbnQoKTsKKworICAgIC8vIEZJ
WE1FKHVrYWkpOiBhZGQgV2ViU29ja2V0Q2hhbm5lbC4KKworICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiBtX29ub3BlbjsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbm1lc3NhZ2U7Cisg
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25jbG9zZTsKKworICAgIFN0YXRlIG1fc3RhdGU7
CisgICAgS1VSTCBtX3VybDsKKyAgICBTdHJpbmcgbV9wcm90b2NvbDsKK307CisKK30gIC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gV2ViU29ja2V0X2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlOTMxOQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsCkBAIC0wLDAg
KzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworbW9kdWxlIHdlYnNvY2tldHMgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAg
Q3VzdG9tTWFya0Z1bmN0aW9uLAorICAgICAgICBOb1N0YXRpY1RhYmxlcywKKyAgICAgICAgQ29u
ZGl0aW9uYWw9V0VCX1NPQ0tFVFMKKyAgICBdIFdlYlNvY2tldCB7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgVVJMOworCisgICAgICAgIC8vIHJlYWR5IHN0YXRlCisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTk5FQ1RJTkcgPSAwOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBPUEVOID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ0xP
U0VEID0gMjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHJlYWR5
U3RhdGU7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgYnVmZmVy
ZWRBbW91bnQ7ICAvLyBUT0RPKHVrYWkpCisKKyAgICAgICAgLy8gbmV0d29ya2luZworICAgICAg
ICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm9wZW47CisgICAgICAgIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9ubWVzc2FnZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25j
bG9zZTsKKworICAgICAgICBbQ3VzdG9tXSBib29sZWFuIHNlbmQoaW4gRE9NU3RyaW5nIGRhdGEp
CisgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgY2xvc2UoKTsK
KworICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKKyAgICAgICAgLy8gW0N1c3RvbV0g
dm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAvLyAgIGlu
IEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgIC8vICAgaW4gYm9vbGVhbiB1c2VDYXB0
dXJlKTsKKyAgICAgICAgLy8gW0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERP
TVN0cmluZyB0eXBlLAorICAgICAgICAvLyAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisg
ICAgICAgIC8vICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgLy8gYm9vbGVhbiBk
aXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkKKyAgICAgICAgLy8gICByYWlzZXMoRXZlbnRFeGNl
cHRpb24pOworICAgIH07Cit9
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33967</attachid>
            <date>2009-08-03 02:35:49 -0700</date>
            <delta_ts>2009-08-03 21:45:13 -0700</delta_ts>
            <desc>add WebSocket.idl and js binding classes</desc>
            <filename>bug-27209-20090803183548.patch</filename>
            <type>text/plain</type>
            <size>31913</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
N2RjNzMxNy4uYzEzZDMxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAwOS0wOC0wMyAgRnVtaXRvc2hpIFVr
YWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgV2ViU29ja2V0LmlkbAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcyMDkKKworICAgICAgICBBZGQgV2ViU29ja2V0
LmlkbCBpbiBXZWJDb3JlL3dlYnNvY2tldHMvIGFuZCBpdHMganMgYmluZGluZ3MuCisKKyAgICAg
ICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6SlNXZWJT
b2NrZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RXZWJTb2NrZXQp
OgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0
RGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmNsYXNzSW5m
byk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjptYXJrKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViU29ja2V0OjpzZW5kKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpXZWJTb2NrZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0Ojp+V2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldDo6Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnNlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnJlYWR5U3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpidWZmZXJlZEFtb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0OjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJT
b2NrZXQ6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRD
b25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkUmVjZWl2ZU1lc3NhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXQ6OmRpc3BhdGNoT3BlbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldDo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29j
a2V0OjpkaXNwYXRjaENsb3NlRXZlbnQpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0OjopOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpz
ZXRPbm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpvbm9wZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0OjpzZXRPbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViU29ja2V0Ojpvbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpzZXRP
bmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6b25jbG9zZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJTb2NrZXQ6OnRvV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpk
ZXJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGw6IEFk
ZGVkLgorCiAyMDA5LTA4LTAyICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IDJjOTRkZjAuLjE1MzllNWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAg
LTQxLDYgKzQxLDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJDb3JlKS93bWwgXAogICAgICQoV2Vi
Q29yZSkvd29ya2VycyBcCiAgICAgJChXZWJDb3JlKS9zdmcgXAorICAgICQoV2ViQ29yZSkvd2Vi
c29ja2V0cyBcCiAjCiAKIERPTV9DTEFTU0VTID0gXApAQCAtMzczLDYgKzM3NCw3IEBAIERPTV9D
TEFTU0VTID0gXAogICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlIFwKICAgICBXZWJLaXRQb2lu
dCBcCiAgICAgV2ViS2l0VHJhbnNpdGlvbkV2ZW50IFwKKyAgICBXZWJTb2NrZXQgXAogICAgIFdo
ZWVsRXZlbnQgXAogICAgIFdvcmtlciBcCiAgICAgV29ya2VyQ29udGV4dCBcCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAw
YjE4ZGQ1Li4wMDE0YWU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTMxMjgsMTAgKzMxMjgsMjAgQEAgZW5kaWYgIyBF
TkQgRU5BQkxFX1NWRwogaWYgRU5BQkxFX1dFQl9TT0NLRVRTCiBGRUFUVVJFX0RFRklORVNfSkFW
QVNDUklQVCArPSBFTkFCTEVfV0VCX1NPQ0tFVFM9MQogCitJRExfQklORElOR1MgKz0gXAorCVdl
YkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsCisKIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAog
CS1ERU5BQkxFX1dFQl9TT0NLRVRTPTEgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvd2Vic29ja2V0
cwogCit3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2Nr
ZXRDb25zdHJ1Y3Rvci5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25z
dHJ1Y3Rvci5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcCBc
CisJV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgXAorCVdlYkNvcmUvd2Vic29ja2V0
cy9XZWJTb2NrZXQuaAorCiBlbHNlCiB3ZWJjb3JlX2NwcGZsYWdzICs9IC1ERU5BQkxFX1dFQl9T
T0NLRVRTPTAKIGVuZGlmICAjIEVORCBFTkFCTEVfV0VCX1NPQ0tFVFMKQEAgLTMyMzYsNiArMzI0
Niw3IEBAIElETF9QQVRIIDo9IFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCiAgICAgJChXZWJDb3Jl
KS94bWwgXAogICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCisgICAgJChXZWJDb3JlKS93ZWJzb2Nr
ZXRzIFwKICAgICAkKFdlYkNvcmUpL3dvcmtlcnMKIAogdnBhdGggJS5pZGwgPSAkKElETF9QQVRI
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNjNhMjFh
Li4yMDUyMjA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtODU0LDYgKzg1NCwxMSBAQAogCQk1MTc0MUQxMDBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0Zv
cndhcmRMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNzQxRDBDMEIwNzI1OUEwMEVENDQyQyAvKiBCYWNrRm9yd2FyZExpc3QuY3BwICovOyB9
OwogCQk1MTc0MUQxMTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzQxRDBEMEIwNzI1OUEwMEVE
NDQyQyAvKiBIaXN0b3J5SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxNzQxRDEyMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQw
RTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uY3BwICovOyB9OworCQk1MThBMzRDMTEw
MjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEJFMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2Nr
ZXQuY3BwICovOyB9OworCQk1MThBMzRDMjEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThBMzRCRjEw
MjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmggKi87IH07CisJCTUxOEEzNEM3MTAyNkM4Qzkw
MDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEM0MTAyNkM4QzkwMDFCNjg5NiAvKiBK
U1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJNTE4QTM0QzgxMDI2QzhDOTAwMUI2
ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEM1MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNv
Y2tldENvbnN0cnVjdG9yLmggKi87IH07CisJCTUxOEEzNEM5MTAyNkM4QzkwMDFCNjg5NiAvKiBK
U1dlYlNvY2tldEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MThBMzRDNjEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDdXN0b20u
Y3BwICovOyB9OwogCQk1MTk2MTE2QTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5NjExNUUwQ0FD
NTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmNwcCAqLzsgfTsKIAkJNTE5NjExNkIwQ0FDNTY1NzAw
MTBBODBDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTk2MTE1RjBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaCAqLzsgfTsK
IAkJNTE5NjExNkQwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTYxMENBQzU2NTcw
MDEwQTgwQyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgKi87IH07CkBAIC01ODYyLDYgKzU4NjcsMTIg
QEAKIAkJNTE3NDFEMEMwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tGb3J3YXJkTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYWNrRm9yd2FyZExpc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc0MUQwRDBCMDcyNTlBMDBFRDQ0MkMgLyog
SGlzdG9yeUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhpc3RvcnlJ
dGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzQxRDBFMEIwNzI1OUEwMEVE
NDQyQyAvKiBIaXN0b3J5SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSGlzdG9yeUl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MThB
MzRCRTEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNvY2tldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxOEEzNEJGMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU29ja2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxOEEzNEMwMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFdlYlNvY2tldC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxOEEzNEM0MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViU29ja2V0Q29u
c3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MThBMzRDNTEwMjZD
OEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxOEEzNEM2MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldEN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYlNvY2tl
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOTYxMTVFMENBQzU2
NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOTYx
MTVGMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTk2
MTE2MDBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IERhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0OTcsNiAr
OTUwOCw3IEBACiAJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUxOEEzNEJEMTAyNkM4MzEw
MDFCNjg5NiAvKiB3ZWJzb2NrZXRzICovLAogCQkJCTY1Qzk3QUYyMDhFQTkwODgwMEFDRDI3MyAv
KiBjb25maWcuaCAqLywKIAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVBy
ZWZpeC5oICovLAogCQkJCTkzMDcwNjEzMDlFMENBODIwMEIxN0ZFNCAvKiBEZXJpdmVkU291cmNl
cy5tYWtlICovLApAQCAtMTAyMjAsNiArMTAyMzIsMTYgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJ
CXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJNTE4QTM0QkQxMDI2QzgzMTAwMUI2ODk2IC8qIHdlYnNv
Y2tldHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUx
OEEzNEJFMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuY3BwICovLAorCQkJCTUxOEEzNEJG
MTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaCAqLywKKwkJCQk1MThBMzRDMDEwMjZDODMx
MDAxQjY4OTYgLyogV2ViU29ja2V0LmlkbCAqLywKKwkJCSk7CisJCQlwYXRoID0gd2Vic29ja2V0
czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTVEQ0Y4MzY5MEQ1OTE1Nzgw
MDk1M0JDNiAvKiBwbHVnaW5zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKQEAgLTEzNDk1LDYgKzEzNTE3LDkgQEAKIAkJQkMxQTM3OTMwOTdDNkZCMTAwMTlGM0Q4
IC8qIGpzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1
MThBMzRDNDEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAgKi8s
CisJCQkJNTE4QTM0QzUxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3Iu
aCAqLywKKwkJCQk1MThBMzRDNjEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDdXN0b20u
Y3BwICovLAogCQkJCUJDNEVERUY3MEMwOEY0MTQwMDdFREQ0OSAvKiBDdXN0b20gKi8sCiAJCQkJ
MTRERkIzM0YwQTdERjc2MzAwMThGNzY5IC8qIERlcml2ZWQgU291cmNlcyAqLywKIAkJCQk5M0Y4
QjMwNjBBMzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovLApAQCAtMTcwNzcs
NiArMTcxMDIsOCBAQAogCQkJCTI0RjU0RUFEMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlv
bkNhY2hlSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFBM0Q1OEYxMDFDMTUyRDAwMzE2RDA3
IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EyNDU4N0Mx
MDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MThBMzRDMjEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MThBMzRDODEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0xOTEyMSw2ICsxOTE0OCw5IEBACiAJCQkJMjRGNTRFQUMxMDFG
RTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQxQTNENThFMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0EyNDU4N0IxMDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3Rv
ckRPTUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxOEEzNEMxMTAyNkM4MzEwMDFCNjg5
NiAvKiBXZWJTb2NrZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE4QTM0QzcxMDI2QzhDOTAw
MUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTE4QTM0QzkxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0
cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmN2FiMwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAK
QEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1NP
Q0tFVFMpCisKKyNpbmNsdWRlICJKU1dlYlNvY2tldENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRl
ICJKU1dlYlNvY2tldC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJTb2NrZXQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTV2ViU29ja2V0Q29uc3Ry
dWN0b3IpOworCitjb25zdCBDbGFzc0luZm8gSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiV2ViU29ja2V0Q29uc3RydWN0b3IiLCAwLCAwLCAwIH07CisKK0pTV2ViU29ja2V0Q29u
c3RydWN0b3I6OkpTV2ViU29ja2V0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNX
ZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b2JqZWN0
UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTV2ViU29ja2V0UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGds
b2JhbE9iamVjdCksIE5vbmUpOworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7
Cit9CisKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0V2ViU29ja2V0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIEpT
V2ViU29ja2V0Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU1dlYlNv
Y2tldENvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSZWZlcmVu
Y2VFcnJvciwgIldlYlNvY2tldCBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVu
YXZhaWxhYmxlIik7CisKKyAgICBpZiAoYXJncy5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwor
CisgICAgaWYgKGFyZ3MuYXQoMCkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJ1bmRlZmluZWQgVVJMIik7CisKKyAgICBjb25zdCBT
dHJpbmcmIHVybFN0cmluZyA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50
YXhFcnJvciwgIndyb25nIFVSTCIpOworICAgIGNvbnN0IEtVUkwmIHVybCA9IGNvbnRleHQtPmNv
bXBsZXRlVVJMKHVybFN0cmluZyk7CisgICAgUmVmUHRyPFdlYlNvY2tldD4gd2ViU29ja2V0ID0g
V2ViU29ja2V0OjpjcmVhdGUoY29udGV4dCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgd2ViU29ja2V0LT5jb25uZWN0KHVybCwg
ZWMpOworICAgIGVsc2UgeworICAgICAgICBpZiAoYXJncy5hdCgxKS5pc1VuZGVmaW5lZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJwcm90b2Nv
bCBpcyB1bmRlZmluZWQiKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBwcm90b2NvbCA9IGFyZ3Mu
YXQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAid3Jvbmcg
cHJvdG9jb2wiKTsKKyAgICAgICAgaWYgKCFwcm90b2NvbC5sZW5ndGgoKSkKKyAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAicHJvdG9jb2wgaXMgZW1wdHki
KTsKKyAgICAgICAgd2ViU29ja2V0LT5jb25uZWN0KHVybCwgcHJvdG9jb2wsIGVjKTsKKyAgICB9
CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gQ1JFQVRFX0RPTV9P
QkpFQ1RfV1JBUFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgV2ViU29j
a2V0LCB3ZWJTb2NrZXQuZ2V0KCkpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTV2ViU29ja2V0Q29u
c3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkK
K3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdFdlYlNvY2tl
dDsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNv
Y2tldENvbnN0cnVjdG9yLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3Ry
dWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjk2NDdhCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9y
LmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTV2ViU29ja2V0Q29uc3RydWN0b3JfaAorI2Rl
ZmluZSBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTV2ViU29ja2V0Q29uc3RydWN0b3Ig
OiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworICBwdWJsaWM6CisgICAgSlNXZWJTb2Nr
ZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAg
c3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICBwcml2YXRlOgorICAgIHZp
cnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3RE
YXRhJik7CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29u
c3QgeyByZXR1cm4gJnNfaW5mbzsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmICAvLyBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYlNvY2tldEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Mzg0ZmJkZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2Nr
ZXRDdXN0b20uY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSAiSlNXZWJTb2NrZXQuaCIKKworI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3ZvaWQgSlNXZWJTb2NrZXQ6Om1hcmsoKQoreworICAgIEJhc2U6Om1hcmsoKTsKKyAgICBpZiAo
bV9pbXBsLT5yZWFkeVN0YXRlKCkgIT0gV2ViU29ja2V0OjpDTE9TRUQpCisgICAgICAgIG1hcmtJ
Zk5vdE51bGwobV9pbXBsLT5vbm1lc3NhZ2UoKSk7CisgICAgLy8gRklYTUUodWthaSk6IG1hcmsg
aWYgRXZlbnRMaXN0ZW5lcnMgaXMgcmVnaXN0ZXJlZC4KK30KKworLy8gQ3VzdG9tIGZ1bmN0aW9u
cworSlNWYWx1ZSBKU1dlYlNvY2tldDo6c2VuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOworCisg
ICAgY29uc3QgU3RyaW5nJiBtc2cgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
U3ludGF4RXJyb3IsICJiYWQgbWVzc2FnZSBkYXRhLiIpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIEpTVmFsdWUgcmV0ID0ganNCb29sZWFuKGltcGwoKS0+c2VuZChtc2csIGVjKSk7
CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gcmV0OworfQorCisv
LyBGSVhNRSh1a2FpKTogaW1wbGVtZW50IGFkZEV2ZW50TGlzdGVuZXIvcmVtb3ZlRXZlbnRMaXN0
ZW5lci4KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJT
b2NrZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNWVhNmEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtMCww
ICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMp
CisKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVk
ZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYlNvY2tl
dDo6V2ViU29ja2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBBY3Rp
dmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1fc3RhdGUoQ09OTkVDVElORykKKyAg
ICAsIG1fcHJvdG9jb2woIiIpCit7Cit9CisKK1dlYlNvY2tldDo6fldlYlNvY2tldCgpCit7Cisg
ICAgaWYgKG1fc3RhdGUgIT0gQ0xPU0VEKQorICAgICAgICBjbG9zZSgpOworfQorCit2b2lkIFdl
YlNvY2tldDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIGNvbm5lY3QodXJsLCAiIiwgZWMpOworfQorCit2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIG1fdXJsID0gdXJsOworICAgIG1fcHJvdG9jb2wgPSBwcm90b2NvbDsKKworICAg
IGlmICghbV91cmwucHJvdG9jb2xJcygid3MiKSAmJiAhbV91cmwucHJvdG9jb2xJcygid3NzIikp
IHsKKyAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZJWE1FKHVrYWkpOiBDaGVjayBwcm90b2Nv
bCBpcyB2YWxpZCBmb3JtLgorICAgIC8vIEZJWE1FKHVrYWkpOiBDb25uZWN0IFdlYlNvY2tldENo
YW5uZWwuCit9CisKK2Jvb2wgV2ViU29ja2V0OjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gT1BFTikgeworICAgICAg
ICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIC8vIEZJWE1FKHVrYWkpOiBzZW5kIG1lc3NhZ2Ugb24gV2ViU29ja2V0Q2hhbm5lbC4KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpjbG9zZSgpCit7CisgICAgaWYg
KG1fc3RhdGUgPT0gQ0xPU0VEKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGF0ZSA9IENMT1NF
RDsKKyAgICAvLyBGSVhNRSh1a2FpKTogY2xvc2UgV2ViU29ja2V0Q2hhbm5lbC4KK30KKworY29u
c3QgS1VSTCYgV2ViU29ja2V0Ojp1cmwoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybDsKK30K
KworV2ViU29ja2V0OjpTdGF0ZSBXZWJTb2NrZXQ6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX3N0YXRlOworfQorCit1bnNpZ25lZCBsb25nIFdlYlNvY2tldDo6YnVmZmVyZWRB
bW91bnQoKSBjb25zdAoreworICAgIC8vIEZJWE1FKHVrYWkpOiBhc2sgcGxhdGZvcm0gY29kZSB0
byBnZXQgYnVmZmVyZWQgYW1vdW50IHRvIGJlIHNlbnQuCisgICAgcmV0dXJuIDA7Cit9CisKK1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdlYlNvY2tldDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwg
Ym9vbCB1c2VDYXB0dXJlKQoreworICAgIC8vIEZJWE1FKHVrYWkpOiBpbXBsZW1lbnQgdGhpcy4K
K30KKwordm9pZCBXZWJTb2NrZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUp
Cit7CisgICAgLy8gRklYTUUodWthaSk6IGltcGxlbWVudCB0aGlzLgorfQorCitib29sIFdlYlNv
Y2tldDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgLy8gRklYTUUodWthaSk6IGltcGxlbWVudCB0aGlzLgorICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRpZENvbm5lY3QoKQoreworICAgIGlmICht
X3N0YXRlICE9IENPTk5FQ1RJTkcpIHsKKyAgICAgICAgZGlkQ2xvc2UoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBtX3N0YXRlID0gT1BFTjsKKyAgICBkaXNwYXRjaE9wZW5FdmVudCgp
OworfQorCit2b2lkIFdlYlNvY2tldDo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
c2cpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gT1BFTikKKyAgICAgICAgcmV0dXJuOworICAgIGRp
c3BhdGNoTWVzc2FnZUV2ZW50KG1zZyk7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpkaWRDbG9zZSgp
Cit7CisgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICBkaXNwYXRjaENsb3NlRXZlbnQoKTsKK30K
Kwordm9pZCBXZWJTb2NrZXQ6OmRpc3BhdGNoT3BlbkV2ZW50KCkKK3sKKyAgICAvLyBGSVhNRSh1
a2FpKTogaW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgV2ViU29ja2V0OjpkaXNwYXRjaE1lc3Nh
Z2VFdmVudChjb25zdCBTdHJpbmcmIG1zZykKK3sKKyAgICAvLyBGSVhNRSh1a2FpKTogaW1wbGVt
ZW50IHRoaXMuCit9CisKK3ZvaWQgV2ViU29ja2V0OjpkaXNwYXRjaENsb3NlRXZlbnQoKQorewor
ICAgIC8vIEZJWE1FKHVrYWkpOiBpbXBsZW1lbnQgdGhpcy4KK30KKworfSAgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29j
a2V0LmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjJlMTQwNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNvY2tldF9o
CisjZGVmaW5lIFdlYlNvY2tldF9oCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNp
bmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgor
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgV2ViU29ja2V0IDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViU29ja2V0PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJTb2NrZXQ+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
U29ja2V0KGNvbnRleHQpKTsgfQorICAgIHZpcnR1YWwgfldlYlNvY2tldCgpOworCisgICAgZW51
bSBTdGF0ZSB7CisgICAgICAgIENPTk5FQ1RJTkcgPSAwLAorICAgICAgICBPUEVOID0gMSwKKyAg
ICAgICAgQ0xPU0VEID0gMgorICAgIH07CisKKyAgICB2b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYg
dXJsLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgYm9vbCBzZW5k
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBjbG9z
ZSgpOworCisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3Q7CisgICAgU3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0T25vcGVuKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5l
cikgeyBtX29ub3BlbiA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbm9w
ZW4oKSBjb25zdCB7IHJldHVybiBtX29ub3Blbi5nZXQoKTsgfQorICAgIHZvaWQgc2V0T25tZXNz
YWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29ubWVzc2Fn
ZSA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbm1lc3NhZ2UoKSBjb25z
dCB7IHJldHVybiBtX29ubWVzc2FnZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0T25jbG9zZShQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbmNsb3NlID0gZXZlbnRM
aXN0ZW5lcjsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9uY2xvc2UoKSBjb25zdCB7IHJldHVybiBt
X29uY2xvc2UuZ2V0KCk7IH0KKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCBXZWJT
b2NrZXQqIHRvV2ViU29ja2V0KCkgeyByZXR1cm4gdGhpczsgfQorCisgICAgdmlydHVhbCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgdmlydHVhbCBib29s
IGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAg
IC8vIEFjdGl2ZURPTU9iamVjdAorICAgIC8vIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZp
dHkoKSBjb25zdDsKKyAgICAvLyB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOworICAg
IC8vIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CisgICAgLy8gdmlydHVhbCB2b2lk
IHN1c3BlbmQoKTsKKyAgICAvLyB2aXJ0dWFsIHZvaWQgcmVzdW1lKCk7CisgICAgLy8gdmlydHVh
bCB2b2lkIHN0b3AoKTsKKworICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Pjo6cmVmOwor
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Pjo6ZGVyZWY7CisKK3ByaXZhdGU6CisgICAg
V2ViU29ja2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIHZpcnR1YWwgdm9pZCBy
ZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRh
cmdldCgpIHsgZGVyZWYoKTsgfQorCisgICAgLy8gV2ViU29ja2V0Q2hhbm5lbENsaWVudAorICAg
IHZvaWQgZGlkQ29ubmVjdCgpOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtc2cpOworICAgIHZvaWQgZGlkQ2xvc2UoKTsKKworICAgIHZvaWQgZGlzcGF0Y2hPcGVu
RXZlbnQoKTsKKyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgbXNn
KTsKKyAgICB2b2lkIGRpc3BhdGNoQ2xvc2VFdmVudCgpOworCisgICAgLy8gRklYTUUodWthaSk6
IGFkZCBXZWJTb2NrZXRDaGFubmVsLgorCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25v
cGVuOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29ubWVzc2FnZTsKKyAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbV9vbmNsb3NlOworCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBLVVJM
IG1fdXJsOworICAgIFN0cmluZyBtX3Byb3RvY29sOworfTsKKworfSAgLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmICAvLyBXZWJTb2NrZXRfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldC5pZGwgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGI5MTZmCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwKQEAgLTAsMCArMSw2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitt
b2R1bGUgd2Vic29ja2V0cyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDdXN0b21NYXJr
RnVuY3Rpb24sCisgICAgICAgIE5vU3RhdGljVGFibGVzLAorICAgICAgICBDb25kaXRpb25hbD1X
RUJfU09DS0VUUworICAgIF0gV2ViU29ja2V0IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBVUkw7CisKKyAgICAgICAgLy8gcmVhZHkgc3RhdGUKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgQ09OTkVDVElORyA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IE9QRU4gPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDTE9TRUQgPSAyOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZTsKKwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudDsK
KworICAgICAgICAvLyBuZXR3b3JraW5nCisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9ub3BlbjsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOworICAg
ICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNsb3NlOworCisgICAgICAgIFtDdXN0b21d
IGJvb2xlYW4gc2VuZChpbiBET01TdHJpbmcgZGF0YSkKKyAgICAgICAgICByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgICAgIC8vIEV2ZW50VGFyZ2V0
IGludGVyZmFjZQorICAgICAgICAvLyBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4g
RE9NU3RyaW5nIHR5cGUsCisgICAgICAgIC8vICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwK
KyAgICAgICAgLy8gICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICAvLyBbQ3VzdG9t
XSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgIC8v
ICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgLy8gICBpbiBib29sZWFuIHVz
ZUNhcHR1cmUpOworICAgICAgICAvLyBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0
KQorICAgICAgICAvLyAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisgICAgfTsKK30=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34035</attachid>
            <date>2009-08-03 21:45:18 -0700</date>
            <delta_ts>2009-08-04 19:12:51 -0700</delta_ts>
            <desc>Add WebSocket.idl and js binding classes</desc>
            <filename>bug-27209-20090804134517.patch</filename>
            <type>text/plain</type>
            <size>31692</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODJmZjZhNC4uY2NkNTA3MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0wOC0wMyAgRnVtaXRvc2hpIFVr
YWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgV2ViU29ja2V0LmlkbAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcyMDkKKyAgICAgICAgCisgICAgICAgIEFkZCBX
ZWJTb2NrZXQuaWRsIGluIFdlYkNvcmUvd2Vic29ja2V0cy8uCisgICAgICAgIEFkZCBidWlsZCBz
eXN0ZW1zIG9ubHkgZm9yIEdOVW1ha2VmaWxlLmFtIGFuZCBXZWJDb3JlLnhjb2RlcHJvaiBub3cu
CisgICAgICAgIE90aGVyIGJ1aWxkIHN5c3RlbXMgd2lsbCBiZSB1cGRhdGVkIG9uY2UgdGhlIGNv
ZGUgaXMgZnVuY3Rpb25hbC4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3Iu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpKU1dl
YlNvY2tldENvbnN0cnVjdG9yOjpKU1dlYlNvY2tldENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnN0cnVjdFdlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tl
dENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1dlYlNvY2tldENvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJT
b2NrZXRDb25zdHJ1Y3Rvcjo6Y2xhc3NJbmZvKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dl
YlNvY2tldEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXQ6
Om1hcmspOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXQ6OnNlbmQpOgorICAgICAgICAq
IHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJT
b2NrZXQ6OldlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6On5XZWJTb2Nr
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25uZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYlNvY2tldDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6dXJsKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldDo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6
OmJ1ZmZlcmVkQW1vdW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmFkZEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpyZW1vdmVFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpZENvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
U29ja2V0OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6
OmRpZENsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlzcGF0Y2hPcGVuRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaXNwYXRjaE1lc3NhZ2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpc3BhdGNoQ2xvc2VFdmVudCk6CisgICAg
ICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6Oik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnNldE9ub3Blbik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6Om9ub3Blbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnNldE9ubWVz
c2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6Om9ubWVzc2FnZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJTb2NrZXQ6OnNldE9uY2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
U29ja2V0OjpvbmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6dG9XZWJTb2Nr
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpyZWZFdmVudFRhcmdldCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAqIHdl
YnNvY2tldHMvV2ViU29ja2V0LmlkbDogQWRkZWQuCisKIDIwMDktMDgtMDMgIEplcmVteSBPcmxv
dyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDJjOTRkZjAuLjE1MzllNWMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKQEAgLTQxLDYgKzQxLDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJDb3JlKS93bWwgXAogICAg
ICQoV2ViQ29yZSkvd29ya2VycyBcCiAgICAgJChXZWJDb3JlKS9zdmcgXAorICAgICQoV2ViQ29y
ZSkvd2Vic29ja2V0cyBcCiAjCiAKIERPTV9DTEFTU0VTID0gXApAQCAtMzczLDYgKzM3NCw3IEBA
IERPTV9DTEFTU0VTID0gXAogICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlIFwKICAgICBXZWJL
aXRQb2ludCBcCiAgICAgV2ViS2l0VHJhbnNpdGlvbkV2ZW50IFwKKyAgICBXZWJTb2NrZXQgXAog
ICAgIFdoZWVsRXZlbnQgXAogICAgIFdvcmtlciBcCiAgICAgV29ya2VyQ29udGV4dCBcCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpp
bmRleCAxZjFhMWIwLi43ZTQ2NzQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTMxMzAsMTAgKzMxMzAsMjAgQEAgZW5k
aWYgIyBFTkQgRU5BQkxFX1NWRwogaWYgRU5BQkxFX1dFQl9TT0NLRVRTCiBGRUFUVVJFX0RFRklO
RVNfSkFWQVNDUklQVCArPSBFTkFCTEVfV0VCX1NPQ0tFVFM9MQogCitJRExfQklORElOR1MgKz0g
XAorCVdlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsCisKIHdlYmNvcmVfY3BwZmxhZ3Mg
Kz0gXAogCS1ERU5BQkxFX1dFQl9TT0NLRVRTPTEgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvd2Vi
c29ja2V0cwogCit3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2Nr
ZXRDb25zdHJ1Y3Rvci5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9t
LmNwcCBcCisJV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgXAorCVdlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuaAorCiBlbHNlCiB3ZWJjb3JlX2NwcGZsYWdzICs9IC1ERU5BQkxF
X1dFQl9TT0NLRVRTPTAKIGVuZGlmICAjIEVORCBFTkFCTEVfV0VCX1NPQ0tFVFMKQEAgLTMyMzgs
NiArMzI0OCw3IEBAIElETF9QQVRIIDo9IFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCiAgICAgJChX
ZWJDb3JlKS94bWwgXAogICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCisgICAgJChXZWJDb3JlKS93
ZWJzb2NrZXRzIFwKICAgICAkKFdlYkNvcmUpL3dvcmtlcnMKIAogdnBhdGggJS5pZGwgPSAkKElE
TF9QQVRIKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAy
OTI1MjUzLi5lMzA5ODZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtODU2LDYgKzg1NiwxMSBAQAogCQk1MTc0MUQxMDBCMDcyNTlBMDBFRDQ0MkMgLyog
QmFja0ZvcndhcmRMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNzQxRDBDMEIwNzI1OUEwMEVENDQyQyAvKiBCYWNrRm9yd2FyZExpc3QuY3Bw
ICovOyB9OwogCQk1MTc0MUQxMTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzQxRDBEMEIwNzI1
OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxNzQxRDEyMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5
SXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTc0MUQwRTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uY3BwICovOyB9OworCQk1MThB
MzRDMTEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEJFMTAyNkM4MzEwMDFCNjg5NiAvKiBX
ZWJTb2NrZXQuY3BwICovOyB9OworCQk1MThBMzRDMjEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29j
a2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThB
MzRCRjEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmggKi87IH07CisJCTUxOEEzNEM3MTAy
NkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEM0MTAyNkM4QzkwMDFCNjg5
NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJNTE4QTM0QzgxMDI2QzhD
OTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEM1MTAyNkM4QzkwMDFCNjg5NiAvKiBK
U1dlYlNvY2tldENvbnN0cnVjdG9yLmggKi87IH07CisJCTUxOEEzNEM5MTAyNkM4QzkwMDFCNjg5
NiAvKiBKU1dlYlNvY2tldEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MThBMzRDNjEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRD
dXN0b20uY3BwICovOyB9OwogCQk1MTk2MTE2QTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5NjEx
NUUwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmNwcCAqLzsgfTsKIAkJNTE5NjExNkIwQ0FD
NTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTk2MTE1RjBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaCAq
LzsgfTsKIAkJNTE5NjExNkQwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTYxMENB
QzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgKi87IH07CkBAIC01ODY2LDYgKzU4
NzEsMTIgQEAKIAkJNTE3NDFEMEMwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tGb3J3YXJkTGlzdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYWNrRm9yd2FyZExpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc0MUQwRDBCMDcyNTlBMDBFRDQ0
MkMgLyogSGlzdG9yeUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhp
c3RvcnlJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzQxRDBFMEIwNzI1
OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSGlzdG9yeUl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MThBMzRCRTEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNvY2tldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxOEEzNEJGMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU29ja2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxOEEzNEMwMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlNvY2tldC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxOEEzNEM0MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0
cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViU29j
a2V0Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MThBMzRD
NTEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxOEEzNEM2MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNv
Y2tldEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dl
YlNvY2tldEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOTYxMTVF
MENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxOTYxMTVGMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTk2MTE2MDBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IERhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1
MDEsNiArOTUxMiw3IEBACiAJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUxOEEzNEJEMTAy
NkM4MzEwMDFCNjg5NiAvKiB3ZWJzb2NrZXRzICovLAogCQkJCTY1Qzk3QUYyMDhFQTkwODgwMEFD
RDI3MyAvKiBjb25maWcuaCAqLywKIAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2Vi
Q29yZVByZWZpeC5oICovLAogCQkJCTkzMDcwNjEzMDlFMENBODIwMEIxN0ZFNCAvKiBEZXJpdmVk
U291cmNlcy5tYWtlICovLApAQCAtMTAyMjYsNiArMTAyMzgsMTYgQEAKIAkJCXRhYldpZHRoID0g
NDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJNTE4QTM0QkQxMDI2QzgzMTAwMUI2ODk2IC8q
IHdlYnNvY2tldHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTUxOEEzNEJFMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuY3BwICovLAorCQkJCTUx
OEEzNEJGMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaCAqLywKKwkJCQk1MThBMzRDMDEw
MjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmlkbCAqLywKKwkJCSk7CisJCQlwYXRoID0gd2Vi
c29ja2V0czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTVEQ0Y4MzY5MEQ1
OTE1NzgwMDk1M0JDNiAvKiBwbHVnaW5zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKQEAgLTEzNTAxLDYgKzEzNTIzLDkgQEAKIAkJQkMxQTM3OTMwOTdDNkZCMTAw
MTlGM0Q4IC8qIGpzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk1MThBMzRDNDEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5j
cHAgKi8sCisJCQkJNTE4QTM0QzUxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3Ry
dWN0b3IuaCAqLywKKwkJCQk1MThBMzRDNjEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRD
dXN0b20uY3BwICovLAogCQkJCUJDNEVERUY3MEMwOEY0MTQwMDdFREQ0OSAvKiBDdXN0b20gKi8s
CiAJCQkJMTRERkIzM0YwQTdERjc2MzAwMThGNzY5IC8qIERlcml2ZWQgU291cmNlcyAqLywKIAkJ
CQk5M0Y4QjMwNjBBMzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovLApAQCAt
MTcwODQsNiArMTcxMDksOCBAQAogCQkJCTQxQTNENThGMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRp
Y2F0ZWRXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMjQ1ODdDMTAyMUVBRjQw
MDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwOUZD
NEUxMDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUxOEEzNEMyMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUxOEEzNEM4MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE5MTI5LDYgKzE5MTU2LDkgQEAKIAkJCQk0MUEzRDU4
RTEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdBMjQ1ODdCMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzA5RkM0QzEwMjVERUQ4MDA1OUNEQkEgLyogQWNjZXNz
aWJpbGl0eVNsaWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MThBMzRDMTEwMjZDODMxMDAx
QjY4OTYgLyogV2ViU29ja2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxOEEzNEM3MTAyNkM4
QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUxOEEzNEM5MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldEN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRD
b25zdHJ1Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOWVlMzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3Iu
Y3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdF
Ql9TT0NLRVRTKQorCisjaW5jbHVkZSAiSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oIgorCisjaW5j
bHVkZSAiSlNXZWJTb2NrZXQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiV2ViU29ja2V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1dlYlNvY2tldENv
bnN0cnVjdG9yKTsKKworY29uc3QgQ2xhc3NJbmZvIEpTV2ViU29ja2V0Q29uc3RydWN0b3I6OnNf
aW5mbyA9IHsgIldlYlNvY2tldENvbnN0cnVjdG9yIiwgMCwgMCwgMCB9OworCitKU1dlYlNvY2tl
dENvbnN0cnVjdG9yOjpKU1dlYlNvY2tldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0
KEpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1dlYlNvY2tldFByb3RvdHlwZTo6c2VsZihleGVj
LCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXZWJTb2NrZXQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7
CisgICAgSlNXZWJTb2NrZXRDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0
PEpTV2ViU29ja2V0Q29uc3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7CisgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFJlZmVyZW5jZUVycm9yLCAiV2ViU29ja2V0IGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1l
bnQgaXMgdW5hdmFpbGFibGUiKTsKKworICAgIGlmIChhcmdzLnNpemUoKSA9PSAwKQorICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1l
bnRzIik7CisKKyAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIndyb25nIFVSTCIpOworICAgIGNvbnN0IEtV
UkwmIHVybCA9IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybFN0cmluZyk7CisgICAgUmVmUHRyPFdl
YlNvY2tldD4gd2ViU29ja2V0ID0gV2ViU29ja2V0OjpjcmVhdGUoY29udGV4dCk7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgd2Vi
U29ja2V0LT5jb25uZWN0KHVybCwgZWMpOworICAgIGVsc2UgeworICAgICAgICBjb25zdCBTdHJp
bmcmIHByb3RvY29sID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICgh
cHJvdG9jb2wubGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvciwgInByb3RvY29sIGlzIGVtcHR5Iik7CisgICAgICAgIHdlYlNvY2tldC0+Y29u
bmVjdCh1cmwsIHByb3RvY29sLCBlYyk7CisgICAgfQorICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CisgICAgcmV0dXJuIENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywganNDb25z
dHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIFdlYlNvY2tldCwgd2ViU29ja2V0LmdldCgpKTsKK30K
KworQ29uc3RydWN0VHlwZSBKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRh
KENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RXZWJTb2NrZXQ7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5
cGVIb3N0OworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMDY5NjQ3YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNXZWJTb2NrZXRDb25zdHJ1Y3Rv
cl9oCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBKU1dlYlNvY2tldENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IHsKKyAgcHVibGljOgorICAgIEpTV2ViU29ja2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87CisKKyAgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgIHZpcnR1YWwgY29uc3Qg
SlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KK307
CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gSlNXZWJTb2NrZXRDb25z
dHJ1Y3Rvcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3Vz
dG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTMyYmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcApAQCAtMCwwICsxLDcy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykKKworI2lu
Y2x1ZGUgIkpTV2ViU29ja2V0LmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiV2Vi
U29ja2V0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEpTV2ViU29ja2V0OjptYXJrKCkK
K3sKKyAgICBCYXNlOjptYXJrKCk7CisgICAgaWYgKG1faW1wbC0+cmVhZHlTdGF0ZSgpICE9IFdl
YlNvY2tldDo6Q0xPU0VEKQorICAgICAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25tZXNzYWdl
KCkpOworICAgIC8vIEZJWE1FOiBtYXJrIGlmIEV2ZW50TGlzdGVuZXJzIGlzIHJlZ2lzdGVyZWQu
Cit9CisKKy8vIEN1c3RvbSBmdW5jdGlvbnMKK0pTVmFsdWUgSlNXZWJTb2NrZXQ6OnNlbmQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUo
KSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90
IGVub3VnaCBhcmd1bWVudHMiKTsKKworICAgIGNvbnN0IFN0cmluZyYgbXNnID0gYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiYmFkIG1lc3NhZ2UgZGF0YS4i
KTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBKU1ZhbHVlIHJldCA9IGpzQm9vbGVh
bihpbXBsKCktPnNlbmQobXNnLCBlYykpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgcmV0dXJuIHJldDsKK30KKworLy8gRklYTUU6IGltcGxlbWVudCBhZGRFdmVudExpc3Rl
bmVyL3JlbW92ZUV2ZW50TGlzdGVuZXIuCisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yMzk5ODEwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSAiV2ViU29ja2V0LmgiCisKKyNpbmNsdWRl
ICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZlbnRM
aXN0ZW5lci5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitXZWJTb2NrZXQ6OldlYlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgLCBtX3N0
YXRlKENPTk5FQ1RJTkcpCit7Cit9CisKK1dlYlNvY2tldDo6fldlYlNvY2tldCgpCit7CisgICAg
Y2xvc2UoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBjb25uZWN0KHVybCwgIiIsIGVjKTsKK30KKwordm9p
ZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3Rv
Y29sLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBtX3VybCA9IHVybDsKKyAgICBtX3Byb3Rv
Y29sID0gcHJvdG9jb2w7CisKKyAgICBpZiAoIW1fdXJsLnByb3RvY29sSXMoIndzIikgJiYgIW1f
dXJsLnByb3RvY29sSXMoIndzcyIpKSB7CisgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGSVhN
RTogQ2hlY2sgcHJvdG9jb2wgaXMgdmFsaWQgZm9ybS4KKyAgICAvLyBGSVhNRTogQ29ubmVjdCBX
ZWJTb2NrZXRDaGFubmVsLgorfQorCitib29sIFdlYlNvY2tldDo6c2VuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChtX3N0YXRlICE9IE9QRU4p
IHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAvLyBGSVhNRTogc2VuZCBtZXNzYWdlIG9uIFdlYlNvY2tldENoYW5uZWwu
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYlNvY2tldDo6Y2xvc2UoKQoreworICAg
IGlmIChtX3N0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUgPSBD
TE9TRUQ7CisgICAgLy8gRklYTUU6IGNsb3NlIFdlYlNvY2tldENoYW5uZWwuCit9CisKK2NvbnN0
IEtVUkwmIFdlYlNvY2tldDo6dXJsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmw7Cit9CisK
K1dlYlNvY2tldDo6U3RhdGUgV2ViU29ja2V0OjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdGF0ZTsKK30KKwordW5zaWduZWQgbG9uZyBXZWJTb2NrZXQ6OmJ1ZmZlcmVkQW1v
dW50KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogYXNrIHBsYXRmb3JtIGNvZGUgdG8gZ2V0IGJ1
ZmZlcmVkIGFtb3VudCB0byBiZSBzZW50LgorICAgIHJldHVybiAwOworfQorCitTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
K30KKwordm9pZCBXZWJTb2NrZXQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNl
Q2FwdHVyZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgV2Vi
U29ja2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQgdGhpcy4KK30KKworYm9vbCBXZWJTb2NrZXQ6OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViU29j
a2V0OjpkaWRDb25uZWN0KCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBDT05ORUNUSU5HKSB7Cisg
ICAgICAgIGRpZENsb3NlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zdGF0ZSA9
IE9QRU47CisgICAgZGlzcGF0Y2hPcGVuRXZlbnQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRp
ZFJlY2VpdmVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbXNnKQoreworICAgIGlmIChtX3N0YXRlICE9
IE9QRU4pCisgICAgICAgIHJldHVybjsKKyAgICBkaXNwYXRjaE1lc3NhZ2VFdmVudChtc2cpOwor
fQorCit2b2lkIFdlYlNvY2tldDo6ZGlkQ2xvc2UoKQoreworICAgIG1fc3RhdGUgPSBDTE9TRUQ7
CisgICAgZGlzcGF0Y2hDbG9zZUV2ZW50KCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpkaXNwYXRj
aE9wZW5FdmVudCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzLgorfQorCit2b2lk
IFdlYlNvY2tldDo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBtc2cpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIFdlYlNvY2tldDo6ZGlzcGF0
Y2hDbG9zZUV2ZW50KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCit9CisKK30g
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldC5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWUyY2MKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJTb2NrZXRfaAorI2RlZmluZSBXZWJTb2NrZXRfaAorCisjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIkV2ZW50
TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIktVUkwuaCIK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHJpbmc7CisKK2NsYXNzIFdlYlNvY2tldCA6
IHB1YmxpYyBSZWZDb3VudGVkPFdlYlNvY2tldD4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGlj
IEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViU29j
a2V0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYlNvY2tldChjb250ZXh0KSk7IH0KKyAgICB2aXJ0dWFsIH5XZWJTb2NrZXQo
KTsKKworICAgIGVudW0gU3RhdGUgeworICAgICAgICBDT05ORUNUSU5HID0gMCwKKyAgICAgICAg
T1BFTiA9IDEsCisgICAgICAgIENMT1NFRCA9IDIKKyAgICB9OworCisgICAgdm9pZCBjb25uZWN0
KGNvbnN0IEtVUkwmIHVybCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgY29ubmVjdChjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmKTsKKwor
ICAgIGJvb2wgc2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKwor
ICAgIHZvaWQgY2xvc2UoKTsKKworICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0OworICAgIFN0
YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50
KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldE9ub3BlbihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpIHsgbV9vbm9wZW4gPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRM
aXN0ZW5lciogb25vcGVuKCkgY29uc3QgeyByZXR1cm4gbV9vbm9wZW4uZ2V0KCk7IH0KKyAgICB2
b2lkIHNldE9ubWVzc2FnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
IHsgbV9vbm1lc3NhZ2UgPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25t
ZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9vbm1lc3NhZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dE9uY2xvc2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25j
bG9zZSA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmNsb3NlKCkgY29u
c3QgeyByZXR1cm4gbV9vbmNsb3NlLmdldCgpOyB9CisKKyAgICAvLyBFdmVudFRhcmdldAorICAg
IHZpcnR1YWwgV2ViU29ja2V0KiB0b1dlYlNvY2tldCgpIHsgcmV0dXJuIHRoaXM7IH0KKworICAg
IHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2Fw
dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAg
IHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25D
b2RlJik7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICAvLyB2aXJ0dWFsIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CisgICAgLy8gdmlydHVhbCB2b2lkIGNvbnRleHREZXN0
cm95ZWQoKTsKKyAgICAvLyB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OworICAgIC8v
IHZpcnR1YWwgdm9pZCBzdXNwZW5kKCk7CisgICAgLy8gdmlydHVhbCB2b2lkIHJlc3VtZSgpOwor
ICAgIC8vIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNv
Y2tldD46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldD46OmRlcmVmOworCitw
cml2YXRlOgorICAgIFdlYlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lk
IGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKworICAgIC8vIFdlYlNvY2tldENoYW5u
ZWxDbGllbnQKKyAgICB2b2lkIGRpZENvbm5lY3QoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKGNvbnN0IFN0cmluZyYgbXNnKTsKKyAgICB2b2lkIGRpZENsb3NlKCk7CisKKyAgICB2b2lk
IGRpc3BhdGNoT3BlbkV2ZW50KCk7CisgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VFdmVudChjb25z
dCBTdHJpbmcmIG1zZyk7CisgICAgdm9pZCBkaXNwYXRjaENsb3NlRXZlbnQoKTsKKworICAgIC8v
IEZJWE1FOiBhZGQgV2ViU29ja2V0Q2hhbm5lbC4KKworICAgIFJlZlB0cjxFdmVudExpc3RlbmVy
PiBtX29ub3BlbjsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbm1lc3NhZ2U7CisgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25jbG9zZTsKKworICAgIFN0YXRlIG1fc3RhdGU7Cisg
ICAgS1VSTCBtX3VybDsKKyAgICBTdHJpbmcgbV9wcm90b2NvbDsKK307CisKK30gIC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gV2ViU29ja2V0X2gKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiOTE2ZgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworbW9kdWxlIHdlYnNvY2tldHMgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ3Vz
dG9tTWFya0Z1bmN0aW9uLAorICAgICAgICBOb1N0YXRpY1RhYmxlcywKKyAgICAgICAgQ29uZGl0
aW9uYWw9V0VCX1NPQ0tFVFMKKyAgICBdIFdlYlNvY2tldCB7CisgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgVVJMOworCisgICAgICAgIC8vIHJlYWR5IHN0YXRlCisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTk5FQ1RJTkcgPSAwOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBPUEVOID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ0xPU0VE
ID0gMjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHJlYWR5U3Rh
dGU7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRB
bW91bnQ7CisKKyAgICAgICAgLy8gbmV0d29ya2luZworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRM
aXN0ZW5lciBvbm9wZW47CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubWVzc2Fn
ZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jbG9zZTsKKworICAgICAgICBb
Q3VzdG9tXSBib29sZWFuIHNlbmQoaW4gRE9NU3RyaW5nIGRhdGEpCisgICAgICAgICAgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICAvLyBFdmVu
dFRhcmdldCBpbnRlcmZhY2UKKyAgICAgICAgLy8gW0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3Rl
bmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAvLyAgIGluIEV2ZW50TGlzdGVuZXIgbGlz
dGVuZXIsCisgICAgICAgIC8vICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgLy8g
W0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAg
ICAgICAvLyAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgIC8vICAgaW4gYm9v
bGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgLy8gYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2
ZW50IGV2dCkKKyAgICAgICAgLy8gICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworICAgIH07Cit9
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34112</attachid>
            <date>2009-08-04 19:12:57 -0700</date>
            <delta_ts>2009-08-05 23:39:11 -0700</delta_ts>
            <desc>Add WebSocket.idl and js binding classes</desc>
            <filename>bug-27209-20090805111256.patch</filename>
            <type>text/plain</type>
            <size>31756</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDU0MzZlMS4uOGQ0NWJhYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0wOC0wNCAgRnVtaXRvc2hpIFVr
YWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgV2ViU29ja2V0LmlkbAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcyMDkKKworICAgICAgICBBZGQgV2ViU29ja2V0
LmlkbCBpbiBXZWJDb3JlL3dlYnNvY2tldHMvLgorICAgICAgICBBZGQgYnVpbGQgc3lzdGVtcyBv
bmx5IGZvciBHTlVtYWtlZmlsZS5hbSBhbmQgV2ViQ29yZS54Y29kZXByb2ogbm93LgorICAgICAg
ICBPdGhlciBidWlsZCBzeXN0ZW1zIHdpbGwgYmUgdXBkYXRlZCBvbmNlIHRoZSBjb2RlIGlzIGZ1
bmN0aW9uYWwuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRD
b25zdHJ1Y3Rvcjo6SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpj
b25zdHJ1Y3RXZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRDb25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2Nr
ZXRDb25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29u
c3RydWN0b3I6OmNsYXNzSW5mbyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRD
dXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjptYXJrKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjpzZW5kKToKKyAgICAgICAgKiB3ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpX
ZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojp+V2ViU29ja2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJT
b2NrZXQ6OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpidWZmZXJl
ZEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjphZGRFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0OjpkaWRDb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6
ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpc3BhdGNoT3BlbkV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaXNwYXRjaENsb3NlRXZlbnQpOgorICAgICAgICAqIHdl
YnNvY2tldHMvV2ViU29ja2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjopOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0OjpzZXRPbm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0
Ojpvbm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpzZXRPbm1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpvbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0OjpzZXRPbmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6
b25jbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnRvV2ViU29ja2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0OjpkZXJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiB3ZWJzb2NrZXRz
L1dlYlNvY2tldC5pZGw6IEFkZGVkLgorCiAyMDA5LTA4LTA0ICBDaHJpcyBGbGVpemFjaCAgPGNm
bGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQnVnIDI3OTk0IC0gV0FJLUFSSUE6IGFyaWEt
dmFsdWV0ZXh0IG5lZWRzIHRvIGJlIGltcGxlbWVudGVkCmRpZmYgLS1naXQgYS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMmM5
NGRmMC4uMTUzOWU1YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisr
KyBiL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNDEsNiArNDEsNyBAQCBWUEFUSCA9
IFwKICAgICAkKFdlYkNvcmUpL3dtbCBcCiAgICAgJChXZWJDb3JlKS93b3JrZXJzIFwKICAgICAk
KFdlYkNvcmUpL3N2ZyBcCisgICAgJChXZWJDb3JlKS93ZWJzb2NrZXRzIFwKICMKIAogRE9NX0NM
QVNTRVMgPSBcCkBAIC0zNzMsNiArMzc0LDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWUgXAogICAgIFdlYktpdFBvaW50IFwKICAgICBXZWJLaXRUcmFuc2l0
aW9uRXZlbnQgXAorICAgIFdlYlNvY2tldCBcCiAgICAgV2hlZWxFdmVudCBcCiAgICAgV29ya2Vy
IFwKICAgICBXb3JrZXJDb250ZXh0IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDFmMWExYjAuLjdlNDY3NDYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQpAQCAtMzEzMCwxMCArMzEzMCwyMCBAQCBlbmRpZiAjIEVORCBFTkFCTEVfU1ZHCiBpZiBFTkFC
TEVfV0VCX1NPQ0tFVFMKIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9XRUJf
U09DS0VUUz0xCiAKK0lETF9CSU5ESU5HUyArPSBcCisJV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5pZGwKKwogd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLURFTkFCTEVfV0VCX1NPQ0tFVFM9
MSBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS93ZWJzb2NrZXRzCiAKK3dlYmNvcmVfc291cmNlcyAr
PSBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCBcCisJ
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmggXAorCVdlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwIFwKKwlXZWJDb3JlL3dlYnNvY2tldHMv
V2ViU29ja2V0LmNwcCBcCisJV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCisKIGVsc2UK
IHdlYmNvcmVfY3BwZmxhZ3MgKz0gLURFTkFCTEVfV0VCX1NPQ0tFVFM9MAogZW5kaWYgICMgRU5E
IEVOQUJMRV9XRUJfU09DS0VUUwpAQCAtMzIzOCw2ICszMjQ4LDcgQEAgSURMX1BBVEggOj0gXAog
ICAgICQoV2ViQ29yZSkvc3ZnIFwKICAgICAkKFdlYkNvcmUpL3htbCBcCiAgICAgJChXZWJDb3Jl
KS9wbHVnaW5zIFwKKyAgICAkKFdlYkNvcmUpL3dlYnNvY2tldHMgXAogICAgICQoV2ViQ29yZSkv
d29ya2VycwogCiB2cGF0aCAlLmlkbCA9ICQoSURMX1BBVEgpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDYxN2NkZDEuLjcyZjA2YWEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NTYsNiArODU2LDExIEBACiAJ
CTUxNzQxRDEwMEIwNzI1OUEwMEVENDQyQyAvKiBCYWNrRm9yd2FyZExpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NDFEMEMwQjA3MjU5QTAw
RUQ0NDJDIC8qIEJhY2tGb3J3YXJkTGlzdC5jcHAgKi87IH07CiAJCTUxNzQxRDExMEIwNzI1OUEw
MEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE3NDFEMEQwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE3NDFE
MTIwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzQxRDBFMEIwNzI1OUEwMEVENDQyQyAvKiBI
aXN0b3J5SXRlbS5jcHAgKi87IH07CisJCTUxOEEzNEMxMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJT
b2NrZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE4QTM0QkUxMDI2QzgzMTAwMUI2ODk2IC8qIFdlYlNvY2tldC5jcHAgKi87IH07CisJCTUxOEEz
NEMyMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEJGMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJT
b2NrZXQuaCAqLzsgfTsKKwkJNTE4QTM0QzcxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0
Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE4QTM0QzQxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3Iu
Y3BwICovOyB9OworCQk1MThBMzRDODEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE4QTM0QzUxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3IuaCAqLzsg
fTsKKwkJNTE4QTM0QzkxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEM2MTAy
NkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldEN1c3RvbS5jcHAgKi87IH07CiAJCTUxOTYxMTZB
MENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk2MTE1RTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJh
c2UuY3BwICovOyB9OwogCQk1MTk2MTE2QjBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTVGMENB
QzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5oICovOyB9OwogCQk1MTk2MTE2RDBDQUM1NjU3MDAx
MEE4MEMgLyogRGF0YWJhc2VUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE5NjExNjEwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlVGhy
ZWFkLmNwcCAqLzsgfTsKQEAgLTU4NjYsNiArNTg3MSwxMiBAQAogCQk1MTc0MUQwQzBCMDcyNTlB
MDBFRDQ0MkMgLyogQmFja0ZvcndhcmRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNzQxRDBEMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGlzdG9yeUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE3NDFEMEUwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXN0b3J5SXRlbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxOEEzNEJFMTAyNkM4MzEwMDFCNjg5NiAv
KiBXZWJTb2NrZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
U29ja2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4QTM0QkYxMDI2Qzgz
MTAwMUI2ODk2IC8qIFdlYlNvY2tldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJTb2NrZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4QTM0QzAxMDI2
QzgzMTAwMUI2ODk2IC8qIFdlYlNvY2tldC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2Vi
U29ja2V0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4QTM0QzQxMDI2QzhD
OTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxOEEzNEM1MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNv
Y2tldENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2Vi
U29ja2V0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4QTM0
QzYxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViU29ja2V0Q3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE5NjExNUUwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFiYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE5NjExNUYwQ0FDNTY1NzAwMTBBODBDIC8q
IERhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOTYxMTYwMENBQzU2NTcwMDEwQTgwQyAv
KiBEYXRhYmFzZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRGF0YWJhc2UuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTUwMSw2ICs5NTEyLDcgQEAKIAkJMDg2N0Q2OTFG
RTg0MDI4RkMwMkFBQzA3IC8qIFdlYktpdCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJNTE4QTM0QkQxMDI2QzgzMTAwMUI2ODk2IC8qIHdlYnNvY2tldHMg
Ki8sCiAJCQkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZpZy5oICovLAogCQkJCUVE
RUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4LmggKi8sCiAJCQkJOTMwNzA2
MTMwOUUwQ0E4MjAwQjE3RkU0IC8qIERlcml2ZWRTb3VyY2VzLm1ha2UgKi8sCkBAIC0xMDIyNiw2
ICsxMDIzOCwxNiBAQAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9Owor
CQk1MThBMzRCRDEwMjZDODMxMDAxQjY4OTYgLyogd2Vic29ja2V0cyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTE4QTM0QkUxMDI2QzgzMTAwMUI2ODk2
IC8qIFdlYlNvY2tldC5jcHAgKi8sCisJCQkJNTE4QTM0QkYxMDI2QzgzMTAwMUI2ODk2IC8qIFdl
YlNvY2tldC5oICovLAorCQkJCTUxOEEzNEMwMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQu
aWRsICovLAorCQkJKTsKKwkJCXBhdGggPSB3ZWJzb2NrZXRzOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKIAkJNURDRjgzNjkwRDU5MTU3ODAwOTUzQkM2IC8qIHBsdWdpbnMgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTM1MDEsNiArMTM1
MjMsOSBAQAogCQlCQzFBMzc5MzA5N0M2RkIxMDAxOUYzRDggLyoganMgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUxOEEzNEM0MTAyNkM4QzkwMDFCNjg5
NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQk1MThBMzRDNTEwMjZDOEM5
MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oICovLAorCQkJCTUxOEEzNEM2MTAy
NkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldEN1c3RvbS5jcHAgKi8sCiAJCQkJQkM0RURFRjcw
QzA4RjQxNDAwN0VERDQ5IC8qIEN1c3RvbSAqLywKIAkJCQkxNERGQjMzRjBBN0RGNzYzMDAxOEY3
NjkgLyogRGVyaXZlZCBTb3VyY2VzICovLAogCQkJCTkzRjhCMzA2MEEzMDBGRUEwMEY2MUFCOCAv
KiBDb2RlR2VuZXJhdG9ySlMucG0gKi8sCkBAIC0xNzA4NCw2ICsxNzEwOSw4IEBACiAJCQkJNDFB
M0Q1OEYxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0EyNDU4N0MxMDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3RvckRPTUFnZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA5RkM0RTEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNz
aWJpbGl0eVNsaWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE4QTM0QzIxMDI2QzgzMTAwMUI2
ODk2IC8qIFdlYlNvY2tldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE4QTM0QzgxMDI2QzhDOTAw
MUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTkx
MjksNiArMTkxNTYsOSBAQAogCQkJCTQxQTNENThFMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0
ZWRXb3JrZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0EyNDU4N0IxMDIxRUFGNDAw
MEEwMEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MDlG
QzRDMTAyNURFRDgwMDU5Q0RCQSAvKiBBY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUxOEEzNEMxMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNTE4QTM0QzcxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE4QTM0QzkxMDI2QzhDOTAwMUI2ODk2
IC8qIEpTV2ViU29ja2V0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uY2EyZTEwNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNpbmNsdWRlICJKU1dl
YlNvY2tldENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJKU1dlYlNvY2tldC5oIgorI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBU1NFUlRfQ0xB
U1NfRklUU19JTl9DRUxMKEpTV2ViU29ja2V0Q29uc3RydWN0b3IpOworCitjb25zdCBDbGFzc0lu
Zm8gSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiV2ViU29ja2V0Q29uc3RydWN0
b3IiLCAwLCAwLCAwIH07CisKK0pTV2ViU29ja2V0Q29uc3RydWN0b3I6OkpTV2ViU29ja2V0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpT
V2ViU29ja2V0UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOworICAg
IHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAx
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworfQorCitzdGF0aWMgSlNPYmpl
Y3QqIGNvbnN0cnVjdFdlYlNvY2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1
Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBKU1dlYlNvY2tldENvbnN0cnVjdG9y
KiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcio+KGNv
bnN0cnVjdG9yKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0ganNDb25z
dHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmVmZXJlbmNlRXJyb3IsICJXZWJTb2NrZXQg
Y29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpOworCisgICAg
aWYgKGFyZ3Muc2l6ZSgpID09IDApCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKKworICAgIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9y
LCAid3JvbmcgVVJMIik7CisgICAgY29uc3QgS1VSTCYgdXJsID0gY29udGV4dC0+Y29tcGxldGVV
UkwodXJsU3RyaW5nKTsKKyAgICBSZWZQdHI8V2ViU29ja2V0PiB3ZWJTb2NrZXQgPSBXZWJTb2Nr
ZXQ6OmNyZWF0ZShjb250ZXh0KTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAo
YXJncy5zaXplKCkgPCAyKQorICAgICAgICB3ZWJTb2NrZXQtPmNvbm5lY3QodXJsLCBlYyk7Cisg
ICAgZWxzZSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wgPSBhcmdzLmF0KDEpLnRv
U3RyaW5nKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgd2ViU29ja2V0LT5jb25uZWN0KHVybCwgcHJvdG9jb2ws
IGVjKTsKKyAgICB9CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4g
Q1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmpl
Y3QoKSwgV2ViU29ja2V0LCB3ZWJTb2NrZXQuZ2V0KCkpOworfQorCitDb25zdHJ1Y3RUeXBlIEpT
V2ViU29ja2V0Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29u
c3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0
cnVjdFdlYlNvY2tldDsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
U29ja2V0Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
Njk2NDdhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tl
dENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTV2ViU29ja2V0Q29uc3Ry
dWN0b3JfaAorI2RlZmluZSBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTV2ViU29ja2V0
Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworICBwdWJsaWM6Cisg
ICAgSlNXZWJTb2NrZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0Kik7CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICBwcml2
YXRlOgorICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlND
OjpDb25zdHJ1Y3REYXRhJik7CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorfTsKKworfSAgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmICAvLyBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZWNhMzJiZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSAiSlNXZWJTb2NrZXQu
aCIKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgSlNXZWJTb2NrZXQ6Om1hcmsoKQoreworICAgIEJhc2U6Om1hcmso
KTsKKyAgICBpZiAobV9pbXBsLT5yZWFkeVN0YXRlKCkgIT0gV2ViU29ja2V0OjpDTE9TRUQpCisg
ICAgICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbm1lc3NhZ2UoKSk7CisgICAgLy8gRklYTUU6
IG1hcmsgaWYgRXZlbnRMaXN0ZW5lcnMgaXMgcmVnaXN0ZXJlZC4KK30KKworLy8gQ3VzdG9tIGZ1
bmN0aW9ucworSlNWYWx1ZSBKU1dlYlNvY2tldDo6c2VuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIp
OworCisgICAgY29uc3QgU3RyaW5nJiBtc2cgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgU3ludGF4RXJyb3IsICJiYWQgbWVzc2FnZSBkYXRhLiIpOworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIEpTVmFsdWUgcmV0ID0ganNCb29sZWFuKGltcGwoKS0+c2VuZChtc2cs
IGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gcmV0Owor
fQorCisvLyBGSVhNRTogaW1wbGVtZW50IGFkZEV2ZW50TGlzdGVuZXIvcmVtb3ZlRXZlbnRMaXN0
ZW5lci4KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJT
b2NrZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OWM3MDIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtMCww
ICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMp
CisKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVk
ZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYlNvY2tl
dDo6V2ViU29ja2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBBY3Rp
dmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1fc3RhdGUoQ09OTkVDVElORykKK3sK
K30KKworV2ViU29ja2V0Ojp+V2ViU29ja2V0KCkKK3sKKyAgICBjbG9zZSgpOworfQorCit2b2lk
IFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGNvbm5lY3QodXJsLCBTdHJpbmcoKSwgZWMpOworfQorCit2b2lkIFdlYlNvY2tldDo6
Y29ubmVjdChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIG1fdXJsID0gdXJsOworICAgIG1fcHJvdG9jb2wgPSBwcm90b2Nv
bDsKKworICAgIGlmICghbV91cmwucHJvdG9jb2xJcygid3MiKSAmJiAhbV91cmwucHJvdG9jb2xJ
cygid3NzIikpIHsKKyAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9wcm90b2NvbC5pc051
bGwoKSAmJiBtX3Byb3RvY29sLmlzRW1wdHkoKSkgeworICAgICAgICBtX3N0YXRlID0gQ0xPU0VE
OworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Ly8gRklYTUU6IENoZWNrIHByb3RvY29sIGlzIHZhbGlkIGZvcm0uCisgICAgLy8gRklYTUU6IENv
bm5lY3QgV2ViU29ja2V0Q2hhbm5lbC4KK30KKworYm9vbCBXZWJTb2NrZXQ6OnNlbmQoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAobV9zdGF0ZSAh
PSBPUEVOKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgLy8gRklYTUU6IHNlbmQgbWVzc2FnZSBvbiBXZWJTb2NrZXRD
aGFubmVsLgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmNsb3NlKCkK
K3sKKyAgICBpZiAobV9zdGF0ZSA9PSBDTE9TRUQpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0
YXRlID0gQ0xPU0VEOworICAgIC8vIEZJWE1FOiBjbG9zZSBXZWJTb2NrZXRDaGFubmVsLgorfQor
Citjb25zdCBLVVJMJiBXZWJTb2NrZXQ6OnVybCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJs
OworfQorCitXZWJTb2NrZXQ6OlN0YXRlIFdlYlNvY2tldDo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgV2ViU29ja2V0OjpidWZm
ZXJlZEFtb3VudCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGFzayBwbGF0Zm9ybSBjb2RlIHRv
IGdldCBidWZmZXJlZCBhbW91bnQgdG8gYmUgc2VudC4KKyAgICByZXR1cm4gMDsKK30KKworU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogV2ViU29ja2V0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBi
b29sIHVzZUNhcHR1cmUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzLgorfQorCit2
b2lkIFdlYlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCit9CisKK2Jvb2wgV2ViU29ja2V0OjpkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFdlYlNvY2tldDo6ZGlkQ29ubmVjdCgpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gQ09OTkVDVElO
RykgeworICAgICAgICBkaWRDbG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
c3RhdGUgPSBPUEVOOworICAgIGRpc3BhdGNoT3BlbkV2ZW50KCk7Cit9CisKK3ZvaWQgV2ViU29j
a2V0OjpkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZykKK3sKKyAgICBpZiAobV9z
dGF0ZSAhPSBPUEVOKQorICAgICAgICByZXR1cm47CisgICAgZGlzcGF0Y2hNZXNzYWdlRXZlbnQo
bXNnKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmRpZENsb3NlKCkKK3sKKyAgICBtX3N0YXRlID0g
Q0xPU0VEOworICAgIGRpc3BhdGNoQ2xvc2VFdmVudCgpOworfQorCit2b2lkIFdlYlNvY2tldDo6
ZGlzcGF0Y2hPcGVuRXZlbnQoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4KK30K
Kwordm9pZCBXZWJTb2NrZXQ6OmRpc3BhdGNoTWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgbXNn
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBXZWJTb2NrZXQ6
OmRpc3BhdGNoQ2xvc2VFdmVudCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzLgor
fQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaCBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODVlMmNjCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCkBAIC0wLDAgKzEsMTIzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViU29ja2V0X2gKKyNkZWZpbmUgV2ViU29ja2V0X2gKKworI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKKyNpbmNsdWRl
ICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJL
VVJMLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOworCitjbGFzcyBXZWJT
b2NrZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJTb2NrZXQ+LCBwdWJsaWMgRXZlbnRUYXJnZXQs
IHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYlNvY2tldD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJTb2NrZXQoY29udGV4dCkpOyB9CisgICAgdmlydHVhbCB+V2Vi
U29ja2V0KCk7CisKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgQ09OTkVDVElORyA9IDAsCisg
ICAgICAgIE9QRU4gPSAxLAorICAgICAgICBDTE9TRUQgPSAyCisgICAgfTsKKworICAgIHZvaWQg
Y29ubmVjdChjb25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGNvbm5l
Y3QoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sLCBFeGNlcHRpb25Db2Rl
Jik7CisKKyAgICBib29sIHNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2Rl
Jik7CisKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdDsK
KyAgICBTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgbG9uZyBidWZmZXJl
ZEFtb3VudCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRPbm9wZW4oUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25vcGVuID0gZXZlbnRMaXN0ZW5lcjsgfQorICAg
IEV2ZW50TGlzdGVuZXIqIG9ub3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fb25vcGVuLmdldCgpOyB9
CisgICAgdm9pZCBzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKSB7IG1fb25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50TGlzdGVu
ZXIqIG9ubWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25tZXNzYWdlLmdldCgpOyB9CisgICAg
dm9pZCBzZXRPbmNsb3NlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikg
eyBtX29uY2xvc2UgPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25jbG9z
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25jbG9zZS5nZXQoKTsgfQorCisgICAgLy8gRXZlbnRUYXJn
ZXQKKyAgICB2aXJ0dWFsIFdlYlNvY2tldCogdG9XZWJTb2NrZXQoKSB7IHJldHVybiB0aGlzOyB9
CisKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29s
IHVzZUNhcHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJl
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhj
ZXB0aW9uQ29kZSYpOworCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0CisgICAgLy8gdmlydHVhbCBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworICAgIC8vIHZpcnR1YWwgdm9pZCBjb250
ZXh0RGVzdHJveWVkKCk7CisgICAgLy8gdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsK
KyAgICAvLyB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOworICAgIC8vIHZpcnR1YWwgdm9pZCByZXN1
bWUoKTsKKyAgICAvLyB2aXJ0dWFsIHZvaWQgc3RvcCgpOworCisgICAgdXNpbmcgUmVmQ291bnRl
ZDxXZWJTb2NrZXQ+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXQ+OjpkZXJl
ZjsKKworcHJpdmF0ZToKKyAgICBXZWJTb2NrZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwor
CisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisKKyAgICAvLyBXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50CisgICAgdm9pZCBkaWRDb25uZWN0KCk7CisgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZyk7CisgICAgdm9pZCBkaWRDbG9zZSgpOworCisg
ICAgdm9pZCBkaXNwYXRjaE9wZW5FdmVudCgpOworICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZl
bnQoY29uc3QgU3RyaW5nJiBtc2cpOworICAgIHZvaWQgZGlzcGF0Y2hDbG9zZUV2ZW50KCk7CisK
KyAgICAvLyBGSVhNRTogYWRkIFdlYlNvY2tldENoYW5uZWwuCisKKyAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbV9vbm9wZW47CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25tZXNzYWdl
OworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uY2xvc2U7CisKKyAgICBTdGF0ZSBtX3N0
YXRlOworICAgIEtVUkwgbV91cmw7CisgICAgU3RyaW5nIG1fcHJvdG9jb2w7Cit9OworCit9ICAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgIC8vIFdlYlNvY2tldF9oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbCBiL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYjkxNmYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbApAQCAt
MCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK21vZHVsZSB3ZWJzb2NrZXRzIHsKKworICAgIGludGVyZmFjZSBbCisgICAg
ICAgIEN1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMsCisgICAgICAg
IENvbmRpdGlvbmFsPVdFQl9TT0NLRVRTCisgICAgXSBXZWJTb2NrZXQgeworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIFVSTDsKKworICAgICAgICAvLyByZWFkeSBzdGF0ZQor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05ORUNUSU5HID0gMDsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgT1BFTiA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IENMT1NFRCA9IDI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBy
ZWFkeVN0YXRlOworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ1
ZmZlcmVkQW1vdW50OworCisgICAgICAgIC8vIG5ldHdvcmtpbmcKKyAgICAgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25vcGVuOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bm1lc3NhZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2xvc2U7CisKKyAg
ICAgICAgW0N1c3RvbV0gYm9vbGVhbiBzZW5kKGluIERPTVN0cmluZyBkYXRhKQorICAgICAgICAg
IHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lkIGNsb3NlKCk7CisKKyAgICAgICAg
Ly8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCisgICAgICAgIC8vIFtDdXN0b21dIHZvaWQgYWRkRXZl
bnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgLy8gICBpbiBFdmVudExpc3Rl
bmVyIGxpc3RlbmVyLAorICAgICAgICAvLyAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAg
ICAgIC8vIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlw
ZSwKKyAgICAgICAgLy8gICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAvLyAg
IGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIC8vIGJvb2xlYW4gZGlzcGF0Y2hFdmVu
dChpbiBFdmVudCBldnQpCisgICAgICAgIC8vICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKyAg
ICB9OworfQ==
</data>
<flag name="commit-queue"
          id="18356"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34202</attachid>
            <date>2009-08-05 23:39:18 -0700</date>
            <delta_ts>2009-08-06 13:30:44 -0700</delta_ts>
            <desc>Add WebSocket.idl and js binding classes</desc>
            <filename>bug-27209-20090806153916.patch</filename>
            <type>text/plain</type>
            <size>31640</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWY5OGU5NS4uM2Q0OTMxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0wOC0wNCAgRnVtaXRvc2hpIFVr
YWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgV2ViU29ja2V0LmlkbAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcyMDkKKworICAgICAgICBBZGQgV2ViU29ja2V0
LmlkbCBpbiBXZWJDb3JlL3dlYnNvY2tldHMvLgorICAgICAgICBBZGQgYnVpbGQgc3lzdGVtcyBv
bmx5IGZvciBHTlVtYWtlZmlsZS5hbSBhbmQgV2ViQ29yZS54Y29kZXByb2ogbm93LgorICAgICAg
ICBPdGhlciBidWlsZCBzeXN0ZW1zIHdpbGwgYmUgdXBkYXRlZCBvbmNlIHRoZSBjb2RlIGlzIGZ1
bmN0aW9uYWwuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRD
b25zdHJ1Y3Rvcjo6SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpj
b25zdHJ1Y3RXZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRDb25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2Nr
ZXRDb25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29u
c3RydWN0b3I6OmNsYXNzSW5mbyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRD
dXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjptYXJrKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjpzZW5kKToKKyAgICAgICAgKiB3ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpX
ZWJTb2NrZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojp+V2ViU29ja2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJT
b2NrZXQ6OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpidWZmZXJl
ZEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjphZGRFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0OjpkaWRDb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6
ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpc3BhdGNoT3BlbkV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaXNwYXRjaENsb3NlRXZlbnQpOgorICAgICAgICAqIHdl
YnNvY2tldHMvV2ViU29ja2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjopOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0OjpzZXRPbm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0
Ojpvbm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpzZXRPbm1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpvbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0OjpzZXRPbmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6
b25jbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnRvV2ViU29ja2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0OjpkZXJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiB3ZWJzb2NrZXRz
L1dlYlNvY2tldC5pZGw6IEFkZGVkLgorCiAyMDA5LTA4LTA1ICBEaW1pdHJpIEdsYXprb3YgIDxk
Z2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4Lgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IDJjOTRkZjAuLjE1MzllNWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAg
LTQxLDYgKzQxLDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJDb3JlKS93bWwgXAogICAgICQoV2Vi
Q29yZSkvd29ya2VycyBcCiAgICAgJChXZWJDb3JlKS9zdmcgXAorICAgICQoV2ViQ29yZSkvd2Vi
c29ja2V0cyBcCiAjCiAKIERPTV9DTEFTU0VTID0gXApAQCAtMzczLDYgKzM3NCw3IEBAIERPTV9D
TEFTU0VTID0gXAogICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlIFwKICAgICBXZWJLaXRQb2lu
dCBcCiAgICAgV2ViS2l0VHJhbnNpdGlvbkV2ZW50IFwKKyAgICBXZWJTb2NrZXQgXAogICAgIFdo
ZWVsRXZlbnQgXAogICAgIFdvcmtlciBcCiAgICAgV29ya2VyQ29udGV4dCBcCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAx
ZjFhMWIwLi43ZTQ2NzQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTMxMzAsMTAgKzMxMzAsMjAgQEAgZW5kaWYgIyBF
TkQgRU5BQkxFX1NWRwogaWYgRU5BQkxFX1dFQl9TT0NLRVRTCiBGRUFUVVJFX0RFRklORVNfSkFW
QVNDUklQVCArPSBFTkFCTEVfV0VCX1NPQ0tFVFM9MQogCitJRExfQklORElOR1MgKz0gXAorCVdl
YkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsCisKIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAog
CS1ERU5BQkxFX1dFQl9TT0NLRVRTPTEgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvd2Vic29ja2V0
cwogCit3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2Nr
ZXRDb25zdHJ1Y3Rvci5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25z
dHJ1Y3Rvci5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcCBc
CisJV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgXAorCVdlYkNvcmUvd2Vic29ja2V0
cy9XZWJTb2NrZXQuaAorCiBlbHNlCiB3ZWJjb3JlX2NwcGZsYWdzICs9IC1ERU5BQkxFX1dFQl9T
T0NLRVRTPTAKIGVuZGlmICAjIEVORCBFTkFCTEVfV0VCX1NPQ0tFVFMKQEAgLTMyMzgsNiArMzI0
OCw3IEBAIElETF9QQVRIIDo9IFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCiAgICAgJChXZWJDb3Jl
KS94bWwgXAogICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCisgICAgJChXZWJDb3JlKS93ZWJzb2Nr
ZXRzIFwKICAgICAkKFdlYkNvcmUpL3dvcmtlcnMKIAogdnBhdGggJS5pZGwgPSAkKElETF9QQVRI
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MTdjZGQx
Li43MmYwNmFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtODU2LDYgKzg1NiwxMSBAQAogCQk1MTc0MUQxMDBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0Zv
cndhcmRMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNzQxRDBDMEIwNzI1OUEwMEVENDQyQyAvKiBCYWNrRm9yd2FyZExpc3QuY3BwICovOyB9
OwogCQk1MTc0MUQxMTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzQxRDBEMEIwNzI1OUEwMEVE
NDQyQyAvKiBIaXN0b3J5SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxNzQxRDEyMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQw
RTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uY3BwICovOyB9OworCQk1MThBMzRDMTEw
MjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEJFMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2Nr
ZXQuY3BwICovOyB9OworCQk1MThBMzRDMjEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MThBMzRCRjEw
MjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmggKi87IH07CisJCTUxOEEzNEM3MTAyNkM4Qzkw
MDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEM0MTAyNkM4QzkwMDFCNjg5NiAvKiBK
U1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJNTE4QTM0QzgxMDI2QzhDOTAwMUI2
ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEEzNEM1MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNv
Y2tldENvbnN0cnVjdG9yLmggKi87IH07CisJCTUxOEEzNEM5MTAyNkM4QzkwMDFCNjg5NiAvKiBK
U1dlYlNvY2tldEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MThBMzRDNjEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDdXN0b20u
Y3BwICovOyB9OwogCQk1MTk2MTE2QTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5NjExNUUwQ0FD
NTY1NzAwMTBBODBDIC8qIERhdGFiYXNlLmNwcCAqLzsgfTsKIAkJNTE5NjExNkIwQ0FDNTY1NzAw
MTBBODBDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTk2MTE1RjBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaCAqLzsgfTsK
IAkJNTE5NjExNkQwQ0FDNTY1NzAwMTBBODBDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOTYxMTYxMENBQzU2NTcw
MDEwQTgwQyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgKi87IH07CkBAIC01ODY2LDYgKzU4NzEsMTIg
QEAKIAkJNTE3NDFEMEMwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tGb3J3YXJkTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYWNrRm9yd2FyZExpc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc0MUQwRDBCMDcyNTlBMDBFRDQ0MkMgLyog
SGlzdG9yeUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhpc3RvcnlJ
dGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzQxRDBFMEIwNzI1OUEwMEVE
NDQyQyAvKiBIaXN0b3J5SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSGlzdG9yeUl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MThB
MzRCRTEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNvY2tldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxOEEzNEJGMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU29ja2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxOEEzNEMwMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFdlYlNvY2tldC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxOEEzNEM0MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViU29ja2V0Q29u
c3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MThBMzRDNTEwMjZD
OEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxOEEzNEM2MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldEN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYlNvY2tl
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOTYxMTVFMENBQzU2
NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOTYx
MTVGMENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTk2
MTE2MDBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IERhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1MDEsNiAr
OTUxMiw3IEBACiAJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUxOEEzNEJEMTAyNkM4MzEw
MDFCNjg5NiAvKiB3ZWJzb2NrZXRzICovLAogCQkJCTY1Qzk3QUYyMDhFQTkwODgwMEFDRDI3MyAv
KiBjb25maWcuaCAqLywKIAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVBy
ZWZpeC5oICovLAogCQkJCTkzMDcwNjEzMDlFMENBODIwMEIxN0ZFNCAvKiBEZXJpdmVkU291cmNl
cy5tYWtlICovLApAQCAtMTAyMjYsNiArMTAyMzgsMTYgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJ
CXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJNTE4QTM0QkQxMDI2QzgzMTAwMUI2ODk2IC8qIHdlYnNv
Y2tldHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUx
OEEzNEJFMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuY3BwICovLAorCQkJCTUxOEEzNEJG
MTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaCAqLywKKwkJCQk1MThBMzRDMDEwMjZDODMx
MDAxQjY4OTYgLyogV2ViU29ja2V0LmlkbCAqLywKKwkJCSk7CisJCQlwYXRoID0gd2Vic29ja2V0
czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTVEQ0Y4MzY5MEQ1OTE1Nzgw
MDk1M0JDNiAvKiBwbHVnaW5zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKQEAgLTEzNTAxLDYgKzEzNTIzLDkgQEAKIAkJQkMxQTM3OTMwOTdDNkZCMTAwMTlGM0Q4
IC8qIGpzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1
MThBMzRDNDEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAgKi8s
CisJCQkJNTE4QTM0QzUxMDI2QzhDOTAwMUI2ODk2IC8qIEpTV2ViU29ja2V0Q29uc3RydWN0b3Iu
aCAqLywKKwkJCQk1MThBMzRDNjEwMjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDdXN0b20u
Y3BwICovLAogCQkJCUJDNEVERUY3MEMwOEY0MTQwMDdFREQ0OSAvKiBDdXN0b20gKi8sCiAJCQkJ
MTRERkIzM0YwQTdERjc2MzAwMThGNzY5IC8qIERlcml2ZWQgU291cmNlcyAqLywKIAkJCQk5M0Y4
QjMwNjBBMzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovLApAQCAtMTcwODQs
NiArMTcxMDksOCBAQAogCQkJCTQxQTNENThGMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRX
b3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMjQ1ODdDMTAyMUVBRjQwMDBBMDBB
QSAvKiBJbnNwZWN0b3JET01BZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwOUZDNEUxMDI1
REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxOEEzNEMyMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUxOEEzNEM4MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTE5MTI5LDYgKzE5MTU2LDkgQEAKIAkJCQk0MUEzRDU4RTEwMUMx
NTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdBMjQ1ODdCMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwNzA5RkM0QzEwMjVERUQ4MDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0
eVNsaWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MThBMzRDMTEwMjZDODMxMDAxQjY4OTYg
LyogV2ViU29ja2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxOEEzNEM3MTAyNkM4QzkwMDFC
Njg5NiAvKiBKU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUx
OEEzNEM5MTAyNkM4QzkwMDFCNjg5NiAvKiBKU1dlYlNvY2tldEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1
Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMmUxMDQKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwCkBA
IC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9TT0NL
RVRTKQorCisjaW5jbHVkZSAiSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAi
SlNXZWJTb2NrZXQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5j
bHVkZSAiV2ViU29ja2V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1dlYlNvY2tldENvbnN0cnVj
dG9yKTsKKworY29uc3QgQ2xhc3NJbmZvIEpTV2ViU29ja2V0Q29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIldlYlNvY2tldENvbnN0cnVjdG9yIiwgMCwgMCwgMCB9OworCitKU1dlYlNvY2tldENvbnN0
cnVjdG9yOjpKU1dlYlNvY2tldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTV2Vi
U29ja2V0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFBy
b3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlLCBKU1dlYlNvY2tldFByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9i
YWxPYmplY3QpLCBOb25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCwganNOdW1iZXIoZXhlYywgMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVt
KTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXZWJTb2NrZXQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
SlNXZWJTb2NrZXRDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTV2Vi
U29ja2V0Q29uc3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVy
ZW5jZUVycm9yLCAiV2ViU29ja2V0IGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMg
dW5hdmFpbGFibGUiKTsKKworICAgIGlmIChhcmdzLnNpemUoKSA9PSAwKQorICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7
CisKKyAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhl
Yyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvciwgIndyb25nIFVSTCIpOworICAgIGNvbnN0IEtVUkwmIHVy
bCA9IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybFN0cmluZyk7CisgICAgUmVmUHRyPFdlYlNvY2tl
dD4gd2ViU29ja2V0ID0gV2ViU29ja2V0OjpjcmVhdGUoY29udGV4dCk7CisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgd2ViU29ja2V0
LT5jb25uZWN0KHVybCwgZWMpOworICAgIGVsc2UgeworICAgICAgICBjb25zdCBTdHJpbmcmIHBy
b3RvY29sID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHdlYlNvY2tldC0+
Y29ubmVjdCh1cmwsIHByb3RvY29sLCBlYyk7CisgICAgfQorICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgcmV0dXJuIENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywganND
b25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIFdlYlNvY2tldCwgd2ViU29ja2V0LmdldCgpKTsK
K30KKworQ29uc3RydWN0VHlwZSBKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RE
YXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5u
YXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RXZWJTb2NrZXQ7CisgICAgcmV0dXJuIENvbnN0cnVj
dFR5cGVIb3N0OworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5NjQ3YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNXZWJTb2NrZXRDb25zdHJ1
Y3Rvcl9oCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBKU1dlYlNvY2tldENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9y
T2JqZWN0IHsKKyAgcHVibGljOgorICAgIEpTV2ViU29ja2V0Q29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNz
SW5mbyBzX2luZm87CisKKyAgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlw
ZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgIHZpcnR1YWwgY29u
c3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0K
K307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gSlNXZWJTb2NrZXRD
b25zdHJ1Y3Rvcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0
Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTMyYmYKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcApAQCAtMCwwICsx
LDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykKKwor
I2luY2x1ZGUgIkpTV2ViU29ja2V0LmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAi
V2ViU29ja2V0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEpTV2ViU29ja2V0OjptYXJr
KCkKK3sKKyAgICBCYXNlOjptYXJrKCk7CisgICAgaWYgKG1faW1wbC0+cmVhZHlTdGF0ZSgpICE9
IFdlYlNvY2tldDo6Q0xPU0VEKQorICAgICAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25tZXNz
YWdlKCkpOworICAgIC8vIEZJWE1FOiBtYXJrIGlmIEV2ZW50TGlzdGVuZXJzIGlzIHJlZ2lzdGVy
ZWQuCit9CisKKy8vIEN1c3RvbSBmdW5jdGlvbnMKK0pTVmFsdWUgSlNXZWJTb2NrZXQ6OnNlbmQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNp
emUoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAi
Tm90IGVub3VnaCBhcmd1bWVudHMiKTsKKworICAgIGNvbnN0IFN0cmluZyYgbXNnID0gYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiYmFkIG1lc3NhZ2UgZGF0
YS4iKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBKU1ZhbHVlIHJldCA9IGpzQm9v
bGVhbihpbXBsKCktPnNlbmQobXNnLCBlYykpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBl
Yyk7CisgICAgcmV0dXJuIHJldDsKK30KKworLy8gRklYTUU6IGltcGxlbWVudCBhZGRFdmVudExp
c3RlbmVyL3JlbW92ZUV2ZW50TGlzdGVuZXIuCisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45OTljMWZmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRz
L1dlYlNvY2tldC5jcHAKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSAiV2ViU29ja2V0LmgiCisKKyNpbmNs
dWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitXZWJTb2NrZXQ6OldlYlNvY2tldChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgLCBt
X3N0YXRlKENPTk5FQ1RJTkcpCit7Cit9CisKK1dlYlNvY2tldDo6fldlYlNvY2tldCgpCit7Cisg
ICAgY2xvc2UoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJs
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBjb25uZWN0KHVybCwgU3RyaW5nKCksIGVjKTsK
K30KKwordm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHByb3RvY29sLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBtX3VybCA9IHVybDsKKyAg
ICBtX3Byb3RvY29sID0gcHJvdG9jb2w7CisKKyAgICBpZiAoIW1fdXJsLnByb3RvY29sSXMoIndz
IikgJiYgIW1fdXJsLnByb3RvY29sSXMoIndzcyIpKSB7CisgICAgICAgIG1fc3RhdGUgPSBDTE9T
RUQ7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIW1fcHJvdG9jb2wuaXNOdWxsKCkgJiYgbV9wcm90b2NvbC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIEZJWE1FOiBDaGVjayBwcm90b2NvbCBpcyB2YWxpZCBm
b3JtLgorICAgIC8vIEZJWE1FOiBDb25uZWN0IFdlYlNvY2tldENoYW5uZWwuCit9CisKK2Jvb2wg
V2ViU29ja2V0OjpzZW5kKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGlmIChtX3N0YXRlICE9IE9QRU4pIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBGSVhNRTogc2VuZCBtZXNzYWdl
IG9uIFdlYlNvY2tldENoYW5uZWwuCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYlNv
Y2tldDo6Y2xvc2UoKQoreworICAgIGlmIChtX3N0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgLy8gRklYTUU6IGNsb3NlIFdlYlNvY2tl
dENoYW5uZWwuCit9CisKK2NvbnN0IEtVUkwmIFdlYlNvY2tldDo6dXJsKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV91cmw7Cit9CisKK1dlYlNvY2tldDo6U3RhdGUgV2ViU29ja2V0OjpyZWFkeVN0
YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKwordW5zaWduZWQgbG9uZyBX
ZWJTb2NrZXQ6OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogYXNrIHBs
YXRmb3JtIGNvZGUgdG8gZ2V0IGJ1ZmZlcmVkIGFtb3VudCB0byBiZSBzZW50LgorICAgIHJldHVy
biAwOworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXZWJTb2NrZXQ6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OmFkZEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgV2ViU29ja2V0Ojpy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYsIEV2ZW50TGlzdGVuZXIqLCBi
b29sKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4KK30KKworYm9vbCBXZWJTb2Nr
ZXQ6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgV2ViU29ja2V0OjpkaWRDb25uZWN0KCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBDT05ORUNU
SU5HKSB7CisgICAgICAgIGRpZENsb3NlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
bV9zdGF0ZSA9IE9QRU47CisgICAgZGlzcGF0Y2hPcGVuRXZlbnQoKTsKK30KKwordm9pZCBXZWJT
b2NrZXQ6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbXNnKQoreworICAgIGlmICht
X3N0YXRlICE9IE9QRU4pCisgICAgICAgIHJldHVybjsKKyAgICBkaXNwYXRjaE1lc3NhZ2VFdmVu
dChtc2cpOworfQorCit2b2lkIFdlYlNvY2tldDo6ZGlkQ2xvc2UoKQoreworICAgIG1fc3RhdGUg
PSBDTE9TRUQ7CisgICAgZGlzcGF0Y2hDbG9zZUV2ZW50KCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0
OjpkaXNwYXRjaE9wZW5FdmVudCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzLgor
fQorCit2b2lkIFdlYlNvY2tldDo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJikK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgV2ViU29ja2V0Ojpk
aXNwYXRjaENsb3NlRXZlbnQoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4KK30K
KworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0LmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1ZTJjYwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaApAQCAtMCwwICsxLDEyMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlNvY2tldF9oCisjZGVmaW5lIFdlYlNvY2tldF9oCisKKyNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAi
RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiS1VS
TC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgV2ViU29j
a2V0IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBw
dWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJTb2NrZXQ+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSB7IHJldHVy
biBhZG9wdFJlZihuZXcgV2ViU29ja2V0KGNvbnRleHQpKTsgfQorICAgIHZpcnR1YWwgfldlYlNv
Y2tldCgpOworCisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIENPTk5FQ1RJTkcgPSAwLAorICAg
ICAgICBPUEVOID0gMSwKKyAgICAgICAgQ0xPU0VEID0gMgorICAgIH07CisKKyAgICB2b2lkIGNv
bm5lY3QoY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBjb25uZWN0
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZSYp
OworCisgICAgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYp
OworCisgICAgdm9pZCBjbG9zZSgpOworCisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3Q7Cisg
ICAgU3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRB
bW91bnQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0T25vcGVuKFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29ub3BlbiA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBF
dmVudExpc3RlbmVyKiBvbm9wZW4oKSBjb25zdCB7IHJldHVybiBtX29ub3Blbi5nZXQoKTsgfQor
ICAgIHZvaWQgc2V0T25tZXNzYWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikgeyBtX29ubWVzc2FnZSA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVy
KiBvbm1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX29ubWVzc2FnZS5nZXQoKTsgfQorICAgIHZv
aWQgc2V0T25jbG9zZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsg
bV9vbmNsb3NlID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9uY2xvc2Uo
KSBjb25zdCB7IHJldHVybiBtX29uY2xvc2UuZ2V0KCk7IH0KKworICAgIC8vIEV2ZW50VGFyZ2V0
CisgICAgdmlydHVhbCBXZWJTb2NrZXQqIHRvV2ViU29ja2V0KCkgeyByZXR1cm4gdGhpczsgfQor
CisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1
c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7
CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2Vw
dGlvbkNvZGUmKTsKKworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIC8vIHZpcnR1YWwgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKKyAgICAvLyB2aXJ0dWFsIHZvaWQgY29udGV4
dERlc3Ryb3llZCgpOworICAgIC8vIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7Cisg
ICAgLy8gdmlydHVhbCB2b2lkIHN1c3BlbmQoKTsKKyAgICAvLyB2aXJ0dWFsIHZvaWQgcmVzdW1l
KCk7CisgICAgLy8gdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIHVzaW5nIFJlZkNvdW50ZWQ8
V2ViU29ja2V0Pjo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Pjo6ZGVyZWY7
CisKK3ByaXZhdGU6CisgICAgV2ViU29ja2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorCisgICAgLy8gV2ViU29ja2V0
Q2hhbm5lbENsaWVudAorICAgIHZvaWQgZGlkQ29ubmVjdCgpOworICAgIHZvaWQgZGlkUmVjZWl2
ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtc2cpOworICAgIHZvaWQgZGlkQ2xvc2UoKTsKKworICAg
IHZvaWQgZGlzcGF0Y2hPcGVuRXZlbnQoKTsKKyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUV2ZW50
KGNvbnN0IFN0cmluZyYgbXNnKTsKKyAgICB2b2lkIGRpc3BhdGNoQ2xvc2VFdmVudCgpOworCisg
ICAgLy8gRklYTUU6IGFkZCBXZWJTb2NrZXRDaGFubmVsLgorCisgICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IG1fb25vcGVuOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29ubWVzc2FnZTsK
KyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbmNsb3NlOworCisgICAgU3RhdGUgbV9zdGF0
ZTsKKyAgICBLVVJMIG1fdXJsOworICAgIFN0cmluZyBtX3Byb3RvY29sOworfTsKKworfSAgLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBXZWJTb2NrZXRfaApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2Vi
U29ja2V0LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGI5MTZmCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwKQEAgLTAs
MCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCittb2R1bGUgd2Vic29ja2V0cyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBDdXN0b21NYXJrRnVuY3Rpb24sCisgICAgICAgIE5vU3RhdGljVGFibGVzLAorICAgICAgICBD
b25kaXRpb25hbD1XRUJfU09DS0VUUworICAgIF0gV2ViU29ja2V0IHsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyBVUkw7CisKKyAgICAgICAgLy8gcmVhZHkgc3RhdGUKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09OTkVDVElORyA9IDA7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IE9QRU4gPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBD
TE9TRUQgPSAyOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcmVh
ZHlTdGF0ZTsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBidWZm
ZXJlZEFtb3VudDsKKworICAgICAgICAvLyBuZXR3b3JraW5nCisgICAgICAgIGF0dHJpYnV0ZSBF
dmVudExpc3RlbmVyIG9ub3BlbjsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25t
ZXNzYWdlOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNsb3NlOworCisgICAg
ICAgIFtDdXN0b21dIGJvb2xlYW4gc2VuZChpbiBET01TdHJpbmcgZGF0YSkKKyAgICAgICAgICBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgICAgIC8v
IEV2ZW50VGFyZ2V0IGludGVyZmFjZQorICAgICAgICAvLyBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50
TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgIC8vICAgaW4gRXZlbnRMaXN0ZW5l
ciBsaXN0ZW5lciwKKyAgICAgICAgLy8gICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAg
ICAvLyBbQ3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUs
CisgICAgICAgIC8vICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgLy8gICBp
biBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICAvLyBib29sZWFuIGRpc3BhdGNoRXZlbnQo
aW4gRXZlbnQgZXZ0KQorICAgICAgICAvLyAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisgICAg
fTsKK30=
</data>
<flag name="review"
          id="18361"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="18363"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>