<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugzilla.mozilla.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="20261021.1"
          urlbase="https://bugzilla.mozilla.org/"
          
          maintainer="bmo-mods@mozilla.com"
>

    <bug>
          <bug_id>605271</bug_id>
          
          <filed_via>unknown</filed_via>
          <creation_ts>2010-10-18 14:29:23 -0700</creation_ts>
          <short_desc>Don&apos;t let scripts QI elements to non-classinfo interfaces</short_desc>
          <delta_ts>2019-03-13 06:42:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>Components</classification>
          <product>Core</product>
          <component>DOM: Core &amp; HTML</component>
          <version>Trunk</version>
          <rep_platform>x86</rep_platform>
          <op_sys>macOS</op_sys>
          <bug_type>defect</bug_type>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard>[sg:want P3][post-2.0][not-ready-for-cedar]</status_whiteboard>
          <keywords>dev-doc-needed, sec-want</keywords>
          <priority>--</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>580070</dependson>
    
    <dependson>610267</dependson>
    
    <dependson>841442</dependson>
          <blocked>604556</blocked>
    
    <blocked>604262</blocked>
    
    <blocked>604807</blocked>
    
    <blocked>604841</blocked>
    
    <blocked>605264</blocked>
    
    <blocked>691785</blocked>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jesse Ruderman">jruderman</reporter>
          <assigned_to name="Nobody; OK to take it and work on it">nobody</assigned_to>
          <cc>asmodeusme</cc>
    
    <cc>bholley</cc>
    
    <cc>bzbarsky</cc>
    
    <cc>ehsan.akhgari</cc>
    
    <cc>fullmetaljacket.xp+bugmail</cc>
    
    <cc>gavin.sharp</cc>
    
    <cc>highmind63</cc>
    
    <cc>jonas</cc>
    
    <cc>josh</cc>
    
    <cc>jstenback+bmo</cc>
    
    <cc>khuey</cc>
    
    <cc>matjk7</cc>
    
    <cc>mounir</cc>
    
    <cc>mrbkap</cc>
    
    <cc>peterv</cc>
    
    <cc>reed</cc>
    
    <cc>roc</cc>
    
    <cc>tnikkel</cc>
          
          <cf_geckoview>---</cf_geckoview>
          <cf_blocking_webextensions>---</cf_blocking_webextensions>
          <cf_tracking_win>---</cf_tracking_win>
          <cf_backlog>---</cf_backlog>
          <cf_tracking_e10s>---</cf_tracking_e10s>
          <cf_firefox_messaging_system>---</cf_firefox_messaging_system>
          <cf_tracking_p11>---</cf_tracking_p11>
          <cf_data_science_product_support_area>---</cf_data_science_product_support_area>
          <cf_root_cause>---</cf_root_cause>
          <cf_platform_rel>---</cf_platform_rel>
          <cf_bmo_component_move>---</cf_bmo_component_move>
          <cf_tracking_firefox5>---</cf_tracking_firefox5>
          <cf_status_firefox5>---</cf_status_firefox5>
          <cf_tracking_firefox6>---</cf_tracking_firefox6>
          <cf_status_firefox6>---</cf_status_firefox6>
          <cf_tracking_firefox7>---</cf_tracking_firefox7>
          <cf_status_firefox7>---</cf_status_firefox7>
          <cf_tracking_firefox8>---</cf_tracking_firefox8>
          <cf_status_firefox8>---</cf_status_firefox8>
          <cf_tracking_firefox9>---</cf_tracking_firefox9>
          <cf_status_firefox9>---</cf_status_firefox9>
          <cf_a11y_review_project_flag>---</cf_a11y_review_project_flag>
          <cf_tracking_firefox10>---</cf_tracking_firefox10>
          <cf_status_firefox10>---</cf_status_firefox10>
          <cf_tracking_firefox11>---</cf_tracking_firefox11>
          <cf_status_firefox11>---</cf_status_firefox11>
          <cf_tracking_firefox12>---</cf_tracking_firefox12>
          <cf_status_firefox12>---</cf_status_firefox12>
          <cf_tracking_firefox13>---</cf_tracking_firefox13>
          <cf_status_firefox13>---</cf_status_firefox13>
          <cf_tracking_firefox14>---</cf_tracking_firefox14>
          <cf_status_firefox14>---</cf_status_firefox14>
          <cf_accessibility_severity>---</cf_accessibility_severity>
          <cf_tracking_firefox15>---</cf_tracking_firefox15>
          <cf_status_firefox15>---</cf_status_firefox15>
          <cf_tracking_firefox16>---</cf_tracking_firefox16>
          <cf_status_firefox16>---</cf_status_firefox16>
          <cf_tracking_firefox17>---</cf_tracking_firefox17>
          <cf_status_firefox17>---</cf_status_firefox17>
          <cf_tracking_firefox18>---</cf_tracking_firefox18>
          <cf_status_firefox18>---</cf_status_firefox18>
          <cf_tracking_firefox19>---</cf_tracking_firefox19>
          <cf_install_update_workflow>---</cf_install_update_workflow>
          <cf_status_firefox19>---</cf_status_firefox19>
          <cf_tracking_firefox20>---</cf_tracking_firefox20>
          <cf_status_firefox20>---</cf_status_firefox20>
          <cf_tracking_firefox21>---</cf_tracking_firefox21>
          <cf_status_firefox21>---</cf_status_firefox21>
          <cf_tracking_firefox22>---</cf_tracking_firefox22>
          <cf_status_firefox22>---</cf_status_firefox22>
          <cf_tracking_firefox23>---</cf_tracking_firefox23>
          <cf_status_firefox23>---</cf_status_firefox23>
          <cf_tracking_firefox24>---</cf_tracking_firefox24>
          <cf_status_firefox24>---</cf_status_firefox24>
          <cf_performance_impact>---</cf_performance_impact>
          <cf_tracking_firefox25>---</cf_tracking_firefox25>
          <cf_status_firefox25>---</cf_status_firefox25>
          <cf_tracking_firefox26>---</cf_tracking_firefox26>
          <cf_status_firefox26>---</cf_status_firefox26>
          <cf_tracking_firefox27>---</cf_tracking_firefox27>
          <cf_status_firefox27>---</cf_status_firefox27>
          <cf_tracking_firefox28>---</cf_tracking_firefox28>
          <cf_status_firefox28>---</cf_status_firefox28>
          <cf_tracking_firefox29>---</cf_tracking_firefox29>
          <cf_status_firefox29>---</cf_status_firefox29>
          <cf_size_estimate>---</cf_size_estimate>
          <cf_tracking_firefox30>---</cf_tracking_firefox30>
          <cf_status_firefox30>---</cf_status_firefox30>
          <cf_tracking_firefox31>---</cf_tracking_firefox31>
          <cf_status_firefox31>---</cf_status_firefox31>
          <cf_tracking_firefox32>---</cf_tracking_firefox32>
          <cf_status_firefox32>---</cf_status_firefox32>
          <cf_tracking_firefox33>---</cf_tracking_firefox33>
          <cf_status_firefox33>---</cf_status_firefox33>
          <cf_tracking_firefox34>---</cf_tracking_firefox34>
          <cf_webcompat_priority>---</cf_webcompat_priority>
          <cf_status_firefox34>---</cf_status_firefox34>
          <cf_tracking_firefox35>---</cf_tracking_firefox35>
          <cf_status_firefox35>---</cf_status_firefox35>
          <cf_tracking_firefox36>---</cf_tracking_firefox36>
          <cf_status_firefox36>---</cf_status_firefox36>
          <cf_tracking_firefox37>---</cf_tracking_firefox37>
          <cf_status_firefox37>---</cf_status_firefox37>
          <cf_tracking_firefox38>---</cf_tracking_firefox38>
          <cf_status_firefox38>---</cf_status_firefox38>
          <cf_tracking_firefox38_0_5>---</cf_tracking_firefox38_0_5>
          <cf_tracking_firefox39>---</cf_tracking_firefox39>
          <cf_status_firefox38_0_5>---</cf_status_firefox38_0_5>
          <cf_webcompat_score>---</cf_webcompat_score>
          <cf_status_firefox39>---</cf_status_firefox39>
          <cf_tracking_firefox40>---</cf_tracking_firefox40>
          <cf_status_firefox40>---</cf_status_firefox40>
          <cf_tracking_firefox41>---</cf_tracking_firefox41>
          <cf_status_firefox41>---</cf_status_firefox41>
          <cf_tracking_firefox42>---</cf_tracking_firefox42>
          <cf_status_firefox42>---</cf_status_firefox42>
          <cf_tracking_firefox43>---</cf_tracking_firefox43>
          <cf_status_firefox43>---</cf_status_firefox43>
          <cf_tracking_firefox44>---</cf_tracking_firefox44>
          <cf_status_firefox44>---</cf_status_firefox44>
          <cf_tracking_firefox45>---</cf_tracking_firefox45>
          <cf_status_firefox45>---</cf_status_firefox45>
          <cf_tracking_firefox46>---</cf_tracking_firefox46>
          <cf_status_firefox46>---</cf_status_firefox46>
          <cf_tracking_firefox47>---</cf_tracking_firefox47>
          <cf_status_firefox47>---</cf_status_firefox47>
          <cf_tracking_firefox48>---</cf_tracking_firefox48>
          <cf_status_firefox48>---</cf_status_firefox48>
          <cf_tracking_firefox49>---</cf_tracking_firefox49>
          <cf_status_firefox49>---</cf_status_firefox49>
          <cf_tracking_esr10>---</cf_tracking_esr10>
          <cf_status_esr10>---</cf_status_esr10>
          <cf_tracking_firefox_esr17>---</cf_tracking_firefox_esr17>
          <cf_status_firefox_esr17>---</cf_status_firefox_esr17>
          <cf_tracking_firefox_esr24>---</cf_tracking_firefox_esr24>
          <cf_status_firefox_esr24>---</cf_status_firefox_esr24>
          <cf_tracking_firefox_esr31>---</cf_tracking_firefox_esr31>
          <cf_status_firefox_esr31>---</cf_status_firefox_esr31>
          <cf_tracking_firefox_esr38>---</cf_tracking_firefox_esr38>
          <cf_status_firefox_esr38>---</cf_status_firefox_esr38>
          <cf_tracking_firefox_esr45>---</cf_tracking_firefox_esr45>
          <cf_status_firefox_esr45>---</cf_status_firefox_esr45>
          <cf_tracking_b2g18>---</cf_tracking_b2g18>
          <cf_status_b2g18>---</cf_status_b2g18>
          <cf_status_b2g30>---</cf_status_b2g30>
          <cf_status_b2g18_1_0_0>---</cf_status_b2g18_1_0_0>
          <cf_status_b2g18_1_0_1>---</cf_status_b2g18_1_0_1>
          <cf_status_b2g_1_1_hd>---</cf_status_b2g_1_1_hd>
          <cf_tracking_b2g_v1_2>---</cf_tracking_b2g_v1_2>
          <cf_status_b2g_1_2>---</cf_status_b2g_1_2>
          <cf_tracking_b2g_v1_3>---</cf_tracking_b2g_v1_3>
          <cf_status_b2g_1_3>---</cf_status_b2g_1_3>
          <cf_status_b2g_1_3t>---</cf_status_b2g_1_3t>
          <cf_blocking_20>.x+</cf_blocking_20>
          <cf_status_b2g_1_4>---</cf_status_b2g_1_4>
          <cf_status_20>---</cf_status_20>
          <cf_status_b2g_2_0>---</cf_status_b2g_2_0>
          <cf_status_b2g_2_0m>---</cf_status_b2g_2_0m>
          <cf_status_b2g_2_1>---</cf_status_b2g_2_1>
          <cf_status_b2g_2_1_s>---</cf_status_b2g_2_1_s>
          <cf_status_b2g_2_2>---</cf_status_b2g_2_2>
          <cf_status_b2g_2_5>---</cf_status_b2g_2_5>
          <cf_status_b2g_2_6>---</cf_status_b2g_2_6>
          <cf_status_b2g_2_2r>---</cf_status_b2g_2_2r>
          <cf_blocking_192>---</cf_blocking_192>
          <cf_status_192>---</cf_status_192>
          <cf_blocking_191>---</cf_blocking_191>
          <cf_tracking_fxios>---</cf_tracking_fxios>
          <cf_tracking_nss>---</cf_tracking_nss>
          <cf_status_nss>---</cf_status_nss>
          <cf_tracking_firefox_relnote>---</cf_tracking_firefox_relnote>
          <cf_status_b2g_master>---</cf_status_b2g_master>
          <cf_blocking_fx>---</cf_blocking_fx>
          <cf_status_191>---</cf_status_191>
          <cf_tracking_relnote_b2g>---</cf_tracking_relnote_b2g>
          <cf_tracking_thunderbird_relnote>---</cf_tracking_thunderbird_relnote>
          <cf_status_conduit_push>---</cf_status_conduit_push>
          <cf_tracking_conduit_push>---</cf_tracking_conduit_push>
          <cf_tracking_firefox_sumo>---</cf_tracking_firefox_sumo>
          <cf_status_bmo_push>---</cf_status_bmo_push>
          <cf_tracking_bmo_push>---</cf_tracking_bmo_push>
          <cf_blocking_fennec10>---</cf_blocking_fennec10>
          <cf_blocking_fennec>---</cf_blocking_fennec>
          <cf_blocking_thunderbird33>---</cf_blocking_thunderbird33>
          <cf_status_thunderbird33>---</cf_status_thunderbird33>
          <cf_blocking_thunderbird32>---</cf_blocking_thunderbird32>
          <cf_status_thunderbird32>---</cf_status_thunderbird32>
          <cf_blocking_thunderbird31>---</cf_blocking_thunderbird31>
          <cf_status_thunderbird31>---</cf_status_thunderbird31>
          <cf_blocking_thunderbird30>---</cf_blocking_thunderbird30>
          <cf_status_thunderbird30>---</cf_status_thunderbird30>
          <cf_tracking_thunderbird6>---</cf_tracking_thunderbird6>
          <cf_status_thunderbird6>---</cf_status_thunderbird6>
          <cf_tracking_thunderbird7>---</cf_tracking_thunderbird7>
          <cf_status_thunderbird7>---</cf_status_thunderbird7>
          <cf_tracking_thunderbird8>---</cf_tracking_thunderbird8>
          <cf_status_thunderbird8>---</cf_status_thunderbird8>
          <cf_tracking_thunderbird9>---</cf_tracking_thunderbird9>
          <cf_status_thunderbird9>---</cf_status_thunderbird9>
          <cf_tracking_thunderbird10>---</cf_tracking_thunderbird10>
          <cf_status_thunderbird10>---</cf_status_thunderbird10>
          <cf_tracking_thunderbird11>---</cf_tracking_thunderbird11>
          <cf_status_thunderbird11>---</cf_status_thunderbird11>
          <cf_tracking_thunderbird12>---</cf_tracking_thunderbird12>
          <cf_status_thunderbird12>---</cf_status_thunderbird12>
          <cf_tracking_thunderbird13>---</cf_tracking_thunderbird13>
          <cf_status_thunderbird13>---</cf_status_thunderbird13>
          <cf_tracking_thunderbird14>---</cf_tracking_thunderbird14>
          <cf_status_thunderbird14>---</cf_status_thunderbird14>
          <cf_tracking_thunderbird15>---</cf_tracking_thunderbird15>
          <cf_status_thunderbird15>---</cf_status_thunderbird15>
          <cf_tracking_thunderbird16>---</cf_tracking_thunderbird16>
          <cf_status_thunderbird16>---</cf_status_thunderbird16>
          <cf_tracking_thunderbird17>---</cf_tracking_thunderbird17>
          <cf_status_thunderbird17>---</cf_status_thunderbird17>
          <cf_tracking_thunderbird18>---</cf_tracking_thunderbird18>
          <cf_status_thunderbird18>---</cf_status_thunderbird18>
          <cf_tracking_thunderbird19>---</cf_tracking_thunderbird19>
          <cf_status_thunderbird19>---</cf_status_thunderbird19>
          <cf_tracking_thunderbird20>---</cf_tracking_thunderbird20>
          <cf_status_thunderbird20>---</cf_status_thunderbird20>
          <cf_tracking_thunderbird21>---</cf_tracking_thunderbird21>
          <cf_status_thunderbird21>---</cf_status_thunderbird21>
          <cf_tracking_thunderbird22>---</cf_tracking_thunderbird22>
          <cf_status_thunderbird22>---</cf_status_thunderbird22>
          <cf_tracking_thunderbird23>---</cf_tracking_thunderbird23>
          <cf_status_thunderbird23>---</cf_status_thunderbird23>
          <cf_tracking_thunderbird24>---</cf_tracking_thunderbird24>
          <cf_status_thunderbird24>---</cf_status_thunderbird24>
          <cf_tracking_thunderbird25>---</cf_tracking_thunderbird25>
          <cf_status_thunderbird25>---</cf_status_thunderbird25>
          <cf_tracking_thunderbird26>---</cf_tracking_thunderbird26>
          <cf_status_thunderbird26>---</cf_status_thunderbird26>
          <cf_tracking_thunderbird27>---</cf_tracking_thunderbird27>
          <cf_status_thunderbird27>---</cf_status_thunderbird27>
          <cf_tracking_thunderbird28>---</cf_tracking_thunderbird28>
          <cf_status_thunderbird28>---</cf_status_thunderbird28>
          <cf_tracking_thunderbird29>---</cf_tracking_thunderbird29>
          <cf_status_thunderbird29>---</cf_status_thunderbird29>
          <cf_tracking_thunderbird_30>---</cf_tracking_thunderbird_30>
          <cf_status_thunderbird_30>---</cf_status_thunderbird_30>
          <cf_tracking_thunderbird_31>---</cf_tracking_thunderbird_31>
          <cf_status_thunderbird_31>---</cf_status_thunderbird_31>
          <cf_tracking_thunderbird_32>---</cf_tracking_thunderbird_32>
          <cf_status_thunderbird_32>---</cf_status_thunderbird_32>
          <cf_tracking_thunderbird_esr10>---</cf_tracking_thunderbird_esr10>
          <cf_status_thunderbird_esr10>---</cf_status_thunderbird_esr10>
          <cf_tracking_thunderbird_esr17>---</cf_tracking_thunderbird_esr17>
          <cf_status_thunderbird_esr17>---</cf_status_thunderbird_esr17>
          <cf_tracking_thunderbird_33>---</cf_tracking_thunderbird_33>
          <cf_status_thunderbird_33>---</cf_status_thunderbird_33>
          <cf_tracking_thunderbird_34>---</cf_tracking_thunderbird_34>
          <cf_status_thunderbird_34>---</cf_status_thunderbird_34>
          <cf_tracking_thunderbird_35>---</cf_tracking_thunderbird_35>
          <cf_status_thunderbird_35>---</cf_status_thunderbird_35>
          <cf_tracking_thunderbird_36>---</cf_tracking_thunderbird_36>
          <cf_status_thunderbird_36>---</cf_status_thunderbird_36>
          <cf_tracking_thunderbird_37>---</cf_tracking_thunderbird_37>
          <cf_status_thunderbird_37>---</cf_status_thunderbird_37>
          <cf_tracking_thunderbird_38>---</cf_tracking_thunderbird_38>
          <cf_status_thunderbird_38>---</cf_status_thunderbird_38>
          <cf_tracking_thunderbird_39>---</cf_tracking_thunderbird_39>
          <cf_status_thunderbird_39>---</cf_status_thunderbird_39>
          <cf_tracking_thunderbird_40>---</cf_tracking_thunderbird_40>
          <cf_status_thunderbird_40>---</cf_status_thunderbird_40>
          <cf_tracking_thunderbird_41>---</cf_tracking_thunderbird_41>
          <cf_blocking_seamonkey21>---</cf_blocking_seamonkey21>
          <cf_status_seamonkey21>---</cf_status_seamonkey21>
          <cf_status_thunderbird_41>---</cf_status_thunderbird_41>
          <cf_tracking_thunderbird_42>---</cf_tracking_thunderbird_42>
          <cf_tracking_seamonkey22>---</cf_tracking_seamonkey22>
          <cf_status_thunderbird_42>---</cf_status_thunderbird_42>
          <cf_status_seamonkey22>---</cf_status_seamonkey22>
          <cf_tracking_thunderbird_43>---</cf_tracking_thunderbird_43>
          <cf_tracking_seamonkey23>---</cf_tracking_seamonkey23>
          <cf_status_thunderbird_43>---</cf_status_thunderbird_43>
          <cf_status_seamonkey23>---</cf_status_seamonkey23>
          <cf_tracking_thunderbird_44>---</cf_tracking_thunderbird_44>
          <cf_tracking_seamonkey24>---</cf_tracking_seamonkey24>
          <cf_status_seamonkey24>---</cf_status_seamonkey24>
          <cf_status_thunderbird_44>---</cf_status_thunderbird_44>
          <cf_tracking_seamonkey25>---</cf_tracking_seamonkey25>
          <cf_status_seamonkey25>---</cf_status_seamonkey25>
          <cf_tracking_seamonkey26>---</cf_tracking_seamonkey26>
          <cf_status_seamonkey26>---</cf_status_seamonkey26>
          <cf_tracking_seamonkey27>---</cf_tracking_seamonkey27>
          <cf_status_seamonkey27>---</cf_status_seamonkey27>
          <cf_tracking_seamonkey28>---</cf_tracking_seamonkey28>
          <cf_status_seamonkey28>---</cf_status_seamonkey28>
          <cf_tracking_seamonkey29>---</cf_tracking_seamonkey29>
          <cf_status_seamonkey29>---</cf_status_seamonkey29>
          <cf_tracking_seamonkey210>---</cf_tracking_seamonkey210>
          <cf_status_seamonkey210>---</cf_status_seamonkey210>
          <cf_tracking_seamonkey211>---</cf_tracking_seamonkey211>
          <cf_status_seamonkey211>---</cf_status_seamonkey211>
          <cf_tracking_seamonkey212>---</cf_tracking_seamonkey212>
          <cf_status_seamonkey212>---</cf_status_seamonkey212>
          <cf_tracking_seamonkey213>---</cf_tracking_seamonkey213>
          <cf_status_seamonkey213>---</cf_status_seamonkey213>
          <cf_tracking_seamonkey214>---</cf_tracking_seamonkey214>
          <cf_status_seamonkey214>---</cf_status_seamonkey214>
          <cf_tracking_seamonkey215>---</cf_tracking_seamonkey215>
          <cf_status_seamonkey215>---</cf_status_seamonkey215>
          <cf_tracking_seamonkey216>---</cf_tracking_seamonkey216>
          <cf_status_seamonkey216>---</cf_status_seamonkey216>
          <cf_tracking_seamonkey217>---</cf_tracking_seamonkey217>
          <cf_status_seamonkey217>---</cf_status_seamonkey217>
          <cf_tracking_seamonkey218>---</cf_tracking_seamonkey218>
          <cf_status_seamonkey218>---</cf_status_seamonkey218>
          <cf_tracking_seamonkey219>---</cf_tracking_seamonkey219>
          <cf_status_seamonkey219>---</cf_status_seamonkey219>
          <cf_tracking_seamonkey220>---</cf_tracking_seamonkey220>
          <cf_status_seamonkey220>---</cf_status_seamonkey220>
          <cf_tracking_seamonkey221>---</cf_tracking_seamonkey221>
          <cf_status_seamonkey221>---</cf_status_seamonkey221>
          <cf_tracking_seamonkey222>---</cf_tracking_seamonkey222>
          <cf_status_seamonkey222>---</cf_status_seamonkey222>
          <cf_tracking_seamonkey223>---</cf_tracking_seamonkey223>
          <cf_status_seamonkey223>---</cf_status_seamonkey223>
          <cf_tracking_seamonkey224>---</cf_tracking_seamonkey224>
          <cf_tracking_thunderbird_45>---</cf_tracking_thunderbird_45>
          <cf_status_thunderbird_45>---</cf_status_thunderbird_45>
          <cf_tracking_thunderbird_46>---</cf_tracking_thunderbird_46>
          <cf_status_thunderbird_46>---</cf_status_thunderbird_46>
          <cf_status_seamonkey224>---</cf_status_seamonkey224>
          <cf_tracking_thunderbird_47>---</cf_tracking_thunderbird_47>
          <cf_status_thunderbird_47>---</cf_status_thunderbird_47>
          <cf_tracking_thunderbird_48>---</cf_tracking_thunderbird_48>
          <cf_tracking_seamonkey225>---</cf_tracking_seamonkey225>
          <cf_status_thunderbird_48>---</cf_status_thunderbird_48>
          <cf_tracking_thunderbird_49>---</cf_tracking_thunderbird_49>
          <cf_status_thunderbird_49>---</cf_status_thunderbird_49>
          <cf_tracking_thunderbird_50>---</cf_tracking_thunderbird_50>
          <cf_status_thunderbird_50>---</cf_status_thunderbird_50>
          <cf_status_seamonkey225>---</cf_status_seamonkey225>
          <cf_status_seamonkey226>---</cf_status_seamonkey226>
          <cf_tracking_seamonkey226>---</cf_tracking_seamonkey226>
          <cf_status_seamonkey227>---</cf_status_seamonkey227>
          <cf_tracking_seamonkey227>---</cf_tracking_seamonkey227>
          <cf_status_seamonkey228>---</cf_status_seamonkey228>
          <cf_tracking_seamonkey228>---</cf_tracking_seamonkey228>
          <cf_status_seamonkey229>---</cf_status_seamonkey229>
          <cf_tracking_seamonkey229>---</cf_tracking_seamonkey229>
          <cf_colo_site>---</cf_colo_site>
          <cf_tracking_thunderbird_esr24>---</cf_tracking_thunderbird_esr24>
          <cf_status_thunderbird_esr24>---</cf_status_thunderbird_esr24>
          <cf_tracking_thunderbird_esr31>---</cf_tracking_thunderbird_esr31>
          <cf_status_thunderbird_esr31>---</cf_status_thunderbird_esr31>
          <cf_tracking_thunderbird_esr38>---</cf_tracking_thunderbird_esr38>
          <cf_status_seamonkey230>---</cf_status_seamonkey230>
          <cf_status_thunderbird_esr38>---</cf_status_thunderbird_esr38>
          <cf_tracking_thunderbird_esr45>---</cf_tracking_thunderbird_esr45>
          <cf_status_thunderbird_esr45>---</cf_status_thunderbird_esr45>
          <cf_tracking_thunderbird_esr52>---</cf_tracking_thunderbird_esr52>
          <cf_status_thunderbird_esr52>---</cf_status_thunderbird_esr52>
          <cf_tracking_seamonkey230>---</cf_tracking_seamonkey230>
          <cf_office>---</cf_office>
          <cf_tracking_thunderbird_esr60>---</cf_tracking_thunderbird_esr60>
          <cf_status_thunderbird_esr60>---</cf_status_thunderbird_esr60>
          <cf_status_seamonkey231>---</cf_status_seamonkey231>
          <cf_tracking_thunderbird_esr68>---</cf_tracking_thunderbird_esr68>
          <cf_status_thunderbird_esr68>---</cf_status_thunderbird_esr68>
          <cf_tracking_seamonkey231>---</cf_tracking_seamonkey231>
          <cf_status_seamonkey232>---</cf_status_seamonkey232>
          <cf_tracking_thunderbird_esr78>---</cf_tracking_thunderbird_esr78>
          <cf_status_thunderbird_esr78>---</cf_status_thunderbird_esr78>
          <cf_tracking_thunderbird_51>---</cf_tracking_thunderbird_51>
          <cf_tracking_seamonkey232>---</cf_tracking_seamonkey232>
          <cf_status_thunderbird_51>---</cf_status_thunderbird_51>
          <cf_tracking_thunderbird_52>---</cf_tracking_thunderbird_52>
          <cf_tracking_thunderbird_esr91>---</cf_tracking_thunderbird_esr91>
          <cf_status_thunderbird_52>---</cf_status_thunderbird_52>
          <cf_tracking_thunderbird_53>---</cf_tracking_thunderbird_53>
          <cf_status_thunderbird_esr91>---</cf_status_thunderbird_esr91>
          <cf_tracking_seamonkey233>---</cf_tracking_seamonkey233>
          <cf_status_thunderbird_53>---</cf_status_thunderbird_53>
          <cf_tracking_thunderbird_54>---</cf_tracking_thunderbird_54>
          <cf_status_thunderbird_54>---</cf_status_thunderbird_54>
          <cf_tracking_thunderbird_esr102>---</cf_tracking_thunderbird_esr102>
          <cf_tracking_thunderbird_55>---</cf_tracking_thunderbird_55>
          <cf_status_thunderbird_55>---</cf_status_thunderbird_55>
          <cf_status_thunderbird_esr102>---</cf_status_thunderbird_esr102>
          <cf_status_seamonkey233>---</cf_status_seamonkey233>
          <cf_tracking_thunderbird_56>---</cf_tracking_thunderbird_56>
          <cf_status_thunderbird_56>---</cf_status_thunderbird_56>
          <cf_tracking_thunderbird_57>---</cf_tracking_thunderbird_57>
          <cf_tracking_seamonkey234>---</cf_tracking_seamonkey234>
          <cf_status_thunderbird_57>---</cf_status_thunderbird_57>
          <cf_tracking_thunderbird_58>---</cf_tracking_thunderbird_58>
          <cf_status_thunderbird_58>---</cf_status_thunderbird_58>
          <cf_status_seamonkey234>---</cf_status_seamonkey234>
          <cf_tracking_thunderbird_59>---</cf_tracking_thunderbird_59>
          <cf_status_thunderbird_59>---</cf_status_thunderbird_59>
          <cf_tracking_seamonkey235>---</cf_tracking_seamonkey235>
          <cf_tracking_thunderbird_60>---</cf_tracking_thunderbird_60>
          <cf_status_thunderbird_60>---</cf_status_thunderbird_60>
          <cf_status_seamonkey235>---</cf_status_seamonkey235>
          <cf_tracking_thunderbird_61>---</cf_tracking_thunderbird_61>
          <cf_status_thunderbird_61>---</cf_status_thunderbird_61>
          <cf_tracking_seamonkey236>---</cf_tracking_seamonkey236>
          <cf_tracking_thunderbird_62>---</cf_tracking_thunderbird_62>
          <cf_status_thunderbird_62>---</cf_status_thunderbird_62>
          <cf_status_seamonkey236>---</cf_status_seamonkey236>
          <cf_tracking_thunderbird_63>---</cf_tracking_thunderbird_63>
          <cf_status_thunderbird_63>---</cf_status_thunderbird_63>
          <cf_tracking_thunderbird_64>---</cf_tracking_thunderbird_64>
          <cf_status_thunderbird_64>---</cf_status_thunderbird_64>
          <cf_tracking_seamonkey237>---</cf_tracking_seamonkey237>
          <cf_tracking_thunderbird_65>---</cf_tracking_thunderbird_65>
          <cf_status_thunderbird_65>---</cf_status_thunderbird_65>
          <cf_status_seamonkey237>---</cf_status_seamonkey237>
          <cf_tracking_thunderbird_66>---</cf_tracking_thunderbird_66>
          <cf_status_thunderbird_66>---</cf_status_thunderbird_66>
          <cf_tracking_thunderbird_67>---</cf_tracking_thunderbird_67>
          <cf_status_thunderbird_67>---</cf_status_thunderbird_67>
          <cf_tracking_thunderbird_68>---</cf_tracking_thunderbird_68>
          <cf_tracking_seamonkey238>---</cf_tracking_seamonkey238>
          <cf_status_thunderbird_68>---</cf_status_thunderbird_68>
          <cf_status_thunderbird_69>---</cf_status_thunderbird_69>
          <cf_status_seamonkey238>---</cf_status_seamonkey238>
          <cf_tracking_thunderbird_69>---</cf_tracking_thunderbird_69>
          <cf_tracking_seamonkey239>---</cf_tracking_seamonkey239>
          <cf_status_thunderbird_70>---</cf_status_thunderbird_70>
          <cf_status_seamonkey239>---</cf_status_seamonkey239>
          <cf_crash_signature></cf_crash_signature>
          <cf_tracking_thunderbird_70>---</cf_tracking_thunderbird_70>
          <cf_tracking_seamonkey240>---</cf_tracking_seamonkey240>
          <cf_status_seamonkey240>---</cf_status_seamonkey240>
          <cf_status_thunderbird_71>---</cf_status_thunderbird_71>
          
          <cf_tracking_thunderbird_71>---</cf_tracking_thunderbird_71>
          <cf_tracking_seamonkey241>---</cf_tracking_seamonkey241>
          <cf_status_seamonkey241>---</cf_status_seamonkey241>
          <cf_status_thunderbird_72>---</cf_status_thunderbird_72>
          <cf_tracking_thunderbird_72>---</cf_tracking_thunderbird_72>
          <cf_tracking_seamonkey242>---</cf_tracking_seamonkey242>
          <cf_status_seamonkey242>---</cf_status_seamonkey242>
          <cf_status_thunderbird_73>---</cf_status_thunderbird_73>
          <cf_tracking_thunderbird_73>---</cf_tracking_thunderbird_73>
          <cf_tracking_seamonkey243>---</cf_tracking_seamonkey243>
          <cf_status_seamonkey243>---</cf_status_seamonkey243>
          <cf_status_thunderbird_74>---</cf_status_thunderbird_74>
          <cf_status_thunderbird_75>---</cf_status_thunderbird_75>
          <cf_tracking_thunderbird_74>---</cf_tracking_thunderbird_74>
          <cf_tracking_seamonkey244>---</cf_tracking_seamonkey244>
          <cf_status_thunderbird_76>---</cf_status_thunderbird_76>
          <cf_tracking_thunderbird_75>---</cf_tracking_thunderbird_75>
          <cf_status_seamonkey244>---</cf_status_seamonkey244>
          <cf_status_thunderbird_77>---</cf_status_thunderbird_77>
          <cf_tracking_thunderbird_76>---</cf_tracking_thunderbird_76>
          <cf_tracking_seamonkey245>---</cf_tracking_seamonkey245>
          <cf_status_thunderbird_78>---</cf_status_thunderbird_78>
          <cf_status_seamonkey245>---</cf_status_seamonkey245>
          <cf_tracking_thunderbird_77>---</cf_tracking_thunderbird_77>
          <cf_status_thunderbird_79>---</cf_status_thunderbird_79>
          <cf_tracking_seamonkey246>---</cf_tracking_seamonkey246>
          <cf_tracking_thunderbird_78>---</cf_tracking_thunderbird_78>
          <cf_tracking_thunderbird_79>---</cf_tracking_thunderbird_79>
          <cf_status_thunderbird_80>---</cf_status_thunderbird_80>
          <cf_status_seamonkey246>---</cf_status_seamonkey246>
          <cf_tracking_thunderbird_80>---</cf_tracking_thunderbird_80>
          <cf_status_thunderbird_81>---</cf_status_thunderbird_81>
          <cf_tracking_seamonkey247>---</cf_tracking_seamonkey247>
          <cf_tracking_thunderbird_81>---</cf_tracking_thunderbird_81>
          <cf_status_thunderbird_82>---</cf_status_thunderbird_82>
          <cf_status_seamonkey247>---</cf_status_seamonkey247>
          <cf_tracking_thunderbird_82>---</cf_tracking_thunderbird_82>
          <cf_status_thunderbird_83>---</cf_status_thunderbird_83>
          <cf_tracking_seamonkey248>---</cf_tracking_seamonkey248>
          <cf_tracking_thunderbird_83>---</cf_tracking_thunderbird_83>
          <cf_status_thunderbird_84>---</cf_status_thunderbird_84>
          <cf_status_seamonkey248>---</cf_status_seamonkey248>
          <cf_tracking_thunderbird_84>---</cf_tracking_thunderbird_84>
          <cf_status_thunderbird_85>---</cf_status_thunderbird_85>
          <cf_tracking_thunderbird_85>---</cf_tracking_thunderbird_85>
          <cf_blocking_kilimanjaro>---</cf_blocking_kilimanjaro>
          <cf_status_thunderbird_86>---</cf_status_thunderbird_86>
          <cf_tracking_thunderbird_86>---</cf_tracking_thunderbird_86>
          <cf_status_thunderbird_87>---</cf_status_thunderbird_87>
          <cf_blocking_b2g>---</cf_blocking_b2g>
          <cf_tracking_seamonkey249>---</cf_tracking_seamonkey249>
          <cf_tracking_thunderbird_87>---</cf_tracking_thunderbird_87>
          <cf_status_thunderbird_88>---</cf_status_thunderbird_88>
          <cf_blocking_basecamp>---</cf_blocking_basecamp>
          <cf_status_seamonkey249>---</cf_status_seamonkey249>
          <cf_tracking_thunderbird_88>---</cf_tracking_thunderbird_88>
          <cf_feature_b2g>---</cf_feature_b2g>
          <cf_status_thunderbird_89>---</cf_status_thunderbird_89>
          <cf_tracking_seamonkey250>---</cf_tracking_seamonkey250>
          <cf_tracking_thunderbird_89>---</cf_tracking_thunderbird_89>
          <cf_tracking_b2g>---</cf_tracking_b2g>
          <cf_status_seamonkey250>---</cf_status_seamonkey250>
          <cf_status_thunderbird_90>---</cf_status_thunderbird_90>
          <cf_ux_b2g>---</cf_ux_b2g>
          <cf_tracking_thunderbird_90>---</cf_tracking_thunderbird_90>
          <cf_b2g_ota_blocker>---</cf_b2g_ota_blocker>
          <cf_tracking_seamonkey251>---</cf_tracking_seamonkey251>
          <cf_status_thunderbird_91>---</cf_status_thunderbird_91>
          <cf_tracking_thunderbird_91>---</cf_tracking_thunderbird_91>
          <cf_status_seamonkey251>---</cf_status_seamonkey251>
          <cf_status_thunderbird_92>---</cf_status_thunderbird_92>
          <cf_tracking_thunderbird_92>---</cf_tracking_thunderbird_92>
          <cf_status_thunderbird_93>---</cf_status_thunderbird_93>
          <cf_tracking_seamonkey252>---</cf_tracking_seamonkey252>
          <cf_tracking_thunderbird_93>---</cf_tracking_thunderbird_93>
          <cf_status_seamonkey252>---</cf_status_seamonkey252>
          <cf_status_thunderbird_94>---</cf_status_thunderbird_94>
          <cf_tracking_thunderbird_94>---</cf_tracking_thunderbird_94>
          <cf_status_seamonkey253>---</cf_status_seamonkey253>
          <cf_status_thunderbird_95>---</cf_status_thunderbird_95>
          <cf_tracking_thunderbird_95>---</cf_tracking_thunderbird_95>
          <cf_tracking_seamonkey253>---</cf_tracking_seamonkey253>
          <cf_tracking_seamonkey254>---</cf_tracking_seamonkey254>
          <cf_status_thunderbird_96>---</cf_status_thunderbird_96>
          <cf_tracking_thunderbird_96>---</cf_tracking_thunderbird_96>
          <cf_status_seamonkey254>---</cf_status_seamonkey254>
          <cf_status_thunderbird_97>---</cf_status_thunderbird_97>
          <cf_tracking_thunderbird_97>---</cf_tracking_thunderbird_97>
          <cf_tracking_seamonkey255>---</cf_tracking_seamonkey255>
          <cf_status_thunderbird_98>---</cf_status_thunderbird_98>
          <cf_tracking_thunderbird_98>---</cf_tracking_thunderbird_98>
          <cf_status_seamonkey255>---</cf_status_seamonkey255>
          <cf_status_thunderbird_99>---</cf_status_thunderbird_99>
          <cf_tracking_thunderbird_99>---</cf_tracking_thunderbird_99>
          <cf_status_thunderbird_100>---</cf_status_thunderbird_100>
          <cf_status_seamonkey256>---</cf_status_seamonkey256>
          <cf_tracking_thunderbird_100>---</cf_tracking_thunderbird_100>
          <cf_status_thunderbird_101>---</cf_status_thunderbird_101>
          <cf_tracking_seamonkey256>---</cf_tracking_seamonkey256>
          <cf_status_seamonkey257esr>---</cf_status_seamonkey257esr>
          <cf_tracking_thunderbird_101>---</cf_tracking_thunderbird_101>
          <cf_tracking_seamonkey257esr>---</cf_tracking_seamonkey257esr>
          <cf_status_thunderbird_102>---</cf_status_thunderbird_102>
          <cf_tracking_thunderbird_102>---</cf_tracking_thunderbird_102>
          <cf_status_seamonkey258>---</cf_status_seamonkey258>
          <cf_status_thunderbird_103>---</cf_status_thunderbird_103>
          <cf_tracking_thunderbird_103>---</cf_tracking_thunderbird_103>
          <cf_tracking_seamonkey258>---</cf_tracking_seamonkey258>
          <cf_status_thunderbird_104>---</cf_status_thunderbird_104>
          <cf_tracking_thunderbird_104>---</cf_tracking_thunderbird_104>
          <cf_status_thunderbird_105>---</cf_status_thunderbird_105>
          <cf_status_seamonkey259>---</cf_status_seamonkey259>
          <cf_tracking_thunderbird_105>---</cf_tracking_thunderbird_105>
          <cf_tracking_thunderbird_esr115>---</cf_tracking_thunderbird_esr115>
          <cf_tracking_seamonkey259>---</cf_tracking_seamonkey259>
          <cf_status_thunderbird_106>---</cf_status_thunderbird_106>
          <cf_status_fxios_v1_0>---</cf_status_fxios_v1_0>
          <cf_tracking_thunderbird_106>---</cf_tracking_thunderbird_106>
          <cf_status_thunderbird_esr115>---</cf_status_thunderbird_esr115>
          <cf_status_fxios_v1_1>---</cf_status_fxios_v1_1>
          <cf_status_fxios_v1_0_5>---</cf_status_fxios_v1_0_5>
          <cf_status_fxios_v2_0>---</cf_status_fxios_v2_0>
          <cf_status_fxios_v3_0>---</cf_status_fxios_v3_0>
          <cf_status_seamonkey260>---</cf_status_seamonkey260>
          <cf_tracking_thunderbird_esr128>---</cf_tracking_thunderbird_esr128>
          <cf_status_thunderbird_107>---</cf_status_thunderbird_107>
          <cf_status_fxios_v4_0>---</cf_status_fxios_v4_0>
          <cf_tracking_thunderbird_107>---</cf_tracking_thunderbird_107>
          <cf_status_thunderbird_esr128>---</cf_status_thunderbird_esr128>
          <cf_tracking_thunderbird_esr140>---</cf_tracking_thunderbird_esr140>
          <cf_tracking_seamonkey260>---</cf_tracking_seamonkey260>
          <cf_status_thunderbird_108>---</cf_status_thunderbird_108>
          <cf_status_fxios_v5_0>---</cf_status_fxios_v5_0>
          <cf_tracking_thunderbird_108>---</cf_tracking_thunderbird_108>
          <cf_status_fxios_v5_1>---</cf_status_fxios_v5_1>
          <cf_status_thunderbird_esr140>---</cf_status_thunderbird_esr140>
          <cf_status_fxios_v5_2>---</cf_status_fxios_v5_2>
          <cf_status_fxios_v5_3>---</cf_status_fxios_v5_3>
          <cf_status_fxios_v6_0>---</cf_status_fxios_v6_0>
          <cf_tracking_thunderbird_esr153>---</cf_tracking_thunderbird_esr153>
          <cf_status_thunderbird_109>---</cf_status_thunderbird_109>
          <cf_status_thunderbird_esr153>---</cf_status_thunderbird_esr153>
          <cf_tracking_thunderbird_109>---</cf_tracking_thunderbird_109>
          <cf_status_fxios_v6_1>---</cf_status_fxios_v6_1>
          <cf_status_fxios_v7_0>---</cf_status_fxios_v7_0>
          <cf_status_thunderbird_110>---</cf_status_thunderbird_110>
          <cf_tracking_thunderbird_110>---</cf_tracking_thunderbird_110>
          <cf_status_fxios_v7_1>---</cf_status_fxios_v7_1>
          <cf_status_thunderbird_111>---</cf_status_thunderbird_111>
          <cf_status_fxios_v7_2>---</cf_status_fxios_v7_2>
          <cf_tracking_thunderbird_111>---</cf_tracking_thunderbird_111>
          <cf_status_fxios_v7_3>---</cf_status_fxios_v7_3>
          <cf_status_thunderbird_112>---</cf_status_thunderbird_112>
          <cf_tracking_thunderbird_112>---</cf_tracking_thunderbird_112>
          <cf_status_fxios_v7_4>---</cf_status_fxios_v7_4>
          <cf_status_fxios_v7_5>---</cf_status_fxios_v7_5>
          <cf_status_fxios_v7_6>---</cf_status_fxios_v7_6>
          <cf_status_thunderbird_113>---</cf_status_thunderbird_113>
          <cf_tracking_thunderbird_113>---</cf_tracking_thunderbird_113>
          <cf_status_thunderbird_114>---</cf_status_thunderbird_114>
          <cf_tracking_seamonkey263>---</cf_tracking_seamonkey263>
          <cf_tracking_thunderbird_114>---</cf_tracking_thunderbird_114>
          <cf_status_thunderbird_115>---</cf_status_thunderbird_115>
          <cf_status_seamonkey263>---</cf_status_seamonkey263>
          <cf_tracking_thunderbird_115>---</cf_tracking_thunderbird_115>
          
          <cf_status_thunderbird_116>---</cf_status_thunderbird_116>
          <cf_tracking_thunderbird_116>---</cf_tracking_thunderbird_116>
          <cf_status_thunderbird_117>---</cf_status_thunderbird_117>
          <cf_tracking_thunderbird_117>---</cf_tracking_thunderbird_117>
          <cf_status_thunderbird_118>---</cf_status_thunderbird_118>
          <cf_tracking_thunderbird_118>---</cf_tracking_thunderbird_118>
          <cf_status_thunderbird_119>---</cf_status_thunderbird_119>
          <cf_tracking_thunderbird_119>---</cf_tracking_thunderbird_119>
          <cf_status_thunderbird_120>---</cf_status_thunderbird_120>
          <cf_tracking_thunderbird_120>---</cf_tracking_thunderbird_120>
          <cf_status_thunderbird_121>---</cf_status_thunderbird_121>
          <cf_tracking_thunderbird_121>---</cf_tracking_thunderbird_121>
          <cf_status_thunderbird_122>---</cf_status_thunderbird_122>
          <cf_tracking_thunderbird_122>---</cf_tracking_thunderbird_122>
          <cf_status_thunderbird_123>---</cf_status_thunderbird_123>
          <cf_tracking_thunderbird_123>---</cf_tracking_thunderbird_123>
          <cf_status_thunderbird_124>---</cf_status_thunderbird_124>
          <cf_tracking_thunderbird_124>---</cf_tracking_thunderbird_124>
          <cf_status_thunderbird_125>---</cf_status_thunderbird_125>
          <cf_tracking_thunderbird_125>---</cf_tracking_thunderbird_125>
          <cf_status_thunderbird_126>---</cf_status_thunderbird_126>
          <cf_tracking_thunderbird_126>---</cf_tracking_thunderbird_126>
          <cf_status_thunderbird_127>---</cf_status_thunderbird_127>
          <cf_tracking_thunderbird_127>---</cf_tracking_thunderbird_127>
          <cf_status_thunderbird_128>---</cf_status_thunderbird_128>
          <cf_tracking_thunderbird_128>---</cf_tracking_thunderbird_128>
          <cf_status_thunderbird_129>---</cf_status_thunderbird_129>
          <cf_tracking_thunderbird_129>---</cf_tracking_thunderbird_129>
          <cf_status_thunderbird_130>---</cf_status_thunderbird_130>
          <cf_tracking_thunderbird_130>---</cf_tracking_thunderbird_130>
          <cf_status_thunderbird_131>---</cf_status_thunderbird_131>
          <cf_tracking_thunderbird_131>---</cf_tracking_thunderbird_131>
          <cf_status_thunderbird_132>---</cf_status_thunderbird_132>
          <cf_tracking_thunderbird_132>---</cf_tracking_thunderbird_132>
          <cf_status_thunderbird_133>---</cf_status_thunderbird_133>
          <cf_tracking_thunderbird_133>---</cf_tracking_thunderbird_133>
          <cf_status_thunderbird_134>---</cf_status_thunderbird_134>
          <cf_tracking_thunderbird_134>---</cf_tracking_thunderbird_134>
          <cf_status_thunderbird_135>---</cf_status_thunderbird_135>
          <cf_tracking_thunderbird_135>---</cf_tracking_thunderbird_135>
          <cf_last_resolved>2013-12-04 03:01:24</cf_last_resolved>
          <cf_status_thunderbird_136>---</cf_status_thunderbird_136>
          <cf_tracking_thunderbird_136>---</cf_tracking_thunderbird_136>
          <cf_status_thunderbird_137>---</cf_status_thunderbird_137>
          <cf_tracking_thunderbird_137>---</cf_tracking_thunderbird_137>
          <cf_status_thunderbird_138>---</cf_status_thunderbird_138>
          <cf_tracking_thunderbird_138>---</cf_tracking_thunderbird_138>
          <cf_status_thunderbird_139>---</cf_status_thunderbird_139>
          <cf_tracking_thunderbird_139>---</cf_tracking_thunderbird_139>
          <cf_status_thunderbird_140>---</cf_status_thunderbird_140>
          <cf_tracking_thunderbird_140>---</cf_tracking_thunderbird_140>
          <cf_status_thunderbird_141>---</cf_status_thunderbird_141>
          <cf_tracking_thunderbird_141>---</cf_tracking_thunderbird_141>
          <cf_status_thunderbird_142>---</cf_status_thunderbird_142>
          <cf_tracking_thunderbird_142>---</cf_tracking_thunderbird_142>
          <cf_status_thunderbird_143>---</cf_status_thunderbird_143>
          <cf_tracking_thunderbird_143>---</cf_tracking_thunderbird_143>
          <cf_status_thunderbird_144>---</cf_status_thunderbird_144>
          <cf_tracking_thunderbird_144>---</cf_tracking_thunderbird_144>
          <cf_status_thunderbird_145>---</cf_status_thunderbird_145>
          <cf_tracking_thunderbird_145>---</cf_tracking_thunderbird_145>
          <cf_status_thunderbird_146>---</cf_status_thunderbird_146>
          <cf_tracking_thunderbird_146>---</cf_tracking_thunderbird_146>
          <cf_status_thunderbird_147>---</cf_status_thunderbird_147>
          <cf_tracking_thunderbird_147>---</cf_tracking_thunderbird_147>
          <cf_status_thunderbird_148>---</cf_status_thunderbird_148>
          <cf_tracking_thunderbird_148>---</cf_tracking_thunderbird_148>
          <cf_status_thunderbird_149>---</cf_status_thunderbird_149>
          <cf_tracking_thunderbird_149>---</cf_tracking_thunderbird_149>
          <cf_status_thunderbird_150>---</cf_status_thunderbird_150>
          <cf_tracking_thunderbird_150>---</cf_tracking_thunderbird_150>
          <cf_status_thunderbird_151>---</cf_status_thunderbird_151>
          <cf_tracking_thunderbird_151>---</cf_tracking_thunderbird_151>
          <cf_status_thunderbird_152>---</cf_status_thunderbird_152>
          <cf_tracking_thunderbird_152>---</cf_tracking_thunderbird_152>
          <cf_status_thunderbird_153>---</cf_status_thunderbird_153>
          <cf_tracking_thunderbird_153>---</cf_tracking_thunderbird_153>
          <cf_status_thunderbird_154>---</cf_status_thunderbird_154>
          <cf_tracking_thunderbird_154>---</cf_tracking_thunderbird_154>
          <cf_status_thunderbird_155>---</cf_status_thunderbird_155>
          <cf_tracking_thunderbird_155>---</cf_tracking_thunderbird_155>
          <cf_status_thunderbird_156>---</cf_status_thunderbird_156>
          <cf_tracking_thunderbird_156>---</cf_tracking_thunderbird_156>
          <cf_status_thunderbird_157>---</cf_status_thunderbird_157>
          <cf_tracking_thunderbird_157>---</cf_tracking_thunderbird_157>
          <cf_status_thunderbird_158>---</cf_status_thunderbird_158>
          <cf_tracking_thunderbird_158>---</cf_tracking_thunderbird_158>
          <cf_status_thunderbird_159>---</cf_status_thunderbird_159>
          <cf_tracking_thunderbird_159>---</cf_tracking_thunderbird_159>
          <cf_status_thunderbird_160>---</cf_status_thunderbird_160>
          <cf_tracking_thunderbird_160>---</cf_tracking_thunderbird_160>
          <cf_status_thunderbird_161>---</cf_status_thunderbird_161>
          <cf_tracking_thunderbird_161>---</cf_tracking_thunderbird_161>
          <cf_user_story></cf_user_story>
          <cf_mozilla_project>---</cf_mozilla_project>
          <cf_machine_state>---</cf_machine_state>
          <cf_qa_whiteboard></cf_qa_whiteboard>
          <cf_fx_iteration>---</cf_fx_iteration>
          <cf_fx_points>---</cf_fx_points>
          
          <cf_has_str>---</cf_has_str>
          <cf_cab_review>---</cf_cab_review>
          <cf_status_fxios_v8_0>---</cf_status_fxios_v8_0>
          <cf_status_fxios_v8_1>---</cf_status_fxios_v8_1>
          <cf_status_fxios_v8_2>---</cf_status_fxios_v8_2>
          <cf_status_fxios_v8_3>---</cf_status_fxios_v8_3>
          <cf_status_fxios_v8_4>---</cf_status_fxios_v8_4>
          <cf_status_fxios_v9_0>---</cf_status_fxios_v9_0>
          <cf_status_fxios_v9_1>---</cf_status_fxios_v9_1>
          <cf_status_fxios_v9_2>---</cf_status_fxios_v9_2>
          <cf_status_fxios_v9_3>---</cf_status_fxios_v9_3>
          <cf_status_fxios_v9_4>---</cf_status_fxios_v9_4>
          <cf_status_fxios_v10_0>---</cf_status_fxios_v10_0>
          <cf_status_fxios_v10_1>---</cf_status_fxios_v10_1>
          <cf_status_fxios_v10_2>---</cf_status_fxios_v10_2>
          <cf_status_fxios_v10_5>---</cf_status_fxios_v10_5>
          <cf_status_fxios_v10_6>---</cf_status_fxios_v10_6>
          <cf_status_fxios_v11_0>---</cf_status_fxios_v11_0>
          <cf_status_fxios_v11_1>---</cf_status_fxios_v11_1>
          <cf_status_fxios_v12_0>---</cf_status_fxios_v12_0>
          <cf_status_fxios_v12_1>---</cf_status_fxios_v12_1>
          <cf_status_fxios_v12_2>---</cf_status_fxios_v12_2>
          <cf_status_fxios_v13_0>---</cf_status_fxios_v13_0>
          <cf_status_fxios_v13_1>---</cf_status_fxios_v13_1>
          <cf_status_fxios_v13_2>---</cf_status_fxios_v13_2>
          <cf_status_fxios_v13_3>---</cf_status_fxios_v13_3>
          <cf_status_fxios_v14_0>---</cf_status_fxios_v14_0>
          <cf_status_fxios_v14_1>---</cf_status_fxios_v14_1>
          <cf_status_fxios_v14_2>---</cf_status_fxios_v14_2>
          <cf_status_fxios_v14_3>---</cf_status_fxios_v14_3>
          <cf_status_fxios_v15_0>---</cf_status_fxios_v15_0>
          <cf_status_fxios_v15_1>---</cf_status_fxios_v15_1>
          <cf_status_fxios_v16_0>---</cf_status_fxios_v16_0>
          <cf_tracking_geckoview62>---</cf_tracking_geckoview62>
          <cf_status_geckoview62>---</cf_status_geckoview62>
          <cf_tracking_geckoview63>---</cf_tracking_geckoview63>
          <cf_status_geckoview63>---</cf_status_geckoview63>
          <cf_tracking_geckoview64>---</cf_tracking_geckoview64>
          <cf_status_geckoview64>---</cf_status_geckoview64>
          <cf_tracking_geckoview65>---</cf_tracking_geckoview65>
          <cf_status_geckoview65>---</cf_status_geckoview65>
          <cf_tracking_geckoview66>---</cf_tracking_geckoview66>
          <cf_status_geckoview66>---</cf_status_geckoview66>
          <cf_tracking_firefox50>---</cf_tracking_firefox50>
          <cf_status_firefox50>---</cf_status_firefox50>
          <cf_tracking_firefox51>---</cf_tracking_firefox51>
          <cf_status_firefox51>---</cf_status_firefox51>
          <cf_tracking_firefox52>---</cf_tracking_firefox52>
          <cf_status_firefox52>---</cf_status_firefox52>
          <cf_tracking_firefox_esr52>---</cf_tracking_firefox_esr52>
          <cf_status_firefox_esr52>---</cf_status_firefox_esr52>
          <cf_tracking_firefox_esr60>---</cf_tracking_firefox_esr60>
          <cf_status_firefox_esr60>---</cf_status_firefox_esr60>
          <cf_tracking_firefox_esr68>---</cf_tracking_firefox_esr68>
          <cf_status_firefox_esr68>---</cf_status_firefox_esr68>
          <cf_tracking_firefox53>---</cf_tracking_firefox53>
          <cf_tracking_firefox_esr78>---</cf_tracking_firefox_esr78>
          <cf_status_firefox_esr78>---</cf_status_firefox_esr78>
          <cf_tracking_firefox_esr91>---</cf_tracking_firefox_esr91>
          <cf_status_firefox_esr91>---</cf_status_firefox_esr91>
          <cf_status_firefox53>---</cf_status_firefox53>
          <cf_tracking_firefox_esr102>---</cf_tracking_firefox_esr102>
          <cf_status_firefox_esr102>---</cf_status_firefox_esr102>
          <cf_tracking_firefox_esr115>---</cf_tracking_firefox_esr115>
          <cf_status_firefox_esr115>---</cf_status_firefox_esr115>
          <cf_tracking_firefox54>---</cf_tracking_firefox54>
          <cf_tracking_firefox_esr128>---</cf_tracking_firefox_esr128>
          <cf_status_firefox_esr128>---</cf_status_firefox_esr128>
          <cf_tracking_firefox_esr140>---</cf_tracking_firefox_esr140>
          <cf_status_firefox_esr140>---</cf_status_firefox_esr140>
          <cf_status_firefox54>---</cf_status_firefox54>
          <cf_tracking_firefox_esr153>---</cf_tracking_firefox_esr153>
          <cf_status_firefox_esr153>---</cf_status_firefox_esr153>
          <cf_tracking_firefox55>---</cf_tracking_firefox55>
          <cf_status_firefox55>---</cf_status_firefox55>
          <cf_tracking_firefox56>---</cf_tracking_firefox56>
          <cf_status_firefox56>---</cf_status_firefox56>
          <cf_tracking_firefox57>---</cf_tracking_firefox57>
          <cf_status_firefox57>---</cf_status_firefox57>
          <cf_tracking_firefox58>---</cf_tracking_firefox58>
          <cf_status_firefox58>---</cf_status_firefox58>
          <cf_tracking_firefox59>---</cf_tracking_firefox59>
          <cf_status_firefox59>---</cf_status_firefox59>
          <cf_tracking_firefox60>---</cf_tracking_firefox60>
          <cf_status_firefox60>---</cf_status_firefox60>
          <cf_tracking_firefox61>---</cf_tracking_firefox61>
          <cf_status_firefox61>---</cf_status_firefox61>
          <cf_tracking_firefox62>---</cf_tracking_firefox62>
          <cf_status_firefox62>---</cf_status_firefox62>
          <cf_tracking_firefox63>---</cf_tracking_firefox63>
          <cf_status_firefox63>---</cf_status_firefox63>
          <cf_tracking_firefox64>---</cf_tracking_firefox64>
          <cf_status_firefox64>---</cf_status_firefox64>
          <cf_tracking_firefox65>---</cf_tracking_firefox65>
          <cf_status_firefox65>---</cf_status_firefox65>
          <cf_tracking_firefox66>---</cf_tracking_firefox66>
          <cf_status_firefox66>---</cf_status_firefox66>
          <cf_tracking_firefox67>---</cf_tracking_firefox67>
          <cf_status_firefox67>---</cf_status_firefox67>
          <cf_tracking_firefox67_0_1>---</cf_tracking_firefox67_0_1>
          <cf_status_firefox67_0_1>---</cf_status_firefox67_0_1>
          <cf_tracking_firefox68>---</cf_tracking_firefox68>
          <cf_status_firefox68>---</cf_status_firefox68>
          <cf_tracking_firefox69>---</cf_tracking_firefox69>
          <cf_status_firefox69>---</cf_status_firefox69>
          <cf_tracking_firefox70>---</cf_tracking_firefox70>
          <cf_status_firefox70>---</cf_status_firefox70>
          <cf_tracking_firefox71>---</cf_tracking_firefox71>
          <cf_status_firefox71>---</cf_status_firefox71>
          <cf_tracking_firefox72>---</cf_tracking_firefox72>
          <cf_status_firefox72>---</cf_status_firefox72>
          <cf_status_firefox73>---</cf_status_firefox73>
          <cf_tracking_firefox73>---</cf_tracking_firefox73>
          <cf_tracking_firefox74>---</cf_tracking_firefox74>
          <cf_status_firefox74>---</cf_status_firefox74>
          <cf_tracking_firefox75>---</cf_tracking_firefox75>
          <cf_status_firefox75>---</cf_status_firefox75>
          <cf_tracking_firefox76>---</cf_tracking_firefox76>
          <cf_status_firefox76>---</cf_status_firefox76>
          <cf_tracking_firefox77>---</cf_tracking_firefox77>
          <cf_status_firefox77>---</cf_status_firefox77>
          <cf_tracking_firefox78>---</cf_tracking_firefox78>
          <cf_status_firefox78>---</cf_status_firefox78>
          <cf_tracking_firefox79>---</cf_tracking_firefox79>
          <cf_status_firefox79>---</cf_status_firefox79>
          <cf_tracking_firefox80>---</cf_tracking_firefox80>
          <cf_status_firefox80>---</cf_status_firefox80>
          <cf_tracking_firefox81>---</cf_tracking_firefox81>
          <cf_status_firefox81>---</cf_status_firefox81>
          <cf_tracking_firefox82>---</cf_tracking_firefox82>
          <cf_status_firefox82>---</cf_status_firefox82>
          <cf_tracking_firefox83>---</cf_tracking_firefox83>
          <cf_status_firefox83>---</cf_status_firefox83>
          <cf_tracking_firefox84>---</cf_tracking_firefox84>
          <cf_status_firefox84>---</cf_status_firefox84>
          <cf_tracking_firefox85>---</cf_tracking_firefox85>
          <cf_status_firefox85>---</cf_status_firefox85>
          <cf_tracking_firefox86>---</cf_tracking_firefox86>
          <cf_status_firefox86>---</cf_status_firefox86>
          <cf_tracking_firefox87>---</cf_tracking_firefox87>
          <cf_status_firefox87>---</cf_status_firefox87>
          <cf_tracking_firefox88>---</cf_tracking_firefox88>
          <cf_status_firefox88>---</cf_status_firefox88>
          <cf_tracking_firefox89>---</cf_tracking_firefox89>
          <cf_status_firefox89>---</cf_status_firefox89>
          <cf_tracking_firefox90>---</cf_tracking_firefox90>
          <cf_status_firefox90>---</cf_status_firefox90>
          <cf_tracking_firefox91>---</cf_tracking_firefox91>
          <cf_status_firefox91>---</cf_status_firefox91>
          <cf_tracking_firefox92>---</cf_tracking_firefox92>
          <cf_status_firefox92>---</cf_status_firefox92>
          <cf_tracking_firefox93>---</cf_tracking_firefox93>
          <cf_status_firefox93>---</cf_status_firefox93>
          <cf_tracking_firefox94>---</cf_tracking_firefox94>
          <cf_status_firefox94>---</cf_status_firefox94>
          <cf_tracking_firefox95>---</cf_tracking_firefox95>
          <cf_status_firefox95>---</cf_status_firefox95>
          <cf_tracking_firefox96>---</cf_tracking_firefox96>
          <cf_status_firefox96>---</cf_status_firefox96>
          <cf_tracking_firefox97>---</cf_tracking_firefox97>
          <cf_status_firefox97>---</cf_status_firefox97>
          <cf_tracking_firefox98>---</cf_tracking_firefox98>
          <cf_status_firefox98>---</cf_status_firefox98>
          <cf_tracking_firefox99>---</cf_tracking_firefox99>
          <cf_status_firefox99>---</cf_status_firefox99>
          <cf_tracking_firefox100>---</cf_tracking_firefox100>
          <cf_status_firefox100>---</cf_status_firefox100>
          <cf_tracking_firefox101>---</cf_tracking_firefox101>
          <cf_status_firefox101>---</cf_status_firefox101>
          <cf_tracking_firefox102>---</cf_tracking_firefox102>
          <cf_status_firefox102>---</cf_status_firefox102>
          <cf_tracking_firefox103>---</cf_tracking_firefox103>
          <cf_status_firefox103>---</cf_status_firefox103>
          <cf_tracking_firefox104>---</cf_tracking_firefox104>
          <cf_status_firefox104>---</cf_status_firefox104>
          <cf_tracking_firefox105>---</cf_tracking_firefox105>
          <cf_status_firefox105>---</cf_status_firefox105>
          <cf_tracking_firefox106>---</cf_tracking_firefox106>
          <cf_status_firefox106>---</cf_status_firefox106>
          <cf_tracking_firefox107>---</cf_tracking_firefox107>
          <cf_status_firefox107>---</cf_status_firefox107>
          <cf_tracking_firefox108>---</cf_tracking_firefox108>
          <cf_status_firefox108>---</cf_status_firefox108>
          <cf_tracking_firefox109>---</cf_tracking_firefox109>
          <cf_status_firefox109>---</cf_status_firefox109>
          <cf_tracking_firefox110>---</cf_tracking_firefox110>
          <cf_status_firefox110>---</cf_status_firefox110>
          <cf_tracking_firefox111>---</cf_tracking_firefox111>
          <cf_status_firefox111>---</cf_status_firefox111>
          <cf_tracking_firefox112>---</cf_tracking_firefox112>
          <cf_status_firefox112>---</cf_status_firefox112>
          <cf_tracking_firefox113>---</cf_tracking_firefox113>
          <cf_status_firefox113>---</cf_status_firefox113>
          <cf_tracking_firefox114>---</cf_tracking_firefox114>
          <cf_status_firefox114>---</cf_status_firefox114>
          <cf_tracking_firefox115>---</cf_tracking_firefox115>
          <cf_status_firefox115>---</cf_status_firefox115>
          <cf_tracking_firefox116>---</cf_tracking_firefox116>
          <cf_status_firefox116>---</cf_status_firefox116>
          <cf_tracking_firefox117>---</cf_tracking_firefox117>
          <cf_status_firefox117>---</cf_status_firefox117>
          <cf_tracking_firefox118>---</cf_tracking_firefox118>
          <cf_status_firefox118>---</cf_status_firefox118>
          <cf_tracking_firefox119>---</cf_tracking_firefox119>
          <cf_status_firefox119>---</cf_status_firefox119>
          <cf_tracking_firefox120>---</cf_tracking_firefox120>
          <cf_status_firefox120>---</cf_status_firefox120>
          <cf_tracking_firefox121>---</cf_tracking_firefox121>
          <cf_status_firefox121>---</cf_status_firefox121>
          <cf_tracking_firefox122>---</cf_tracking_firefox122>
          <cf_status_firefox122>---</cf_status_firefox122>
          <cf_tracking_firefox123>---</cf_tracking_firefox123>
          <cf_status_firefox123>---</cf_status_firefox123>
          <cf_tracking_firefox124>---</cf_tracking_firefox124>
          <cf_status_firefox124>---</cf_status_firefox124>
          <cf_tracking_firefox125>---</cf_tracking_firefox125>
          <cf_status_firefox125>---</cf_status_firefox125>
          <cf_tracking_firefox126>---</cf_tracking_firefox126>
          <cf_status_firefox126>---</cf_status_firefox126>
          <cf_tracking_firefox127>---</cf_tracking_firefox127>
          <cf_status_firefox127>---</cf_status_firefox127>
          <cf_tracking_firefox128>---</cf_tracking_firefox128>
          <cf_status_firefox128>---</cf_status_firefox128>
          <cf_tracking_firefox129>---</cf_tracking_firefox129>
          <cf_status_firefox129>---</cf_status_firefox129>
          <cf_tracking_firefox130>---</cf_tracking_firefox130>
          <cf_status_firefox130>---</cf_status_firefox130>
          <cf_tracking_firefox131>---</cf_tracking_firefox131>
          <cf_status_firefox131>---</cf_status_firefox131>
          <cf_tracking_firefox132>---</cf_tracking_firefox132>
          <cf_status_firefox132>---</cf_status_firefox132>
          <cf_tracking_firefox133>---</cf_tracking_firefox133>
          <cf_status_firefox133>---</cf_status_firefox133>
          <cf_tracking_firefox134>---</cf_tracking_firefox134>
          <cf_status_firefox134>---</cf_status_firefox134>
          <cf_tracking_firefox135>---</cf_tracking_firefox135>
          <cf_status_firefox135>---</cf_status_firefox135>
          <cf_tracking_firefox136>---</cf_tracking_firefox136>
          <cf_status_firefox136>---</cf_status_firefox136>
          <cf_tracking_firefox137>---</cf_tracking_firefox137>
          <cf_status_firefox137>---</cf_status_firefox137>
          <cf_tracking_firefox138>---</cf_tracking_firefox138>
          <cf_status_firefox138>---</cf_status_firefox138>
          <cf_tracking_firefox139>---</cf_tracking_firefox139>
          <cf_status_firefox139>---</cf_status_firefox139>
          <cf_tracking_firefox140>---</cf_tracking_firefox140>
          <cf_status_firefox140>---</cf_status_firefox140>
          <cf_tracking_firefox141>---</cf_tracking_firefox141>
          <cf_status_firefox141>---</cf_status_firefox141>
          <cf_tracking_firefox142>---</cf_tracking_firefox142>
          <cf_status_firefox142>---</cf_status_firefox142>
          <cf_tracking_firefox143>---</cf_tracking_firefox143>
          <cf_status_firefox143>---</cf_status_firefox143>
          <cf_tracking_firefox144>---</cf_tracking_firefox144>
          <cf_status_firefox144>---</cf_status_firefox144>
          <cf_tracking_firefox145>---</cf_tracking_firefox145>
          <cf_status_firefox145>---</cf_status_firefox145>
          <cf_tracking_firefox146>---</cf_tracking_firefox146>
          <cf_status_firefox146>---</cf_status_firefox146>
          <cf_tracking_firefox147>---</cf_tracking_firefox147>
          <cf_status_firefox147>---</cf_status_firefox147>
          <cf_tracking_firefox148>---</cf_tracking_firefox148>
          <cf_status_firefox148>---</cf_status_firefox148>
          <cf_tracking_firefox149>---</cf_tracking_firefox149>
          <cf_status_firefox149>---</cf_status_firefox149>
          <cf_tracking_firefox150>---</cf_tracking_firefox150>
          <cf_status_firefox150>---</cf_status_firefox150>
          <cf_tracking_firefox151>---</cf_tracking_firefox151>
          <cf_status_firefox151>---</cf_status_firefox151>
          <cf_tracking_firefox152>---</cf_tracking_firefox152>
          <cf_status_firefox152>---</cf_status_firefox152>
          <cf_tracking_firefox153>---</cf_tracking_firefox153>
          <cf_status_firefox153>---</cf_status_firefox153>
          <cf_tracking_firefox154>---</cf_tracking_firefox154>
          <cf_status_firefox154>---</cf_status_firefox154>
          <cf_tracking_firefox155>---</cf_tracking_firefox155>
          <cf_status_firefox155>---</cf_status_firefox155>
          <cf_tracking_firefox156>---</cf_tracking_firefox156>
          <cf_status_firefox156>---</cf_status_firefox156>
          <cf_tracking_firefox157>---</cf_tracking_firefox157>
          <cf_status_firefox157>---</cf_status_firefox157>
          <cf_tracking_firefox158>---</cf_tracking_firefox158>
          <cf_status_firefox158>---</cf_status_firefox158>
          <cf_tracking_firefox159>---</cf_tracking_firefox159>
          <cf_status_firefox159>---</cf_status_firefox159>
          <cf_tracking_firefox160>---</cf_tracking_firefox160>
          <cf_status_firefox160>---</cf_status_firefox160>
          <cf_tracking_firefox161>---</cf_tracking_firefox161>
          <cf_status_firefox161>---</cf_status_firefox161>
          <cf_tracking_flowstate01>---</cf_tracking_flowstate01>
          <cf_status_flowstate01>---</cf_status_flowstate01>
          <cf_tracking_flowstate02>---</cf_tracking_flowstate02>
          <cf_status_flowstate02>---</cf_status_flowstate02>
          <cf_tracking_flowstate03>---</cf_tracking_flowstate03>
          <cf_status_flowstate03>---</cf_status_flowstate03>
          <cf_fission_milestone>---</cf_fission_milestone>
          <cf_data_science_status>---</cf_data_science_status>
          <cf_last_resolved>2013-12-04 03:01:24</cf_last_resolved>
          
          <votes>1</votes>

      

      

      

          <long_desc isprivate="0">
            <commentid>5019437</commentid>
            <who name="Jesse Ruderman">jruderman</who>
            <bug_when>2010-10-18 14:29:23 -0700</bug_when>
            <thetext>See discussion in bug 604841.  Fixing this will reduce attack surface and fix bug 604262, bug 604556, bug 604807, bug 604841, and bug 605264.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5019455</commentid>
            <who name="Peter Van der Beken [:peterv]">peterv</who>
            <bug_when>2010-10-18 14:33:20 -0700</bug_when>
            <thetext>The only problem here are interfaces exposed through XBL, we&apos;ll have to
