<?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>41255</bug_id>
          
          <creation_ts>2010-06-26 11:47:32 -0700</creation_ts>
          <short_desc>Add more use of reflection, remove unused functions</short_desc>
          <delta_ts>2010-06-26 14:13:49 -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>DOM</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>
          
          <blocked>41077</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>243410</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-26 11:47:32 -0700</bug_when>
    <thetext>Add more use of reflection, remove unused functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243412</commentid>
    <comment_count>1</comment_count>
      <attachid>59843</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-26 12:32:46 -0700</bug_when>
    <thetext>Created attachment 59843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243413</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-26 13:04:19 -0700</bug_when>
    <thetext>Attachment 59843 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3305742</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243414</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-26 13:27:52 -0700</bug_when>
    <thetext>Attachment 59843 did not build on win:
Build output: http://webkit-commit-queue.appspot.com/results/3321834</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243415</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-26 13:43:27 -0700</bug_when>
    <thetext>Committed r61959: &lt;http://trac.webkit.org/changeset/61959&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243416</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-26 13:49:48 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61959 might have broken Qt Linux Release minimal, Qt Linux ARMv5 Release, and Qt Linux ARMv7 Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243417</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-26 13:52:20 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61960 fixes a stray character and should fix at least some platforms. Waiting to see if bots indicate any other breakage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243418</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-26 13:55:09 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61961 is an attempt to fix Qt by adding back a function it uses</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243420</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-26 14:13:49 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61963 is an attempt to fix Chromium by adding back functions it uses</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59843</attachid>
            <date>2010-06-26 12:32:46 -0700</date>
            <delta_ts>2010-06-26 12:40:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41255-20100626123245.patch</filename>
            <type>text/plain</type>
            <size>90000</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTk1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMyIEBACisyMDEwLTA2LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
