<?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>190696</bug_id>
          
          <creation_ts>2018-10-17 19:16:05 -0700</creation_ts>
          <short_desc>[LFC][IFC] Add generic inline run generator.</short_desc>
          <delta_ts>2018-10-19 09:12:40 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1470438</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-10-17 19:16:05 -0700</bug_when>
    <thetext>Generate inline runs for any type of inline content (replaced, text, float, inline-block etc)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470450</commentid>
    <comment_count>1</comment_count>
      <attachid>352679</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-10-17 19:59:59 -0700</bug_when>
    <thetext>Created attachment 352679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470857</commentid>
    <comment_count>2</comment_count>
      <attachid>352679</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-19 07:35:12 -0700</bug_when>
    <thetext>Comment on attachment 352679
Patch

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

&gt; Source/WebCore/layout/inlineformatting/InlineRunProvider.h:100
&gt; +        Run(const InlineItem&amp;, Type);
&gt; +        Run(const InlineItem&amp;, Type, TextContext);

Could just take std::optional&lt;TextContext&gt; and combine these.

&gt; Source/WebCore/layout/inlineformatting/InlineRunProvider.h:108
&gt; +    using Runs = Vector&lt;InlineRunProvider::Run&gt;;
&gt; +
&gt; +    const Runs&amp; runs() const { return m_inlineRuns; }

Just using Vector&lt;InlineRunProvider::Run&gt; might be clearer an alias.

&gt; Source/WebCore/layout/layouttree/LayoutInlineBox.cpp:39
&gt; +InlineBox::InlineBox(std::optional&lt;ElementAttributes&gt; attributes, RenderStyle&amp;&amp; style, BaseTypeFlags baseTypeFlags)

BaseTypeFlags stuff should really be using OptionSet these days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470858</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-19 07:35:23 -0700</bug_when>
    <thetext>r=me, looks nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470866</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-10-19 08:49:32 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #2)
&gt; Comment on attachment 352679 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=352679&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineRunProvider.h:100
&gt; &gt; +        Run(const InlineItem&amp;, Type);
&gt; &gt; +        Run(const InlineItem&amp;, Type, TextContext);
&gt; 
&gt; Could just take std::optional&lt;TextContext&gt; and combine these.
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineRunProvider.h:108
&gt; &gt; +    using Runs = Vector&lt;InlineRunProvider::Run&gt;;
&gt; &gt; +
&gt; &gt; +    const Runs&amp; runs() const { return m_inlineRuns; }
&gt; 
&gt; Just using Vector&lt;InlineRunProvider::Run&gt; might be clearer an alias.
&gt; 
&gt; &gt; Source/WebCore/layout/layouttree/LayoutInlineBox.cpp:39
&gt; &gt; +InlineBox::InlineBox(std::optional&lt;ElementAttributes&gt; attributes, RenderStyle&amp;&amp; style, BaseTypeFlags baseTypeFlags)
&gt; 
&gt; BaseTypeFlags stuff should really be using OptionSet these days.
Yea, indeed. I&apos;ll fix it in a separate patch.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470867</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-10-19 08:52:14 -0700</bug_when>
    <thetext>Committed r237286: &lt;https://trac.webkit.org/changeset/237286&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470875</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-19 09:12:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/45406706&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352679</attachid>
            <date>2018-10-17 19:59:59 -0700</date>
            <delta_ts>2018-10-19 07:35:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190696-20181017195956.patch</filename>
            <type>text/plain</type>
            <size>43266</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmMxZjk2ZDI4YWI4MDA5