whitelist them. I did have a patch for that at some point, trying to find it
again.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5019479</commentid>
            <who name="Jonas Sicking (:sicking) No longer reading bugmail consistently">jonas</who>
            <bug_when>2010-10-18 14:37:12 -0700</bug_when>
            <thetext>One possible way to fix this, which would probably be easy to code, but somewhat risky to deploy, is to simply deny access to Components.interfaces for untrusted callers.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5019483</commentid>
            <who name="Jonas Sicking (:sicking) No longer reading bugmail consistently">jonas</who>
            <bug_when>2010-10-18 14:38:46 -0700</bug_when>
            <thetext>Not sure if this is blocking beta8, but the sooner the better.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5032415</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-10-23 18:51:15 -0700</bug_when>
            <thetext>I have a patch for this that flips the ClassInfo flag on elements and special cases XBL.  The code changes are pretty small, but this breaks a lot of stuff that expects to QI to nsIDOMNSEditableElement (both tests and content XBL bindings like textbox.xml).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5032681</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-10-24 02:49:26 -0700</bug_when>
            <thetext>I think I have this working.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5032844</commentid>
              <attachid>485584</attachid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-10-24 06:52:58 -0700</bug_when>
            <thetext>Created attachment 485584
Patch

This patch disallows QIing to interfaces that are not in ClassInfo (or the ancestor of an interface in ClassInfo) for scripts that don&apos;t have UniversalXPConnect.  I&apos;m not crazy about a couple things in this patch (particularly the new interface and the nested class in nsGenericElement) but I couldn&apos;t think of a good way to do this without an iface and I didn&apos;t want to chase ambiguous cast errors through ClassInfo and quickstubs.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5033048</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2010-10-24 10:58:48 -0700</bug_when>
            <thetext>Hmm.  The extra word in all elements isn&apos;t all that great....  :(</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5033049</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2010-10-24 10:59:17 -0700</bug_when>
            <thetext>Is the interface implementor thing just needed for nsIDOMNSEditableElement?  Or something else?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5033053</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-10-24 11:02:55 -0700</bug_when>
            <thetext>The extra word we can fix by fixing up all of the ambiguous casts that that creates.  The extra interface (nsIExtraInterfaceImplementor) I don&apos;t see a way to get rid of.  For XBL XPConnect needs to determine which interfaces that aren&apos;t in ClassInfo it should make visible, and it can&apos;t do that by QIing, so ...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5033079</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2010-10-24 11:25:16 -0700</bug_when>
            <thetext>Oh, right.  This patch actually adds two words to elements as things stand...

What are the ambiguous casts you speak of?  To nsISupports?

Is there a reason to not put nsIExtraInterfaceImplementor between nsIContent and Element?  Would that avoid the ambiguous casts (and incidentally adding that second word)?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5033094</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-10-24 11:40:47 -0700</bug_when>
            <thetext>(In reply to comment #10)
&gt; Is there a reason to not put nsIExtraInterfaceImplementor between nsIContent
&gt; and Element?  Would that avoid the ambiguous casts (and incidentally adding
&gt; that second word)?

No; I believe so.  Will try.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5033138</commentid>
              <attachid>485607</attachid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-10-24 12:19:19 -0700</bug_when>
            <thetext>Created attachment 485607
Patch

Now with less words!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5035540</commentid>
              <attachid>485607</attachid>
            <who name="Jonas Sicking (:sicking) No longer reading bugmail consistently">jonas</who>
            <bug_when>2010-10-25 15:11:52 -0700</bug_when>
            <thetext>Comment on attachment 485607
Patch

I think peterv knows this stuff better.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5045720</commentid>
            <who name="Mike Beltzner [:beltzner, not reading bugmail]">mbeltzner</who>
            <bug_when>2010-10-29 11:40:52 -0700</bug_when>
            <thetext>Does this need to block b7? Kyle was worried about API changes.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5045841</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-10-29 12:23:16 -0700</bug_when>
            <thetext>Jst said no over IRC earlier today.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5085740</commentid>
            <who name="Peter Van der Beken [:peterv]">peterv</who>
            <bug_when>2010-11-16 11:51:45 -0800</bug_when>
            <thetext>I think we should add a flag to nsIXPCScriptable for this (we should be able to reuse &apos;1 &lt;&lt; 30&apos;) and add a function to nsXPCClassInfo, to avoid the additional interface and QI.

I also don&apos;t understand how this works given that we cache tearoffs. Won&apos;t this just mean that all that needs to happen is for chrome code to QI to one of these interfaces once, and then content can get its hands on the interface anyway? We should make this not cache (btw, that seemed like a much more difficult change when I&apos;d looked at fixing this). That would also make dynamic XBL changes work properly by revoking an interface when a binding is removed.

There&apos;s also a change to move NS_FORWARD_NSISUPPORTS, but that seems totally unrelated to this bug.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5085750</commentid>
              <attachid>485607</attachid>
            <who name="Peter Van der Beken [:peterv]">peterv</who>
            <bug_when>2010-11-16 11:53:22 -0800</bug_when>
            <thetext>Comment on attachment 485607
Patch

See comment 16.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5085981</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-11-16 13:05:23 -0800</bug_when>
            <thetext>(In reply to comment #16)
&gt; I think we should add a flag to nsIXPCScriptable for this (we should be able to
&gt; reuse &apos;1 &lt;&lt; 30&apos;) and add a function to nsXPCClassInfo, to avoid the additional
&gt; interface and QI.

OK.

&gt; I also don&apos;t understand how this works given that we cache tearoffs. Won&apos;t this
&gt; just mean that all that needs to happen is for chrome code to QI to one of
&gt; these interfaces once, and then content can get its hands on the interface
&gt; anyway? We should make this not cache (btw, that seemed like a much more
&gt; difficult change when I&apos;d looked at fixing this). That would also make dynamic

I haven&apos;t looked at the code again yet, but we don&apos;t handle elements substantively different than other DOM objects do we?  It seems like that&apos;d be a problem across the board then.  Of course, perhaps non-element DOM objects don&apos;t implement any interesting scriptable interfaces.

&gt; XBL changes work properly by revoking an interface when a binding is removed.

Doesn&apos;t that violate XPCOM rules?  If I have an owning pointer to an XBL implemented interfaces from C++ (say in a11y) that pointer isn&apos;t allowed to be taken away from me, regardless of what happens at the XBL level.

&gt; There&apos;s also a change to move NS_FORWARD_NSISUPPORTS, but that seems totally
&gt; unrelated to this bug.

Yeah, that&apos;s bogus.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5086018</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-11-16 13:16:50 -0800</bug_when>
            <thetext>(In reply to comment #18)
&gt; (In reply to comment #16)
&gt; &gt; I also don&apos;t understand how this works given that we cache tearoffs. Won&apos;t this
&gt; &gt; just mean that all that needs to happen is for chrome code to QI to one of
&gt; &gt; these interfaces once, and then content can get its hands on the interface
&gt; &gt; anyway? We should make this not cache (btw, that seemed like a much more
&gt; &gt; difficult change when I&apos;d looked at fixing this). That would also make dynamic
&gt; I haven&apos;t looked at the code again yet, but we don&apos;t handle elements
&gt; substantively different than other DOM objects do we?  It seems like that&apos;d be
&gt; a problem across the board then.  Of course, perhaps non-element DOM objects
&gt; don&apos;t implement any interesting scriptable interfaces.

The answer to that is either the DOM object in question has CLASSINFO_INTERFACES_ONLY, in which case even chrome doesn&apos;t get to QI to the interface in question, or that DOM object has the same problem that we&apos;re trying to fix for elements here.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5096073</commentid>
              <attachid>492083</attachid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-11-20 12:42:17 -0800</bug_when>
            <thetext>Created attachment 492083
Stop untrusted script from QIing to non-ClassInfo interfaces</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5096082</commentid>
              <attachid>492083</attachid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-11-20 12:52:48 -0800</bug_when>
            <thetext>Comment on attachment 492083
Stop untrusted script from QIing to non-ClassInfo interfaces

This mostly works, but it&apos;s starting to feel like a rabbithole.  This patch keeps track of whether or not a given XPCNativeInterface (and the corresponding tearoff) should be exposed to untrusted script.  If the interface isn&apos;t safe to be exposed to untrusted script we refuse to hand back a tearoff.

Fixing up instanceof is easy enough, but this gets messy when we have to deal with properties on the JSObject.  Right now nsElementSH hooks GetProperty and decides whether or not to allow the access through.  That&apos;s inefficent, but it works.  Setting the property is more complicated.  I&apos;m not sure what should happen in the scenario:

enablePrivilege(&apos;UniversalXPConnect&apos;);
foo.QI(non-ClassInfo-iface);
revertPrivilege(&apos;UniversalXPConnect&apos;);
foo.&lt;method-defined-on-said-iface&gt; = bar; // What does this do?

I don&apos;t see any good way to solve that; either we forbid the property set and so random properties become inaccessible, or we let untrusted script clobber the IDL properties.

I wonder if we&apos;re not better off pursuing the Components.interfaces method that Jonas proposed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5097402</commentid>
            <who name="neil@parkwaycc.co.uk">neil</who>
            <bug_when>2010-11-22 02:06:28 -0800</bug_when>
            <thetext>Can an XPCNativeWrapper expose additional interfaces to those exposed by default on the underlying object, thereby allowing only chrome access to them?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5107870</commentid>
              <attachid>492083</attachid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-11-28 18:37:34 -0800</bug_when>
            <thetext>Comment on attachment 492083
Stop untrusted script from QIing to non-ClassInfo interfaces

I think this is going to be nasty no matter what we do.  Even if we do Jonas&apos;s suggestion we still have to deal with the same wrapper issues.  I think we should do one of two things:

1) Identify which interfaces are relevant for extensions and other js to be able to QI to and add them to classinfo.  Audit these to ensure that they&apos;re safe for exposure to content.  There shouldn&apos;t be too many of these. Then flip the classinfo flags.  It might be too late to do this for 2.0, in which case we should ...
2) Unblock on this and fix the dependent bugs in an ad-hoc fashion.

Either way we are probably going to have to bump this from b8.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5109777</commentid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2010-11-29 15:10:55 -0800</bug_when>
            <thetext>Agreed, I don&apos;t think we can, or need, to deal with this for beta8.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5142067</commentid>
            <who name="Jonas Sicking (:sicking) No longer reading bugmail consistently">jonas</who>
            <bug_when>2010-12-14 10:35:18 -0800</bug_when>
            <thetext>This is too risky too late. We&apos;ll have to do it for next release instead.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5142133</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2010-12-14 10:53:29 -0800</bug_when>
            <thetext>Does that mean we need to fix the dependent bugs piecemeal for FF4?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5142503</commentid>
            <who name="Jonas Sicking (:sicking) No longer reading bugmail consistently">jonas</who>
            <bug_when>2010-12-14 13:03:19 -0800</bug_when>
            <thetext>Unfortunately yes</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5143086</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2010-12-14 16:45:20 -0800</bug_when>
            <thetext>If those aren&apos;t assigned to me feel free to do so.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5143119</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2010-12-14 16:54:23 -0800</bug_when>
            <thetext>Thank you sir!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5685146</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2011-08-29 09:43:42 -0700</bug_when>
            <thetext>Think we&apos;re just going to wait for the new dom bindings here.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6534238</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2012-08-06 09:47:04 -0700</bug_when>
            <thetext>This isn&apos;t going to happen until we get to the brave new world of WebIDL bindings (and maybe not even then).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6534303</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-08-06 10:10:15 -0700</bug_when>
            <thetext>I believe it will happen then, ipso facto: the new bindings don&apos;t support random interfaces that aren&apos;t in the WebIDL.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6534317</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2012-08-06 10:16:46 -0700</bug_when>
            <thetext>Well, we still have to figure out how we&apos;re going to deal with XBL, but yes.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7553783</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2013-06-19 12:13:07 -0700</bug_when>
            <thetext>This is all done now, since we&apos;re on WebIDL bindings, no?  QI just does a QI on the c++ side and then returns the same JSObject you already had.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>8152373</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2013-12-03 19:01:24 -0800</bug_when>
            <thetext>I declare this bug fixed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>8152382</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2013-12-03 19:04:14 -0800</bug_when>
            <thetext>I know that we fixed this a while ago, but still, \o/</thetext>
          </long_desc>

          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>485584</attachid>
            <date>2010-10-24 06:52:58 -0700</date>
            <delta_ts>2010-10-24 12:19:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>qidom</filename>
            <type>text/plain</type>
            <size>23353</size>
            <attacher>khuey</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIEt5bGUgSHVleSA8a2h1ZXlAa3lsZWh1ZXkuY29t
PgojIERhdGUgMTI4NzkxMzY5OSAxNDQwMAojIE5vZGUgSUQgMzNmZjA4ZjU3ZTdjOGRjMzJjM2Yx
MDBjMDdhNmJkYzA0NGE2ZTA1OQojIFBhcmVudCAwOTRkODM4ZWQ3ODBjNmExMmRmZGJmOWUxMjQ3
OGY4MzM1NGRhYmQ3CkJ1ZyA2MDUyNzE6IERvIG5vdCBhbGxvdyB1bnRydXN0ZWQgY2FsbGVycyB0
byBRSSB0byBub24tQ2xhc3NJbmZvIGludGVyZmFjZXMuIHI/PXNpY2tpbmcgc3I/PWpzdAoKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHZW5lcmljRWxlbWVudC5jcHAgYi9jb250ZW50
L2Jhc2Uvc3JjL25zR2VuZXJpY0VsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNH
ZW5lcmljRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0dlbmVyaWNFbGVtZW50
LmNwcApAQCAtMjA4MSwxNyArMjA4MSwxOCBAQCBuc0dlbmVyaWNFbGVtZW50Ojpuc0RPTVNsb3Rz
Ojp+bnNET01TbG90CiAgIH0KIAogICBpZiAobUNsYXNzTGlzdCkgewogICAgIG1DbGFzc0xpc3Qt
PkRyb3BSZWZlcmVuY2UoKTsKICAgfQogfQogCiBuc0dlbmVyaWNFbGVtZW50Ojpuc0dlbmVyaWNF
bGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbykKLSAgOiBFbGVt
ZW50KGFOb2RlSW5mbykKKyAgOiBFbGVtZW50KGFOb2RlSW5mbyksCisgICAgbUV4dHJhSW50ZXJm
YWNlSW1wbGVtZW50b3IodGhpcykKIHsKICAgLy8gU2V0IHRoZSBkZWZhdWx0IHNjcmlwdElEIHRv
IEpTIC0gYnV0IHNraXAgU2V0U2NyaXB0VHlwZUlEIGFzIGl0CiAgIC8vIGRvZXMgZXh0cmEgd29y
ayB3ZSBrbm93IGlzbid0IG5lY2Vzc2FyeSBoZXJlLi4uCiAgIFNldEZsYWdzKE5PREVfSVNfRUxF
TUVOVCB8CiAgICAgICAgICAgIChuc0lQcm9ncmFtbWluZ0xhbmd1YWdlOjpKQVZBU0NSSVBUIDw8
IE5PREVfU0NSSVBUX1RZUEVfT0ZGU0VUKSk7CiB9CiAKIG5zR2VuZXJpY0VsZW1lbnQ6On5uc0dl
bmVyaWNFbGVtZW50KCkKQEAgLTQ0OTEsMjYgKzQ0OTIsNTQgQEAgTlNfSU5URVJGQUNFX01BUF9F
TkQKIE5TX0lNUExfQ1lDTEVfQ09MTEVDVElOR19BRERSRUZfQU1CSUdVT1VTKG5zR2VuZXJpY0Vs
ZW1lbnQsIG5zSUNvbnRlbnQpCiBOU19JTVBMX0NZQ0xFX0NPTExFQ1RJTkdfUkVMRUFTRV9BTUJJ
R1VPVVNfV0lUSF9ERVNUUk9ZKG5zR2VuZXJpY0VsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTm9kZVV0
aWxzOjpMYXN0UmVsZWFzZSh0aGlzKSkKIAogbnNyZXN1bHQKIG5zR2VuZXJpY0VsZW1lbnQ6OlBv
c3RRdWVyeUludGVyZmFjZShSRUZOU0lJRCBhSUlELCB2b2lkKiogYUluc3RhbmNlUHRyKQogewor
ICBpZiAoYUlJRC5FcXVhbHMoTlNfR0VUX0lJRChuc0lFeHRyYUludGVyZmFjZUltcGxlbWVudG9y
KSkpIHsKKyAgICAqYUluc3RhbmNlUHRyID0gJnRoaXMtPm1FeHRyYUludGVyZmFjZUltcGxlbWVu
dG9yOworICAgIEFkZFJlZigpOworICAgIHJldHVybiBOU19PSzsKKyAgfQorCiAgIG5zSURvY3Vt
ZW50ICpkb2N1bWVudCA9IEdldE93bmVyRG9jKCk7CiAgIGlmIChkb2N1bWVudCkgewogICAgIHJl
dHVybiBkb2N1bWVudC0+QmluZGluZ01hbmFnZXIoKS0+R2V0QmluZGluZ0ltcGxlbWVudGF0aW9u
KHRoaXMsIGFJSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYUluc3RhbmNlUHRyKTsKICAgfQogCiAgICphSW5zdGFuY2VQ
dHIgPSBuc251bGw7CiAgIHJldHVybiBOU19FUlJPUl9OT19JTlRFUkZBQ0U7CiB9CiAKKy8vIG5z
SUV4dHJhSW50ZXJmYWNlSW1wbGVtZW50b3IKK2Jvb2wKK25zR2VuZXJpY0VsZW1lbnQ6Om5zRXh0
cmFJbnRlcmZhY2VJbXBsZW1lbnRvcjo6TWlnaHRIYXZlRXh0cmFJbnRlcmZhY2UoUkVGTlNJSUQg
YUlJRCkKK3sKKyAgLy8gTWFrZSB0aGlzIGNoZWNrIGEgbm9vcCBmb3IgdHJ1c3RlZCBzY3JpcHQu
ICBQcml2aWxlZ2VkIGNhbGxlcnMgY2FuIGFsd2F5cyB0cnkgdG8KKyAgLy8gUUkgYW4gZWxlbWVu
dCB0byB3aGF0ZXZlciB0aGV5IHdhbnQuCisgIGlmIChuc0NvbnRlbnRVdGlsczo6SXNDYWxsZXJU
cnVzdGVkRm9yQ2FwYWJpbGl0eSgiVW5pdmVyc2FsWFBDb25uZWN0IikpIHsKKyAgICByZXR1cm4g
dHJ1ZTsgLy8gV2UgbWlnaHQgbm90IGhhdmUgaXQsIGJ1dCB0aGlzIGlzIGp1c3QgdG8gY29udmlu
Y2UgWFBDb25uZWN0CisgICAgICAgICAgICAgICAgIC8vIHRvIGRvIHRoZSBRSSwgYXQgd2hpY2gg
cG9pbnQgaXQnbGwgZGlzY292ZXIgdGhlIHRydXRoLgorICB9CisKKyAgbnNJRG9jdW1lbnQgKmRv
Y3VtZW50ID0gbUVsZW1lbnQtPkdldE93bmVyRG9jKCk7CisgIGlmICghZG9jdW1lbnQpCisgICAg
cmV0dXJuIGZhbHNlOworCisgIG5zWEJMQmluZGluZyogYmluZGluZyA9IGRvY3VtZW50LT5CaW5k
aW5nTWFuYWdlcigpLT5HZXRCaW5kaW5nKG1FbGVtZW50KTsKKyAgaWYgKCFiaW5kaW5nKQorICAg
IHJldHVybiBmYWxzZTsKKworICByZXR1cm4gYmluZGluZy0+SW1wbGVtZW50c0ludGVyZmFjZShh
SUlEKTsKK30KKwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBuc3Jlc3VsdAogbnNHZW5lcmljRWxlbWVudDo6
TGVhdmVMaW5rKG5zUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkKIHsKICAgbnNJTGlua0hhbmRs
ZXIgKmhhbmRsZXIgPSBhUHJlc0NvbnRleHQtPkdldExpbmtIYW5kbGVyKCk7CiAgIGlmICghaGFu
ZGxlcikgewogICAgIHJldHVybiBOU19PSzsKICAgfQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNl
L3NyYy9uc0dlbmVyaWNFbGVtZW50LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zR2VuZXJpY0VsZW1l
bnQuaAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zR2VuZXJpY0VsZW1lbnQuaAorKysgYi9jb250
ZW50L2Jhc2Uvc3JjL25zR2VuZXJpY0VsZW1lbnQuaApAQCAtNjEsMTYgKzYxLDE3IEBACiAjaW5j
bHVkZSAibW96Rmx1c2hUeXBlLmgiCiAjaW5jbHVkZSAibnNET01BdHRyaWJ1dGVNYXAuaCIKICNp
bmNsdWRlICJuc0lXZWFrUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAibnNDeWNsZUNvbGxlY3Rpb25Q
YXJ0aWNpcGFudC5oIgogI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9N
Tm9kZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAibnNJRE9NWFBhdGhOU1Jlc29sdmVyLmgiCiAjaW5j
bHVkZSAibnNQcmVzQ29udGV4dC5oIgorI2luY2x1ZGUgIm5zSUV4dHJhSW50ZXJmYWNlSW1wbGVt
ZW50b3IuaCIKIAogI2lmZGVmIE1PWl9TTUlMCiAjaW5jbHVkZSAibnNJU01JTEF0dHIuaCIKICNl
bmRpZiAvLyBNT1pfU01JTAogCiBjbGFzcyBuc0lET01BdHRyOwogY2xhc3MgbnNJRE9NRXZlbnRM
aXN0ZW5lcjsKIGNsYXNzIG5zSUZyYW1lOwpAQCAtNzYxLDE3ICs3NjIsMzEgQEAgcHVibGljOgog
ICB2aXJ0dWFsIG5zQXR0ckluZm8gR2V0QXR0ckluZm8oUFJJbnQzMiBhTmFtZXNwYWNlSUQsIG5z
SUF0b20qIGFOYW1lKSBjb25zdDsKIAogICBOU19ERUNMX0NZQ0xFX0NPTExFQ1RJT05fU0NSSVBU
X0hPTERFUl9DTEFTUyhuc0dlbmVyaWNFbGVtZW50KQogCiAgIHZpcnR1YWwgdm9pZCBOb2RlSW5m
b0NoYW5nZWQobnNJTm9kZUluZm8qIGFPbGROb2RlSW5mbykKICAgewogICB9CiAKKyAgLy8gbnNJ
RXh0cmFJbnRlcmZhY2VJbXBsZW1lbnRvcgorICBjbGFzcyBuc0V4dHJhSW50ZXJmYWNlSW1wbGVt
ZW50b3IgOiBwdWJsaWMgbnNJRXh0cmFJbnRlcmZhY2VJbXBsZW1lbnRvciB7CisgIHB1YmxpYzoK
KyAgICBuc0V4dHJhSW50ZXJmYWNlSW1wbGVtZW50b3IobnNHZW5lcmljRWxlbWVudCogYUVsZW1l
bnQpCisgICAgICA6IG1FbGVtZW50KGFFbGVtZW50KQorICAgIHt9CisgICAgTlNfRk9SV0FSRF9O
U0lTVVBQT1JUUyhtRWxlbWVudC0+KTsKKyAgICB2aXJ0dWFsIGJvb2wgTWlnaHRIYXZlRXh0cmFJ
bnRlcmZhY2UoUkVGTlNJSUQgYUlJRCk7CisgIHByb3RlY3RlZDoKKyAgICBuc0dlbmVyaWNFbGVt
ZW50KiBtRWxlbWVudDsKKyAgfTsKIHByb3RlY3RlZDoKKworICBuc0V4dHJhSW50ZXJmYWNlSW1w
bGVtZW50b3IgbUV4dHJhSW50ZXJmYWNlSW1wbGVtZW50b3I7CisKICAgLyoqCiAgICAqIFNldCBh
dHRyaWJ1dGUgYW5kIChpZiBuZWVkZWQpIG5vdGlmeSBkb2N1bWVudG9ic2VydmVycyBhbmQgZmly
ZSBvZmYKICAgICogbXV0YXRpb24gZXZlbnRzLiAgVGhpcyB3aWxsIHNlbmQgdGhlIEF0dHJpYnV0
ZUNoYW5nZWQgbm90aWZpY2F0aW9uLgogICAgKiBDYWxsZXJzIG9mIHRoaXMgbWV0aG9kIGFyZSBy
ZXNwb25zaWJsZSBmb3IgY2FsbGluZyBBdHRyaWJ1dGVXaWxsQ2hhbmdlLAogICAgKiBzaW5jZSB0
aGF0IG5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgdGhlIG5ldyBhdHRyIHZhbHVlIGhhcyBiZWVuIHNl
dCwgYW5kCiAgICAqIGluIHBhcnRpY3VsYXIgYmVmb3JlIGl0IGhhcyBiZWVuIHBhcnNlZC4KICAg
ICoKICAgICogQHBhcmFtIGFOYW1lc3BhY2VJRCAgbmFtZXNwYWNlIG9mIGF0dHJpYnV0ZQpkaWZm
IC0tZ2l0IGEvY29udGVudC9iYXNlL3Rlc3QvdGVzdF9idWcxNjYyMzUuaHRtbCBiL2NvbnRlbnQv
YmFzZS90ZXN0L3Rlc3RfYnVnMTY2MjM1Lmh0bWwKLS0tIGEvY29udGVudC9iYXNlL3Rlc3QvdGVz
dF9idWcxNjYyMzUuaHRtbAorKysgYi9jb250ZW50L2Jhc2UvdGVzdC90ZXN0X2J1ZzE2NjIzNS5o
dG1sCkBAIC02MiwxNiArNjIsMTggQEAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93
X2J1Zy5jZwogICAgICAgICBkYXRhLnZhbHVlLlF1ZXJ5SW50ZXJmYWNlKENvbXBvbmVudHMuaW50
ZXJmYWNlcy5uc0lTdXBwb3J0c1N0cmluZykuZGF0YSwKICAgICAgIGV4cGVjdGVkLAogICAgICAg
bWltZSArICIgdmFsdWUgaW4gdGhlIGNsaXBib2FyZCIpOwogICAgIHJldHVybiBkYXRhLnZhbHVl
OwogICB9CiAgIGZ1bmN0aW9uIHRlc3RQYXN0ZVRleHQoZXhwZWN0ZWQsIHRlc3QpIHsKICAgICB0
ZXh0YXJlYS52YWx1ZT0iIjsKICAgICB0ZXh0YXJlYS5mb2N1cygpOworICAgIC8vIFRvIFFJIHRv
IG5vbi1DbGFzc0luZm8gaW50ZXJmYWNlcyB3ZSBtdXN0IGFzc2VydCBwcml2aWxlZ2VzCisgICAg
bmV0c2NhcGUuc2VjdXJpdHkuUHJpdmlsZWdlTWFuYWdlci5lbmFibGVQcml2aWxlZ2UoJ1VuaXZl
cnNhbFhQQ29ubmVjdCcpOwogICAgIHRleHRhcmVhLlF1ZXJ5SW50ZXJmYWNlKENvbXBvbmVudHMu
aW50ZXJmYWNlcy5uc0lET01OU0VkaXRhYmxlRWxlbWVudCkKICAgICAgICAgICAgIC5lZGl0b3Iu
cGFzdGUoMSk7CiAgICAgaXModGV4dGFyZWEudmFsdWUsIGV4cGVjdGVkLCB0ZXN0ICsgIjogdGV4
dGFyZWEgcGFzdGUiKTsKICAgfQogICBmdW5jdGlvbiB0ZXN0SW5uZXJIVE1MKGlkLCBleHBlY3Rl
ZCkgewogICAgIHZhciB2YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5pbm5lckhU
TUw7CiAgICAgaXModmFsdWUsIGV4cGVjdGVkLCBpZCArICIuaW5uZXJIVE1MIik7CiAgIH0KZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS90ZXN0L3Rlc3RfY29weXBhc3RlLmh0bWwgYi9jb250ZW50
L2Jhc2UvdGVzdC90ZXN0X2NvcHlwYXN0ZS5odG1sCi0tLSBhL2NvbnRlbnQvYmFzZS90ZXN0L3Rl
c3RfY29weXBhc3RlLmh0bWwKKysrIGIvY29udGVudC9iYXNlL3Rlc3QvdGVzdF9jb3B5cGFzdGUu
aHRtbApAQCAtOTksMTYgKzk5LDE4IEBAIGZ1bmN0aW9uIHRlc3RDb3B5UGFzdGUgKCkgewogICAg
ICAgICBkYXRhLnZhbHVlLlF1ZXJ5SW50ZXJmYWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lT
dXBwb3J0c1N0cmluZykuZGF0YSwKICAgICAgIGV4cGVjdGVkLAogICAgICAgbWltZSArICIgdmFs
dWUgaW4gdGhlIGNsaXBib2FyZCIpOwogICAgIHJldHVybiBkYXRhLnZhbHVlOwogICB9CiAgIGZ1
bmN0aW9uIHRlc3RQYXN0ZVRleHQoZXhwZWN0ZWQpIHsKICAgICB0ZXh0YXJlYS52YWx1ZT0iIjsK
ICAgICB0ZXh0YXJlYS5mb2N1cygpOworICAgIC8vIFRvIFFJIHRvIG5vbi1DbGFzc0luZm8gaW50
ZXJmYWNlcyB3ZSBtdXN0IGFzc2VydCBwcml2aWxlZ2VzCisgICAgbmV0c2NhcGUuc2VjdXJpdHku
UHJpdmlsZWdlTWFuYWdlci5lbmFibGVQcml2aWxlZ2UoJ1VuaXZlcnNhbFhQQ29ubmVjdCcpOwog
ICAgIHRleHRhcmVhLlF1ZXJ5SW50ZXJmYWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lET01O
U0VkaXRhYmxlRWxlbWVudCkKICAgICAgICAgICAgIC5lZGl0b3IucGFzdGUoMSk7CiAgICAgaXMo
dGV4dGFyZWEudmFsdWUsIGV4cGVjdGVkLCAidmFsdWUgb2YgdGhlIHRleHRhcmVhIGFmdGVyIHRo
ZSBwYXN0ZSIpOwogICB9CiAgIGZ1bmN0aW9uIHRlc3RTZWxlY3Rpb25Ub1N0cmluZyhleHBlY3Rl
ZCkgewogICAgIGlzKHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpLnJlcGxhY2UoL1xy
XG4vZywiXG4iKSwgZXhwZWN0ZWQsICJTZWxlY3Rpb24udG9TdHJpbmciKTsKICAgfQogICBmdW5j
dGlvbiB0ZXN0SW5uZXJIVE1MKGlkLCBleHBlY3RlZCkgewpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC90ZXN0X2J1ZzM4ODU1OC5odG1sIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC90ZXN0X2J1ZzM4ODU1OC5odG1sCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvdGVzdF9idWczODg1NTguaHRtbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rl
c3RfYnVnMzg4NTU4Lmh0bWwKQEAgLTE5LDE3ICsxOSwxOCBAQCBodHRwczovL2J1Z3ppbGxhLm1v
emlsbGEub3JnL3Nob3dfYnVnLmNnCiA8cHJlIGlkPSJ0ZXN0Ij4KIDxzY3JpcHQgY2xhc3M9InRl
c3Rib2R5IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogCiAvKiogVGVzdCBmb3IgQnVnIDM4ODU1
OCAqKi8KIHZhciBpbnB1dENoYW5nZSA9IDA7CiB2YXIgdGV4dGFyZWFDaGFuZ2UgPSAwOwogCiBm
dW5jdGlvbiB0ZXN0VXNlcklucHV0KCkgewotICBuZXRzY2FwZS5zZWN1cml0eS5Qcml2aWxlZ2VN
YW5hZ2VyLmVuYWJsZVByaXZpbGVnZSgnVW5pdmVyc2FsQnJvd3NlcldyaXRlJyk7CisgIC8vIFRv
IFFJIHRvIG5vbi1DbGFzc0luZm8gaW50ZXJmYWNlcyB3ZSBtdXN0IGFzc2VydCBwcml2aWxlZ2Vz
CisgIG5ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCdV
bml2ZXJzYWxYUENvbm5lY3QnKTsKICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImlucHV0Iik7CiAgIHZhciB0ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXh0YXJlYSIpOwogCiAgIGlucHV0LmZvY3VzKCk7CiAgIGlucHV0LlF1ZXJ5SW50ZXJmYWNlKENv
bXBvbmVudHMuaW50ZXJmYWNlcy5uc0lET01OU0VkaXRhYmxlRWxlbWVudCkuc2V0VXNlcklucHV0
KCJmb28iKTsKICAgaW5wdXQuYmx1cigpOwogICBpcyhpbnB1dENoYW5nZSwgMSwgIklucHV0IGVs
ZW1lbnQgc2hvdWxkIGhhdmUgZ290IG9uZSBjaGFuZ2UgZXZlbnQuIik7CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9idWczODk3OTcuaHRtbCBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvdGVzdF9idWczODk3OTcuaHRtbAotLS0gYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L3Rlc3RfYnVnMzg5Nzk3Lmh0bWwKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC90ZXN0X2J1ZzM4OTc5Ny5odG1sCkBAIC0xOCwxNiArMTgsMTcgQEAgaHR0cHM6Ly9i
dWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZwogPHByZSBpZD0idGVzdCI+CiA8c2NyaXB0
IGNsYXNzPSJ0ZXN0Ym9keSIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KIAogLyoqIFRlc3QgZm9y
IEJ1ZyAzODk3OTcgKiovCiB2YXIgYWxsVGFncyA9IFtdOwogdmFyIGNsYXNzSW5mb3MgPSB7fTsK
IHZhciBpbnRlcmZhY2VzID0ge307CiB2YXIgaW50ZXJmYWNlc05vbkNsYXNzaW5mbyA9IHt9Owor
dmFyIGludGVyZmFjZXNOb25ET00gPSB7fTsKIAogZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHRhZykg
ewogICByZXR1cm4gIkhUTUwiICsgY2xhc3NJbmZvc1t0YWddICsgIkVsZW1lbnQiOwogfQogCiBm
dW5jdGlvbiBIVE1MX1RBRyhhVGFnTmFtZSwgYUltcGxDbGFzcykgewogICBhbGxUYWdzLnB1c2go
YVRhZ05hbWUpOwogICBjbGFzc0luZm9zW2FUYWdOYW1lXSA9IGFJbXBsQ2xhc3M7CkBAIC0zNiwy
MSArMzcsMjYgQEAgZnVuY3Rpb24gSFRNTF9UQUcoYVRhZ05hbWUsIGFJbXBsQ2xhc3MpIAogICAg
ICAgIm5zSURPTU5TRWxlbWVudCIsCiAgICAgICAibnNJRE9NRXZlbnRUYXJnZXQiLAogICAgICAg
Im5zSURPTU5TRXZlbnRUYXJnZXQiLAogICAgICAgIm5zSURPTU5TSFRNTEVsZW1lbnQiLAogICAg
ICAgIm5zSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZSIsCiAgICAgICAibnNJRE9NTm9kZVNlbGVj
dG9yIiBdOwogCiAgIC8vIFNvbWUgaW50ZXJmYWNlcyBkb24ndCBhcHBlYXIgaW4gY2xhc3NpbmZv
IGJlY2F1c2Ugb3RoZXIgaW50ZXJmYWNlcyB0aGF0Ci0gIC8vIGluaGVyaXQgZnJvbSB0aGVtIGRv
LgorICAvLyBpbmhlcml0IGZyb20gdGhlbSBkby4gIFRoZXNlIGFyZSB2aXNpYmxlIHRvIHVucHJp
dmlsZWdlZCBzY3JpcHQuCiAgIGludGVyZmFjZXNOb25DbGFzc2luZm9bYVRhZ05hbWVdID0KICAg
ICBbICJuc0lET01Ob2RlIiwKLSAgICAgICJuc0lET01FbGVtZW50IiwKLSAgICAgICJuc0lET00z
RXZlbnRUYXJnZXQiLAorICAgICAgIm5zSURPTUVsZW1lbnQiIF07CisKKyAgLy8gU29tZSBpbnRl
cmZhY2VzIGRvbid0IGFwcGVhciBpbiBjbGFzc2luZm8gYXQgYWxsIGJlY2F1c2UgdGhleSBhcmUK
KyAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgdW5kZXJseWluZyBYUENPTSBvYmpl
Y3RzLiAgVGhlc2UgYXJlIG5vdAorICAvLyB2aXNpYmxlIHRvIHVucHJpdmlsaWdlZCBzY3JpcHQu
CisgIGludGVyZmFjZXNOb25ET01bYVRhZ05hbWVdID0KKyAgICBbICJuc0lET00zRXZlbnRUYXJn
ZXQiLAogICAgICAgIm5zSVN1cHBvcnRzV2Vha1JlZmVyZW5jZSIgXTsKIAogICB2YXIgaW50ZXJm
YWNlTmFtZSA9ICJuc0lET00iICsgZ2V0Q2xhc3NOYW1lKGFUYWdOYW1lKTsKICAgaWYgKGludGVy
ZmFjZU5hbWUgaW4gQ29tcG9uZW50cy5pbnRlcmZhY2VzKSB7ICAvLyBubyBuc0lET01IVE1MU3Bh
bkVsZW1lbnQKICAgICBpbnRlcmZhY2VzW2FUYWdOYW1lXS5wdXNoKGludGVyZmFjZU5hbWUpOwog
ICAgIGludGVyZmFjZXNOb25DbGFzc2luZm9bYVRhZ05hbWVdLnB1c2goIm5zSURPTUhUTUxFbGVt
ZW50Iik7CiAgIH0gZWxzZSBpZiAoYVRhZ05hbWUgIT0gImlucyIgJiYgYVRhZ05hbWUgIT0gImRl
bCIpIHsKICAgICAvLyBJbmhlcml0cyBkaXJlY3RseSBmcm9tIG5zSURPTUhUTUxFbGVtZW50LCB1
bmxlc3MgaXQncyAiaW5zIiBvciAiZGVsIiwKQEAgLTY3LDE3ICs3MywxNyBAQCBmdW5jdGlvbiBI
VE1MX1RBRyhhVGFnTmFtZSwgYUltcGxDbGFzcykgCiAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4g
MikgewogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzWzJdLmxlbmd0aDsgKytpKSB7
CiAgICAgICBpbnRlcmZhY2VzW2FUYWdOYW1lXS5wdXNoKGFyZ3VtZW50c1syXVtpXSk7CiAgICAg
fQogICB9CiAKICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7CiAgICAgZm9yIChpID0gMDsg
aSA8IGFyZ3VtZW50c1szXS5sZW5ndGg7ICsraSkgewotICAgICAgaW50ZXJmYWNlc05vbkNsYXNz
aW5mb1thVGFnTmFtZV0ucHVzaChhcmd1bWVudHNbM11baV0pOworICAgICAgaW50ZXJmYWNlc05v
bkRPTVthVGFnTmFtZV0ucHVzaChhcmd1bWVudHNbM11baV0pOwogICAgIH0KICAgfQogfQogCiBj
b25zdCBvYmplY3RJZmFjZXMgPSBbCiAgICAgImltZ0lEZWNvZGVyT2JzZXJ2ZXIiLCAibnNJUmVx
dWVzdE9ic2VydmVyIiwgIm5zSVN0cmVhbUxpc3RlbmVyIiwKICAgICAibnNJRnJhbWVMb2FkZXJP
d25lciIsICJuc0lPYmplY3RMb2FkaW5nQ29udGVudCIsICJuc0lJbnRlcmZhY2VSZXF1ZXN0b3Ii
LAogICAgICJuc0lDaGFubmVsRXZlbnRTaW5rIgpAQCAtMjU2LDE4ICsyNjIsNDcgQEAgZm9yIGVh
Y2ggKHZhciB0YWcgaW4gYWxsVGFncykgewogICAvLyBDaGVjayB0aGF0IGVhY2ggbm9kZSBRSXMg
dG8gYWxsIHRoZSB0aGluZ3Mgd2UgZXhwZWN0IGl0IHRvIFFJIHRvCiAgIGZvciBlYWNoICh2YXIg
aWZhY2UgaW4gaW50ZXJmYWNlc1t0YWddLmNvbmNhdChpbnRlcmZhY2VzTm9uQ2xhc3NpbmZvW3Rh
Z10pKSB7CiAgICAgaXMoaWZhY2UgaW4gQ29tcG9uZW50cy5pbnRlcmZhY2VzLCB0cnVlLAogICAg
ICAgIGlmYWNlICsgIiBub3QgaW4gQ29tcG9uZW50cy5pbnRlcmZhY2VzIik7CiAgICAgaXMobm9k
ZSBpbnN0YW5jZW9mIENvbXBvbmVudHMuaW50ZXJmYWNlc1tpZmFjZV0sIHRydWUsCiAgICAgICAg
dGFnTmFtZSh0YWcpICsgIiBkb2VzIG5vdCBRSSB0byAiICsgaWZhY2UpOwogICB9CiAKKyAgLy8g
Q2hlY2sgdGhhdCBlYWNoIG5vZGUgZG9lc24ndCBRSSB0byBub24tRE9NIHRoaW5ncyAKKyAgZm9y
IGVhY2ggKHZhciBpZmFjZSBpbiBpbnRlcmZhY2VzTm9uRE9NW3RhZ10pIHsKKyAgICBpcyhpZmFj
ZSBpbiBDb21wb25lbnRzLmludGVyZmFjZXMsIHRydWUsCisgICAgICAgaWZhY2UgKyAiIG5vdCBp
biBDb21wb25lbnRzLmludGVyZmFjZXMiKTsKKyAgICBpcyhub2RlIGluc3RhbmNlb2YgQ29tcG9u
ZW50cy5pbnRlcmZhY2VzW2lmYWNlXSwgZmFsc2UsCisgICAgICAgdGFnTmFtZSh0YWcpICsgIiBz
aG91bGQgbm90IFFJIHRvICIgKyBpZmFjZSk7CisgIH0KK30KKworbmV0c2NhcGUuc2VjdXJpdHku
UHJpdmlsZWdlTWFuYWdlci5lbmFibGVQcml2aWxlZ2UoIlVuaXZlcnNhbFhQQ29ubmVjdCIpOwor
Citmb3IgZWFjaCAodmFyIHRhZyBpbiBhbGxUYWdzKSB7CisgIHZhciBub2RlID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCh0YWcpOworCisgIC8vIEhhdmUgdG8gdXNlIHRoZSBwcm90bydzIHRvU3Ry
aW5nKCksIHNpbmNlIEhUTUxBbmNob3JFbGVtZW50IGFuZCBjb21wYW55CisgIC8vIG92ZXJyaWRl
IHRvU3RyaW5nKCkuCisgIHZhciBub2RlU3RyaW5nID0gSFRNTEVsZW1lbnQucHJvdG90eXBlLnRv
U3RyaW5nLmFwcGx5KG5vZGUpOworCisgIC8vIERlYnVnIGJ1aWxkcyBoYXZlIGV4dHJhIGluZm8s
IHNvIGNob3Agb2ZmIGFmdGVyICJFbGVtZW50IiBpZiBpdCdzIGZvbGxvd2VkCisgIC8vIGJ5ICcg
JyBvciAnXScKKyAgbm9kZVN0cmluZyA9IG5vZGVTdHJpbmcucmVwbGFjZSgvRWxlbWVudFtcXSBd
LiovLCAiRWxlbWVudCIpOworCisgIC8vIENoZWNrIHRoYXQgZWFjaCBub2RlIGRvZXNuJ3QgUUkg
dG8gbm9uLURPTSB0aGluZ3MsIGV4Y2VwdCB3aGVuIHdlIGhhdmUgcHJpdnMKKyAgZm9yIGVhY2gg
KHZhciBpZmFjZSBpbiBpbnRlcmZhY2VzTm9uRE9NW3RhZ10pIHsKKyAgICBpcyhpZmFjZSBpbiBD
b21wb25lbnRzLmludGVyZmFjZXMsIHRydWUsCisgICAgICAgaWZhY2UgKyAiIG5vdCBpbiBDb21w
b25lbnRzLmludGVyZmFjZXMiKTsKKyAgICBpcyhub2RlIGluc3RhbmNlb2YgQ29tcG9uZW50cy5p
bnRlcmZhY2VzW2lmYWNlXSwgdHJ1ZSwKKyAgICAgICB0YWdOYW1lKHRhZykgKyAiIHNob3VsZCBR
SSB0byAiICsgaWZhY2UgKyAiIGZyb20gcHJpdmlsZWdlZCBzY3JpcHQiKTsKKyAgfQorCiAgIC8v
IE5vdyBzZWUgd2hhdCBjbGFzc2luZm8gcmVwb3J0cwotICBuZXRzY2FwZS5zZWN1cml0eS5Qcml2
aWxlZ2VNYW5hZ2VyLmVuYWJsZVByaXZpbGVnZSgiVW5pdmVyc2FsWFBDb25uZWN0Iik7CiAgIHZh
ciBub2RlQ2xhc3NJbmZvID0gbm9kZS5RdWVyeUludGVyZmFjZShDb21wb25lbnRzLmludGVyZmFj
ZXMubnNJQ2xhc3NJbmZvKTsKICAgdmFyIGNvdW50ID0ge307CiAgIHZhciBjbGFzc0luZm9JbnRl
cmZhY2VzID0KICAgICBub2RlQ2xhc3NJbmZvLmdldEludGVyZmFjZXMoY291bnQpLgogICAgIG1h
cChmdW5jdGlvbihpZCkgeyByZXR1cm4gQ29tcG9uZW50cy5pbnRlcmZhY2VzQnlJRFtpZF0udG9T
dHJpbmcoKTsgfSk7CiAKICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Uga25vdyBhYm91dCBhbGwgdGhl
IHRoaW5ncyBjbGFzc2luZm8gY2xhaW1zCiAgIGZvciBlYWNoICh2YXIgY2xhc3NJbmZvSW50ZXJm
YWNlIGluIGNsYXNzSW5mb0ludGVyZmFjZXMpIHsKZGlmZiAtLWdpdCBhL2NvbnRlbnQveGJsL3B1
YmxpYy9NYWtlZmlsZS5pbiBiL2NvbnRlbnQveGJsL3B1YmxpYy9NYWtlZmlsZS5pbgotLS0gYS9j
b250ZW50L3hibC9wdWJsaWMvTWFrZWZpbGUuaW4KKysrIGIvY29udGVudC94YmwvcHVibGljL01h
a2VmaWxlLmluCkBAIC00MCwxMyArNDAsMTQgQEAgdG9wc3JjZGlyCT0gQHRvcF9zcmNkaXJACiBz
cmNkaXIJCT0gQHNyY2RpckAKIFZQQVRICQk9IEBzcmNkaXJACiAKIGluY2x1ZGUgJChERVBUSCkv
Y29uZmlnL2F1dG9jb25mLm1rCiAKIE1PRFVMRQkJPSBjb250ZW50CiAKIEVYUE9SVFMJCT0gXAor
CW5zSUV4dHJhSW50ZXJmYWNlSW1wbGVtZW50b3IuaCBcCiAJbnNJWEJMU2VydmljZS5oIFwKIAkk
KE5VTEwpCiAKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawogCmRpZmYgLS1n
aXQgYS9jb250ZW50L3hibC9wdWJsaWMvbnNJRXh0cmFJbnRlcmZhY2VJbXBsZW1lbnRvci5oIGIv
Y29udGVudC94YmwvcHVibGljL25zSUV4dHJhSW50ZXJmYWNlSW1wbGVtZW50b3IuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQveGJsL3B1YmxpYy9uc0lF
eHRyYUludGVyZmFjZUltcGxlbWVudG9yLmgKQEAgLTAsMCArMSw1NSBAQAorLyogKioqKiogQkVH
SU4gTElDRU5TRSBCTE9DSyAqKioqKg0KKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BM
IDIuMQ0KKyAqDQorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0
aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uDQorICogMS4xICh0aGUgIkxpY2Vuc2Ui
KTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQor
ICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0K
KyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLw0KKyAqDQorICogU29mdHdhcmUgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNp
cywNCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UNCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQ0KKyAqIExpY2Vuc2UuDQor
ICoNCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLg0KKyAqDQorICog
VGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzDQorICogICBLeWxl
IEh1ZXkgPG1lQGt5bGVodWV5LmNvbT4NCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0
aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDEwDQorICogdGhlIEluaXRpYWwgRGV2
ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKyAqDQorICogQ29udHJpYnV0b3Iocyk6DQor
ICoNCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1
c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZg0KKyAqIGVpdGhlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLA0KKyAqIG9yIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRo
ZSAiTEdQTCIpLA0KKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBv
ciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkDQorICogb2YgdGhvc2UgYWJvdmUuIElm
IHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkN
CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBu
b3QgdG8gYWxsb3cgb3RoZXJzIHRvDQorICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXINCisgKiBkZWNpc2lvbiBi
eSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhl
IG5vdGljZQ0KKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3Ig
dGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlDQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUs
IGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcg0KKyAq
IHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuDQor
ICoNCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLw0KKw0KKyNpZm5kZWYgbnNJ
RXh0cmFJbnRlcmZhY2VJbXBsZW1lbnRvcl9oX18NCisjZGVmaW5lIG5zSUV4dHJhSW50ZXJmYWNl
SW1wbGVtZW50b3JfaF9fDQorDQorI2luY2x1ZGUgIm5zSVN1cHBvcnRzLmgiDQorDQorI2RlZmlu
ZSBOU19JRVhUUkFJTlRFUkZBQ0VJTVBMRU1FTlRPUl9JSUQgICAgICBcDQoreyAweDBkN2Y1ZTRi
LCAweGE1ZmYsIDB4NDAzYywgeyAweDg1LCAweDFlLCAweDQzLCAweGU3LCAweDc1LCAweDkwLCAw
eDM1LCAweGNmIH0gfQ0KKw0KKy8vIFRoaXMgY2xhc3MgZXhwb3NlcyBleHRyYSBpbnRlcmZhY2Vz
IHRocm91Z2ggdGhlIERPTSB3aXRob3V0IHVzaW5nIGNsYXNzIGluZm8uDQorY2xhc3MgbnNJRXh0
cmFJbnRlcmZhY2VJbXBsZW1lbnRvciA6IHB1YmxpYyBuc0lTdXBwb3J0cw0KK3sNCitwdWJsaWM6
DQorICBOU19ERUNMQVJFX1NUQVRJQ19JSURfQUNDRVNTT1IoTlNfSUVYVFJBSU5URVJGQUNFSU1Q
TEVNRU5UT1JfSUlEKQ0KKyAgdmlydHVhbCBib29sIE1pZ2h0SGF2ZUV4dHJhSW50ZXJmYWNlKFJF
Rk5TSUlEIGFJSUQpID0gMDsNCit9Ow0KKw0KK05TX0RFRklORV9TVEFUSUNfSUlEX0FDQ0VTU09S
KG5zSUV4dHJhSW50ZXJmYWNlSW1wbGVtZW50b3IsIE5TX0lFWFRSQUlOVEVSRkFDRUlNUExFTUVO
VE9SX0lJRCkNCisNCisjZW5kaWYgLy8gbnNJRXh0cmFJbnRlcmZhY2VJbXBsZW1lbnRvcl9oX18N
CmRpZmYgLS1naXQgYS9kb20vYmFzZS9uc0RPTUNsYXNzSW5mby5jcHAgYi9kb20vYmFzZS9uc0RP
TUNsYXNzSW5mby5jcHAKLS0tIGEvZG9tL2Jhc2UvbnNET01DbGFzc0luZm8uY3BwCisrKyBiL2Rv
bS9iYXNlL25zRE9NQ2xhc3NJbmZvLmNwcApAQCAtNTE4LDIzICs1MTgsMTggQEAgc3RhdGljIGNv
bnN0IGNoYXIga0RPTVN0cmluZ0J1bmRsZVVSTFtdIAogCiAjZGVmaW5lIE5PREVfU0NSSVBUQUJM
RV9GTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgKChET01fREVGQVVMVF9TQ1JJUFRBQkxFX0ZMQUdTIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBS
T1BFUlRZIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBuc0lY
UENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAm
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH5uc0lYUENTY3JpcHRh
YmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkKIAotLy8gV2UgbmVlZCB0byBsZXQgSmF2
YVNjcmlwdCBRSSBlbGVtZW50cyB0byBpbnRlcmZhY2VzIHRoYXQgYXJlIG5vdCBpbgotLy8gdGhl
IGNsYXNzaW5mbyBzaW5jZSBYQkwgY2FuIGJlIHVzZWQgdG8gZHluYW1pY2FsbHkgaW1wbGVtZW50
IG5ldwotLy8gdW5rbm93biBpbnRlcmZhY2VzIG9uIGVsZW1lbnRzLCBhY2Nlc3NpYmlsaXR5IHJl
bGllcyBvbiB0aGlzIGJlaW5nCi0vLyBwb3NzaWJsZS4KLQogI2RlZmluZSBFTEVNRU5UX1NDUklQ
VEFCTEVfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAoKE5PREVfU0NSSVBUQUJMRV9GTEFHUyAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lO
Rk9fSU5URVJGQUNFU19PTkxZKSB8ICAgXAorICAoTk9ERV9TQ1JJUFRBQkxFX0ZMQUdTIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgbnNJ
WFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9FTlVNRVJBVEUpCiAK
ICNkZWZpbmUgRVhURVJOQUxfT0JKX1NDUklQVEFCTEVfRkxBR1MgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgKChFTEVNRU5UX1NDUklQVEFCTEVfRkxBR1MgJiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB+bnNJ
WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkpIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgIG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIG5zSVhQQ1NjcmlwdGFi
bGU6OldBTlRfR0VUUFJPUEVSVFkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKZGlmZiAtLWdpdCBhL2RvbS9zcmMvdGhyZWFkcy9uc0RPTVdvcmtlck1hY3Jvcy5oIGIv
ZG9tL3NyYy90aHJlYWRzL25zRE9NV29ya2VyTWFjcm9zLmgKLS0tIGEvZG9tL3NyYy90aHJlYWRz
L25zRE9NV29ya2VyTWFjcm9zLmgKKysrIGIvZG9tL3NyYy90aHJlYWRzL25zRE9NV29ya2VyTWFj
cm9zLmgKQEAgLTExNiwyMCArMTE2LDEyIEBAIE5TX0lNUExfVEhSRUFEU0FGRV9ET01fQ0lfQUxM
X1RIRV9SRVNUKF8KICAgTlNfSU1FVEhPRCBHZXRGbGFncyhQUlVpbnQzMiogYUZsYWdzKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7IHJldHVybiBfdG8gR2V0
RmxhZ3MoYUZsYWdzKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgTlNfSU1FVEhPRCBHZXRDbGFzc0lETm9BbGxvYyhuc0NJRCogYUNsYXNzSUROb0FsbG9j
KSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7IHJldHVybiBfdG8gR2V0Q2xhc3NJRE5v
QWxsb2MoYUNsYXNzSUROb0FsbG9jKTsgfQogCiAjZGVmaW5lIE5TX0RFQ0xfTlNJQ0xBU1NJTkZP
X0dFVElOVEVSRkFDRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIE5T
X0lNRVRIT0QgR2V0SW50ZXJmYWNlcyhQUlVpbnQzMiogYUNvdW50LCBuc0lJRCoqKiBhQXJyYXkp
OwogCi0vLyBEb24ndCBrbm93IHdoeSBuc0lTdXBwb3J0cy5pZGwgZGVmaW5lcyB0aGlzIG91dC4u
LgotI2RlZmluZSBOU19GT1JXQVJEX05TSVNVUFBPUlRTKF90bykgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBOU19JTUVUSE9EIFF1ZXJ5SW50ZXJmYWNlKGNv
bnN0IG5zSUlEJiB1dWlkLCB2b2lkKiogcmVzdWx0KSB7ICAgICAgICAgICAgICAgXAotICAgIHJl
dHVybiBfdG8gUXVlcnlJbnRlcmZhY2UodXVpZCwgcmVzdWx0KTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBOU19JTUVUSE9EXyhu
c3JlZmNudCkgQWRkUmVmKHZvaWQpIHsgcmV0dXJuIF90byBBZGRSZWYoKTsgfSAgICAgICAgICAg
ICAgICAgXAotICBOU19JTUVUSE9EXyhuc3JlZmNudCkgUmVsZWFzZSh2b2lkKSB7IHJldHVybiBf
dG8gUmVsZWFzZSgpOyB9Ci0KICNkZWZpbmUgSlNPTl9QUklNSVRJVkVfUFJPUE5BTUUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgInByaW1pdGl2ZSIK
IAogI2VuZGlmIC8qIF9fTlNET01XT1JLRVJNQUNST1NfSF9fICovCmRpZmYgLS1naXQgYS9lZGl0
b3IvbGliZWRpdG9yL3RleHQvdGVzdHMvdGVzdF9idWc1OTYzMzMuaHRtbCBiL2VkaXRvci9saWJl
ZGl0b3IvdGV4dC90ZXN0cy90ZXN0X2J1ZzU5NjMzMy5odG1sCi0tLSBhL2VkaXRvci9saWJlZGl0
b3IvdGV4dC90ZXN0cy90ZXN0X2J1ZzU5NjMzMy5odG1sCisrKyBiL2VkaXRvci9saWJlZGl0b3Iv
dGV4dC90ZXN0cy90ZXN0X2J1ZzU5NjMzMy5odG1sCkBAIC0yMiwxNiArMjIsMTggQEAgaHR0cHM6
Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZwogLyoqIFRlc3QgZm9yIEJ1ZyA1OTYz
MzMgKiovCiAKIFNpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0RmluaXNoKCk7CiBhZGRMb2FkRXZl
bnQoZnVuY3Rpb24oKSBTaW1wbGVUZXN0LmV4ZWN1dGVTb29uKHJ1blRlc3QpKTsKIAogdmFyIGdN
aXNzcGVsdFdvcmRzOwogCiBmdW5jdGlvbiBnZXRFZGl0b3IoKSB7CisgIC8vIFRvIFFJIHRvIG5v
bi1DbGFzc0luZm8gaW50ZXJmYWNlcyB3ZSBtdXN0IGFzc2VydCBwcml2aWxlZ2VzCisgIG5ldHNj
YXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCdVbml2ZXJzYWxY
UENvbm5lY3QnKTsKICAgdmFyIENpID0gQ29tcG9uZW50cy5pbnRlcmZhY2VzOwogICByZXR1cm4g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQiKQogICAgICAgICAgICAgICAgICAuUXVlcnlJ
bnRlcmZhY2UoQ2kubnNJRE9NTlNFZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgICAgICAgICAgIC5l
ZGl0b3I7CiB9CiAKIGZ1bmN0aW9uIGdldFNwZWxsQ2hlY2tTZWxlY3Rpb24oKSB7CiAgIHZhciBl
ZGl0b3IgPSBnZXRFZGl0b3IoKTsKZGlmZiAtLWdpdCBhL2VkaXRvci9saWJlZGl0b3IvdGV4dC90
ZXN0cy90ZXN0X3RleHRlZGl0b3Jfa2V5ZXZlbnRfaGFuZGxpbmcuaHRtbCBiL2VkaXRvci9saWJl
ZGl0b3IvdGV4dC90ZXN0cy90ZXN0X3RleHRlZGl0b3Jfa2V5ZXZlbnRfaGFuZGxpbmcuaHRtbAot
LS0gYS9lZGl0b3IvbGliZWRpdG9yL3RleHQvdGVzdHMvdGVzdF90ZXh0ZWRpdG9yX2tleWV2ZW50
X2hhbmRsaW5nLmh0bWwKKysrIGIvZWRpdG9yL2xpYmVkaXRvci90ZXh0L3Rlc3RzL3Rlc3RfdGV4
dGVkaXRvcl9rZXlldmVudF9oYW5kbGluZy5odG1sCkBAIC05MCwxNiArOTAsMTggQEAgZnVuY3Rp
b24gcnVuVGVzdHMoKQogICAgICAgIGdldERlc2NpcHRpb24oYVByZXZlbnRlZE9uQnViYmxpbmcp
ICsgInByZXZlbnRlZCBvbiBidWJibGluZyBwaGFzZSIpOwogICB9CiAKICAgdmFyIHN5c3RlbUdy
b3VwID0KICAgICBDb21wb25lbnRzLmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9ldmVudGxpc3RlbmVy
c2VydmljZTsxIl0uCiAgICAgICBnZXRTZXJ2aWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lF
dmVudExpc3RlbmVyU2VydmljZSkuCiAgICAgICBzeXN0ZW1FdmVudEdyb3VwOwogICB2YXIgcGFy
ZW50RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXNwbGF5Iik7CisgIC8vIFRv
IFFJIHRvIG5vbi1DbGFzc0luZm8gaW50ZXJmYWNlcyB3ZSBtdXN0IGFzc2VydCBwcml2aWxlZ2Vz
CisgIG5ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCdV
bml2ZXJzYWxYUENvbm5lY3QnKTsKICAgcGFyZW50RWxlbWVudC5RdWVyeUludGVyZmFjZShDb21w
b25lbnRzLmludGVyZmFjZXMubnNJRE9NM0V2ZW50VGFyZ2V0KTsKICAgcGFyZW50RWxlbWVudC5h
ZGRHcm91cGVkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLCBsaXN0ZW5lciwgdHJ1ZSwgc3lzdGVt
R3JvdXApOwogICBwYXJlbnRFbGVtZW50LmFkZEdyb3VwZWRFdmVudExpc3RlbmVyKCJrZXlwcmVz
cyIsIGxpc3RlbmVyLCBmYWxzZSwgc3lzdGVtR3JvdXApOwogCiAgIGZ1bmN0aW9uIGRvVGVzdChh
RWxlbWVudCwgYURlc2NyaXB0aW9uLCBhSXNTaW5nbGVMaW5lLCBhSXNSZWFkb25seSwKICAgICAg
ICAgICAgICAgICAgIGFJc1RhYmJhYmxlKQogICB7CiAgICAgZnVuY3Rpb24gcmVzZXQoYVRleHQp
CmRpZmYgLS1naXQgYS9qcy9zcmMveHBjb25uZWN0L3NyYy94cGN3cmFwcGVkbmF0aXZlLmNwcCBi
L2pzL3NyYy94cGNvbm5lY3Qvc3JjL3hwY3dyYXBwZWRuYXRpdmUuY3BwCi0tLSBhL2pzL3NyYy94
cGNvbm5lY3Qvc3JjL3hwY3dyYXBwZWRuYXRpdmUuY3BwCisrKyBiL2pzL3NyYy94cGNvbm5lY3Qv
c3JjL3hwY3dyYXBwZWRuYXRpdmUuY3BwCkBAIC00NywxNiArNDcsMTcgQEAKICNpbmNsdWRlICJu
c1dyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgInhwY2xvZy5oIgogI2luY2x1ZGUgImpzdGwuaCIK
ICNpbmNsdWRlICJuc0lOb2RlLmgiCiAjaW5jbHVkZSAieHBjcXVpY2tzdHVicy5oIgogI2luY2x1
ZGUgImpzcHJveHkuaCIKICNpbmNsdWRlICJBY2Nlc3NDaGVjay5oIgogI2luY2x1ZGUgIldyYXBw
ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAibnNJRXh0cmFJbnRlcmZhY2VJbXBsZW1lbnRvci5oIgog
CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwogCiBOU19JTVBMX0NZQ0xFX0NPTExFQ1RJT05fQ0xBU1Mo
WFBDV3JhcHBlZE5hdGl2ZSkKIAogTlNfSU1FVEhPRElNUAogTlNfQ1lDTEVfQ09MTEVDVElPTl9D
TEFTU05BTUUoWFBDV3JhcHBlZE5hdGl2ZSk6OlJvb3RBbmRVbmxpbmtKU09iamVjdHModm9pZCAq
cCkKIHsKQEAgLTE4OTEsMTYgKzE4OTIsMjUgQEAgWFBDV3JhcHBlZE5hdGl2ZTo6RmluZFRlYXJP
ZmYoWFBDQ2FsbENvbgogCiByZXR1cm5fcmVzdWx0OgogCiAgICAgaWYocEVycm9yKQogICAgICAg
ICAqcEVycm9yID0gcnY7CiAgICAgcmV0dXJuIHRvOwogfQogCitib29sIE1pZ2h0SGF2ZUV4dHJh
SW50ZXJmYWNlKG5zSVN1cHBvcnRzKiBhU3VwcG9ydHMsIGNvbnN0IG5zSUlEKiBhSUlEKQorewor
ICBuc0NPTVB0cjxuc0lFeHRyYUludGVyZmFjZUltcGxlbWVudG9yPiBlSUkgPSBkb19RdWVyeUlu
dGVyZmFjZShhU3VwcG9ydHMpOworICBpZiAoIWVJSSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAg
cmV0dXJuIGVJSS0+TWlnaHRIYXZlRXh0cmFJbnRlcmZhY2UoKmFJSUQpOworfQorCiBuc3Jlc3Vs
dAogWFBDV3JhcHBlZE5hdGl2ZTo6SW5pdFRlYXJPZmYoWFBDQ2FsbENvbnRleHQmIGNjeCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQQ1dyYXBwZWROYXRpdmVUZWFyT2ZmKiBhVGVh
ck9mZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQQ05hdGl2ZUludGVyZmFjZSog
YUludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQm9vbCBuZWVkSlNP
YmplY3QpCiB7CiAgICAgLy8gVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGlsZSBsb2NrZWQgKGR1cmlu
ZyBYUENXcmFwcGVkTmF0aXZlOjpGaW5kVGVhck9mZikuCiAKQEAgLTE5MTAsMTcgKzE5MjAsMTgg
QEAgWFBDV3JhcHBlZE5hdGl2ZTo6SW5pdFRlYXJPZmYoWFBDQ2FsbENvbgogICAgIG5zSVN1cHBv
cnRzKiBpZGVudGl0eSA9IEdldElkZW50aXR5T2JqZWN0KCk7CiAgICAgbnNJU3VwcG9ydHMqIG9i
ajsKIAogICAgIC8vIElmIHRoZSBzY3JpcHRhYmxlIGhlbHBlciBmb3JiaWRzIHVzIGZyb20gcmVm
bGVjdGluZyBhZGRpdGlvbmFsCiAgICAgLy8gaW50ZXJmYWNlcywgdGhlbiBkb24ndCBldmVuIHRy
eSB0aGUgUUksIGp1c3QgZmFpbC4KICAgICBpZihtU2NyaXB0YWJsZUluZm8gJiYKICAgICAgICBt
U2NyaXB0YWJsZUluZm8tPkdldEZsYWdzKCkuQ2xhc3NJbmZvSW50ZXJmYWNlc09ubHkoKSAmJgog
ICAgICAgICFtU2V0LT5IYXNJbnRlcmZhY2UoYUludGVyZmFjZSkgJiYKLSAgICAgICAhbVNldC0+
SGFzSW50ZXJmYWNlV2l0aEFuY2VzdG9yKGFJbnRlcmZhY2UpKQorICAgICAgICFtU2V0LT5IYXNJ
bnRlcmZhY2VXaXRoQW5jZXN0b3IoYUludGVyZmFjZSkgJiYKKyAgICAgICAhTWlnaHRIYXZlRXh0
cmFJbnRlcmZhY2UoaWRlbnRpdHksIGlpZCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlNfRVJS
T1JfTk9fSU5URVJGQUNFOwogICAgIH0KIAogICAgIC8vIFdlIGFyZSBhYm91dCB0byBjYWxsIG91
dCB0byB1bmxvY2sgYW5kIG90aGVyIGNvZGUuCiAgICAgLy8gU28gcHJvdGVjdCBvdXIgaW50ZW5k
ZWQgdGVhcm9mZi4KIAogICAgIGFUZWFyT2ZmLT5TZXRSZXNlcnZlZCgpOwpkaWZmIC0tZ2l0IGEv
eHBjb20vYmFzZS9uc0lTdXBwb3J0c0Jhc2UuaCBiL3hwY29tL2Jhc2UvbnNJU3VwcG9ydHNCYXNl
LmgKLS0tIGEveHBjb20vYmFzZS9uc0lTdXBwb3J0c0Jhc2UuaAorKysgYi94cGNvbS9iYXNlL25z
SVN1cHBvcnRzQmFzZS5oCkBAIC0xMDIsMTEgKzEwMiwxOCBAQCBwdWJsaWM6CiAgICAqLwogICBO
U19JTUVUSE9EXyhuc3JlZmNudCkgUmVsZWFzZSh2b2lkKSA9IDA7CiAKICAgLy9AfQogfTsKIAog
TlNfREVGSU5FX1NUQVRJQ19JSURfQUNDRVNTT1IobnNJU3VwcG9ydHMsIE5TX0lTVVBQT1JUU19J
SUQpCiAKKyNkZWZpbmUgTlNfRk9SV0FSRF9OU0lTVVBQT1JUUyhfdG8pICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgTlNfSU1FVEhPRCBRdWVyeUludGVyZmFj
ZShjb25zdCBuc0lJRCYgdXVpZCwgdm9pZCoqIHJlc3VsdCkgeyAgICAgICAgICAgICAgIFwKKyAg
ICByZXR1cm4gX3RvIFF1ZXJ5SW50ZXJmYWNlKHV1aWQsIHJlc3VsdCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgTlNfSU1FVEhP
RF8obnNyZWZjbnQpIEFkZFJlZih2b2lkKSB7IHJldHVybiBfdG8gQWRkUmVmKCk7IH0gICAgICAg
ICAgICAgICAgIFwKKyAgTlNfSU1FVEhPRF8obnNyZWZjbnQpIFJlbGVhc2Uodm9pZCkgeyByZXR1
cm4gX3RvIFJlbGVhc2UoKTsgfQorCiAvKkB9Ki8KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>485607</attachid>
            <date>2010-10-24 12:19:19 -0700</date>
            <delta_ts>2010-11-16 12:55:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>qidom</filename>
            <type>text/plain</type>
            <size>20494</size>
            <attacher>khuey</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIEt5bGUgSHVleSA8a2h1ZXlAa3lsZWh1ZXkuY29t
PgojIERhdGUgMTI4NzkxMzY5OSAxNDQwMAojIE5vZGUgSUQgMzNmZjA4ZjU3ZTdjOGRjMzJjM2Yx
MDBjMDdhNmJkYzA0NGE2ZTA1OQojIFBhcmVudCAwOTRkODM4ZWQ3ODBjNmExMmRmZGJmOWUxMjQ3
OGY4MzM1NGRhYmQ3CkJ1ZyA2MDUyNzE6IERvIG5vdCBhbGxvdyB1bnRydXN0ZWQgY2FsbGVycyB0
byBRSSB0byBub24tQ2xhc3NJbmZvIGludGVyZmFjZXMuIHI/PXNpY2tpbmcgc3I/PWpzdAoKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvRWxlbWVudC5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9FbGVtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9FbGVtZW50LmgKKysrIGIv
Y29udGVudC9iYXNlL3B1YmxpYy9FbGVtZW50LmgKQEAgLTcyLDI0ICs3Miw0MSBAQCBlbnVtIHsK
ICAgLy8gSnVzdCB0aGUgSEFTX1BFTkRJTkcgYml0cywgZm9yIGNvbnZlbmllbmNlCiAgIEVMRU1F
TlRfUEVORElOR19SRVNUWUxFX0ZMQUdTID0gRUxFTUVOVF9IQVNfUEVORElOR19SRVNUWUxFIHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTEVNRU5UX0hBU19QRU5ESU5HX0FO
SU1BVElPTl9SRVNUWUxFLAogCiAgIC8vIFJlbWFpbmluZyBiaXRzIGFyZSBmb3Igc3ViY2xhc3Nl
cwogICBFTEVNRU5UX1RZUEVfU1BFQ0lGSUNfQklUU19PRkZTRVQgPSBOT0RFX1RZUEVfU1BFQ0lG
SUNfQklUU19PRkZTRVQgKyA0CiB9OwogCisjZGVmaW5lIE5TX0lFWFRSQUlOVEVSRkFDRUlNUExF
TUVOVE9SX0lJRCAgICAgIFwKK3sgMHgwZDdmNWU0YiwgMHhhNWZmLCAweDQwM2MsIHsgMHg4NSwg
MHgxZSwgMHg0MywgMHhlNywgMHg3NSwgMHg5MCwgMHgzNSwgMHhjZiB9IH0KKworLy8gWEJMIG5l
ZWRzIHRvIGJlIGFibGUgdG8gZXhwb3NlIGludGVyZmFjZXMgdGhyb3VnaCBYUENvbm5lY3QgdGhh
dCBhcmVuJ3QgZGVmaW5lZAorLy8gaW4gY2xhc3MgaW5mby4KK2NsYXNzIG5zSUV4dHJhSW50ZXJm
YWNlSW1wbGVtZW50b3IgOiBwdWJsaWMgbnNJQ29udGVudAoreworcHVibGljOgorICAvLyBEZWZh
dWx0IGNvbnN0cnVjdG9yIHRvIHBhc3MgaXQgZG93biB0aGUgY2hhaW4uCisgIG5zSUV4dHJhSW50
ZXJmYWNlSW1wbGVtZW50b3IoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZv
KSA6IG5zSUNvbnRlbnQoYU5vZGVJbmZvKSB7fQorCisgIE5TX0RFQ0xBUkVfU1RBVElDX0lJRF9B
Q0NFU1NPUihOU19JRVhUUkFJTlRFUkZBQ0VJTVBMRU1FTlRPUl9JSUQpCisgIHZpcnR1YWwgYm9v
bCBNaWdodEhhdmVFeHRyYUludGVyZmFjZShSRUZOU0lJRCBhSUlEKSA9IDA7Cit9OworCitOU19E
RUZJTkVfU1RBVElDX0lJRF9BQ0NFU1NPUihuc0lFeHRyYUludGVyZmFjZUltcGxlbWVudG9yLCBO
U19JRVhUUkFJTlRFUkZBQ0VJTVBMRU1FTlRPUl9JSUQpCisKIG5hbWVzcGFjZSBtb3ppbGxhIHsK
IG5hbWVzcGFjZSBkb20gewogCi1jbGFzcyBFbGVtZW50IDogcHVibGljIG5zSUNvbnRlbnQKK2Ns
YXNzIEVsZW1lbnQgOiBwdWJsaWMgbnNJRXh0cmFJbnRlcmZhY2VJbXBsZW1lbnRvcgogewogcHVi
bGljOgogI2lmZGVmIE1PWklMTEFfSU5URVJOQUxfQVBJCi0gIEVsZW1lbnQoYWxyZWFkeV9BZGRS
ZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvKSA6IG5zSUNvbnRlbnQoYU5vZGVJbmZvKSB7fQor
ICBFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbykgOiBuc0lF
eHRyYUludGVyZmFjZUltcGxlbWVudG9yKGFOb2RlSW5mbykge30KICNlbmRpZiAvLyBNT1pJTExB
X0lOVEVSTkFMX0FQSQogfTsKIAogfSAvLyBuYW1lc3BhY2UgZG9tCiB9IC8vIG5hbWVzcGFjZSBt
b3ppbGxhCiAKIGlubGluZSBtb3ppbGxhOjpkb206OkVsZW1lbnQqIG5zSU5vZGU6OkFzRWxlbWVu
dCgpIHsKICAgTlNfQVNTRVJUSU9OKElzRWxlbWVudCgpLCAiTm90IGFuIGVsZW1lbnQ/Iik7CmRp
ZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zR2VuZXJpY0VsZW1lbnQuY3BwIGIvY29udGVu
dC9iYXNlL3NyYy9uc0dlbmVyaWNFbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25z
R2VuZXJpY0VsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHZW5lcmljRWxlbWVu
dC5jcHAKQEAgLTQ0OTEsMjYgKzQ0OTEsNTQgQEAgTlNfSU5URVJGQUNFX01BUF9FTkQKIE5TX0lN
UExfQ1lDTEVfQ09MTEVDVElOR19BRERSRUZfQU1CSUdVT1VTKG5zR2VuZXJpY0VsZW1lbnQsIG5z
SUNvbnRlbnQpCiBOU19JTVBMX0NZQ0xFX0NPTExFQ1RJTkdfUkVMRUFTRV9BTUJJR1VPVVNfV0lU
SF9ERVNUUk9ZKG5zR2VuZXJpY0VsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTm9kZVV0aWxzOjpMYXN0
UmVsZWFzZSh0aGlzKSkKIAogbnNyZXN1bHQKIG5zR2VuZXJpY0VsZW1lbnQ6OlBvc3RRdWVyeUlu
dGVyZmFjZShSRUZOU0lJRCBhSUlELCB2b2lkKiogYUluc3RhbmNlUHRyKQogeworICBpZiAoYUlJ
RC5FcXVhbHMoTlNfR0VUX0lJRChuc0lFeHRyYUludGVyZmFjZUltcGxlbWVudG9yKSkpIHsKKyAg
ICAqYUluc3RhbmNlUHRyID0gc3RhdGljX2Nhc3Q8bnNJRXh0cmFJbnRlcmZhY2VJbXBsZW1lbnRv
cio+KHRoaXMpOworICAgIEFkZFJlZigpOworICAgIHJldHVybiBOU19PSzsKKyAgfQorCiAgIG5z
SURvY3VtZW50ICpkb2N1bWVudCA9IEdldE93bmVyRG9jKCk7CiAgIGlmIChkb2N1bWVudCkgewog
ICAgIHJldHVybiBkb2N1bWVudC0+QmluZGluZ01hbmFnZXIoKS0+R2V0QmluZGluZ0ltcGxlbWVu
dGF0aW9uKHRoaXMsIGFJSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYUluc3RhbmNlUHRyKTsKICAgfQogCiAgICphSW5z
dGFuY2VQdHIgPSBuc251bGw7CiAgIHJldHVybiBOU19FUlJPUl9OT19JTlRFUkZBQ0U7CiB9CiAK
Ky8vIG5zSUV4dHJhSW50ZXJmYWNlSW1wbGVtZW50b3IKK2Jvb2wKK25zR2VuZXJpY0VsZW1lbnQ6
Ok1pZ2h0SGF2ZUV4dHJhSW50ZXJmYWNlKFJFRk5TSUlEIGFJSUQpCit7CisgIC8vIE1ha2UgdGhp
cyBjaGVjayBhIG5vb3AgZm9yIHRydXN0ZWQgc2NyaXB0LiAgUHJpdmlsZWdlZCBjYWxsZXJzIGNh
biBhbHdheXMgdHJ5IHRvCisgIC8vIFFJIGFuIGVsZW1lbnQgdG8gd2hhdGV2ZXIgdGhleSB3YW50
LgorICBpZiAobnNDb250ZW50VXRpbHM6OklzQ2FsbGVyVHJ1c3RlZEZvckNhcGFiaWxpdHkoIlVu
aXZlcnNhbFhQQ29ubmVjdCIpKSB7CisgICAgcmV0dXJuIHRydWU7IC8vIFdlIG1pZ2h0IG5vdCBo
YXZlIGl0LCBidXQgdGhpcyBpcyBqdXN0IHRvIGNvbnZpbmNlIFhQQ29ubmVjdAorICAgICAgICAg
ICAgICAgICAvLyB0byBkbyB0aGUgUUksIGF0IHdoaWNoIHBvaW50IGl0J2xsIGRpc2NvdmVyIHRo
ZSB0cnV0aC4KKyAgfQorCisgIG5zSURvY3VtZW50ICpkb2N1bWVudCA9IEdldE93bmVyRG9jKCk7
CisgIGlmICghZG9jdW1lbnQpCisgICAgcmV0dXJuIGZhbHNlOworCisgIG5zWEJMQmluZGluZyog
YmluZGluZyA9IGRvY3VtZW50LT5CaW5kaW5nTWFuYWdlcigpLT5HZXRCaW5kaW5nKHRoaXMpOwor
ICBpZiAoIWJpbmRpbmcpCisgICAgcmV0dXJuIGZhbHNlOworCisgIHJldHVybiBiaW5kaW5nLT5J
bXBsZW1lbnRzSW50ZXJmYWNlKGFJSUQpOworfQorCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIG5zcmVzdWx0
CiBuc0dlbmVyaWNFbGVtZW50OjpMZWF2ZUxpbmsobnNQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
KQogewogICBuc0lMaW5rSGFuZGxlciAqaGFuZGxlciA9IGFQcmVzQ29udGV4dC0+R2V0TGlua0hh
bmRsZXIoKTsKICAgaWYgKCFoYW5kbGVyKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CmRpZmYg
LS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zR2VuZXJpY0VsZW1lbnQuaCBiL2NvbnRlbnQvYmFz
ZS9zcmMvbnNHZW5lcmljRWxlbWVudC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHZW5lcmlj
RWxlbWVudC5oCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHZW5lcmljRWxlbWVudC5oCkBAIC03
NjEsMTYgKzc2MSwxOCBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgbnNBdHRySW5mbyBHZXRBdHRySW5m
byhQUkludDMyIGFOYW1lc3BhY2VJRCwgbnNJQXRvbSogYU5hbWUpIGNvbnN0OwogCiAgIE5TX0RF
Q0xfQ1lDTEVfQ09MTEVDVElPTl9TQ1JJUFRfSE9MREVSX0NMQVNTKG5zR2VuZXJpY0VsZW1lbnQp
CiAKICAgdmlydHVhbCB2b2lkIE5vZGVJbmZvQ2hhbmdlZChuc0lOb2RlSW5mbyogYU9sZE5vZGVJ
bmZvKQogICB7CiAgIH0KIAorICAvLyBuc0lFeHRyYUludGVyZmFjZUltcGxlbWVudG9yCisgIHZp
cnR1YWwgYm9vbCBNaWdodEhhdmVFeHRyYUludGVyZmFjZShSRUZOU0lJRCBhSUlEKTsKIHByb3Rl
Y3RlZDoKICAgLyoqCiAgICAqIFNldCBhdHRyaWJ1dGUgYW5kIChpZiBuZWVkZWQpIG5vdGlmeSBk
b2N1bWVudG9ic2VydmVycyBhbmQgZmlyZSBvZmYKICAgICogbXV0YXRpb24gZXZlbnRzLiAgVGhp
cyB3aWxsIHNlbmQgdGhlIEF0dHJpYnV0ZUNoYW5nZWQgbm90aWZpY2F0aW9uLgogICAgKiBDYWxs
ZXJzIG9mIHRoaXMgbWV0aG9kIGFyZSByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBBdHRyaWJ1dGVX
aWxsQ2hhbmdlLAogICAgKiBzaW5jZSB0aGF0IG5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgdGhlIG5l
dyBhdHRyIHZhbHVlIGhhcyBiZWVuIHNldCwgYW5kCiAgICAqIGluIHBhcnRpY3VsYXIgYmVmb3Jl
IGl0IGhhcyBiZWVuIHBhcnNlZC4KICAgICoKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS90ZXN0
L3Rlc3RfYnVnMTY2MjM1Lmh0bWwgYi9jb250ZW50L2Jhc2UvdGVzdC90ZXN0X2J1ZzE2NjIzNS5o
dG1sCi0tLSBhL2NvbnRlbnQvYmFzZS90ZXN0L3Rlc3RfYnVnMTY2MjM1Lmh0bWwKKysrIGIvY29u
dGVudC9iYXNlL3Rlc3QvdGVzdF9idWcxNjYyMzUuaHRtbApAQCAtNjIsMTYgKzYyLDE4IEBAIGh0
dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2cKICAgICAgICAgZGF0YS52YWx1
ZS5RdWVyeUludGVyZmFjZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJU3VwcG9ydHNTdHJpbmcp
LmRhdGEsCiAgICAgICBleHBlY3RlZCwKICAgICAgIG1pbWUgKyAiIHZhbHVlIGluIHRoZSBjbGlw
Ym9hcmQiKTsKICAgICByZXR1cm4gZGF0YS52YWx1ZTsKICAgfQogICBmdW5jdGlvbiB0ZXN0UGFz
dGVUZXh0KGV4cGVjdGVkLCB0ZXN0KSB7CiAgICAgdGV4dGFyZWEudmFsdWU9IiI7CiAgICAgdGV4
dGFyZWEuZm9jdXMoKTsKKyAgICAvLyBUbyBRSSB0byBub24tQ2xhc3NJbmZvIGludGVyZmFjZXMg
d2UgbXVzdCBhc3NlcnQgcHJpdmlsZWdlcworICAgIG5ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVn
ZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCdVbml2ZXJzYWxYUENvbm5lY3QnKTsKICAgICB0ZXh0
YXJlYS5RdWVyeUludGVyZmFjZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJRE9NTlNFZGl0YWJs
ZUVsZW1lbnQpCiAgICAgICAgICAgICAuZWRpdG9yLnBhc3RlKDEpOwogICAgIGlzKHRleHRhcmVh
LnZhbHVlLCBleHBlY3RlZCwgdGVzdCArICI6IHRleHRhcmVhIHBhc3RlIik7CiAgIH0KICAgZnVu
Y3Rpb24gdGVzdElubmVySFRNTChpZCwgZXhwZWN0ZWQpIHsKICAgICB2YXIgdmFsdWUgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChpZCkuaW5uZXJIVE1MOwogICAgIGlzKHZhbHVlLCBleHBlY3Rl
ZCwgaWQgKyAiLmlubmVySFRNTCIpOwogICB9CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvdGVz
dC90ZXN0X2NvcHlwYXN0ZS5odG1sIGIvY29udGVudC9iYXNlL3Rlc3QvdGVzdF9jb3B5cGFzdGUu
aHRtbAotLS0gYS9jb250ZW50L2Jhc2UvdGVzdC90ZXN0X2NvcHlwYXN0ZS5odG1sCisrKyBiL2Nv
bnRlbnQvYmFzZS90ZXN0L3Rlc3RfY29weXBhc3RlLmh0bWwKQEAgLTk5LDE2ICs5OSwxOCBAQCBm
dW5jdGlvbiB0ZXN0Q29weVBhc3RlICgpIHsKICAgICAgICAgZGF0YS52YWx1ZS5RdWVyeUludGVy
ZmFjZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJU3VwcG9ydHNTdHJpbmcpLmRhdGEsCiAgICAg
ICBleHBlY3RlZCwKICAgICAgIG1pbWUgKyAiIHZhbHVlIGluIHRoZSBjbGlwYm9hcmQiKTsKICAg
ICByZXR1cm4gZGF0YS52YWx1ZTsKICAgfQogICBmdW5jdGlvbiB0ZXN0UGFzdGVUZXh0KGV4cGVj
dGVkKSB7CiAgICAgdGV4dGFyZWEudmFsdWU9IiI7CiAgICAgdGV4dGFyZWEuZm9jdXMoKTsKKyAg
ICAvLyBUbyBRSSB0byBub24tQ2xhc3NJbmZvIGludGVyZmFjZXMgd2UgbXVzdCBhc3NlcnQgcHJp
dmlsZWdlcworICAgIG5ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJp
dmlsZWdlKCdVbml2ZXJzYWxYUENvbm5lY3QnKTsKICAgICB0ZXh0YXJlYS5RdWVyeUludGVyZmFj
ZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJRE9NTlNFZGl0YWJsZUVsZW1lbnQpCiAgICAgICAg
ICAgICAuZWRpdG9yLnBhc3RlKDEpOwogICAgIGlzKHRleHRhcmVhLnZhbHVlLCBleHBlY3RlZCwg
InZhbHVlIG9mIHRoZSB0ZXh0YXJlYSBhZnRlciB0aGUgcGFzdGUiKTsKICAgfQogICBmdW5jdGlv
biB0ZXN0U2VsZWN0aW9uVG9TdHJpbmcoZXhwZWN0ZWQpIHsKICAgICBpcyh3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkudG9TdHJpbmcoKS5yZXBsYWNlKC9cclxuL2csIlxuIiksIGV4cGVjdGVkLCAiU2Vs
ZWN0aW9uLnRvU3RyaW5nIik7CiAgIH0KICAgZnVuY3Rpb24gdGVzdElubmVySFRNTChpZCwgZXhw
ZWN0ZWQpIHsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9idWcz
ODg1NTguaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9idWczODg1NTguaHRt
bAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfYnVnMzg4NTU4Lmh0bWwKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2J1ZzM4ODU1OC5odG1sCkBAIC0xOSwx
NyArMTksMTggQEAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZwogPHBy
ZSBpZD0idGVzdCI+CiA8c2NyaXB0IGNsYXNzPSJ0ZXN0Ym9keSIgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0Ij4KIAogLyoqIFRlc3QgZm9yIEJ1ZyAzODg1NTggKiovCiB2YXIgaW5wdXRDaGFuZ2UgPSAw
OwogdmFyIHRleHRhcmVhQ2hhbmdlID0gMDsKIAogZnVuY3Rpb24gdGVzdFVzZXJJbnB1dCgpIHsK
LSAgbmV0c2NhcGUuc2VjdXJpdHkuUHJpdmlsZWdlTWFuYWdlci5lbmFibGVQcml2aWxlZ2UoJ1Vu
aXZlcnNhbEJyb3dzZXJXcml0ZScpOworICAvLyBUbyBRSSB0byBub24tQ2xhc3NJbmZvIGludGVy
ZmFjZXMgd2UgbXVzdCBhc3NlcnQgcHJpdmlsZWdlcworICBuZXRzY2FwZS5zZWN1cml0eS5Qcml2
aWxlZ2VNYW5hZ2VyLmVuYWJsZVByaXZpbGVnZSgnVW5pdmVyc2FsWFBDb25uZWN0Jyk7CiAgIHZh
ciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnB1dCIpOwogICB2YXIgdGV4dGFy
ZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dGFyZWEiKTsKIAogICBpbnB1dC5mb2N1
cygpOwogICBpbnB1dC5RdWVyeUludGVyZmFjZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJRE9N
TlNFZGl0YWJsZUVsZW1lbnQpLnNldFVzZXJJbnB1dCgiZm9vIik7CiAgIGlucHV0LmJsdXIoKTsK
ICAgaXMoaW5wdXRDaGFuZ2UsIDEsICJJbnB1dCBlbGVtZW50IHNob3VsZCBoYXZlIGdvdCBvbmUg
Y2hhbmdlIGV2ZW50LiIpOwogCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L3Rlc3RfYnVnMzg5Nzk3Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfYnVn
Mzg5Nzk3Lmh0bWwKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2J1ZzM4OTc5
Ny5odG1sCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9idWczODk3OTcuaHRt
bApAQCAtMTgsMTYgKzE4LDE3IEBAIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19i
dWcuY2cKIDxwcmUgaWQ9InRlc3QiPgogPHNjcmlwdCBjbGFzcz0idGVzdGJvZHkiIHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CiAKIC8qKiBUZXN0IGZvciBCdWcgMzg5Nzk3ICoqLwogdmFyIGFsbFRh
Z3MgPSBbXTsKIHZhciBjbGFzc0luZm9zID0ge307CiB2YXIgaW50ZXJmYWNlcyA9IHt9OwogdmFy
IGludGVyZmFjZXNOb25DbGFzc2luZm8gPSB7fTsKK3ZhciBpbnRlcmZhY2VzTm9uRE9NID0ge307
CiAKIGZ1bmN0aW9uIGdldENsYXNzTmFtZSh0YWcpIHsKICAgcmV0dXJuICJIVE1MIiArIGNsYXNz
SW5mb3NbdGFnXSArICJFbGVtZW50IjsKIH0KIAogZnVuY3Rpb24gSFRNTF9UQUcoYVRhZ05hbWUs
IGFJbXBsQ2xhc3MpIHsKICAgYWxsVGFncy5wdXNoKGFUYWdOYW1lKTsKICAgY2xhc3NJbmZvc1th
VGFnTmFtZV0gPSBhSW1wbENsYXNzOwpAQCAtMzYsMjEgKzM3LDI2IEBAIGZ1bmN0aW9uIEhUTUxf
VEFHKGFUYWdOYW1lLCBhSW1wbENsYXNzKSAKICAgICAgICJuc0lET01OU0VsZW1lbnQiLAogICAg
ICAgIm5zSURPTUV2ZW50VGFyZ2V0IiwKICAgICAgICJuc0lET01OU0V2ZW50VGFyZ2V0IiwKICAg
ICAgICJuc0lET01OU0hUTUxFbGVtZW50IiwKICAgICAgICJuc0lET01FbGVtZW50Q1NTSW5saW5l
U3R5bGUiLAogICAgICAgIm5zSURPTU5vZGVTZWxlY3RvciIgXTsKIAogICAvLyBTb21lIGludGVy
ZmFjZXMgZG9uJ3QgYXBwZWFyIGluIGNsYXNzaW5mbyBiZWNhdXNlIG90aGVyIGludGVyZmFjZXMg
dGhhdAotICAvLyBpbmhlcml0IGZyb20gdGhlbSBkby4KKyAgLy8gaW5oZXJpdCBmcm9tIHRoZW0g
ZG8uICBUaGVzZSBhcmUgdmlzaWJsZSB0byB1bnByaXZpbGVnZWQgc2NyaXB0LgogICBpbnRlcmZh
Y2VzTm9uQ2xhc3NpbmZvW2FUYWdOYW1lXSA9CiAgICAgWyAibnNJRE9NTm9kZSIsCi0gICAgICAi
bnNJRE9NRWxlbWVudCIsCi0gICAgICAibnNJRE9NM0V2ZW50VGFyZ2V0IiwKKyAgICAgICJuc0lE
T01FbGVtZW50IiBdOworCisgIC8vIFNvbWUgaW50ZXJmYWNlcyBkb24ndCBhcHBlYXIgaW4gY2xh
c3NpbmZvIGF0IGFsbCBiZWNhdXNlIHRoZXkgYXJlCisgIC8vIGltcGxlbWVudGF0aW9uIGRldGFp
bHMgb2YgdGhlIHVuZGVybHlpbmcgWFBDT00gb2JqZWN0cy4gIFRoZXNlIGFyZSBub3QKKyAgLy8g
dmlzaWJsZSB0byB1bnRydXN0ZWQgc2NyaXB0LgorICBpbnRlcmZhY2VzTm9uRE9NW2FUYWdOYW1l
XSA9CisgICAgWyAibnNJRE9NM0V2ZW50VGFyZ2V0IiwKICAgICAgICJuc0lTdXBwb3J0c1dlYWtS
ZWZlcmVuY2UiIF07CiAKICAgdmFyIGludGVyZmFjZU5hbWUgPSAibnNJRE9NIiArIGdldENsYXNz
TmFtZShhVGFnTmFtZSk7CiAgIGlmIChpbnRlcmZhY2VOYW1lIGluIENvbXBvbmVudHMuaW50ZXJm
YWNlcykgeyAgLy8gbm8gbnNJRE9NSFRNTFNwYW5FbGVtZW50CiAgICAgaW50ZXJmYWNlc1thVGFn
TmFtZV0ucHVzaChpbnRlcmZhY2VOYW1lKTsKICAgICBpbnRlcmZhY2VzTm9uQ2xhc3NpbmZvW2FU
YWdOYW1lXS5wdXNoKCJuc0lET01IVE1MRWxlbWVudCIpOwogICB9IGVsc2UgaWYgKGFUYWdOYW1l
ICE9ICJpbnMiICYmIGFUYWdOYW1lICE9ICJkZWwiKSB7CiAgICAgLy8gSW5oZXJpdHMgZGlyZWN0
bHkgZnJvbSBuc0lET01IVE1MRWxlbWVudCwgdW5sZXNzIGl0J3MgImlucyIgb3IgImRlbCIsCkBA
IC02NywxNyArNzMsMTcgQEAgZnVuY3Rpb24gSFRNTF9UQUcoYVRhZ05hbWUsIGFJbXBsQ2xhc3Mp
IAogICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGFyZ3VtZW50c1syXS5sZW5ndGg7ICsraSkgewogICAgICAgaW50ZXJmYWNlc1thVGFnTmFtZV0u
cHVzaChhcmd1bWVudHNbMl1baV0pOwogICAgIH0KICAgfQogCiAgIGlmIChhcmd1bWVudHMubGVu
Z3RoID4gMykgewogICAgIGZvciAoaSA9IDA7IGkgPCBhcmd1bWVudHNbM10ubGVuZ3RoOyArK2kp
IHsKLSAgICAgIGludGVyZmFjZXNOb25DbGFzc2luZm9bYVRhZ05hbWVdLnB1c2goYXJndW1lbnRz
WzNdW2ldKTsKKyAgICAgIGludGVyZmFjZXNOb25ET01bYVRhZ05hbWVdLnB1c2goYXJndW1lbnRz
WzNdW2ldKTsKICAgICB9CiAgIH0KIH0KIAogY29uc3Qgb2JqZWN0SWZhY2VzID0gWwogICAgICJp
bWdJRGVjb2Rlck9ic2VydmVyIiwgIm5zSVJlcXVlc3RPYnNlcnZlciIsICJuc0lTdHJlYW1MaXN0
ZW5lciIsCiAgICAgIm5zSUZyYW1lTG9hZGVyT3duZXIiLCAibnNJT2JqZWN0TG9hZGluZ0NvbnRl
bnQiLCAibnNJSW50ZXJmYWNlUmVxdWVzdG9yIiwKICAgICAibnNJQ2hhbm5lbEV2ZW50U2luayIK
QEAgLTI1NiwxOCArMjYyLDQ3IEBAIGZvciBlYWNoICh2YXIgdGFnIGluIGFsbFRhZ3MpIHsKICAg
Ly8gQ2hlY2sgdGhhdCBlYWNoIG5vZGUgUUlzIHRvIGFsbCB0aGUgdGhpbmdzIHdlIGV4cGVjdCBp
dCB0byBRSSB0bwogICBmb3IgZWFjaCAodmFyIGlmYWNlIGluIGludGVyZmFjZXNbdGFnXS5jb25j
YXQoaW50ZXJmYWNlc05vbkNsYXNzaW5mb1t0YWddKSkgewogICAgIGlzKGlmYWNlIGluIENvbXBv
bmVudHMuaW50ZXJmYWNlcywgdHJ1ZSwKICAgICAgICBpZmFjZSArICIgbm90IGluIENvbXBvbmVu
dHMuaW50ZXJmYWNlcyIpOwogICAgIGlzKG5vZGUgaW5zdGFuY2VvZiBDb21wb25lbnRzLmludGVy
ZmFjZXNbaWZhY2VdLCB0cnVlLAogICAgICAgIHRhZ05hbWUodGFnKSArICIgZG9lcyBub3QgUUkg
dG8gIiArIGlmYWNlKTsKICAgfQogCisgIC8vIENoZWNrIHRoYXQgZWFjaCBub2RlIGRvZXNuJ3Qg
UUkgdG8gbm9uLURPTSB0aGluZ3MgCisgIGZvciBlYWNoICh2YXIgaWZhY2UgaW4gaW50ZXJmYWNl
c05vbkRPTVt0YWddKSB7CisgICAgaXMoaWZhY2UgaW4gQ29tcG9uZW50cy5pbnRlcmZhY2VzLCB0
cnVlLAorICAgICAgIGlmYWNlICsgIiBub3QgaW4gQ29tcG9uZW50cy5pbnRlcmZhY2VzIik7Cisg
ICAgaXMobm9kZSBpbnN0YW5jZW9mIENvbXBvbmVudHMuaW50ZXJmYWNlc1tpZmFjZV0sIGZhbHNl
LAorICAgICAgIHRhZ05hbWUodGFnKSArICIgc2hvdWxkIG5vdCBRSSB0byAiICsgaWZhY2UpOwor
ICB9Cit9CisKK25ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJpdmls
ZWdlKCJVbml2ZXJzYWxYUENvbm5lY3QiKTsKKworZm9yIGVhY2ggKHZhciB0YWcgaW4gYWxsVGFn
cykgeworICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKKworICAvLyBI
YXZlIHRvIHVzZSB0aGUgcHJvdG8ncyB0b1N0cmluZygpLCBzaW5jZSBIVE1MQW5jaG9yRWxlbWVu
dCBhbmQgY29tcGFueQorICAvLyBvdmVycmlkZSB0b1N0cmluZygpLgorICB2YXIgbm9kZVN0cmlu
ZyA9IEhUTUxFbGVtZW50LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShub2RlKTsKKworICAvLyBE
ZWJ1ZyBidWlsZHMgaGF2ZSBleHRyYSBpbmZvLCBzbyBjaG9wIG9mZiBhZnRlciAiRWxlbWVudCIg
aWYgaXQncyBmb2xsb3dlZAorICAvLyBieSAnICcgb3IgJ10nCisgIG5vZGVTdHJpbmcgPSBub2Rl
U3RyaW5nLnJlcGxhY2UoL0VsZW1lbnRbXF0gXS4qLywgIkVsZW1lbnQiKTsKKworICAvLyBDaGVj
ayB0aGF0IGVhY2ggbm9kZSBkb2Vzbid0IFFJIHRvIG5vbi1ET00gdGhpbmdzLCBleGNlcHQgd2hl
biB3ZSBoYXZlIHByaXZzCisgIGZvciBlYWNoICh2YXIgaWZhY2UgaW4gaW50ZXJmYWNlc05vbkRP
TVt0YWddKSB7CisgICAgaXMoaWZhY2UgaW4gQ29tcG9uZW50cy5pbnRlcmZhY2VzLCB0cnVlLAor
ICAgICAgIGlmYWNlICsgIiBub3QgaW4gQ29tcG9uZW50cy5pbnRlcmZhY2VzIik7CisgICAgaXMo
bm9kZSBpbnN0YW5jZW9mIENvbXBvbmVudHMuaW50ZXJmYWNlc1tpZmFjZV0sIHRydWUsCisgICAg
ICAgdGFnTmFtZSh0YWcpICsgIiBzaG91bGQgUUkgdG8gIiArIGlmYWNlICsgIiBmcm9tIHByaXZp
bGVnZWQgc2NyaXB0Iik7CisgIH0KKwogICAvLyBOb3cgc2VlIHdoYXQgY2xhc3NpbmZvIHJlcG9y
dHMKLSAgbmV0c2NhcGUuc2VjdXJpdHkuUHJpdmlsZWdlTWFuYWdlci5lbmFibGVQcml2aWxlZ2Uo
IlVuaXZlcnNhbFhQQ29ubmVjdCIpOwogICB2YXIgbm9kZUNsYXNzSW5mbyA9IG5vZGUuUXVlcnlJ
bnRlcmZhY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSUNsYXNzSW5mbyk7CiAgIHZhciBjb3Vu
dCA9IHt9OwogICB2YXIgY2xhc3NJbmZvSW50ZXJmYWNlcyA9CiAgICAgbm9kZUNsYXNzSW5mby5n
ZXRJbnRlcmZhY2VzKGNvdW50KS4KICAgICBtYXAoZnVuY3Rpb24oaWQpIHsgcmV0dXJuIENvbXBv
bmVudHMuaW50ZXJmYWNlc0J5SURbaWRdLnRvU3RyaW5nKCk7IH0pOwogCiAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHdlIGtub3cgYWJvdXQgYWxsIHRoZSB0aGluZ3MgY2xhc3NpbmZvIGNsYWltcwogICBm
b3IgZWFjaCAodmFyIGNsYXNzSW5mb0ludGVyZmFjZSBpbiBjbGFzc0luZm9JbnRlcmZhY2VzKSB7
CmRpZmYgLS1naXQgYS9kb20vYmFzZS9uc0RPTUNsYXNzSW5mby5jcHAgYi9kb20vYmFzZS9uc0RP
TUNsYXNzSW5mby5jcHAKLS0tIGEvZG9tL2Jhc2UvbnNET01DbGFzc0luZm8uY3BwCisrKyBiL2Rv
bS9iYXNlL25zRE9NQ2xhc3NJbmZvLmNwcApAQCAtNTE4LDIzICs1MTgsMTggQEAgc3RhdGljIGNv
bnN0IGNoYXIga0RPTVN0cmluZ0J1bmRsZVVSTFtdIAogCiAjZGVmaW5lIE5PREVfU0NSSVBUQUJM
RV9GTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgKChET01fREVGQVVMVF9TQ1JJUFRBQkxFX0ZMQUdTIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX0dFVFBS
T1BFUlRZIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBuc0lY
UENTY3JpcHRhYmxlOjpXQU5UX0FERFBST1BFUlRZIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICBuc0lYUENTY3JpcHRhYmxlOjpXQU5UX1NFVFBST1BFUlRZKSAm
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH5uc0lYUENTY3JpcHRh
YmxlOjpVU0VfSlNTVFVCX0ZPUl9BRERQUk9QRVJUWSkKIAotLy8gV2UgbmVlZCB0byBsZXQgSmF2
YVNjcmlwdCBRSSBlbGVtZW50cyB0byBpbnRlcmZhY2VzIHRoYXQgYXJlIG5vdCBpbgotLy8gdGhl
IGNsYXNzaW5mbyBzaW5jZSBYQkwgY2FuIGJlIHVzZWQgdG8gZHluYW1pY2FsbHkgaW1wbGVtZW50
IG5ldwotLy8gdW5rbm93biBpbnRlcmZhY2VzIG9uIGVsZW1lbnRzLCBhY2Nlc3NpYmlsaXR5IHJl
bGllcyBvbiB0aGlzIGJlaW5nCi0vLyBwb3NzaWJsZS4KLQogI2RlZmluZSBFTEVNRU5UX1NDUklQ
VEFCTEVfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAoKE5PREVfU0NSSVBUQUJMRV9GTEFHUyAmIH5uc0lYUENTY3JpcHRhYmxlOjpDTEFTU0lO
Rk9fSU5URVJGQUNFU19PTkxZKSB8ICAgXAorICAoTk9ERV9TQ1JJUFRBQkxFX0ZMQUdTIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgbnNJ
WFBDU2NyaXB0YWJsZTo6V0FOVF9QT1NUQ1JFQVRFIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgbnNJWFBDU2NyaXB0YWJsZTo6V0FOVF9FTlVNRVJBVEUpCiAK
ICNkZWZpbmUgRVhURVJOQUxfT0JKX1NDUklQVEFCTEVfRkxBR1MgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgKChFTEVNRU5UX1NDUklQVEFCTEVfRkxBR1MgJiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB+bnNJ
WFBDU2NyaXB0YWJsZTo6VVNFX0pTU1RVQl9GT1JfU0VUUFJPUEVSVFkpIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgIG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIG5zSVhQQ1NjcmlwdGFi
bGU6OldBTlRfR0VUUFJPUEVSVFkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKZGlmZiAtLWdpdCBhL2RvbS9zcmMvdGhyZWFkcy9uc0RPTVdvcmtlck1hY3Jvcy5oIGIv
ZG9tL3NyYy90aHJlYWRzL25zRE9NV29ya2VyTWFjcm9zLmgKLS0tIGEvZG9tL3NyYy90aHJlYWRz
L25zRE9NV29ya2VyTWFjcm9zLmgKKysrIGIvZG9tL3NyYy90aHJlYWRzL25zRE9NV29ya2VyTWFj
cm9zLmgKQEAgLTExNiwyMCArMTE2LDEyIEBAIE5TX0lNUExfVEhSRUFEU0FGRV9ET01fQ0lfQUxM
X1RIRV9SRVNUKF8KICAgTlNfSU1FVEhPRCBHZXRGbGFncyhQUlVpbnQzMiogYUZsYWdzKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7IHJldHVybiBfdG8gR2V0
RmxhZ3MoYUZsYWdzKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgTlNfSU1FVEhPRCBHZXRDbGFzc0lETm9BbGxvYyhuc0NJRCogYUNsYXNzSUROb0FsbG9j
KSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7IHJldHVybiBfdG8gR2V0Q2xhc3NJRE5v
QWxsb2MoYUNsYXNzSUROb0FsbG9jKTsgfQogCiAjZGVmaW5lIE5TX0RFQ0xfTlNJQ0xBU1NJTkZP
X0dFVElOVEVSRkFDRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIE5T
X0lNRVRIT0QgR2V0SW50ZXJmYWNlcyhQUlVpbnQzMiogYUNvdW50LCBuc0lJRCoqKiBhQXJyYXkp
OwogCi0vLyBEb24ndCBrbm93IHdoeSBuc0lTdXBwb3J0cy5pZGwgZGVmaW5lcyB0aGlzIG91dC4u
LgotI2RlZmluZSBOU19GT1JXQVJEX05TSVNVUFBPUlRTKF90bykgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBOU19JTUVUSE9EIFF1ZXJ5SW50ZXJmYWNlKGNv
bnN0IG5zSUlEJiB1dWlkLCB2b2lkKiogcmVzdWx0KSB7ICAgICAgICAgICAgICAgXAotICAgIHJl
dHVybiBfdG8gUXVlcnlJbnRlcmZhY2UodXVpZCwgcmVzdWx0KTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBOU19JTUVUSE9EXyhu
c3JlZmNudCkgQWRkUmVmKHZvaWQpIHsgcmV0dXJuIF90byBBZGRSZWYoKTsgfSAgICAgICAgICAg
ICAgICAgXAotICBOU19JTUVUSE9EXyhuc3JlZmNudCkgUmVsZWFzZSh2b2lkKSB7IHJldHVybiBf
dG8gUmVsZWFzZSgpOyB9Ci0KICNkZWZpbmUgSlNPTl9QUklNSVRJVkVfUFJPUE5BTUUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgInByaW1pdGl2ZSIK
IAogI2VuZGlmIC8qIF9fTlNET01XT1JLRVJNQUNST1NfSF9fICovCmRpZmYgLS1naXQgYS9lZGl0
b3IvbGliZWRpdG9yL3RleHQvdGVzdHMvdGVzdF9idWc1OTYzMzMuaHRtbCBiL2VkaXRvci9saWJl
ZGl0b3IvdGV4dC90ZXN0cy90ZXN0X2J1ZzU5NjMzMy5odG1sCi0tLSBhL2VkaXRvci9saWJlZGl0
b3IvdGV4dC90ZXN0cy90ZXN0X2J1ZzU5NjMzMy5odG1sCisrKyBiL2VkaXRvci9saWJlZGl0b3Iv
dGV4dC90ZXN0cy90ZXN0X2J1ZzU5NjMzMy5odG1sCkBAIC0yMiwxNiArMjIsMTggQEAgaHR0cHM6
Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZwogLyoqIFRlc3QgZm9yIEJ1ZyA1OTYz
MzMgKiovCiAKIFNpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0RmluaXNoKCk7CiBhZGRMb2FkRXZl
bnQoZnVuY3Rpb24oKSBTaW1wbGVUZXN0LmV4ZWN1dGVTb29uKHJ1blRlc3QpKTsKIAogdmFyIGdN
aXNzcGVsdFdvcmRzOwogCiBmdW5jdGlvbiBnZXRFZGl0b3IoKSB7CisgIC8vIFRvIFFJIHRvIG5v
bi1DbGFzc0luZm8gaW50ZXJmYWNlcyB3ZSBtdXN0IGFzc2VydCBwcml2aWxlZ2VzCisgIG5ldHNj
YXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCdVbml2ZXJzYWxY
UENvbm5lY3QnKTsKICAgdmFyIENpID0gQ29tcG9uZW50cy5pbnRlcmZhY2VzOwogICByZXR1cm4g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQiKQogICAgICAgICAgICAgICAgICAuUXVlcnlJ
bnRlcmZhY2UoQ2kubnNJRE9NTlNFZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgICAgICAgICAgIC5l
ZGl0b3I7CiB9CiAKIGZ1bmN0aW9uIGdldFNwZWxsQ2hlY2tTZWxlY3Rpb24oKSB7CiAgIHZhciBl
ZGl0b3IgPSBnZXRFZGl0b3IoKTsKZGlmZiAtLWdpdCBhL2VkaXRvci9saWJlZGl0b3IvdGV4dC90
ZXN0cy90ZXN0X3RleHRlZGl0b3Jfa2V5ZXZlbnRfaGFuZGxpbmcuaHRtbCBiL2VkaXRvci9saWJl
ZGl0b3IvdGV4dC90ZXN0cy90ZXN0X3RleHRlZGl0b3Jfa2V5ZXZlbnRfaGFuZGxpbmcuaHRtbAot
LS0gYS9lZGl0b3IvbGliZWRpdG9yL3RleHQvdGVzdHMvdGVzdF90ZXh0ZWRpdG9yX2tleWV2ZW50
X2hhbmRsaW5nLmh0bWwKKysrIGIvZWRpdG9yL2xpYmVkaXRvci90ZXh0L3Rlc3RzL3Rlc3RfdGV4
dGVkaXRvcl9rZXlldmVudF9oYW5kbGluZy5odG1sCkBAIC05MCwxNiArOTAsMTggQEAgZnVuY3Rp
b24gcnVuVGVzdHMoKQogICAgICAgIGdldERlc2NpcHRpb24oYVByZXZlbnRlZE9uQnViYmxpbmcp
ICsgInByZXZlbnRlZCBvbiBidWJibGluZyBwaGFzZSIpOwogICB9CiAKICAgdmFyIHN5c3RlbUdy
b3VwID0KICAgICBDb21wb25lbnRzLmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9ldmVudGxpc3RlbmVy
c2VydmljZTsxIl0uCiAgICAgICBnZXRTZXJ2aWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lF
dmVudExpc3RlbmVyU2VydmljZSkuCiAgICAgICBzeXN0ZW1FdmVudEdyb3VwOwogICB2YXIgcGFy
ZW50RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXNwbGF5Iik7CisgIC8vIFRv
IFFJIHRvIG5vbi1DbGFzc0luZm8gaW50ZXJmYWNlcyB3ZSBtdXN0IGFzc2VydCBwcml2aWxlZ2Vz
CisgIG5ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCdV
bml2ZXJzYWxYUENvbm5lY3QnKTsKICAgcGFyZW50RWxlbWVudC5RdWVyeUludGVyZmFjZShDb21w
b25lbnRzLmludGVyZmFjZXMubnNJRE9NM0V2ZW50VGFyZ2V0KTsKICAgcGFyZW50RWxlbWVudC5h
ZGRHcm91cGVkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLCBsaXN0ZW5lciwgdHJ1ZSwgc3lzdGVt
R3JvdXApOwogICBwYXJlbnRFbGVtZW50LmFkZEdyb3VwZWRFdmVudExpc3RlbmVyKCJrZXlwcmVz
cyIsIGxpc3RlbmVyLCBmYWxzZSwgc3lzdGVtR3JvdXApOwogCiAgIGZ1bmN0aW9uIGRvVGVzdChh
RWxlbWVudCwgYURlc2NyaXB0aW9uLCBhSXNTaW5nbGVMaW5lLCBhSXNSZWFkb25seSwKICAgICAg
ICAgICAgICAgICAgIGFJc1RhYmJhYmxlKQogICB7CiAgICAgZnVuY3Rpb24gcmVzZXQoYVRleHQp
CmRpZmYgLS1naXQgYS9qcy9zcmMveHBjb25uZWN0L3NyYy94cGN3cmFwcGVkbmF0aXZlLmNwcCBi
L2pzL3NyYy94cGNvbm5lY3Qvc3JjL3hwY3dyYXBwZWRuYXRpdmUuY3BwCi0tLSBhL2pzL3NyYy94
cGNvbm5lY3Qvc3JjL3hwY3dyYXBwZWRuYXRpdmUuY3BwCisrKyBiL2pzL3NyYy94cGNvbm5lY3Qv
c3JjL3hwY3dyYXBwZWRuYXRpdmUuY3BwCkBAIC00NywxNiArNDcsMTcgQEAKICNpbmNsdWRlICJu
c1dyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgInhwY2xvZy5oIgogI2luY2x1ZGUgImpzdGwuaCIK
ICNpbmNsdWRlICJuc0lOb2RlLmgiCiAjaW5jbHVkZSAieHBjcXVpY2tzdHVicy5oIgogI2luY2x1
ZGUgImpzcHJveHkuaCIKICNpbmNsdWRlICJBY2Nlc3NDaGVjay5oIgogI2luY2x1ZGUgIldyYXBw
ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAibW96aWxsYS9kb20vRWxlbWVudC5oIgogCiAvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwogCiBOU19JTVBMX0NZQ0xFX0NPTExFQ1RJT05fQ0xBU1MoWFBDV3JhcHBl
ZE5hdGl2ZSkKIAogTlNfSU1FVEhPRElNUAogTlNfQ1lDTEVfQ09MTEVDVElPTl9DTEFTU05BTUUo
WFBDV3JhcHBlZE5hdGl2ZSk6OlJvb3RBbmRVbmxpbmtKU09iamVjdHModm9pZCAqcCkKIHsKQEAg
LTE4OTEsMTYgKzE4OTIsMjUgQEAgWFBDV3JhcHBlZE5hdGl2ZTo6RmluZFRlYXJPZmYoWFBDQ2Fs
bENvbgogCiByZXR1cm5fcmVzdWx0OgogCiAgICAgaWYocEVycm9yKQogICAgICAgICAqcEVycm9y
ID0gcnY7CiAgICAgcmV0dXJuIHRvOwogfQogCitib29sIE1pZ2h0SGF2ZUV4dHJhSW50ZXJmYWNl
KG5zSVN1cHBvcnRzKiBhU3VwcG9ydHMsIGNvbnN0IG5zSUlEKiBhSUlEKQoreworICBuc0NPTVB0
cjxuc0lFeHRyYUludGVyZmFjZUltcGxlbWVudG9yPiBlSUkgPSBkb19RdWVyeUludGVyZmFjZShh
U3VwcG9ydHMpOworICBpZiAoIWVJSSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0dXJuIGVJ
SS0+TWlnaHRIYXZlRXh0cmFJbnRlcmZhY2UoKmFJSUQpOworfQorCiBuc3Jlc3VsdAogWFBDV3Jh
cHBlZE5hdGl2ZTo6SW5pdFRlYXJPZmYoWFBDQ2FsbENvbnRleHQmIGNjeCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFhQQ1dyYXBwZWROYXRpdmVUZWFyT2ZmKiBhVGVhck9mZiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQQ05hdGl2ZUludGVyZmFjZSogYUludGVyZmFj
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQm9vbCBuZWVkSlNPYmplY3QpCiB7
CiAgICAgLy8gVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGlsZSBsb2NrZWQgKGR1cmluZyBYUENXcmFw
cGVkTmF0aXZlOjpGaW5kVGVhck9mZikuCiAKQEAgLTE5MTAsMTcgKzE5MjAsMTggQEAgWFBDV3Jh
cHBlZE5hdGl2ZTo6SW5pdFRlYXJPZmYoWFBDQ2FsbENvbgogICAgIG5zSVN1cHBvcnRzKiBpZGVu
dGl0eSA9IEdldElkZW50aXR5T2JqZWN0KCk7CiAgICAgbnNJU3VwcG9ydHMqIG9iajsKIAogICAg
IC8vIElmIHRoZSBzY3JpcHRhYmxlIGhlbHBlciBmb3JiaWRzIHVzIGZyb20gcmVmbGVjdGluZyBh
ZGRpdGlvbmFsCiAgICAgLy8gaW50ZXJmYWNlcywgdGhlbiBkb24ndCBldmVuIHRyeSB0aGUgUUks
IGp1c3QgZmFpbC4KICAgICBpZihtU2NyaXB0YWJsZUluZm8gJiYKICAgICAgICBtU2NyaXB0YWJs
ZUluZm8tPkdldEZsYWdzKCkuQ2xhc3NJbmZvSW50ZXJmYWNlc09ubHkoKSAmJgogICAgICAgICFt
U2V0LT5IYXNJbnRlcmZhY2UoYUludGVyZmFjZSkgJiYKLSAgICAgICAhbVNldC0+SGFzSW50ZXJm
YWNlV2l0aEFuY2VzdG9yKGFJbnRlcmZhY2UpKQorICAgICAgICFtU2V0LT5IYXNJbnRlcmZhY2VX
aXRoQW5jZXN0b3IoYUludGVyZmFjZSkgJiYKKyAgICAgICAhTWlnaHRIYXZlRXh0cmFJbnRlcmZh
Y2UoaWRlbnRpdHksIGlpZCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfTk9fSU5U
RVJGQUNFOwogICAgIH0KIAogICAgIC8vIFdlIGFyZSBhYm91dCB0byBjYWxsIG91dCB0byB1bmxv
Y2sgYW5kIG90aGVyIGNvZGUuCiAgICAgLy8gU28gcHJvdGVjdCBvdXIgaW50ZW5kZWQgdGVhcm9m
Zi4KIAogICAgIGFUZWFyT2ZmLT5TZXRSZXNlcnZlZCgpOwpkaWZmIC0tZ2l0IGEveHBjb20vYmFz
ZS9uc0lTdXBwb3J0c0Jhc2UuaCBiL3hwY29tL2Jhc2UvbnNJU3VwcG9ydHNCYXNlLmgKLS0tIGEv
eHBjb20vYmFzZS9uc0lTdXBwb3J0c0Jhc2UuaAorKysgYi94cGNvbS9iYXNlL25zSVN1cHBvcnRz
QmFzZS5oCkBAIC0xMDIsMTEgKzEwMiwxOCBAQCBwdWJsaWM6CiAgICAqLwogICBOU19JTUVUSE9E
Xyhuc3JlZmNudCkgUmVsZWFzZSh2b2lkKSA9IDA7CiAKICAgLy9AfQogfTsKIAogTlNfREVGSU5F
X1NUQVRJQ19JSURfQUNDRVNTT1IobnNJU3VwcG9ydHMsIE5TX0lTVVBQT1JUU19JSUQpCiAKKyNk
ZWZpbmUgTlNfRk9SV0FSRF9OU0lTVVBQT1JUUyhfdG8pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgTlNfSU1FVEhPRCBRdWVyeUludGVyZmFjZShjb25zdCBu
c0lJRCYgdXVpZCwgdm9pZCoqIHJlc3VsdCkgeyAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4g
X3RvIFF1ZXJ5SW50ZXJmYWNlKHV1aWQsIHJlc3VsdCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgTlNfSU1FVEhPRF8obnNyZWZj
bnQpIEFkZFJlZih2b2lkKSB7IHJldHVybiBfdG8gQWRkUmVmKCk7IH0gICAgICAgICAgICAgICAg
IFwKKyAgTlNfSU1FVEhPRF8obnNyZWZjbnQpIFJlbGVhc2Uodm9pZCkgeyByZXR1cm4gX3RvIFJl
bGVhc2UoKTsgfQorCiAvKkB9Ki8KIAogI2VuZGlmCg==
</data>
<flag name="review"
          id="406630"
          type_id="937"
          status="-"
          setter="peterv"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>492083</attachid>
            <date>2010-11-20 12:42:17 -0800</date>
            <delta_ts>2010-11-28 18:37:34 -0800</delta_ts>
            <desc>Stop untrusted script from QIing to non-ClassInfo interfaces</desc>
            <filename>605271</filename>
            <type>text/plain</type>
            <size>26338</size>
            <attacher>khuey</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIEt5bGUgSHVleSA8a2h1ZXlAa3lsZWh1ZXkuY29t
PgojIERhdGUgMTI5MDI4NTY2MyAxODAwMAojIE5vZGUgSUQgNDZhYWU5MjRmYWZiZWJmNGEyMTY1
NzNiOWQ5ZjIxM2M1M2UxMWIzYgojIFBhcmVudCAgNWM2ZmE0YTVjM2RhMzI1MWJhYTU3ZWZlNzFl
YjQ0MjNiOTJhZWIyOQpCdWcgNjA1MjcxOiBTdG9wIHVudHJ1c3RlZCBzY3JpcHQgZnJvbSBRSWlu
ZyB0byBub24tQ2xhc3NJbmZvIGludGVyZmFjZXMKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uv
c3JjL25zR2VuZXJpY0VsZW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0dlbmVyaWNFbGVt
ZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zR2VuZXJpY0VsZW1lbnQuY3BwCisrKyBi
L2NvbnRlbnQvYmFzZS9zcmMvbnNHZW5lcmljRWxlbWVudC5jcHAKQEAgLTQ0OTAsNiArNDQ5MCwy
MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc05vZGVVdGlsczo6TGFzdFJlbGVhc2UodGhpcykpCiAKK1BSQm9v
bAorbnNHZW5lcmljRWxlbWVudDo6SW1wbGVtZW50c1hCTElmYWNlKFJFRk5TSUlEIGFJSUQpCit7
CisgIG5zSURvY3VtZW50ICpkb2N1bWVudCA9IEdldE93bmVyRG9jKCk7CisgIGlmICghZG9jdW1l
bnQpIHsKKyAgICByZXR1cm4gUFJfRkFMU0U7CisgIH0KKworICBuc1hCTEJpbmRpbmcgKmJpbmRp
bmcgPSBkb2N1bWVudC0+QmluZGluZ01hbmFnZXIoKS0+R2V0QmluZGluZyh0aGlzKTsKKyAgaWYg
KCFiaW5kaW5nKSB7CisgICAgcmV0dXJuIFBSX0ZBTFNFOworICB9CisKKyAgcmV0dXJuIGJpbmRp
bmctPkltcGxlbWVudHNJbnRlcmZhY2UoYUlJRCk7Cit9CisKIG5zcmVzdWx0CiBuc0dlbmVyaWNF
bGVtZW50OjpQb3N0UXVlcnlJbnRlcmZhY2UoUkVGTlNJSUQgYUlJRCwgdm9pZCoqIGFJbnN0YW5j
ZVB0cikKIHsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHZW5lcmljRWxlbWVudC5o
IGIvY29udGVudC9iYXNlL3NyYy9uc0dlbmVyaWNFbGVtZW50LmgKLS0tIGEvY29udGVudC9iYXNl
L3NyYy9uc0dlbmVyaWNFbGVtZW50LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0dlbmVyaWNF
bGVtZW50LmgKQEAgLTMzNyw2ICszMzcsNyBAQAogICAgKiBnZXQgYW4gaW50ZXJmYWNlIGZvciB0
aGlzIGVsZW1lbnQuCiAgICAqLwogICBuc3Jlc3VsdCBQb3N0UXVlcnlJbnRlcmZhY2UoUkVGTlNJ
SUQgYUlJRCwgdm9pZCoqIGFJbnN0YW5jZVB0cik7CisgIFBSQm9vbCBJbXBsZW1lbnRzWEJMSWZh
Y2UoUkVGTlNJSUQgYUlJRCk7CiAKICAgLy8gbnNJTm9kZSBpbnRlcmZhY2UgbWV0aG9kcwogICB2
aXJ0dWFsIFBSVWludDMyIEdldENoaWxkQ291bnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvYmFzZS90ZXN0L3Rlc3RfYnVnMTY2MjM1Lmh0bWwgYi9jb250ZW50L2Jhc2UvdGVzdC90ZXN0
X2J1ZzE2NjIzNS5odG1sCi0tLSBhL2NvbnRlbnQvYmFzZS90ZXN0L3Rlc3RfYnVnMTY2MjM1Lmh0
bWwKKysrIGIvY29udGVudC9iYXNlL3Rlc3QvdGVzdF9idWcxNjYyMzUuaHRtbApAQCAtNjcsNiAr
NjcsOCBAQAogICBmdW5jdGlvbiB0ZXN0UGFzdGVUZXh0KGV4cGVjdGVkLCB0ZXN0KSB7CiAgICAg
dGV4dGFyZWEudmFsdWU9IiI7CiAgICAgdGV4dGFyZWEuZm9jdXMoKTsKKyAgICAvLyBUbyBRSSB0
byBub24tQ2xhc3NJbmZvIGludGVyZmFjZXMgd2UgbXVzdCBhc3NlcnQgcHJpdmlsZWdlcworICAg
IG5ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCdVbml2
ZXJzYWxYUENvbm5lY3QnKTsKICAgICB0ZXh0YXJlYS5RdWVyeUludGVyZmFjZShDb21wb25lbnRz
LmludGVyZmFjZXMubnNJRE9NTlNFZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgICAgICAuZWRpdG9y
LnBhc3RlKDEpOwogICAgIGlzKHRleHRhcmVhLnZhbHVlLCBleHBlY3RlZCwgdGVzdCArICI6IHRl
eHRhcmVhIHBhc3RlIik7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvdGVzdC90ZXN0X2NvcHlw
YXN0ZS5odG1sIGIvY29udGVudC9iYXNlL3Rlc3QvdGVzdF9jb3B5cGFzdGUuaHRtbAotLS0gYS9j
b250ZW50L2Jhc2UvdGVzdC90ZXN0X2NvcHlwYXN0ZS5odG1sCisrKyBiL2NvbnRlbnQvYmFzZS90
ZXN0L3Rlc3RfY29weXBhc3RlLmh0bWwKQEAgLTEwNCw2ICsxMDQsOCBAQAogICBmdW5jdGlvbiB0
ZXN0UGFzdGVUZXh0KGV4cGVjdGVkKSB7CiAgICAgdGV4dGFyZWEudmFsdWU9IiI7CiAgICAgdGV4
dGFyZWEuZm9jdXMoKTsKKyAgICAvLyBUbyBRSSB0byBub24tQ2xhc3NJbmZvIGludGVyZmFjZXMg
d2UgbXVzdCBhc3NlcnQgcHJpdmlsZWdlcworICAgIG5ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVn
ZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCdVbml2ZXJzYWxYUENvbm5lY3QnKTsKICAgICB0ZXh0
YXJlYS5RdWVyeUludGVyZmFjZShDb21wb25lbnRzLmludGVyZmFjZXMubnNJRE9NTlNFZGl0YWJs
ZUVsZW1lbnQpCiAgICAgICAgICAgICAuZWRpdG9yLnBhc3RlKDEpOwogICAgIGlzKHRleHRhcmVh
LnZhbHVlLCBleHBlY3RlZCwgInZhbHVlIG9mIHRoZSB0ZXh0YXJlYSBhZnRlciB0aGUgcGFzdGUi
KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4gYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCi0tLSBhL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9N
YWtlZmlsZS5pbgpAQCAtMjQxLDYgKzI0MSw3IEBACiAJCXRlc3RfYnVnNjA3MTQ1Lmh0bWwgXAog
CQl0ZXN0X2J1ZzYwMTA2MS5odG1sIFwKIAkJdGVzdF9idWc1OTY1MTEuaHRtbCBcCisJCXRlc3Rf
YnVnNjA1MjcxLmh0bWwgXAogCQlyZWZsZWN0LmpzIFwKIAkJJChOVUxMKQogCmRpZmYgLS1naXQg
YS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfYnVnMzg4NTU4Lmh0bWwgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfYnVnMzg4NTU4Lmh0bWwKLS0tIGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC90ZXN0X2J1ZzM4ODU1OC5odG1sCisrKyBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvdGVzdF9idWczODg1NTguaHRtbApAQCAtMjQsNyArMjQsOCBAQAogdmFyIHRleHRh
cmVhQ2hhbmdlID0gMDsKIAogZnVuY3Rpb24gdGVzdFVzZXJJbnB1dCgpIHsKLSAgbmV0c2NhcGUu
c2VjdXJpdHkuUHJpdmlsZWdlTWFuYWdlci5lbmFibGVQcml2aWxlZ2UoJ1VuaXZlcnNhbEJyb3dz
ZXJXcml0ZScpOworICAvLyBUbyBRSSB0byBub24tQ2xhc3NJbmZvIGludGVyZmFjZXMgd2UgbXVz
dCBhc3NlcnQgcHJpdmlsZWdlcworICBuZXRzY2FwZS5zZWN1cml0eS5Qcml2aWxlZ2VNYW5hZ2Vy
LmVuYWJsZVByaXZpbGVnZSgnVW5pdmVyc2FsWFBDb25uZWN0Jyk7CiAgIHZhciBpbnB1dCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnB1dCIpOwogICB2YXIgdGV4dGFyZWEgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgidGV4dGFyZWEiKTsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC90ZXN0X2J1ZzM4OTc5Ny5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC90ZXN0X2J1ZzM4OTc5Ny5odG1sCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
dGVzdF9idWczODk3OTcuaHRtbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3Rf
YnVnMzg5Nzk3Lmh0bWwKQEAgLTIzLDYgKzIzLDcgQEAKIHZhciBjbGFzc0luZm9zID0ge307CiB2
YXIgaW50ZXJmYWNlcyA9IHt9OwogdmFyIGludGVyZmFjZXNOb25DbGFzc2luZm8gPSB7fTsKK3Zh
ciBpbnRlcmZhY2VzTm9uRE9NID0ge307CiAKIG5ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVnZU1h
bmFnZXIuZW5hYmxlUHJpdmlsZWdlKCJVbml2ZXJzYWxYUENvbm5lY3QiKTsKIHZhciBwcmVmcyA9
IENvbXBvbmVudHMuY2xhc3Nlc1siQG1vemlsbGEub3JnL3ByZWZlcmVuY2VzLXNlcnZpY2U7MSJd
CkBAIC00NSwxMSArNDYsMTYgQEAKICAgICAgICJuc0lET01Ob2RlU2VsZWN0b3IiIF07CiAKICAg
Ly8gU29tZSBpbnRlcmZhY2VzIGRvbid0IGFwcGVhciBpbiBjbGFzc2luZm8gYmVjYXVzZSBvdGhl
ciBpbnRlcmZhY2VzIHRoYXQKLSAgLy8gaW5oZXJpdCBmcm9tIHRoZW0gZG8uCisgIC8vIGluaGVy
aXQgZnJvbSB0aGVtIGRvLiBUaGVzZSBhcmUgdmlzaWJsZSB0byB1bnByaXZpbGVnZWQgc2NyaXB0
LgogICBpbnRlcmZhY2VzTm9uQ2xhc3NpbmZvW2FUYWdOYW1lXSA9CiAgICAgWyAibnNJRE9NTm9k
ZSIsCi0gICAgICAibnNJRE9NRWxlbWVudCIsCi0gICAgICAibnNJRE9NM0V2ZW50VGFyZ2V0IiwK
KyAgICAgICJuc0lET01FbGVtZW50Il07CisKKyAgLy8gU29tZSBpbnRlcmZhY2VzIGRvbid0IGFw
cGVhciBpbiBjbGFzc2luZm8gYmVjYXVzZSB0aGV5IGFyZSBpbXBsZW1lbnRhdGlvbgorICAvLyBk
ZXRhaWxzIG9mIHRoZSB1bmRlcmx5aW5nIFhQQ09NIG9iamVjdHMuIFRoZXNlIGFyZSBub3Qgdmlz
aWJsZSB0bworICAvLyB1bnByaXZpbGVnZWQgc2NyaXB0LgorICBpbnRlcmZhY2VzTm9uRE9NW2FU
YWdOYW1lXSA9IAorICAgIFsgIm5zSURPTTNFdmVudFRhcmdldCIsCiAgICAgICAibnNJU3VwcG9y
dHNXZWFrUmVmZXJlbmNlIiBdOwogCiAgIHZhciBpbnRlcmZhY2VOYW1lID0gIm5zSURPTSIgKyBn
ZXRDbGFzc05hbWUoYVRhZ05hbWUpOwpAQCAtNzYsNyArODIsNyBAQAogCiAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoID4gMykgewogICAgIGZvciAoaSA9IDA7IGkgPCBhcmd1bWVudHNbM10ubGVuZ3Ro
OyArK2kpIHsKLSAgICAgIGludGVyZmFjZXNOb25DbGFzc2luZm9bYVRhZ05hbWVdLnB1c2goYXJn
dW1lbnRzWzNdW2ldKTsKKyAgICAgIGludGVyZmFjZXNOb25ET01bYVRhZ05hbWVdLnB1c2goYXJn
dW1lbnRzWzNdW2ldKTsKICAgICB9CiAgIH0KIH0KQEAgLTI0Nyw2ICsyNTMsOCBAQAogICByZXR1
cm4gIjwiICsgYVRhZyArICI+IjsKIH0KIAorbmV0c2NhcGUuc2VjdXJpdHkuUHJpdmlsZWdlTWFu
YWdlci5yZXZlcnRQcml2aWxlZ2UoJ1VuaXZlcnNhbFhQQ29ubmVjdCcpOworCiBmb3IgZWFjaCAo
dmFyIHRhZyBpbiBhbGxUYWdzKSB7CiAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCh0YWcpOwogCkBAIC0yNzIsOCArMjgwLDM2IEBACiAgICAgICAgdGFnTmFtZSh0YWcpICsgIiBk
b2VzIG5vdCBRSSB0byAiICsgaWZhY2UpOwogICB9CiAKKyAgLy8gQ2hlY2sgdGhhdCBlYWNoIG5v
ZGUgZG9lc24ndCBRSSB0byBub24tRE9NIHRoaW5ncyAKKyAgZm9yIGVhY2ggKHZhciBpZmFjZSBp
biBpbnRlcmZhY2VzTm9uRE9NW3RhZ10pIHsKKyAgICBpcyhpZmFjZSBpbiBDb21wb25lbnRzLmlu
dGVyZmFjZXMsIHRydWUsCisgICAgICAgaWZhY2UgKyAiIG5vdCBpbiBDb21wb25lbnRzLmludGVy
ZmFjZXMiKTsKKyAgICBpcyhub2RlIGluc3RhbmNlb2YgQ29tcG9uZW50cy5pbnRlcmZhY2VzW2lm
YWNlXSwgZmFsc2UsCisgICAgICAgdGFnTmFtZSh0YWcpICsgIiBzaG91bGQgbm90IFFJIHRvICIg
KyBpZmFjZSk7CisgIH0KK30KKworbmV0c2NhcGUuc2VjdXJpdHkuUHJpdmlsZWdlTWFuYWdlci5l
bmFibGVQcml2aWxlZ2UoJ1VuaXZlcnNhbFhQQ29ubmVjdCcpOworZm9yIGVhY2ggKHZhciB0YWcg
aW4gYWxsVGFncykgeworICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsK
KworICAvLyBIYXZlIHRvIHVzZSB0aGUgcHJvdG8ncyB0b1N0cmluZygpLCBzaW5jZSBIVE1MQW5j
aG9yRWxlbWVudCBhbmQgY29tcGFueQorICAvLyBvdmVycmlkZSB0b1N0cmluZygpLgorICB2YXIg
bm9kZVN0cmluZyA9IEhUTUxFbGVtZW50LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShub2RlKTsK
KworICAvLyBEZWJ1ZyBidWlsZHMgaGF2ZSBleHRyYSBpbmZvLCBzbyBjaG9wIG9mZiBhZnRlciAi
RWxlbWVudCIgaWYgaXQncyBmb2xsb3dlZAorICAvLyBieSAnICcgb3IgJ10nCisgIG5vZGVTdHJp
bmcgPSBub2RlU3RyaW5nLnJlcGxhY2UoL0VsZW1lbnRbXF0gXS4qLywgIkVsZW1lbnQiKTsKKwor
ICAvLyBDaGVjayB0aGF0IGVhY2ggbm9kZSBkb2Vzbid0IFFJIHRvIG5vbi1ET00gdGhpbmdzLCBl
eGNlcHQgd2hlbiB3ZSBoYXZlIHByaXZzCisgIGZvciBlYWNoICh2YXIgaWZhY2UgaW4gaW50ZXJm
YWNlc05vbkRPTVt0YWddKSB7CisgICAgaXMoaWZhY2UgaW4gQ29tcG9uZW50cy5pbnRlcmZhY2Vz
LCB0cnVlLAorICAgICAgIGlmYWNlICsgIiBub3QgaW4gQ29tcG9uZW50cy5pbnRlcmZhY2VzIik7
CisgICAgaXMobm9kZSBpbnN0YW5jZW9mIENvbXBvbmVudHMuaW50ZXJmYWNlc1tpZmFjZV0sIHRy
dWUsCisgICAgICAgdGFnTmFtZSh0YWcpICsgIiBzaG91bGQgUUkgdG8gIiArIGlmYWNlICsgIiBm
cm9tIHByaXZpbGVnZWQgc2NyaXB0Iik7CisgIH0KKwogICAvLyBOb3cgc2VlIHdoYXQgY2xhc3Np
bmZvIHJlcG9ydHMKLSAgbmV0c2NhcGUuc2VjdXJpdHkuUHJpdmlsZWdlTWFuYWdlci5lbmFibGVQ
cml2aWxlZ2UoIlVuaXZlcnNhbFhQQ29ubmVjdCIpOwogICB2YXIgbm9kZUNsYXNzSW5mbyA9IG5v
ZGUuUXVlcnlJbnRlcmZhY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSUNsYXNzSW5mbyk7CiAg
IHZhciBjb3VudCA9IHt9OwogICB2YXIgY2xhc3NJbmZvSW50ZXJmYWNlcyA9CkBAIC0yOTQsNiAr
MzMwLDQ1IEBACiAgICAgICAgICAgaWZhY2UpOwogICB9CiB9CisKK25ldHNjYXBlLnNlY3VyaXR5
LlByaXZpbGVnZU1hbmFnZXIucmV2ZXJ0UHJpdmlsZWdlKCdVbml2ZXJzYWxYUENvbm5lY3QnKTsK
KworLy8gRmluYWxseSwgcnVuIGFsbCBvZiB0aGUgbm9uIHByaXZpbGVnZWQgY2hlY2tzIGFnYWlu
IHRvIG1ha2Ugc3VyZSB0aGF0CisvLyB0ZWFyb2ZmcyB3ZXJlIG5vdCBjYWNoZWQgaW5hcHByb3By
aWF0ZWx5LgorZm9yIGVhY2ggKHZhciB0YWcgaW4gYWxsVGFncykgeworICB2YXIgbm9kZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKKworICAvLyBIYXZlIHRvIHVzZSB0aGUgcHJvdG8n
cyB0b1N0cmluZygpLCBzaW5jZSBIVE1MQW5jaG9yRWxlbWVudCBhbmQgY29tcGFueQorICAvLyBv
dmVycmlkZSB0b1N0cmluZygpLgorICB2YXIgbm9kZVN0cmluZyA9IEhUTUxFbGVtZW50LnByb3Rv
dHlwZS50b1N0cmluZy5hcHBseShub2RlKTsKKworICAvLyBEZWJ1ZyBidWlsZHMgaGF2ZSBleHRy
YSBpbmZvLCBzbyBjaG9wIG9mZiBhZnRlciAiRWxlbWVudCIgaWYgaXQncyBmb2xsb3dlZAorICAv
LyBieSAnICcgb3IgJ10nCisgIG5vZGVTdHJpbmcgPSBub2RlU3RyaW5nLnJlcGxhY2UoL0VsZW1l
bnRbXF0gXS4qLywgIkVsZW1lbnQiKTsKKworICB2YXIgY2xhc3NJbmZvU3RyaW5nID0gZ2V0Q2xh
c3NOYW1lKHRhZyk7CisgIGlzKG5vZGVTdHJpbmcsICJbb2JqZWN0ICIgKyBjbGFzc0luZm9TdHJp
bmcsCisgICAgICJVbmV4cGVjdGVkIGNsYXNzbmFtZSBmb3IgIiArIHRhZ05hbWUodGFnKSk7Cisg
IGlzKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3dbY2xhc3NJbmZvU3RyaW5nXSwgdHJ1ZSwKKyAgICAg
dGFnTmFtZSh0YWcpICsgIiBub3QgYW4gaW5zdGFuY2Ugb2YgIiArIGNsYXNzSW5mb3NbdGFnXSk7
CisKKyAgLy8gQ2hlY2sgdGhhdCBlYWNoIG5vZGUgUUlzIHRvIGFsbCB0aGUgdGhpbmdzIHdlIGV4
cGVjdCBpdCB0byBRSSB0bworICBmb3IgZWFjaCAodmFyIGlmYWNlIGluIGludGVyZmFjZXNbdGFn
XS5jb25jYXQoaW50ZXJmYWNlc05vbkNsYXNzaW5mb1t0YWddKSkgeworICAgIGlzKGlmYWNlIGlu
IENvbXBvbmVudHMuaW50ZXJmYWNlcywgdHJ1ZSwKKyAgICAgICBpZmFjZSArICIgbm90IGluIENv
bXBvbmVudHMuaW50ZXJmYWNlcyIpOworICAgIGlzKG5vZGUgaW5zdGFuY2VvZiBDb21wb25lbnRz
LmludGVyZmFjZXNbaWZhY2VdLCB0cnVlLAorICAgICAgIHRhZ05hbWUodGFnKSArICIgZG9lcyBu
b3QgUUkgdG8gIiArIGlmYWNlKTsKKyAgfQorCisgIC8vIENoZWNrIHRoYXQgZWFjaCBub2RlIGRv
ZXNuJ3QgUUkgdG8gbm9uLURPTSB0aGluZ3MgCisgIGZvciBlYWNoICh2YXIgaWZhY2UgaW4gaW50
ZXJmYWNlc05vbkRPTVt0YWddKSB7CisgICAgaXMoaWZhY2UgaW4gQ29tcG9uZW50cy5pbnRlcmZh
Y2VzLCB0cnVlLAorICAgICAgIGlmYWNlICsgIiBub3QgaW4gQ29tcG9uZW50cy5pbnRlcmZhY2Vz
Iik7CisgICAgaXMobm9kZSBpbnN0YW5jZW9mIENvbXBvbmVudHMuaW50ZXJmYWNlc1tpZmFjZV0s
IGZhbHNlLAorICAgICAgIHRhZ05hbWUodGFnKSArICIgc2hvdWxkIG5vdCBRSSB0byAiICsgaWZh
Y2UpOworICB9Cit9CisKIDwvc2NyaXB0PgogPC9wcmU+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfYnVnNjA1MjcxLmh0bWwgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L3Rlc3RfYnVnNjA1MjcxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
LS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfYnVnNjA1
MjcxLmh0bWwKQEAgLTAsMCArMSwzNSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzwhLS0K
K2h0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPXtCVUdOVU1CRVJ9
CistLT4KKzxoZWFkPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIHtCVUdOVU1CRVJ9PC90aXRsZT4K
KyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL01vY2hpS2l0L01vY2hpS2l0
LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rl
c3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+CisgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3Nz
IiAvPgorPC9oZWFkPgorPGJvZHk+Cis8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9i
dWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9e0JVR05VTUJFUn0iPk1vemlsbGEg
QnVnIHtCVUdOVU1CRVJ9PC9hPgorPHAgaWQ9ImRpc3BsYXkiPjwvcD4KKzxkaXYgaWQ9ImNvbnRl
bnQiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgCis8L2Rpdj4KKzxwcmUgaWQ9InRlc3QiPgor
PHNjcmlwdCBjbGFzcz0idGVzdGJvZHkiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKKy8qKiBU
ZXN0IGZvciBCdWcge0JVR05VTUJFUn0gKiovCit2YXIgZWxlbSA9ICQoImRpc3BsYXkiKTsKK25l
dHNjYXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCdVbml2ZXJz
YWxYUENvbm5lY3QnKTsKK2VsZW0uUXVlcnlJbnRlcmZhY2UoQ29tcG9uZW50cy5pbnRlcmZhY2Vz
Lm5zSURPTTNFdmVudFRhcmdldCk7CitlbGVtLmFkZEdyb3VwZWRFdmVudExpc3RlbmVyOyAvLyBm
b3JjZSB0aGlzIHRvIGJlIHJlc29sdmVkCituZXRzY2FwZS5zZWN1cml0eS5Qcml2aWxlZ2VNYW5h
Z2VyLnJldmVydFByaXZpbGVnZSgnVW5pdmVyc2FsWFBDb25uZWN0Jyk7CitvayghKGVsZW0gaW5z
dGFuY2VvZiBDb21wb25lbnRzLmludGVyZmFjZXMubnNJRE9NM0V2ZW50VGFyZ2V0KSwKKyAgICJ0
ZWFyb2ZmIGNyb3NzZWQgcHJpdmlsZWdlIHNjb3BlIik7CitpcyhlbGVtLmFkZEdyb3VwZWRFdmVu
dExpc3RlbmVyLCB1bmRlZmluZWQsICJ0ZWFyb2ZmIGNyb3NzZWQgcHJpdmlsZWdlIHNjb3BlIik7
CitpcyhPYmplY3Qua2V5cyhlbGVtKSwgIiIsICJ0ZWFyb2ZmIGNyb3NzZWQgcHJpdmlsZWdlIHNj
b3BlIik7CisKKzwvc2NyaXB0PgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9kb20vYmFzZS9uc0RPTUNsYXNzSW5mby5jcHAgYi9kb20vYmFzZS9uc0RPTUNsYXNzSW5mby5j
cHAKLS0tIGEvZG9tL2Jhc2UvbnNET01DbGFzc0luZm8uY3BwCisrKyBiL2RvbS9iYXNlL25zRE9N
Q2xhc3NJbmZvLmNwcApAQCAtNTMzLDYgKzUzMyw3IEBACiAKICNkZWZpbmUgRUxFTUVOVF9TQ1JJ
UFRBQkxFX0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgKChOT0RFX1NDUklQVEFCTEVfRkxBR1MgJiB+bnNJWFBDU2NyaXB0YWJsZTo6Q0xBU1NJ
TkZPX0lOVEVSRkFDRVNfT05MWSkgfCAgIFwKKyAgIG5zSVhQQ1NjcmlwdGFibGU6OkNMQVNTSU5G
T19JTlRFUkZBQ0VTX09OTFlfTk9QUklWUyB8ICAgICAgICAgICAgICAgICAgICAgIFwKICAgIG5z
SVhQQ1NjcmlwdGFibGU6OldBTlRfUE9TVENSRUFURSB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgIG5zSVhQQ1NjcmlwdGFibGU6OldBTlRfRU5VTUVSQVRFKQog
CkBAIC00NzMwLDYgKzQ3MzEsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVudXNl
ZCk7CiB9CiAKK1BSQm9vbAorbnNET01DbGFzc0luZm86OlNob3VsZFJlZmxlY3ROb25DbGFzc0lu
Zm9JZmFjZShuc0lTdXBwb3J0cyogYU9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVGTlNJSUQgYUlJRCkKK3sKKyAgcmV0dXJuIFBSX0ZBTFNFOwor
fQorCiAvLyBzdGF0aWMKIG5zSUNsYXNzSW5mbyAqCiBOU19HZXRET01DbGFzc0luZm9JbnN0YW5j
ZShuc0RPTUNsYXNzSW5mb0lEIGFJRCkKQEAgLTc3MjIsNiArNzczMCw0MSBAQAogICByZXR1cm4g
UFJfVFJVRTsKIH0KIAorLy8gSWYgdGhlIHByb3AgaXMgb24gdGhpcyBvYmplY3QgKGNsYXNzaW5m
byBpbnRlcmZhY2VzIGFyZSBvbiB0aGUgcHJvdG8pCisvLyBhbmQgaXQgaXNuJ3QgZXhwb3NlZCB0
aHJvdWdoIFhCTCwgdmV0byBhY2Nlc3MgdG8gdW5wcml2aWxlZ2VkIGNhbGxlcnMuCitOU19JTUVU
SE9ESU1QCituc0VsZW1lbnRTSDo6R2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2
ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBKU09i
amVjdCAqb2JqLCBqc2lkIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCkKK3sKKyAgaWYg
KCF3cmFwcGVyKQorICAgIHJldHVybiBOU19PSzsgLy8gTm90IGludGVyZXN0ZWQgaW4gc2xpbSB3
cmFwcGVycworCisgIG5zSVN1cHBvcnRzKiBuYXRpdmUgPSB3cmFwcGVyLT5OYXRpdmUoKTsKKyAg
bnNHZW5lcmljRWxlbWVudCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PG5zR2VuZXJpY0VsZW1lbnQq
PihuYXRpdmUpOworICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VJbmZvPiBpSW5mbzsKKyAgbnNyZXN1
bHQgcnYgPSB3cmFwcGVyLT5GaW5kSW50ZXJmYWNlV2l0aE1lbWJlcihpZCwgZ2V0dGVyX0FkZFJl
ZnMoaUluZm8pKTsKKyAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKworICBpZiAoIWlJbmZv
KQorICAgIHJldHVybiBOU19PSzsKKworICBjb25zdCBuc0lJRCogaWlkOworICBydiA9IGlJbmZv
LT5HZXRJSURTaGFyZWQoJmlpZCk7CisgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisKKyAg
aWYgKGVsZW1lbnQtPkltcGxlbWVudHNYQkxJZmFjZSgqaWlkKSkKKyAgICByZXR1cm4gTlNfT0s7
IC8vIEFsbG93IHRoaXMgdG8gcHJvY2VlZAorCisgIC8vIE90aGVyd2lzZSwgdmV0byBpZiBhcHBy
b3ByaWF0ZQorICBpZiAoIW5zQ29udGVudFV0aWxzOjpJc0NhbGxlclRydXN0ZWRGb3JDYXBhYmls
aXR5KCJVbml2ZXJzYWxYUENvbm5lY3QiKSkgeworICAgICp2cCA9IEpTVkFMX1ZPSUQ7CisgICAg
Kl9yZXR2YWwgPSBKU19UUlVFOworICAgIHJldHVybiBOU19TVUNDRVNTX0lfRElEX1NPTUVUSElO
RzsKKyAgfQorCisgIHJldHVybiBuc05vZGVTSDo6R2V0UHJvcGVydHkod3JhcHBlciwgY3gsIG9i
aiwgaWQsIHZwLCBfcmV0dmFsKTsKK30KKwogTlNfSU1FVEhPRElNUAogbnNFbGVtZW50U0g6OlBy
ZUNyZWF0ZShuc0lTdXBwb3J0cyAqbmF0aXZlT2JqLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAg
ICAgICAgICAgICAgICBKU09iamVjdCAqZ2xvYmFsT2JqLCBKU09iamVjdCAqKnBhcmVudE9iaikK
QEAgLTc4ODAsNyArNzkyMywxOCBAQAogICAKICAgcmV0dXJuIE5TX09LOwogfQotICAKKworUFJC
b29sCituc0VsZW1lbnRTSDo6U2hvdWxkUmVmbGVjdE5vbkNsYXNzSW5mb0lmYWNlKG5zSVN1cHBv
cnRzKiBhT2JqLCBSRUZOU0lJRCBhSUlEKQoreworICBuc0NPTVB0cjxFbGVtZW50PiBlbGVtZW50
ID0gZG9fUXVlcnlJbnRlcmZhY2UoYU9iaik7CisgIGlmICghZWxlbWVudCkgeworICAgIHJldHVy
biBQUl9GQUxTRTsKKyAgfQorCisgIG5zR2VuZXJpY0VsZW1lbnQqIG9iamVjdCA9IHN0YXRpY19j
YXN0PG5zR2VuZXJpY0VsZW1lbnQqPihlbGVtZW50LmdldCgpKTsKKyAgcmV0dXJuIG9iamVjdC0+
SW1wbGVtZW50c1hCTElmYWNlKGFJSUQpOworfQogCiAvLyBHZW5lcmljIGFycmF5IHNjcmlwdGFi
bGUgaGVscGVyLgogCmRpZmYgLS1naXQgYS9kb20vYmFzZS9uc0RPTUNsYXNzSW5mby5oIGIvZG9t
L2Jhc2UvbnNET01DbGFzc0luZm8uaAotLS0gYS9kb20vYmFzZS9uc0RPTUNsYXNzSW5mby5oCisr
KyBiL2RvbS9iYXNlL25zRE9NQ2xhc3NJbmZvLmgKQEAgLTcwMiw2ICs3MDIsMTEgQEAKICAgICAg
ICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmopOwogICBOU19JTUVUSE9EIEVudW1lcmF0
ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAg
ICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBQUkJvb2wgKl9yZXR2YWwpOworICBO
U19JTUVUSE9EIEdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIs
IEpTQ29udGV4dCAqY3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwg
anNpZCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOworCisgIHZpcnR1YWwgUFJCb29s
IFNob3VsZFJlZmxlY3ROb25DbGFzc0luZm9JZmFjZShuc0lTdXBwb3J0cyAqYU9iaiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFRk5TSUlEIGFJSUQp
OwogCiAgIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSog
YURhdGEpCiAgIHsKZGlmZiAtLWdpdCBhL2pzL3NyYy94cGNvbm5lY3QvaWRsL25zSVhQQ1Njcmlw
dGFibGUuaWRsIGIvanMvc3JjL3hwY29ubmVjdC9pZGwvbnNJWFBDU2NyaXB0YWJsZS5pZGwKLS0t
IGEvanMvc3JjL3hwY29ubmVjdC9pZGwvbnNJWFBDU2NyaXB0YWJsZS5pZGwKKysrIGIvanMvc3Jj
L3hwY29ubmVjdC9pZGwvbnNJWFBDU2NyaXB0YWJsZS5pZGwKQEAgLTExNSw2ICsxMTUsOSBAQAog
ICAgIGNvbnN0IFBSVWludDMyIERPTlRfUkVGTEVDVF9JTlRFUkZBQ0VfTkFNRVMgICAgID0gMSA8
PCAyNzsKICAgICBjb25zdCBQUlVpbnQzMiBXQU5UX0VRVUFMSVRZICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgMjg7CiAgICAgY29uc3QgUFJVaW50MzIgV0FOVF9PVVRFUl9PQkpFQ1QgICAgICAg
ICAgICAgICAgPSAxIDw8IDI5OworICAgIC8vIEp1c3QgbGlrZSBDTEFTU0lORk9fSU5URVJGQUNF
U19PTkxZLCBidXQgY29kZSB3aXRoCisgICAgLy8gVW5pdmVyc2FsWFBDb25uZWN0IGNhbiBRSSB0
aHJvdWdoCisgICAgY29uc3QgUFJVSW50MzIgQ0xBU1NJTkZPX0lOVEVSRkFDRVNfT05MWV9OT1BS
SVZTPSAxIDw8IDMwOwogCiAgICAgLy8gVGhlIGhpZ2ggb3JkZXIgYml0IGlzIFJFU0VSVkVEIGZv
ciBjb25zdW1lcnMgb2YgdGhlc2UgZmxhZ3MuIAogICAgIC8vIE5vIGltcGxlbWVudG9yIG9mIHRo
aXMgaW50ZXJmYWNlIHNob3VsZCBldmVyIHJldHVybiBmbGFncyAKQEAgLTE5Nyw2ICsyMDAsMTAg
QEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBKU0NvbnRleHRQdHIgY3gsIGluIEpT
T2JqZWN0UHRyIG9iaik7CiAKICAgICB2b2lkIHBvc3RDcmVhdGVQcm90b3R5cGUoaW4gSlNDb250
ZXh0UHRyIGN4LCBpbiBKU09iamVjdFB0ciBwcm90byk7CisKKworICAgIFtub3R4cGNvbV0gUFJC
b29sIFNob3VsZFJlZmxlY3ROb25DbGFzc0luZm9JZmFjZShpbiBuc0lTdXBwb3J0cyBvYmosCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG5z
SUlEUmVmIGlpZCk7CiB9OwogCiAleyBDKysKQEAgLTIwNCw4ICsyMTEsOCBAQAogI2luY2x1ZGUg
Im5zQXV0b1B0ci5oIgogCiAjZGVmaW5lIE5TX1hQQ0NMQVNTSU5GT19JSUQgXAoteyAweDlhNWIw
MzQyLCAweDBmNzAsIDB4NGQzMSwgXAotIHsgMHhiNywgMHhkNywgMHgyOSwgMHg2OCwgMHhhNSwg
MHg3MCwgMHg0YiwgMHhkOCB9IH0KK3sgMHg1NjM1NTQ1OCwgMHgxMDlmLCAweDQxNDgsIFwKKyB7
IDB4YTksIDB4OTIsIDB4OTgsIDB4OTMsIDB4M2UsIDB4MjgsIDB4Y2EsIDB4YTIgfSB9CiAKIGNs
YXNzIE5TX05PX1ZUQUJMRSBuc1hQQ0NsYXNzSW5mbyA6IHB1YmxpYyBuc0lDbGFzc0luZm8sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgbnNJWFBDU2NyaXB0YWJs
ZQpAQCAtMjE5LDYgKzIyNiwxMiBAQAogICB2aXJ0dWFsIHZvaWQgUHJlc2VydmVXcmFwcGVyKG5z
SVN1cHBvcnRzICphTmF0aXZlKSA9IDA7CiAKICAgdmlydHVhbCBQUlVpbnQzMiBHZXRJbnRlcmZh
Y2VzQml0bWFwKCkgPSAwOworCisgIHZpcnR1YWwgUFJCb29sIFNob3VsZFJlZmxlY3ROb25DbGFz
c0luZm9JZmFjZShuc0lTdXBwb3J0cyogYU9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJFRk5TSUlEIGFJSUQpCisgIHsKKyAgICByZXR1cm4gUFJf
RkFMU0U7CisgIH0KIH07CiAKIE5TX0RFRklORV9TVEFUSUNfSUlEX0FDQ0VTU09SKG5zWFBDQ2xh
c3NJbmZvLCBOU19YUENDTEFTU0lORk9fSUlEKQpkaWZmIC0tZ2l0IGEvanMvc3JjL3hwY29ubmVj
dC9pZGwvbnNJWFBDb25uZWN0LmlkbCBiL2pzL3NyYy94cGNvbm5lY3QvaWRsL25zSVhQQ29ubmVj
dC5pZGwKLS0tIGEvanMvc3JjL3hwY29ubmVjdC9pZGwvbnNJWFBDb25uZWN0LmlkbAorKysgYi9q
cy9zcmMveHBjb25uZWN0L2lkbC9uc0lYUENvbm5lY3QuaWRsCkBAIC04MSw2ICs4MSw4IEBACiAv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBHRU5FUkFURV9YUENfRkFJTFVSRSh4KSBcCiAg
ICAgICAgICAgICAoTlNfRVJST1JfR0VORVJBVEVfRkFJTFVSRShOU19FUlJPUl9NT0RVTEVfWFBD
T05ORUNULHgpKQorI2RlZmluZSBHRU5FUkFURV9YUENfU1VDQ0VTUyh4KSBcCisgICAgICAgICAg
ICAoTlNfRVJST1JfR0VORVJBVEVfU1VDQ0VTUyhOU19FUlJPUl9NT0RVTEVfWFBDT05ORUNULHgp
KQogCiAjZGVmaW5lIE5TX0VSUk9SX1hQQ19OT1RfRU5PVUdIX0FSR1MgICAgICAgICAgICAgICAg
ICAgR0VORVJBVEVfWFBDX0ZBSUxVUkUoIDEpCiAjZGVmaW5lIE5TX0VSUk9SX1hQQ19ORUVEX09V
VF9PQkpFQ1QgICAgICAgICAgICAgICAgICAgR0VORVJBVEVfWFBDX0ZBSUxVUkUoIDIpCkBAIC0x
MzYsNiArMTM4LDggQEAKICNkZWZpbmUgTlNfRVJST1JfWFBDX0NBTlRfTU9ESUZZX1BST1BfT05f
V04gICAgICAgICAgICBHRU5FUkFURV9YUENfRkFJTFVSRSg1MikKICNkZWZpbmUgTlNfRVJST1Jf
WFBDX0JBRF9DT05WRVJUX0pTX1pFUk9fSVNOT1RfTlVMTCAgICBHRU5FUkFURV9YUENfRkFJTFVS
RSg1MykKIAorI2RlZmluZSBOU19TVUNDRVNTX1hQQ19ET05UX0NBQ0hFX1RFQVJPRkYgICAgICAg
ICAgICAgIEdFTkVSQVRFX1hQQ19TVUNDRVNTKCAxKQorCiAjaWZkZWYgWFBDX0lESVNQQVRDSF9T
VVBQT1JUCiAvLyBJRGlzcGF0Y2ggc3VwcG9ydCByZWxhdGVkIGVycm9ycwogI2RlZmluZSBOU19F
UlJPUl9YUENfQ09NX1VOS05PV04gICAgICAgICAgICAgICAgICAgICAgIEdFTkVSQVRFX1hQQ19G
QUlMVVJFKDU0KQpkaWZmIC0tZ2l0IGEvanMvc3JjL3hwY29ubmVjdC9wdWJsaWMveHBjX21hcF9l
bmQuaCBiL2pzL3NyYy94cGNvbm5lY3QvcHVibGljL3hwY19tYXBfZW5kLmgKLS0tIGEvanMvc3Jj
L3hwY29ubmVjdC9wdWJsaWMveHBjX21hcF9lbmQuaAorKysgYi9qcy9zcmMveHBjb25uZWN0L3B1
YmxpYy94cGNfbWFwX2VuZC5oCkBAIC01Niw2ICs1NiwxMyBAQAogICAgIHJldHVybiBOU19PSzsK
IH0KIAorUFJCb29sCitYUENfTUFQX0NMQVNTTkFNRTo6U2hvdWxkUmVmbGVjdE5vbkNsYXNzSW5m
b0lmYWNlKG5zSVN1cHBvcnRzKiBhT2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSRUZOU0lJRCBhSUlEKQoreworICAgIHJldHVybiBQUl9GQUxT
RTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwogCiBOU19JTUVUSE9ESU1QIFhQQ19NQVBfQ0xBU1NOQU1FOjpHZXRT
Y3JpcHRhYmxlRmxhZ3MoUFJVaW50MzIgKmFGbGFncykKZGlmZiAtLWdpdCBhL2pzL3NyYy94cGNv
bm5lY3Qvc3JjL3hwY2lubGluZXMuaCBiL2pzL3NyYy94cGNvbm5lY3Qvc3JjL3hwY2lubGluZXMu
aAotLS0gYS9qcy9zcmMveHBjb25uZWN0L3NyYy94cGNpbmxpbmVzLmgKKysrIGIvanMvc3JjL3hw
Y29ubmVjdC9zcmMveHBjaW5saW5lcy5oCkBAIC02ODYsNyArNjg2LDggQEAKIGlubGluZSBKU0Jv
b2wKIFhQQ1dyYXBwZWROYXRpdmU6Okhhc0ludGVyZmFjZU5vUUkoY29uc3QgbnNJSUQmIGlpZCkK
IHsKLSAgICByZXR1cm4gbnNudWxsICE9IEdldFNldCgpLT5GaW5kSW50ZXJmYWNlV2l0aElJRChp
aWQpOworICAgIFhQQ05hdGl2ZUludGVyZmFjZSogaWZhY2UgPSBHZXRTZXQoKS0+RmluZEludGVy
ZmFjZVdpdGhJSUQoaWlkKTsKKyAgICByZXR1cm4gbnNudWxsICE9IGlmYWNlICYmICFpZmFjZS0+
SXNVbnNhZmUoKTsKIH0KIAogaW5saW5lIHZvaWQKZGlmZiAtLWdpdCBhL2pzL3NyYy94cGNvbm5l
Y3Qvc3JjL3hwY3ByaXZhdGUuaCBiL2pzL3NyYy94cGNvbm5lY3Qvc3JjL3hwY3ByaXZhdGUuaAot
LS0gYS9qcy9zcmMveHBjb25uZWN0L3NyYy94cGNwcml2YXRlLmgKKysrIGIvanMvc3JjL3hwY29u
bmVjdC9zcmMveHBjcHJpdmF0ZS5oCkBAIC0xNzQ5LDEyICsxNzQ5LDE4IEBACiAgICAgdm9pZCBE
ZWJ1Z0R1bXAoUFJJbnQxNiBkZXB0aCk7CiAKICNkZWZpbmUgWFBDX05BVElWRV9JRkFDRV9NQVJL
X0ZMQUcgKChQUlVpbnQxNilKU19CSVQoMTUpKSAvLyBvbmx5IGhpZ2ggYml0IG9mIDE2IGlzIHNl
dAorI2RlZmluZSBYUENfTkFUSVZFX0lGQUNFX05PVF9TQUZFICAoKFBSVWludDE2KUpTX0JJVCgx
NCkpCiAKICAgICB2b2lkIE1hcmsoKSAgICAge21NZW1iZXJDb3VudCB8PSBYUENfTkFUSVZFX0lG
QUNFX01BUktfRkxBRzt9CiAgICAgdm9pZCBVbm1hcmsoKSAgIHttTWVtYmVyQ291bnQgJj0gflhQ
Q19OQVRJVkVfSUZBQ0VfTUFSS19GTEFHO30KICAgICBKU0Jvb2wgSXNNYXJrZWQoKSBjb25zdAog
ICAgICAgICAgICAgICAgICAgICB7cmV0dXJuIDAgIT0gKG1NZW1iZXJDb3VudCAmIFhQQ19OQVRJ
VkVfSUZBQ0VfTUFSS19GTEFHKTt9CiAKKyAgICB2b2lkIE1hcmtVbnNhZmUoKSB7bU1lbWJlckNv
dW50IHw9IFhQQ19OQVRJVkVfSUZBQ0VfTk9UX1NBRkU7fQorICAgIHZvaWQgVW5tYXJrVW5zYWZl
KCkge21NZW1iZXJDb3VudCAmPSB+WFBDX05BVElWRV9JRkFDRV9OT1RfU0FGRTt9CisgICAgSlNC
b29sIElzVW5zYWZlKCkgY29uc3QKKyAgICB7cmV0dXJuIDAgIT0gKG1NZW1iZXJDb3VudCAmIFhQ
Q19OQVRJVkVfSUZBQ0VfTk9UX1NBRkUpO30KKwogICAgIC8vIE5PUC4gVGhpcyBpcyBqdXN0IGhl
cmUgdG8gbWFrZSB0aGUgQXV0b01hcmtpbmdQdHIgY29kZSBjb21waWxlLgogICAgIGlubGluZSB2
b2lkIFRyYWNlSlMoSlNUcmFjZXIqIHRyYykge30KICAgICBpbmxpbmUgdm9pZCBBdXRvVHJhY2Uo
SlNUcmFjZXIqIHRyYykge30KQEAgLTE5ODgsNiArMTk5NCw3IEBACiAgICAgSlNCb29sIEFsbG93
UHJvcE1vZHNUb1Byb3RvdHlwZSgpICAgICBHRVRfSVQoQUxMT1dfUFJPUF9NT0RTX1RPX1BST1RP
VFlQRSkKICAgICBKU0Jvb2wgRG9udFNoYXJlUHJvdG90eXBlKCkgICAgICAgICAgIEdFVF9JVChE
T05UX1NIQVJFX1BST1RPVFlQRSkKICAgICBKU0Jvb2wgRG9udFJlZmxlY3RJbnRlcmZhY2VOYW1l
cygpICAgIEdFVF9JVChET05UX1JFRkxFQ1RfSU5URVJGQUNFX05BTUVTKQorICAgIEpTQm9vbCBD
bGFzc0luZm9JbnRlcmZhY2VzT25seU5vUHJpdnMoKSBHRVRfSVQoQ0xBU1NJTkZPX0lOVEVSRkFD
RVNfT05MWV9OT1BSSVZTKQogCiAjdW5kZWYgR0VUX0lUCiB9OwpAQCAtMjA4Nyw2ICsyMDk0LDEx
IEBACiAKICAgICB2b2lkIE1hcmsoKSB7aWYobVNoYXJlZCkgbVNoYXJlZC0+TWFyaygpO30KIAor
ICAgIFBSQm9vbCBTaG91bGRSZWZsZWN0Tm9uQ2xhc3NJbmZvSWZhY2UobnNJU3VwcG9ydHMqIGFP
YmosIFJFRk5TSUlEIGFJSUQpCisgICAgeworICAgICAgICByZXR1cm4gbUNhbGxiYWNrLT5TaG91
bGRSZWZsZWN0Tm9uQ2xhc3NJbmZvSWZhY2UoYU9iaiwgYUlJRCk7CisgICAgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgWFBDTmF0aXZlU2NyaXB0YWJsZUluZm8obnNJWFBDU2NyaXB0YWJsZSogc2NyaXB0
YWJsZSA9IG5zbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUENOYXRpdmVTY3Jp
cHRhYmxlU2hhcmVkKiBzaGFyZWQgPSBuc251bGwpCkBAIC0yMzY4LDcgKzIzODAsOCBAQAogICAg
IHZvaWQgSlNPYmplY3RGaW5hbGl6ZWQoKSB7U2V0SlNPYmplY3QobnNudWxsKTt9CiAKICAgICBY
UENXcmFwcGVkTmF0aXZlVGVhck9mZigpCi0gICAgICAgIDogbUludGVyZmFjZShuc251bGwpLCBt
TmF0aXZlKG5zbnVsbCksIG1KU09iamVjdChuc251bGwpIHt9CisgICAgICAgIDogbUludGVyZmFj
ZShuc251bGwpLCBtTmF0aXZlKG5zbnVsbCksIG1KU09iamVjdChuc251bGwpLCBtVW5zYWZlKFBS
X0ZBTFNFKQorICAgIHt9CiAgICAgflhQQ1dyYXBwZWROYXRpdmVUZWFyT2ZmKCk7CiAKICAgICAv
LyBOT1AuIFRoaXMgaXMganVzdCBoZXJlIHRvIG1ha2UgdGhlIEF1dG9NYXJraW5nUHRyIGNvZGUg
Y29tcGlsZS4KQEAgLTIzNzksNiArMjM5Miw5IEBACiAgICAgdm9pZCBVbm1hcmsoKSAgICAge21K
U09iamVjdCA9IChKU09iamVjdCopKCgoanN3b3JkKW1KU09iamVjdCkgJiB+MSk7fQogICAgIEpT
Qm9vbCBJc01hcmtlZCgpIGNvbnN0IHtyZXR1cm4gKEpTQm9vbCkoKChqc3dvcmQpbUpTT2JqZWN0
KSAmIDEpO30KIAorICAgIHZvaWQgTWFya1Vuc2FmZSgpIHttVW5zYWZlID0gUFJfVFJVRTt9Cisg
ICAgUFJCb29sIElzVW5zYWZlKCkgY29uc3Qge3JldHVybiBtVW5zYWZlO30KKwogI2lmZGVmIFhQ
Q19JRElTUEFUQ0hfU1VQUE9SVAogICAgIGVudW0gSlNPYmplY3RfZmxhZ3MKICAgICB7CkBAIC0y
Mzk3LDYgKzI0MTMsNyBAQAogICAgIFhQQ05hdGl2ZUludGVyZmFjZSogbUludGVyZmFjZTsKICAg
ICBuc0lTdXBwb3J0cyogICAgICAgIG1OYXRpdmU7CiAgICAgSlNPYmplY3QqICAgICAgICAgICBt
SlNPYmplY3Q7CisgICAgUFJCb29sICAgICAgICAgICAgICBtVW5zYWZlOwogfTsKIAogLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjc3Miw2ICsy
Nzg5LDkgQEAKIAogICAgIEpTQm9vbCBFeHRlbmRTZXQoWFBDQ2FsbENvbnRleHQmIGNjeCwgWFBD
TmF0aXZlSW50ZXJmYWNlKiBhSW50ZXJmYWNlKTsKIAorICAgIG5zcmVzdWx0IFNob3VsZEFsbG93
UUkobnNJU3VwcG9ydHMqIGFJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQ
Q05hdGl2ZUludGVyZmFjZSogYUludGVyZmFjZSk7CisKICAgICBuc3Jlc3VsdCBJbml0VGVhck9m
ZihYUENDYWxsQ29udGV4dCYgY2N4LAogICAgICAgICAgICAgICAgICAgICAgICAgIFhQQ1dyYXBw
ZWROYXRpdmVUZWFyT2ZmKiBhVGVhck9mZiwKICAgICAgICAgICAgICAgICAgICAgICAgICBYUENO
YXRpdmVJbnRlcmZhY2UqIGFJbnRlcmZhY2UsCmRpZmYgLS1naXQgYS9qcy9zcmMveHBjb25uZWN0
L3NyYy94cGN3cmFwcGVkbmF0aXZlLmNwcCBiL2pzL3NyYy94cGNvbm5lY3Qvc3JjL3hwY3dyYXBw
ZWRuYXRpdmUuY3BwCi0tLSBhL2pzL3NyYy94cGNvbm5lY3Qvc3JjL3hwY3dyYXBwZWRuYXRpdmUu
Y3BwCisrKyBiL2pzL3NyYy94cGNvbm5lY3Qvc3JjL3hwY3dyYXBwZWRuYXRpdmUuY3BwCkBAIC0x
MDY2LDYgKzEwNjYsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBzZXQgRE9OVF9T
SEFSRV9QUk9UT1RZUEUgb24gYW4gaW5zdGFuY2Ugc2NyaXB0YWJsZSAiCiAgICAgICAgICAgICAg
ICAgICAgICAid2l0aG91dCBhbHNvIHNldHRpbmcgaXQgb24gdGhlIGNsYXNzIHNjcmlwdGFibGUg
KGlmIHByZXNlbnQgYW5kIHNoYXJlZCkiKTsKIAorICAgICAgICBOU19BU1NFUlRJT04oIShzY2lX
cmFwcGVyLkdldEZsYWdzKCkuQ2xhc3NJbmZvSW50ZXJmYWNlc09ubHlOb1ByaXZzKCkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgICFzY2lQcm90by5HZXRGbGFncygpLkNsYXNzSW5mb0ludGVy
ZmFjZXNPbmx5Tm9Qcml2cygpICYmCisgICAgICAgICAgICAgICAgICAgICAgICBzY2lQcm90by5H
ZXRDYWxsYmFjaygpKSwKKyAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBzZXQgQ0xBU1NJTkZP
X0lOVEVSRkFDRVNfT05MWV9OT1BSSVZTIG9uIGFuIGluc3RhbmNlIHNjcmlwdGFibGUgIgorICAg
ICAgICAgICAgICAgICAgICAgIndpdGhvdXQgYWxzbyBzZXR0aW5nIGl0IG9uIHRoZSBjbGFzcyBz
Y3JpcHRhYmxlIChpZiBwcmVzZW50IGFuZCBzaGFyZWQpIik7CisKICAgICAgICAgcmV0dXJuIHNj
aVdyYXBwZXI7CiAgICAgfQogCkBAIC0xODI2LDYgKzE4MzIsOSBAQAogICAgICAgICB7CiAgICAg
ICAgICAgICBpZih0by0+R2V0SW50ZXJmYWNlKCkgPT0gYUludGVyZmFjZSkKICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZih0by0+SXNVbnNhZmUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7IC8vIERvbid0IHJldXNlIGFuIHVuc2FmZSB0ZWFyb2ZmCisKICAgICAgICAg
ICAgICAgICBpZihuZWVkSlNPYmplY3QgJiYgIXRvLT5HZXRKU09iamVjdCgpKQogICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgQXV0b01hcmtpbmdXcmFwcGVkTmF0aXZlVGVh
ck9mZlB0ciB0ZWFyb2ZmKGNjeCwgdG8pOwpAQCAtMTg3MCw2ICsxODc5LDggQEAKICAgICAgICAg
dG8tPlVubWFyaygpOwogICAgICAgICBpZihOU19GQUlMRUQocnYpKQogICAgICAgICAgICAgdG8g
PSBuc251bGw7CisgICAgICAgIGlmIChydiA9PSBOU19TVUNDRVNTX1hQQ19ET05UX0NBQ0hFX1RF
QVJPRkYpCisgICAgICAgICAgICB0by0+TWFya1Vuc2FmZSgpOwogICAgIH0KIAogcmV0dXJuX3Jl
c3VsdDoKQEAgLTE4ODAsNiArMTg5MSw1MCBAQAogfQogCiBuc3Jlc3VsdAorWFBDV3JhcHBlZE5h
dGl2ZTo6U2hvdWxkQWxsb3dRSShuc0lTdXBwb3J0cyogYUlkZW50aXR5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYUENOYXRpdmVJbnRlcmZhY2UqIGFJbnRlcmZhY2UpCit7Cisg
ICAgaWYoIW1TY3JpcHRhYmxlSW5mbykKKyAgICAgICAgcmV0dXJuIE5TX09LOworCisgICAgLy8g
RG9lcyB0aGUgc2NyaXB0YWJsZSBoZWxwZXIgc2F5IENsYXNzSW5mbyBvbmx5IGZvciBldmVyeW9u
ZT8KKyAgICBpZiAobVNjcmlwdGFibGVJbmZvLT5HZXRGbGFncygpLkNsYXNzSW5mb0ludGVyZmFj
ZXNPbmx5KCkgJiYKKyAgICAgICAgLy8gTkI6IElmIHRoZSBpbnRlcmZhY2UgaXMgVW5zYWZlIHRo
ZW4gd2UgY2FuJ3QgcmVseSBvbiBpdCBiZWluZyBpbgorICAgICAgICAvLyB0aGUgc2V0IGFzIGEg
dGVzdCBvZiB3aGV0aGVyIHRoaXMgaXMgc2FmZSBvciBub3QuCisgICAgICAgIChhSW50ZXJmYWNl
LT5Jc1Vuc2FmZSgpIHx8CisgICAgICAgICAoIW1TZXQtPkhhc0ludGVyZmFjZShhSW50ZXJmYWNl
KSAmJgorICAgICAgICAgICFtU2V0LT5IYXNJbnRlcmZhY2VXaXRoQW5jZXN0b3IoYUludGVyZmFj
ZSkpKSAmJgorICAgICAgICAhbVNjcmlwdGFibGVJbmZvLT5TaG91bGRSZWZsZWN0Tm9uQ2xhc3NJ
bmZvSWZhY2UoYUlkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKmFJbnRlcmZhY2UtPkdldElJRCgpKSkKKyAgICB7CisgICAg
ICAgIC8vIERvbid0IGV2ZW4gdHJ5IHRoZSBRSQorICAgICAgICByZXR1cm4gTlNfRVJST1JfTk9f
SU5URVJGQUNFOworICAgIH0KKworICAgIFBSQm9vbCBzaG91bGRSZXN0cmljdFRlYXJvZmYgPSBQ
Ul9GQUxTRTsKKyAgICAvLyBPciBmb3Igbm9uLXByaXZpbGVnZWQgY2FsbGVycyB3aGVuIHRoZSBj
YWxsZXIgaXMgbm9uLXByaXZpbGVnZWQ/CisgICAgaWYgKG1TY3JpcHRhYmxlSW5mby0+R2V0Rmxh
Z3MoKS5DbGFzc0luZm9JbnRlcmZhY2VzT25seU5vUHJpdnMoKSAmJgorICAgICAgICAvLyBOQjog
SWYgdGhlIGludGVyZmFjZSBpcyBVbnNhZmUgdGhlbiB3ZSBjYW4ndCByZWx5IG9uIGl0IGJlaW5n
IGluCisgICAgICAgIC8vIHRoZSBzZXQgYXMgYSB0ZXN0IG9mIHdoZXRoZXIgdGhpcyBpcyBzYWZl
IG9yIG5vdC4KKyAgICAgICAgKGFJbnRlcmZhY2UtPklzVW5zYWZlKCkgfHwKKyAgICAgICAgICgh
bVNldC0+SGFzSW50ZXJmYWNlKGFJbnRlcmZhY2UpICYmCisgICAgICAgICAgIW1TZXQtPkhhc0lu
dGVyZmFjZVdpdGhBbmNlc3RvcihhSW50ZXJmYWNlKSkpICYmCisgICAgICAgICFtU2NyaXB0YWJs
ZUluZm8tPlNob3VsZFJlZmxlY3ROb25DbGFzc0luZm9JZmFjZShhSWRlbnRpdHksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYUludGVy
ZmFjZS0+R2V0SUlEKCkpICYmCisgICAgICAgICghTlNfU1VDQ0VFREVEKFhQQ1dyYXBwZXI6Okdl
dFNlY3VyaXR5TWFuYWdlcigpLT4KKyAgICAgICAgICAgICAgICAgICAgICAgSXNDYXBhYmlsaXR5
RW5hYmxlZCgiVW5pdmVyc2FsWFBDb25uZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmc2hvdWxkUmVzdHJpY3RUZWFyb2ZmKSkgfHwKKyAgICAgICAgICFz
aG91bGRSZXN0cmljdFRlYXJvZmYpKQorICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgZXZlbiB0cnkg
dGhlIFFJCisgICAgICAgIHJldHVybiBOU19FUlJPUl9OT19JTlRFUkZBQ0U7CisgICAgfQorCisg
ICAgLy8gT3RoZXJ3aXNlLCB0cnkgdGhlIFFJLCBidXQgYmUgY2FyZWZ1bCB3aXRoIHRoZSByZXN1
bHQgdGVhcm9mZiBpZiBuZWNlc3NhcnkKKyAgICByZXR1cm4gc2hvdWxkUmVzdHJpY3RUZWFyb2Zm
ID8gTlNfU1VDQ0VTU19YUENfRE9OVF9DQUNIRV9URUFST0ZGIDogTlNfT0s7Cit9CisKK25zcmVz
dWx0CiBYUENXcmFwcGVkTmF0aXZlOjpJbml0VGVhck9mZihYUENDYWxsQ29udGV4dCYgY2N4LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBDV3JhcHBlZE5hdGl2ZVRlYXJPZmYqIGFU
ZWFyT2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBDTmF0aXZlSW50ZXJmYWNl
KiBhSW50ZXJmYWNlLApAQCAtMTg4OCwyMCArMTk0MywxNCBAQAogICAgIC8vIFRoaXMgaXMgb25s
eSBjYWxsZWQgd2hpbGUgbG9ja2VkIChkdXJpbmcgWFBDV3JhcHBlZE5hdGl2ZTo6RmluZFRlYXJP
ZmYpLgogCiAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBvYmplY3QgcmVhbGx5IGRvZXMgdGhpcyBp
bnRlcmZhY2UuLi4KLQorICAgIG5zcmVzdWx0IHJ2OwogICAgIGNvbnN0IG5zSUlEKiBpaWQgPSBh
SW50ZXJmYWNlLT5HZXRJSUQoKTsKICAgICBuc0lTdXBwb3J0cyogaWRlbnRpdHkgPSBHZXRJZGVu
dGl0eU9iamVjdCgpOwogICAgIG5zSVN1cHBvcnRzKiBvYmo7CiAKLSAgICAvLyBJZiB0aGUgc2Ny
aXB0YWJsZSBoZWxwZXIgZm9yYmlkcyB1cyBmcm9tIHJlZmxlY3RpbmcgYWRkaXRpb25hbAotICAg
IC8vIGludGVyZmFjZXMsIHRoZW4gZG9uJ3QgZXZlbiB0cnkgdGhlIFFJLCBqdXN0IGZhaWwuCi0g
ICAgaWYobVNjcmlwdGFibGVJbmZvICYmCi0gICAgICAgbVNjcmlwdGFibGVJbmZvLT5HZXRGbGFn
cygpLkNsYXNzSW5mb0ludGVyZmFjZXNPbmx5KCkgJiYKLSAgICAgICAhbVNldC0+SGFzSW50ZXJm
YWNlKGFJbnRlcmZhY2UpICYmCi0gICAgICAgIW1TZXQtPkhhc0ludGVyZmFjZVdpdGhBbmNlc3Rv
cihhSW50ZXJmYWNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOU19FUlJPUl9OT19JTlRFUkZB
Q0U7Ci0gICAgfQorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWxsb3cgdGhpcyBR
SQorICAgIHJ2ID0gU2hvdWxkQWxsb3dRSShpZGVudGl0eSwgYUludGVyZmFjZSk7CisgICAgaWYg
KE5TX0ZBSUxFRChydikpIHsgcmV0dXJuIHJ2OyB9OwogCiAgICAgLy8gV2UgYXJlIGFib3V0IHRv
IGNhbGwgb3V0IHRvIHVubG9jayBhbmQgb3RoZXIgY29kZS4KICAgICAvLyBTbyBwcm90ZWN0IG91
ciBpbnRlbmRlZCB0ZWFyb2ZmLgpAQCAtMjA1MSw4ICsyMTAwLDggQEAKICAgICAvLyBOb3RlOiB3
ZSBkbyBub3QgY2FjaGUgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgY2FsbCB0byBIYXNJbnRl
cmZhY2UoKQogICAgIC8vIGJlY2F1c2Ugd2UgdW5sb2NrZWQgYW5kIGNhbGxlZCBvdXQgaW4gdGhl
IGludGVyaW0gYW5kIHRoZSByZXN1bHQgb2YgdGhlCiAgICAgLy8gcHJldmlvdXMgY2FsbCBtaWdo
dCBub3QgYmUgY29ycmVjdCBhbnltb3JlLgotCi0gICAgaWYoIW1TZXQtPkhhc0ludGVyZmFjZShh
SW50ZXJmYWNlKSAmJiAhRXh0ZW5kU2V0KGNjeCwgYUludGVyZmFjZSkpCisgICAgaWYoIW1TZXQt
Pkhhc0ludGVyZmFjZShhSW50ZXJmYWNlKSAmJgorICAgICAgICFFeHRlbmRTZXQoY2N4LCBhSW50
ZXJmYWNlKSkKICAgICB7CiAgICAgICAgIE5TX1JFTEVBU0Uob2JqKTsKICAgICAgICAgYVRlYXJP
ZmYtPlNldEludGVyZmFjZShuc251bGwpOwpAQCAtMjA2MSw2ICsyMTEwLDkgQEAKIAogICAgIGFU
ZWFyT2ZmLT5TZXRJbnRlcmZhY2UoYUludGVyZmFjZSk7CiAgICAgYVRlYXJPZmYtPlNldE5hdGl2
ZShvYmopOworICAgIGlmIChydiA9PSBOU19TVUNDRVNTX1hQQ19ET05UX0NBQ0hFX1RFQVJPRkYp
CisgICAgICAgIGFJbnRlcmZhY2UtPk1hcmtVbnNhZmUoKTsKKwogI2lmZGVmIFhQQ19JRElTUEFU
Q0hfU1VQUE9SVAogICAgIC8vIEFyZSB3ZSBidWlsZGluZyBhIHRlYXJvZmYgZm9yIElEaXNwYXRj
aD8KICAgICBpZihpaWQtPkVxdWFscyhOU0lEX0lESVNQQVRDSCkpCkBAIC0yMDcxLDcgKzIxMjMs
NyBAQAogICAgIGlmKG5lZWRKU09iamVjdCAmJiAhSW5pdFRlYXJPZmZKU09iamVjdChjY3gsIGFU
ZWFyT2ZmKSkKICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX09VVF9PRl9NRU1PUlk7CiAKLSAgICBy
ZXR1cm4gTlNfT0s7CisgICAgcmV0dXJuIHJ2OwogfQogCiBKU0Jvb2wKZGlmZiAtLWdpdCBhL2pz
L3NyYy94cGNvbm5lY3Qvc3JjL3hwY3dyYXBwZWRuYXRpdmVqc29wcy5jcHAgYi9qcy9zcmMveHBj
b25uZWN0L3NyYy94cGN3cmFwcGVkbmF0aXZlanNvcHMuY3BwCi0tLSBhL2pzL3NyYy94cGNvbm5l
Y3Qvc3JjL3hwY3dyYXBwZWRuYXRpdmVqc29wcy5jcHAKKysrIGIvanMvc3JjL3hwY29ubmVjdC9z
cmMveHBjd3JhcHBlZG5hdGl2ZWpzb3BzLmNwcApAQCAtMTE3Myw5ICsxMTczLDE1IEBACiAgICAg
ICAgIFhQQ05hdGl2ZU1lbWJlciogbWVtYmVyOwogICAgICAgICBYUENOYXRpdmVJbnRlcmZhY2Uq
IGlmYWNlOwogICAgICAgICBKU0Jvb2wgSXNMb2NhbDsKKyAgICAgICAgUFJCb29sIGlzUHJpdmls
ZWdlZDsKIAogICAgICAgICBpZihzZXQtPkZpbmRNZW1iZXIoaWQsICZtZW1iZXIsICZpZmFjZSwg
cHJvdG9TZXQsICZJc0xvY2FsKSAmJgotICAgICAgICAgICBJc0xvY2FsKQorICAgICAgICAgICBJ
c0xvY2FsICYmIAorICAgICAgICAgICAhKGlmYWNlLT5Jc1Vuc2FmZSgpICYmCisgICAgICAgICAg
ICAgKCFOU19TVUNDRUVERUQoWFBDV3JhcHBlcjo6R2V0U2VjdXJpdHlNYW5hZ2VyKCktPgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElzQ2FwYWJpbGl0eUVuYWJsZWQoIlVuaXZlcnNhbFhQ
Q29ubmVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmaXNQcml2aWxlZ2VkKSkgfHwKKyAgICAgICAgICAgICAgIWlzUHJpdmlsZWdlZCkpKQogICAg
ICAgICB7CiAgICAgICAgICAgICBYUENXcmFwcGVkTmF0aXZlKiBvbGRSZXNvbHZpbmdXcmFwcGVy
OwogCg==
</data>

          </attachment>


    </bug>

</bugzilla>