bW9yZSB1c2Ugb2YgcmVmbGVjdGlvbiwgcmVtb3ZlIHVudXNlZCBmdW5jdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMjU1CisKKyAgICAgICAg
QWxzbyBub3RpY2VkIHRoYXQgSFRNTERpcmVjdG9yeUVsZW1lbnQgd2FzIG1pc3NpbmcgaXRzIGNy
ZWF0ZSBmdW5jdGlvbgorICAgICAgICBhbmQgYWRkZWQgdGhhdCBzbyB0aGUgZWxlbWVudCB3aWxs
IGdldCB0aGUgY29ycmVjdCBjbGFzcy4KKworICAgICAgICAqIGh0bWwvSFRNTEJhc2VGb250RWxl
bWVudC5pZGw6IFVzZSByZWZsZWN0aW9uIGZvciB0aGUgc2l6ZSBhdHRyaWJ1dGUKKyAgICAgICAg
aW4gdGhlIE9iamVjdGl2ZS1DIGNvZGUgcGF0aCB0b28uCisKKyAgICAgICAgKiBodG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmlkbDogVXNlIHJlZmxlY3Rpb24gZm9yIGRpc2FibGVkIGFuZCBhdXRvZm9j
dXMKKyAgICAgICAgYXR0cmlidXRlcy4gQWxzbyByZW1vdmVkIHNwYWNlcyBhbmQgaW5kZW50aW5n
IHRvIG1hdGNoIG90aGVyIElETCBmaWxlcy4KKworICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxl
bWVudC5pZGw6IFVzZSByZWZsZWN0aW9uIGZvciBkaXNhYmxlZCBhdHRyaWJ1dGUuCisKKyAgICAg
ICAgKiBodG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmlkbDogVXNlIHJlZmxlY3Rpb24gZm9yIG5v
V3JhcCBhdHRyaWJ1dGUuCisKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRs
OiBVc2UgcmVmbGVjdGlvbiBmb3IgZGlzYWJsZWQsIGF1dG9mb2N1cywKKyAgICAgICAgcmVhZE9u
bHksIGFuZCByZXF1aXJlZCBhdHRyaWJ1dGVzLgorCisgICAgICAgICogaHRtbC9IVE1MVUxpc3RF
bGVtZW50LmlkbDogVXNlIHJlZmxlY3Rpb24gZm9yIGNvbXBhY3QgYXR0cmlidXRlLgorCisgICAg
ICAgICogaHRtbC9IVE1MRGlyZWN0b3J5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRGlyZWN0b3J5RWxlbWVudDo6SFRNTERpcmVjdG9yeUVsZW1lbnQpOiBNYWRlIGlubGluZS4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlFbGVtZW50OjpjcmVhdGUpOiBBZGRlZC4K
KyAgICAgICAgKiBodG1sL0hUTUxEaXJlY3RvcnlFbGVtZW50Lmg6CisgICAgICAgIEFkZGVkIGNy
ZWF0ZSwgbWFkZSBjb25zdHJ1Y3RvciBwcml2YXRlLCByZW1vdmVkIHVudXNlZCBmdW5jdGlvbnMu
CisKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFN0eWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBSZW1vdmVkIGNvZGUg
dG8KKyAgICAgICAgc2V0IHVudXNlZCBtX21lZGlhIGRhdGEgbWVtYmVyLgorICAgICAgICAqIGh0
bWwvSFRNTFN0eWxlRWxlbWVudC5oOgorICAgICAgICBSZW1vdmVkIHVudXNlZCBmdW5jdGlvbnMg
YW5kIG1fbWVkaWEgZGF0YSBtZW1iZXIuIEFsc28gbWFkZSBzb21lCisgICAgICAgIGZ1bmN0aW9u
cyBwcml2YXRlLgorCisgICAgICAgICogaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHA6CisgICAg
ICAgICogaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEFyZWFF
bGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTEJhc2VGb250RWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MQmFzZUZv
bnRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHA6CisgICAg
ICAgICogaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTERMaXN0
RWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MRExpc3RFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MRGl2RWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MRGl2RWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1s
L0hUTUxGb250RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVt
ZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNwcDogQWxzbyByZW1vdmVk
IGFuIGluY29ycmVjdCBGSVhNRSBjb21tZW50CisgICAgICAgIGhlcmUgYWZ0ZXIgSSBkaWQgYSBs
aXR0bGUgcmVzZWFyY2ggdG8gZGlzcHJvdmUgaXQuCisgICAgICAgICogaHRtbC9IVE1MRnJhbWVF
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBodG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxIUkVs
ZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEhSRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTEhlYWRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxIZWFkRWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvSFRNTEhlYWRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1s
L0hUTUxIZWFkaW5nRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEh0bWxFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxIdG1sRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6Cisg
ICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJc0luZGV4RWxlbWVudC5jcHA6Cisg
ICAgICAgICogaHRtbC9IVE1MSXNJbmRleEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxM
SUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTExJRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTExhYmVsRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MTGFiZWxFbGVt
ZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHA6CisgICAgICAgICog
aHRtbC9IVE1MTGVnZW5kRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50
LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwv
SFRNTE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxNZW51RWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MTWVu
dUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZXRhRWxlbWVudC5jcHA6CisgICAgICAg
ICogaHRtbC9IVE1MTWV0YUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNb2RFbGVtZW50
LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxNb2RFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9I
VE1MT0xpc3RFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxPTGlzdEVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hU
TUxPYmplY3RFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50
Lmg6CisgICAgICAgICogaHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5jcHA6CisgICAgICAgICog
aHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFBhcmFtRWxl
bWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MUGFyYW1FbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luRWxl
bWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFByZUVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0
bWwvSFRNTFByZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxRdW90ZUVsZW1lbnQuY3Bw
OgorICAgICAgICAqIGh0bWwvSFRNTFF1b3RlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRN
TFNjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKiBo
dG1sL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVD
ZWxsRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9I
VE1MVGFibGVDb2xFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hU
TUxUYWJsZVJvd0VsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93RWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHA6CisgICAgICAgICog
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MVUxpc3RFbGVt
ZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxVTGlzdEVsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVu
dC5oOgorICAgICAgICBSZW1vdmVkIHVudXNlZCBmdW5jdGlvbnMuCisKIDIwMTAtMDYtMjYgIFRv
bnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCShyZXZpc2lv
biA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2OCwyNCArMTY4LDQgQEAgdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6ZmluaXNo
UGFyc2luZ0NoaQogICAgICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsgLy8g
VGhpcyB3aWxsIGNhdXNlIGl0IHRvIGNyZWF0ZSBpdHMgd2lkZ2V0ICYgdGhlIEphdmEgYXBwbGV0
CiB9CiAKLVN0cmluZyBIVE1MQXBwbGV0RWxlbWVudDo6aHNwYWNlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKGhzcGFjZUF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVt
ZW50OjpzZXRIc3BhY2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
aHNwYWNlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6OnZzcGFj
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2c3BhY2VBdHRyKTsKLX0KLQot
dm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0VnNwYWNlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIHZhbHVlKTsKLX0KLQogfQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxBcHBsZXRFbGVtZW50LmgJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hU
TUxBcHBsZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSw2IEBAIGNsYXNz
IEhUTUxBcHBsZXRFbGVtZW50IDogcHVibGljIEhUTUxQbHUKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MQXBwbGV0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogCi0gICAgU3RyaW5nIGhzcGFjZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
SHNwYWNlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHZzcGFjZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0VnNwYWNlKGNvbnN0IFN0cmluZyYpOwotCiBwcml2YXRlOgogICAgIEhUTUxBcHBs
ZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDIxICsxNjMsNiBAQCBQYXRo
IEhUTUxBcmVhRWxlbWVudDo6Z2V0UmVnaW9uKGNvbnN0IEluCiAgICAgcmV0dXJuIHBhdGg7CiB9
CiAKLUtVUkwgSFRNTEFyZWFFbGVtZW50OjpocmVmKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGhyZWZBdHRyKSk7Ci19Ci0KLWJvb2wg
SFRNTEFyZWFFbGVtZW50Ojpub0hyZWYoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmli
dXRlKG5vaHJlZkF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0
Tm9IcmVmKGJvb2wgbm9IcmVmKQotewotICAgIHNldEF0dHJpYnV0ZShub2hyZWZBdHRyLCBub0hy
ZWYgPyAiIiA6IDApOwotfQotICAgIAogSFRNTEltYWdlRWxlbWVudCogSFRNTEFyZWFFbGVtZW50
OjppbWFnZUVsZW1lbnQoKSBjb25zdAogewogICAgIE5vZGUqIG1hcEVsZW1lbnQgPSBwYXJlbnQo
KTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsMTAg
QEAgcHVibGljOgogCiAgICAgSW50UmVjdCBnZXRSZWN0KFJlbmRlck9iamVjdCopIGNvbnN0Owog
ICAgIFBhdGggZ2V0UGF0aChSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICAKLSAgICAvLyBDb252
ZW5pZW5jZSBtZXRob2QgdG8gZ2V0IHRoZSBwYXJlbnQgbWFwJ3MgaW1hZ2UuCisKKyAgICAvLyBU
aGUgcGFyZW50IG1hcCdzIGltYWdlLgogICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVu
dCgpIGNvbnN0OwogICAgIAotICAgIEtVUkwgaHJlZigpIGNvbnN0OwotCi0gICAgYm9vbCBub0hy
ZWYoKSBjb25zdDsKLSAgICB2b2lkIHNldE5vSHJlZihib29sKTsKLQogcHJpdmF0ZToKICAgICBI
VE1MQXJlYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEJhc2VGb250RWxlbWVudC5jcHAJKHJldmlzaW9uIDYxOTU3KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwx
NCArNDAsNCBAQCBQYXNzUmVmUHRyPEhUTUxCYXNlRm9udEVsZW1lbnQ+IEhUTUxCYXNlCiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MQmFzZUZvbnRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKLWludCBIVE1MQmFzZUZvbnRFbGVtZW50OjpzaXplKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKHNpemVBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxCYXNl
Rm9udEVsZW1lbnQ6OnNldFNpemUoaW50IHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShzaXpl
QXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxCYXNlRm9udEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJh
c2VGb250RWxlbWVudC5oCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQmFz
ZUZvbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDYgQEAgY2xhc3MgSFRN
TEJhc2VGb250RWxlbWVudCA6IHB1YmxpYyBIVE1MRQogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxCYXNlRm9udEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKIAotICAgIGludCBzaXplKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaXplKGlu
dCk7Ci0KIHByaXZhdGU6CiAgICAgSFRNTEJhc2VGb250RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCYXNlRm9udEVsZW1l
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50Lmlk
bAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJhc2VGb250RWxlbWVudC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAg
ICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBjb2xvcjsKICAgICAgICAgYXR0cmlidXRl
IFtSZWZsZWN0XSBET01TdHJpbmcgZmFjZTsKICNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElW
RV9DKSAmJiBMQU5HVUFHRV9PQkpFQ1RJVkVfQwotICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnRU
b1N0cmluZ10gRE9NU3RyaW5nIHNpemU7IC8vIHRoaXMgY2hhbmdlZCB0byBhIGxvbmcsIGJ1dCBv
dXIgZXhpc3RpbmcgQVBJIGlzIGEgc3RyaW5nCisgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0g
RE9NU3RyaW5nIHNpemU7IC8vIHRoaXMgY2hhbmdlZCB0byBhIGxvbmcsIGJ1dCBvdXIgZXhpc3Rp
bmcgQVBJIGlzIGEgc3RyaW5nCiAjZWxzZQogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGxv
bmcgc2l6ZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCShyZXZp
c2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2NCwzMCArMTY0LDE1IEBAIGJvb2wgSFRNTEJ1dHRvbkVsZW1lbnQ6OmFw
cGVuZEZvcm1EYXRhKEYKIH0KIAogdm9pZCBIVE1MQnV0dG9uRWxlbWVudDo6YWNjZXNzS2V5QWN0
aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCkKLXsgICAKK3sKICAgICBmb2N1cygpOwogICAgIC8v
IHNlbmQgdGhlIG1vdXNlIGJ1dHRvbiBldmVudHMgaWZmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIHNl
bmRUb0FueUVsZW1lbnQKICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKDAsIHNlbmRUb0FueUVs
ZW1lbnQpOwogfQogCi1TdHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnQ6OmFjY2Vzc0tleSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKLX0KLQotdm9pZCBI
VE1MQnV0dG9uRWxlbWVudDo6c2V0QWNjZXNzS2V5KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIsIHZhbHVlKTsKLX0KLQogU3RyaW5nIEhUTUxC
dXR0b25FbGVtZW50Ojp2YWx1ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2
YWx1ZUF0dHIpOwogfQogCi12b2lkIEhUTUxCdXR0b25FbGVtZW50OjpzZXRWYWx1ZShjb25zdCBT
dHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHZhbHVlKTsKLX0K
LSAgICAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAkocmV2
aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDcgQEAgY2xhc3MgSFRNTEJ1dHRvbkVsZW1lbnQgOiBwdWJs
aWMgSFRNTEZvcgogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxCdXR0b25FbGVt
ZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVt
ZW50Kik7CiAKLSAgICBTdHJpbmcgYWNjZXNzS2V5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBY2Nl
c3NLZXkoY29uc3QgU3RyaW5nJik7Ci0KICAgICBTdHJpbmcgdmFsdWUoKSBjb25zdDsKLSAgICB2
b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgogICAgIEhUTUxCdXR0b25F
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1F
bGVtZW50Kik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERMaXN0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxETGlzdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTk1
NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRExpc3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsMTQgKzQwLDQgQEAgUGFzc1JlZlB0cjxIVE1MRExpc3RFbGVtZW50PiBIVE1MRExpc3RF
bAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTERMaXN0RWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOwogfQogCi1ib29sIEhUTUxETGlzdEVsZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAotewot
ICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwoKTsKLX0KLQotdm9p
ZCBIVE1MRExpc3RFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1
dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6IDApOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTERMaXN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRExpc3RF
bGVtZW50LmgJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxETGlzdEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsNiBAQCBjbGFzcyBIVE1MRExpc3RFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRN
TERMaXN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
Ci0gICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwot
CiBwcml2YXRlOgogICAgIEhUTUxETGlzdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRGlyZWN0b3J5RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEaXJlY3RvcnlFbGVtZW50LmNwcAkocmV2
aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAotLyoqCisvKgogICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOCw2
ICsxOSw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxEaXJlY3RvcnlFbGVtZW50LmgiCiAKQEAg
LTI3LDIwICsyOSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLUhUTUxEaXJlY3RvcnlFbGVtZW50OjpIVE1MRGlyZWN0b3J5RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVs
ZW1lbnQodGFnTmFtZSwgZG9jKQoraW5saW5lIEhUTUxEaXJlY3RvcnlFbGVtZW50OjpIVE1MRGly
ZWN0b3J5RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKIHsKICAgICBBU1NF
UlQoaGFzVGFnTmFtZShkaXJUYWcpKTsKIH0KIAotYm9vbCBIVE1MRGlyZWN0b3J5RWxlbWVudDo6
Y29tcGFjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIp
LmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxEaXJlY3RvcnlFbGVtZW50OjpzZXRDb21wYWN0KGJv
b2wgYikKK1Bhc3NSZWZQdHI8SFRNTERpcmVjdG9yeUVsZW1lbnQ+IEhUTUxEaXJlY3RvcnlFbGVt
ZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3Vt
ZW50KQogewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MRGlyZWN0b3J5RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCkpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERpcmVjdG9yeUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERpcmVjdG9yeUVsZW1lbnQuaAkocmV2aXNp
b24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERpcmVjdG9yeUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDEzICsyOSwxMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxEaXJlY3RvcnlFbGVtZW50IDogcHVi
bGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRGly
ZWN0b3J5RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50Kik7CisKK3ByaXZhdGU6CiAgICAgSFRNTERpcmVjdG9yeUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgYm9vbCBj
b21wYWN0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwogfTsKIAogfSAvL25h
bWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEaXZFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERpdkVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTk1NykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MRGl2RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0
ICs3Myw0IEBAIHZvaWQgSFRNTERpdkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQKICAgICAg
ICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1TdHJpbmcg
SFRNTERpdkVsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTERpdkVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQot
CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERpdkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTERpdkVsZW1lbnQuaAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTERpdkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTERpdkVsZW1lbnQ+IGNyZWF0ZShEb2N1
bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBjcmVhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBTdHJpbmcgYWxpZ24oKSBjb25z
dDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwotCiBwcm90ZWN0ZWQ6CiAgICAg
SFRNTERpdkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRt
bC9IVE1MRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksMzQgKzE0OSw0IEBA
IHZvaWQgSFRNTEZvbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICAgICAgSFRNTEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1TdHJpbmcgSFRNTEZvbnRF
bGVtZW50Ojpjb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb2xvckF0
dHIpOwotfQotCi12b2lkIEhUTUxGb250RWxlbWVudDo6c2V0Q29sb3IoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29sb3JBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmlu
ZyBIVE1MRm9udEVsZW1lbnQ6OmZhY2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoZmFjZUF0dHIpOwotfQotCi12b2lkIEhUTUxGb250RWxlbWVudDo6c2V0RmFjZShjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShmYWNlQXR0ciwgdmFsdWUpOwotfQot
Ci1TdHJpbmcgSFRNTEZvbnRFbGVtZW50OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKHNpemVBdHRyKTsKLX0KLQotdm9pZCBIVE1MRm9udEVsZW1lbnQ6OnNldFNpemUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIHZhbHVl
KTsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuaAkocmV2aXNpb24gNjE5NTcpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE1
ICszMiw2IEBAIGNsYXNzIEhUTUxGb250RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWUKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRm9udEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAKLSAgICBTdHJpbmcgY29sb3IoKSBjb25z
dDsKLSAgICB2b2lkIHNldENvbG9yKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGZhY2Uo
KSBjb25zdDsKLSAgICB2b2lkIHNldEZhY2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcg
c2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBTdHJpbmcmKTsKLSAgICAKICAg
ICBzdGF0aWMgYm9vbCBjc3NWYWx1ZUZyb21Gb250U2l6ZU51bWJlcihjb25zdCBTdHJpbmcmLCBp
bnQmKTsKIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNiBAQCBib29sIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OmZvcm1Ob1ZhbGlkCiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZm9y
bW5vdmFsaWRhdGVBdHRyKS5pc051bGwoKTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpzZXRGb3JtTm9WYWxpZGF0ZShib29sIGZvcm1ub3ZhbGlkYXRlKQotewotICAgIHNldEF0
dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0dHIsIGZvcm1ub3ZhbGlkYXRlID8gIiIgOiAwKTsKLX0K
LQogVmFsaWRpdHlTdGF0ZSogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRpdHkoKQogewog
ICAgIGlmICghbV92YWxpZGl0eVN0YXRlKQpAQCAtMTk2LDcgKzE5MSw3IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgSFRNTEZvcm1Db250cm9sRWxlbWUKICAgICByZXR1cm4gbmFtZS5pc051bGwoKSA/
IGVtcHR5QXRvbSA6IG5hbWU7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0
TmFtZShjb25zdCBBdG9taWNTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmli
dXRlKG5hbWVBdHRyLCB2YWx1ZSk7CiB9CkBAIC0yMTEsMzEgKzIwNiwxNiBAQCB2b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnNldERpc2FibGVkCiAgICAgc2V0QXR0cmlidXRlKGRpc2FibGVk
QXR0ciwgYiA/ICIiIDogMCk7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0
UmVhZE9ubHkoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShyZWFkb25seUF0dHIsIGIgPyAi
IiA6IDApOwotfQotCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF1dG9mb2N1cygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShhdXRvZm9jdXNBdHRyKTsKIH0KIAotdm9p
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRBdXRvZm9jdXMoYm9vbCBiKQotewotICAgIHNl
dEF0dHJpYnV0ZShhdXRvZm9jdXNBdHRyLCBiID8gIiIgOiAwKTsKLX0KLQogYm9vbCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVxdWly
ZWQ7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0UmVxdWlyZWQoYm9vbCBi
KQotewotICAgIHNldEF0dHJpYnV0ZShyZXF1aXJlZEF0dHIsIGIgPyAiIiA6IDApOwotfQotCiBz
dGF0aWMgdm9pZCB1cGRhdGVGcm9tRWxlbWVudENhbGxiYWNrKE5vZGUqIG5vZGUpCiB7CiAgICAg
QVNTRVJUX0FSRyhub2RlLCBub2RlLT5pc0VsZW1lbnROb2RlKCkpOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYg
QEAgcHVibGljOgogICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5KCk7CiAKICAgICBib29sIGZv
cm1Ob1ZhbGlkYXRlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGb3JtTm9WYWxpZGF0ZShib29sKTsK
IAogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQogCkBAIC01OSwxNCArNTgsMTAgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lk
IHNldFJlYWRPbmx5KGJvb2wpOwotCi0gICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBh
IGNvbnRyb2wgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQKKyAgICAvLyBEZXRlcm1pbmVz
IHdoZXRoZXIgb3Igbm90IGEgY29udHJvbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZC4K
ICAgICB2aXJ0dWFsIGJvb2wgYXV0b2ZvY3VzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBdXRvZm9j
dXMoYm9vbCk7CiAKICAgICBib29sIHJlcXVpcmVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSZXF1
aXJlZChib29sKTsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIGZvcm1Db250cm9sVHlwZSgpOyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gZm9ybUNvbnRyb2xOYW1lKCk7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTksMzEgKzUxOSwxMSBAQCBQYXNzUmVmUHRyPEhU
TUxDb2xsZWN0aW9uPiBIVE1MRm9ybUVsZW1lCiAgICAgcmV0dXJuIEhUTUxGb3JtQ29sbGVjdGlv
bjo6Y3JlYXRlKHRoaXMpOwogfQogCi1TdHJpbmcgSFRNTEZvcm1FbGVtZW50OjpuYW1lKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLX0KLQotdm9pZCBIVE1M
Rm9ybUVsZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQogYm9vbCBIVE1MRm9ybUVsZW1lbnQ6Om5vVmFs
aWRhdGUoKSBjb25zdAogewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKG5vdmFsaWRhdGVBdHRy
KS5pc051bGwoKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnNldE5vVmFsaWRhdGUoYm9v
bCBub3ZhbGlkYXRlKQotewotICAgIHNldEF0dHJpYnV0ZShub3ZhbGlkYXRlQXR0ciwgbm92YWxp
ZGF0ZSA/ICIiIDogMCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRBY2NlcHRDaGFy
c2V0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFjY2VwdF9jaGFy
c2V0QXR0ciwgdmFsdWUpOwotfQotCiBTdHJpbmcgSFRNTEZvcm1FbGVtZW50OjphY3Rpb24oKSBj
b25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWN0aW9uQXR0cik7CkBAIC01NTksMTEg
KzUzOSw2IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRFbmN0eXBlKGNvbnN0IFMKICAgICBz
ZXRBdHRyaWJ1dGUoZW5jdHlwZUF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxGb3JtRWxl
bWVudDo6bWV0aG9kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1ldGhvZEF0
dHIpOwotfQotCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0TWV0aG9kKGNvbnN0IFN0cmluZyAm
dmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKG1ldGhvZEF0dHIsIHZhbHVlKTsKQEAgLTU3NCwx
MSArNTQ5LDYgQEAgU3RyaW5nIEhUTUxGb3JtRWxlbWVudDo6dGFyZ2V0KCkgY29uc3QKICAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOwogfQogCi12b2lkIEhUTUxGb3JtRWxlbWVu
dDo6c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHRh
cmdldEF0dHIsIHZhbHVlKTsKLX0KLQogSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1F
bGVtZW50OjpkZWZhdWx0QnV0dG9uKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmgJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCwyMyArODQsMTYgQEAgcHVibGljOgogICAgIHZv
aWQgc3VibWl0SW1wbGljaXRseShFdmVudCosIGJvb2wgZnJvbUltcGxpY2l0U3VibWlzc2lvblRy
aWdnZXIpOwogICAgIGJvb2wgZm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24oY29uc3QgU3Ry
aW5nJiB1cmwpOwogCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUo
Y29uc3QgU3RyaW5nJik7Ci0KICAgICBib29sIG5vVmFsaWRhdGUoKSBjb25zdDsKLSAgICB2b2lk
IHNldE5vVmFsaWRhdGUoYm9vbCk7CiAKICAgICBTdHJpbmcgYWNjZXB0Q2hhcnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmFjY2VwdENoYXJzZXQoKTsgfQotICAgIHZvaWQg
c2V0QWNjZXB0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKIAogICAgIFN0cmluZyBhY3Rpb24oKSBj
b25zdDsKICAgICB2b2lkIHNldEFjdGlvbihjb25zdCBTdHJpbmcmKTsKIAotICAgIFN0cmluZyBt
ZXRob2QoKSBjb25zdDsKICAgICB2b2lkIHNldE1ldGhvZChjb25zdCBTdHJpbmcmKTsKIAogICAg
IHZpcnR1YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGFyZ2V0KGNvbnN0
IFN0cmluZyYpOwogCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZGVmYXVsdEJ1dHRvbigp
IGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTk1
NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTEsMTUgKzkxLDggQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YgogICAgICAgICAvLyBGSVhNRTogSWYgd2UgYXJlIGFscmVhZHkgYXR0YWNoZWQsIHRoaXMgaGFz
IG5vIGVmZmVjdC4KICAgICAgICAgLy8gRklYTUU6IFNpbmNlIHRoaXMgZG9lcyBub3QgY2hlY2sg
YXR0ci0+aXNOdWxsKCksIGl0IGNhbgogICAgICAgICAvLyBuZXZlciByZXNldCBtX25vUmVzaXpl
IHRvIGZhbHNlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgcmVtb3ZlZC4KLSAgICAgICAgLy8gRklYTUU6
IFRoZXJlIHNlZW1zIHRvIGJlIG5vIGNvZGUgdGhhdCBsb29rcyBhdCB0aGlzCi0gICAgICAgIC8v
IHZhbHVlIGFuZCBwcmV2ZW50cyByZXNpemluZy4KICAgICB9IGVsc2UKICAgICAgICAgSFRNTEZy
YW1lRWxlbWVudEJhc2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi12b2lkIEhU
TUxGcmFtZUVsZW1lbnQ6OnNldE5vUmVzaXplKGJvb2wgbm9SZXNpemUpCi17Ci0gICAgc2V0QXR0
cmlidXRlKG5vcmVzaXplQXR0ciwgbm9SZXNpemUgPyAiIiA6IDApOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmgJKHJldmlzaW9uIDYxOTU3
KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNGcmFtZUJvcmRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWVCb3JkZXI7IH0KIAogICAgIGJvb2wgbm9SZXNpemUoKSBjb25zdCB7IHJl
dHVybiBtX25vUmVzaXplOyB9Ci0gICAgdm9pZCBzZXROb1Jlc2l6ZShib29sKTsKIAogcHJpdmF0
ZToKICAgICBIVE1MRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gNjE5NTcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMywyNCArMjEzLDQgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpyZWNhbGNTdHls
ZShTdAogICAgIEhUTUxFbGVtZW50OjpyZWNhbGNTdHlsZShjaCk7CiB9CiAKLVN0cmluZyBIVE1M
RnJhbWVTZXRFbGVtZW50Ojpjb2xzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KGNvbHNBdHRyKTsKLX0KLQotdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpzZXRDb2xzKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvbHNBdHRyLCB2YWx1ZSk7Ci19
Ci0KLVN0cmluZyBIVE1MRnJhbWVTZXRFbGVtZW50Ojpyb3dzKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKHJvd3NBdHRyKTsKLX0KLQotdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50
OjpzZXRSb3dzKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHJvd3NB
dHRyLCB2YWx1ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxGcmFtZVNldEVsZW1lbnQuaAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEZyYW1lU2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMiArNDIsNiBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhc0JvcmRlckNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJD
b2xvclNldDsgfQogCi0gICAgU3RyaW5nIGNvbHMoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbHMo
Y29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgcm93cygpIGNvbnN0OwotICAgIHZvaWQgc2V0
Um93cyhjb25zdCBTdHJpbmcmKTsKLQogICAgIGNvbnN0IExlbmd0aCogcm93TGVuZ3RocygpIGNv
bnN0IHsgcmV0dXJuIG1fcm93TGVuZ3Rocy5nZXQoKTsgfQogICAgIGNvbnN0IExlbmd0aCogY29s
TGVuZ3RocygpIGNvbnN0IHsgcmV0dXJuIG1fY29sTGVuZ3Rocy5nZXQoKTsgfQogCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTEhSRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxIUkVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1M
SFJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDQ0ICsxMDYsNCBAQCB2b2lkIEhU
TUxIUkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlCiAgICAgICAgIEhUTUxFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAotU3RyaW5nIEhUTUxIUkVsZW1lbnQ6OmFs
aWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0K
LXZvaWQgSFRNTEhSRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgSFRNTEhSRWxlbWVu
dDo6bm9TaGFkZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUobm9zaGFkZUF0
dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxIUkVsZW1lbnQ6OnNldE5vU2hhZGUoYm9vbCBu
b1NoYWRlKQotewotICAgIHNldEF0dHJpYnV0ZShub3NoYWRlQXR0ciwgbm9TaGFkZSA/ICIiIDog
MCk7Ci19Ci0KLVN0cmluZyBIVE1MSFJFbGVtZW50OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKHNpemVBdHRyKTsKLX0KLQotdm9pZCBIVE1MSFJFbGVtZW50OjpzZXRT
aXplKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHNpemVBdHRyLCB2
YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MSFJFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotfQotCi12b2lkIEhUTUxIUkVsZW1lbnQ6
OnNldFdpZHRoKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRo
QXR0ciwgdmFsdWUpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEhSRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSFJFbGVtZW50LmgJKHJldmlzaW9uIDYx
OTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTggKzMxLDYgQEAgY2xhc3MgSFRNTEhSRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxIUkVsZW1lbnQ+IGNyZWF0ZShEb2N1
bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxIUkVsZW1lbnQ+IGNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICAKLSAgICBTdHJpbmcgYWxpZ24oKSBj
b25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwotCi0gICAgYm9vbCBub1No
YWRlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROb1NoYWRlKGJvb2wpOwotCi0gICAgU3RyaW5nIHNp
emUoKSBjb25zdDsKLSAgICB2b2lkIHNldFNpemUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJp
bmcgd2lkdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKGNvbnN0IFN0cmluZyYpOwogCiBw
cml2YXRlOgogICAgIEhUTUxIUkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEhlYWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTEhlYWRFbGVtZW50LmNwcAkocmV2aXNpb24gNjE5NTcpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEhlYWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTYg
KzQ3LDYgQEAgUGFzc1JlZlB0cjxIVE1MSGVhZEVsZW1lbnQ+IEhUTUxIZWFkRWxlbQogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSFRNTEhlYWRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9
CiAKLVN0cmluZyBIVE1MSGVhZEVsZW1lbnQ6OnByb2ZpbGUoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUocHJvZmlsZUF0dHIpOwotfQotCi12b2lkIEhUTUxIZWFkRWxlbWVudDo6
c2V0UHJvZmlsZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShwcm9m
aWxlQXR0ciwgdmFsdWUpOwotfQotCiBib29sIEhUTUxIZWFkRWxlbWVudDo6Y2hpbGRBbGxvd2Vk
KE5vZGUqIG5ld0NoaWxkKQogewogICAgIC8vIERvIG5vdCBhbGxvdyBub24td2hpdGVzcGFjZSB0
ZXh0IG5vZGVzIGluIHRoZSBoZWFkCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEhlYWRFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxIZWFkRWxlbWVudC5oCShyZXZpc2lv
biA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSGVhZEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsOSArMzMsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEhl
YWRFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
SGVhZEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAot
ICAgIFN0cmluZyBwcm9maWxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcm9maWxlKGNvbnN0IFN0
cmluZyYpOwotCiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAx
MDsgfQogCiBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxIZWFkaW5nRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxIZWFkaW5nRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxIZWFkaW5nRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSw0IEBAIGJvb2wgSFRNTEhlYWRpbmdFbGVtZW50Ojpj
aGVja0RURChjb25zdCAKICAgICByZXR1cm4gaW5FaXRoZXJUYWdMaXN0KG5ld0NoaWxkKTsKIH0K
IAotU3RyaW5nIEhUTUxIZWFkaW5nRWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MSGVhZGluZ0VsZW1lbnQ6
OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWdu
QXR0ciwgdmFsdWUpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEhlYWRpbmdFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxIZWFkaW5nRWxlbWVudC5oCShy
ZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSGVhZGluZ0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsOSArMzEsNiBAQCBjbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEhlYWRpbmdF
bGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBT
dHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwot
CiBwcml2YXRlOgogICAgIEhUTUxIZWFkaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5jcHAJKHJldmlzaW9uIDYx
OTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDE2ICs1MCw2IEBAIFBhc3NSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBIVE1MSHRtbEVs
ZW0KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxIdG1sRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkpOwogfQogCi1TdHJpbmcgSFRNTEh0bWxFbGVtZW50Ojp2ZXJzaW9uKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZlcnNpb25BdHRyKTsKLX0KLQotdm9pZCBIVE1MSHRt
bEVsZW1lbnQ6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUodmVyc2lvbkF0dHIsIHZhbHVlKTsKLX0KLQogYm9vbCBIVE1MSHRtbEVsZW1lbnQ6OmNo
ZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQogewogICAgIHJldHVybiBuZXdDaGlsZC0+aGFz
VGFnTmFtZShoZWFkVGFnKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShib2R5VGFnKSB8fApJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MSHRtbEVsZW1lbnQuaAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEh0bWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDYgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxIdG1sRWxlbWVudD4gY3JlYXRlKERvY3VtZW50
Kik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBTdHJpbmcgdmVyc2lvbigpIGNvbnN0
OwotICAgIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToKICAgICBI
VE1MSHRtbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNDcgKzM0Miw2
IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0SGVpZ2h0KGludCB2YWwKICAgICBzZXRBdHRy
aWJ1dGUoaGVpZ2h0QXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KIAotaW50IEhUTUxJ
bWFnZUVsZW1lbnQ6OmhzcGFjZSgpIGNvbnN0Ci17Ci0gICAgLy8gIyMjIHJldHVybiBhY3R1YWwg
dmFsdWUKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhzcGFjZUF0dHIpLnRvSW50KCk7Ci19Ci0K
LXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0SHNwYWNlKGludCB2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUoaHNwYWNlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLX0KLQotYm9vbCBI
VE1MSW1hZ2VFbGVtZW50Ojppc01hcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1
dGUoaXNtYXBBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRJ
c01hcChib29sIGlzTWFwKQotewotICAgIHNldEF0dHJpYnV0ZShpc21hcEF0dHIsIGlzTWFwID8g
IiIgOiAwKTsKLX0KLQotS1VSTCBIVE1MSW1hZ2VFbGVtZW50Ojpsb25nRGVzYygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShsb25nZGVz
Y0F0dHIpKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRMb25nRGVzYyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShsb25nZGVzY0F0dHIsIHZhbHVlKTsK
LX0KLQotS1VSTCBIVE1MSW1hZ2VFbGVtZW50Ojpsb3dzcmMoKSBjb25zdAotewotICAgIHJldHVy
biBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUobG93c3JjQXR0cikpOwotfQot
Ci12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldExvd3NyYyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShsb3dzcmNBdHRyLCB2YWx1ZSk7Ci19Ci0KIEtVUkwgSFRNTElt
YWdlRWxlbWVudDo6c3JjKCkgY29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKQEAgLTM5MywxNyArMzUyLDYgQEAgdm9pZCBI
VE1MSW1hZ2VFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaQogICAgIHNldEF0dHJpYnV0ZShzcmNB
dHRyLCB2YWx1ZSk7CiB9CiAKLWludCBIVE1MSW1hZ2VFbGVtZW50Ojp2c3BhY2UoKSBjb25zdAot
ewotICAgIC8vICMjIyByZXR1cm4gYWN0dWFsIHZzcGFjZQotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUodnNwYWNlQXR0cikudG9JbnQoKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRW
c3BhY2UoaW50IHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBTdHJpbmc6
Om51bWJlcih2YWx1ZSkpOwotfQotCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldFdpZHRoKGlu
dCB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6Om51bWJlcih2
YWx1ZSkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCShyZXZpc2lvbiA2MTk1NykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDI0
ICs2Miw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SGVpZ2h0KGludCk7CiAKLSAgICBpbnQg
aHNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIc3BhY2UoaW50KTsKLQotICAgIGJvb2wgaXNN
YXAoKSBjb25zdDsKLSAgICB2b2lkIHNldElzTWFwKGJvb2wpOwotCi0gICAgS1VSTCBsb25nRGVz
YygpIGNvbnN0OwotICAgIHZvaWQgc2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBL
VVJMIGxvd3NyYygpIGNvbnN0OwotICAgIHZvaWQgc2V0TG93c3JjKGNvbnN0IFN0cmluZyYpOwot
CiAgICAgS1VSTCBzcmMoKSBjb25zdDsKICAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsK
IAotICAgIGludCB2c3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldFZzcGFjZShpbnQpOwotCiAg
ICAgdm9pZCBzZXRXaWR0aChpbnQpOwogCiAgICAgaW50IHgoKSBjb25zdDsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEwLDE2ICsyNDEwLDYgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXREZWZhdWx0VmFsdWUoYwogICAgIHNldEF0dHJpYnV0
ZSh2YWx1ZUF0dHIsIHZhbHVlKTsKIH0KIAotYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0
Q2hlY2tlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY2hlY2tlZEF0dHIp
LmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldERlZmF1bHRDaGVja2Vk
KGJvb2wgZGVmYXVsdENoZWNrZWQpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNoZWNrZWRBdHRyLCBk
ZWZhdWx0Q2hlY2tlZCA/ICIiIDogMCk7Ci19Ci0KIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0
RGVmYXVsdE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewogICAgIG1fZGF0YS5zZXRO
YW1lKG5hbWUpOwpAQCAtMjQzMCw0MSArMjQyMCwxMSBAQCBTdHJpbmcgSFRNTElucHV0RWxlbWVu
dDo6YWNjZXB0KCkgY29uc3QKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFjY2VwdEF0dHIpOwog
fQogCi12b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEFjY2VwdChjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZShhY2NlcHRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBI
VE1MSW5wdXRFbGVtZW50OjphY2Nlc3NLZXkoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoYWNjZXNza2V5QXR0cik7Ci19Ci0KLXZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0QWNj
ZXNzS2V5KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFjY2Vzc2tl
eUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsaWduKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50
OjphbHQoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWx0QXR0cik7CiB9CiAK
LXZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0QWx0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGFsdEF0dHIsIHZhbHVlKTsKLX0KLQogaW50IEhUTUxJbnB1dEVsZW1l
bnQ6Om1heExlbmd0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS5tYXhMZW5ndGgoKTsK
QEAgLTI0ODMsMTEgKzI0NDMsNiBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6Om11bHRpcGxlKCkg
Y29uc3QKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShtdWx0aXBsZUF0dHIpLmlzTnVsbCgpOwog
fQogCi12b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldE11bHRpcGxlKGJvb2wgbXVsdGlwbGUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKG11bHRpcGxlQXR0ciwgbXVsdGlwbGUgPyAiIiA6IDApOwotfQot
ICAgIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRTaXplKHVuc2lnbmVkIHNpemUpCiB7CiAg
ICAgc2V0QXR0cmlidXRlKHNpemVBdHRyLCBTdHJpbmc6Om51bWJlcihzaXplKSk7CkBAIC0yNDk4
LDIxICsyNDUzLDYgQEAgS1VSTCBIVE1MSW5wdXRFbGVtZW50OjpzcmMoKSBjb25zdAogICAgIHJl
dHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwogfQog
Ci12b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNyYyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MSW5wdXRF
bGVtZW50Ojp1c2VNYXAoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodXNlbWFw
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VXNlTWFwKGNvbnN0IFN0cmlu
ZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHVzZW1hcEF0dHIsIHZhbHVlKTsKLX0KLQog
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRBdXRvZmlsbGVkKGJvb2wgYikKIHsKICAgICBpZiAo
YiA9PSBtX2F1dG9maWxsZWQpCkBAIC0yNzE4LDYgKzI2NTgsNyBAQCBib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OnBhcnNlVG9EYXRlQ29tcG9uCiB9CiAKICNpZiBFTkFCTEUoREFUQUxJU1QpCisKIEhU
TUxFbGVtZW50KiBIVE1MSW5wdXRFbGVtZW50OjpsaXN0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
ZGF0YUxpc3QoKTsKQEAgLTI3ODIsNiArMjcyMyw3IEBAIEhUTUxPcHRpb25FbGVtZW50KiBIVE1M
SW5wdXRFbGVtZW50OjpzZWwKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CisKICNlbmRpZiAvLyBF
TkFCTEUoREFUQUxJU1QpCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3RlcFVwRnJvbVJlbmRl
cmVyKGludCBuKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiA2MTk1NykK
KysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
MSwzNiArMTYxLDE5IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVmYXVsdFZhbHVlKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXREZWZhdWx0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgCi0gICAgYm9v
bCBkZWZhdWx0Q2hlY2tlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGVmYXVsdENoZWNrZWQoYm9v
bCk7Ci0KICAgICB2b2lkIHNldERlZmF1bHROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAg
ICAgU3RyaW5nIGFjY2VwdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWNjZXB0KGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgU3RyaW5nIGFjY2Vzc0tleSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWNjZXNz
S2V5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLQogICAgIFN0cmluZyBhbHQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldEFsdChjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgc2V0U2l6ZSh1bnNpZ25l
ZCk7CiAKICAgICBLVVJMIHNyYygpIGNvbnN0OwotICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmlu
ZyYpOwogCiAgICAgaW50IG1heExlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TWF4TGVuZ3Ro
KGludCwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgYm9vbCBtdWx0aXBsZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0TXVsdGlwbGUoYm9vbCk7Ci0KLSAgICBTdHJpbmcgdXNlTWFwKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRVc2VNYXAoY29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNB
dXRvZmlsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9hdXRvZmlsbGVkOyB9CiAgICAgdm9pZCBzZXRB
dXRvZmlsbGVkKGJvb2wgdmFsdWUgPSB0cnVlKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSXNJ
bmRleEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxNCArNjEsNCBAQCB2b2lkIEhUTUxJc0lu
ZGV4RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1TdHJpbmcgSFRNTElzSW5kZXhF
bGVtZW50Ojpwcm9tcHQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocHJvbXB0
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTElzSW5kZXhFbGVtZW50OjpzZXRQcm9tcHQoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUocHJvbXB0QXR0ciwgdmFsdWUpOwotfQot
CiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJc0luZGV4RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVsZW1lbnQuaAkocmV2aXNp
b24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElzSW5kZXhFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDkgKzMzLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhU
TUxJc0luZGV4RWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTElzSW5kZXhFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAKLSAgICBTdHJpbmcg
cHJvbXB0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcm9tcHQoY29uc3QgU3RyaW5nJik7Ci0KIHBy
aXZhdGU6CiAgICAgSFRNTElzSW5kZXhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExJRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDI0ICsxMTYsNCBAQCB2b2lkIEhUTUxMSUVsZW1lbnQ6OmF0dGFjaCgp
CiAgICAgfQogfQogCi1TdHJpbmcgSFRNTExJRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExJRWxlbWVudDo6
c2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0
ciwgdmFsdWUpOwotfQotCi1pbnQgSFRNTExJRWxlbWVudDo6dmFsdWUoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUodmFsdWVBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxM
SUVsZW1lbnQ6OnNldFZhbHVlKGludCB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodmFsdWVB
dHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTExJRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50
LmgJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhUTUxMSUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhUTUxMSUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0
cmluZyYpOwotCi0gICAgaW50IHZhbHVlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1ZShpbnQp
OwotCiBwcml2YXRlOgogICAgIEhUTUxMSUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJKHJldmlzaW9uIDYx
OTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQsMjYgKzE1NCw2IEBAIHZvaWQgSFRNTExhYmVsRWxlbWVudDo6YWNjZXNzS2V5QWN0
aW9uKGIKICAgICAgICAgSFRNTEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihzZW5kVG9BbnlFbGVt
ZW50KTsKIH0KIAotU3RyaW5nIEhUTUxMYWJlbEVsZW1lbnQ6OmFjY2Vzc0tleSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKLX0KLQotdm9pZCBIVE1M
TGFiZWxFbGVtZW50OjpzZXRBY2Nlc3NLZXkoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExhYmVs
RWxlbWVudDo6aHRtbEZvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShmb3JB
dHRyKTsKLX0KLQotdm9pZCBIVE1MTGFiZWxFbGVtZW50OjpzZXRIdG1sRm9yKGNvbnN0IFN0cmlu
ZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGZvckF0dHIsIHZhbHVlKTsKLX0KLQogdm9p
ZCBIVE1MTGFiZWxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHJp
YnV0ZSkKIHsKICAgICBpZiAoYXR0cmlidXRlLT5uYW1lKCkgPT0gZm9yQXR0cikgewpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTExhYmVsRWxlbWVudC5oCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MTGFiZWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSw2IEBAIHB1Ymxp
YzoKIAogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2woKTsKIAotICAgIFN0cmlu
ZyBhY2Nlc3NLZXkoKSBjb25zdDsKLSAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcm
KTsKLSAgICAKLSAgICBTdHJpbmcgaHRtbEZvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0SHRtbEZv
cihjb25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToKICAgICBIVE1MTGFiZWxFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExl
Z2VuZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxl
bWVudC5jcHAJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMjYgKzU0LDYgQEAgY29uc3QgQXRvbWljU3Ry
aW5nJiBIVE1MTGVnZW5kRWxlbWVudDo6ZgogICAgIHJldHVybiBsZWdlbmQ7CiB9CiAKLVN0cmlu
ZyBIVE1MTGVnZW5kRWxlbWVudDo6YWNjZXNzS2V5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIpOwotfQotCi12b2lkIEhUTUxMZWdlbmRFbGVtZW50Ojpz
ZXRBY2Nlc3NLZXkoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWNj
ZXNza2V5QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExlZ2VuZEVsZW1lbnQ6OmFsaWdu
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTExlZ2VuZEVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCiBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiBIVE1MTGVnZW5kRWxlbWVudDo6YXNzb2NpYXRlZENvbnRyb2woKQogewogICAgIC8v
IENoZWNrIGlmIHRoZXJlJ3MgYSBmaWVsZHNldCBiZWxvbmdpbmcgdG8gdGhpcyBsZWdlbmQuCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDYg
QEAgY2xhc3MgSFRNTExlZ2VuZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcgogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxMZWdlbmRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAKLSAgICBTdHJpbmcgYWNj
ZXNzS2V5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJik7Ci0K
LSAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmlu
ZyYpOwotICAgIAogcHJpdmF0ZToKICAgICBIVE1MTGVnZW5kRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKIApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxM
aW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Miw5NiArMzYyLDE2IEBAIGJvb2wgSFRN
TExpbmtFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHQKICAgICByZXR1cm4gYXR0ci0+bmFtZSgp
ID09IGhyZWZBdHRyOwogfQogCi1ib29sIEhUTUxMaW5rRWxlbWVudDo6ZGlzYWJsZWQoKSBjb25z
dAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGRpc2FibGVkQXR0cikuaXNOdWxsKCk7Ci19
Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQotewot
ICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGRpc2FibGVkID8gIiIgOiAwKTsKLX0KLQot
U3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6Y2hhcnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShjaGFyc2V0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRD
aGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNoYXJzZXRB
dHRyLCB2YWx1ZSk7Ci19Ci0KIEtVUkwgSFRNTExpbmtFbGVtZW50OjpocmVmKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGhyZWZBdHRy
KSk7CiB9CiAKLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRIcmVmKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhyZWZBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBI
VE1MTGlua0VsZW1lbnQ6OmhyZWZsYW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKGhyZWZsYW5nQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRIcmVmbGFu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShocmVmbGFuZ0F0dHIs
IHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6bWVkaWEoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWVkaWFBdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0Vs
ZW1lbnQ6OnNldE1lZGlhKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KG1lZGlhQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpyZWwoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocmVsQXR0cik7Ci19Ci0KLXZvaWQgSFRN
TExpbmtFbGVtZW50OjpzZXRSZWwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUocmVsQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpyZXYo
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocmV2QXR0cik7Ci19Ci0KLXZvaWQg
SFRNTExpbmtFbGVtZW50OjpzZXRSZXYoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUocmV2QXR0ciwgdmFsdWUpOwotfQotCiBTdHJpbmcgSFRNTExpbmtFbGVtZW50Ojp0
YXJnZXQoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7CiB9
CiAKLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRUYXJnZXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUodGFyZ2V0QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRN
TExpbmtFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5
cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQogdm9p
ZCBIVE1MTGlua0VsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNl
dDxLVVJMPiYgdXJscykgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VB
dHRyaWJ1dGVVUkxzKHVybHMpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkocmV2aXNpb24g
NjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDMyICs0Nyw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MTGlu
a0VsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcik7CiAgICAgdmlydHVhbCB+SFRNTExpbmtFbGVtZW50KCk7CiAKLSAgICBi
b29sIGRpc2FibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKLQotICAg
IFN0cmluZyBjaGFyc2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmlu
ZyYpOwotCiAgICAgS1VSTCBocmVmKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIcmVmKGNvbnN0IFN0
cmluZyYpOwotCi0gICAgU3RyaW5nIGhyZWZsYW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIcmVm
bGFuZyhjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBtZWRpYSgpIGNvbnN0OwotICAgIHZv
aWQgc2V0TWVkaWEoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgcmVsKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRSZWwoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgcmV2KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRSZXYoY29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIFN0cmluZyB0
YXJnZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhcmdldChjb25zdCBTdHJpbmcmKTsKLQotICAg
IFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwog
CiAgICAgU3R5bGVTaGVldCogc2hlZXQoKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1l
bnQuY3BwCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNywxNiArMTM3LDYgQEAgUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gSFRNTE1hcEVsZW1lbgogICAgIHJldHVybiBIVE1MQ29sbGVjdGlvbjo6Y3JlYXRl
KHRoaXMsIE1hcEFyZWFzKTsKIH0KIAotU3RyaW5nIEhUTUxNYXBFbGVtZW50OjpuYW1lKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLX0KLQotdm9pZCBIVE1M
TWFwRWxlbWVudDo6c2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJp
YnV0ZShuYW1lQXR0ciwgdmFsdWUpOwotfQotCiB2b2lkIEhUTUxNYXBFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+YWRkSW1hZ2VNYXAodGhpcyk7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTE1hcEVsZW1lbnQuaAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNiBAQCBwdWJsaWM6
CiAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50KCkgY29uc3Q7CiAgICAgUGFzc1Jl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4gYXJlYXMoKTsKIAotICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotCiBwcml2YXRlOgogICAgIEhUTUxN
YXBFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTE1lbnVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTE1lbnVFbGVtZW50LmNwcAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TE1lbnVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTQgKzQwLDQgQEAgUGFzc1Jl
ZlB0cjxIVE1MTWVudUVsZW1lbnQ+IEhUTUxNZW51RWxlbQogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSFRNTE1lbnVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgSFRNTE1l
bnVFbGVtZW50Ojpjb21wYWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShj
b21wYWN0QXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTE1lbnVFbGVtZW50OjpzZXRDb21w
YWN0KGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6IDAp
OwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1lbnVFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNZW51RWxlbWVudC5oCShyZXZpc2lvbiA2MTk1NykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MTWVudUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSAr
MzEsNiBAQCBjbGFzcyBIVE1MTWVudUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lCiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE1lbnVFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgCi0gICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwotCiBwcml2YXRlOgogICAgIEhUTUxNZW51RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MTWV0YUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1M
TWV0YUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw0NCArNzYsOSBAQCB2b2lkIEhU
TUxNZXRhRWxlbWVudDo6cHJvY2VzcygpCiAgICAgICAgIGRvY3VtZW50KCktPnByb2Nlc3NIdHRw
RXF1aXYobV9lcXVpdiwgbV9jb250ZW50KTsKIH0KIAotU3RyaW5nIEhUTUxNZXRhRWxlbWVudDo6
Y29udGVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb250ZW50QXR0cik7
Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50OjpzZXRDb250ZW50KGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvbnRlbnRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmlu
ZyBIVE1MTWV0YUVsZW1lbnQ6Omh0dHBFcXVpdigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShodHRwX2VxdWl2QXR0cik7Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50OjpzZXRI
dHRwRXF1aXYoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHR0cF9l
cXVpdkF0dHIsIHZhbHVlKTsKLX0KLQogU3RyaW5nIEhUTUxNZXRhRWxlbWVudDo6bmFtZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiB9CiAKLXZvaWQgSFRN
TE1ldGFFbGVtZW50OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0
cmlidXRlKG5hbWVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6OnNj
aGVtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzY2hlbWVBdHRyKTsKLX0K
LQotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldFNjaGVtZShjb25zdCBTdHJpbmcgJnZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShzY2hlbWVBdHRyLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTE1ldGFFbGVtZW50LmgJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxN
ZXRhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNyArMzEsNyBAQCBjbGFzcyBIVE1M
TWV0YUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SFRNTE1ldGFFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKLSAgICBTdHJpbmcgY29udGVudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVu
dChjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBodHRwRXF1aXYoKSBjb25zdDsKLSAgICB2
b2lkIHNldEh0dHBFcXVpdihjb25zdCBTdHJpbmcmKTsKLQogICAgIFN0cmluZyBuYW1lKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHNjaGVt
ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2NoZW1lKGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRl
OgogICAgIEhUTUxNZXRhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTW9kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxNb2RFbGVtZW50LmNwcAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTE1vZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNCArMzksNCBA
QCBQYXNzUmVmUHRyPEhUTUxNb2RFbGVtZW50PiBIVE1MTW9kRWxlbWVuCiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBIVE1MTW9kRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1TdHJp
bmcgSFRNTE1vZEVsZW1lbnQ6OmNpdGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoY2l0ZUF0dHIpOwotfQotCi12b2lkIEhUTUxNb2RFbGVtZW50OjpzZXRDaXRlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNpdGVBdHRyLCB2YWx1ZSk7Ci19Ci0K
LVN0cmluZyBIVE1MTW9kRWxlbWVudDo6ZGF0ZVRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUoZGF0ZXRpbWVBdHRyKTsKLX0KLQotdm9pZCBIVE1MTW9kRWxlbWVudDo6c2V0
RGF0ZVRpbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGF0ZXRp
bWVBdHRyLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTW9kRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTW9kRWxlbWVudC5oCShyZXZpc2lv
biA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MTW9kRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxMiArMzIsNiBAQCBjbGFzcyBIVE1MTW9kRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxl
bWVuCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE1vZEVsZW1lbnQ+IGNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIFN0cmluZyBjaXRlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRDaXRlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGRh
dGVUaW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREYXRlVGltZShjb25zdCBTdHJpbmcmKTsKLQog
cHJpdmF0ZToKICAgICBIVE1MTW9kRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcAkocmV2aXNpb24gNjE5NTcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg5LDI5ICs4OSw5IEBAIHZvaWQgSFRNTE9MaXN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIK
ICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1i
b29sIEhUTUxPTGlzdEVsZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0
QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MT0xpc3RFbGVt
ZW50OjpzZXRDb21wYWN0KGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIs
IGIgPyAiIiA6IDApOwotfQotCiB2b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldFN0YXJ0KGludCBz
dGFydCkKIHsKICAgICBzZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCBTdHJpbmc6Om51bWJlcihzdGFy
dCkpOwogfQogCi1TdHJpbmcgSFRNTE9MaXN0RWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9MaXN0RWxlbWVu
dDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBl
QXR0ciwgdmFsdWUpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmgJKHJldmlz
aW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsMTUgKzMyLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhU
TUxPTGlzdEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEhUTUxPTGlzdEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAotICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29tcGFjdChib29s
KTsKLQogICAgIGludCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KICAgICB2b2lk
IHNldFN0YXJ0KGludCk7CiAKLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
VHlwZShjb25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToKICAgICBIVE1MT0xpc3RFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TE9iamVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMzYgKzMwMSw2IEBAIHZv
aWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXQKICAgICBtX2RvY05hbWVkSXRl
bSA9IGlzTmFtZWRJdGVtOwogfQogCi1ib29sIEhUTUxPYmplY3RFbGVtZW50OjpkZWNsYXJlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShkZWNsYXJlQXR0cikuaXNOdWxsKCk7
Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldERlY2xhcmUoYm9vbCBkZWNsYXJlKQot
ewotICAgIHNldEF0dHJpYnV0ZShkZWNsYXJlQXR0ciwgZGVjbGFyZSA/ICIiIDogMCk7Ci19Ci0K
LWludCBIVE1MT2JqZWN0RWxlbWVudDo6aHNwYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGhzcGFjZUF0dHIpLnRvSW50KCk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OnNldEhzcGFjZShpbnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhzcGFjZUF0dHIs
IFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KLWludCBIVE1MT2JqZWN0RWxlbWVudDo6dnNw
YWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZzcGFjZUF0dHIpLnRvSW50
KCk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldFZzcGFjZShpbnQgdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19
Ci0KIGJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OmNvbnRhaW5zSmF2YUFwcGxldCgpIGNvbnN0CiB7
CiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKGdldEF0dHJp
YnV0ZSh0eXBlQXR0cikpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgJKHJldmlzaW9u
IDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDE1ICszNSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVuZGVyRmFsbGJhY2tD
b250ZW50KCk7CiAKLSAgICBib29sIGRlY2xhcmUoKSBjb25zdDsKLSAgICB2b2lkIHNldERlY2xh
cmUoYm9vbCk7Ci0KLSAgICBpbnQgaHNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIc3BhY2Uo
aW50KTsKLQotICAgIGludCB2c3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldFZzcGFjZShpbnQp
OwotCiAgICAgYm9vbCBpc0RvY05hbWVkSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jTmFtZWRJ
dGVtOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGNsYXNzSWQoKSBjb25zdCB7IHJldHVybiBtX2Ns
YXNzSWQ7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlzaW9u
IDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NiwxNiArODYsNiBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnJlY2Fs
Y1NlbGVjdE9wCiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oc2VsZWN0
KS0+c2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiB9CiAKLVN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50
OjpsYWJlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShsYWJlbEF0dHIpOwot
fQotCi12b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnNldExhYmVsKGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGxhYmVsQXR0ciwgdmFsdWUpOwotfQotCiBib29sIEhU
TUxPcHRHcm91cEVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQogewogICAg
IC8vIE1ha2Ugc3VyZSB0byBrZWVwIHRoaXMgaW4gc3luYyB3aXRoIDxzZWxlY3Q+IChvdGhlciB0
aGFuIG5vdCBhbGxvd2luZyBhbiBvcHRncm91cCkuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9w
dEdyb3VwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBF
bGVtZW50LmgJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsNiBAQCBjbGFzcyBIVE1MT3B0R3Jv
dXBFbGVtZW50IDogcHVibGljIEhUTUxGCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTE9wdEdyb3VwRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCosIEhUTUxGb3JtRWxlbWVudCopOwogCi0gICAgU3RyaW5nIGxhYmVsKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKLSAgICAKICAgICBIVE1MU2VsZWN0RWxlbWVu
dCogb3duZXJTZWxlY3RFbGVtZW50KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBTdHJpbmcg
Z3JvdXBMYWJlbFRleHQoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNw
cAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsMjYgKzIwOCwxMSBAQCBIVE1MU2VsZWN0RWxlbWVudCog
SFRNTE9wdGlvbkVsZW1lbnQ6Om93CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RF
bGVtZW50Kj4oc2VsZWN0KTsKIH0KIAotYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6ZGVmYXVsdFNl
bGVjdGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShzZWxlY3RlZEF0dHIp
LmlzTnVsbCgpOwotfQotCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXREZWZhdWx0U2VsZWN0
ZWQoYm9vbCBiKQogewogICAgIHNldEF0dHJpYnV0ZShzZWxlY3RlZEF0dHIsIGIgPyAiIiA6IDAp
OwogfQogCi1TdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OmxhYmVsKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9kYXRhLmxhYmVsKCk7Ci19Ci0KLXZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldExh
YmVsKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGxhYmVsQXR0ciwg
dmFsdWUpOwotfQotCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRSZW5kZXJTdHlsZShQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSkKIHsKICAgICBtX3N0eWxlID0gbmV3U3R5bGU7
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTIgKzU0
LDggQEAgcHVibGljOgogCiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIG93bmVyU2VsZWN0RWxlbWVu
dCgpIGNvbnN0OwogCi0gICAgYm9vbCBkZWZhdWx0U2VsZWN0ZWQoKSBjb25zdDsKICAgICB2b2lk
IHNldERlZmF1bHRTZWxlY3RlZChib29sKTsKIAotICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgU3RyaW5nJik7Ci0KICAgICBib29sIG93bkVsZW1lbnRE
aXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVk
KCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUv
aHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDE0ICs3
NCw0IEBAIHZvaWQgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXQKICAgICAgICAg
SFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1TdHJpbmcgSFRN
TFBhcmFncmFwaEVsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnNldEFsaWdu
KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFs
dWUpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuaAkocmV2aXNp
b24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsOSArMzEsNiBAQCBjbGFzcyBIVE1MUGFyYWdyYXBoRWxlbWVudCA6IHB1
YmxpYyBIVE1MCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcmFncmFwaEVs
ZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIFN0
cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci0K
IHByaXZhdGU6CiAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAJKHJldmlzaW9u
IDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MSwzNiArNzEsNiBAQCBib29sIEhUTUxQYXJhbUVsZW1lbnQ6OmlzVVJMQXR0cmli
dXRlKEF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNl
dE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIs
IHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxQYXJhbUVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxQYXJhbUVs
ZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
dHlwZUF0dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBIVE1MUGFyYW1FbGVtZW50OjpzZXRWYWx1ZShj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHZhbHVl
KTsKLX0KLQotU3RyaW5nIEhUTUxQYXJhbUVsZW1lbnQ6OnZhbHVlVHlwZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2YWx1ZXR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MUGFy
YW1FbGVtZW50OjpzZXRWYWx1ZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUodmFsdWV0eXBlQXR0ciwgdmFsdWUpOwotfQotCiB2b2lkIEhUTUxQYXJhbUVsZW1l
bnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykg
Y29uc3QKIHsKICAgICBIVE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVy
bHMpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5oCShyZXZpc2lvbiA2MTk1NykKKysrIFdl
YkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE2ICsz
Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyYW1FbGVtZW50PiBj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICBTdHJpbmcgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJp
bmcmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0
IFN0cmluZyYpOwotCiAgICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsg
fQotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdmFsdWVU
eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1ZVR5cGUoY29uc3QgU3RyaW5nJik7CiAKIHBy
aXZhdGU6CiAgICAgSFRNTFBhcmFtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkocmV2aXNpb24gNjE5NTcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OCwyNiArODgsNiBAQCBQYXNzU2NyaXB0SW5zdGFuY2UgSFRNTFBsdWdJbkVsZW1lbnQ6Omdl
CiAgICAgcmV0dXJuIG1faW5zdGFuY2U7CiB9CiAKLVN0cmluZyBIVE1MUGx1Z0luRWxlbWVudDo6
aGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpOwot
fQotCi12b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpzZXRIZWlnaHQoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcg
SFRNTFBsdWdJbkVsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKHdpZHRoQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldFdpZHRoKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgdmFsdWUp
OwotfQotCiBib29sIEhUTUxQbHVnSW5FbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewog
ICAgIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIgfHwKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxl
bWVudC5oCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMiArMzgsNiBAQCBjbGFzcyBIVE1MUGx1Z0luRWxl
bWVudCA6IHB1YmxpYyBIVE1MRnJhCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SFRNTFBsdWdJbkVs
ZW1lbnQoKTsKIAotICAgIFN0cmluZyBoZWlnaHQoKSBjb25zdDsKLSAgICB2b2lkIHNldEhlaWdo
dChjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICBTdHJpbmcgd2lkdGgoKSBjb25zdDsKLSAgICB2
b2lkIHNldFdpZHRoKGNvbnN0IFN0cmluZyYpOwotCiAgICAgUGFzc1NjcmlwdEluc3RhbmNlIGdl
dEluc3RhbmNlKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MUHJlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxQcmVFbGVtZW50LmNwcAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTFByZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwyNCArNjUsNCBAQCB2
b2lkIEhUTUxQcmVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAgICAgICAgIHJldHVybiBI
VE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLWludCBIVE1MUHJl
RWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUod2lkdGhB
dHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxQcmVFbGVtZW50OjpzZXRXaWR0aChpbnQgd2lk
dGgpCi17Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIod2lkdGgp
KTsKLX0KLQotYm9vbCBIVE1MUHJlRWxlbWVudDo6d3JhcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICFnZXRBdHRyaWJ1dGUod3JhcEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxQcmVFbGVt
ZW50OjpzZXRXcmFwKGJvb2wgd3JhcCkKLXsKLSAgICBzZXRBdHRyaWJ1dGUod3JhcEF0dHIsIHdy
YXAgPyAiIiA6IDApOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFByZUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFByZUVsZW1lbnQuaAkocmV2aXNpb24g
NjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFByZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMTIgKzMxLDYgQEAgY2xhc3MgSFRNTFByZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bgogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQcmVFbGVtZW50PiBjcmVhdGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBpbnQgd2lkdGgoKSBjb25z
dDsKLSAgICB2b2lkIHNldFdpZHRoKGludCk7Ci0KLSAgICBib29sIHdyYXAoKSBjb25zdDsKLSAg
ICB2b2lkIHNldFdyYXAoYm9vbCk7Ci0KIHByaXZhdGU6CiAgICAgSFRNTFByZUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
UXVvdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFF1b3RlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxRdW90ZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNCArNDgsNCBAQCB2b2lkIEhUTUxRdW90ZUVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtCiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCk7CiB9CiAKLVN0cmluZyBIVE1MUXVvdGVFbGVtZW50OjpjaXRlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNpdGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MUXVvdGVF
bGVtZW50OjpzZXRDaXRlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGNpdGVBdHRyLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUXVvdGVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxRdW90ZUVsZW1lbnQuaAko
cmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFF1b3RlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw5ICszNCw2IEBAIGNsYXNzIEhUTUxRdW90ZUVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW0KIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUXVvdGVFbGVt
ZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBTdHJp
bmcgY2l0ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBTdHJpbmcmKTsKLQogcHJp
dmF0ZToKICAgICBIVE1MUXVvdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwogICAgIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2
MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNyw3OCArMTE3LDExIEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldFRleHQo
Y29uc3QgU3QKICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZSh2YWx1
ZS5pbXBsKCkpLCBlYyk7CiB9CiAKLVN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6aHRtbEZvcigp
IGNvbnN0Ci17Ci0gICAgLy8gRE9NIExldmVsIDEgc2F5czogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1
c2UuCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50Ojpz
ZXRIdG1sRm9yKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRE9NIExldmVsIDEgc2F5czogcmVz
ZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCi19Ci0KLVN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6ZXZl
bnQoKSBjb25zdAotewotICAgIC8vIERPTSBMZXZlbCAxIHNheXM6IHJlc2VydmVkIGZvciBmdXR1
cmUgdXNlLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVu
dDo6c2V0RXZlbnQoY29uc3QgU3RyaW5nJikKLXsKLSAgICAvLyBET00gTGV2ZWwgMSBzYXlzOiBy
ZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KLX0KLQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50Ojpj
aGFyc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hhcnNldEF0dHJpYnV0ZVZhbHVlKCk7Ci19
Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldENoYXJzZXQoY29uc3QgU3RyaW5nICZ2YWx1
ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBI
VE1MU2NyaXB0RWxlbWVudDo6YXN5bmMoKSBjb25zdAotewotICAgIHJldHVybiBhc3luY0F0dHJp
YnV0ZVZhbHVlKCk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldEFzeW5jKGJvb2wg
YXN5bmMpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFzeW5jQXR0ciwgYXN5bmMgPyAiIiA6IDApOwot
fQotCi1ib29sIEhUTUxTY3JpcHRFbGVtZW50OjpkZWZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGRlZmVyQXR0cmlidXRlVmFsdWUoKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0
RGVmZXIoYm9vbCBkZWZlcikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGVmZXJBdHRyLCBkZWZlciA/
ICIiIDogMCk7Ci19Ci0KIEtVUkwgSFRNTFNjcmlwdEVsZW1lbnQ6OnNyYygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkp
OwogfQogCi12b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nICZ2YWx1
ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRN
TFNjcmlwdEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiB0eXBlQXR0cmlidXRl
VmFsdWUoKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJp
bmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwotfQotCiBT
dHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OnNjcmlwdENoYXJzZXQoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2RhdGEuc2NyaXB0Q2hhcnNldCgpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTY3Jp
cHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50
LmgJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDI2ICszOCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdGV4
dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmKTsKIAotICAgIFN0cmlu
ZyBodG1sRm9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIdG1sRm9yKGNvbnN0IFN0cmluZyYpOwot
Ci0gICAgU3RyaW5nIGV2ZW50KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRFdmVudChjb25zdCBTdHJp
bmcmKTsKLQotICAgIFN0cmluZyBjaGFyc2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaGFyc2V0
KGNvbnN0IFN0cmluZyYpOwotCi0gICAgYm9vbCBhc3luYygpIGNvbnN0OwotICAgIHZvaWQgc2V0
QXN5bmMoYm9vbCk7Ci0KLSAgICBib29sIGRlZmVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWZl
cihib29sKTsKLQogICAgIEtVUkwgc3JjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShj
b25zdCBTdHJpbmcmKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIHNjcmlwdENoYXJzZXQoKSBjb25z
dDsKICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbAkocmV2aXNpb24gNjE5
NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2Vp
bmlnQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCw1MSArMjQsNDggQEAgbW9kdWxlIGh0
bWwgewogICAgICAgICBIYXNJbmRleEdldHRlciwKICAgICAgICAgSGFzQ3VzdG9tSW5kZXhTZXR0
ZXIKICAgICBdIEhUTUxTZWxlY3RFbGVtZW50IDogSFRNTEVsZW1lbnQgewotCi0gICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgdHlwZTsKLSAgICAgICAgICAgICAgICAg
YXR0cmlidXRlIGxvbmcgICAgICAgICAgICBzZWxlY3RlZEluZGV4OwotICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgICAgICAgdmFs
dWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKKyAgICAgICAg
YXR0cmlidXRlIGxvbmcgc2VsZWN0ZWRJbmRleDsKKyAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0
TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHZhbHVlOwogICAgICAgICAKICAgICAgICAgLy8g
TW9kaWZpZWQgaW4gRE9NIExldmVsIDI6CiAjaWYgZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVf
QykgJiYgTEFOR1VBR0VfT0JKRUNUSVZFX0MKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxv
bmcgICAgICAgICAgICBsZW5ndGg7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGxl
bmd0aDsKICNlbHNlCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nICAg
bGVuZ3RoCi0gICAgICAgICAgICAgICAgICAgIHNldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7
CisgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aCBzZXR0ZXIgcmFpc2VzIChE
T01FeGNlcHRpb24pOwogI2VuZGlmCiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxG
b3JtRWxlbWVudCBmb3JtOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgVmFsaWRpdHlTdGF0
ZSAgIHZhbGlkaXR5OwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiAgICAgICAg
IHdpbGxWYWxpZGF0ZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAg
ICB2YWxpZGF0aW9uTWVzc2FnZTsKLSAgICAgICAgYm9vbGVhbiAgICAgICAgICAgIGNoZWNrVmFs
aWRpdHkoKTsKLSAgICAgICAgdm9pZCAgICAgICAgICAgICAgIHNldEN1c3RvbVZhbGlkaXR5KGlu
IFtDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgZXJyb3IpOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgVmFsaWRpdHlTdGF0ZSB2YWxpZGl0eTsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gd2lsbFZhbGlkYXRlOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlOworICAgICAgICBib29s
ZWFuIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0eShpbiBb
Q29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGVycm9yKTsKIAog
ICAgICAgICAvLyBNb2RpZmllZCBpbiBET00gTGV2ZWwgMjoKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIEhUTUxPcHRpb25zQ29sbGVjdGlvbiBvcHRpb25zOwogCi0gICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgZGlzYWJsZWQ7Ci0gICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSBib29sZWFuICAgICAgICAgYXV0b2ZvY3VzOwotICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGUgYm9vbGVhbiAgICAgICAgIG11bHRpcGxlOwotICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgICAgICAgbmFtZTsKLSAgICAg
ICAgICAgICAgICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICBzaXplOworICAgICAgICBhdHRy
aWJ1dGUgW1JlZmxlY3RdIGJvb2xlYW4gZGlzYWJsZWQ7CisgICAgICAgIGF0dHJpYnV0ZSBbUmVm
bGVjdF0gYm9vbGVhbiBhdXRvZm9jdXM7CisgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIG11bHRp
cGxlOworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJp
bmcgbmFtZTsKKyAgICAgICAgYXR0cmlidXRlIGxvbmcgc2l6ZTsKICAgICAgICAgCi0gICAgICAg
IFtPbGRTdHlsZU9iakNdIHZvaWQgYWRkKGluIEhUTUxFbGVtZW50IGVsZW1lbnQsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIEhUTUxFbGVtZW50IGJlZm9yZSkKLSAgICAgICAg
ICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbT2xkU3R5bGVPYmpDXSB2b2lkIGFk
ZChpbiBIVE1MRWxlbWVudCBlbGVtZW50LCBpbiBIVE1MRWxlbWVudCBiZWZvcmUpIHJhaXNlcyhE
T01FeGNlcHRpb24pOwogCiAjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5H
VUFHRV9KQVZBU0NSSVBUCi0gICAgICAgIC8vIEluIEpTLCB3ZSBzdXBwb3J0IGJvdGggb3B0aW9u
cyBpbmRleCBhbmQgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVycyAtIHRoaXMgY2Fubm90IGJlIGF1
dG9nZW5lcmF0ZWQgbm93LgotICAgICAgICBbQ3VzdG9tXSB2b2lkICAgICAgcmVtb3ZlKC8qIDEg
Ki8pOworICAgICAgICAvLyBJbiBKYXZhU2NyaXB0LCB3ZSBzdXBwb3J0IGJvdGggb3B0aW9uIGlu
ZGV4IGFuZCBvcHRpb24gb2JqZWN0IHBhcmFtZXRlcnMuCisgICAgICAgIC8vIEFzIG9mIHRoaXMg
d3JpdGluZyB0aGlzIGNhbm5vdCBiZSBhdXRvLWdlbmVyYXRlZC4KKyAgICAgICAgW0N1c3RvbV0g
dm9pZCByZW1vdmUoLyogaW5kZXhPck9wdGlvbiAqLyk7CiAjZWxzZQotICAgICAgICB2b2lkICAg
ICAgICAgICAgICAgcmVtb3ZlKGluIGxvbmcgaW5kZXgpOworICAgICAgICB2b2lkIHJlbW92ZShp
biBsb25nIGluZGV4KTsKICNlbmRpZgogCiAgICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG5v
dCBpbiBET00gTGV2ZWwgMiBJREwsIGJ1dCBhcmUgbWVudGlvbmVkIGluIHRoZSBzdGFuZGFyZDoK
ICAgICAgICAgLy8gIlRoZSBjb250YWluZWQgb3B0aW9ucyBjYW4gYmUgZGlyZWN0bHkgYWNjZXNz
ZWQgdGhyb3VnaCB0aGUgc2VsZWN0IGVsZW1lbnQgYXMgYSBjb2xsZWN0aW9uLiIKICAgICAgICAg
Tm9kZSBpdGVtKGluIFtJc0luZGV4XSB1bnNpZ25lZCBsb25nIGluZGV4KTsKICAgICAgICAgTm9k
ZSBuYW1lZEl0ZW0oaW4gRE9NU3RyaW5nIG5hbWUpOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgTm9kZUxpc3QgICAgICAgIGxhYmVsczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5v
ZGVMaXN0IGxhYmVsczsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFN0eWxl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTQgKzQ1LDExIEBAIFBhc3NSZWZQdHI8SFRNTFN0eWxl
RWxlbWVudD4gSFRNTFN0eWxlRWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxTdHlsZUVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikpOwogfQogCi0vLyBvdGhl
ciBzdHVmZi4uLgogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBtZWRpYUF0dHIpCi0g
ICAgICAgIG1fbWVkaWEgPSBhdHRyLT52YWx1ZSgpLnN0cmluZygpLmxvd2VyKCk7Ci0gICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHRpdGxlQXR0ciAmJiBtX3NoZWV0KQorICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gdGl0bGVBdHRyICYmIG1fc2hlZXQpCiAgICAgICAgIG1fc2hlZXQtPnNldFRp
dGxlKGF0dHItPnZhbHVlKCkpOwotICAgICBlbHNlCisgICAgZWxzZQogICAgICAgICBIVE1MRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKQEAgLTExMCwzNiArMTA3LDE2
IEBAIGJvb2wgSFRNTFN0eWxlRWxlbWVudDo6c2hlZXRMb2FkZWQoKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBIVE1MU3R5bGVFbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFnZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBI
VE1MU3R5bGVFbGVtZW50OjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQotewotICAgIHNldEF0
dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGRpc2FibGVkID8gIiIgOiAwKTsKLX0KLQogY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MU3R5bGVFbGVtZW50OjptZWRpYSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShtZWRpYUF0dHIpOwogfQogCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNl
dE1lZGlhKGNvbnN0IEF0b21pY1N0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG1l
ZGlhQXR0ciwgdmFsdWUpOwotfQotCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxTdHlsZUVsZW1l
bnQ6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwog
fQogCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgQXRvbWljU3RyaW5nICZ2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQogdm9pZCBI
VE1MU3R5bGVFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8
S1VSTD4mIHVybHMpIGNvbnN0CiB7ICAgIAogICAgIEhUTUxFbGVtZW50OjphZGRTdWJyZXNvdXJj
ZUF0dHJpYnV0ZVVSTHModXJscyk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgJKHJldmlz
aW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTksNiArMTksNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAg
KgogICovCisKICNpZm5kZWYgSFRNTFN0eWxlRWxlbWVudF9oCiAjZGVmaW5lIEhUTUxTdHlsZUVs
ZW1lbnRfaAogCkBAIC0yOSwxNyArMzAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBTdHlsZVNoZWV0OwogCi1jbGFzcyBIVE1MU3R5bGVFbGVtZW50IDogcHVibGljIEhUTUxFbGVt
ZW50LCBwdWJsaWMgU3R5bGVFbGVtZW50IHsKK2NsYXNzIEhUTUxTdHlsZUVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQsIHByaXZhdGUgU3R5bGVFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MU3R5bGVFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogCi0gICAgYm9vbCBkaXNhYmxl
ZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7Ci0KLSAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWVkaWEoKSBjb25zdDsKLSAgICB2b2lkIHNldE1lZGlhKGNvbnN0
IEF0b21pY1N0cmluZyYpOwotCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUo
KSBjb25zdDsKICAgICB2b2lkIHNldFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICBT
dHlsZVNoZWV0KiBzaGVldCgpOwpAQCAtNjYsNyArNjAsOSBAQCBwcml2YXRlOgogCiAgICAgdmly
dHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYp
IGNvbnN0OwogCi0gICAgU3RyaW5nIG1fbWVkaWE7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIG1lZGlhKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUoKSBjb25zdDsKKwogICAgIGJvb2wgbV9sb2FkaW5nOwogICAgIGJvb2wgbV9jcmVhdGVkQnlQ
YXJzZXI7CiB9OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmlkbAkocmV2aXNpb24gNjE5
NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDcgKzIxLDcgQEAKIG1vZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFjZSBIVE1MU3R5
bGVFbGVtZW50IDogSFRNTEVsZW1lbnQgewotICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBkaXNh
YmxlZDsKKyAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIGRpc2FibGVkOwogICAg
ICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBtZWRpYTsKICAgICAgICAgYXR0cmli
dXRlIFtSZWZsZWN0XSBET01TdHJpbmcgdHlwZTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUNhcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE0ICs2Myw0
IEBAIHZvaWQgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGUKICAgICAgICAgSFRN
TEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1TdHJpbmcgSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6OnNldEFs
aWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwg
dmFsdWUpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQu
aAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsNiBAQCBjbGFzcyBIVE1MVGFibGVDYXB0
aW9uRWxlbWVudCA6IHB1YmxpYyBICiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKIAotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29u
c3QgU3RyaW5nJik7Ci0KIHByaXZhdGU6CiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
VGFibGVDZWxsRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUNlbGxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDYxICsxMzMsMTEg
QEAgU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50OjphYmJyKCkgY29ucwogICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUoYWJickF0dHIpOwogfQogCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojpz
ZXRBYmJyKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFiYnJBdHRy
LCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6YWxpZ24oKSBjb25z
dAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1M
VGFibGVDZWxsRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KIFN0cmluZyBIVE1MVGFibGVDZWxs
RWxlbWVudDo6YXhpcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShheGlzQXR0
cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldEF4aXMoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYXhpc0F0dHIsIHZhbHVlKTsKLX0KLQotU3Ry
aW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpiZ0NvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGJnY29sb3JBdHRyKTsKLX0KLQotdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVu
dDo6c2V0QmdDb2xvcihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShi
Z2NvbG9yQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNo
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNoYXJBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Q2goY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoY2hhckF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxUYWJsZUNl
bGxFbGVtZW50OjpjaE9mZigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjaGFy
b2ZmQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldENoT2ZmKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNoYXJvZmZBdHRyLCB2YWx1ZSk7
Ci19Ci0KIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldENvbFNwYW4oaW50IG4pCiB7CiAg
ICAgc2V0QXR0cmlidXRlKGNvbHNwYW5BdHRyLCBTdHJpbmc6Om51bWJlcihuKSk7CkBAIC0xOTgs
MzEgKzE0OCw2IEBAIFN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6aGVhZGVycygpIGMKICAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKGhlYWRlcnNBdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVD
ZWxsRWxlbWVudDo6c2V0SGVhZGVycyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0
dHJpYnV0ZShoZWFkZXJzQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoZWlnaHRB
dHRyKTsKLX0KLQotdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0SGVpZ2h0KGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIHZhbHVlKTsKLX0K
LQotYm9vbCBIVE1MVGFibGVDZWxsRWxlbWVudDo6bm9XcmFwKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gIWdldEF0dHJpYnV0ZShub3dyYXBBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MVGFi
bGVDZWxsRWxlbWVudDo6c2V0Tm9XcmFwKGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUobm93
cmFwQXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNl
dFJvd1NwYW4oaW50IG4pCiB7CiAgICAgc2V0QXR0cmlidXRlKHJvd3NwYW5BdHRyLCBTdHJpbmc6
Om51bWJlcihuKSk7CkBAIC0yMzMsMzEgKzE1OCw2IEBAIFN0cmluZyBIVE1MVGFibGVDZWxsRWxl
bWVudDo6c2NvcGUoKSBjb24KICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNjb3BlQXR0cik7CiB9
CiAKLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldFNjb3BlKGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHNjb3BlQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcg
SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnZBbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZSh2YWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0
VkFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZhbGlnbkF0
dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojp3aWR0aCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotfQotCi12b2lkIEhU
TUxUYWJsZUNlbGxFbGVtZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHZhbHVlKTsKLX0KLQogdm9pZCBIVE1MVGFibGVDZWxs
RWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1
cmxzKSBjb25zdAogewogICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0
dHJpYnV0ZVVSTHModXJscyk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaAko
cmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNDQgKzQ3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENl
bGxJbmRleChpbnQpOwogCiAgICAgU3RyaW5nIGFiYnIoKSBjb25zdDsKLSAgICB2b2lkIHNldEFi
YnIoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lk
IHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwotCiAgICAgU3RyaW5nIGF4aXMoKSBjb25zdDsKLSAg
ICB2b2lkIHNldEF4aXMoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgYmdDb2xvcigpIGNv
bnN0OwotICAgIHZvaWQgc2V0QmdDb2xvcihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBj
aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2goY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcg
Y2hPZmYoKSBjb25zdDsKLSAgICB2b2lkIHNldENoT2ZmKGNvbnN0IFN0cmluZyYpOwotCiAgICAg
dm9pZCBzZXRDb2xTcGFuKGludCk7Ci0KICAgICBTdHJpbmcgaGVhZGVycygpIGNvbnN0OwotICAg
IHZvaWQgc2V0SGVhZGVycyhjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBoZWlnaHQoKSBj
b25zdDsKLSAgICB2b2lkIHNldEhlaWdodChjb25zdCBTdHJpbmcmKTsKLQotICAgIGJvb2wgbm9X
cmFwKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROb1dyYXAoYm9vbCk7Ci0KICAgICB2b2lkIHNldFJv
d1NwYW4oaW50KTsKLQogICAgIFN0cmluZyBzY29wZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2Nv
cGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdkFsaWduKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRWQWxpZ24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgd2lkdGgoKSBjb25zdDsK
LSAgICB2b2lkIHNldFdpZHRoKGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgogICAgIEhUTUxU
YWJsZUNlbGxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaWRsCShyZXZpc2lvbiA2MTk1NykKKysrIFdl
YkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBhdHRyaWJ1dGUgbG9uZyBjb2xTcGFu
OwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBoZWFkZXJzOwogICAgICAg
ICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBoZWlnaHQ7Ci0gICAgICAgIGF0dHJpYnV0
ZSBib29sZWFuIG5vV3JhcDsKKyAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIG5v
V3JhcDsKICAgICAgICAgYXR0cmlidXRlIGxvbmcgcm93U3BhbjsKICAgICAgICAgYXR0cmlidXRl
IFtSZWZsZWN0XSBET01TdHJpbmcgc2NvcGU7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0g
RE9NU3RyaW5nIHZBbGlnbjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNTkgKzExMCwxNCBAQCB2b2lkIEhUTUxUYWJsZUNvbEVs
ZW1lbnQ6OmFkZGl0aW9uYWxBdHRyCiAgICAgc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+
KHApLT5hZGRTaGFyZWRHcm91cERlY2xzKGZhbHNlLCByZXN1bHRzKTsKIH0KIAotU3RyaW5nIEhU
TUxUYWJsZUNvbEVsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudDo6c2V0QWxpZ24o
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVDb2xFbGVtZW50OjpjaCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShjaGFyQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlQ29sRWxl
bWVudDo6c2V0Q2goY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2hh
ckF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OmNoT2ZmKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNoYXJvZmZBdHRyKTsKLX0KLQotdm9p
ZCBIVE1MVGFibGVDb2xFbGVtZW50OjpzZXRDaE9mZihjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShjaGFyb2ZmQXR0ciwgdmFsdWUpOwotfQotCiB2b2lkIEhUTUxUYWJs
ZUNvbEVsZW1lbnQ6OnNldFNwYW4oaW50IG4pCiB7CiAgICAgc2V0QXR0cmlidXRlKHNwYW5BdHRy
LCBTdHJpbmc6Om51bWJlcihuKSk7CiB9CiAKLVN0cmluZyBIVE1MVGFibGVDb2xFbGVtZW50Ojp2
QWxpZ24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodmFsaWduQXR0cik7Ci19
Ci0KLXZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudDo6c2V0VkFsaWduKGNvbnN0IFN0cmluZyAmdmFs
dWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQogU3RyaW5n
IEhUTUxUYWJsZUNvbEVsZW1lbnQ6OndpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKHdpZHRoQXR0cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudDo6c2V0V2lk
dGgoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCB2
YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaAkocmV2aXNp
b24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwyMyArMzUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTFRhYmxlQ29sRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50Kik7CiAKICAgICBpbnQgc3BhbigpIGNvbnN0IHsgcmV0dXJuIG1fc3BhbjsgfQot
Ci0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJp
bmcmKTsKLQotICAgIFN0cmluZyBjaCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2goY29uc3QgU3Ry
aW5nJik7Ci0KLSAgICBTdHJpbmcgY2hPZmYoKSBjb25zdDsKLSAgICB2b2lkIHNldENoT2ZmKGNv
bnN0IFN0cmluZyYpOwotCiAgICAgdm9pZCBzZXRTcGFuKGludCk7CiAKLSAgICBTdHJpbmcgdkFs
aWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWQWxpZ24oY29uc3QgU3RyaW5nJik7Ci0KICAgICBT
dHJpbmcgd2lkdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKGNvbnN0IFN0cmluZyYpOwog
CiBwcml2YXRlOgogICAgIEhUTUxUYWJsZUNvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjksOTYgKzY2OSwxNiBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBIVE1MVGFibGVFbGVtCiAgICAgcmV0dXJuIEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywg
VGFibGVUQm9kaWVzKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OmFsaWduKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRN
TFRhYmxlRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVFbGVtZW50
OjpiZ0NvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJnY29sb3JBdHRy
KTsKLX0KLQotdm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyAm
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGJnY29sb3JBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0
cmluZyBIVE1MVGFibGVFbGVtZW50Ojpib3JkZXIoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoYm9yZGVyQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlRWxlbWVudDo6c2V0Qm9y
ZGVyKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGJvcmRlckF0dHIs
IHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OmNlbGxQYWRkaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNlbGxwYWRkaW5nQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTFRhYmxlRWxlbWVudDo6c2V0Q2VsbFBhZGRpbmcoY29uc3QgU3RyaW5nICZ2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUoY2VsbHBhZGRpbmdBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmlu
ZyBIVE1MVGFibGVFbGVtZW50OjpjZWxsU3BhY2luZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShjZWxsc3BhY2luZ0F0dHIpOwotfQotCi12b2lkIEhUTUxUYWJsZUVsZW1lbnQ6
OnNldENlbGxTcGFjaW5nKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGNlbGxzcGFjaW5nQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlRWxlbWVudDo6
ZnJhbWUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoZnJhbWVBdHRyKTsKLX0K
LQotdm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRGcmFtZShjb25zdCBTdHJpbmcgJnZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShmcmFtZUF0dHIsIHZhbHVlKTsKLX0KLQogU3RyaW5nIEhUTUxU
YWJsZUVsZW1lbnQ6OnJ1bGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHJ1
bGVzQXR0cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxlRWxlbWVudDo6c2V0UnVsZXMoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUocnVsZXNBdHRyLCB2YWx1ZSk7Ci19Ci0K
IFN0cmluZyBIVE1MVGFibGVFbGVtZW50OjpzdW1tYXJ5KCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVFbGVtZW50Ojpz
ZXRTdW1tYXJ5KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHN1bW1h
cnlBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVFbGVtZW50Ojp3aWR0aCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotfQotCi12b2lkIEhU
TUxUYWJsZUVsZW1lbnQ6OnNldFdpZHRoKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKHdpZHRoQXR0ciwgdmFsdWUpOwotfQotCiB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6
OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29u
c3QKIHsKICAgICBIVE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMp
OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNv
cmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDMyICs2MCw4
IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiByb3dzKCk7CiAgICAg
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gdEJvZGllcygpOwogCi0gICAgU3RyaW5nIGFsaWdu
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmlu
ZyBiZ0NvbG9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyYpOwot
Ci0gICAgU3RyaW5nIGJvcmRlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0Qm9yZGVyKGNvbnN0IFN0
cmluZyYpOwotCi0gICAgU3RyaW5nIGNlbGxQYWRkaW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRD
ZWxsUGFkZGluZyhjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBjZWxsU3BhY2luZygpIGNv
bnN0OwotICAgIHZvaWQgc2V0Q2VsbFNwYWNpbmcoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJp
bmcgZnJhbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldEZyYW1lKGNvbnN0IFN0cmluZyYpOwotCiAg
ICAgU3RyaW5nIHJ1bGVzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSdWxlcyhjb25zdCBTdHJpbmcm
KTsKLQogICAgIFN0cmluZyBzdW1tYXJ5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdW1tYXJ5KGNv
bnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRX
aWR0aChjb25zdCBTdHJpbmcmKTsKIAogICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogYWRkQ2hp
bGQoUGFzc1JlZlB0cjxOb2RlPik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNTkgKzE4MSw5IEBAIFBhc3NSZWZQdHI8SFRN
TENvbGxlY3Rpb24+IEhUTUxUYWJsZVJvd0UKICAgICByZXR1cm4gSFRNTENvbGxlY3Rpb246OmNy
ZWF0ZSh0aGlzLCBUUkNlbGxzKTsKIH0KIAotdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50OjpzZXRD
ZWxscyhIVE1MQ29sbGVjdGlvbiAqLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSFRNTFRhYmxl
Um93RWxlbWVudDo6c2V0Q2VsbHMoSFRNTENvbGxlY3Rpb24qLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKIH0KIAotU3RyaW5nIEhU
TUxUYWJsZVJvd0VsZW1lbnQ6OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlUm93RWxlbWVudDo6c2V0QWxpZ24o
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVSb3dFbGVtZW50OjpiZ0NvbG9yKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJnY29sb3JBdHRyKTsKLX0KLQotdm9pZCBIVE1MVGFi
bGVSb3dFbGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKGJnY29sb3JBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVSb3dF
bGVtZW50OjpjaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjaGFyQXR0cik7
Ci19Ci0KLXZvaWQgSFRNTFRhYmxlUm93RWxlbWVudDo6c2V0Q2goY29uc3QgU3RyaW5nICZ2YWx1
ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2hhckF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhU
TUxUYWJsZVJvd0VsZW1lbnQ6OmNoT2ZmKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKGNoYXJvZmZBdHRyKTsKLX0KLQotdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50OjpzZXRDaE9m
Zihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjaGFyb2ZmQXR0ciwg
dmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlUm93RWxlbWVudDo6dkFsaWduKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZhbGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxU
YWJsZVJvd0VsZW1lbnQ6OnNldFZBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNl
dEF0dHJpYnV0ZSh2YWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MVGFibGVSb3dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxU
YWJsZVJvd0VsZW1lbnQuaAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRh
YmxlUm93RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwyMSArNDksNiBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY2VsbHMoKTsKICAgICB2b2lkIHNldENl
bGxzKEhUTUxDb2xsZWN0aW9uICosIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFN0cmluZyBhbGln
bigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJp
bmcgYmdDb2xvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0QmdDb2xvcihjb25zdCBTdHJpbmcmKTsK
LQotICAgIFN0cmluZyBjaCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2goY29uc3QgU3RyaW5nJik7
Ci0KLSAgICBTdHJpbmcgY2hPZmYoKSBjb25zdDsKLSAgICB2b2lkIHNldENoT2ZmKGNvbnN0IFN0
cmluZyYpOwotCi0gICAgU3RyaW5nIHZBbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0VkFsaWdu
KGNvbnN0IFN0cmluZyYpOwotCiBwcml2YXRlOgogICAgIEhUTUxUYWJsZVJvd0VsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
VGV4dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUZXh0
QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTksMTYgKzM5OSw2IEBAIHZvaWQg
SFRNTFRleHRBcmVhRWxlbWVudDo6YWNjZXNzS2V5QWN0aW8KICAgICBmb2N1cygpOwogfQogCi1j
b25zdCBBdG9taWNTdHJpbmcmIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmFjY2Vzc0tleSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKLX0KLQotdm9pZCBI
VE1MVGV4dEFyZWFFbGVtZW50OjpzZXRBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0ciwgdmFsdWUpOwotfQotCiB2b2lkIEhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OnNldENvbHMoaW50IGNvbHMpCiB7CiAgICAgc2V0QXR0cmlidXRlKGNv
bHNBdHRyLCBTdHJpbmc6Om51bWJlcihjb2xzKSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmgJKHJldmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOSArNTEsNiBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCByZW5kZXJlcldpbGxCZURlc3Ryb3llZCgpOwogICAgIAotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYWNjZXNzS2V5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBY2Nlc3NLZXkoY29uc3Qg
U3RyaW5nJik7Ci0KICAgICB2b2lkIHNldENvbHMoaW50KTsKICAgICB2b2lkIHNldFJvd3MoaW50
KTsKICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGwJKHJldmlzaW9u
IDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMyArMjYsMTMgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgVmFsaWRpdHlTdGF0ZSB2YWxpZGl0eTsKICAgICAgICAgYXR0cmlidXRlIFtS
ZWZsZWN0XSBET01TdHJpbmcgYWNjZXNzS2V5OwogICAgICAgICBhdHRyaWJ1dGUgbG9uZyBjb2xz
OwotICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBkaXNhYmxlZDsKLSAgICAgICAgYXR0cmlidXRl
IGJvb2xlYW4gYXV0b2ZvY3VzOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGJvb2xlYW4g
ZGlzYWJsZWQ7CisgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiBhdXRvZm9jdXM7
CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIG1heExlbmd0aCBzZXR0ZXIgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0
cmluZyBuYW1lOwogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBwbGFjZWhv
bGRlcjsKLSAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gcmVhZE9ubHk7Ci0gICAgICAgIGF0dHJp
YnV0ZSBib29sZWFuIHJlcXVpcmVkOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGJvb2xl
YW4gcmVhZE9ubHk7CisgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiByZXF1aXJl
ZDsKICAgICAgICAgYXR0cmlidXRlIGxvbmcgcm93czsKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyB0eXBlOwogICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxs
U3RyaW5nXSBET01TdHJpbmcgdmFsdWU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjUsMjQgKzY1LDQgQEAgdm9pZCBIVE1MVUxpc3RFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYgogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CiB9CiAKLWJvb2wgSFRNTFVMaXN0RWxlbWVudDo6Y29tcGFjdCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIpLmlzTnVsbCgpOwotfQotCi12
b2lkIEhUTUxVTGlzdEVsZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiKQotewotICAgIHNldEF0dHJp
YnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KLVN0cmluZyBIVE1MVUxpc3RFbGVt
ZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsK
LX0KLQotdm9pZCBIVE1MVUxpc3RFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUp
Ci17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxVTGlzdEVsZW1lbnQuaAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFVMaXN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFVMaXN0RWxlbWVudD4gY3JlYXRlKERvY3VtZW50
Kik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFVMaXN0RWxlbWVudD4gY3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsK
LSAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJik7Ci0KIHByaXZhdGU6CiAgICAgSFRNTFVM
aXN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIApJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MVUxpc3RFbGVtZW50LmlkbAkocmV2aXNpb24gNjE5NTcpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTFVMaXN0RWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIG1v
ZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFjZSBIVE1MVUxpc3RFbGVtZW50IDogSFRNTEVsZW1l
bnQgewotICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBjb21wYWN0OworICAgICAgICBhdHRyaWJ1
dGUgW1JlZmxlY3RdIGJvb2xlYW4gY29tcGFjdDsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0
XSBET01TdHJpbmcgdHlwZTsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZpZGVv
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2MTk1NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDExICsxNTQsNiBAQCB1bnNpZ25lZCBIVE1MVmlkZW9F
bGVtZW50Ojp3aWR0aCgpIGNvbnN0CiAgICAgdW5zaWduZWQgdyA9IGdldEF0dHJpYnV0ZSh3aWR0
aEF0dHIpLnN0cmluZygpLnRvVUludCgmb2spOwogICAgIHJldHVybiBvayA/IHcgOiAwOwogfQot
Ci12b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnNldFdpZHRoKHVuc2lnbmVkIHZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19CiAgICAg
CiB1bnNpZ25lZCBIVE1MVmlkZW9FbGVtZW50OjpoZWlnaHQoKSBjb25zdAogewpAQCAtMTY3LDE2
ICsxNjIsNiBAQCB1bnNpZ25lZCBIVE1MVmlkZW9FbGVtZW50OjpoZWlnaHQoKSBjb25zCiAgICAg
cmV0dXJuIG9rID8gaCA6IDA7CiB9CiAgICAgCi12b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnNldEhl
aWdodCh1bnNpZ25lZCB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgU3Ry
aW5nOjpudW1iZXIodmFsdWUpKTsKLX0KLQotdm9pZCBIVE1MVmlkZW9FbGVtZW50OjpzZXRQb3N0
ZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUocG9zdGVyQXR0ciwg
dmFsdWUpOwotfQotCiBib29sIEhUTUxWaWRlb0VsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cmlidXRlKSBjb25zdAogewogICAgIHJldHVybiBIVE1MTWVkaWFFbGVtZW50Ojpp
c1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgJKHJl
dmlzaW9uIDYxOTU3KQorKysgV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMTUgKzM5LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MVmlkZW9FbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAKICAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lkdGgodW5z
aWduZWQpOwogICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0OwotICAgIHZvaWQgc2V0SGVpZ2h0
KHVuc2lnbmVkKTsKICAgICAKICAgICB1bnNpZ25lZCB2aWRlb1dpZHRoKCkgY29uc3Q7CiAgICAg
dW5zaWduZWQgdmlkZW9IZWlnaHQoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGNvbnN0IEtV
UkwgcG9zdGVyKCkgY29uc3QgeyByZXR1cm4gbV9wb3N0ZXJVUkw7IH0KLSAgICB2b2lkIHNldFBv
c3Rlcihjb25zdCBTdHJpbmcmKTsKIAogICAgIC8vIEZ1bGxzY3JlZW4KICAgICB2b2lkIHdlYmtp
dEVudGVyRnVsbHNjcmVlbihib29sIGlzVXNlckdlc3R1cmUsIEV4Y2VwdGlvbkNvZGUmKTsK
</data>
<flag name="review"
          id="46958"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>