NDIyMDJiODlhNGM5OTA3M2Q3ZjRiODA4Ny4uNjUxNTRiYjUzNWVmZTgxMzU3NDZlOTVkZTZhZWQw
ODg4YWVkNjM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDE4LTEwLTE3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBBZGQgZ2Vu
ZXJpYyBpbmxpbmUgcnVuIGdlbmVyYXRvci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5MDY5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIElubGluZVJ1blByb3ZpZGVyIHR1cm5zIHRoZSBmb2xsb3dpbmcg
aW5saW5lIGNvbnRlbnQgLT4KKworICAgICAgICAgICAgPHNwYW4+Zm9vPHNwYW4+YmFyPC9zcGFu
Pjwvc3Bhbj4KKyAgICAgICAgICAgIDxpbWcgc3JjPSJicm9rZW4uanBnIj48c3Bhbj5oZWxsbyB3
b3JsZDwvc3Bhbj4KKworICAgICAgICBpbnRvIGEgc2V0IG9mIHJ1bnMgLT4KKworICAgICAgICAg
ICAgImZvb2JhciIKKyAgICAgICAgICAgIGltYWdlIGJveAorICAgICAgICAgICAgImhlbGxvIgor
ICAgICAgICAgICAgIiAiCisgICAgICAgICAgICAid29ybGQiCisKKyAgICAgICAgTm90ZSB0aGF0
IGEgdGV4dCBydW4gY2FuIG92ZXJsYXAgbXVsdGlwbGUgaW5saW5lIGVsZW1lbnRzLiBJbmxpbmVS
dW5Qcm92aWRlcjo6UnVuIG9ubHkgc3RvcmVzIGEgcmVmZXJlbmNlIHRvCisgICAgICAgIHRoZSBm
aXJzdCBpbmxpbmUgZWxlbWVudCAoY29udGludW91cyBjb250ZW50IGNhbiBiZSBhY2Nlc3NlZCBi
eSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgSW5saW5lQ29udGVudCBMaXN0SGFzaFNldCkuCisgICAg
ICAgIFRoZXNlIHJ1bnMgYXJlIHRoZSBpbnB1dCB0byB0aGUgbGluZSBicmVha2luZyBhbGdvcml0
bS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGU6OmlubGluZUNvbnRlbnQpOgorICAgICAgICAq
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0ZW0uaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OmxheW91dEJveCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OnN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lSXRlbUhhc2hGdW5jdGlvbnM6Omhhc2gpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtSGFzaEZ1bmN0aW9uczo6ZXF1YWwpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtSGFzaFRyYW5zbGF0b3I6Omhhc2gpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtSGFzaFRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lSXRlbTo6SW5saW5lSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OnR5cGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjp0ZXh0Q29udGVudCBjb25zdCk6CisgICAgICAgICog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lUnVuUHJvdmlkZXI6OklubGluZVJ1blByb3Zp
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lUnVuUHJvdmlkZXI6OmFwcGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVJ1blByb3ZpZGVyOjppbnNlcnRC
ZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVSdW5Qcm92aWRlcjo6cmVt
b3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aXNXaGl0ZXNwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6aXNTb2Z0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lUnVuUHJvdmlkZXI6OmlzQ29udGlub3VzQ29udGVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZVJ1blByb3ZpZGVyOjpwcm9jZXNzSW5saW5lVGV4dEl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVSdW5Qcm92aWRlcjo6bW92ZVRvTmV4
dE5vbldoaXRlc3BhY2VQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZVJ1blByb3ZpZGVyOjptb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24pOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjp0eXBlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6aXNUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lUnVuUHJvdmlkZXI6OlJ1
bjo6aXNXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
UnVuUHJvdmlkZXI6OlJ1bjo6aXNOb25XaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6aXNMaW5lQnJlYWsgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjppc0JveCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVJ1blByb3ZpZGVyOjpSdW46
OmlzRmxvYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVSdW5Qcm92
aWRlcjo6UnVuOjpUZXh0Q29udGV4dDo6c3RhcnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUZXh0Q29udGV4dDo6bGVuZ3RoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VGV4
dENvbnRleHQ6OmlzQ29sbGFwc2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VGV4dENvbnRleHQ6OnNldFN0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VGV4dENvbnRleHQ6OnNl
dExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVJ1blByb3ZpZGVyOjpS
dW46OnRleHRDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
UnVuUHJvdmlkZXI6OlJ1bjo6c3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjppbmxpbmVJdGVtIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lUnVuUHJvdmlkZXI6OnJ1bnMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVCb3hSdW4pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVG
bG9hdFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVJ1blByb3ZpZGVyOjpS
dW46OmNyZWF0ZVNvZnRMaW5lQnJlYWtSdW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVIYXJkTGluZUJyZWFrUnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlV2hpdGVzcGFj
ZVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVJ1blByb3ZpZGVyOjpSdW46
OmNyZWF0ZU5vbldoaXRlc3BhY2VSdW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuOjpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuOjpUZXh0Q29udGV4dDo6VGV4dENvbnRleHQpOgorICAgICAgICAq
IGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCb3g6OmlzTGluZUJyZWFrQm94IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJl
ZS9MYXlvdXRJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVC
b3g6OklubGluZUJveCk6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SW5saW5l
Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUJveDo6aGFzVGV4dENvbnRl
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVCb3g6OnRleHRDb250
ZW50IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRMaW5lQnJlYWtC
b3guY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlv
dXRJbmxpbmVCb3guY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtCb3g6
OkxpbmVCcmVha0JveCk6CisgICAgICAgICogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0TGluZUJy
ZWFrQm94Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xh
eW91dElubGluZUJveC5jcHAuCisKIDIwMTgtMTAtMTYgIEp1c3RpbiBNaWNoYXVkICA8anVzdGlu
X21pY2hhdWRAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBmZWF0dXJlIGZsYWcgYW5k
IGJpbmRpbmdzIGZvciBDU1MgUGFpbnRpbmcgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDY4MDY2NjQ3
OTk4MmNlOGU0ZTc2NWU0ZmVhOGFlMmQ0OTk3YmFlN2UuLmMxOTVhZmJjNmRkOGJiNGE4MmE3YTI4
YTdmYThkZDg5ZWQyZmQzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xMjUzLDYgKzEyNTMsNyBAQCBs
YXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdTdGF0ZS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUludmFs
aWRhdGlvbi5jcHAKK2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1blByb3ZpZGVyLmNw
cAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dGxheW91dC9UZXh0Q29udGVudFByb3ZpZGVy
LmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dGxheW91dC9zaW1wbGUvU2ltcGxlVGV4
dFJ1bkdlbmVyYXRvci5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvc2lt
cGxlL1NpbXBsZUxpbmVCcmVha2VyLmNwcApAQCAtMTI2MSw2ICsxMjYyLDcgQEAgbGF5b3V0L2xh
eW91dHRyZWUvTGF5b3V0Qm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Q29udGFpbmVy
LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SW5saW5lQm94LmNwcAogbGF5b3V0L2xheW91
dHRyZWUvTGF5b3V0SW5saW5lQ29udGFpbmVyLmNwcAorbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0
TGluZUJyZWFrQm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0UmVwbGFjZWQuY3BwCiBs
YXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIzZGM3ZDU5YjM0
ZTI4ZjNhMzg5ODIyNzg4ZGNlODQyNGI5OTg5YWYuLjAyMzA0NDlhZGY0MjY4ZTE1NTJhZjRhMDc5
MDliZjU3MzY5NmI1NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTE5ODYsNiArMTk4Niw3IEBACiAJCTZFRThBNzczMTBGODAz
RjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRThBNzcxMTBGODAzRjMwMDVBNEEyNCAv
KiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLzsgfTsKIAkJNkYyMjJCNzYxQUI1MkQ4QTAw
OTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAv
KiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgKi87IH07CiAJCTZGM0UxRjYyMjEzNjE0
MjAwMEE2NUEwOCAvKiBGbG9hdEJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkYzRTFGNjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkY1MjE3Qzcy
MTc3RjVBNzAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyog
SW5saW5lUnVuUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk2RjdDQTNDNjIwOEMyOTU3MDAyRjI5QUIgLyogTGF5b3V0Q29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY3Q0EzQzQy
MDhDMjk1NjAwMkYyOUFCIC8qIExheW91dENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMyQjJFMDAyRjI5QUIgLyog
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZGOTk1QTE1MUE3MDc1NjIwMEE3MzVGNCAvKiBXZWJHTFN5bmMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY5OTVBMTMxQTcwNzU2MjAw
QTczNUY0IC8qIFdlYkdMU3luYy5jcHAgKi87IH07CkBAIC0yMDA0LDYgKzIwMDUsOCBAQAogCQk2
Rjk5NUEzODFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Rjk5NUEyRTFBNzA4
MzM3MDBBNzM1RjQgLyogSlNXZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmggKi87IH07CiAJCTZGOTk1
QTNBMUE3MDgzMzcwMEE3MzVGNCAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGOTk1QTMwMUE3MDgzMzcw
MEE3MzVGNCAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaCAqLzsgfTsKIAkJNkZBNDQ1NEU4
OThGMkZDMTY4QkMzOEMxIC8qIEpTQmVmb3JlVW5sb2FkRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5RTA0QTI3QkVEMkY4MUY5OEU5MDIyQiAv
KiBKU0JlZm9yZVVubG9hZEV2ZW50LmggKi87IH07CisJCTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3
MyAvKiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RkU3Q0ZBMDIxNzdFRUYxMDA1QjE1NzMgLyogSW5saW5lSXRlbS5oICovOyB9Owor
CQk2RkU3Q0ZBNDIxNzdFRjEwMDA1QjE1NzMgLyogTGF5b3V0TGluZUJyZWFrQm94LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkU3Q0ZBMzIxNzdFRjEw
MDA1QjE1NzMgLyogTGF5b3V0TGluZUJyZWFrQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZGREM0NDIyMTJFRkYxNzAwQTlDQTkxIC8qIEZs
b2F0QXZvaWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkZGREM0NDAyMTJFRkYxNjAwQTlDQTkxIC8qIEZsb2F0QXZvaWRlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwOUEwMUZFMUUzRDBCREQw
MDZCMEQ0QyAvKiBNb2R1bGVGZXRjaEZhaWx1cmVLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDlBMDFGRDFFM0QwQkNDMDA2QjBENEMgLyogTW9k
dWxlRmV0Y2hGYWlsdXJlS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcxMDI1RUNEMUY5OUYwQ0UwMDRBMjUwQyAvKiBBbmltYXRpb25UaW1l
bGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzEw
MjVFQzcxRjk5RjA5NjAwNEEyNTBDIC8qIEFuaW1hdGlvblRpbWVsaW5lLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkwNTIsNiArOTA1NSw4IEBA
CiAJCTZGMjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGM0UxRjVG
MjEzNjE0MTcwMEE2NUEwOCAvKiBGbG9hdEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9h
dEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGM0UxRjYxMjEzNjE0MTcw
MEE2NUEwOCAvKiBGbG9hdEJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdEJveC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5l
UnVuUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUnVu
UHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkY1MjE3QzYyMTc3RjVB
NjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElubGluZVJ1blByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkY3MzkxOEMyMTA2Q0VERDAwNkFGMjYyIC8qIExheW91dFVuaXRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExheW91dFVuaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRDb250ZXh0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExheW91dENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3Q0Ez
QzUyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91dENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGF5b3V0Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MDg4
LDYgKzkwOTMsOSBAQAogCQk2RkNEMTlDMTIwRjk3MjdBMDBGRDQ1MjkgLyogVGV4dENvbnRlbnRQ
cm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29udGVudFByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGQ0QxOUM3MjBGOTcyN0QwMEZENDUyOSAvKiBUZXh0Q29u
dGVudFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb250ZW50UHJvdmlkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkNGOTc1MjIwRjAyQjM1MDAyMTQ5
NjAgLyogUnVucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTZGRTdDRkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkZFN0NGQTMyMTc3RUYxMDAwNUIxNTczIC8qIExheW91dExpbmVCcmVh
a0JveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRMaW5lQnJlYWtC
b3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkZFN0NGQTUyMTc3RjA2OTAwNUIx
NTczIC8qIExheW91dExpbmVCcmVha0JveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMYXlvdXRMaW5lQnJlYWtCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RkZEQzQzRTIxMkVGRjE2MDBBOUNBOTEgLyogRmxvYXRBdm9pZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0QXZvaWRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGRkRDNDQwMjEyRUZGMTYwMEE5Q0E5MSAvKiBGbG9h
dEF2b2lkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRBdm9pZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwOUEwMUZEMUUzRDBCQ0MwMDZCMEQ0
QyAvKiBNb2R1bGVGZXRjaEZhaWx1cmVLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vZHVsZUZldGNoRmFpbHVyZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE1OTgyLDYgKzE1OTkwLDggQEAKIAkJCQkxMTk5RkE0RTIwOEUzODk5MDAyMzU4Q0Mg
LyogTGF5b3V0SW5saW5lQ29udGFpbmVyLmNwcCAqLywKIAkJCQkxMTk5RkE0RDIwOEUzODk5MDAy
MzU4Q0MgLyogTGF5b3V0SW5saW5lQ29udGFpbmVyLmggKi8sCiAJCQkJMTExMDBGQzcyMDkyNzY0
QzAwODFBQTZDIC8qIExheW91dEl0ZXJhdG9yLmggKi8sCisJCQkJNkZFN0NGQTUyMTc3RjA2OTAw
NUIxNTczIC8qIExheW91dExpbmVCcmVha0JveC5jcHAgKi8sCisJCQkJNkZFN0NGQTMyMTc3RUYx
MDAwNUIxNTczIC8qIExheW91dExpbmVCcmVha0JveC5oICovLAogCQkJCTExMUM2MTU3MjBBRDFB
RTEwMDVCODJGQSAvKiBMYXlvdXRSZXBsYWNlZC5jcHAgKi8sCiAJCQkJMTExQzYxNTYyMEFEMUFF
MTAwNUI4MkZBIC8qIExheW91dFJlcGxhY2VkLmggKi8sCiAJCQkJMTExMDBGRDUyMDk1MTRERTAw
ODFBQTZDIC8qIExheW91dFRyZWVCdWlsZGVyLmNwcCAqLywKQEAgLTE2MDE1LDYgKzE2MDI1LDkg
QEAKIAkJCQkxMTVDRkE3QzIwOEI4RTEwMDAxRTY5OTEgLyogSW5saW5lRm9ybWF0dGluZ1N0YXRl
LmggKi8sCiAJCQkJMTEyM0FGREQyMDlBQkJCQTAwNzM2QUNDIC8qIElubGluZUludmFsaWRhdGlv
bi5jcHAgKi8sCiAJCQkJMTEyM0FGREMyMDlBQkJCQTAwNzM2QUNDIC8qIElubGluZUludmFsaWRh
dGlvbi5oICovLAorCQkJCTZGRTdDRkEwMjE3N0VFRjEwMDVCMTU3MyAvKiBJbmxpbmVJdGVtLmgg
Ki8sCisJCQkJNkY1MjE3QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVyLmNw
cCAqLywKKwkJCQk2RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIu
aCAqLywKIAkJCSk7CiAJCQlwYXRoID0gaW5saW5lZm9ybWF0dGluZzsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0yODc0Myw3ICsyODc1Niw5IEBACiAJCQkJNkY3Q0EzQ0EyMDhDMkIy
RTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxMTVDRkE3RTIwOEI4RTEwMDAxRTY5OTEgLyogSW5saW5lRm9ybWF0dGluZ1N0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxMTMxMENGODIwQkE0QTZBMDA2NUE4RDAgLyogSW5saW5lSW52YWxp
ZGF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMgLyog
SW5saW5lSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYxMTIwRDYwODAwNjBFQ0U1
IC8qIElubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RjUyMTdDNzIxNzdGNUE3
MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBNEMz
QTc3MEIyQjE2NzkwMDIzMzRBMiAvKiBJbmxpbmVTdHlsZVNoZWV0T3duZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRUE0ODVBMDk3RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQzAxMDcwMTE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJv
eFN0eWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTI5Njg5LDYgKzI5NzA0LDcgQEAKIAkJCQkxMTk5
RkE1MzIwOEUzOEQzMDAyMzU4Q0MgLyogTGF5b3V0SW5saW5lQm94LmggaW4gSGVhZGVycyAqLywK
IAkJCQkxMTk5RkE0RjIwOEUzODk5MDAyMzU4Q0MgLyogTGF5b3V0SW5saW5lQ29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxMTMxMENGNDIwQkE0QTNEMDA2NUE4RDAgLyogTGF5b3V0SXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGRTdDRkE0MjE3N0VGMTAwMDVCMTU3MyAvKiBM
YXlvdXRMaW5lQnJlYWtCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMUQ3MkY2MTVGRTY5NTMw
MEM0QzA3RSAvKiBMYXlvdXRNaWxlc3RvbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDFEQzA1
MTE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
MURDMDUzMTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBhNWJmMWFkNmU1N2EwZjhiNzg4
MzI3YmE4MzIzNjlhNTNhZmQwZGU4Li43ZGUyM2MxMWM3ZTdhODQ5Y2FhZmIyMmYzOWE4ZDhjZDhl
MGJiYTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC03MCw4ICs3
MCw4IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dChMYXlvdXRDb250ZXh0
JiBsYXlvdXRDb250ZXh0LCBGb3JtYXR0aW5nU3RhCiAgICAgICAgIH0KICAgICAgICAgYXV0byYg
aW5saW5lQm94ID0gZG93bmNhc3Q8SW5saW5lQm94PigqbGF5b3V0Qm94KTsKICAgICAgICAgLy8g
T25seSB0ZXh0IGNvbnRlbnQgYXQgdGhpcyBwb2ludC4KLSAgICAgICAgaWYgKGlubGluZUJveC50
ZXh0Q29udGVudCgpKQotICAgICAgICAgICAgdGV4dENvbnRlbnRQcm92aWRlci5hcHBlbmRUZXh0
KCppbmxpbmVCb3gudGV4dENvbnRlbnQoKSwgaW5saW5lQm94LnN0eWxlKCksIHRydWUpOworICAg
ICAgICBpZiAoaW5saW5lQm94Lmhhc1RleHRDb250ZW50KCkpCisgICAgICAgICAgICB0ZXh0Q29u
dGVudFByb3ZpZGVyLmFwcGVuZFRleHQoaW5saW5lQm94LnRleHRDb250ZW50KCksIGlubGluZUJv
eC5zdHlsZSgpLCB0cnVlKTsKIAogICAgICAgICBmb3IgKDsgbGF5b3V0Qm94OyBsYXlvdXRCb3gg
PSBsYXlvdXRCb3gtPmNvbnRhaW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAobGF5b3V0
Qm94ID09ICZmb3JtYXR0aW5nUm9vdCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAppbmRl
eCBlZjI2Mjc3MGE1YTUwZTQxMjFkNzQzYzE4NTYwNjE2OWJkYmEwODZiLi5jYWFjZTJlN2M4Yzc2
MjNiYjE2M2U5OGM4YmMxY2U3ZmIwYWM4YzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUu
aApAQCAtMjgsMTEgKzI4LDExIEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCiAKICNpbmNsdWRlICJGb3JtYXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVt
LmgiCiAjaW5jbHVkZSAiUnVucy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewotCiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogLy8gSW5saW5lRm9ybWF0
dGluZ1N0YXRlIGhvbGRzIHRoZSBzdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIGlubGluZSBmb3JtYXR0
aW5nIGNvbnRleHQgdHJlZS4KQEAgLTQyLDExICs0MiwxMyBAQCBwdWJsaWM6CiAgICAgSW5saW5l
Rm9ybWF0dGluZ1N0YXRlKFJlZjxGbG9hdGluZ1N0YXRlPiYmLCBjb25zdCBMYXlvdXRDb250ZXh0
Jik7CiAgICAgdmlydHVhbCB+SW5saW5lRm9ybWF0dGluZ1N0YXRlKCk7CiAKKyAgICBJbmxpbmVD
b250ZW50JiBpbmxpbmVDb250ZW50KCkgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50OyB9CiAgICAg
Ly8gVGhpcyBpcyB0ZW1wb3JhcnkuIFdlIG5lZWQgdG8gY29uc3RydWN0IGEgZGlzcGxheSB0cmVl
IGNvbnRleHQgZm9yIGlubGluZXMuCiAgICAgdm9pZCBhZGRMYXlvdXRSdW5zKFZlY3RvcjxMYXlv
dXRSdW4+JiYgbGF5b3V0UnVucykgeyBtX2xheW91dFJ1bnMgPSBXVEZNb3ZlKGxheW91dFJ1bnMp
OyB9CiAgICAgY29uc3QgVmVjdG9yPExheW91dFJ1bj4mIGxheW91dFJ1bnMoKSBjb25zdCB7IHJl
dHVybiBtX2xheW91dFJ1bnM7IH0KIAogcHJpdmF0ZToKKyAgICBJbmxpbmVDb250ZW50IG1faW5s
aW5lQ29udGVudDsKICAgICBWZWN0b3I8TGF5b3V0UnVuPiBtX2xheW91dFJ1bnM7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJ
dGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVt
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmZjYjljOGIzYmQwMzNlNmMzY2I5MjIwMGQxNGQ1YzY0NDgxYTkwNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUl0ZW0uaApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkxh
eW91dEJveC5oIgorI2luY2x1ZGUgIkxheW91dElubGluZUJveC5oIgorI2luY2x1ZGUgIkxheW91
dExpbmVCcmVha0JveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0
IHsKKworY2xhc3MgSW5saW5lSXRlbSB7CitwdWJsaWM6CisgICAgSW5saW5lSXRlbShjb25zdCBC
b3gmIGxheW91dEJveCk7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgeyBUZXh0LCBIYXJkTGluZUJy
ZWFrLCBJbmxpbmVCb3gsIEZsb2F0IH07CisgICAgVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgY29u
c3QgQm94JiBsYXlvdXRCb3goKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveDsgfQorICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0Qm94LnN0eWxl
KCk7IH0KKyAgICBTdHJpbmcgdGV4dENvbnRlbnQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBj
b25zdCBCb3gmIG1fbGF5b3V0Qm94OworfTsKKworLy8gRklYTUU6IEZpeCBIYXNoU2V0L0xpc3RI
YXNoU2V0IHRvIHN1cHBvcnQgc21hcnQgcG9pbnRlciB0eXBlcy4KK3N0cnVjdCBJbmxpbmVJdGVt
SGFzaEZ1bmN0aW9ucyB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qgc3RkOjp1bmlx
dWVfcHRyPElubGluZUl0ZW0+JiBrZXkpIHsgcmV0dXJuIFB0ckhhc2g8SW5saW5lSXRlbSo+Ojpo
YXNoKGtleS5nZXQoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVuaXF1
ZV9wdHI8SW5saW5lSXRlbT4mIGEsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVJdGVtPiYg
YikgeyByZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOyB9Cit9OworCitzdHJ1Y3QgSW5saW5lSXRl
bUhhc2hUcmFuc2xhdG9yIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBJbmxpbmVJ
dGVtJiBrZXkpIHsgcmV0dXJuIFB0ckhhc2g8Y29uc3QgSW5saW5lSXRlbSo+OjpoYXNoKCZrZXkp
OyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPElubGluZUl0
ZW0+JiBhLCBjb25zdCBJbmxpbmVJdGVtJiBiKSB7IHJldHVybiBhLmdldCgpID09ICZiOyB9Cit9
OwordXNpbmcgSW5saW5lQ29udGVudCA9IExpc3RIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJbmxp
bmVJdGVtPiwgSW5saW5lSXRlbUhhc2hGdW5jdGlvbnM+OworCitpbmxpbmUgSW5saW5lSXRlbTo6
SW5saW5lSXRlbShjb25zdCBCb3gmIGxheW91dEJveCkKKyAgICA6IG1fbGF5b3V0Qm94KGxheW91
dEJveCkKK3sKK30KKworaW5saW5lIElubGluZUl0ZW06OlR5cGUgSW5saW5lSXRlbTo6dHlwZSgp
IGNvbnN0Cit7CisgICAgaWYgKGlzPElubGluZUJveD4obV9sYXlvdXRCb3gpICYmIGRvd25jYXN0
PElubGluZUJveD4obV9sYXlvdXRCb3gpLmhhc1RleHRDb250ZW50KCkpCisgICAgICAgIHJldHVy
biBUeXBlOjpUZXh0OworCisgICAgaWYgKGlzPExpbmVCcmVha0JveD4obV9sYXlvdXRCb3gpKQor
ICAgICAgICByZXR1cm4gVHlwZTo6SGFyZExpbmVCcmVhazsKKworICAgIGlmIChtX2xheW91dEJv
eC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQorICAgICAgICByZXR1cm4gVHlwZTo6RmxvYXQ7CisK
KyAgICBBU1NFUlQobV9sYXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpKTsKKyAgICByZXR1cm4g
VHlwZTo6SW5saW5lQm94OworfQorCitpbmxpbmUgU3RyaW5nIElubGluZUl0ZW06OnRleHRDb250
ZW50KCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6OlRleHQpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICByZXR1cm4gZG93bmNhc3Q8SW5saW5lQm94PihtX2xheW91dEJveCku
dGV4dENvbnRlbnQoKTsKK30KKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWMxNjU4YTMzY2UxNmUxYmRiYWY1MTE0ZGYwMDYzYmI5MWI4ODY1YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZVJ1blByb3ZpZGVyLmNwcApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgorCisjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJCcmVha0xpbmVzLmgi
CisjaW5jbHVkZSAiTGF5b3V0SW5saW5lQm94LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK1dU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbmxpbmVSdW5Qcm92aWRlcik7CisKK0lubGluZVJ1
blByb3ZpZGVyOjpJbmxpbmVSdW5Qcm92aWRlcihJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGlubGlu
ZUZvcm1hdHRpbmdTdGF0ZSkKKyAgICA6IG1faW5saW5lRm9ybWF0dGluZ1N0YXRlKGlubGluZUZv
cm1hdHRpbmdTdGF0ZSkKK3sKK30KKwordm9pZCBJbmxpbmVSdW5Qcm92aWRlcjo6YXBwZW5kKGNv
bnN0IEJveCYgbGF5b3V0Qm94KQoreworICAgIGF1dG8gaW5saW5lSXRlbSA9IHN0ZDo6bWFrZV91
bmlxdWU8SW5saW5lSXRlbT4obGF5b3V0Qm94KTsKKworICAgIC8vIFNwZWNpYWwgY2FzZSB0ZXh0
IGl0ZW0uIFRleHRzIGNhbiBvdmVybGFwIG11bHRpcGxlIGl0ZW1zLiA8c3Bhbj5mb288L3NwYW4+
PHNwYW4+YmFyPC9zcGFuPgorICAgIHN3aXRjaCAoaW5saW5lSXRlbS0+dHlwZSgpKSB7CisgICAg
Y2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpUZXh0OgorICAgICAgICBwcm9jZXNzSW5saW5lVGV4dEl0
ZW0oKmlubGluZUl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElubGluZUl0ZW06OlR5
cGU6OkhhcmRMaW5lQnJlYWs6CisgICAgICAgIG1faW5saW5lUnVucy5hcHBlbmQoSW5saW5lUnVu
UHJvdmlkZXI6OlJ1bjo6Y3JlYXRlSGFyZExpbmVCcmVha1J1bigqaW5saW5lSXRlbSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIElubGluZUl0ZW06OlR5cGU6OklubGluZUJveDoKKyAgICAg
ICAgbV9pbmxpbmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVCb3hS
dW4oKmlubGluZUl0ZW0pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmxpbmVJdGVtOjpU
eXBlOjpGbG9hdDoKKyAgICAgICAgbV9pbmxpbmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuOjpjcmVhdGVGbG9hdFJ1bigqaW5saW5lSXRlbSkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgIH0K
KworICAgIG1faW5saW5lRm9ybWF0dGluZ1N0YXRlLmlubGluZUNvbnRlbnQoKS5hZGQoV1RGTW92
ZShpbmxpbmVJdGVtKSk7Cit9CisKK3ZvaWQgSW5saW5lUnVuUHJvdmlkZXI6Omluc2VydEJlZm9y
ZShjb25zdCBCb3gmLCBjb25zdCBCb3gmKQoreworfQorCit2b2lkIElubGluZVJ1blByb3ZpZGVy
OjpyZW1vdmUoY29uc3QgQm94JikKK3sKK30KKworc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVz
cGFjZShjaGFyIGNoYXJhY3RlciwgYm9vbCBwcmVzZXJ2ZU5ld2xpbmUpCit7CisgICAgcmV0dXJu
IGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdcdCcgfHwgKGNoYXJhY3RlciA9PSAn
XG4nICYmICFwcmVzZXJ2ZU5ld2xpbmUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTb2Z0
TGluZUJyZWFrKGNoYXIgY2hhcmFjdGVyLCBib29sIHByZXNlcnZlTmV3bGluZSkKK3sKKyAgICBy
ZXR1cm4gcHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nOworfQorCitib29sIElu
bGluZVJ1blByb3ZpZGVyOjppc0NvbnRpbm91c0NvbnRlbnQoSW5saW5lUnVuUHJvdmlkZXI6OlJ1
bjo6VHlwZSBuZXdSdW5UeXBlLCBjb25zdCBJbmxpbmVJdGVtJiBuZXdJbmxpbmVJdGVtKQorewor
ICAgIGlmIChtX2lubGluZVJ1bnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhdXRvJiBsYXN0UnVuID0gbV9pbmxpbmVSdW5zLmxhc3QoKTsKKyAgICAvLyBTYW1lIGVs
ZW1lbnQsIGNoZWNrIHR5cGUgb25seS4KKyAgICBpZiAoJm5ld0lubGluZUl0ZW0gPT0gJmxhc3RS
dW4uaW5saW5lSXRlbSgpKQorICAgICAgICByZXR1cm4gbmV3UnVuVHlwZSA9PSBsYXN0UnVuLnR5
cGUoKTsKKworICAgIC8vIFRoaXMgbmV3IHJ1biBpcyBmcm9tIGEgZGlmZmVyZW50IGlubGluZSBi
b3guCisgICAgLy8gRklYTUU6IGNoZWNrIHN0eWxlLgorICAgIGlmIChuZXdSdW5UeXBlID09IElu
bGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6Ok5vbldoaXRlc3BhY2UgJiYgbGFzdFJ1bi5pc05v
bldoaXRlc3BhY2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobmV3UnVuVHlw
ZSA9PSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpXaGl0ZXNwYWNlICYmIGxhc3RSdW4u
aXNXaGl0ZXNwYWNlKCkpCisgICAgICAgIHJldHVybiBuZXdJbmxpbmVJdGVtLnN0eWxlKCkuY29s
bGFwc2VXaGl0ZVNwYWNlKCkgPT0gbGFzdFJ1bi5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgp
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIElubGluZVJ1blByb3ZpZGVyOjpwcm9j
ZXNzSW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKK3sKKyAgICAv
LyBXZSBuZWVkIHRvIHJlc2V0IHRoZSBydW4gaXRlcmF0b3Igd2hlbiB0aGUgdGV4dCBjb250ZW50
IGlzIG5vdCBjb250aW51b3VzLgorICAgIC8vIDxzcGFuPmZvbzwvc3Bhbj48aW1nIHNyYz0iIj48
c3Bhbj5iYXI8L3NwYW4+IChGSVhNRTogZmxvYXRzPykKKyAgICBpZiAoIW1faW5saW5lUnVucy5p
c0VtcHR5KCkgJiYgIW1faW5saW5lUnVucy5sYXN0KCkuaXNUZXh0KCkpIHsKKyAgICAgICAgbV9s
aW5lQnJlYWtJdGVyYXRvci5yZXNldFByaW9yQ29udGV4dCgpOworICAgICAgICBtX2xpbmVCcmVh
a0l0ZXJhdG9yLnJlc2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9yKCIiLCAiIiwgTGluZUJyZWFr
SXRlcmF0b3JNb2RlOjpEZWZhdWx0KTsKKyAgICB9CisKKyAgICBhdXRvJiBzdHlsZSA9IGlubGlu
ZUl0ZW0uc3R5bGUoKTsKKyAgICBhdXRvIHRleHQgPSBpbmxpbmVJdGVtLnRleHRDb250ZW50KCk7
CisgICAgSXRlbVBvc2l0aW9uIGN1cnJlbnRJdGVtUG9zaXRpb24gPSAwOworICAgIHdoaWxlIChj
dXJyZW50SXRlbVBvc2l0aW9uIDwgdGV4dC5sZW5ndGgoKSkgeworCisgICAgICAgIC8vIFNvZnQg
bGluZWJyZWFrPworICAgICAgICBpZiAoaXNTb2Z0TGluZUJyZWFrKHRleHRbY3VycmVudEl0ZW1Q
b3NpdGlvbl0sIHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKSkgeworICAgICAgICAgICAgbV9pbmxp
bmVSdW5zLmFwcGVuZChJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpjcmVhdGVTb2Z0TGluZUJyZWFr
UnVuKGlubGluZUl0ZW0pKTsKKyAgICAgICAgICAgICsrY3VycmVudEl0ZW1Qb3NpdGlvbjsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpc1doaXRlc3Bh
Y2VSdW4gPSBpc1doaXRlc3BhY2UodGV4dFtjdXJyZW50SXRlbVBvc2l0aW9uXSwgc3R5bGUucHJl
c2VydmVOZXdsaW5lKCkpOworICAgICAgICBhdXRvIGxlbmd0aCA9IGlzV2hpdGVzcGFjZVJ1biA/
IG1vdmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oaW5saW5lSXRlbSwgY3VycmVudEl0ZW1Q
b3NpdGlvbikgOiBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24oaW5saW5lSXRlbSwgY3VycmVu
dEl0ZW1Qb3NpdGlvbik7CisKKyAgICAgICAgaWYgKGlzQ29udGlub3VzQ29udGVudChpc1doaXRl
c3BhY2VSdW4gPyBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlOjpXaGl0ZXNwYWNlIDogSW5s
aW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6Tm9uV2hpdGVzcGFjZSwgaW5saW5lSXRlbSkpIHsK
KyAgICAgICAgICAgIGF1dG8gdGV4dENvbnRleHQgPSBtX2lubGluZVJ1bnMubGFzdCgpLnRleHRD
b250ZXh0KCk7CisgICAgICAgICAgICB0ZXh0Q29udGV4dC0+c2V0TGVuZ3RoKHRleHRDb250ZXh0
LT5sZW5ndGgoKSArIGxlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2lu
bGluZVJ1bnMuYXBwZW5kKGlzV2hpdGVzcGFjZVJ1biA/IElubGluZVJ1blByb3ZpZGVyOjpSdW46
OmNyZWF0ZVdoaXRlc3BhY2VSdW4oaW5saW5lSXRlbSwgY3VycmVudEl0ZW1Qb3NpdGlvbiwgbGVu
Z3RoLCBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKKyAgICAgICAgICAgICAgICA6IElubGlu
ZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZU5vbldoaXRlc3BhY2VSdW4oaW5saW5lSXRlbSwgY3Vy
cmVudEl0ZW1Qb3NpdGlvbiwgbGVuZ3RoKSk7CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50
SXRlbVBvc2l0aW9uICs9IGxlbmd0aDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIElubGluZVJ1blBy
b3ZpZGVyOjptb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGNvbnN0IElubGluZUl0ZW0m
IGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBjdXJyZW50SXRlbVBvc2l0aW9uKQoreworICAgIGF1
dG8gdGV4dCA9IGlubGluZUl0ZW0udGV4dENvbnRlbnQoKTsKKyAgICBhdXRvIHByZXNlcnZlTmV3
bGluZSA9IGlubGluZUl0ZW0uc3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKTsKKyAgICBhdXRvIG5l
eHROb25XaGl0ZVNwYWNlUG9zaXRpb24gPSBjdXJyZW50SXRlbVBvc2l0aW9uOworCisgICAgd2hp
bGUgKG5leHROb25XaGl0ZVNwYWNlUG9zaXRpb24gPCB0ZXh0Lmxlbmd0aCgpICYmIGlzV2hpdGVz
cGFjZSh0ZXh0W25leHROb25XaGl0ZVNwYWNlUG9zaXRpb25dLCBwcmVzZXJ2ZU5ld2xpbmUpKQor
ICAgICAgICArK25leHROb25XaGl0ZVNwYWNlUG9zaXRpb247CisgICAgcmV0dXJuIG5leHROb25X
aGl0ZVNwYWNlUG9zaXRpb24gLSBjdXJyZW50SXRlbVBvc2l0aW9uOworfQorCit1bnNpZ25lZCBJ
bmxpbmVSdW5Qcm92aWRlcjo6bW92ZVRvTmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IElubGlu
ZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBjdXJyZW50SXRlbVBvc2l0aW9uKQorewor
ICAgIGF1dG8gZmluZE5leHRCcmVha2FibGVQb3NpdGlvbiA9IFsmXShhdXRvIGlubGluZVRleHQs
IGF1dG8mIHN0eWxlLCBJdGVtUG9zaXRpb24gc3RhcnRQb3NpdGlvbikgeworICAgICAgICAvLyBT
d2FwIGl0ZXJhdG9yJ3MgY29udGVudCBpZiB3ZSBhZHZhbmNlZCB0byBhIG5ldyBzdHJpbmcuCisg
ICAgICAgIGF1dG8gaXRlcmF0b3JUZXh0ID0gbV9saW5lQnJlYWtJdGVyYXRvci5zdHJpbmdWaWV3
KCk7CisKKyAgICAgICAgaWYgKGl0ZXJhdG9yVGV4dCAhPSBpbmxpbmVUZXh0KSB7CisgICAgICAg
ICAgICBhdXRvIHRleHRMZW5ndGggPSBpdGVyYXRvclRleHQubGVuZ3RoKCk7CisgICAgICAgICAg
ICBhdXRvIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMCA/IGl0ZXJhdG9yVGV4dFt0ZXh0
TGVuZ3RoIC0gMV0gOiAwOworICAgICAgICAgICAgYXV0byBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIg
PSB0ZXh0TGVuZ3RoID4gMSA/IGl0ZXJhdG9yVGV4dFt0ZXh0TGVuZ3RoIC0gMl0gOiAwOworICAg
ICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5zZXRQcmlvckNvbnRleHQobGFzdENoYXJhY3Rl
ciwgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgIG1fbGluZUJyZWFrSXRlcmF0
b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3IoaW5saW5lVGV4dCwgc3R5bGUubG9jYWxl
KCksIExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIGtlZXBBbGxXb3Jkc0ZvckNKSyA9IHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVh
azo6S2VlcEFsbDsKKyAgICAgICAgYXV0byBicmVha05CU1AgPSBzdHlsZS5hdXRvV3JhcCgpICYm
IHN0eWxlLm5ic3BNb2RlKCkgPT0gTkJTUE1vZGU6OlNwYWNlOworCisgICAgICAgIGlmIChrZWVw
QWxsV29yZHNGb3JDSkspIHsKKyAgICAgICAgICAgIGlmIChicmVha05CU1ApCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3JkcyhtX2xpbmVC
cmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0QnJl
YWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHNJZ25vcmluZ05CU1AobV9saW5lQnJlYWtJdGVy
YXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9saW5lQnJl
YWtJdGVyYXRvci5tb2RlKCkgPT0gTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KSB7Cisg
ICAgICAgICAgICBpZiAoYnJlYWtOQlNQKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpuZXh0QnJlYWthYmxlUG9zaXRpb24obV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlv
bik7CisgICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQ
KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGJyZWFrTkJTUCkKKyAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRp
b25XaXRob3V0U2hvcnRjdXQobV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Cisg
ICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1BXaXRob3V0U2hv
cnRjdXQobV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7CisgICAgfTsKKworICAg
IGF1dG8mIHN0eWxlID0gaW5saW5lSXRlbS5zdHlsZSgpOworICAgIGF1dG8gbmV4dEJyZWFrYWJs
ZVBvc2l0aW9uID0gZmluZE5leHRCcmVha2FibGVQb3NpdGlvbihpbmxpbmVJdGVtLnRleHRDb250
ZW50KCksIHN0eWxlLCBjdXJyZW50SXRlbVBvc2l0aW9uKTsKKyAgICByZXR1cm4gbmV4dEJyZWFr
YWJsZVBvc2l0aW9uIC0gY3VycmVudEl0ZW1Qb3NpdGlvbjsKK30KKworfQorfQorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVS
dW5Qcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lUnVuUHJvdmlkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTViMzYyMjhlZmQ3Y2ZhZGRkOTQ0NjkzMzE5
OTZmYTY1NzdlZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuaApAQCAtMCwwICsxLDE3NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCisKKyNpbmNsdWRlICJJbmxpbmVJdGVtLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitjbGFzcyBJbmxpbmVGb3JtYXR0aW5n
U3RhdGU7CisKK3VzaW5nIEl0ZW1Qb3NpdGlvbiA9IHVuc2lnbmVkOworCitjbGFzcyBJbmxpbmVS
dW5Qcm92aWRlciB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmxpbmVSdW5Qcm92aWRl
cik7CitwdWJsaWM6CisgICAgSW5saW5lUnVuUHJvdmlkZXIoSW5saW5lRm9ybWF0dGluZ1N0YXRl
Jik7CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBCb3gmKTsKKyAgICB2b2lkIGluc2VydEJlZm9y
ZShjb25zdCBCb3gmLCBjb25zdCBCb3gmIGJlZm9yZSk7CisgICAgdm9pZCByZW1vdmUoY29uc3Qg
Qm94Jik7CisKKyAgICBzdHJ1Y3QgUnVuIHsKKworICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZUJv
eFJ1bihjb25zdCBJbmxpbmVJdGVtJik7CisgICAgICAgIHN0YXRpYyBSdW4gY3JlYXRlRmxvYXRS
dW4oY29uc3QgSW5saW5lSXRlbSYpOworICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZUhhcmRMaW5l
QnJlYWtSdW4oY29uc3QgSW5saW5lSXRlbSYpOworICAgICAgICBzdGF0aWMgUnVuIGNyZWF0ZVNv
ZnRMaW5lQnJlYWtSdW4oY29uc3QgSW5saW5lSXRlbSYpOworICAgICAgICBzdGF0aWMgUnVuIGNy
ZWF0ZVdoaXRlc3BhY2VSdW4oY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBzdGFydCwg
dW5zaWduZWQgbGVuZ3RoLCBib29sIGlzQ29sbGFwc2libGUpOworICAgICAgICBzdGF0aWMgUnVu
IGNyZWF0ZU5vbldoaXRlc3BhY2VSdW4oY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBz
dGFydCwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgICAgICBlbnVtIGNsYXNzIFR5cGUgeworICAg
ICAgICAgICAgQm94LAorICAgICAgICAgICAgRmxvYXQsCisgICAgICAgICAgICBTb2Z0TGluZUJy
ZWFrLAorICAgICAgICAgICAgSGFyZExpbmVCcmVhaywKKyAgICAgICAgICAgIFdoaXRlc3BhY2Us
CisgICAgICAgICAgICBOb25XaGl0ZXNwYWNlCisgICAgICAgIH07CisgICAgICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAgICBib29sIGlzVGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBSdW46OlR5cGU6OldoaXRlc3BhY2UgfHwgbV90eXBlID09IFJ1
bjo6VHlwZTo6Tm9uV2hpdGVzcGFjZSB8fCBtX3R5cGUgPT0gUnVuOjpUeXBlOjpTb2Z0TGluZUJy
ZWFrIHx8IG1fdHlwZSA9PSBSdW46OlR5cGU6OkhhcmRMaW5lQnJlYWs7IH0KKyAgICAgICAgYm9v
bCBpc1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6V2hpdGVzcGFj
ZTsgfQorICAgICAgICBib29sIGlzTm9uV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZSA9PSBUeXBlOjpOb25XaGl0ZXNwYWNlOyB9CisgICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgPT0gUnVuOjpUeXBlOjpTb2Z0TGluZUJyZWFrIHx8IG1fdHlw
ZSA9PSBSdW46OlR5cGU6OkhhcmRMaW5lQnJlYWs7IH0KKyAgICAgICAgYm9vbCBpc0JveCgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpCb3g7IH0KKyAgICAgICAgYm9vbCBpc0Zsb2F0
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OkZsb2F0OyB9CisKKyAgICAgICAgc3Ry
dWN0IFRleHRDb250ZXh0IHsKKworICAgICAgICAgICAgZW51bSBjbGFzcyBJc0NvbGxhcHNlZCB7
IE5vLCBZZXMgfTsKKyAgICAgICAgICAgIFRleHRDb250ZXh0KEl0ZW1Qb3NpdGlvbiwgdW5zaWdu
ZWQgbGVuZ3RoLCBJc0NvbGxhcHNlZCk7CisKKyAgICAgICAgICAgIEl0ZW1Qb3NpdGlvbiBzdGFy
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCAn
ZW5kJyBwb3NpdGlvbiBkb2VzIG5vdCBlcXVhbCB0byBzdGFydCArIGxlbmd0aCB3aGVuIHJ1biBv
dmVybGFwcyBtdWx0aXBsZSBJbmxpbmVJdGVtcy4KKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgICAgICAgICBib29sIGlzQ29sbGFw
c2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxhcHNlZCA9PSBJc0NvbGxhcHNlZDo6WWVzOyB9
CisKKyAgICAgICAgICAgIHZvaWQgc2V0U3RhcnQoSXRlbVBvc2l0aW9uIHN0YXJ0KSB7IG1fc3Rh
cnQgPSBzdGFydDsgfQorICAgICAgICAgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3Ro
KSB7IG1fbGVuZ3RoID0gbGVuZ3RoOyB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IEl0ZW1Qb3NpdGlvbiBtX3N0YXJ0IHsgMCB9OworICAgICAgICAgICAgdW5zaWduZWQgbV9sZW5n
dGggeyAwIH07CisgICAgICAgICAgICBJc0NvbGxhcHNlZCBtX2lzQ29sbGFwc2VkIHsgSXNDb2xs
YXBzZWQ6Ok5vIH07CisgICAgICAgIH07CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8VGV4dENvbnRl
eHQ+IHRleHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQorICAgICAg
ICAvLyBOb3RlIHRoYXQgc3R5bGUoKSBhbmQgaW5saW5lSXRlbSgpIGFsd2F5cyByZXR1cm5zIHRo
ZSBmaXJzdCBJbmxpbmVJdGVtIGZvciBhIHJ1bi4KKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLnN0eWxlKCk7IH0KKyAgICAgICAg
Y29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lSXRl
bTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUnVuKGNvbnN0IElubGluZUl0ZW0mLCBUeXBl
KTsKKyAgICAgICAgUnVuKGNvbnN0IElubGluZUl0ZW0mLCBUeXBlLCBUZXh0Q29udGV4dCk7CisK
KyAgICAgICAgY29uc3QgVHlwZSBtX3R5cGU7CisgICAgICAgIGNvbnN0IElubGluZUl0ZW0mIG1f
aW5saW5lSXRlbTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxUZXh0Q29udGV4dD4gbV90ZXh0Q29u
dGV4dDsKKyAgICB9OworICAgIHVzaW5nIFJ1bnMgPSBWZWN0b3I8SW5saW5lUnVuUHJvdmlkZXI6
OlJ1bj47CisKKyAgICBjb25zdCBSdW5zJiBydW5zKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVS
dW5zOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb21taXRUZXh0UnVuKCk7CisgICAgdm9pZCBw
cm9jZXNzSW5saW5lVGV4dEl0ZW0oY29uc3QgSW5saW5lSXRlbSYpOworICAgIHVuc2lnbmVkIG1v
dmVUb05leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3Np
dGlvbiBjdXJyZW50UG9zaXRpb24pOworICAgIHVuc2lnbmVkIG1vdmVUb05leHRCcmVha2FibGVQ
b3NpdGlvbihjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGN1cnJlbnRQb3NpdGlvbik7
CisgICAgYm9vbCBpc0NvbnRpbm91c0NvbnRlbnQoUnVuOjpUeXBlIG5ld1J1blR5cGUsIGNvbnN0
IElubGluZUl0ZW0mIG5ld0lubGluZUl0ZW0pOworCisgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9y
IG1fbGluZUJyZWFrSXRlcmF0b3I7CisKKyAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIG1faW5s
aW5lRm9ybWF0dGluZ1N0YXRlOworICAgIFJ1bnMgbV9pbmxpbmVSdW5zOworfTsKKworaW5saW5l
IElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlQm94
UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCit7CisgICAgcmV0dXJuIHsgaW5saW5l
SXRlbSwgVHlwZTo6Qm94IH07Cit9CisKK2lubGluZSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuIElu
bGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZUZsb2F0UnVuKGNvbnN0IElubGluZUl0ZW0mIGlu
bGluZUl0ZW0pCit7CisgICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6RmxvYXQgfTsKK30K
KworaW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6
Y3JlYXRlU29mdExpbmVCcmVha1J1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQorewor
ICAgIHJldHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OlNvZnRMaW5lQnJlYWsgfTsKK30KKworaW5s
aW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRl
SGFyZExpbmVCcmVha1J1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQoreworICAgIHJl
dHVybiB7IGlubGluZUl0ZW0sIFR5cGU6OkhhcmRMaW5lQnJlYWsgfTsKK30KKworaW5saW5lIElu
bGluZVJ1blByb3ZpZGVyOjpSdW4gSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6Y3JlYXRlV2hpdGVz
cGFjZVJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJdGVtUG9zaXRpb24gc3RhcnQs
IHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBpc0NvbGxhcHNpYmxlKQoreworICAgIEFTU0VSVChsZW5n
dGgpOworICAgIGF1dG8gaXNDb2xsYXBzZWQgPSBpc0NvbGxhcHNpYmxlICYmIGxlbmd0aCA+IDEg
PyBUZXh0Q29udGV4dDo6SXNDb2xsYXBzZWQ6OlllcyA6IFRleHRDb250ZXh0OjpJc0NvbGxhcHNl
ZDo6Tm87CisgICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6V2hpdGVzcGFjZSwgeyBzdGFy
dCwgbGVuZ3RoLCBpc0NvbGxhcHNlZCB9IH07Cit9CisKK2lubGluZSBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuIElubGluZVJ1blByb3ZpZGVyOjpSdW46OmNyZWF0ZU5vbldoaXRlc3BhY2VSdW4oY29u
c3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSXRlbVBvc2l0aW9uIHN0YXJ0LCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgcmV0dXJuIHsgaW5saW5lSXRlbSwgVHlwZTo6Tm9uV2hpdGVzcGFjZSwg
eyBzdGFydCwgbGVuZ3RoLCBUZXh0Q29udGV4dDo6SXNDb2xsYXBzZWQ6Ok5vIH0gfTsKK30KKwor
aW5saW5lIElubGluZVJ1blByb3ZpZGVyOjpSdW46OlJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxp
bmVJdGVtLCBUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1faW5saW5lSXRl
bShpbmxpbmVJdGVtKQoreworfQorCitpbmxpbmUgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6UnVu
KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIFR5cGUgdHlwZSwgVGV4dENvbnRleHQgdGV4
dENvbnRleHQpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1faW5saW5lSXRlbShpbmxpbmVJ
dGVtKQorICAgICwgbV90ZXh0Q29udGV4dCh0ZXh0Q29udGV4dCkKK3sKK30KKworaW5saW5lIElu
bGluZVJ1blByb3ZpZGVyOjpSdW46OlRleHRDb250ZXh0OjpUZXh0Q29udGV4dChJdGVtUG9zaXRp
b24gc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgSXNDb2xsYXBzZWQgaXNDb2xsYXBzZWQpCisgICAg
OiBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9pc0NvbGxh
cHNlZChpc0NvbGxhcHNlZCkKK3sKK30KKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oCmluZGV4IDBkMTgzMWI3NTkwNzlmOTM1OGU5
N2YzMTJiNjM5OGY3MjJkMjM3MTQuLmMzMDEzMTc1ZDk1ZmZiMDdlNGZmOGUxMDJlMTE2MzkzODQ1
ZjBhNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91
dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5o
CkBAIC05Niw2ICs5Niw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQmxvY2tDb250YWluZXIoKSBj
b25zdCB7IHJldHVybiBtX2Jhc2VUeXBlRmxhZ3MgJiBCbG9ja0NvbnRhaW5lckZsYWc7IH0KICAg
ICBib29sIGlzSW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9iYXNlVHlwZUZsYWdzICYgSW5s
aW5lQm94RmxhZzsgfQogICAgIGJvb2wgaXNJbmxpbmVDb250YWluZXIoKSBjb25zdCB7IHJldHVy
biBtX2Jhc2VUeXBlRmxhZ3MgJiBJbmxpbmVDb250YWluZXJGbGFnOyB9CisgICAgYm9vbCBpc0xp
bmVCcmVha0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVR5cGVGbGFncyAmIExpbmVCcmVha0Jv
eEZsYWc7IH0KIAogICAgIGJvb2wgaXNQYWRkaW5nQXBwbGljYWJsZSgpIGNvbnN0OwogICAgIGJv
b2wgaXNPdmVyZmxvd1Zpc2libGUoKSBjb25zdDsKQEAgLTEyNSw3ICsxMjYsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIENvbnRhaW5lckZsYWcgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgQmxv
Y2tDb250YWluZXJGbGFnICAgID0gMSA8PCAxLAogICAgICAgICBJbmxpbmVCb3hGbGFnICAgICAg
ICAgPSAxIDw8IDIsCi0gICAgICAgIElubGluZUNvbnRhaW5lckZsYWcgICA9IDEgPDwgMworICAg
ICAgICBJbmxpbmVDb250YWluZXJGbGFnICAgPSAxIDw8IDMsCisgICAgICAgIExpbmVCcmVha0Jv
eEZsYWcgICAgICA9IDEgPDwgNAogICAgIH07CiAgICAgQm94KHN0ZDo6b3B0aW9uYWw8RWxlbWVu
dEF0dHJpYnV0ZXM+LCBSZW5kZXJTdHlsZSYmLCBCYXNlVHlwZUZsYWdzKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SW5saW5lQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dElubGluZUJveC5jcHAKaW5k
ZXggZWU5YjEzOTdjN2Q1MmU5NjI1M2YzNjhkMTZkOTk2ZjEwYjNiNWVkYi4uZmIxMzRmNzJlNzZi
ODE3Y2QxNGU5YmZjMTE1ZmZjYzFjMjFiZDU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRJbmxpbmVCb3guY3BwCkBAIC0zNiw4ICszNiw4IEBA
IG5hbWVzcGFjZSBMYXlvdXQgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5saW5l
Qm94KTsKIAotSW5saW5lQm94OjpJbmxpbmVCb3goc3RkOjpvcHRpb25hbDxFbGVtZW50QXR0cmli
dXRlcz4gYXR0cmlidXRlcywgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAgICA6IEJveChhdHRyaWJ1
dGVzLCBXVEZNb3ZlKHN0eWxlKSwgSW5saW5lQm94RmxhZykKK0lubGluZUJveDo6SW5saW5lQm94
KHN0ZDo6b3B0aW9uYWw8RWxlbWVudEF0dHJpYnV0ZXM+IGF0dHJpYnV0ZXMsIFJlbmRlclN0eWxl
JiYgc3R5bGUsIEJhc2VUeXBlRmxhZ3MgYmFzZVR5cGVGbGFncykKKyAgICA6IEJveChhdHRyaWJ1
dGVzLCBXVEZNb3ZlKHN0eWxlKSwgYmFzZVR5cGVGbGFncyB8IElubGluZUJveEZsYWcpCiB7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dElu
bGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SW5saW5l
Qm94LmgKaW5kZXggMDkxOTFjN2IzOThhZTNhOTZlMGY4NTViMTZlZDNhOGJmOWNkMjFmNS4uODhm
NWNkMzRiNDIwNjBhZjM1YmVmMzRhZDA2NTNjZWU5Njc2MDRlYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SW5saW5lQm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SW5saW5lQm94LmgKQEAgLTM5LDEzICsz
OSwxNCBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIGNsYXNzIElubGluZUJveCA6IHB1YmxpYyBCb3gg
ewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW5saW5lQm94KTsKIHB1YmxpYzoKLSAgICBJ
bmxpbmVCb3goc3RkOjpvcHRpb25hbDxFbGVtZW50QXR0cmlidXRlcz4sIFJlbmRlclN0eWxlJiYp
OworICAgIElubGluZUJveChzdGQ6Om9wdGlvbmFsPEVsZW1lbnRBdHRyaWJ1dGVzPiwgUmVuZGVy
U3R5bGUmJiwgQmFzZVR5cGVGbGFncyA9IElubGluZUJveEZsYWcpOwogCiAgICAgdm9pZCBzZXRU
ZXh0Q29udGVudChTdHJpbmcgdGV4dCkgeyBtX3RleHRDb250ZW50ID0gdGV4dDsgfQotICAgIHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPiB0ZXh0Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENv
bnRlbnQ7IH0KKyAgICBib29sIGhhc1RleHRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fdGV4
dENvbnRlbnQuaXNOdWxsKCk7IH0KKyAgICBTdHJpbmcgdGV4dENvbnRlbnQoKSBjb25zdCB7IHJl
dHVybiBtX3RleHRDb250ZW50OyB9CiAKIHByaXZhdGU6Ci0gICAgc3RkOjpvcHRpb25hbDxTdHJp
bmc+IG1fdGV4dENvbnRlbnQ7CisgICAgU3RyaW5nIG1fdGV4dENvbnRlbnQ7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRMaW5lQnJl
YWtCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0TGluZUJy
ZWFrQm94LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTFkMjE1NGVkMzU1YTE4MGE3OTU3M2RkODFmNTdhMzk1
ZGVjODZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRy
ZWUvTGF5b3V0TGluZUJyZWFrQm94LmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dExpbmVCcmVha0JveC5oIgorCisj
aWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJSZW5kZXJT
dHlsZS5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoTGluZUJyZWFrQm94KTsKKworTGluZUJyZWFrQm94OjpMaW5lQnJlYWtCb3goc3RkOjpvcHRp
b25hbDxFbGVtZW50QXR0cmlidXRlcz4gYXR0cmlidXRlcywgUmVuZGVyU3R5bGUmJiBzdHlsZSkK
KyAgICA6IElubGluZUJveChhdHRyaWJ1dGVzLCBXVEZNb3ZlKHN0eWxlKSwgTGluZUJyZWFrQm94
RmxhZykKK3sKK30KKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRMaW5lQnJlYWtCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9sYXlvdXR0cmVlL0xheW91dExpbmVCcmVha0JveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiZTUyOGFl
YWI1ZDdmZWI3YmQ4YzVhMjlkYTM2MDkwOTFhYjZhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRMaW5lQnJlYWtCb3guaApAQCAtMCww
ICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJMYXlvdXRJ
bmxpbmVCb3guaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKKyNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBS
ZW5kZXJTdHlsZTsKKworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIExpbmVCcmVha0JveCA6
IHB1YmxpYyBJbmxpbmVCb3ggeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoTGluZUJyZWFr
Qm94KTsKK3B1YmxpYzoKKyAgICBMaW5lQnJlYWtCb3goc3RkOjpvcHRpb25hbDxFbGVtZW50QXR0
cmlidXRlcz4sIFJlbmRlclN0eWxlJiYpOworfTsKKworfQorfQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0xBWU9VVF9CT1goTGluZUJyZWFrQm94LCBpc0xpbmVCcmVha0JveCgpKQorCisjZW5k
aWYK
</data>
<flag name="review"
          id="370024"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>