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

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

    <bug>
          <bug_id>635373</bug_id>
          
          <filed_via>unknown</filed_via>
          <creation_ts>2011-02-18 13:48:29 -0800</creation_ts>
          <short_desc>Small artifacts appear then disappear with hardware acceleration</short_desc>
          <delta_ts>2015-10-16 11:39:01 -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>Graphics</component>
          <version>unspecified</version>
          <rep_platform>x86</rep_platform>
          <op_sys>All</op_sys>
          <bug_type>defect</bug_type>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://shakenandstirredweb.com/playground/blur/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>--</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>mozilla2.0</target_milestone>
          <dependson>610267</dependson>
    
    <dependson>634784</dependson>
    
    <dependson>647315</dependson>
    
    <dependson>647642</dependson>
    
    <dependson>662154</dependson>
    
    <dependson>662258</dependson>
          <blocked>633361</blocked>
    
    <blocked>634759</blocked>
    
    <blocked>635035</blocked>
    
    <blocked>637597</blocked>
    
    <blocked>639978</blocked>
    
    <blocked>641661</blocked>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Paul O&apos;Shannessy [:zpao] (not bugmail, email directly)">paul</reporter>
          <assigned_to name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</assigned_to>
          <cc>..id.r.ugoy</cc>
    
    <cc>antoine.mozilla</cc>
    
    <cc>bas</cc>
    
    <cc>ben</cc>
    
    <cc>bzbarsky</cc>
    
    <cc>christian</cc>
    
    <cc>cjones.bugs</cc>
    
    <cc>dbaron</cc>
    
    <cc>Eddwardiq</cc>
    
    <cc>ehsan.akhgari</cc>
    
    <cc>emanuel.hoogeveen</cc>
    
    <cc>highmind63</cc>
    
    <cc>id.r.ugoy</cc>
    
    <cc>jmuizelaar</cc>
    
    <cc>joe</cc>
    
    <cc>mark.finkle</cc>
    
    <cc>matt.woodrow</cc>
    
    <cc>mbeltzner</cc>
    
    <cc>mbrubeck</cc>
    
    <cc>mh+mozilla</cc>
    
    <cc>roc</cc>
    
    <cc>tnikkel</cc>
    
    <cc>xtc4uall</cc>
          
          <cf_data_science_product_support_area>---</cf_data_science_product_support_area>
          <cf_geckoview>---</cf_geckoview>
          <cf_bmo_component_move>---</cf_bmo_component_move>
          <cf_backlog>---</cf_backlog>
          <cf_firefox_messaging_system>---</cf_firefox_messaging_system>
          <cf_blocking_webextensions>---</cf_blocking_webextensions>
          <cf_tracking_win>---</cf_tracking_win>
          <cf_platform_rel>---</cf_platform_rel>
          <cf_root_cause>---</cf_root_cause>
          <cf_tracking_e10s>---</cf_tracking_e10s>
          <cf_tracking_p11>---</cf_tracking_p11>
          <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_accessibility_severity>---</cf_accessibility_severity>
          <cf_status_firefox14>---</cf_status_firefox14>
          <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_performance_impact>---</cf_performance_impact>
          <cf_status_firefox24>---</cf_status_firefox24>
          <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_status_firefox34>---</cf_status_firefox34>
          <cf_webcompat_priority>---</cf_webcompat_priority>
          <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_tracking_thunderbird_relnote>---</cf_tracking_thunderbird_relnote>
          <cf_status_conduit_push>---</cf_status_conduit_push>
          <cf_status_191>---</cf_status_191>
          <cf_tracking_relnote_b2g>---</cf_tracking_relnote_b2g>
          <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_blocking_seamonkey21>---</cf_blocking_seamonkey21>
          <cf_tracking_thunderbird_41>---</cf_tracking_thunderbird_41>
          <cf_status_thunderbird_41>---</cf_status_thunderbird_41>
          <cf_status_seamonkey21>---</cf_status_seamonkey21>
          <cf_tracking_thunderbird_42>---</cf_tracking_thunderbird_42>
          <cf_tracking_seamonkey22>---</cf_tracking_seamonkey22>
          <cf_status_seamonkey22>---</cf_status_seamonkey22>
          <cf_status_thunderbird_42>---</cf_status_thunderbird_42>
          <cf_tracking_thunderbird_43>---</cf_tracking_thunderbird_43>
          <cf_tracking_seamonkey23>---</cf_tracking_seamonkey23>
          <cf_status_seamonkey23>---</cf_status_seamonkey23>
          <cf_status_thunderbird_43>---</cf_status_thunderbird_43>
          <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_status_thunderbird_48>---</cf_status_thunderbird_48>
          <cf_tracking_seamonkey225>---</cf_tracking_seamonkey225>
          <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_colo_site>---</cf_colo_site>
          <cf_tracking_seamonkey229>---</cf_tracking_seamonkey229>
          <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_office>---</cf_office>
          <cf_tracking_seamonkey230>---</cf_tracking_seamonkey230>
          <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_seamonkey232>---</cf_tracking_seamonkey232>
          <cf_tracking_thunderbird_51>---</cf_tracking_thunderbird_51>
          <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_status_thunderbird_esr91>---</cf_status_thunderbird_esr91>
          <cf_tracking_thunderbird_53>---</cf_tracking_thunderbird_53>
          <cf_status_thunderbird_53>---</cf_status_thunderbird_53>
          <cf_tracking_seamonkey233>---</cf_tracking_seamonkey233>
          <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_esr102>---</cf_status_thunderbird_esr102>
          <cf_status_thunderbird_55>---</cf_status_thunderbird_55>
          <cf_tracking_thunderbird_56>---</cf_tracking_thunderbird_56>
          <cf_status_seamonkey233>---</cf_status_seamonkey233>
          <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_tracking_seamonkey237>---</cf_tracking_seamonkey237>
          <cf_status_thunderbird_64>---</cf_status_thunderbird_64>
          <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_seamonkey238>---</cf_tracking_seamonkey238>
          <cf_tracking_thunderbird_68>---</cf_tracking_thunderbird_68>
          <cf_status_thunderbird_68>---</cf_status_thunderbird_68>
          <cf_status_thunderbird_69>---</cf_status_thunderbird_69>
          <cf_status_seamonkey238>---</cf_status_seamonkey238>
          <cf_tracking_seamonkey239>---</cf_tracking_seamonkey239>
          <cf_tracking_thunderbird_69>---</cf_tracking_thunderbird_69>
          <cf_status_thunderbird_70>---</cf_status_thunderbird_70>
          <cf_status_seamonkey239>---</cf_status_seamonkey239>
          <cf_crash_signature></cf_crash_signature>
          <cf_tracking_seamonkey240>---</cf_tracking_seamonkey240>
          <cf_tracking_thunderbird_70>---</cf_tracking_thunderbird_70>
          <cf_status_thunderbird_71>---</cf_status_thunderbird_71>
          
          <cf_status_seamonkey240>---</cf_status_seamonkey240>
          <cf_tracking_seamonkey241>---</cf_tracking_seamonkey241>
          <cf_tracking_thunderbird_71>---</cf_tracking_thunderbird_71>
          <cf_status_thunderbird_72>---</cf_status_thunderbird_72>
          <cf_status_seamonkey241>---</cf_status_seamonkey241>
          <cf_tracking_seamonkey242>---</cf_tracking_seamonkey242>
          <cf_tracking_thunderbird_72>---</cf_tracking_thunderbird_72>
          <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_thunderbird_74>---</cf_status_thunderbird_74>
          <cf_status_seamonkey243>---</cf_status_seamonkey243>
          <cf_tracking_thunderbird_74>---</cf_tracking_thunderbird_74>
          <cf_tracking_seamonkey244>---</cf_tracking_seamonkey244>
          <cf_status_thunderbird_75>---</cf_status_thunderbird_75>
          <cf_tracking_thunderbird_75>---</cf_tracking_thunderbird_75>
          <cf_status_seamonkey244>---</cf_status_seamonkey244>
          <cf_status_thunderbird_76>---</cf_status_thunderbird_76>
          <cf_tracking_seamonkey245>---</cf_tracking_seamonkey245>
          <cf_tracking_thunderbird_76>---</cf_tracking_thunderbird_76>
          <cf_status_thunderbird_77>---</cf_status_thunderbird_77>
          <cf_status_seamonkey245>---</cf_status_seamonkey245>
          <cf_tracking_thunderbird_77>---</cf_tracking_thunderbird_77>
          <cf_status_thunderbird_78>---</cf_status_thunderbird_78>
          <cf_tracking_seamonkey246>---</cf_tracking_seamonkey246>
          <cf_status_thunderbird_79>---</cf_status_thunderbird_79>
          <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_seamonkey247>---</cf_status_seamonkey247>
          <cf_status_thunderbird_82>---</cf_status_thunderbird_82>
          <cf_tracking_thunderbird_82>---</cf_tracking_thunderbird_82>
          <cf_tracking_seamonkey248>---</cf_tracking_seamonkey248>
          <cf_status_thunderbird_83>---</cf_status_thunderbird_83>
          <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_tracking_seamonkey249>---</cf_tracking_seamonkey249>
          <cf_blocking_b2g>---</cf_blocking_b2g>
          <cf_status_thunderbird_87>---</cf_status_thunderbird_87>
          <cf_tracking_thunderbird_87>---</cf_tracking_thunderbird_87>
          <cf_blocking_basecamp>---</cf_blocking_basecamp>
          <cf_status_thunderbird_88>---</cf_status_thunderbird_88>
          <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_thunderbird_90>---</cf_status_thunderbird_90>
          <cf_ux_b2g>---</cf_ux_b2g>
          <cf_status_seamonkey250>---</cf_status_seamonkey250>
          <cf_tracking_thunderbird_90>---</cf_tracking_thunderbird_90>
          <cf_b2g_ota_blocker>---</cf_b2g_ota_blocker>
          <cf_status_thunderbird_91>---</cf_status_thunderbird_91>
          <cf_tracking_seamonkey251>---</cf_tracking_seamonkey251>
          <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_tracking_seamonkey252>---</cf_tracking_seamonkey252>
          <cf_status_thunderbird_93>---</cf_status_thunderbird_93>
          <cf_tracking_thunderbird_93>---</cf_tracking_thunderbird_93>
          <cf_status_thunderbird_94>---</cf_status_thunderbird_94>
          <cf_status_seamonkey252>---</cf_status_seamonkey252>
          <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_status_thunderbird_96>---</cf_status_thunderbird_96>
          <cf_tracking_seamonkey254>---</cf_tracking_seamonkey254>
          <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_thunderbird_99>---</cf_status_thunderbird_99>
          <cf_status_seamonkey255>---</cf_status_seamonkey255>
          <cf_tracking_thunderbird_99>---</cf_tracking_thunderbird_99>
          <cf_status_seamonkey256>---</cf_status_seamonkey256>
          <cf_status_thunderbird_100>---</cf_status_thunderbird_100>
          <cf_tracking_thunderbird_100>---</cf_tracking_thunderbird_100>
          <cf_status_seamonkey257esr>---</cf_status_seamonkey257esr>
          <cf_tracking_seamonkey256>---</cf_tracking_seamonkey256>
          <cf_status_thunderbird_101>---</cf_status_thunderbird_101>
          <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_seamonkey259>---</cf_status_seamonkey259>
          <cf_status_thunderbird_105>---</cf_status_thunderbird_105>
          <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_status_thunderbird_esr115>---</cf_status_thunderbird_esr115>
          <cf_tracking_thunderbird_106>---</cf_tracking_thunderbird_106>
          <cf_status_fxios_v1_0_5>---</cf_status_fxios_v1_0_5>
          <cf_status_fxios_v1_1>---</cf_status_fxios_v1_1>
          <cf_status_fxios_v2_0>---</cf_status_fxios_v2_0>
          <cf_status_fxios_v3_0>---</cf_status_fxios_v3_0>
          <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_status_seamonkey260>---</cf_status_seamonkey260>
          <cf_status_thunderbird_esr128>---</cf_status_thunderbird_esr128>
          <cf_tracking_thunderbird_107>---</cf_tracking_thunderbird_107>
          <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_status_fxios_v5_1>---</cf_status_fxios_v5_1>
          <cf_status_thunderbird_esr140>---</cf_status_thunderbird_esr140>
          <cf_tracking_thunderbird_108>---</cf_tracking_thunderbird_108>
          <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_thunderbird_110>---</cf_status_thunderbird_110>
          <cf_status_fxios_v7_0>---</cf_status_fxios_v7_0>
          <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_tracking_seamonkey263>---</cf_tracking_seamonkey263>
          <cf_status_thunderbird_114>---</cf_status_thunderbird_114>
          <cf_tracking_thunderbird_114>---</cf_tracking_thunderbird_114>
          <cf_status_seamonkey263>---</cf_status_seamonkey263>
          <cf_status_thunderbird_115>---</cf_status_thunderbird_115>
          <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>2011-04-01 02:01:10</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_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_status_firefox72>---</cf_status_firefox72>
          <cf_tracking_firefox72>---</cf_tracking_firefox72>
          <cf_tracking_firefox73>---</cf_tracking_firefox73>
          <cf_status_firefox73>---</cf_status_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_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_data_science_status>---</cf_data_science_status>
          <cf_fission_milestone>---</cf_fission_milestone>
          <cf_last_resolved>2011-04-01 02:01:10</cf_last_resolved>
          
          <votes>0</votes>

      

      

      <flag name="in-testsuite"
          id="437407"
          type_id="37"
          status="+"
          setter="roc"
    />

          <long_desc isprivate="0">
            <commentid>5290683</commentid>
            <who name="Paul O&apos;Shannessy [:zpao] (not bugmail, email directly)">paul</who>
            <bug_when>2011-02-18 13:48:29 -0800</bug_when>
            <thetext>+++ This bug was initially created as a clone of Bug #634784 +++

Just like bug 634784, I was using the demo at http://shakenandstirredweb.com/playground/blur/. This time just small black artifacts, not the big black areas from before.

You can see them in action in the video I attached previously: attachment #512978.

Demoting to blocking? since I&apos;m not sure how bad this really is.

Still OS X, still same graphics card situation as before.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5291070</commentid>
            <who name="Please Ignore This Troll (Account Disabled)">id.r.ugoy</who>
            <bug_when>2011-02-18 15:33:47 -0800</bug_when>
            <thetext>Same for me (but I&apos;m on Win 7 x32).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5291537</commentid>
            <who name="Jeff Muizelaar [:jrmuizel]">jmuizelaar</who>
            <bug_when>2011-02-18 20:44:09 -0800</bug_when>
            <thetext>Matt Woodrow wrote:
&gt; I think these are due to scaling the texture and rounding causing sampling to
&gt; read from the opposite side of the texture. We fixed this on container layers
&gt; by disabling wrapping, but on thebes layers the texture boundary can be in the
&gt; middle of a physical texture. I&apos;m not sure how we can fix this other than
&gt; disabling the texture rotation code, which probably shouldn&apos;t be done for this
&gt; release.

I&apos;m not sure why wrapping would cause black pixels though. Also this happens on Windows which isn&apos;t using the texture rotation.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5292633</commentid>
            <who name="Joe Drew (not getting mail)">joe</who>
            <bug_when>2011-02-19 19:17:40 -0800</bug_when>
            <thetext>This is cross-platform. For now, I&apos;m going to give this to Rob; me or Matt or Jeff or Bas could easily take it on, though.

This is ugly, but I wouldn&apos;t pull an RC off the wire for it, so it softblocks. This probably doesn&apos;t require beta coverage either.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5292659</commentid>
            <who name="Matt Woodrow (:mattwoodrow)">matt.woodrow</who>
            <bug_when>2011-02-19 20:11:52 -0800</bug_when>
            <thetext>
&gt; I&apos;m not sure why wrapping would cause black pixels though. Also this happens on
&gt; Windows which isn&apos;t using the texture rotation.

Bug 622585 included a fix for a similar looking problem by disabling texture wrapping. We were occasionally sampling from outside the texture bounds when scaled and getting pixel data from the opposite side of the texture.

Since this happens on platforms without texture rotation, I take my conclusion back</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5293588</commentid>
              <attachid>513923</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-20 21:00:52 -0800</bug_when>
            <thetext>Created attachment 513923
Simple testcase

Hover over the browser window to trigger rotation.

The testcase passes with BasicLayers and fails with D3D9 and D3D10, but only when the &lt;article&gt; layer is using component alpha. Interestingly it passes with OpenGL and component alpha!

The testcase seems to show that the artifacts appear at the boundaries of our text drawing that are inside the rectangular bounds of the layer, which is weird since the layer system doesn&apos;t really know about that. The only thing I can think of is that the visible region contains two rectangles, which don&apos;t fill the whole bounding rectangle of the ThebesLayer, and that&apos;s triggering it somehow.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5293589</commentid>
              <attachid>513924</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-20 21:03:11 -0800</bug_when>
            <thetext>Created attachment 513924
non-component-alpha testcase

This testcase shows that if we don&apos;t use a component alpha layer, the bug does not occur, even if the visible region isn&apos;t filling its bounding rectangle.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5293596</commentid>
              <attachid>513926</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-20 21:15:15 -0800</bug_when>
            <thetext>Created attachment 513926
D3D9 fix?

This seems to fix it for D3D9. I have to confess I don&apos;t fully understand what the problem it fixes is.

We&apos;re not doing any GPU-based antialiasing, right? So the same set of pixels should be updated on each pass of the component alpha rendering, and we shouldn&apos;t be getting burned by partial coverage. So I still don&apos;t know what&apos;s actually causing those artifacts, or in particular why they only appear in the interior of the texture rect. There&apos;s clearly nothing wrong with the texture data itself, since the artifacts are completely dependent on the current transform.

Is it possible that the blend modes we&apos;re setting are actually affecting which pixels are being updated by the primitive? Or some other hidden state is affecting that? Help me, Obi-Bas!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5293815</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-21 02:24:10 -0800</bug_when>
            <thetext>Hmm. I suppose that when we resample due to a transform we could be sampling pixels outside the visible region but inside the texture bounds, so clamping to texture bounds doesn&apos;t help. For RGBA textures those pixels would normally be transparent so they won&apos;t hurt (much), but we probably still shouldn&apos;t do that. For component-alpha textures, we only fill the buffers with white and black in the visible region, so when we sample outside that region we mix some transparent black with both the on-white and on-black values, which will definitely cause problems.

I don&apos;t know why this isn&apos;t affecting GL.

If this analysis is correct, then I think the correct solution is to apply the patch in comment #7 but for all layer modes (opaque, RGBA, component-alpha), so that whenever the effective transform is going to cause resampling, the entire mTextureRect is valid and we don&apos;t risk sampling pixels in a dubious state.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5293825</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-21 02:30:33 -0800</bug_when>
            <thetext>Note that the simplified testcase exposes some other issues that we should fix ASAP, possibly even for Firefox 4 since they&apos;re technically regressions. Namely, we render subpixel-AA text to a buffer and then transform the buffer. That is bogus! If we know a layer buffer is going to be transformed (by something other than an integer translation) we need to disable subpixel AA for everything that renders into that buffer. And conveniently, that means the buffer will not need component alpha! I need to file a new bug on this.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5293988</commentid>
            <who name="Please Ignore This Troll (Account Disabled)">..id.r.ugoy</who>
            <bug_when>2011-02-21 05:23:08 -0800</bug_when>
            <thetext>(In reply to comment #5)
&gt; Created attachment 513923 [details]
&gt; Simple testcase
&gt; 
&gt; Hover over the browser window to trigger rotation.
&gt; 
&gt; The testcase passes with BasicLayers and fails with D3D9 and D3D10, but only
&gt; when the &lt;article&gt; layer is using component alpha. Interestingly it passes with
&gt; OpenGL and component alpha!
&gt; 
&gt; The testcase seems to show that the artifacts appear at the boundaries of our
&gt; text drawing that are inside the rectangular bounds of the layer, which is
&gt; weird since the layer system doesn&apos;t really know about that. The only thing I
&gt; can think of is that the visible region contains two rectangles, which don&apos;t
&gt; fill the whole bounding rectangle of the ThebesLayer, and that&apos;s triggering it
&gt; somehow.

WFM. Latest nightly; Win7 x32; graph. card is hd3850; d2d, dw are on.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5294186</commentid>
            <who name="Bas Schouten (:bas.schouten)">bas</who>
            <bug_when>2011-02-21 08:05:46 -0800</bug_when>
            <thetext>(In reply to comment #8)
&gt; Hmm. I suppose that when we resample due to a transform we could be sampling
&gt; pixels outside the visible region but inside the texture bounds, so clamping to
&gt; texture bounds doesn&apos;t help. For RGBA textures those pixels would normally be
&gt; transparent so they won&apos;t hurt (much), but we probably still shouldn&apos;t do that.
&gt; For component-alpha textures, we only fill the buffers with white and black in
&gt; the visible region, so when we sample outside that region we mix some
&gt; transparent black with both the on-white and on-black values, which will
&gt; definitely cause problems.

This was going to be my theory, the fix I&apos;m suggesting is slightly different, we should take the visible region, but extend each rect in the region by a certain amount of pixels (bounded by the texture rect of course). The amount of pixels depends on the level of scaling in the transforms (i.e. how far away pixels can be sampled).

I should note there is some cases where if we simply take the bounds of the visible region as visible region as the visible region layout will not draw the correct content there. See bug 593860.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5294188</commentid>
              <attachid>513926</attachid>
            <who name="Bas Schouten (:bas.schouten)">bas</who>
            <bug_when>2011-02-21 08:06:38 -0800</bug_when>
            <thetext>Comment on attachment 513926
D3D9 fix?

This should be okay if we only do it for component alpha surfaces.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5294735</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-21 12:52:52 -0800</bug_when>
            <thetext>(In reply to comment #11)
&gt; This was going to be my theory, the fix I&apos;m suggesting is slightly different,
&gt; we should take the visible region, but extend each rect in the region by a
&gt; certain amount of pixels (bounded by the texture rect of course). The amount of
&gt; pixels depends on the level of scaling in the transforms (i.e. how far away
&gt; pixels can be sampled).

We could do that, but it adds complexity, and maybe that complexity is not needed in practice. I suspect it would only matter if we have a transformed object where the visible region is much smaller than its bounds (e.g. two very disconnected pieces).

&gt; I should note there is some cases where if we simply take the bounds of the
&gt; visible region as visible region as the visible region layout will not draw the
&gt; correct content there. See bug 593860.

My patch won&apos;t cause problems like that because I extend the visible region before we compute the drawRegion, so we&apos;ll actually fill and draw the full bounds.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5294834</commentid>
              <attachid>514069</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-21 13:17:50 -0800</bug_when>
            <thetext>Created attachment 514069
better fix for D3D9 and D3D10

I think we need to do this for all texture types. Also, this version of the patch avoids modifying mVisibleRegion, which is a good thing since the visible region should be entirely under layout&apos;s control.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5294929</commentid>
              <attachid>514078</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-21 14:24:27 -0800</bug_when>
            <thetext>Created attachment 514078
testcase with opaque ThebesLayer

This static testcase shows the bug occurring in a ThebesLayer that is marked opaqueContent.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5294940</commentid>
              <attachid>514069</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-21 14:39:42 -0800</bug_when>
            <thetext>Comment on attachment 514069
better fix for D3D9 and D3D10

This patch isn&apos;t correct because for opaque ThebesLayers, we can&apos;t rely on layout drawing opaque stuff outside the visible region (the opaque flag only guarantees opaque drawing in the visible region), so we&apos;ll draw bad stuff or nothing at all there (perhaps leaving it black or garbage).

When we need to draw in the bounds of the visible region, we should also convert opaque ThebesLayers to RGBA format to avoid this problem.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5295228</commentid>
              <attachid>514128</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-21 20:31:36 -0800</bug_when>
            <thetext>Created attachment 514128
tests

These tests test compositing of a transformed, resampled ThebesLayer with complex visible region. There is one test for each of opaque, RGBA and component alpha ThebesLayers.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5295229</commentid>
              <attachid>514129</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-21 20:32:32 -0800</bug_when>
            <thetext>Created attachment 514129
D3D9 and D3D10 fix

These patches pass those tests. BasicLayers also passes. OpenGL does not, there are some visual artifacts if you zoom in.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5295302</commentid>
              <attachid>514129</attachid>
            <who name="Bas Schouten (:bas.schouten)">bas</who>
            <bug_when>2011-02-21 22:27:59 -0800</bug_when>
            <thetext>Comment on attachment 514129
D3D9 and D3D10 fix

&gt;diff --git a/gfx/layers/d3d10/ThebesLayerD3D10.cpp b/gfx/layers/d3d10/ThebesLayerD3D10.cpp
&gt;--- a/gfx/layers/d3d10/ThebesLayerD3D10.cpp
&gt;+++ b/gfx/layers/d3d10/ThebesLayerD3D10.cpp
&gt; ThebesLayerD3D10::Validate(ReadbackProcessor *aReadback)
&gt; {
&gt;   if (mVisibleRegion.IsEmpty()) {
&gt;     return;
&gt;   }
&gt; 
&gt;+  nsIntRect newTextureRect = mVisibleRegion.GetBounds();
&gt;+
&gt;   SurfaceMode mode = GetSurfaceMode();
&gt;   if (mode == SURFACE_COMPONENT_ALPHA &amp;&amp;
&gt;       (!mParent || !mParent-&gt;SupportsComponentAlphaChildren())) {
&gt;     mode = SURFACE_SINGLE_CHANNEL_ALPHA;
&gt;   }

Nit: I&apos;d like some whitespace here.

&gt;+  // If we have a transform that requires resampling of our texture, then
&gt;+  // we need to make sure we don&apos;t sample pixels that haven&apos;t been drawn.
&gt;+  // We clamp sample coordinates to the texture rect, but when the visible region
&gt;+  // doesn&apos;t fill the entire texture rect we need to make sure we draw all the
&gt;+  // pixels in the texture rect anyway in case they get sampled.
&gt;+  nsIntRegion neededRegion = mVisibleRegion;
&gt;+  if (neededRegion.GetBounds() != newTextureRect ||
&gt;+      neededRegion.GetNumRects() &gt; 1) {
&gt;+    gfxMatrix transform2d;
&gt;+    if (!GetEffectiveTransform().Is2D(&amp;transform2d) ||

&gt;diff --git a/gfx/layers/d3d9/ThebesLayerD3D9.cpp b/gfx/layers/d3d9/ThebesLayerD3D9.cpp
&gt;--- a/gfx/layers/d3d9/ThebesLayerD3D9.cpp
&gt;+++ b/gfx/layers/d3d9/ThebesLayerD3D9.cpp
&gt;@@ -203,21 +203,44 @@ ThebesLayerD3D9::RenderVisibleRegion()
&gt; 
&gt; void
&gt; ThebesLayerD3D9::RenderThebesLayer(ReadbackProcessor* aReadback)
&gt; {
&gt;   if (mVisibleRegion.IsEmpty()) {
&gt;     return;
&gt;   }
&gt; 
&gt;+  nsIntRect newTextureRect = mVisibleRegion.GetBounds();
&gt;+
&gt;   SurfaceMode mode = GetSurfaceMode();
&gt;   if (mode == SURFACE_COMPONENT_ALPHA &amp;&amp;
&gt;       (!mParent || !mParent-&gt;SupportsComponentAlphaChildren())) {
&gt;     mode = SURFACE_SINGLE_CHANNEL_ALPHA;
&gt;   }

Nit: And here.
&gt;+  // If we have a transform that requires resampling of our texture, then
&gt;+  // we need to make sure we don&apos;t sample pixels that haven&apos;t been drawn.
&gt;+  // We clamp sample coordinates to the texture rect, but when the visible region
&gt;+  // doesn&apos;t fill the entire texture rect we need to make sure we draw all the
&gt;+  // pixels in the texture rect anyway in case they get sampled.
&gt;+  nsIntRegion neededRegion = mVisibleRegion;
&gt;+  if (neededRegion.GetBounds() != newTextureRect ||
&gt;+      neededRegion.GetNumRects() &gt; 1) {
&gt;+    gfxMatrix transform2d;
&gt;+    if (!GetEffectiveTransform().Is2D(&amp;transform2d) ||
&gt;+        transform2d.HasNonIntegerTranslation()) {
&gt;+      neededRegion = newTextureRect;
&gt;+      if (mode == SURFACE_OPAQUE) {
&gt;+        // We&apos;re going to paint outside the visible region, but layout hasn&apos;t
&gt;+        // promised that it will paint opaquely there, so we&apos;ll have to
&gt;+        // treat this layer as transparent.
&gt;+        mode = SURFACE_SINGLE_CHANNEL_ALPHA;
&gt;+      }
&gt;+    }
&gt;+  }
&gt;+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5295472</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-22 03:00:10 -0800</bug_when>
            <thetext>(In reply to comment #19)
&gt; Nit: I&apos;d like some whitespace here.

Hmm, where exactly? There is whitespace there :-)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5295475</commentid>
              <attachid>514156</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-22 03:01:41 -0800</bug_when>
            <thetext>Created attachment 514156
GL fix

This doesn&apos;t completely fix GL. With these patches, the first test fails because the antialiasing along the edges of the visible region that are inside its bounding rect is slightly different in the test and reference. It&apos;s possible there&apos;s nothing we can do about that. Visually it looks fine.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5297023</commentid>
              <attachid>514156</attachid>
            <who name="Matt Woodrow (:mattwoodrow)">matt.woodrow</who>
            <bug_when>2011-02-22 14:02:27 -0800</bug_when>
            <thetext>Comment on attachment 514156
GL fix


&gt; 
&gt;+static const int ALLOW_REPEAT = 0x01;
&gt;+
&gt; // BindAndDrawQuadWithTextureRect can work with either GL_REPEAT (preferred)
&gt; // or GL_CLAMP_TO_EDGE textures.  We select based on whether REPEAT is
&gt; // valid for non-power-of-two textures -- if we have NPOT support we use it,
&gt; // otherwise we stick with CLAMP_TO_EDGE and decompose.
&gt; static already_AddRefed&lt;TextureImage&gt;
&gt; CreateClampOrRepeatTextureImage(GLContext *aGl,
&gt;                                 const nsIntSize&amp; aSize,
&gt;-                                TextureImage::ContentType aContentType)
&gt;+                                TextureImage::ContentType aContentType,
&gt;+                                PRUint32 aFlags)

Probably should update the comment here.

&gt; 
&gt;-  if (visibleBounds.Size() &lt;= mBufferRect.Size()) {
&gt;+  if (neededBounds.Size() &lt;= mBufferRect.Size() &amp;&amp;
&gt;+      mTexImage &amp;&amp;
&gt;+      (mTexImage-&gt;GetWrapMode() == LOCAL_GL_CLAMP_TO_EDGE || mEnableRotationOptimization)) {
&gt;     NS_ASSERTION(curXRes == aXResolution &amp;&amp; curYRes == aYResolution,
&gt;                  &quot;resolution changes must clear the buffer!&quot;);
&gt;     // The current buffer is big enough to hold the visible area.

This one too, this condition isn&apos;t overly clear what it&apos;s testing.


&gt;   gfxMatrix transform2d;
&gt;   gfxSize scale(1.0, 1.0);
&gt;+  float paintXRes = 1.0;
&gt;+  float paintYRes = 1.0;
&gt;+  bool willResample;
&gt;   if (transform.Is2D(&amp;transform2d)) {
&gt;     scale = transform2d.ScaleFactors(PR_TRUE);
&gt;+    paintXRes = gfxUtils::ClampToScaleFactor(scale.width);
&gt;+    paintYRes = gfxUtils::ClampToScaleFactor(scale.height);
&gt;+    transform2d.Scale(1.0/paintXRes, 1.0/paintYRes);
&gt;+    willResample = transform2d.HasNonIntegerTranslation();
&gt;+  } else {
&gt;+    willResample = true;
&gt;   }

In the case where the translation is only a scale and integer translation, and paint*Res matches scale willResample could probably be false too. I doubt this will ever matter in practice, simplicity is probably better.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5298093</commentid>
              <attachid>514449</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-23 02:05:34 -0800</bug_when>
            <thetext>Created attachment 514449
Add layersOpenGL to the reftest harness</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5298807</commentid>
              <attachid>514449</attachid>
            <who name="David Baron :dbaron: (⌚️UTC-5, no longer working on Mozilla)">dbaron</who>
            <bug_when>2011-02-23 08:42:50 -0800</bug_when>
            <thetext>Comment on attachment 514449
Add layersOpenGL to the reftest harness

r=dbaron

(though I think all of the null-checking of gWindowUtils can go...)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300032</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-23 14:38:03 -0800</bug_when>
            <thetext>A fix for BasicLayers is needed as well; the problems are less visible but show up with the reftests. Working on it.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5303311</commentid>
              <attachid>514973</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-24 18:43:19 -0800</bug_when>
            <thetext>Created attachment 514973
BasicLayers fix</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5303312</commentid>
              <attachid>514974</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-24 18:43:59 -0800</bug_when>
            <thetext>Created attachment 514974
Updated GL patch

I updated this quite a lot on top of the BasicLayers fix.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5303600</commentid>
              <attachid>514973</attachid>
            <who name="Chris Jones [:cjones] inactive; ni?/f?/r? if you need me">cjones.bugs</who>
            <bug_when>2011-02-24 23:11:21 -0800</bug_when>
            <thetext>Comment on attachment 514973
BasicLayers fix

I like this patch more than the previous one.

&gt;+  NS_ASSERTION(!(aFlags &amp; PAINT_WILL_RESAMPLE) || destBufferRect == neededRegion.GetBounds(),
&gt;+               &quot;If we&apos;re resampling, we need to validate the entire buffer&quot;);
&gt; 

I&apos;d appreciate an
|assert(BufferSizeOkFor(ScaledSize(destBufferRect.Size() ...))| here.

&gt;+  enum {
&gt;+    PAINT_WILL_RESAMPLE = 0x01
&gt;+  };

I&apos;d prefer a name more like PAINT_ALLOW_RESAMPLE or SUPPORT_RESAMPLE
or ASSUME_RESAMPLE, because in the shadow-layer case the buffer might
or might not be resampled.

&gt;   /**
&gt;    * Start a drawing operation. This returns a PaintState describing what
&gt;    * needs to be drawn to bring the buffer up to date in the visible region.
&gt;    * This queries aLayer to get the currently valid and visible regions.
&gt;    * The returned mContext may be null if mRegionToDraw is empty.
&gt;    * Otherwise it must not be null.
&gt;    * mRegionToInvalidate will contain mRegionToDraw.
&gt;+   * @param aFlags when PAINT_WILL_RESAMPLE is passed, this indicates that

&quot;passing PAINT_WILL_RESAMPLE indicates ..&quot;

&gt;   BasicThebesLayerBuffer(BasicThebesLayer* aLayer)
&gt;     : Base(ContainsVisibleBounds)
&gt;     , mLayer(aLayer)
&gt;-  {}
&gt;+  {
&gt;+  }

?

&gt;+    PRUint32 flags = 0;
&gt;+    gfxMatrix transform;
&gt;+    if (!GetEffectiveTransform().Is2D(&amp;transform) ||
&gt;+        transform.HasNonIntegerTranslation()) {
&gt;+      flags |= ThebesLayerBuffer::PAINT_WILL_RESAMPLE;
&gt;+    }

We also need this flag for shadowable layers with shadows.
MustRetainContent() already exists and makes enough sense here, so I&apos;d
be fine with reusing it.

r=me with the shadow-layer fix.  Yeah, it&apos;s broken already, but no need to
make it worse. ;)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5303680</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-25 00:58:10 -0800</bug_when>
            <thetext>(In reply to comment #28)
&gt; &gt;+  NS_ASSERTION(!(aFlags &amp; PAINT_WILL_RESAMPLE) || destBufferRect == neededRegion.GetBounds(),
&gt; &gt;+               &quot;If we&apos;re resampling, we need to validate the entire buffer&quot;);
&gt; &gt; 
&gt; 
&gt; I&apos;d appreciate an
&gt; |assert(BufferSizeOkFor(ScaledSize(destBufferRect.Size() ...))| here.

Will do.

&gt; &gt;+  enum {
&gt; &gt;+    PAINT_WILL_RESAMPLE = 0x01
&gt; &gt;+  };
&gt; 
&gt; I&apos;d prefer a name more like PAINT_ALLOW_RESAMPLE or SUPPORT_RESAMPLE
&gt; or ASSUME_RESAMPLE, because in the shadow-layer case the buffer might
&gt; or might not be resampled.

Sure.

&gt; &gt;   BasicThebesLayerBuffer(BasicThebesLayer* aLayer)
&gt; &gt;     : Base(ContainsVisibleBounds)
&gt; &gt;     , mLayer(aLayer)
&gt; &gt;-  {}
&gt; &gt;+  {
&gt; &gt;+  }
&gt; 
&gt; ?

Will remove.

&gt; &gt;+    PRUint32 flags = 0;
&gt; &gt;+    gfxMatrix transform;
&gt; &gt;+    if (!GetEffectiveTransform().Is2D(&amp;transform) ||
&gt; &gt;+        transform.HasNonIntegerTranslation()) {
&gt; &gt;+      flags |= ThebesLayerBuffer::PAINT_WILL_RESAMPLE;
&gt; &gt;+    }
&gt; 
&gt; We also need this flag for shadowable layers with shadows.
&gt; MustRetainContent() already exists and makes enough sense here, so I&apos;d
&gt; be fine with reusing it.

OK. This means we&apos;ll disable rotation for shadowlayers as soon as this lands. I hope that&apos;s OK!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5303710</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-25 01:35:12 -0800</bug_when>
            <thetext>Tragically, my new reftests fail on BasicLayers and GL layers because of small, not visually relevant differences. I&apos;ll probably just mark them as failing and go ahead.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5305386</commentid>
            <who name="Chris Jones [:cjones] inactive; ni?/f?/r? if you need me">cjones.bugs</who>
            <bug_when>2011-02-25 15:51:28 -0800</bug_when>
            <thetext>Oops, I wasn&apos;t CC&apos;d here :/.

(In reply to comment #29)
&gt; OK. This means we&apos;ll disable rotation for shadowlayers as soon as this lands. I
&gt; hope that&apos;s OK!

Yep.  For a variety of reasons, fennec basically never ends up using rotation.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5307589</commentid>
              <attachid>514129</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-27 14:03:50 -0800</bug_when>
            <thetext>Comment on attachment 514129
D3D9 and D3D10 fix

Fixes visible artifacts with CSS transforms</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5307592</commentid>
              <attachid>514973</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-27 14:05:36 -0800</bug_when>
            <thetext>Comment on attachment 514973
BasicLayers fix

Fixes visible artifacts with CSS transforms</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5307593</commentid>
              <attachid>514974</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-27 14:06:07 -0800</bug_when>
            <thetext>Comment on attachment 514974
Updated GL patch

Fixes visible artifacts with CSS transforms</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5307595</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-27 14:06:47 -0800</bug_when>
            <thetext>The BasicLayers fix may also be a hardblocker for Fennec.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5309464</commentid>
            <who name="Mike Beltzner [:beltzner, not reading bugmail]">mbeltzner</who>
            <bug_when>2011-02-28 12:13:08 -0800</bug_when>
            <thetext>I don&apos;t think we want to take this at this time; the current state is not great, but livable. We&apos;ll fix this in Firefox 5.

If the BasicLayers fix is a hard blocker for Fennec, they should mark as such.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5311985</commentid>
            <who name="Benjamin Stover (:stechz)">ben</who>
            <bug_when>2011-03-01 09:57:34 -0800</bug_when>
            <thetext>This should hard block Fennec because of bug 634397. We need the displayport to draw correctly so we can make invalidate only a portion of it and make it fast.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5312170</commentid>
            <who name="Mark Finkle (:mfinkle) (use needinfo?)">mark.finkle</who>
            <bug_when>2011-03-01 10:35:50 -0800</bug_when>
            <thetext>(In reply to comment #35)
&gt; The BasicLayers fix may also be a hardblocker for Fennec.

Fennec does want to block on this, but first, I&apos;d like to know if there are technical issues or risks with landing this for FF4?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5312309</commentid>
            <who name="Benjamin Stover (:stechz)">ben</who>
            <bug_when>2011-03-01 11:04:13 -0800</bug_when>
            <thetext>If I understand correctly, it should also block Fennec because we spend a lot of time rendering stuff at non-identity resolutions, unlike Firefox.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5312318</commentid>
            <who name="Mark Finkle (:mfinkle) (use needinfo?)">mark.finkle</who>
            <bug_when>2011-03-01 11:05:03 -0800</bug_when>
            <thetext>This fixes rendering issues in Fennec</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5312356</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-01 11:16:07 -0800</bug_when>
            <thetext>There is some risk because we&apos;re changing core ThebesLayer code. However, the code is tested by reftests and this is a bad bug, not just for Fennec but for any pages using CSS transforms on desktop Firefox.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5312364</commentid>
              <attachid>514973</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-01 11:17:22 -0800</bug_when>
            <thetext>Comment on attachment 514973
BasicLayers fix

Renominating based on Fennec needs.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5312559</commentid>
              <attachid>514973</attachid>
            <who name="Mike Beltzner [:beltzner, not reading bugmail]">mbeltzner</who>
            <bug_when>2011-03-01 11:56:16 -0800</bug_when>
            <thetext>Comment on attachment 514973
BasicLayers fix

a=beltzner</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5312814</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-01 13:20:11 -0800</bug_when>
            <thetext>http://hg.mozilla.org/mozilla-central/rev/502114bb31e8</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5313990</commentid>
            <who name="(no longer active)">ehsan.akhgari</who>
            <bug_when>2011-03-01 19:00:24 -0800</bug_when>
            <thetext>Landing of this bug and bug 632423 caused Windows reftest failures such as &lt;http://tinderbox.mozilla.org/showlog.cgi?log=Firefox/1299024306.1299027792.9789.gz&gt;.

I landed the following two changesets to deal with the failures:

http://hg.mozilla.org/mozilla-central/rev/f0a5657c643c
http://hg.mozilla.org/mozilla-central/rev/3436b367b4a4</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5314064</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-01 19:34:57 -0800</bug_when>
            <thetext>This is not fully fixed. There are D3D and GL patches to land (post-FF4).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5314093</commentid>
            <who name="Matt Brubeck (:mbrubeck)">mbrubeck</who>
            <bug_when>2011-03-01 19:45:56 -0800</bug_when>
            <thetext>Clearing blocking-fennec because the remaining patches do not block Fennec 4.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5318559</commentid>
            <who name="Mike Beltzner [:beltzner, not reading bugmail]">mbeltzner</who>
            <bug_when>2011-03-03 07:21:21 -0800</bug_when>
            <thetext>** PRODUCT DRIVERS PLEASE NOTE **

This bug is one of 7 automatically changed from blocking2.0:final+ to blocking2.0:.x during the endgame of Firefox 4 for the following reasons:

 - it was marked as a soft blocking issue without a requirement for beta coverage</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5321238</commentid>
            <who name="Chris Jones [:cjones] inactive; ni?/f?/r? if you need me">cjones.bugs</who>
            <bug_when>2011-03-04 02:36:17 -0800</bug_when>
            <thetext>(In reply to comment #29)

None of these comments were addressed.  I&apos;ll fix PAINT_WILL_RESAMPLE for shadow layers in bug 635035.  (It&apos;s the only actual bug.)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5321250</commentid>
            <who name="Timothy Nikkel (:tnikkel)">tnikkel</who>
            <bug_when>2011-03-04 02:46:02 -0800</bug_when>
            <thetext>I just landed what was in this bug, roc may have had a different patch in his queue.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5321275</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-04 03:10:52 -0800</bug_when>
            <thetext>sorry!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5333388</commentid>
            <who name="Chris Jones [:cjones] inactive; ni?/f?/r? if you need me">cjones.bugs</who>
            <bug_when>2011-03-09 09:30:09 -0800</bug_when>
            <thetext>Followup for comment 49
http://hg.mozilla.org/mozilla-central/rev/5b58ca341da4</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5373885</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-28 04:23:15 -0700</bug_when>
            <thetext>My tests fail on OpenGL and D3D9 because in the test files we draw the #d ThebesLayer as two quads, so the GPU makes a binary decision about which pixels to touch on the inside edges of the quads (the inside of the &apos;L&apos;). In the reference files, we draw the #d ThebesLayer as a single quad with an L-shaped image in it, so the inside edge is antialiased by the bilinear filter when the ThebesLayer is resampled.

I don&apos;t know how to fix this. We can&apos;t ignore these edge pixels because they&apos;re exactly where we want to test for artifacts. I can improve the situation by noting when this bug fix is active --- i.e., because we&apos;re resampling we&apos;re ensuring the entire texture is filled with valid pixels --- and in that case, drawing the entire texture as one quad so our interior edges are antialised by resampling. However, for D3D9 at least, we still have off-by-one errors along the edge ... it seems that resampling and compositing an edge between rgb(200,200,200) and rgba(0,0,0,0) over a white background can give slightly different results to resampling an edge between rgb(200,200,200) and rgb(255,255,255).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5373938</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-28 05:05:01 -0700</bug_when>
            <thetext>OK, I got the tests passing with D3D9 by making the reference use a background image so that there are transparent pixels in its transformed ThebesLayer along the inside of the &apos;L&apos;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5373939</commentid>
              <attachid>522336</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-28 05:05:33 -0700</bug_when>
            <thetext>Created attachment 522336
draw layer in a single quad when resampling

This is needed for the tests to pass with D3D9.

You could argue that this is sacrificing some performance for a barely-perceptible improvement in quality, but I think it doesn&apos;t really matter and it helps for testing.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5374096</commentid>
              <attachid>522336</attachid>
            <who name="Bas Schouten (:bas.schouten)">bas</who>
            <bug_when>2011-03-28 06:36:06 -0700</bug_when>
            <thetext>Comment on attachment 522336
draw layer in a single quad when resampling

I think this is fine perf wise. I doubt we&apos;re going to be fillrate bound very often.

However this still leaves the outer edges non-anti-aliased right? Of course we knew this when we did layers this way, but we&apos;re okay with that?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5375369</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-28 13:35:26 -0700</bug_when>
            <thetext>(In reply to comment #56)
&gt; I think this is fine perf wise. I doubt we&apos;re going to be fillrate bound very
&gt; often.
&gt; 
&gt; However this still leaves the outer edges non-anti-aliased right? Of course we
&gt; knew this when we did layers this way, but we&apos;re okay with that?

Yes, that&apos;s right. I think that&apos;s OK for now.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5385454</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-31 19:01:10 -0700</bug_when>
            <thetext>http://hg.mozilla.org/mozilla-central/rev/e36b387929f0
http://hg.mozilla.org/mozilla-central/rev/4096a34495a5
http://hg.mozilla.org/mozilla-central/rev/c686a9fb1b50
http://hg.mozilla.org/mozilla-central/rev/844579d34200
http://hg.mozilla.org/mozilla-central/rev/bec3f251f53a</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5385813</commentid>
              <attachid>514128</attachid>
            <who name=":Ms2ger (he/him; ⌚ UTC+1/+2)">Ms2ger</who>
            <bug_when>2011-04-01 00:47:24 -0700</bug_when>
            <thetext>Comment on attachment 514128
tests

&gt;+#d {
&gt;+	position:absolute;
&gt;+	top:200px;
&gt;+	left:200px;
&gt;+    font-size:30px;
&gt;+    transform:rotate(30deg);
&gt;+    -moz-transform:rotate(30deg);
&gt;+    background:white;
&gt;+}

What&apos;s up with the tabs?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5386078</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-04-01 05:18:42 -0700</bug_when>
            <thetext>Sorry.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5592283</commentid>
            <who name="Mike Hommey [:glandium]">mh+mozilla</who>
            <bug_when>2011-07-14 14:24:45 -0700</bug_when>
            <thetext>Interestingly, I get an unexpected pass in a xvfb:
REFTEST TEST-UNEXPECTED-PASS | file:///tmp/build/layout/reftests/bugs/635373-3.html | image comparison (==)

Should I file a separate bug?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5592294</commentid>
            <who name="Mike Hommey [:glandium]">mh+mozilla</who>
            <bug_when>2011-07-14 14:26:35 -0700</bug_when>
            <thetext>Corresponding image:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAPoCAYAAAAmy5qxAAAgAElEQVR4nO3da4ycZcH/8WmxVlFLLSpKjJogHiIheHgikqgENWhUSIryQsVEjQJRQDwERQiovDBqxUYTFU00CuGJCsEgagBjjIoJBfEQ8FBTQVtgZ2d39tA9zM7sXM+Lv51/t7tt9/i7u93Pp7ne7Mzdmeu+38w3M9d11woAAEBIreo3AAAArB0CBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAgSNAq9UqU1NTVb8NAIAVJ0CgYtPT06W/v7/09fWV4eHhMj09XfVbAgBYMQIEKjY6Olr6+vp6o16vl7GxsarfFgDAihAgUKFOp1Pq9fqMANk3Go1GabVaVb9FAIBlJUCgQkNDQ3PGx/6j2WyWdrtd9VsFAFgWAgQq0mq1Dhsf+4/R0dHS7XarftsAAEsiQKAC3W63DAwMLChA+vr6Sn9/fxkfH6/67QMALJoAgQqMjY3NGRhX7L2i/G/zfw8bIoODg9aHAACrkgCBsP233d1/3NK8pdT++2/rxNby+8bvDxsiQ0NDtu0FAFYVAQJhIyMjc8bE6VOn9wJk37+rR68+bITU63XrQwCAVUOAQFC73Z5z292vjHxlVnzUSq18aeRL814fMjg4WPX0AAAOS4BAULPZnBUOj/U9Vt4++fZZ8fE/U/+zoAXqExMTVU8PAOCwBAiETE5OHjIgrh++vpzYObEXID9s/nDe8TEwMFD19AAA5kWAQEC32y2NRuOwIbG7b3e5bO9l5R0T71jQtx9TU1NVTxEAYF4ECATs3bt3QUGxu2/3vJ87PDxc9fQAAOZNgMAKO9i2u8sx6vW6bXgBgFVFgMAKO9i2u8sxxsbGqp4eAMCCCBBYQVNTUysWH41Go+rpAQAsmACBFTQ4OLhiATI5OVn19AAAFkyAwAqZmJhYsfhoNptVTw8AYFEECKyA+W67u9jRbrerniIAwKIIEFgBC912dyFjZGSk6ukBACyaAIFl1ul0Sr1eX5H4sO0uALDaCRBYZnfffXc544wzyi9/+ctlD5Dx8fGqpwcAsCQCBJbR1NRUedOb3lRqtVpZv359ueCCC8pDDz20LPHRaDRKt9uteooAAEsiQGAZDQ4Oln/84x/lwgsvLMccc0yp1Wpl06ZN5XOf+1zZvXv3kgKk1WpVPT0AgCUTILBMxsfHZwTDC1/4wlKr1XrjhS98YbnpppsWFR+23QUAjhYCBJbB9PT0rIXnp59+ei8+Nm3aVGq1Wnn+85+/qG9COp1O1VMEAFgWAgSWwejo6KxoeOtb39oLkG9+85vls5/9bLnxxhsXHB+jo6NVTw8AYNkIEFiiTqczZzi8973v7QXIF77whTmf85GPfKR8+ctfLo899ticj/f399t2FwA4qggQWKJmszlnPFx++eW9APnkJz856/Hf/va3Zf369aVWq5VTTjml3HbbbbbdBQCOegIElqDVah30p1PXXXddL0De9773zfmcG264oTz3uc/tPe/tb397ue+++0pfX18ZGBioenoAAMtOgMASNBqNgwbIt771rRlhMddzHnzwwfLhD394xm5ZGzduLB/5yEfK97///aqnBwCw7AQILNKB2+4eOH784x/3ouKMM86Y8dg999xTLrjggrJx48bec17+8peXc889t6xbt673t9e97nXlgQceqHqqAADLRoDAIsy17e6B41e/+lUvJE4++eTS19dXbr/99vLmN7+5Fxnr1q0rZ599dvnJT37SO+5nP/tZOffcc8szn/nM3h3VP/ShD5V6vV71tAEAlkyAwCKMjIyU/v7+QwbIn//8516AHHvsseWVr3zljJ9ZXXDBBeWee+6ZddzevXtLKf/v5137/zRr8+bN5frrry/tdrvi2QMALJ4AgQVqt9u9WKjX6wcNkd27d8/4OVWtVitbtmwpH//4x8tDDz005zGNRqN0u93ea+3/E61942tf+1qFswcAWBoBAgs017a7/f39M0Lk1ltvLW94wxtmhMOVV15ZHnnkkUN+azIxMTHjtZ71rGf1jv/ud79bzj777DI5OVnRzAEAlk6AwAJMTk4eNB4effTRcsMNN5RTTz111rcWtVqt3H777YeMj8HBwVmvd/LJJ/eO//vf/17BjAEAlpcAgQWYa9vdXbt2lc9//vMz7ufx7Gc/u1x11VXlta99be9v3/ve9w4ZIFNTU7Ne71WvelXv+Hvvvfeg76vdbpcbb7zRXdMBgCOeAIF5euCBB8rnPve5smfPnt4i88suu6wcd9xxvUh48YtfXLZv3152795d6vV6ec973tN77Mtf/vJB42NkZGTO13zjG9/YO/6uu+466Hv76le/Wmq1WjnttNPKr3/965U6BQAASyZAYB6mp6d7azpOPvnkcv7555cNGzbMuM/HTTfdVB5//PEZYXHZZZf1nvPpT396zvjo7+8/6DcX5513Xu/4H/3oRwd9f7fddlt5wQte0HvuO9/5zvLwww+v1OkAAFg0AQLzMDw8XG666aZy0kknzVjX8epXv7rceeedB/1m47Of/Wzvufvu5XHgc8bGxg76uu9///t7x3/nO9855HvcsWNH2bJlS+/5T3rSk8pVV111yP8fACBNgMBhTE1Nzdha95prrilPe9rTSq1WKxs2bCgXX3xx2bVr15wB8vWvf70XBFu3bu1943GwbXcP9LGPfax3/LZt2+Z8zgMPPFDOO++83pa/GzduLGeeeWZZt25d2bJlSxkYGFipUwMAsGACBA5jYGBgVlg8+OCD5V3veldZv359Of7448vOnTvnDJCbb765FxCve93rZt0/5HBb6u7/DcrVV18947EdO3aUc845p/f4k5/85HLppZeWPXv2lFJK+f3vf19uueWWUkopl1xySfngBz/obuoAQOUECBzCxMTEIXeuuuuuu8qNN9540MfvvPPOXiC87GUvm/V4s9k85J3Nt2/f3jv+0ksvLaWUcs8995S3vOUtvb8/5SlPKZ/4xCfK448/Puf/8Ze//KUcc8wxpVarleOOO65s27Ztzh23AAASBAgcRLfbnXPb3fmMHTt2lPvvv7/84Q9/mLE171zPrdfrZWRkZM6fYn3ve9+bsdB9/12xNm3aVD796U+X/v7+Q85j3+L5/bcJftGLXlR++tOfrtSpAwA4KAECB7F3795FxUdfX18566yzysaNG8vFF1/c+9C/YcOGQx7T399fxsfHZ4TID3/4w1k3NNy8eXO55ppr5rxx4YFuvfXWUqvVemtBfv7zn5eXvOQlvf/rzW9+c/nrX/+6kqcRAGAGAQJz6HQ6i46P//znP2Xr1q1z3g39H//4x2GPHxgYKK1Wq5RSyllnndU79vjjjy/XXXddGR4envc8vv/975fNmzeXr3/9672/TU1Nla985Stl8+bNvTD66Ec/WprN5rKfRwCAAwkQmMPw8PCiA2TfuOOOO8ppp502I0BuvvnmeR//gx/8oHfcE57whPLggw8uai6NRqN0Op1Zf+/v7y8XXnhhb33IM57xjPKNb3xjzucCACwXAQIHaLVaS46PfePxxx8v27dvLyeccEKp1Wpl3bp15fzzzy+PPPLIYb9Fed7zntcLkEsuuWTF5vunP/2pnHnmmb3XOvXUU8uvfvWrFXs9AGBtEyBwgLm23V3q2LVrV7n00kvLE5/4xHL66acf9vlXXnllLwie/vSnl507d5bx8fEVnffVV18949uarVu3ln/9618r+poAwNojQGA/4+Pjyx4f+4977723/O53v5v19/3XhvzpT38qxx57bC8EvvCFL8xYH3KobXsX49577y3nnHNO70aG+8b69evLL37xi2V9LQAAAQL/1e12S71eX9EAmWvs2LGjPPWpTy0XXnhh2blzZ3nHO97Ri4CXvvSl5dFHH511zPDwcJmenl7SfH/zm9+Us88+e9ZC+WOOOaZccMEF5W9/+9synVkAgP9PgMB/jY6OxuOjr6+vbNu2raxfv773c6v9v4m45ZZbDnpcvV4vY2Njc94/5FDuvvvuGWs+9t8m+AMf+ED55z//uUJnGABAgEApZWnb7i7H+OUvf1le85rXzAiCM844Y17HNhqNMjk5edg53nHHHbNeo1arlY0bN5aLLrqoPPzww4EzDQCsdQIESinNZrPSANk3vv3tb8+4Y/nb3va2ct99983r2GazWaampmbMq9vtlltvvbW84hWvmBUeT3rSk8oll1xSdu/eXdFZBwDWIgHCmrec2+4ux/j3v/9drrjiit5C9BNPPLHs2bNn3sePjIyUdrtdbr755nLKKafMCo9jjz22fOxjHyuPPfZY1aceAFiDBAhrXqPRqDw65hp//OMfy3nnnVe++MUvzvuYPXv2lO3bt5eTTjppVng87WlPK5/61KdKvV6v+pQDAGuYAGFNGxsbqzw0lmPs3r27fOlLX5px88J947jjjitXX311GRgYqPp0AwAIENauqrbdXc7xyCOPlOuuu66ceOKJs8Jj8+bN5Yorrig7d+4szWazdDqdqk85AIAAYe0aHh6uPCCWMq6//vryzGc+c1Z4HH/88eUzn/lM2bVr16xjRkdHF7xtLwDAchIgrEntdrvygFjK2L17d3nxi188Izy2bNlSrr322vLwww8f8tj+/v4yPj5e9SUAANYoAcKaNDg4WHlELEeEXHvttWXTpk29GwledNFFZefOnfM6fnBwsLRaraovBQCwxggQ1pzJycnK42E5x0MPPVTe/e539+6mfvzxx5dt27aVxx57bF7HDw0NWR8CAMQIENac/v7+yqNhJcaBd1M/5ZRTym233TavY+v1uvUhAECEAGFN2bt3b+WhsNLjhhtumHE39XPOOafcf//9M56zc+fO8q53vWvW3/v7+8vExETVlwkAOIoJENaMTqez6rfdne848G7qGzduLJdffnn517/+Vfr6+spFF11UarVaef3rXz/n8QMDA6Xdbld9yQCAo5AAYc0YGhqqPAzS449//GPZunVrWbduXanVauU5z3lOufbaa8uGDRvK+vXry913333I40dGRsr09HTVlw4AOIoIENaE6enpNfPtx1zjjjvuKKeddtqMbXvf/e53z+vYer1exsbGqr6EAMBRQoCwZnQ6nTX5Lci+8fjjj5ft27eXE044oWzatKk8+OCDCzq+0WiUycnJqi8jALDKCRDWnFarVQYGBioPgqrGrl27yk9+8pNFH99sNq0PAQAWTYCwJnW73TI+Pn7Ubsm70qNer1sfAgAsigBhTet2u2VkZGRNrw9ZaoiMj4+7fwgAMG8CBEop7Xa7NJvNyj/Qr9YxMDBQWq1W1ZcRAFgFBAjsp9VqlUajUfkH+tU6ms1m6XQ6VV9GAOAIJkBgDmNjY36WtYQxOjrqZ1kAwJwECBzE9PR0GR4ervzD/God/f39ZWJiourLCAAcYQQIHMbU1FQZHBys/AP9ah2Dg4Nlamqq6ssIABwhBAjM08TEhPUhSxjDw8PWhwAAAgQWotvtlr1791ofsshRr9fL3r17rQ8BgDVMgMAidDod60OWMBqNhvUhALBGCRBYgna7bX3IEsbAwID1IQCwxggQWAYTExOlv7+/8g/0q3UMDw+X6enpqi8jABAgQGCZdLvdMjo6WvmH+dU66vV6GRsbq/oyAgArTIDAMut0OmVoaKjyD/SrcdTrdd+EAMBRToDACmm1WmVgYKDyD/WraYyPj1d92QCAFSZAYAV1u90yPj5ufcg8RqPRqPpyAQABAgQCpqeny8jIiPuHHGK0Wq2qLxMAECBAIKjdbpdms1n5h/0jbTSbzaovDQAQIkCgApOTk6XRaFT+wf9IGZ1Op+pLAgCECBCo0NjY2Jr/Wdbo6GjVlwEACBIgULHp6ekyPDxceQhUMWy7CwBrjwCBI0S73V5z2/badhcA1h4BAkeYiYmJNbE+ZHBwsOpTDQBUQIDAEajb7ZbR0dGjen3I1NRU1acZAKiAAIEjWKfTOSrXhwwNDVV9agGAiggQWAVarVYZHBysPByWY9TrddvuAsAaJkBgFZmYmFj1P8vau3dv1acRAKiQAIFVZt/6kKpDYjGj0WiUbrdb9SkEACokQGCV6nQ6ZWhoqPKoWMiYmJio+rQBABUTILDKtVqtVXH/ENvuAgClCBA4KnS73TI2NnZErw+x7S4AUIoAgaPK9PR0GRkZOeJCZGRkpOpTAwAcIQQIHIXa7XZpNpuVh0dfX1/p7+8v09PTVZ8SAOAIIUDgKDY5OVkajUalAWLbXQBgfwIEjnJVrg+x7S4AcCABAmvE9PR0GR4ejgbI5ORk1dMGAI4wAgTWmHa7Hdm2t9lsVj1VAOAIJEBgjZqcnCz9/f0rEh/1er202+2qpwgAHIEECKxh3W63jI6OLvv6ENvuAgAHI0CAMj09XYaGhpYlPmy7CwAcigABelqtVhkcHFxSgIyNjVU9DQDgCCZAgFnGx8cXtT5kYGDAtrsAwCEJEGBO+9aHLCRAWq1W1W8bADjCCRDgkNrtdmk2m4eNj6GhoarfKgCwCggQYF5arVZpNBoH3Xa30+lU/RYBgFVAgAALMjY2Nmvb3tHR0arfFgCwSggQYMGmp6fL8PCwbXcBgAUTIMCiTU1NWXgOACyIAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECE39mo0AAAWfSURBVAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADECBAAACBGgAAAADECBAAAiBEgAABAjAABAABiBAgAABAjQAAAgBgBAgAAxAgQAAAgRoAAAAAxAgQAAIgRIAAAQIwAAQAAYgQIAAAQI0AAAIAYAQIAAMQIEAAAIEaAAAAAMQIEAACIESAAAECMAAEAAGIECAAAECNAAACAGAECAADE/B/mXiiqhkAYogAAAABJRU5ErkJggg==</thetext>
          </long_desc>

          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>513923</attachid>
            <date>2011-02-20 21:00:52 -0800</date>
            <delta_ts>2011-02-20 21:00:52 -0800</delta_ts>
            <desc>Simple testcase</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>476</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KPHN0eWxlPg0KYXJ0aWNsZSB7DQoJdHJh
bnNpdGlvbjphbGwgNXMgZWFzZTsNCgktbW96LXRyYW5zaXRpb246YWxsIDVzIGVhc2U7DQoJcG9z
aXRpb246YWJzb2x1dGU7DQoJdG9wOjIwMHB4Ow0KCWxlZnQ6MjAwcHg7DQoJY29sb3I6IzAwMDsN
CiAgICBmb250LXNpemU6MjBweDsNCn0NCmh0bWw6aG92ZXIgYXJ0aWNsZSB7ICANCgl0cmFuc2Zv
cm06cm90YXRlKDQ1ZGVnKTsNCgktbW96LXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpOw0KfQ0Kc3Bh
biB7IGJhY2tncm91bmQ6eWVsbG93OyBwYWRkaW5nOjJweDsgfQ0KPC9zdHlsZT4NCjwvaGVhZD4N
Cjxib2R5Pg0KPGFydGljbGU+PHNwYW4+QUFBQUFBQUFBQUFBQUE8L3NwYW4+PGJyPg0KPHNwYW4+
QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkI8L3NwYW4+DQo8L2FydGljbGU+
DQo8L2JvZHk+DQo8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>513924</attachid>
            <date>2011-02-20 21:03:11 -0800</date>
            <delta_ts>2011-02-20 21:03:11 -0800</delta_ts>
            <desc>non-component-alpha testcase</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>476</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KPHN0eWxlPg0KYXJ0aWNsZSB7DQoJdHJh
bnNpdGlvbjphbGwgNXMgZWFzZTsNCgktbW96LXRyYW5zaXRpb246YWxsIDVzIGVhc2U7DQoJcG9z
aXRpb246YWJzb2x1dGU7DQoJdG9wOjIwMHB4Ow0KCWxlZnQ6MjAwcHg7DQoJY29sb3I6IzAwMDsN
CiAgICBmb250LXNpemU6MjBweDsNCn0NCmh0bWw6aG92ZXIgYXJ0aWNsZSB7ICANCgl0cmFuc2Zv
cm06cm90YXRlKDQ1ZGVnKTsNCgktbW96LXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpOw0KfQ0Kc3Bh
biB7IGJhY2tncm91bmQ6eWVsbG93OyBwYWRkaW5nOjJweDsgfQ0KPC9zdHlsZT4NCjwvaGVhZD4N
Cjxib2R5Pg0KPGFydGljbGU+PHNwYW4+QUFBQUFBQUFBQUFBQUE8L3NwYW4+PGJyPg0KPHNwYW4+
QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkI8L3NwYW4+DQo8L2FydGljbGU+
DQo8L2JvZHk+DQo8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>513926</attachid>
            <date>2011-02-20 21:15:15 -0800</date>
            <delta_ts>2011-02-21 13:17:50 -0800</delta_ts>
            <desc>D3D9 fix?</desc>
            <filename>bug635373</filename>
            <type>text/plain</type>
            <size>1441</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">RnJvbTogUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYmVydEBvY2FsbGFoYW4ub3JnPgoKZGlmZiAtLWdp
dCBhL2dmeC9sYXllcnMvZDNkOS9UaGViZXNMYXllckQzRDkuY3BwIGIvZ2Z4L2xheWVycy9kM2Q5
L1RoZWJlc0xheWVyRDNEOS5jcHAKLS0tIGEvZ2Z4L2xheWVycy9kM2Q5L1RoZWJlc0xheWVyRDNE
OS5jcHAKKysrIGIvZ2Z4L2xheWVycy9kM2Q5L1RoZWJlc0xheWVyRDNEOS5jcHAKQEAgLTIyMSwx
NiArMjIxLDI4IEBAIFRoZWJlc0xheWVyRDNEOTo6UmVuZGVyVGhlYmVzTGF5ZXIoUmVhZGIKICAg
fQogCiAgIG5zVEFycmF5PFJlYWRiYWNrUHJvY2Vzc29yOjpVcGRhdGU+IHJlYWRiYWNrVXBkYXRl
czsKICAgbnNJbnRSZWdpb24gcmVhZGJhY2tSZWdpb247CiAgIGlmIChhUmVhZGJhY2sgJiYgVXNl
ZEZvclJlYWRiYWNrKCkpIHsKICAgICBhUmVhZGJhY2stPkdldFRoZWJlc0xheWVyVXBkYXRlcyh0
aGlzLCAmcmVhZGJhY2tVcGRhdGVzLCAmcmVhZGJhY2tSZWdpb24pOwogICB9CiAKKyAgLy8gQXZv
aWQgYXJ0aWZhY3RzIHdoZW4gZG9pbmcgbXVsdGlwYXNzIHJlbmRlcmluZyB3aXRoIGEgcmVzYW1w
bGluZyB0cmFuc2Zvcm0sCisgIC8vIGJ5IGVuc3VyaW5nIHdlIHJlbmRlciB0aGUgd2hvbGUgbGF5
ZXIgdGV4dHVyZSBpbiBvbmUgZ28gaW5zdGVhZCBvZgorICAvLyByZWN0YW5nbGUtYnktcmVjdGFu
Z2xlLgorICBpZiAobW9kZSA9PSBTVVJGQUNFX0NPTVBPTkVOVF9BTFBIQSkgeworICAgIGNvbnN0
IGdmeDNETWF0cml4JiB0cmFuc2Zvcm0gPSBHZXRFZmZlY3RpdmVUcmFuc2Zvcm0oKTsKKyAgICBn
ZnhNYXRyaXggdHJhbnNmb3JtMmQ7CisgICAgaWYgKCF0cmFuc2Zvcm0uSXMyRCgmdHJhbnNmb3Jt
MmQpIHx8CisgICAgICAgIHRyYW5zZm9ybTJkLkhhc05vbkludGVnZXJUcmFuc2xhdGlvbigpKSB7
CisgICAgICBtVmlzaWJsZVJlZ2lvbiA9IG1UZXh0dXJlUmVjdDsKKyAgICB9CisgIH0KKwogICAv
LyBCZWNhdXNlIHVwZGF0ZXMgdG8gRDNEOSBUaGViZXNMYXllcnMgYXJlIHJlbmRlcmVkIHdpdGgg
dGhlIENQVSwgd2UgZG9uJ3QKICAgLy8gaGF2ZSB0byBkbyByZWFkYmFjayBmcm9tIEQzRDkgc3Vy
ZmFjZXMuIEluc3RlYWQgd2UgbWFrZSBzdXJlIHRoYXQgYW55IGFyZWEKICAgLy8gbmVlZGVkIGZv
ciByZWFkYmFjayBpcyBpbmNsdWRlZCBpbiB0aGUgZHJhd1JlZ2lvbiB3ZSBhc2sgbGF5b3V0IHRv
IHJlbmRlci4KICAgLy8gVGhlbiB0aGUgcmVhZGJhY2sgYXJlYXMgd2UgbmVlZCBjYW4gYmUgY29w
aWVkIG91dCBvZiB0aGUgdGVtcG9yYXJ5CiAgIC8vIGRlc3RpbmF0aW9uU3VyZmFjZSBpbiBEcmF3
UmVnaW9uLgogICBuc0ludFJlZ2lvbiBkcmF3UmVnaW9uOwogICBkcmF3UmVnaW9uLlN1YihtVmlz
aWJsZVJlZ2lvbiwgbVZhbGlkUmVnaW9uKTsKICAgZHJhd1JlZ2lvbi5PcihkcmF3UmVnaW9uLCBy
ZWFkYmFja1JlZ2lvbik7Cg==
</data>
<flag name="review"
          id="430202"
          type_id="937"
          status="+"
          setter="bas"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>514069</attachid>
            <date>2011-02-21 13:17:50 -0800</date>
            <delta_ts>2011-02-21 14:39:42 -0800</delta_ts>
            <desc>better fix for D3D9 and D3D10</desc>
            <filename>bug635373</filename>
            <type>text/plain</type>
            <size>5205</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">RnJvbTogUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYmVydEBvY2FsbGFoYW4ub3JnPgpCdWcgNjM1Mzcz
LiBJZiB3ZSBuZWVkIHRvIHJlc2FtcGxlIGEgVGhlYmVzTGF5ZXIgdGV4dHVyZSwgbWFrZSBzdXJl
IHdlIG1ha2UgYWxsIHRoZSBwaXhlbHMgb2YgdGhlIHRleHR1cmUgdmFsaWQgaW4gY2FzZSB0aGV5
IGdldCBzYW1wbGVkLiByPWJhcwoKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNkMTAvVGhlYmVz
TGF5ZXJEM0QxMC5jcHAgYi9nZngvbGF5ZXJzL2QzZDEwL1RoZWJlc0xheWVyRDNEMTAuY3BwCi0t
LSBhL2dmeC9sYXllcnMvZDNkMTAvVGhlYmVzTGF5ZXJEM0QxMC5jcHAKKysrIGIvZ2Z4L2xheWVy
cy9kM2QxMC9UaGViZXNMYXllckQzRDEwLmNwcApAQCAtMjQ5LDMxICsyNDksNDMgQEAgVGhlYmVz
TGF5ZXJEM0QxMDo6VmFsaWRhdGUoUmVhZGJhY2tQcm9jZQogICB9CiAgIG1UZXh0dXJlUmVnaW9u
ID0gbVZpc2libGVSZWdpb247CiAKICAgaWYgKCFtVGV4dHVyZSB8fCAobW9kZSA9PSBTVVJGQUNF
X0NPTVBPTkVOVF9BTFBIQSAmJiAhbVRleHR1cmVPbldoaXRlKSkgewogICAgIENyZWF0ZU5ld1Rl
eHR1cmVzKGdmeEludFNpemUodmlzaWJsZVJlY3Qud2lkdGgsIHZpc2libGVSZWN0LmhlaWdodCks
IG1vZGUpOwogICAgIG1WYWxpZFJlZ2lvbi5TZXRFbXB0eSgpOwogICB9CiAKLSAgaWYgKCFtVmFs
aWRSZWdpb24uSXNFcXVhbChtVmlzaWJsZVJlZ2lvbikpIHsKKyAgLy8gSWYgd2UgaGF2ZSBhIHRy
YW5zZm9ybSB0aGF0IHJlcXVpcmVzIHJlc2FtcGxpbmcgb2Ygb3VyIHRleHR1cmUsIHRoZW4KKyAg
Ly8gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc2FtcGxlIHBpeGVscyB0aGF0IGhhdmVu
J3QgYmVlbiBkcmF3bi4KKyAgLy8gV2UgY2xhbXAgc2FtcGxlIGNvb3JkaW5hdGVzIHRvIHRoZSB0
ZXh0dXJlIHJlY3QsIGJ1dCB3aGVuIHRoZSB2aXNpYmxlIHJlZ2lvbgorICAvLyBkb2Vzbid0IGZp
bGwgdGhlIGVudGlyZSB0ZXh0dXJlIHJlY3Qgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZHJhdyBh
bGwgdGhlCisgIC8vIHBpeGVscyBpbiB0aGUgdGV4dHVyZSByZWN0IGFueXdheSBpbiBjYXNlIHRo
ZXkgZ2V0IHNhbXBsZWQuCisgIG5zSW50UmVnaW9uIG5lZWRlZFJlZ2lvbiA9IG1WaXNpYmxlUmVn
aW9uOworICBnZnhNYXRyaXggdHJhbnNmb3JtMmQ7CisgIGlmICghR2V0RWZmZWN0aXZlVHJhbnNm
b3JtKCkuSXMyRCgmdHJhbnNmb3JtMmQpIHx8CisgICAgICB0cmFuc2Zvcm0yZC5IYXNOb25JbnRl
Z2VyVHJhbnNsYXRpb24oKSkgeworICAgIG5lZWRlZFJlZ2lvbiA9IG1UZXh0dXJlUmVnaW9uLkdl
dEJvdW5kcygpOworICB9CisKKyAgaWYgKCFtVmFsaWRSZWdpb24uSXNFcXVhbChuZWVkZWRSZWdp
b24pKSB7CiAgICAgTGF5ZXJNYW5hZ2VyRDNEMTA6OkNhbGxiYWNrSW5mbyBjYkluZm8gPSBtRDNE
TWFuYWdlci0+R2V0Q2FsbGJhY2tJbmZvKCk7CiAgICAgaWYgKCFjYkluZm8uQ2FsbGJhY2spIHsK
ICAgICAgIE5TX0VSUk9SKCJEM0QxMCBzaG91bGQgbmV2ZXIgbmVlZCB0byB1cGRhdGUgVGhlYmVz
TGF5ZXJzIGluIGFuIGVtcHR5IHRyYW5zYWN0aW9uIik7CiAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgLyogV2UgdXNlIHRoZSBib3VuZHMgb2YgdGhlIHZpc2libGUgcmVnaW9uIGJlY2F1c2Ug
d2UgZHJhdyB0aGUgYm91bmRzIG9mCiAgICAgICogdGhpcyByZWdpb24gd2hlbiB3ZSBkcmF3IHRo
aXMgZW50aXJlIHRleHR1cmUuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQKICAgICAgKiB0aGUg
YXJlYXMgdGhhdCBhcmVuJ3QgZmlsbGVkIHdpdGggY29udGVudCBnZXQgdGhlaXIgYmFja2dyb3Vu
ZCBkcmF3bi4KICAgICAgKiBUaGlzIGlzIGFuIGlzc3VlIGZvciBvcGFxdWUgc3VyZmFjZXMsIHdo
aWNoIG90aGVyd2lzZSB3b24ndCBnZXQgdGhlaXIKICAgICAgKiBiYWNrZ3JvdW5kIHBhaW50ZWQu
CiAgICAgICovCiAgICAgbnNJbnRSZWdpb24gcmVnaW9uOwotICAgIHJlZ2lvbi5TdWIobVZpc2li
bGVSZWdpb24sIG1WYWxpZFJlZ2lvbik7CisgICAgcmVnaW9uLlN1YihuZWVkZWRSZWdpb24sIG1W
YWxpZFJlZ2lvbik7CiAKICAgICBEcmF3UmVnaW9uKHJlZ2lvbiwgbW9kZSk7CiAKICAgICBpZiAo
cmVhZGJhY2tVcGRhdGVzLkxlbmd0aCgpID4gMCkgewogICAgICAgQ0QzRDEwX1RFWFRVUkUyRF9E
RVNDIGRlc2MoRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2aXNpYmxlUmVjdC53aWR0aCwgdmlzaWJsZVJlY3QuaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSwgMCwgRDNEMTBfVVNBR0VfU1RBR0lO
RywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRDEwX0NQVV9BQ0NFU1NfUkVB
RCk7CkBAIC0yODQsMTcgKzI5NiwxNyBAQCBUaGViZXNMYXllckQzRDEwOjpWYWxpZGF0ZShSZWFk
YmFja1Byb2NlCiAKICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZGJhY2tVcGRhdGVzLkxl
bmd0aCgpOyBpKyspIHsKICAgICAgICAgbUQzRE1hbmFnZXItPnJlYWRiYWNrTWFuYWdlcigpLT5Q
b3N0VGFzayhyZWFkYmFja1RleHR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnJlYWRiYWNrVXBkYXRlc1tpXSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZnhQb2ludCh2aXNpYmxlUmVjdC54LCB2
aXNpYmxlUmVjdC55KSk7CiAgICAgICB9CiAgICAgfQogCi0gICAgbVZhbGlkUmVnaW9uID0gbVZp
c2libGVSZWdpb247CisgICAgbVZhbGlkUmVnaW9uID0gbmVlZGVkUmVnaW9uOwogICB9CiB9CiAK
IHZvaWQKIFRoZWJlc0xheWVyRDNEMTA6OkxheWVyTWFuYWdlckRlc3Ryb3llZCgpCiB7CiAgIG1E
M0RNYW5hZ2VyID0gbnNudWxsOwogfQpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9kM2Q5L1RoZWJl
c0xheWVyRDNEOS5jcHAgYi9nZngvbGF5ZXJzL2QzZDkvVGhlYmVzTGF5ZXJEM0Q5LmNwcAotLS0g
YS9nZngvbGF5ZXJzL2QzZDkvVGhlYmVzTGF5ZXJEM0Q5LmNwcAorKysgYi9nZngvbGF5ZXJzL2Qz
ZDkvVGhlYmVzTGF5ZXJEM0Q5LmNwcApAQCAtMjIxLDM2ICsyMjEsNDggQEAgVGhlYmVzTGF5ZXJE
M0Q5OjpSZW5kZXJUaGViZXNMYXllcihSZWFkYgogICB9CiAKICAgbnNUQXJyYXk8UmVhZGJhY2tQ
cm9jZXNzb3I6OlVwZGF0ZT4gcmVhZGJhY2tVcGRhdGVzOwogICBuc0ludFJlZ2lvbiByZWFkYmFj
a1JlZ2lvbjsKICAgaWYgKGFSZWFkYmFjayAmJiBVc2VkRm9yUmVhZGJhY2soKSkgewogICAgIGFS
ZWFkYmFjay0+R2V0VGhlYmVzTGF5ZXJVcGRhdGVzKHRoaXMsICZyZWFkYmFja1VwZGF0ZXMsICZy
ZWFkYmFja1JlZ2lvbik7CiAgIH0KIAorICAvLyBJZiB3ZSBoYXZlIGEgdHJhbnNmb3JtIHRoYXQg
cmVxdWlyZXMgcmVzYW1wbGluZyBvZiBvdXIgdGV4dHVyZSwgdGhlbgorICAvLyB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSB3ZSBkb24ndCBzYW1wbGUgcGl4ZWxzIHRoYXQgaGF2ZW4ndCBiZWVuIGRyYXdu
LgorICAvLyBXZSBjbGFtcCBzYW1wbGUgY29vcmRpbmF0ZXMgdG8gdGhlIHRleHR1cmUgcmVjdCwg
YnV0IHdoZW4gdGhlIHZpc2libGUgcmVnaW9uCisgIC8vIGRvZXNuJ3QgZmlsbCB0aGUgZW50aXJl
IHRleHR1cmUgcmVjdCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkcmF3IGFsbCB0aGUKKyAgLy8g
cGl4ZWxzIGluIHRoZSB0ZXh0dXJlIHJlY3QgYW55d2F5IGluIGNhc2UgdGhleSBnZXQgc2FtcGxl
ZC4KKyAgbnNJbnRSZWdpb24gbmVlZGVkUmVnaW9uID0gbVZpc2libGVSZWdpb247CisgIGdmeE1h
dHJpeCB0cmFuc2Zvcm0yZDsKKyAgaWYgKCFHZXRFZmZlY3RpdmVUcmFuc2Zvcm0oKS5JczJEKCZ0
cmFuc2Zvcm0yZCkgfHwKKyAgICAgIHRyYW5zZm9ybTJkLkhhc05vbkludGVnZXJUcmFuc2xhdGlv
bigpKSB7CisgICAgbmVlZGVkUmVnaW9uID0gbVRleHR1cmVSZWN0OworICB9CisKICAgLy8gQmVj
YXVzZSB1cGRhdGVzIHRvIEQzRDkgVGhlYmVzTGF5ZXJzIGFyZSByZW5kZXJlZCB3aXRoIHRoZSBD
UFUsIHdlIGRvbid0CiAgIC8vIGhhdmUgdG8gZG8gcmVhZGJhY2sgZnJvbSBEM0Q5IHN1cmZhY2Vz
LiBJbnN0ZWFkIHdlIG1ha2Ugc3VyZSB0aGF0IGFueSBhcmVhCiAgIC8vIG5lZWRlZCBmb3IgcmVh
ZGJhY2sgaXMgaW5jbHVkZWQgaW4gdGhlIGRyYXdSZWdpb24gd2UgYXNrIGxheW91dCB0byByZW5k
ZXIuCiAgIC8vIFRoZW4gdGhlIHJlYWRiYWNrIGFyZWFzIHdlIG5lZWQgY2FuIGJlIGNvcGllZCBv
dXQgb2YgdGhlIHRlbXBvcmFyeQogICAvLyBkZXN0aW5hdGlvblN1cmZhY2UgaW4gRHJhd1JlZ2lv
bi4KICAgbnNJbnRSZWdpb24gZHJhd1JlZ2lvbjsKLSAgZHJhd1JlZ2lvbi5TdWIobVZpc2libGVS
ZWdpb24sIG1WYWxpZFJlZ2lvbik7CisgIGRyYXdSZWdpb24uU3ViKG5lZWRlZFJlZ2lvbiwgbVZh
bGlkUmVnaW9uKTsKICAgZHJhd1JlZ2lvbi5PcihkcmF3UmVnaW9uLCByZWFkYmFja1JlZ2lvbik7
CiAgIC8vIE5TX0FTU0VSVElPTihtVmlzaWJsZVJlZ2lvbi5Db250YWlucyhyZWdpb24pLCAiQmFk
IHJlYWRiYWNrIHJlZ2lvbiEiKTsKIAogICBpZiAoIWRyYXdSZWdpb24uSXNFbXB0eSgpKSB7CiAg
ICAgTGF5ZXJNYW5hZ2VyRDNEOTo6Q2FsbGJhY2tJbmZvIGNiSW5mbyA9IG1EM0RNYW5hZ2VyLT5H
ZXRDYWxsYmFja0luZm8oKTsKICAgICBpZiAoIWNiSW5mby5DYWxsYmFjaykgewogICAgICAgTlNf
RVJST1IoIkQzRDkgc2hvdWxkIG5ldmVyIG5lZWQgdG8gdXBkYXRlIFRoZWJlc0xheWVycyBpbiBh
biBlbXB0eSB0cmFuc2FjdGlvbiIpOwogICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIERyYXdS
ZWdpb24oZHJhd1JlZ2lvbiwgbW9kZSwgcmVhZGJhY2tVcGRhdGVzKTsKIAotICAgIG1WYWxpZFJl
Z2lvbiA9IG1WaXNpYmxlUmVnaW9uOworICAgIG1WYWxpZFJlZ2lvbiA9IG5lZWRlZFJlZ2lvbjsK
ICAgfQogCiAgIFNldFNoYWRlclRyYW5zZm9ybUFuZE9wYWNpdHkoKTsKIAogICBpZiAobW9kZSA9
PSBTVVJGQUNFX0NPTVBPTkVOVF9BTFBIQSkgewogICAgIG1EM0RNYW5hZ2VyLT5TZXRTaGFkZXJN
b2RlKERldmljZU1hbmFnZXJEM0Q5OjpDT01QT05FTlRMQVlFUlBBU1MxKTsKICAgICBkZXZpY2Uo
KS0+U2V0VGV4dHVyZSgwLCBtVGV4dHVyZSk7CiAgICAgZGV2aWNlKCktPlNldFRleHR1cmUoMSwg
bVRleHR1cmVPbldoaXRlKTsK
</data>
<flag name="review"
          id="430334"
          type_id="937"
          status="-"
          setter="roc"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>514078</attachid>
            <date>2011-02-21 14:24:27 -0800</date>
            <delta_ts>2011-02-21 14:24:27 -0800</delta_ts>
            <desc>testcase with opaque ThebesLayer</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>542</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KPHN0eWxlPg0KI2Qgew0KCXBvc2l0aW9u
OmFic29sdXRlOw0KCXRvcDoyMDBweDsNCglsZWZ0OjIwMHB4Ow0KICAgIGZvbnQtc2l6ZTozMHB4
Ow0KICAgIHRyYW5zZm9ybTpyb3RhdGUoMzBkZWcpOw0KICAgIC1tb3otdHJhbnNmb3JtOnJvdGF0
ZSgzMGRlZyk7DQp9DQpzcGFuIHsgYmFja2dyb3VuZDpyZ2IoMjAwLDIwMCwyMDApOyBwYWRkaW5n
OjJweDsgfQ0KPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGRpdiBpZD0iZCI+PHNwYW4+PGNh
bnZhcyBpZD0iYyIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIj48L2NhbnZhcz48L3NwYW4+PGJyPg0K
PHNwYW4+PGNhbnZhcyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwIjwvc3Bhbj4NCjwvZGl2Pg0KPHNj
cmlwdD4NCnZhciBjdHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYyIpLmdldENvbnRleHQo
IjJkIik7DQpjdHguZmlsbFN0eWxlID0gImxpbWUiOw0KY3R4LmZpbGxSZWN0KDUsNSw1LDUpOw0K
PC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>514128</attachid>
            <date>2011-02-21 20:31:36 -0800</date>
            <delta_ts>2011-02-21 20:31:36 -0800</delta_ts>
            <desc>tests</desc>
            <filename>bug635373-tests</filename>
            <type>text/plain</type>
            <size>6379</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">RnJvbTogUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYmVydEBvY2FsbGFoYW4ub3JnPgpCdWcgNjM1Mzcz
LiBUZXN0cwoKZGlmZiAtLWdpdCBhL2xheW91dC9yZWZ0ZXN0cy9idWdzLzYzNTM3My0xLXJlZi5o
dG1sIGIvbGF5b3V0L3JlZnRlc3RzL2J1Z3MvNjM1MzczLTEtcmVmLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9sYXlvdXQvcmVmdGVzdHMvYnVncy82MzUzNzMt
MS1yZWYuaHRtbApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8
aGVhZD4NCis8c3R5bGU+DQorYm9keSB7IGJhY2tncm91bmQ6d2hpdGU7IH0NCisjZCB7DQorCXBv
c2l0aW9uOmFic29sdXRlOw0KKwl0b3A6MjAwcHg7DQorCWxlZnQ6MjAwcHg7DQorICAgIGZvbnQt
c2l6ZTozMHB4Ow0KKyAgICB0cmFuc2Zvcm06cm90YXRlKDMwZGVnKTsNCisgICAgLW1vei10cmFu
c2Zvcm06cm90YXRlKDMwZGVnKTsNCisgICAgYmFja2dyb3VuZDp3aGl0ZTsNCit9DQorc3BhbiB7
IGRpc3BsYXk6YmxvY2s7IGJhY2tncm91bmQ6cmdiKDIwMCwyMDAsMjAwKTsgfQ0KKzwvc3R5bGU+
DQorPC9oZWFkPg0KKzxib2R5Pg0KKzxkaXYgaWQ9ImQiPjxzcGFuIHN0eWxlPSJ3aWR0aDoyMHB4
Ij48Y2FudmFzIGlkPSJjIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPjwvY2FudmFzPjwvc3Bhbj4N
Cis8c3BhbiBzdHlsZT0id2lkdGg6MTAwcHg7IGhlaWdodDoyMHB4OyI+PC9zcGFuPg0KKzwvZGl2
Pg0KKzxzY3JpcHQ+DQordmFyIGN0eCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjIikuZ2V0
Q29udGV4dCgiMmQiKTsNCitjdHguZmlsbFN0eWxlID0gImxpbWUiOw0KK2N0eC5maWxsUmVjdCg1
LDUsNSw1KTsNCis8L3NjcmlwdD4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2xh
eW91dC9yZWZ0ZXN0cy9idWdzLzYzNTM3My0xLmh0bWwgYi9sYXlvdXQvcmVmdGVzdHMvYnVncy82
MzUzNzMtMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGF5
b3V0L3JlZnRlc3RzL2J1Z3MvNjM1MzczLTEuaHRtbApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZ
UEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCis8dGl0bGU+VGVzdGluZyBjb21wb3NpdGluZyBv
ZiBvcGFxdWUgbGF5ZXIgd2l0aCBjb21wbGV4IHZpc2libGUgcmVnaW9uPC90aXRsZT4NCis8c3R5
bGU+DQorYm9keSB7IGJhY2tncm91bmQ6d2hpdGU7IH0NCisjZCB7DQorCXBvc2l0aW9uOmFic29s
dXRlOw0KKwl0b3A6MjAwcHg7DQorCWxlZnQ6MjAwcHg7DQorICAgIGZvbnQtc2l6ZTozMHB4Ow0K
KyAgICB0cmFuc2Zvcm06cm90YXRlKDMwZGVnKTsNCisgICAgLW1vei10cmFuc2Zvcm06cm90YXRl
KDMwZGVnKTsNCit9DQorc3BhbiB7IGRpc3BsYXk6YmxvY2s7IGJhY2tncm91bmQ6cmdiKDIwMCwy
MDAsMjAwKTsgfQ0KKzwvc3R5bGU+DQorPC9oZWFkPg0KKzxib2R5Pg0KKzxkaXYgaWQ9ImQiPjxz
cGFuIHN0eWxlPSJ3aWR0aDoyMHB4Ij48Y2FudmFzIGlkPSJjIiB3aWR0aD0iMjAiIGhlaWdodD0i
MjAiPjwvY2FudmFzPjwvc3Bhbj4NCis8c3BhbiBzdHlsZT0id2lkdGg6MTAwcHg7IGhlaWdodDoy
MHB4OyI+PC9zcGFuPg0KKzwvZGl2Pg0KKzxzY3JpcHQ+DQordmFyIGN0eCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjIikuZ2V0Q29udGV4dCgiMmQiKTsNCitjdHguZmlsbFN0eWxlID0gImxp
bWUiOw0KK2N0eC5maWxsUmVjdCg1LDUsNSw1KTsNCis8L3NjcmlwdD4NCis8L2JvZHk+DQorPC9o
dG1sPg0KZGlmZiAtLWdpdCBhL2xheW91dC9yZWZ0ZXN0cy9idWdzLzYzNTM3My0yLXJlZi5odG1s
IGIvbGF5b3V0L3JlZnRlc3RzL2J1Z3MvNjM1MzczLTItcmVmLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9sYXlvdXQvcmVmdGVzdHMvYnVncy82MzUzNzMtMi1y
ZWYuaHRtbApAQCAtMCwwICsxLDI5IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVh
ZD4NCis8dGl0bGU+VGVzdGluZyBjb21wb3NpdGluZyBvZiB0cmFuc2x1Y2VudCBsYXllciB3aXRo
IGNvbXBsZXggdmlzaWJsZSByZWdpb248L3RpdGxlPg0KKzxzdHlsZT4NCitib2R5IHsgYmFja2dy
b3VuZDp3aGl0ZTsgfQ0KKyNkIHsNCisJcG9zaXRpb246YWJzb2x1dGU7DQorCXRvcDoyMDBweDsN
CisJbGVmdDoyMDBweDsNCisgICAgZm9udC1zaXplOjMwcHg7DQorICAgIHRyYW5zZm9ybTpyb3Rh
dGUoMzBkZWcpOw0KKyAgICAtbW96LXRyYW5zZm9ybTpyb3RhdGUoMzBkZWcpOw0KKyAgICBiYWNr
Z3JvdW5kOndoaXRlOw0KK30NCitzcGFuIHsgZGlzcGxheTpibG9jazsgYmFja2dyb3VuZDpyZ2Jh
KDIwMCwyMDAsMjAwLCAwLjQpOyB9DQorPC9zdHlsZT4NCis8L2hlYWQ+DQorPGJvZHk+DQorPGRp
diBpZD0iZCI+PHNwYW4gc3R5bGU9IndpZHRoOjIwcHgiPjxjYW52YXMgaWQ9ImMiIHdpZHRoPSIy
MCIgaGVpZ2h0PSIyMCI+PC9jYW52YXM+PC9zcGFuPg0KKzxzcGFuIHN0eWxlPSJ3aWR0aDoxMDBw
eDsgaGVpZ2h0OjIwcHg7Ij48L3NwYW4+DQorPC9kaXY+DQorPHNjcmlwdD4NCit2YXIgY3R4ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImMiKS5nZXRDb250ZXh0KCIyZCIpOw0KK2N0eC5maWxs
U3R5bGUgPSAibGltZSI7DQorY3R4LmZpbGxSZWN0KDUsNSw1LDUpOw0KKzwvc2NyaXB0Pg0KKzwv
Ym9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvbGF5b3V0L3JlZnRlc3RzL2J1Z3MvNjM1Mzcz
LTIuaHRtbCBiL2xheW91dC9yZWZ0ZXN0cy9idWdzLzYzNTM3My0yLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9sYXlvdXQvcmVmdGVzdHMvYnVncy82MzUzNzMt
Mi5odG1sCkBAIC0wLDAgKzEsMjggQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFk
Pg0KKzx0aXRsZT5UZXN0aW5nIGNvbXBvc2l0aW5nIG9mIHRyYW5zbHVjZW50IGxheWVyIHdpdGgg
Y29tcGxleCB2aXNpYmxlIHJlZ2lvbjwvdGl0bGU+DQorPHN0eWxlPg0KK2JvZHkgeyBiYWNrZ3Jv
dW5kOndoaXRlOyB9DQorI2Qgew0KKwlwb3NpdGlvbjphYnNvbHV0ZTsNCisJdG9wOjIwMHB4Ow0K
KwlsZWZ0OjIwMHB4Ow0KKyAgICBmb250LXNpemU6MzBweDsNCisgICAgdHJhbnNmb3JtOnJvdGF0
ZSgzMGRlZyk7DQorICAgIC1tb3otdHJhbnNmb3JtOnJvdGF0ZSgzMGRlZyk7DQorfQ0KK3NwYW4g
eyBkaXNwbGF5OmJsb2NrOyBiYWNrZ3JvdW5kOnJnYmEoMjAwLDIwMCwyMDAsIDAuNCk7IH0NCis8
L3N0eWxlPg0KKzwvaGVhZD4NCis8Ym9keT4NCis8ZGl2IGlkPSJkIj48c3BhbiBzdHlsZT0id2lk
dGg6MjBweCI+PGNhbnZhcyBpZD0iYyIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIj48L2NhbnZhcz48
L3NwYW4+DQorPHNwYW4gc3R5bGU9IndpZHRoOjEwMHB4OyBoZWlnaHQ6MjBweDsiPjwvc3Bhbj4N
Cis8L2Rpdj4NCis8c2NyaXB0Pg0KK3ZhciBjdHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
YyIpLmdldENvbnRleHQoIjJkIik7DQorY3R4LmZpbGxTdHlsZSA9ICJsaW1lIjsNCitjdHguZmls
bFJlY3QoNSw1LDUsNSk7DQorPC9zY3JpcHQ+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1n
aXQgYS9sYXlvdXQvcmVmdGVzdHMvYnVncy82MzUzNzMtMy1yZWYuaHRtbCBiL2xheW91dC9yZWZ0
ZXN0cy9idWdzLzYzNTM3My0zLXJlZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvbGF5b3V0L3JlZnRlc3RzL2J1Z3MvNjM1MzczLTMtcmVmLmh0bWwKQEAgLTAs
MCArMSwyOSBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorPHRpdGxlPlRl
c3RpbmcgY29tcG9zaXRpbmcgb2YgY29tcG9uZW50IGFscGhhIGxheWVyIHdpdGggY29tcGxleCB2
aXNpYmxlIHJlZ2lvbjwvdGl0bGU+DQorPHN0eWxlPg0KK2JvZHkgeyBiYWNrZ3JvdW5kOndoaXRl
OyB9DQorI2Qgew0KKwlwb3NpdGlvbjphYnNvbHV0ZTsNCisJdG9wOjIwMHB4Ow0KKwlsZWZ0OjIw
MHB4Ow0KKyAgICBmb250LXNpemU6MzBweDsNCisgICAgdHJhbnNmb3JtOnJvdGF0ZSgzMGRlZyk7
DQorICAgIC1tb3otdHJhbnNmb3JtOnJvdGF0ZSgzMGRlZyk7DQorICAgIGJhY2tncm91bmQ6d2hp
dGU7DQorfQ0KK3NwYW4geyBkaXNwbGF5OmJsb2NrOyBiYWNrZ3JvdW5kOnJnYmEoMjAwLDIwMCwy
MDAsIDAuNCk7IH0NCis8L3N0eWxlPg0KKzwvaGVhZD4NCis8Ym9keT4NCis8ZGl2IGlkPSJkIj48
c3BhbiBzdHlsZT0id2lkdGg6MjBweCI+PGNhbnZhcyBpZD0iYyIgd2lkdGg9IjIwIiBoZWlnaHQ9
IjIwIj48L2NhbnZhcz5YWVo8L3NwYW4+DQorPHNwYW4gc3R5bGU9IndpZHRoOjEwMHB4OyBoZWln
aHQ6MjBweDsiPjwvc3Bhbj4NCis8L2Rpdj4NCis8c2NyaXB0Pg0KK3ZhciBjdHggPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiYyIpLmdldENvbnRleHQoIjJkIik7DQorY3R4LmZpbGxTdHlsZSA9
ICJsaW1lIjsNCitjdHguZmlsbFJlY3QoNSw1LDUsNSk7DQorPC9zY3JpcHQ+DQorPC9ib2R5Pg0K
KzwvaHRtbD4NCmRpZmYgLS1naXQgYS9sYXlvdXQvcmVmdGVzdHMvYnVncy82MzUzNzMtMy5odG1s
IGIvbGF5b3V0L3JlZnRlc3RzL2J1Z3MvNjM1MzczLTMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2xheW91dC9yZWZ0ZXN0cy9idWdzLzYzNTM3My0zLmh0bWwK
QEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorPHRp
dGxlPlRlc3RpbmcgY29tcG9zaXRpbmcgb2YgY29tcG9uZW50IGFscGhhIGxheWVyIHdpdGggY29t
cGxleCB2aXNpYmxlIHJlZ2lvbjwvdGl0bGU+DQorPHN0eWxlPg0KK2JvZHkgeyBiYWNrZ3JvdW5k
OndoaXRlOyB9DQorI2Qgew0KKwlwb3NpdGlvbjphYnNvbHV0ZTsNCisJdG9wOjIwMHB4Ow0KKwls
ZWZ0OjIwMHB4Ow0KKyAgICBmb250LXNpemU6MzBweDsNCisgICAgdHJhbnNmb3JtOnJvdGF0ZSgz
MGRlZyk7DQorICAgIC1tb3otdHJhbnNmb3JtOnJvdGF0ZSgzMGRlZyk7DQorfQ0KK3NwYW4geyBk
aXNwbGF5OmJsb2NrOyBiYWNrZ3JvdW5kOnJnYmEoMjAwLDIwMCwyMDAsIDAuNCk7IH0NCis8L3N0
eWxlPg0KKzwvaGVhZD4NCis8Ym9keT4NCis8ZGl2IGlkPSJkIj48c3BhbiBzdHlsZT0id2lkdGg6
MjBweCI+PGNhbnZhcyBpZD0iYyIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIj48L2NhbnZhcz5YWVo8
L3NwYW4+DQorPHNwYW4gc3R5bGU9IndpZHRoOjEwMHB4OyBoZWlnaHQ6MjBweDsiPjwvc3Bhbj4N
Cis8L2Rpdj4NCis8c2NyaXB0Pg0KK3ZhciBjdHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
YyIpLmdldENvbnRleHQoIjJkIik7DQorY3R4LmZpbGxTdHlsZSA9ICJsaW1lIjsNCitjdHguZmls
bFJlY3QoNSw1LDUsNSk7DQorPC9zY3JpcHQ+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1n
aXQgYS9sYXlvdXQvcmVmdGVzdHMvYnVncy9yZWZ0ZXN0Lmxpc3QgYi9sYXlvdXQvcmVmdGVzdHMv
YnVncy9yZWZ0ZXN0Lmxpc3QKLS0tIGEvbGF5b3V0L3JlZnRlc3RzL2J1Z3MvcmVmdGVzdC5saXN0
CisrKyBiL2xheW91dC9yZWZ0ZXN0cy9idWdzL3JlZnRlc3QubGlzdApAQCAtMTYwOCw4ICsxNjA4
LDExIEBAIEhUVFAoLi4pID09IDYyMTI1My0yLWV4dGVybmFsRmlsdGVyLmh0bWwKIEhUVFAoLi4p
ID09IDYxOTUxMS0xLmh0bWwgNjE5NTExLTEtcmVmLmh0bWwKIHJhbmRvbS1pZih3aW5XaWRnZXQp
ID09IDYyMTkxOC0xLnN2ZyA2MjE5MTgtMS1yZWYuc3ZnICMgMS1waXhlbCBkaWFjcml0aWMgcG9z
aXRpb25pbmcgZGlzY3JlcGFuY3kgaW4gcm90YXRlZCB0ZXh0IChtYXkgZGVwZW5kIG9uIHBsYXRm
b3JtIGZvbnRzKQogcmFuZG9tLWlmKHdpbldpZGdldCkgSFRUUCguLikgPT0gNjIxOTE4LTIuc3Zn
IDYyMTkxOC0yLXJlZi5zdmcgIyBzYW1lIDFweCBpc3N1ZSBhcyBhYm92ZSwgYW5kIEhUVFAoLi4p
IGZvciBmaWx0ZXJzLnN2ZywgdXNlZCB0byBtYXNrIGFudGlhbGlhc2luZyBpc3N1ZXMgd2hlcmUg
Z2x5cGhzIHRvdWNoCiA9PSA2MjU0MDktMS5odG1sIDYyNTQwOS0xLXJlZi5odG1sCiA9PSA2Mjcz
OTMtMS5odG1sIGFib3V0OmJsYW5rCiA9PSA2MzEzNTItMS5odG1sIDYzMTM1Mi0xLXJlZi5odG1s
CiBmYWlscy1pZih3aW5XaWRnZXQpID09IDYzMjc4MS12ZXJ5YmlnLmh0bWwgNjMyNzgxLXJlZi5o
dG1sICMgbGFyZ2UgY2FudmFzIGVsZW1lbnRzIGFyZSBub3QgZHJhd24gb24gV2luZG93cywgc2Vl
IGJ1ZyA2MzM5MzYKID09IDYzMjc4MS1ub3JtYWxzaXplLmh0bWwgNjMyNzgxLXJlZi5odG1sCis9
PSA2MzUzNzMtMS5odG1sIDYzNTM3MzEtMS1yZWYuaHRtbAorPT0gNjM1MzczLTIuaHRtbCA2MzUz
NzMxLTItcmVmLmh0bWwKKz09IDYzNTM3My0zLmh0bWwgNjM1MzczMS0zLXJlZi5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>514129</attachid>
            <date>2011-02-21 20:32:32 -0800</date>
            <delta_ts>2011-02-28 12:13:12 -0800</delta_ts>
            <desc>D3D9 and D3D10 fix</desc>
            <filename>bug635373</filename>
            <type>text/plain</type>
            <size>13852</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">RnJvbTogUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYmVydEBvY2FsbGFoYW4ub3JnPgpCdWcgNjM1Mzcz
LiBJZiB3ZSBuZWVkIHRvIHJlc2FtcGxlIGEgVGhlYmVzTGF5ZXIgdGV4dHVyZSwgbWFrZSBzdXJl
IHdlIG1ha2UgYWxsIHRoZSBwaXhlbHMgb2YgdGhlIHRleHR1cmUgdmFsaWQgaW4gY2FzZSB0aGV5
IGdldCBzYW1wbGVkLiByPWJhcwoKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNkMTAvVGhlYmVz
TGF5ZXJEM0QxMC5jcHAgYi9nZngvbGF5ZXJzL2QzZDEwL1RoZWJlc0xheWVyRDNEMTAuY3BwCi0t
LSBhL2dmeC9sYXllcnMvZDNkMTAvVGhlYmVzTGF5ZXJEM0QxMC5jcHAKKysrIGIvZ2Z4L2xheWVy
cy9kM2QxMC9UaGViZXNMYXllckQzRDEwLmNwcApAQCAtNDksMTYgKzQ5LDE3IEBACiAjaW5jbHVk
ZSAiUmVhZGJhY2tQcm9jZXNzb3IuaCIKIAogbmFtZXNwYWNlIG1vemlsbGEgewogbmFtZXNwYWNl
IGxheWVycyB7CiAKIFRoZWJlc0xheWVyRDNEMTA6OlRoZWJlc0xheWVyRDNEMTAoTGF5ZXJNYW5h
Z2VyRDNEMTAgKmFNYW5hZ2VyKQogICA6IFRoZWJlc0xheWVyKGFNYW5hZ2VyLCBOVUxMKQogICAs
IExheWVyRDNEMTAoYU1hbmFnZXIpCisgICwgbUN1cnJlbnRTdXJmYWNlTW9kZShTVVJGQUNFX09Q
QVFVRSkKIHsKICAgbUltcGxEYXRhID0gc3RhdGljX2Nhc3Q8TGF5ZXJEM0QxMCo+KHRoaXMpOwog
fQogCiBUaGViZXNMYXllckQzRDEwOjp+VGhlYmVzTGF5ZXJEM0QxMCgpCiB7CiB9CiAKQEAgLTEx
NCwzMCArMTE1LDM0IEBAIHZvaWQgVGhlYmVzTGF5ZXJEM0QxMDo6Q29weVJlZ2lvbihJRDNEMTAK
IAogdm9pZAogVGhlYmVzTGF5ZXJEM0QxMDo6UmVuZGVyTGF5ZXIoKQogewogICBpZiAoIW1UZXh0
dXJlKSB7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgbnNJbnRSZWN0IHZpc2libGVSZWN0ID0gbVZp
c2libGVSZWdpb24uR2V0Qm91bmRzKCk7Ci0KICAgU2V0RWZmZWN0VHJhbnNmb3JtQW5kT3BhY2l0
eSgpOwogCiAgIElEM0QxMEVmZmVjdFRlY2huaXF1ZSAqdGVjaG5pcXVlOwotICBpZiAobVRleHR1
cmVPbldoaXRlKSB7CisgIHN3aXRjaCAobUN1cnJlbnRTdXJmYWNlTW9kZSkgeworICBjYXNlIFNV
UkZBQ0VfQ09NUE9ORU5UX0FMUEhBOgogICAgIHRlY2huaXF1ZSA9IGVmZmVjdCgpLT5HZXRUZWNo
bmlxdWVCeU5hbWUoIlJlbmRlckNvbXBvbmVudEFscGhhTGF5ZXIiKTsKLSAgfSBlbHNlIGlmIChD
YW5Vc2VPcGFxdWVTdXJmYWNlKCkpIHsKKyAgICBicmVhazsKKyAgY2FzZSBTVVJGQUNFX09QQVFV
RToKICAgICB0ZWNobmlxdWUgPSBlZmZlY3QoKS0+R2V0VGVjaG5pcXVlQnlOYW1lKCJSZW5kZXJS
R0JMYXllclByZW11bCIpOwotICB9IGVsc2UgeworICAgIGJyZWFrOworICBjYXNlIFNVUkZBQ0Vf
U0lOR0xFX0NIQU5ORUxfQUxQSEE6CiAgICAgdGVjaG5pcXVlID0gZWZmZWN0KCktPkdldFRlY2hu
aXF1ZUJ5TmFtZSgiUmVuZGVyUkdCQUxheWVyUHJlbXVsIik7CisgICAgYnJlYWs7CisgIGRlZmF1
bHQ6CisgICAgTlNfRVJST1IoIlVua25vd24gbW9kZSIpOworICAgIHJldHVybjsKICAgfQogCi0K
ICAgbnNJbnRSZWdpb25SZWN0SXRlcmF0b3IgaXRlcihtVmlzaWJsZVJlZ2lvbik7CiAKICAgY29u
c3QgbnNJbnRSZWN0ICppdGVyUmVjdDsKICAgaWYgKG1TUlZpZXcpIHsKICAgICBlZmZlY3QoKS0+
R2V0VmFyaWFibGVCeU5hbWUoInRSR0IiKS0+QXNTaGFkZXJSZXNvdXJjZSgpLT5TZXRSZXNvdXJj
ZShtU1JWaWV3KTsKICAgfQogICBpZiAobVNSVmlld09uV2hpdGUpIHsKICAgICBlZmZlY3QoKS0+
R2V0VmFyaWFibGVCeU5hbWUoInRSR0JXaGl0ZSIpLT5Bc1NoYWRlclJlc291cmNlKCktPlNldFJl
c291cmNlKG1TUlZpZXdPbldoaXRlKTsKQEAgLTE0OSwyMCArMTU0LDIwIEBAIFRoZWJlc0xheWVy
RDNEMTA6OlJlbmRlckxheWVyKCkKICAgICAgICAgKGZsb2F0KWl0ZXJSZWN0LT54LAogICAgICAg
ICAoZmxvYXQpaXRlclJlY3QtPnksCiAgICAgICAgIChmbG9hdClpdGVyUmVjdC0+d2lkdGgsCiAg
ICAgICAgIChmbG9hdClpdGVyUmVjdC0+aGVpZ2h0KQogICAgICAgKTsKIAogICAgIGVmZmVjdCgp
LT5HZXRWYXJpYWJsZUJ5TmFtZSgidlRleHR1cmVDb29yZHMiKS0+QXNWZWN0b3IoKS0+U2V0Rmxv
YXRWZWN0b3IoCiAgICAgICBTaGFkZXJDb25zdGFudFJlY3REM0QxMCgKLSAgICAgICAgKGZsb2F0
KShpdGVyUmVjdC0+eCAtIHZpc2libGVSZWN0LngpIC8gKGZsb2F0KXZpc2libGVSZWN0LndpZHRo
LAotICAgICAgICAoZmxvYXQpKGl0ZXJSZWN0LT55IC0gdmlzaWJsZVJlY3QueSkgLyAoZmxvYXQp
dmlzaWJsZVJlY3QuaGVpZ2h0LAotICAgICAgICAoZmxvYXQpaXRlclJlY3QtPndpZHRoIC8gKGZs
b2F0KXZpc2libGVSZWN0LndpZHRoLAotICAgICAgICAoZmxvYXQpaXRlclJlY3QtPmhlaWdodCAv
IChmbG9hdCl2aXNpYmxlUmVjdC5oZWlnaHQpCisgICAgICAgIChmbG9hdCkoaXRlclJlY3QtPngg
LSBtVGV4dHVyZVJlY3QueCkgLyAoZmxvYXQpbVRleHR1cmVSZWN0LndpZHRoLAorICAgICAgICAo
ZmxvYXQpKGl0ZXJSZWN0LT55IC0gbVRleHR1cmVSZWN0LnkpIC8gKGZsb2F0KW1UZXh0dXJlUmVj
dC5oZWlnaHQsCisgICAgICAgIChmbG9hdClpdGVyUmVjdC0+d2lkdGggLyAoZmxvYXQpbVRleHR1
cmVSZWN0LndpZHRoLAorICAgICAgICAoZmxvYXQpaXRlclJlY3QtPmhlaWdodCAvIChmbG9hdClt
VGV4dHVyZVJlY3QuaGVpZ2h0KQogICAgICAgKTsKIAogICAgIHRlY2huaXF1ZS0+R2V0UGFzc0J5
SW5kZXgoMCktPkFwcGx5KDApOwogICAgIGRldmljZSgpLT5EcmF3KDQsIDApOwogICB9CiAKICAg
Ly8gU2V0IGJhY2sgdG8gZGVmYXVsdC4KICAgZWZmZWN0KCktPkdldFZhcmlhYmxlQnlOYW1lKCJ2
VGV4dHVyZUNvb3JkcyIpLT5Bc1ZlY3RvcigpLT4KQEAgLTE3MSwyMSArMTc2LDQ0IEBAIFRoZWJl
c0xheWVyRDNEMTA6OlJlbmRlckxheWVyKCkKIAogdm9pZAogVGhlYmVzTGF5ZXJEM0QxMDo6VmFs
aWRhdGUoUmVhZGJhY2tQcm9jZXNzb3IgKmFSZWFkYmFjaykKIHsKICAgaWYgKG1WaXNpYmxlUmVn
aW9uLklzRW1wdHkoKSkgewogICAgIHJldHVybjsKICAgfQogCisgIG5zSW50UmVjdCBuZXdUZXh0
dXJlUmVjdCA9IG1WaXNpYmxlUmVnaW9uLkdldEJvdW5kcygpOworCiAgIFN1cmZhY2VNb2RlIG1v
ZGUgPSBHZXRTdXJmYWNlTW9kZSgpOwogICBpZiAobW9kZSA9PSBTVVJGQUNFX0NPTVBPTkVOVF9B
TFBIQSAmJgogICAgICAgKCFtUGFyZW50IHx8ICFtUGFyZW50LT5TdXBwb3J0c0NvbXBvbmVudEFs
cGhhQ2hpbGRyZW4oKSkpIHsKICAgICBtb2RlID0gU1VSRkFDRV9TSU5HTEVfQ0hBTk5FTF9BTFBI
QTsKICAgfQorICAvLyBJZiB3ZSBoYXZlIGEgdHJhbnNmb3JtIHRoYXQgcmVxdWlyZXMgcmVzYW1w
bGluZyBvZiBvdXIgdGV4dHVyZSwgdGhlbgorICAvLyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBk
b24ndCBzYW1wbGUgcGl4ZWxzIHRoYXQgaGF2ZW4ndCBiZWVuIGRyYXduLgorICAvLyBXZSBjbGFt
cCBzYW1wbGUgY29vcmRpbmF0ZXMgdG8gdGhlIHRleHR1cmUgcmVjdCwgYnV0IHdoZW4gdGhlIHZp
c2libGUgcmVnaW9uCisgIC8vIGRvZXNuJ3QgZmlsbCB0aGUgZW50aXJlIHRleHR1cmUgcmVjdCB3
ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkcmF3IGFsbCB0aGUKKyAgLy8gcGl4ZWxzIGluIHRoZSB0
ZXh0dXJlIHJlY3QgYW55d2F5IGluIGNhc2UgdGhleSBnZXQgc2FtcGxlZC4KKyAgbnNJbnRSZWdp
b24gbmVlZGVkUmVnaW9uID0gbVZpc2libGVSZWdpb247CisgIGlmIChuZWVkZWRSZWdpb24uR2V0
Qm91bmRzKCkgIT0gbmV3VGV4dHVyZVJlY3QgfHwKKyAgICAgIG5lZWRlZFJlZ2lvbi5HZXROdW1S
ZWN0cygpID4gMSkgeworICAgIGdmeE1hdHJpeCB0cmFuc2Zvcm0yZDsKKyAgICBpZiAoIUdldEVm
ZmVjdGl2ZVRyYW5zZm9ybSgpLklzMkQoJnRyYW5zZm9ybTJkKSB8fAorICAgICAgICB0cmFuc2Zv
cm0yZC5IYXNOb25JbnRlZ2VyVHJhbnNsYXRpb24oKSkgeworICAgICAgbmVlZGVkUmVnaW9uID0g
bmV3VGV4dHVyZVJlY3Q7CisgICAgICBpZiAobW9kZSA9PSBTVVJGQUNFX09QQVFVRSkgeworICAg
ICAgICAvLyBXZSdyZSBnb2luZyB0byBwYWludCBvdXRzaWRlIHRoZSB2aXNpYmxlIHJlZ2lvbiwg
YnV0IGxheW91dCBoYXNuJ3QKKyAgICAgICAgLy8gcHJvbWlzZWQgdGhhdCBpdCB3aWxsIHBhaW50
IG9wYXF1ZWx5IHRoZXJlLCBzbyB3ZSdsbCBoYXZlIHRvCisgICAgICAgIC8vIHRyZWF0IHRoaXMg
bGF5ZXIgYXMgdHJhbnNwYXJlbnQuCisgICAgICAgIG1vZGUgPSBTVVJGQUNFX1NJTkdMRV9DSEFO
TkVMX0FMUEhBOworICAgICAgfQorICAgIH0KKyAgfQorICBtQ3VycmVudFN1cmZhY2VNb2RlID0g
bW9kZTsKIAogICBWZXJpZnlDb250ZW50VHlwZShtb2RlKTsKIAogICBmbG9hdCB4cmVzLCB5cmVz
OwogICBHZXREZXNpcmVkUmVzb2x1dGlvbnMoeHJlcywgeXJlcyk7CiAKICAgLy8gSWYgb3VyIHJl
c29sdXRpb24gY2hhbmdlZCwgd2UgbmVlZCBuZXcgc2l6ZWQgdGV4dHVyZXMsIGRlbGV0ZSB0aGUg
b2xkIG9uZXMuCiAgIGlmIChSZXNvbHV0aW9uQ2hhbmdlZCh4cmVzLCB5cmVzKSkgewpAQCAtMTk0
LDEwNyArMjIyLDk2IEBAIFRoZWJlc0xheWVyRDNEMTA6OlZhbGlkYXRlKFJlYWRiYWNrUHJvY2UK
ICAgfQogCiAgIG5zVEFycmF5PFJlYWRiYWNrUHJvY2Vzc29yOjpVcGRhdGU+IHJlYWRiYWNrVXBk
YXRlczsKICAgbnNJbnRSZWdpb24gcmVhZGJhY2tSZWdpb247CiAgIGlmIChhUmVhZGJhY2sgJiYg
VXNlZEZvclJlYWRiYWNrKCkpIHsKICAgICBhUmVhZGJhY2stPkdldFRoZWJlc0xheWVyVXBkYXRl
cyh0aGlzLCAmcmVhZGJhY2tVcGRhdGVzLCAmcmVhZGJhY2tSZWdpb24pOwogICB9CiAKLSAgbnNJ
bnRSZWN0IHZpc2libGVSZWN0ID0gbVZpc2libGVSZWdpb24uR2V0Qm91bmRzKCk7Ci0KICAgaWYg
KG1UZXh0dXJlKSB7Ci0gICAgaWYgKCFtVGV4dHVyZVJlZ2lvbi5Jc0VxdWFsKG1WaXNpYmxlUmVn
aW9uKSkgeworICAgIGlmIChtVGV4dHVyZVJlY3QgIT0gbmV3VGV4dHVyZVJlY3QpIHsKICAgICAg
IG5zUmVmUHRyPElEM0QxMFRleHR1cmUyRD4gb2xkVGV4dHVyZSA9IG1UZXh0dXJlOwogICAgICAg
bVRleHR1cmUgPSBuc251bGw7CiAgICAgICBuc1JlZlB0cjxJRDNEMTBUZXh0dXJlMkQ+IG9sZFRl
eHR1cmVPbldoaXRlID0gbVRleHR1cmVPbldoaXRlOwogICAgICAgbVRleHR1cmVPbldoaXRlID0g
bnNudWxsOwogCi0gICAgICBuc0ludFJlZ2lvbiByZXRhaW5SZWdpb24gPSBtVGV4dHVyZVJlZ2lv
bjsKLSAgICAgIG5zSW50UmVjdCBvbGRCb3VuZHMgPSBtVGV4dHVyZVJlZ2lvbi5HZXRCb3VuZHMo
KTsKLSAgICAgIG5zSW50UmVjdCBuZXdCb3VuZHMgPSBtVmlzaWJsZVJlZ2lvbi5HZXRCb3VuZHMo
KTsKLQotICAgICAgQ3JlYXRlTmV3VGV4dHVyZXMoZ2Z4SW50U2l6ZShuZXdCb3VuZHMud2lkdGgs
IG5ld0JvdW5kcy5oZWlnaHQpLCBtb2RlKTsKLQorICAgICAgbnNJbnRSZWdpb24gcmV0YWluUmVn
aW9uID0gbVRleHR1cmVSZWN0OwogICAgICAgLy8gT2xkIHZpc2libGUgcmVnaW9uIHdpbGwgYmVj
b21lIHRoZSByZWdpb24gdGhhdCBpcyBjb3ZlcmVkIGJ5IGJvdGggdGhlCiAgICAgICAvLyBvbGQg
YW5kIHRoZSBuZXcgdmlzaWJsZSByZWdpb24uCiAgICAgICByZXRhaW5SZWdpb24uQW5kKHJldGFp
blJlZ2lvbiwgbVZpc2libGVSZWdpb24pOwogICAgICAgLy8gTm8gcG9pbnQgaW4gcmV0YWluaW5n
IHBhcnRzIHdoaWNoIHdlcmUgbm90IHZhbGlkLgogICAgICAgcmV0YWluUmVnaW9uLkFuZChyZXRh
aW5SZWdpb24sIG1WYWxpZFJlZ2lvbik7CiAKKyAgICAgIENyZWF0ZU5ld1RleHR1cmVzKGdmeElu
dFNpemUobmV3VGV4dHVyZVJlY3Qud2lkdGgsIG5ld1RleHR1cmVSZWN0LmhlaWdodCksIG1vZGUp
OworCiAgICAgICBuc0ludFJlY3QgbGFyZ2VSZWN0ID0gcmV0YWluUmVnaW9uLkdldExhcmdlc3RS
ZWN0YW5nbGUoKTsKIAogICAgICAgLy8gSWYgd2UgaGFkIG5vIGhhcmR3YXJlIHRleHR1cmUgYmVm
b3JlLCBoYXZlIG5vIHJldGFpbmVkIGFyZWEgbGFyZ2VyIHRoYW4KICAgICAgIC8vIHRoZSByZXRl
bnRpb24gdGhyZXNob2xkIG9yIHRoZSByZXF1ZXN0ZWQgcmVzb2x1dGlvbiBoYXMgY2hhbmdlZCwg
CiAgICAgICAvLyB3ZSdyZSBub3QgcmV0YWluaW5nIGFuZCBhcmUgZG9uZSBoZXJlLiBJZiBvdXIg
dGV4dHVyZSBjcmVhdGlvbiBmYWlsZWQgCiAgICAgICAvLyB0aGlzIGNhbiBtZWFuIGEgZGV2aWNl
IHJlc2V0IGlzIHBlbmRpbmcgYW5kIHdlIHNob3VsZCBzaWxlbnRseSBpZ25vcmUgdGhlICAgCiAg
ICAgICAvLyBmYWlsdXJlLiBJbiB0aGUgZnV0dXJlIHdoZW4gZGV2aWNlIGZhaWx1cmVzIGFyZSBw
cm9wZXJseSBoYW5kbGVkIHdlIAogICAgICAgLy8gc2hvdWxkIHRlc3QgZm9yIHRoZSB0eXBlIG9m
IGZhaWx1cmUgYW5kIGdyYWNlZnVsbHkgaGFuZGxlIGRpZmZlcmVudCAKICAgICAgIC8vIGZhaWx1
cmVzLiBTZWUgYnVnIDU2OTA4MS4KICAgICAgIGlmICghb2xkVGV4dHVyZSB8fCAhbVRleHR1cmUg
fHwKICAgICAgICAgICBsYXJnZVJlY3Qud2lkdGggKiBsYXJnZVJlY3QuaGVpZ2h0IDwgUkVURU5U
SU9OX1RIUkVTSE9MRCB8fAogICAgICAgICAgIFJlc29sdXRpb25DaGFuZ2VkKHhyZXMsIHlyZXMp
KSB7CiAgICAgICAgIG1WYWxpZFJlZ2lvbi5TZXRFbXB0eSgpOwogICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgQ29weVJlZ2lvbihvbGRUZXh0dXJlLCBvbGRCb3VuZHMuVG9wTGVmdCgpLAotICAgICAg
ICAgICAgICAgICAgIG1UZXh0dXJlLCBuZXdCb3VuZHMuVG9wTGVmdCgpLAorICAgICAgICBDb3B5
UmVnaW9uKG9sZFRleHR1cmUsIG1UZXh0dXJlUmVjdC5Ub3BMZWZ0KCksCisgICAgICAgICAgICAg
ICAgICAgbVRleHR1cmUsIG5ld1RleHR1cmVSZWN0LlRvcExlZnQoKSwKICAgICAgICAgICAgICAg
ICAgICByZXRhaW5SZWdpb24sICZtVmFsaWRSZWdpb24sCiAgICAgICAgICAgICAgICAgICAgeHJl
cywgeXJlcyk7CiAgICAgICAgIGlmIChvbGRUZXh0dXJlT25XaGl0ZSkgewotICAgICAgICAgIENv
cHlSZWdpb24ob2xkVGV4dHVyZU9uV2hpdGUsIG9sZEJvdW5kcy5Ub3BMZWZ0KCksCi0gICAgICAg
ICAgICAgICAgICAgICBtVGV4dHVyZU9uV2hpdGUsIG5ld0JvdW5kcy5Ub3BMZWZ0KCksCisgICAg
ICAgICAgQ29weVJlZ2lvbihvbGRUZXh0dXJlT25XaGl0ZSwgbVRleHR1cmVSZWN0LlRvcExlZnQo
KSwKKyAgICAgICAgICAgICAgICAgICAgIG1UZXh0dXJlT25XaGl0ZSwgbmV3VGV4dHVyZVJlY3Qu
VG9wTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgcmV0YWluUmVnaW9uLCAmbVZhbGlkUmVn
aW9uLAogICAgICAgICAgICAgICAgICAgICAgeHJlcywgeXJlcyk7CiAgICAgICAgIH0KICAgICAg
IH0KICAgICB9CiAgIH0KLSAgbVRleHR1cmVSZWdpb24gPSBtVmlzaWJsZVJlZ2lvbjsKKyAgbVRl
eHR1cmVSZWN0ID0gbmV3VGV4dHVyZVJlY3Q7CiAKICAgaWYgKCFtVGV4dHVyZSB8fCAobW9kZSA9
PSBTVVJGQUNFX0NPTVBPTkVOVF9BTFBIQSAmJiAhbVRleHR1cmVPbldoaXRlKSkgewotICAgIENy
ZWF0ZU5ld1RleHR1cmVzKGdmeEludFNpemUodmlzaWJsZVJlY3Qud2lkdGgsIHZpc2libGVSZWN0
LmhlaWdodCksIG1vZGUpOworICAgIENyZWF0ZU5ld1RleHR1cmVzKGdmeEludFNpemUobmV3VGV4
dHVyZVJlY3Qud2lkdGgsIG5ld1RleHR1cmVSZWN0LmhlaWdodCksIG1vZGUpOwogICAgIG1WYWxp
ZFJlZ2lvbi5TZXRFbXB0eSgpOwogICB9CiAKLSAgaWYgKCFtVmFsaWRSZWdpb24uSXNFcXVhbCht
VmlzaWJsZVJlZ2lvbikpIHsKKyAgbnNJbnRSZWdpb24gZHJhd1JlZ2lvbjsKKyAgZHJhd1JlZ2lv
bi5TdWIobmVlZGVkUmVnaW9uLCBtVmFsaWRSZWdpb24pOworCisgIGlmICghZHJhd1JlZ2lvbi5J
c0VtcHR5KCkpIHsKICAgICBMYXllck1hbmFnZXJEM0QxMDo6Q2FsbGJhY2tJbmZvIGNiSW5mbyA9
IG1EM0RNYW5hZ2VyLT5HZXRDYWxsYmFja0luZm8oKTsKICAgICBpZiAoIWNiSW5mby5DYWxsYmFj
aykgewogICAgICAgTlNfRVJST1IoIkQzRDEwIHNob3VsZCBuZXZlciBuZWVkIHRvIHVwZGF0ZSBU
aGViZXNMYXllcnMgaW4gYW4gZW1wdHkgdHJhbnNhY3Rpb24iKTsKICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAvKiBXZSB1c2UgdGhlIGJvdW5kcyBvZiB0aGUgdmlzaWJsZSByZWdpb24gYmVj
YXVzZSB3ZSBkcmF3IHRoZSBib3VuZHMgb2YKLSAgICAgKiB0aGlzIHJlZ2lvbiB3aGVuIHdlIGRy
YXcgdGhpcyBlbnRpcmUgdGV4dHVyZS4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdAotICAgICAq
IHRoZSBhcmVhcyB0aGF0IGFyZW4ndCBmaWxsZWQgd2l0aCBjb250ZW50IGdldCB0aGVpciBiYWNr
Z3JvdW5kIGRyYXduLgotICAgICAqIFRoaXMgaXMgYW4gaXNzdWUgZm9yIG9wYXF1ZSBzdXJmYWNl
cywgd2hpY2ggb3RoZXJ3aXNlIHdvbid0IGdldCB0aGVpcgotICAgICAqIGJhY2tncm91bmQgcGFp
bnRlZC4KLSAgICAgKi8KLSAgICBuc0ludFJlZ2lvbiByZWdpb247Ci0gICAgcmVnaW9uLlN1Yiht
VmlzaWJsZVJlZ2lvbiwgbVZhbGlkUmVnaW9uKTsKLQotICAgIERyYXdSZWdpb24ocmVnaW9uLCBt
b2RlKTsKKyAgICBEcmF3UmVnaW9uKGRyYXdSZWdpb24sIG1vZGUpOwogCiAgICAgaWYgKHJlYWRi
YWNrVXBkYXRlcy5MZW5ndGgoKSA+IDApIHsKICAgICAgIENEM0QxMF9URVhUVVJFMkRfREVTQyBk
ZXNjKERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaWJsZVJlY3Qud2lkdGgsIHZpc2libGVSZWN0LmhlaWdodCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RleHR1cmVSZWN0LndpZHRoLCBuZXdUZXh0dXJl
UmVjdC5oZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxLCAwLCBE
M0QxMF9VU0FHRV9TVEFHSU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE
MTBfQ1BVX0FDQ0VTU19SRUFEKTsKIAogICAgICAgbnNSZWZQdHI8SUQzRDEwVGV4dHVyZTJEPiBy
ZWFkYmFja1RleHR1cmU7CiAgICAgICBkZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBO
VUxMLCBnZXR0ZXJfQWRkUmVmcyhyZWFkYmFja1RleHR1cmUpKTsKICAgICAgIGRldmljZSgpLT5D
b3B5UmVzb3VyY2UocmVhZGJhY2tUZXh0dXJlLCBtVGV4dHVyZSk7CiAKICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcmVhZGJhY2tVcGRhdGVzLkxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgbUQz
RE1hbmFnZXItPnJlYWRiYWNrTWFuYWdlcigpLT5Qb3N0VGFzayhyZWFkYmFja1RleHR1cmUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlYWRiYWNr
VXBkYXRlc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZnhQb2ludCh2aXNpYmxlUmVjdC54LCB2aXNpYmxlUmVjdC55KSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z4UG9pbnQobmV3VGV4dHVy
ZVJlY3QueCwgbmV3VGV4dHVyZVJlY3QueSkpOwogICAgICAgfQogICAgIH0KIAotICAgIG1WYWxp
ZFJlZ2lvbiA9IG1WaXNpYmxlUmVnaW9uOworICAgIG1WYWxpZFJlZ2lvbiA9IG5lZWRlZFJlZ2lv
bjsKICAgfQogfQogCiB2b2lkCiBUaGViZXNMYXllckQzRDEwOjpMYXllck1hbmFnZXJEZXN0cm95
ZWQoKQogewogICBtRDNETWFuYWdlciA9IG5zbnVsbDsKIH0KZGlmZiAtLWdpdCBhL2dmeC9sYXll
cnMvZDNkMTAvVGhlYmVzTGF5ZXJEM0QxMC5oIGIvZ2Z4L2xheWVycy9kM2QxMC9UaGViZXNMYXll
ckQzRDEwLmgKLS0tIGEvZ2Z4L2xheWVycy9kM2QxMC9UaGViZXNMYXllckQzRDEwLmgKKysrIGIv
Z2Z4L2xheWVycy9kM2QxMC9UaGViZXNMYXllckQzRDEwLmgKQEAgLTcwLDE4ICs3MCwyMSBAQCBw
cml2YXRlOgogICBuc1JlZlB0cjxJRDNEMTBTaGFkZXJSZXNvdXJjZVZpZXc+IG1TUlZpZXc7CiAK
ICAgLyogVGV4dHVyZSBmb3IgcmVuZGVyLW9uLXdoaXRldyB3aGVuIGRvaW5nIGNvbXBvbmVudCBh
bHBoYSAqLwogICBuc1JlZlB0cjxJRDNEMTBUZXh0dXJlMkQ+IG1UZXh0dXJlT25XaGl0ZTsKIAog
ICAvKiBTaGFkZXIgcmVzb3VyY2UgdmlldyBmb3Igb3VyIHJlbmRlci1vbi13aGl0ZSB0ZXh0dXJl
ICovCiAgIG5zUmVmUHRyPElEM0QxMFNoYWRlclJlc291cmNlVmlldz4gbVNSVmlld09uV2hpdGU7
CiAKLSAgLyogVmlzaWJsZSByZWdpb24gdXNlZCB3aGVuIHdlIGRyZXcgdGhlIGNvbnRlbnRzIG9m
IHRoZSB0ZXh0dXJlcyAqLwotICBuc0ludFJlZ2lvbiBtVGV4dHVyZVJlZ2lvbjsKKyAgLyogQXJl
YSBvZiBsYXllciBjdXJyZW50bHkgc3RvcmVkIGluIHRleHR1cmUocykgKi8KKyAgbnNJbnRSZWN0
IG1UZXh0dXJlUmVjdDsKKworICAvKiBMYXN0IHN1cmZhY2UgbW9kZSBzZXQgaW4gVmFsaWRhdGUo
KSAqLworICBTdXJmYWNlTW9kZSBtQ3VycmVudFN1cmZhY2VNb2RlOwogCiAgIC8qIENoZWNrcyBp
ZiBvdXIgRDJEIHN1cmZhY2UgaGFzIHRoZSByaWdodCBjb250ZW50IHR5cGUgKi8KICAgdm9pZCBW
ZXJpZnlDb250ZW50VHlwZShTdXJmYWNlTW9kZSBhTW9kZSk7CiAKICAgLyogVGhpcyBjb250YWlu
cyB0aGUgdGhlYmVzIHN1cmZhY2UgKi8KICAgbnNSZWZQdHI8Z2Z4QVN1cmZhY2U+IG1EMkRTdXJm
YWNlOwogCiAgIC8qIFRoaXMgY29udGFpbnMgdGhlIHRoZWJlcyBzdXJmYWNlIGZvciBvdXIgcmVu
ZGVyLW9uLXdoaXRlIHRleHR1cmUgKi8KZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNkOS9UaGVi
ZXNMYXllckQzRDkuY3BwIGIvZ2Z4L2xheWVycy9kM2Q5L1RoZWJlc0xheWVyRDNEOS5jcHAKLS0t
IGEvZ2Z4L2xheWVycy9kM2Q5L1RoZWJlc0xheWVyRDNEOS5jcHAKKysrIGIvZ2Z4L2xheWVycy9k
M2Q5L1RoZWJlc0xheWVyRDNEOS5jcHAKQEAgLTIwMywyMSArMjAzLDQ0IEBAIFRoZWJlc0xheWVy
RDNEOTo6UmVuZGVyVmlzaWJsZVJlZ2lvbigpCiAKIHZvaWQKIFRoZWJlc0xheWVyRDNEOTo6UmVu
ZGVyVGhlYmVzTGF5ZXIoUmVhZGJhY2tQcm9jZXNzb3IqIGFSZWFkYmFjaykKIHsKICAgaWYgKG1W
aXNpYmxlUmVnaW9uLklzRW1wdHkoKSkgewogICAgIHJldHVybjsKICAgfQogCisgIG5zSW50UmVj
dCBuZXdUZXh0dXJlUmVjdCA9IG1WaXNpYmxlUmVnaW9uLkdldEJvdW5kcygpOworCiAgIFN1cmZh
Y2VNb2RlIG1vZGUgPSBHZXRTdXJmYWNlTW9kZSgpOwogICBpZiAobW9kZSA9PSBTVVJGQUNFX0NP
TVBPTkVOVF9BTFBIQSAmJgogICAgICAgKCFtUGFyZW50IHx8ICFtUGFyZW50LT5TdXBwb3J0c0Nv
bXBvbmVudEFscGhhQ2hpbGRyZW4oKSkpIHsKICAgICBtb2RlID0gU1VSRkFDRV9TSU5HTEVfQ0hB
Tk5FTF9BTFBIQTsKICAgfQorICAvLyBJZiB3ZSBoYXZlIGEgdHJhbnNmb3JtIHRoYXQgcmVxdWly
ZXMgcmVzYW1wbGluZyBvZiBvdXIgdGV4dHVyZSwgdGhlbgorICAvLyB3ZSBuZWVkIHRvIG1ha2Ug
c3VyZSB3ZSBkb24ndCBzYW1wbGUgcGl4ZWxzIHRoYXQgaGF2ZW4ndCBiZWVuIGRyYXduLgorICAv
LyBXZSBjbGFtcCBzYW1wbGUgY29vcmRpbmF0ZXMgdG8gdGhlIHRleHR1cmUgcmVjdCwgYnV0IHdo
ZW4gdGhlIHZpc2libGUgcmVnaW9uCisgIC8vIGRvZXNuJ3QgZmlsbCB0aGUgZW50aXJlIHRleHR1
cmUgcmVjdCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkcmF3IGFsbCB0aGUKKyAgLy8gcGl4ZWxz
IGluIHRoZSB0ZXh0dXJlIHJlY3QgYW55d2F5IGluIGNhc2UgdGhleSBnZXQgc2FtcGxlZC4KKyAg
bnNJbnRSZWdpb24gbmVlZGVkUmVnaW9uID0gbVZpc2libGVSZWdpb247CisgIGlmIChuZWVkZWRS
ZWdpb24uR2V0Qm91bmRzKCkgIT0gbmV3VGV4dHVyZVJlY3QgfHwKKyAgICAgIG5lZWRlZFJlZ2lv
bi5HZXROdW1SZWN0cygpID4gMSkgeworICAgIGdmeE1hdHJpeCB0cmFuc2Zvcm0yZDsKKyAgICBp
ZiAoIUdldEVmZmVjdGl2ZVRyYW5zZm9ybSgpLklzMkQoJnRyYW5zZm9ybTJkKSB8fAorICAgICAg
ICB0cmFuc2Zvcm0yZC5IYXNOb25JbnRlZ2VyVHJhbnNsYXRpb24oKSkgeworICAgICAgbmVlZGVk
UmVnaW9uID0gbmV3VGV4dHVyZVJlY3Q7CisgICAgICBpZiAobW9kZSA9PSBTVVJGQUNFX09QQVFV
RSkgeworICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBwYWludCBvdXRzaWRlIHRoZSB2aXNpYmxl
IHJlZ2lvbiwgYnV0IGxheW91dCBoYXNuJ3QKKyAgICAgICAgLy8gcHJvbWlzZWQgdGhhdCBpdCB3
aWxsIHBhaW50IG9wYXF1ZWx5IHRoZXJlLCBzbyB3ZSdsbCBoYXZlIHRvCisgICAgICAgIC8vIHRy
ZWF0IHRoaXMgbGF5ZXIgYXMgdHJhbnNwYXJlbnQuCisgICAgICAgIG1vZGUgPSBTVVJGQUNFX1NJ
TkdMRV9DSEFOTkVMX0FMUEhBOworICAgICAgfQorICAgIH0KKyAgfQorCiAgIFZlcmlmeUNvbnRl
bnRUeXBlKG1vZGUpOwogICBVcGRhdGVUZXh0dXJlcyhtb2RlKTsKICAgaWYgKCFIYXZlVGV4dHVy
ZXMobW9kZSkpIHsKICAgICBOU19XQVJOSU5HKCJUZXh0dXJlIGNyZWF0aW9uIGZhaWxlZCIpOwog
ICAgIHJldHVybjsKICAgfQogCiAgIG5zVEFycmF5PFJlYWRiYWNrUHJvY2Vzc29yOjpVcGRhdGU+
IHJlYWRiYWNrVXBkYXRlczsKQEAgLTIyNywzMCArMjUwLDMwIEBAIFRoZWJlc0xheWVyRDNEOTo6
UmVuZGVyVGhlYmVzTGF5ZXIoUmVhZGIKICAgfQogCiAgIC8vIEJlY2F1c2UgdXBkYXRlcyB0byBE
M0Q5IFRoZWJlc0xheWVycyBhcmUgcmVuZGVyZWQgd2l0aCB0aGUgQ1BVLCB3ZSBkb24ndAogICAv
LyBoYXZlIHRvIGRvIHJlYWRiYWNrIGZyb20gRDNEOSBzdXJmYWNlcy4gSW5zdGVhZCB3ZSBtYWtl
IHN1cmUgdGhhdCBhbnkgYXJlYQogICAvLyBuZWVkZWQgZm9yIHJlYWRiYWNrIGlzIGluY2x1ZGVk
IGluIHRoZSBkcmF3UmVnaW9uIHdlIGFzayBsYXlvdXQgdG8gcmVuZGVyLgogICAvLyBUaGVuIHRo
ZSByZWFkYmFjayBhcmVhcyB3ZSBuZWVkIGNhbiBiZSBjb3BpZWQgb3V0IG9mIHRoZSB0ZW1wb3Jh
cnkKICAgLy8gZGVzdGluYXRpb25TdXJmYWNlIGluIERyYXdSZWdpb24uCiAgIG5zSW50UmVnaW9u
IGRyYXdSZWdpb247Ci0gIGRyYXdSZWdpb24uU3ViKG1WaXNpYmxlUmVnaW9uLCBtVmFsaWRSZWdp
b24pOworICBkcmF3UmVnaW9uLlN1YihuZWVkZWRSZWdpb24sIG1WYWxpZFJlZ2lvbik7CiAgIGRy
YXdSZWdpb24uT3IoZHJhd1JlZ2lvbiwgcmVhZGJhY2tSZWdpb24pOwogICAvLyBOU19BU1NFUlRJ
T04obVZpc2libGVSZWdpb24uQ29udGFpbnMocmVnaW9uKSwgIkJhZCByZWFkYmFjayByZWdpb24h
Iik7CiAKICAgaWYgKCFkcmF3UmVnaW9uLklzRW1wdHkoKSkgewogICAgIExheWVyTWFuYWdlckQz
RDk6OkNhbGxiYWNrSW5mbyBjYkluZm8gPSBtRDNETWFuYWdlci0+R2V0Q2FsbGJhY2tJbmZvKCk7
CiAgICAgaWYgKCFjYkluZm8uQ2FsbGJhY2spIHsKICAgICAgIE5TX0VSUk9SKCJEM0Q5IHNob3Vs
ZCBuZXZlciBuZWVkIHRvIHVwZGF0ZSBUaGViZXNMYXllcnMgaW4gYW4gZW1wdHkgdHJhbnNhY3Rp
b24iKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBEcmF3UmVnaW9uKGRyYXdSZWdpb24s
IG1vZGUsIHJlYWRiYWNrVXBkYXRlcyk7CiAKLSAgICBtVmFsaWRSZWdpb24gPSBtVmlzaWJsZVJl
Z2lvbjsKKyAgICBtVmFsaWRSZWdpb24gPSBuZWVkZWRSZWdpb247CiAgIH0KIAogICBTZXRTaGFk
ZXJUcmFuc2Zvcm1BbmRPcGFjaXR5KCk7CiAKICAgaWYgKG1vZGUgPT0gU1VSRkFDRV9DT01QT05F
TlRfQUxQSEEpIHsKICAgICBtRDNETWFuYWdlci0+U2V0U2hhZGVyTW9kZShEZXZpY2VNYW5hZ2Vy
RDNEOTo6Q09NUE9ORU5UTEFZRVJQQVNTMSk7CiAgICAgZGV2aWNlKCktPlNldFRleHR1cmUoMCwg
bVRleHR1cmUpOwogICAgIGRldmljZSgpLT5TZXRUZXh0dXJlKDEsIG1UZXh0dXJlT25XaGl0ZSk7
Cg==
</data>
<flag name="review"
          id="430391"
          type_id="937"
          status="+"
          setter="bas"
    />
    <flag name="approval2.0"
          id="431530"
          type_id="647"
          status="-"
          setter="mbeltzner"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>514156</attachid>
            <date>2011-02-22 03:01:41 -0800</date>
            <delta_ts>2011-02-24 18:43:59 -0800</delta_ts>
            <desc>GL fix</desc>
            <filename>bug635373-gl</filename>
            <type>text/plain</type>
            <size>31691</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">RnJvbTogUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYmVydEBvY2FsbGFoYW4ub3JnPgpCdWcgNjM1Mzcz
LiBUaGViZXNMYXllck9HTCBuZWVkcyB0byBtYWtlIHN1cmUgd2Ugb25seSBzYW1wbGUgdmFsaWQg
cGl4ZWxzIHRvby4gcj1tYXR0d29vZHJvdwoKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvVGhlYmVz
TGF5ZXJCdWZmZXIuY3BwIGIvZ2Z4L2xheWVycy9UaGViZXNMYXllckJ1ZmZlci5jcHAKLS0tIGEv
Z2Z4L2xheWVycy9UaGViZXNMYXllckJ1ZmZlci5jcHAKKysrIGIvZ2Z4L2xheWVycy9UaGViZXNM
YXllckJ1ZmZlci5jcHAKQEAgLTE3NSw4OCArMTc1LDkwIEBAIFdyYXBSb3RhdGlvbkF4aXMoUFJJ
bnQzMiogYVJvdGF0aW9uUG9pbnQKICAgICAqYVJvdGF0aW9uUG9pbnQgKz0gYVNpemU7CiAgIH0g
ZWxzZSBpZiAoKmFSb3RhdGlvblBvaW50ID49IGFTaXplKSB7CiAgICAgKmFSb3RhdGlvblBvaW50
IC09IGFTaXplOwogICB9CiB9CiAKIFRoZWJlc0xheWVyQnVmZmVyOjpQYWludFN0YXRlCiBUaGVi
ZXNMYXllckJ1ZmZlcjo6QmVnaW5QYWludChUaGViZXNMYXllciogYUxheWVyLCBDb250ZW50VHlw
ZSBhQ29udGVudFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lu
dFJlZ2lvbiYgYU5lZWRlZFJlZ2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IGFYUmVzb2x1dGlvbiwgZmxvYXQgYVlSZXNvbHV0aW9uKQogewogICBQYWludFN0YXRlIHJl
c3VsdDsKIAotICByZXN1bHQubVJlZ2lvblRvRHJhdy5TdWIoYUxheWVyLT5HZXRWaXNpYmxlUmVn
aW9uKCksIGFMYXllci0+R2V0VmFsaWRSZWdpb24oKSk7CisgIHJlc3VsdC5tUmVnaW9uVG9EcmF3
LlN1YihhTmVlZGVkUmVnaW9uLCBhTGF5ZXItPkdldFZhbGlkUmVnaW9uKCkpOwogCiAgIGZsb2F0
IGN1clhSZXMgPSBhTGF5ZXItPkdldFhSZXNvbHV0aW9uKCk7CiAgIGZsb2F0IGN1cllSZXMgPSBh
TGF5ZXItPkdldFlSZXNvbHV0aW9uKCk7CiAgIGlmIChtQnVmZmVyICYmCiAgICAgICAoYUNvbnRl
bnRUeXBlICE9IG1CdWZmZXItPkdldENvbnRlbnRUeXBlKCkgfHwKICAgICAgICBhWFJlc29sdXRp
b24gIT0gY3VyWFJlcyB8fCBhWVJlc29sdXRpb24gIT0gY3VyWVJlcykpIHsKICAgICAvLyBXZSdy
ZSBlZmZlY3RpdmVseSBjbGVhcmluZyB0aGUgdmFsaWQgcmVnaW9uLCBzbyB3ZSBuZWVkIHRvIGRy
YXcKLSAgICAvLyB0aGUgZW50aXJlIHZpc2libGUgcmVnaW9uIG5vdy4KKyAgICAvLyB0aGUgZW50
aXJlIG5lZWRlZCByZWdpb24gbm93LgogICAgIC8vCiAgICAgLy8gWFhYL2Nqb25lczogYSBwb3Nz
aWJseSB3b3J0aHdoaWxlIG9wdGltaXphdGlvbiB0byBrZWVwIGluIG1pbmQKICAgICAvLyBpcyB0
byByZS11c2UgYnVmZmVycyB3aGVuIHRoZSByZXNvbHV0aW9uIGFuZCB2aXNpYmxlIHJlZ2lvbgog
ICAgIC8vIGhhdmUgY2hhbmdlZCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGJ1ZmZlciBzaXplIHN0
YXlzIHRoZSBzYW1lLgogICAgIC8vIEl0IG1pZ2h0IG1ha2UgZXZlbiBtb3JlIHNlbnNlIHRvIGFs
bG9jYXRlIGJ1ZmZlcnMgZnJvbSBhCiAgICAgLy8gcmVjeWNsYWJsZSBwb29sLCBzbyB0aGF0IHdl
IGNvdWxkIGtlZXAgdGhpcyBsb2dpYyBzaW1wbGUgYW5kCiAgICAgLy8gc3RpbGwgZ2V0IGJhY2sg
dGhlIHNhbWUgYnVmZmVyLgotICAgIHJlc3VsdC5tUmVnaW9uVG9EcmF3ID0gYUxheWVyLT5HZXRW
aXNpYmxlUmVnaW9uKCk7CisgICAgcmVzdWx0Lm1SZWdpb25Ub0RyYXcgPSBhTmVlZGVkUmVnaW9u
OwogICAgIHJlc3VsdC5tUmVnaW9uVG9JbnZhbGlkYXRlID0gYUxheWVyLT5HZXRWYWxpZFJlZ2lv
bigpOwogICAgIENsZWFyKCk7CiAgIH0KIAogICBpZiAocmVzdWx0Lm1SZWdpb25Ub0RyYXcuSXNF
bXB0eSgpKQogICAgIHJldHVybiByZXN1bHQ7CiAgIG5zSW50UmVjdCBkcmF3Qm91bmRzID0gcmVz
dWx0Lm1SZWdpb25Ub0RyYXcuR2V0Qm91bmRzKCk7CiAKLSAgbnNJbnRSZWN0IHZpc2libGVCb3Vu
ZHMgPSBhTGF5ZXItPkdldFZpc2libGVSZWdpb24oKS5HZXRCb3VuZHMoKTsKLSAgbnNJbnRTaXpl
IGRlc3RCdWZmZXJEaW1zID0gU2NhbGVkU2l6ZSh2aXNpYmxlQm91bmRzLlNpemUoKSwKKyAgbnNJ
bnRSZWN0IG5lZWRlZEJvdW5kcyA9IGFOZWVkZWRSZWdpb24uR2V0Qm91bmRzKCk7CisgIG5zSW50
U2l6ZSBkZXN0QnVmZmVyRGltcyA9IFNjYWxlZFNpemUobmVlZGVkQm91bmRzLlNpemUoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWFJlc29sdXRpb24sIGFZUmVz
b2x1dGlvbik7CiAgIG5zUmVmUHRyPGdmeEFTdXJmYWNlPiBkZXN0QnVmZmVyOwogICBuc0ludFJl
Y3QgZGVzdEJ1ZmZlclJlY3Q7CiAgIFBSQm9vbCBidWZmZXJEaW1zQ2hhbmdlZCA9IFBSX0ZBTFNF
OwogCiAgIGlmIChCdWZmZXJTaXplT2tGb3IoZGVzdEJ1ZmZlckRpbXMpKSB7CiAgICAgTlNfQVNT
RVJUSU9OKGN1clhSZXMgPT0gYVhSZXNvbHV0aW9uICYmIGN1cllSZXMgPT0gYVlSZXNvbHV0aW9u
LAogICAgICAgICAgICAgICAgICAicmVzb2x1dGlvbiBjaGFuZ2VzIG11c3QgQ2xlYXIoKSEiKTsK
IAotICAgIC8vIFRoZSBjdXJyZW50IGJ1ZmZlciBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHZp
c2libGUgYXJlYS4KLSAgICBpZiAobUJ1ZmZlclJlY3QuQ29udGFpbnModmlzaWJsZUJvdW5kcykp
IHsKKyAgICAvLyBUaGUgY3VycmVudCBidWZmZXIgaXMgYmlnIGVub3VnaCB0byBob2xkIHRoZSBu
ZWVkZWQgYXJlYS4KKyAgICBpZiAobUJ1ZmZlclJlY3QuQ29udGFpbnMobmVlZGVkQm91bmRzKSkg
ewogICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBhZGp1c3QgbUJ1ZmZlclJlY3QuCiAgICAgICBk
ZXN0QnVmZmVyUmVjdCA9IG1CdWZmZXJSZWN0OwogICAgIH0gZWxzZSB7CiAgICAgICAvLyBUaGUg
YnVmZmVyJ3MgYmlnIGVub3VnaCBidXQgZG9lc24ndCBjb250YWluIGV2ZXJ5dGhpbmcgdGhhdCdz
CiAgICAgICAvLyBnb2luZyB0byBiZSB2aXNpYmxlLiBXZSdsbCBtb3ZlIGl0LgotICAgICAgZGVz
dEJ1ZmZlclJlY3QgPSBuc0ludFJlY3QodmlzaWJsZUJvdW5kcy5Ub3BMZWZ0KCksIG1CdWZmZXJS
ZWN0LlNpemUoKSk7CisgICAgICBkZXN0QnVmZmVyUmVjdCA9IG5zSW50UmVjdChuZWVkZWRCb3Vu
ZHMuVG9wTGVmdCgpLCBtQnVmZmVyUmVjdC5TaXplKCkpOwogICAgIH0KICAgICBuc0ludFJlY3Qg
a2VlcEFyZWE7CiAgICAgaWYgKGtlZXBBcmVhLkludGVyc2VjdFJlY3QoZGVzdEJ1ZmZlclJlY3Qs
IG1CdWZmZXJSZWN0KSkgewogICAgICAgLy8gU2V0IG1CdWZmZXJSb3RhdGlvbiBzbyB0aGF0IHRo
ZSBwaXhlbHMgY3VycmVudGx5IGluIG1CdWZmZXIKICAgICAgIC8vIHdpbGwgc3RpbGwgYmUgcmVu
ZGVyZWQgaW4gdGhlIHJpZ2h0IHBsYWNlIHdoZW4gbUJ1ZmZlclJlY3QKICAgICAgIC8vIGNoYW5n
ZXMgdG8gZGVzdEJ1ZmZlclJlY3QuCiAgICAgICBuc0ludFBvaW50IG5ld1JvdGF0aW9uID0gbUJ1
ZmZlclJvdGF0aW9uICsKICAgICAgICAgKGRlc3RCdWZmZXJSZWN0LlRvcExlZnQoKSAtIG1CdWZm
ZXJSZWN0LlRvcExlZnQoKSk7CiAgICAgICBXcmFwUm90YXRpb25BeGlzKCZuZXdSb3RhdGlvbi54
LCBtQnVmZmVyUmVjdC53aWR0aCk7CiAgICAgICBXcmFwUm90YXRpb25BeGlzKCZuZXdSb3RhdGlv
bi55LCBtQnVmZmVyUmVjdC5oZWlnaHQpOwogICAgICAgTlNfQVNTRVJUSU9OKG5zSW50UmVjdChu
c0ludFBvaW50KDAsMCksIG1CdWZmZXJSZWN0LlNpemUoKSkuQ29udGFpbnMobmV3Um90YXRpb24p
LAogICAgICAgICAgICAgICAgICAgICJuZXdSb3RhdGlvbiBvdXQgb2YgYm91bmRzIik7CiAgICAg
ICBQUkludDMyIHhCb3VuZGFyeSA9IGRlc3RCdWZmZXJSZWN0LlhNb3N0KCkgLSBuZXdSb3RhdGlv
bi54OwogICAgICAgUFJJbnQzMiB5Qm91bmRhcnkgPSBkZXN0QnVmZmVyUmVjdC5ZTW9zdCgpIC0g
bmV3Um90YXRpb24ueTsKICAgICAgIGlmICgoZHJhd0JvdW5kcy54IDwgeEJvdW5kYXJ5ICYmIHhC
b3VuZGFyeSA8IGRyYXdCb3VuZHMuWE1vc3QoKSkgfHwKLSAgICAgICAgICAoZHJhd0JvdW5kcy55
IDwgeUJvdW5kYXJ5ICYmIHlCb3VuZGFyeSA8IGRyYXdCb3VuZHMuWU1vc3QoKSkpIHsKKyAgICAg
ICAgICAoZHJhd0JvdW5kcy55IDwgeUJvdW5kYXJ5ICYmIHlCb3VuZGFyeSA8IGRyYXdCb3VuZHMu
WU1vc3QoKSkgfHwKKyAgICAgICAgICAoIW1FbmFibGVSb3RhdGlvbk9wdGltaXphdGlvbiAmJiBu
ZXdSb3RhdGlvbiAhPSBuc0ludFBvaW50KDAsMCkpKSB7CiAgICAgICAgIC8vIFRoZSBzdHVmZiB3
ZSBuZWVkIHRvIHJlZHJhdyB3aWxsIHdyYXAgYXJvdW5kIGFuIGVkZ2Ugb2YgdGhlCiAgICAgICAg
IC8vIGJ1ZmZlciwgc28gd2Ugd2lsbCBuZWVkIHRvIGRvIGEgc2VsZi1jb3B5CiAgICAgICAgIGlm
IChtQnVmZmVyLT5TdXBwb3J0c1NlbGZDb3B5KCkgJiYgbUJ1ZmZlclJvdGF0aW9uID09IG5zSW50
UG9pbnQoMCwwKSkgewogICAgICAgICAgIGRlc3RCdWZmZXIgPSBtQnVmZmVyOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgIC8vIFdlIGNhbid0IGRvIGEgcmVhbCBzZWxmLWNvcHkgYmVjYXVz
ZSB0aGUgYnVmZmVyIGlzIHJvdGF0ZWQuCiAgICAgICAgICAgLy8gU28gYWxsb2NhdGUgYSBuZXcg
YnVmZmVyIGZvciB0aGUgZGVzdGluYXRpb24uCi0gICAgICAgICAgZGVzdEJ1ZmZlclJlY3QgPSB2
aXNpYmxlQm91bmRzOworICAgICAgICAgIGRlc3RCdWZmZXJSZWN0ID0gbmVlZGVkQm91bmRzOwog
ICAgICAgICAgIGRlc3RCdWZmZXJEaW1zID0gU2NhbGVkU2l6ZShkZXN0QnVmZmVyUmVjdC5TaXpl
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFYUmVzb2x1dGlvbiwg
YVlSZXNvbHV0aW9uKTsKICAgICAgICAgICBidWZmZXJEaW1zQ2hhbmdlZCA9IFBSX1RSVUU7CiAg
ICAgICAgICAgZGVzdEJ1ZmZlciA9IENyZWF0ZUJ1ZmZlcihhQ29udGVudFR5cGUsIGRlc3RCdWZm
ZXJEaW1zKTsKICAgICAgICAgICBpZiAoIWRlc3RCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgICAgICB9CiAgICAgICB9IGVsc2UgewpAQCAtMjY3LDE3ICsyNjksMTcgQEAg
VGhlYmVzTGF5ZXJCdWZmZXI6OkJlZ2luUGFpbnQoVGhlYmVzTGF5ZQogICAgICAgLy8gTm8gcGl4
ZWxzIGFyZSBnb2luZyB0byBiZSBrZXB0LiBUaGUgd2hvbGUgdmlzaWJsZSByZWdpb24KICAgICAg
IC8vIHdpbGwgYmUgcmVkcmF3biwgc28gd2UgZG9uJ3QgbmVlZCB0byBjb3B5IGFueXRoaW5nLCBz
byB3ZSBkb24ndAogICAgICAgLy8gc2V0IGRlc3RCdWZmZXIuCiAgICAgICBtQnVmZmVyUmVjdCA9
IGRlc3RCdWZmZXJSZWN0OwogICAgICAgbUJ1ZmZlclJvdGF0aW9uID0gbnNJbnRQb2ludCgwLDAp
OwogICAgIH0KICAgfSBlbHNlIHsKICAgICAvLyBUaGUgYnVmZmVyJ3Mgbm90IGJpZyBlbm91Z2gs
IHNvIGFsbG9jYXRlIGEgbmV3IG9uZQotICAgIGRlc3RCdWZmZXJSZWN0ID0gdmlzaWJsZUJvdW5k
czsKKyAgICBkZXN0QnVmZmVyUmVjdCA9IG5lZWRlZEJvdW5kczsKICAgICBkZXN0QnVmZmVyRGlt
cyA9IFNjYWxlZFNpemUoZGVzdEJ1ZmZlclJlY3QuU2l6ZSgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhWFJlc29sdXRpb24sIGFZUmVzb2x1dGlvbik7CiAgICAgYnVmZmVyRGlt
c0NoYW5nZWQgPSBQUl9UUlVFOwogICAgIGRlc3RCdWZmZXIgPSBDcmVhdGVCdWZmZXIoYUNvbnRl
bnRUeXBlLCBkZXN0QnVmZmVyRGltcyk7CiAgICAgaWYgKCFkZXN0QnVmZmVyKQogICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgfQogCkBAIC0zMDAsMTYgKzMwMiwxOCBAQCBUaGViZXNMYXllckJ1ZmZl
cjo6QmVnaW5QYWludChUaGViZXNMYXllCiAKICAgICBtQnVmZmVyID0gZGVzdEJ1ZmZlci5mb3Jn
ZXQoKTsKICAgICBtQnVmZmVyUmVjdCA9IGRlc3RCdWZmZXJSZWN0OwogICAgIG1CdWZmZXJSb3Rh
dGlvbiA9IG5zSW50UG9pbnQoMCwwKTsKICAgfQogICBpZiAoYnVmZmVyRGltc0NoYW5nZWQpIHsK
ICAgICBtQnVmZmVyRGltcyA9IGRlc3RCdWZmZXJEaW1zOwogICB9CisgIE5TX0FTU0VSVElPTiht
RW5hYmxlUm90YXRpb25PcHRpbWl6YXRpb24gfHwgbUJ1ZmZlclJvdGF0aW9uID09IG5zSW50UG9p
bnQoMCwwKSwKKyAgICAgICAgICAgICAgICJSb3RhdGlvbiBkaXNhYmxlZCwgYnV0IHdlIGhhdmUg
bm9uemVybyByb3RhdGlvbj8iKTsKIAogICBuc0ludFJlZ2lvbiBpbnZhbGlkYXRlOwogICBpbnZh
bGlkYXRlLlN1YihhTGF5ZXItPkdldFZhbGlkUmVnaW9uKCksIGRlc3RCdWZmZXJSZWN0KTsKICAg
cmVzdWx0Lm1SZWdpb25Ub0ludmFsaWRhdGUuT3IocmVzdWx0Lm1SZWdpb25Ub0ludmFsaWRhdGUs
IGludmFsaWRhdGUpOwogCiAgIHJlc3VsdC5tQ29udGV4dCA9IEdldENvbnRleHRGb3JRdWFkcmFu
dFVwZGF0ZShkcmF3Qm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYVhSZXNvbHV0aW9uLCBhWVJlc29sdXRpb24pOwogCmRpZmYgLS1naXQgYS9n
ZngvbGF5ZXJzL1RoZWJlc0xheWVyQnVmZmVyLmggYi9nZngvbGF5ZXJzL1RoZWJlc0xheWVyQnVm
ZmVyLmgKLS0tIGEvZ2Z4L2xheWVycy9UaGViZXNMYXllckJ1ZmZlci5oCisrKyBiL2dmeC9sYXll
cnMvVGhlYmVzTGF5ZXJCdWZmZXIuaApAQCAtODAsMjQgKzgwLDM1IEBAIHB1YmxpYzoKICAgICBT
aXplZFRvVmlzaWJsZUJvdW5kcywKICAgICBDb250YWluc1Zpc2libGVCb3VuZHMKICAgfTsKIAog
ICBUaGViZXNMYXllckJ1ZmZlcihCdWZmZXJTaXplUG9saWN5IGFCdWZmZXJTaXplUG9saWN5KQog
ICAgIDogbUJ1ZmZlckRpbXMoMCwwKQogICAgICwgbUJ1ZmZlclJvdGF0aW9uKDAsMCkKICAgICAs
IG1CdWZmZXJTaXplUG9saWN5KGFCdWZmZXJTaXplUG9saWN5KQorICAgICwgbUVuYWJsZVJvdGF0
aW9uT3B0aW1pemF0aW9uKFBSX0ZBTFNFKQogICB7CiAgICAgTU9aX0NPVU5UX0NUT1IoVGhlYmVz
TGF5ZXJCdWZmZXIpOwogICB9CiAgIHZpcnR1YWwgflRoZWJlc0xheWVyQnVmZmVyKCkKICAgewog
ICAgIE1PWl9DT1VOVF9EVE9SKFRoZWJlc0xheWVyQnVmZmVyKTsKICAgfQogCisgIHZvaWQgU2V0
RW5hYmxlUm90YXRpb25PcHRpbWl6YXRpb24oUFJCb29sIGFFbmFibGUpCisgIHsKKyAgICBpZiAo
bUVuYWJsZVJvdGF0aW9uT3B0aW1pemF0aW9uICE9IGFFbmFibGUpIHsKKyAgICAgIC8vIEZvcmNl
IGEgbmV3IGJ1ZmZlciB0byBiZSBjcmVhdGVkLCBzaW5jZSBzdWJjbGFzc2VzIG1heSBkZWNpZGUK
KyAgICAgIC8vIHRvIGNyZWF0ZSBkaWZmZXJlbnQgYnVmZmVyIHR5cGVzIGRlcGVuZGluZyBvbiB3
aGV0aGVyIHJvdGF0aW9uIGlzIGFsbG93ZWQKKyAgICAgIENsZWFyKCk7CisgICAgICBtRW5hYmxl
Um90YXRpb25PcHRpbWl6YXRpb24gPSBhRW5hYmxlOworICAgIH0KKyAgfQorCiAgIC8qKgogICAg
KiBXaXBlIG91dCBhbGwgcmV0YWluZWQgY29udGVudHMuIENhbGwgdGhpcyB3aGVuIHRoZSBlbnRp
cmUKICAgICogYnVmZmVyIGJlY29tZXMgaW52YWxpZC4KICAgICovCiAgIHZvaWQgQ2xlYXIoKQog
ICB7CiAgICAgbUJ1ZmZlciA9IG5zbnVsbDsKICAgICBtQnVmZmVyRGltcy5TaXplVG8oMCwgMCk7
CkBAIC0xMjIsMTYgKzEzMywxNyBAQCBwdWJsaWM6CiAgICAqIFN0YXJ0IGEgZHJhd2luZyBvcGVy
YXRpb24uIFRoaXMgcmV0dXJucyBhIFBhaW50U3RhdGUgZGVzY3JpYmluZyB3aGF0CiAgICAqIG5l
ZWRzIHRvIGJlIGRyYXduIHRvIGJyaW5nIHRoZSBidWZmZXIgdXAgdG8gZGF0ZSBpbiB0aGUgdmlz
aWJsZSByZWdpb24uCiAgICAqIFRoaXMgcXVlcmllcyBhTGF5ZXIgdG8gZ2V0IHRoZSBjdXJyZW50
bHkgdmFsaWQgYW5kIHZpc2libGUgcmVnaW9ucy4KICAgICogVGhlIHJldHVybmVkIG1Db250ZXh0
IG1heSBiZSBudWxsIGlmIG1SZWdpb25Ub0RyYXcgaXMgZW1wdHkuCiAgICAqIE90aGVyd2lzZSBp
dCBtdXN0IG5vdCBiZSBudWxsLgogICAgKiBtUmVnaW9uVG9JbnZhbGlkYXRlIHdpbGwgY29udGFp
biBtUmVnaW9uVG9EcmF3LgogICAgKi8KICAgUGFpbnRTdGF0ZSBCZWdpblBhaW50KFRoZWJlc0xh
eWVyKiBhTGF5ZXIsIENvbnRlbnRUeXBlIGFDb250ZW50VHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zSW50UmVnaW9uJiBhTmVlZGVkUmVnaW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgYVhSZXNvbHV0aW9uLCBmbG9hdCBhWVJlc29sdXRpb24pOwogCiAgIC8q
KgogICAgKiBSZXR1cm4gYSBuZXcgc3VyZmFjZSBvZiB8YVNpemV8IGFuZCB8YVR5cGV8LgogICAg
Ki8KICAgdmlydHVhbCBhbHJlYWR5X0FkZFJlZmVkPGdmeEFTdXJmYWNlPgogICBDcmVhdGVCdWZm
ZXIoQ29udGVudFR5cGUgYVR5cGUsIGNvbnN0IG5zSW50U2l6ZSYgYVNpemUpID0gMDsKIApAQCAt
MjE0LDE0ICsyMjYsMTcgQEAgcHJpdmF0ZToKICAgICogU28gdGhlIHBpeGVsIGF0IG1CdWZmZXJS
b3RhdGlvbiB3aXRoaW4gdGhlIGJ1ZmZlciBpcyB3aGF0IGdldHMgcGFpbnRlZCBhdAogICAgKiBt
QnVmZmVyUmVjdC5Ub3BMZWZ0KCkuCiAgICAqIFRoaXMgaXMgInJvdGF0aW9uIiBpbiB0aGUgc2Vu
c2Ugb2Ygcm90YXRpbmcgaXRlbXMgaW4gYSBsaW5lYXIgYnVmZmVyLAogICAgKiB3aGVyZSBpdGVt
cyBmYWxsaW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBidWZmZXIgYXJlIHJldHVybmVkIHRvIHRoZQog
ICAgKiBidWZmZXIgYXQgdGhlIG90aGVyIGVuZCwgbm90IDJEIHJvdGF0aW9uIQogICAgKi8KICAg
bnNJbnRQb2ludCAgICAgICAgICAgIG1CdWZmZXJSb3RhdGlvbjsKICAgQnVmZmVyU2l6ZVBvbGlj
eSAgICAgIG1CdWZmZXJTaXplUG9saWN5OworCitwcm90ZWN0ZWQ6CisgIFBSUGFja2VkQm9vbCAg
ICAgICAgICBtRW5hYmxlUm90YXRpb25PcHRpbWl6YXRpb247CiB9OwogCiB9CiB9CiAKICNlbmRp
ZiAvKiBUSEVCRVNMQVlFUkJVRkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9iYXNp
Yy9CYXNpY0xheWVycy5jcHAgYi9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljTGF5ZXJzLmNwcAotLS0g
YS9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljTGF5ZXJzLmNwcAorKysgYi9nZngvbGF5ZXJzL2Jhc2lj
L0Jhc2ljTGF5ZXJzLmNwcApAQCAtMzAzLDE3ICszMDMsMTkgQEAgQ29udGFpbmVyUmVtb3ZlQ2hp
bGQoTGF5ZXIqIGFDaGlsZCwgQ29udAogY2xhc3MgQmFzaWNUaGViZXNMYXllcjsKIGNsYXNzIEJh
c2ljVGhlYmVzTGF5ZXJCdWZmZXIgOiBwdWJsaWMgVGhlYmVzTGF5ZXJCdWZmZXIgewogICB0eXBl
ZGVmIFRoZWJlc0xheWVyQnVmZmVyIEJhc2U7CiAKIHB1YmxpYzoKICAgQmFzaWNUaGViZXNMYXll
ckJ1ZmZlcihCYXNpY1RoZWJlc0xheWVyKiBhTGF5ZXIpCiAgICAgOiBCYXNlKENvbnRhaW5zVmlz
aWJsZUJvdW5kcykKICAgICAsIG1MYXllcihhTGF5ZXIpCi0gIHt9CisgIHsKKyAgICBtRW5hYmxl
Um90YXRpb25PcHRpbWl6YXRpb24gPSBQUl9UUlVFOworICB9CiAKICAgdmlydHVhbCB+QmFzaWNU
aGViZXNMYXllckJ1ZmZlcigpCiAgIHt9CiAKICAgdXNpbmcgQmFzZTo6QnVmZmVyUmVjdDsKICAg
dXNpbmcgQmFzZTo6QnVmZmVyUm90YXRpb247CiAKICAgLyoqCkBAIC0zNDgsMTYgKzM1MCwxNyBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgIEJhc2ljVGhlYmVzTGF5ZXJCdWZmZXIoZ2Z4QVN1cmZh
Y2UqIGFCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNJbnRSZWN0JiBh
UmVjdCwgY29uc3QgbnNJbnRQb2ludCYgYVJvdGF0aW9uKQogICAgIC8vIFRoZSBzaXplIHBvbGlj
eSBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaGVyZTsgdGhpcyBjb25zdHJ1Y3RvciBpcwogICAgIC8v
IGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW5nIHRlbXBvcmFyaWVzCiAgICAgOiBUaGVi
ZXNMYXllckJ1ZmZlcihDb250YWluc1Zpc2libGVCb3VuZHMpCiAgIHsKKyAgICBtRW5hYmxlUm90
YXRpb25PcHRpbWl6YXRpb24gPSBQUl9UUlVFOwogICAgIGdmeEludFNpemUgc3ogPSBhQnVmZmVy
LT5HZXRTaXplKCk7CiAgICAgU2V0QnVmZmVyKGFCdWZmZXIsIG5zSW50U2l6ZShzei53aWR0aCwg
c3ouaGVpZ2h0KSwgYVJlY3QsIGFSb3RhdGlvbik7CiAgIH0KIAogICBCYXNpY1RoZWJlc0xheWVy
KiBtTGF5ZXI7CiB9OwogCiBjbGFzcyBCYXNpY1RoZWJlc0xheWVyIDogcHVibGljIFRoZWJlc0xh
eWVyLCBCYXNpY0ltcGxEYXRhIHsKQEAgLTU3MywxNyArNTc2LDE3IEBAIEJhc2ljVGhlYmVzTGF5
ZXI6OlBhaW50VGhlYmVzKGdmeENvbnRleHQKICAgICByZXR1cm47CiAgIH0KIAogICB7CiAgICAg
Z2Z4U2l6ZSBzY2FsZSA9IGFDb250ZXh0LT5DdXJyZW50TWF0cml4KCkuU2NhbGVGYWN0b3JzKFBS
X1RSVUUpOwogICAgIGZsb2F0IHBhaW50WFJlcyA9IEJhc2ljTWFuYWdlcigpLT5YUmVzb2x1dGlv
bigpICogZ2Z4VXRpbHM6OkNsYW1wVG9TY2FsZUZhY3RvcihzY2FsZS53aWR0aCk7CiAgICAgZmxv
YXQgcGFpbnRZUmVzID0gQmFzaWNNYW5hZ2VyKCktPllSZXNvbHV0aW9uKCkgKiBnZnhVdGlsczo6
Q2xhbXBUb1NjYWxlRmFjdG9yKHNjYWxlLmhlaWdodCk7CiAgICAgQnVmZmVyOjpQYWludFN0YXRl
IHN0YXRlID0KLSAgICAgIG1CdWZmZXIuQmVnaW5QYWludCh0aGlzLCBjb250ZW50VHlwZSwgcGFp
bnRYUmVzLCBwYWludFlSZXMpOworICAgICAgbUJ1ZmZlci5CZWdpblBhaW50KHRoaXMsIGNvbnRl
bnRUeXBlLCBtVmlzaWJsZVJlZ2lvbiwgcGFpbnRYUmVzLCBwYWludFlSZXMpOwogICAgIG1WYWxp
ZFJlZ2lvbi5TdWIobVZhbGlkUmVnaW9uLCBzdGF0ZS5tUmVnaW9uVG9JbnZhbGlkYXRlKTsKIAog
ICAgIGlmIChzdGF0ZS5tQ29udGV4dCkgewogICAgICAgLy8gVGhlIGFyZWEgdGhhdCBiZWNhbWUg
aW52YWxpZCBhbmQgaXMgdmlzaWJsZSBuZWVkcyB0byBiZSByZXBhaW50ZWQKICAgICAgIC8vICh0
aGlzIGNvdWxkIGJlIHRoZSB3aG9sZSB2aXNpYmxlIGFyZWEgaWYgb3VyIGJ1ZmZlciBzd2l0Y2hl
ZAogICAgICAgLy8gZnJvbSBSR0IgdG8gUkdCQSwgYmVjYXVzZSB3ZSBtaWdodCBuZWVkIHRvIHJl
cGFpbnQgd2l0aAogICAgICAgLy8gc3VicGl4ZWwgQUEpCiAgICAgICBzdGF0ZS5tUmVnaW9uVG9J
bnZhbGlkYXRlLkFuZChzdGF0ZS5tUmVnaW9uVG9JbnZhbGlkYXRlLCBtVmlzaWJsZVJlZ2lvbik7
CmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL29wZW5nbC9UaGViZXNMYXllck9HTC5jcHAgYi9nZngv
bGF5ZXJzL29wZW5nbC9UaGViZXNMYXllck9HTC5jcHAKLS0tIGEvZ2Z4L2xheWVycy9vcGVuZ2wv
VGhlYmVzTGF5ZXJPR0wuY3BwCisrKyBiL2dmeC9sYXllcnMvb3BlbmdsL1RoZWJlc0xheWVyT0dM
LmNwcApAQCAtNDcsMjggKzQ3LDMyIEBACiAjaW5jbHVkZSAiZ2Z4VGVlU3VyZmFjZS5oIgogCiBu
YW1lc3BhY2UgbW96aWxsYSB7CiBuYW1lc3BhY2UgbGF5ZXJzIHsKIAogdXNpbmcgZ2w6OkdMQ29u
dGV4dDsKIHVzaW5nIGdsOjpUZXh0dXJlSW1hZ2U7CiAKK3N0YXRpYyBjb25zdCBpbnQgQUxMT1df
UkVQRUFUID0gMHgwMTsKKwogLy8gQmluZEFuZERyYXdRdWFkV2l0aFRleHR1cmVSZWN0IGNhbiB3
b3JrIHdpdGggZWl0aGVyIEdMX1JFUEVBVCAocHJlZmVycmVkKQogLy8gb3IgR0xfQ0xBTVBfVE9f
RURHRSB0ZXh0dXJlcy4gIFdlIHNlbGVjdCBiYXNlZCBvbiB3aGV0aGVyIFJFUEVBVCBpcwogLy8g
dmFsaWQgZm9yIG5vbi1wb3dlci1vZi10d28gdGV4dHVyZXMgLS0gaWYgd2UgaGF2ZSBOUE9UIHN1
cHBvcnQgd2UgdXNlIGl0LAogLy8gb3RoZXJ3aXNlIHdlIHN0aWNrIHdpdGggQ0xBTVBfVE9fRURH
RSBhbmQgZGVjb21wb3NlLgogc3RhdGljIGFscmVhZHlfQWRkUmVmZWQ8VGV4dHVyZUltYWdlPgog
Q3JlYXRlQ2xhbXBPclJlcGVhdFRleHR1cmVJbWFnZShHTENvbnRleHQgKmFHbCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNJbnRTaXplJiBhU2l6ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZUltYWdlOjpDb250ZW50VHlwZSBhQ29udGVu
dFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVJbWFnZTo6Q29u
dGVudFR5cGUgYUNvbnRlbnRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UlVpbnQzMiBhRmxhZ3MpCiB7CiAgIEdMZW51bSB3cmFwTW9kZSA9IExPQ0FMX0dMX0NMQU1QX1RP
X0VER0U7Ci0gIGlmIChhR2wtPklzRXh0ZW5zaW9uU3VwcG9ydGVkKEdMQ29udGV4dDo6QVJCX3Rl
eHR1cmVfbm9uX3Bvd2VyX29mX3R3bykgfHwKLSAgICAgIGFHbC0+SXNFeHRlbnNpb25TdXBwb3J0
ZWQoR0xDb250ZXh0OjpPRVNfdGV4dHVyZV9ucG90KSkKKyAgaWYgKChhRmxhZ3MgJiBBTExPV19S
RVBFQVQpICYmCisgICAgICAoYUdsLT5Jc0V4dGVuc2lvblN1cHBvcnRlZChHTENvbnRleHQ6OkFS
Ql90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28pIHx8CisgICAgICAgYUdsLT5Jc0V4dGVuc2lvblN1
cHBvcnRlZChHTENvbnRleHQ6Ok9FU190ZXh0dXJlX25wb3QpKSkKICAgewogICAgIHdyYXBNb2Rl
ID0gTE9DQUxfR0xfUkVQRUFUOwogICB9CiAKICAgcmV0dXJuIGFHbC0+Q3JlYXRlVGV4dHVyZUlt
YWdlKGFTaXplLCBhQ29udGVudFR5cGUsIHdyYXBNb2RlKTsKIH0KIAogLy8gfGFUZXhDb29yZFJl
Y3R8IGlzIHRoZSByZWN0YW5nbGUgZnJvbSB0aGUgdGV4dHVyZSB0aGF0IHdlIHdhbnQgdG8KQEAg
LTE1MSwxNyArMTU1LDIwIEBAIHB1YmxpYzoKICAgdHlwZWRlZiBUaGViZXNMYXllckJ1ZmZlcjo6
UGFpbnRTdGF0ZSBQYWludFN0YXRlOwogCiAgIFRoZWJlc0xheWVyQnVmZmVyT0dMKFRoZWJlc0xh
eWVyKiBhTGF5ZXIsIExheWVyT0dMKiBhT0dMTGF5ZXIpCiAgICAgOiBtTGF5ZXIoYUxheWVyKQog
ICAgICwgbU9HTExheWVyKGFPR0xMYXllcikKICAge30KICAgdmlydHVhbCB+VGhlYmVzTGF5ZXJC
dWZmZXJPR0woKSB7fQogCisgIHZpcnR1YWwgdm9pZCBTZXRFbmFibGVSb3RhdGlvbk9wdGltaXph
dGlvbihQUkJvb2wgYUVuYWJsZSkgPSAwOworCiAgIHZpcnR1YWwgUGFpbnRTdGF0ZSBCZWdpblBh
aW50KENvbnRlbnRUeXBlIGFDb250ZW50VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNJbnRSZWdpb24mIGFOZWVkZWRSZWdpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGFYUmVzb2x1dGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgYVlSZXNvbHV0aW9uKSA9IDA7CiAKICAgdm9pZCBSZW5kZXJUbyhj
b25zdCBuc0ludFBvaW50JiBhT2Zmc2V0LCBMYXllck1hbmFnZXJPR0wqIGFNYW5hZ2VyKTsKIAog
ICBuc0ludFNpemUgR2V0U2l6ZSgpIHsKICAgICBpZiAobVRleEltYWdlKQogICAgICAgcmV0dXJu
IG1UZXhJbWFnZS0+R2V0U2l6ZSgpOwpAQCAtMjI4LDE3ICsyMzUsMTcgQEAgVGhlYmVzTGF5ZXJC
dWZmZXJPR0w6OlJlbmRlclRvKGNvbnN0IG5zSQogICAgICAgREVCVUdfR0xfRVJST1JfQ0hFQ0so
Z2woKSk7CiAgICAgICBhbHBoYVByb2dyYW0tPlNldEJsYWNrVGV4dHVyZVVuaXQoMCk7CiAgICAg
ICBhbHBoYVByb2dyYW0tPlNldFdoaXRlVGV4dHVyZVVuaXQoMSk7CiAgICAgICBwcm9ncmFtID0g
YWxwaGFQcm9ncmFtOwogICAgIH0gZWxzZSB7CiAgICAgICAvLyBOb3RlIEJHUjogQ2Fpcm8ncyBp
bWFnZSBzdXJmYWNlcyBhcmUgYWx3YXlzIGluIHdoYXQKICAgICAgIC8vIE9wZW5HTCBhbmQgb3Vy
IHNoYWRlcnMgY29uc2lkZXIgQkdSIGZvcm1hdC4KICAgICAgIENvbG9yVGV4dHVyZUxheWVyUHJv
Z3JhbSAqYmFzaWNQcm9ncmFtID0KLSAgICAgICAgYU1hbmFnZXItPkdldEJhc2ljTGF5ZXJQcm9n
cmFtKG1MYXllci0+Q2FuVXNlT3BhcXVlU3VyZmFjZSgpLAorICAgICAgICBhTWFuYWdlci0+R2V0
QmFzaWNMYXllclByb2dyYW0obVRleEltYWdlLT5HZXRDb250ZW50VHlwZSgpID09IGdmeEFTdXJm
YWNlOjpDT05URU5UX0NPTE9SLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVRleEltYWdlLT5Jc1JHQigpKTsKIAogICAgICAgYmFzaWNQcm9ncmFtLT5BY3RpdmF0ZSgp
OwogICAgICAgREVCVUdfR0xfRVJST1JfQ0hFQ0soZ2woKSk7CiAgICAgICBiYXNpY1Byb2dyYW0t
PlNldFRleHR1cmVVbml0KDApOwogICAgICAgcHJvZ3JhbSA9IGJhc2ljUHJvZ3JhbTsKICAgICB9
CiAKQEAgLTI4NiwzNSArMjkzLDQzIEBAIHB1YmxpYzoKIAogICBTdXJmYWNlQnVmZmVyT0dMKFRo
ZWJlc0xheWVyT0dMKiBhTGF5ZXIpCiAgICAgOiBUaGViZXNMYXllckJ1ZmZlck9HTChhTGF5ZXIs
IGFMYXllcikKICAgICAsIFRoZWJlc0xheWVyQnVmZmVyKFNpemVkVG9WaXNpYmxlQm91bmRzKQog
ICB7CiAgIH0KICAgdmlydHVhbCB+U3VyZmFjZUJ1ZmZlck9HTCgpIHt9CiAKKyAgdmlydHVhbCB2
b2lkIFNldEVuYWJsZVJvdGF0aW9uT3B0aW1pemF0aW9uKFBSQm9vbCBhRW5hYmxlKQorICB7Cisg
ICAgVGhlYmVzTGF5ZXJCdWZmZXI6OlNldEVuYWJsZVJvdGF0aW9uT3B0aW1pemF0aW9uKGFFbmFi
bGUpOworICB9CisKICAgLy8gVGhlYmVzTGF5ZXJCdWZmZXJPR0wgaW50ZXJmYWNlCiAgIHZpcnR1
YWwgUGFpbnRTdGF0ZSBCZWdpblBhaW50KENvbnRlbnRUeXBlIGFDb250ZW50VHlwZSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFYUmVzb2x1dGlvbiwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSW50UmVnaW9uJiBhTmVlZGVkUmVnaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhWFJlc29sdXRpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFZUmVzb2x1dGlvbikKICAgewog
ICAgIC8vIExldCBUaGViZXNMYXllckJ1ZmZlciBkbyBhbGwgdGhlIGhhcmQgd29yayBmb3IgdXMh
IDpECiAgICAgcmV0dXJuIFRoZWJlc0xheWVyQnVmZmVyOjpCZWdpblBhaW50KG1MYXllciwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb250ZW50VHlwZSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOZWVkZWRSZWdpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFYUmVzb2x1dGlvbiwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFZUmVzb2x1dGlvbik7CiAg
IH0KIAogICAvLyBUaGViZXNMYXllckJ1ZmZlciBpbnRlcmZhY2UKICAgdmlydHVhbCBhbHJlYWR5
X0FkZFJlZmVkPGdmeEFTdXJmYWNlPgogICBDcmVhdGVCdWZmZXIoQ29udGVudFR5cGUgYVR5cGUs
IGNvbnN0IG5zSW50U2l6ZSYgYVNpemUpCiAgIHsKICAgICBOU19BU1NFUlRJT04oZ2Z4QVN1cmZh
Y2U6OkNPTlRFTlRfQUxQSEEgIT0gYVR5cGUsIlRoZWJlc0J1ZmZlciBoYXMgY29sb3IiKTsKIAot
ICAgIG1UZXhJbWFnZSA9IENyZWF0ZUNsYW1wT3JSZXBlYXRUZXh0dXJlSW1hZ2UoZ2woKSwgYVNp
emUsIGFUeXBlKTsKKyAgICBtVGV4SW1hZ2UgPSBDcmVhdGVDbGFtcE9yUmVwZWF0VGV4dHVyZUlt
YWdlKGdsKCksIGFTaXplLCBhVHlwZSwKKyAgICAgICAgICAgIG1FbmFibGVSb3RhdGlvbk9wdGlt
aXphdGlvbiA/IEFMTE9XX1JFUEVBVCA6IDApOwogICAgIHJldHVybiBtVGV4SW1hZ2UgPyBtVGV4
SW1hZ2UtPkdldEJhY2tpbmdTdXJmYWNlKCkgOiBuc251bGw7CiAgIH0KIAogcHJvdGVjdGVkOgog
ICB2aXJ0dWFsIG5zSW50UG9pbnQgR2V0T3JpZ2luT2Zmc2V0KCkgewogICAgIHJldHVybiBCdWZm
ZXJSZWN0KCkuVG9wTGVmdCgpIC0gQnVmZmVyUm90YXRpb24oKTsKICAgfQogfTsKQEAgLTMyNiwy
MCArMzQxLDI2IEBAIHByb3RlY3RlZDoKIC8vIGFuZCBpbXBsZW1lbnRpbmcgdGhlbSBoZXJlIHVz
aW5nIEdMIGhhY2tldHJ5LgogY2xhc3MgQmFzaWNCdWZmZXJPR0wgOiBwdWJsaWMgVGhlYmVzTGF5
ZXJCdWZmZXJPR0wKIHsKIHB1YmxpYzoKICAgQmFzaWNCdWZmZXJPR0woVGhlYmVzTGF5ZXJPR0wq
IGFMYXllcikKICAgICA6IFRoZWJlc0xheWVyQnVmZmVyT0dMKGFMYXllciwgYUxheWVyKQogICAg
ICwgbUJ1ZmZlclJlY3QoMCwwLDAsMCkKICAgICAsIG1CdWZmZXJSb3RhdGlvbigwLDApCisgICAg
LCBtRW5hYmxlUm90YXRpb25PcHRpbWl6YXRpb24oUFJfRkFMU0UpCiAgIHt9CiAgIHZpcnR1YWwg
fkJhc2ljQnVmZmVyT0dMKCkge30KIAorICB2aXJ0dWFsIHZvaWQgU2V0RW5hYmxlUm90YXRpb25P
cHRpbWl6YXRpb24oUFJCb29sIGFFbmFibGUpCisgIHsKKyAgICBtRW5hYmxlUm90YXRpb25PcHRp
bWl6YXRpb24gPSBhRW5hYmxlOworICB9CiAgIHZpcnR1YWwgUGFpbnRTdGF0ZSBCZWdpblBhaW50
KENvbnRlbnRUeXBlIGFDb250ZW50VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNJbnRSZWdpb24mIGFOZWVkZWRSZWdpb24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGFYUmVzb2x1dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgYVlSZXNvbHV0aW9uKTsKIAogcHJvdGVjdGVkOgogICBlbnVtIFhTaWRl
IHsKICAgICBMRUZULCBSSUdIVAogICB9OwogICBlbnVtIFlTaWRlIHsKQEAgLTM0OSwxNiArMzcw
LDE3IEBAIHByb3RlY3RlZDoKIAogICB2aXJ0dWFsIG5zSW50UG9pbnQgR2V0T3JpZ2luT2Zmc2V0
KCkgewogICAgIHJldHVybiBtQnVmZmVyUmVjdC5Ub3BMZWZ0KCkgLSBtQnVmZmVyUm90YXRpb247
CiAgIH0KIAogcHJpdmF0ZToKICAgbnNJbnRSZWN0IG1CdWZmZXJSZWN0OwogICBuc0ludFBvaW50
IG1CdWZmZXJSb3RhdGlvbjsKKyAgUFJQYWNrZWRCb29sIG1FbmFibGVSb3RhdGlvbk9wdGltaXph
dGlvbjsKIH07CiAKIHN0YXRpYyB2b2lkCiBXcmFwUm90YXRpb25BeGlzKFBSSW50MzIqIGFSb3Rh
dGlvblBvaW50LCBQUkludDMyIGFTaXplKQogewogICBpZiAoKmFSb3RhdGlvblBvaW50IDwgMCkg
ewogICAgICphUm90YXRpb25Qb2ludCArPSBhU2l6ZTsKICAgfSBlbHNlIGlmICgqYVJvdGF0aW9u
UG9pbnQgPj0gYVNpemUpIHsKQEAgLTM5NywxMTcgKzQxOSwxMjYgQEAgU2NhbGVkU2l6ZShjb25z
dCBuc0ludFNpemUmIGFTaXplLCBmbG9hdAogCiAgIG5zSW50UmVjdCByZWN0KDAsIDAsIGFTaXpl
LndpZHRoLCBhU2l6ZS5oZWlnaHQpOwogICByZWN0LlNjYWxlUm91bmRPdXQoYVhTY2FsZSwgYVlT
Y2FsZSk7CiAgIHJldHVybiByZWN0LlNpemUoKTsKIH0KIAogQmFzaWNCdWZmZXJPR0w6OlBhaW50
U3RhdGUKIEJhc2ljQnVmZmVyT0dMOjpCZWdpblBhaW50KENvbnRlbnRUeXBlIGFDb250ZW50VHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSW50UmVnaW9uJiBhTmVlZGVk
UmVnaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVhSZXNvbHV0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVlSZXNvbHV0aW9uKQogewogICBQYWlu
dFN0YXRlIHJlc3VsdDsKIAotICByZXN1bHQubVJlZ2lvblRvRHJhdy5TdWIobUxheWVyLT5HZXRW
aXNpYmxlUmVnaW9uKCksIG1MYXllci0+R2V0VmFsaWRSZWdpb24oKSk7CisgIHJlc3VsdC5tUmVn
aW9uVG9EcmF3LlN1YihhTmVlZGVkUmVnaW9uLCBtTGF5ZXItPkdldFZhbGlkUmVnaW9uKCkpOwog
ICAKICAgZmxvYXQgY3VyWFJlcyA9IG1MYXllci0+R2V0WFJlc29sdXRpb24oKTsKICAgZmxvYXQg
Y3VyWVJlcyA9IG1MYXllci0+R2V0WVJlc29sdXRpb24oKTsKICAgTGF5ZXI6OlN1cmZhY2VNb2Rl
IG1vZGUgPSBtTGF5ZXItPkdldFN1cmZhY2VNb2RlKCk7CiAKICAgaWYgKG1vZGUgPT0gTGF5ZXI6
OlNVUkZBQ0VfQ09NUE9ORU5UX0FMUEhBKSB7CiAjaWZkZWYgTU9aX0dGWF9PUFRJTUlaRV9NT0JJ
TEUKICAgICBtb2RlID0gTGF5ZXI6OlNVUkZBQ0VfU0lOR0xFX0NIQU5ORUxfQUxQSEE7CiAjZWxz
ZQogICAgIGlmICghbUxheWVyLT5HZXRQYXJlbnQoKSB8fCAhbUxheWVyLT5HZXRQYXJlbnQoKS0+
U3VwcG9ydHNDb21wb25lbnRBbHBoYUNoaWxkcmVuKCkpIHsKICAgICAgIG1vZGUgPSBMYXllcjo6
U1VSRkFDRV9TSU5HTEVfQ0hBTk5FTF9BTFBIQTsKICAgICB9IGVsc2UgewogICAgICAgYUNvbnRl
bnRUeXBlID0gZ2Z4QVN1cmZhY2U6OkNPTlRFTlRfQ09MT1I7CiAgICAgfQogI2VuZGlmCiAgIH0K
KyAgaWYgKG1vZGUgPT0gTGF5ZXI6OlNVUkZBQ0VfT1BBUVVFICYmIGFDb250ZW50VHlwZSA9PSBn
ZnhBU3VyZmFjZTo6Q09OVEVOVF9DT0xPUl9BTFBIQSkgeworICAgIC8vIFRoZSBjYWxsZXIgbWF5
IGJlIGZvcmNpbmcgdXMgdG8gdXNlIGFuIFJHQkEgdGV4dHVyZQorICAgIG1vZGUgPSBMYXllcjo6
U1VSRkFDRV9TSU5HTEVfQ0hBTk5FTF9BTFBIQTsKKyAgfQogCiAgIGlmICghbVRleEltYWdlIHx8
IG1UZXhJbWFnZS0+R2V0Q29udGVudFR5cGUoKSAhPSBhQ29udGVudFR5cGUgfHwKICAgICAgIGFY
UmVzb2x1dGlvbiAhPSBjdXJYUmVzIHx8IGFZUmVzb2x1dGlvbiAhPSBjdXJZUmVzIHx8CiAgICAg
ICAobW9kZSA9PSBMYXllcjo6U1VSRkFDRV9DT01QT05FTlRfQUxQSEEpICE9IChtVGV4SW1hZ2VP
bldoaXRlICE9IG5zbnVsbCkpIHsKICAgICAvLyBXZSdyZSBlZmZlY3RpdmVseSBjbGVhcmluZyB0
aGUgdmFsaWQgcmVnaW9uLCBzbyB3ZSBuZWVkIHRvIGRyYXcKLSAgICAvLyB0aGUgZW50aXJlIHZp
c2libGUgcmVnaW9uIG5vdy4KKyAgICAvLyB0aGUgZW50aXJlIG5lZWRlZCByZWdpb24gbm93Lgog
ICAgIC8vCiAgICAgLy8gWFhYL2Nqb25lczogYSBwb3NzaWJseSB3b3J0aHdoaWxlIG9wdGltaXph
dGlvbiB0byBrZWVwIGluIG1pbmQKICAgICAvLyBpcyB0byByZS11c2UgYnVmZmVycyB3aGVuIHRo
ZSByZXNvbHV0aW9uIGFuZCB2aXNpYmxlIHJlZ2lvbgogICAgIC8vIGhhdmUgY2hhbmdlZCBpbiBz
dWNoIGEgd2F5IHRoYXQgdGhlIGJ1ZmZlciBzaXplIHN0YXlzIHRoZSBzYW1lLgogICAgIC8vIEl0
IG1pZ2h0IG1ha2UgZXZlbiBtb3JlIHNlbnNlIHRvIGFsbG9jYXRlIGJ1ZmZlcnMgZnJvbSBhCiAg
ICAgLy8gcmVjeWNsYWJsZSBwb29sLCBzbyB0aGF0IHdlIGNvdWxkIGtlZXAgdGhpcyBsb2dpYyBz
aW1wbGUgYW5kCiAgICAgLy8gc3RpbGwgZ2V0IGJhY2sgdGhlIHNhbWUgYnVmZmVyLgotICAgIHJl
c3VsdC5tUmVnaW9uVG9EcmF3ID0gbUxheWVyLT5HZXRWaXNpYmxlUmVnaW9uKCk7CisgICAgcmVz
dWx0Lm1SZWdpb25Ub0RyYXcgPSBhTmVlZGVkUmVnaW9uOwogICAgIHJlc3VsdC5tUmVnaW9uVG9J
bnZhbGlkYXRlID0gbUxheWVyLT5HZXRWYWxpZFJlZ2lvbigpOwogICAgIG1UZXhJbWFnZSA9IG5z
bnVsbDsKICAgICBtVGV4SW1hZ2VPbldoaXRlID0gbnNudWxsOwogICAgIG1CdWZmZXJSZWN0LlNl
dFJlY3QoMCwgMCwgMCwgMCk7CiAgICAgbUJ1ZmZlclJvdGF0aW9uLk1vdmVUbygwLCAwKTsKICAg
fQogCiAgIGlmIChyZXN1bHQubVJlZ2lvblRvRHJhdy5Jc0VtcHR5KCkpCiAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICBuc0ludFJlY3QgdmlzaWJsZUJvdW5kcyA9IG1MYXllci0+R2V0VmlzaWJsZVJl
Z2lvbigpLkdldEJvdW5kcygpOworICBuc0ludFJlY3QgbmVlZGVkQm91bmRzID0gYU5lZWRlZFJl
Z2lvbi5HZXRCb3VuZHMoKTsKICAgbnNJbnRSZWN0IGRyYXdCb3VuZHMgPSByZXN1bHQubVJlZ2lv
blRvRHJhdy5HZXRCb3VuZHMoKTsKLSAgbnNJbnRTaXplIGRlc3RCdWZmZXJEaW1zID0gU2NhbGVk
U2l6ZSh2aXNpYmxlQm91bmRzLlNpemUoKSwKKyAgbnNJbnRTaXplIGRlc3RCdWZmZXJEaW1zID0g
U2NhbGVkU2l6ZShuZWVkZWRCb3VuZHMuU2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFYUmVzb2x1dGlvbiwgYVlSZXNvbHV0aW9uKTsKICAgCiAgIGlmIChk
ZXN0QnVmZmVyRGltcy53aWR0aCA+IGdsKCktPkdldE1heFRleHR1cmVTaXplKCkgfHwKICAgICAg
IGRlc3RCdWZmZXJEaW1zLmhlaWdodCA+IGdsKCktPkdldE1heFRleHR1cmVTaXplKCkpIHsKICAg
ICByZXR1cm4gcmVzdWx0OwogICB9CiAKICAgbnNSZWZQdHI8VGV4dHVyZUltYWdlPiBkZXN0QnVm
ZmVyOwogICBuc1JlZlB0cjxUZXh0dXJlSW1hZ2U+IGRlc3RCdWZmZXJPbldoaXRlOwogICBuc0lu
dFJlY3QgZGVzdEJ1ZmZlclJlY3Q7CisgIFBSVWludDMyIHRleHR1cmVGbGFncyA9IG1FbmFibGVS
b3RhdGlvbk9wdGltaXphdGlvbiA/IEFMTE9XX1JFUEVBVCA6IDA7CiAKLSAgaWYgKHZpc2libGVC
b3VuZHMuU2l6ZSgpIDw9IG1CdWZmZXJSZWN0LlNpemUoKSkgeworICBpZiAobmVlZGVkQm91bmRz
LlNpemUoKSA8PSBtQnVmZmVyUmVjdC5TaXplKCkgJiYKKyAgICAgIG1UZXhJbWFnZSAmJgorICAg
ICAgKG1UZXhJbWFnZS0+R2V0V3JhcE1vZGUoKSA9PSBMT0NBTF9HTF9DTEFNUF9UT19FREdFIHx8
IG1FbmFibGVSb3RhdGlvbk9wdGltaXphdGlvbikpIHsKICAgICBOU19BU1NFUlRJT04oY3VyWFJl
cyA9PSBhWFJlc29sdXRpb24gJiYgY3VyWVJlcyA9PSBhWVJlc29sdXRpb24sCiAgICAgICAgICAg
ICAgICAgICJyZXNvbHV0aW9uIGNoYW5nZXMgbXVzdCBjbGVhciB0aGUgYnVmZmVyISIpOwogICAg
IC8vIFRoZSBjdXJyZW50IGJ1ZmZlciBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHZpc2libGUg
YXJlYS4KLSAgICBpZiAobUJ1ZmZlclJlY3QuQ29udGFpbnModmlzaWJsZUJvdW5kcykpIHsKKyAg
ICBpZiAobUJ1ZmZlclJlY3QuQ29udGFpbnMobmVlZGVkQm91bmRzKSkgewogICAgICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byBhZGp1c3QgbUJ1ZmZlclJlY3QuCiAgICAgICBkZXN0QnVmZmVyUmVjdCA9
IG1CdWZmZXJSZWN0OwogICAgIH0gZWxzZSB7CiAgICAgICAvLyBUaGUgYnVmZmVyJ3MgYmlnIGVu
b3VnaCBidXQgZG9lc24ndCBjb250YWluIGV2ZXJ5dGhpbmcgdGhhdCdzCiAgICAgICAvLyBnb2lu
ZyB0byBiZSB2aXNpYmxlLiBXZSdsbCBtb3ZlIGl0LgotICAgICAgZGVzdEJ1ZmZlclJlY3QgPSBu
c0ludFJlY3QodmlzaWJsZUJvdW5kcy5Ub3BMZWZ0KCksIG1CdWZmZXJSZWN0LlNpemUoKSk7Cisg
ICAgICBkZXN0QnVmZmVyUmVjdCA9IG5zSW50UmVjdChuZWVkZWRCb3VuZHMuVG9wTGVmdCgpLCBt
QnVmZmVyUmVjdC5TaXplKCkpOwogICAgIH0KICAgICBuc0ludFJlY3Qga2VlcEFyZWE7CiAgICAg
aWYgKGtlZXBBcmVhLkludGVyc2VjdFJlY3QoZGVzdEJ1ZmZlclJlY3QsIG1CdWZmZXJSZWN0KSkg
ewogICAgICAgLy8gU2V0IG1CdWZmZXJSb3RhdGlvbiBzbyB0aGF0IHRoZSBwaXhlbHMgY3VycmVu
dGx5IGluIG1CdWZmZXIKICAgICAgIC8vIHdpbGwgc3RpbGwgYmUgcmVuZGVyZWQgaW4gdGhlIHJp
Z2h0IHBsYWNlIHdoZW4gbUJ1ZmZlclJlY3QKICAgICAgIC8vIGNoYW5nZXMgdG8gZGVzdEJ1ZmZl
clJlY3QuCiAgICAgICBuc0ludFBvaW50IG5ld1JvdGF0aW9uID0gbUJ1ZmZlclJvdGF0aW9uICsK
ICAgICAgICAgKGRlc3RCdWZmZXJSZWN0LlRvcExlZnQoKSAtIG1CdWZmZXJSZWN0LlRvcExlZnQo
KSk7CiAgICAgICBXcmFwUm90YXRpb25BeGlzKCZuZXdSb3RhdGlvbi54LCBtQnVmZmVyUmVjdC53
aWR0aCk7CiAgICAgICBXcmFwUm90YXRpb25BeGlzKCZuZXdSb3RhdGlvbi55LCBtQnVmZmVyUmVj
dC5oZWlnaHQpOwogICAgICAgTlNfQVNTRVJUSU9OKG5zSW50UmVjdChuc0ludFBvaW50KDAsMCks
IG1CdWZmZXJSZWN0LlNpemUoKSkuQ29udGFpbnMobmV3Um90YXRpb24pLAogICAgICAgICAgICAg
ICAgICAgICJuZXdSb3RhdGlvbiBvdXQgb2YgYm91bmRzIik7CiAgICAgICBQUkludDMyIHhCb3Vu
ZGFyeSA9IGRlc3RCdWZmZXJSZWN0LlhNb3N0KCkgLSBuZXdSb3RhdGlvbi54OwogICAgICAgUFJJ
bnQzMiB5Qm91bmRhcnkgPSBkZXN0QnVmZmVyUmVjdC5ZTW9zdCgpIC0gbmV3Um90YXRpb24ueTsK
ICAgICAgIGlmICgoZHJhd0JvdW5kcy54IDwgeEJvdW5kYXJ5ICYmIHhCb3VuZGFyeSA8IGRyYXdC
b3VuZHMuWE1vc3QoKSkgfHwKLSAgICAgICAgICAoZHJhd0JvdW5kcy55IDwgeUJvdW5kYXJ5ICYm
IHlCb3VuZGFyeSA8IGRyYXdCb3VuZHMuWU1vc3QoKSkpIHsKKyAgICAgICAgICAoZHJhd0JvdW5k
cy55IDwgeUJvdW5kYXJ5ICYmIHlCb3VuZGFyeSA8IGRyYXdCb3VuZHMuWU1vc3QoKSkgfHwKKyAg
ICAgICAgICAoIW1FbmFibGVSb3RhdGlvbk9wdGltaXphdGlvbiAmJiBuZXdSb3RhdGlvbiAhPSBu
c0ludFBvaW50KDAsMCkpKSB7CiAgICAgICAgIC8vIFRoZSBzdHVmZiB3ZSBuZWVkIHRvIHJlZHJh
dyB3aWxsIHdyYXAgYXJvdW5kIGFuIGVkZ2Ugb2YgdGhlCiAgICAgICAgIC8vIGJ1ZmZlciwgc28g
d2Ugd2lsbCBuZWVkIHRvIGRvIGEgc2VsZi1jb3B5CiAgICAgICAgIC8vIElmIG1CdWZmZXJSb3Rh
dGlvbiA9PSBuc0ludFBvaW50KDAsMCkgd2UgY291bGQgZG8gYSByZWFsCiAgICAgICAgIC8vIHNl
bGYtY29weSBidXQgd2UncmUgbm90IGdvaW5nIHRvIGRvIHRoYXQgaW4gR0wgeWV0LgogICAgICAg
ICAvLyBXZSBjYW4ndCBkbyBhIHJlYWwgc2VsZi1jb3B5IGJlY2F1c2UgdGhlIGJ1ZmZlciBpcyBy
b3RhdGVkLgogICAgICAgICAvLyBTbyBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgZm9yIHRoZSBkZXN0
aW5hdGlvbi4KLSAgICAgICAgZGVzdEJ1ZmZlclJlY3QgPSB2aXNpYmxlQm91bmRzOwotICAgICAg
ICBkZXN0QnVmZmVyID0gQ3JlYXRlQ2xhbXBPclJlcGVhdFRleHR1cmVJbWFnZShnbCgpLCBkZXN0
QnVmZmVyRGltcywgYUNvbnRlbnRUeXBlKTsKKyAgICAgICAgZGVzdEJ1ZmZlclJlY3QgPSBuZWVk
ZWRCb3VuZHM7CisgICAgICAgIGRlc3RCdWZmZXIgPSBDcmVhdGVDbGFtcE9yUmVwZWF0VGV4dHVy
ZUltYWdlKGdsKCksIGRlc3RCdWZmZXJEaW1zLCBhQ29udGVudFR5cGUsIHRleHR1cmVGbGFncyk7
CiAgICAgICAgIERFQlVHX0dMX0VSUk9SX0NIRUNLKGdsKCkpOwogICAgICAgICBpZiAoIWRlc3RC
dWZmZXIpCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgaWYgKG1vZGUgPT0gTGF5
ZXI6OlNVUkZBQ0VfQ09NUE9ORU5UX0FMUEhBKSB7CiAgICAgICAgICAgZGVzdEJ1ZmZlck9uV2hp
dGUgPQotICAgICAgICAgICAgQ3JlYXRlQ2xhbXBPclJlcGVhdFRleHR1cmVJbWFnZShnbCgpLCBk
ZXN0QnVmZmVyRGltcywgYUNvbnRlbnRUeXBlKTsKKyAgICAgICAgICAgIENyZWF0ZUNsYW1wT3JS
ZXBlYXRUZXh0dXJlSW1hZ2UoZ2woKSwgZGVzdEJ1ZmZlckRpbXMsIGFDb250ZW50VHlwZSwgdGV4
dHVyZUZsYWdzKTsKICAgICAgICAgICBERUJVR19HTF9FUlJPUl9DSEVDSyhnbCgpKTsKICAgICAg
ICAgICBpZiAoIWRlc3RCdWZmZXJPbldoaXRlKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKICAgICAgICAgbUJ1ZmZlclJlY3QgPSBkZXN0QnVm
ZmVyUmVjdDsKICAgICAgICAgbUJ1ZmZlclJvdGF0aW9uID0gbmV3Um90YXRpb247CiAgICAgICB9
CkBAIC01MTUsMjUgKzU0NiwyNSBAQCBCYXNpY0J1ZmZlck9HTDo6QmVnaW5QYWludChDb250ZW50
VHlwZSBhCiAgICAgICAvLyBObyBwaXhlbHMgYXJlIGdvaW5nIHRvIGJlIGtlcHQuIFRoZSB3aG9s
ZSB2aXNpYmxlIHJlZ2lvbgogICAgICAgLy8gd2lsbCBiZSByZWRyYXduLCBzbyB3ZSBkb24ndCBu
ZWVkIHRvIGNvcHkgYW55dGhpbmcsIHNvIHdlIGRvbid0CiAgICAgICAvLyBzZXQgZGVzdEJ1ZmZl
ci4KICAgICAgIG1CdWZmZXJSZWN0ID0gZGVzdEJ1ZmZlclJlY3Q7CiAgICAgICBtQnVmZmVyUm90
YXRpb24gPSBuc0ludFBvaW50KDAsMCk7CiAgICAgfQogICB9IGVsc2UgewogICAgIC8vIFRoZSBi
dWZmZXIncyBub3QgYmlnIGVub3VnaCwgc28gYWxsb2NhdGUgYSBuZXcgb25lCi0gICAgZGVzdEJ1
ZmZlclJlY3QgPSB2aXNpYmxlQm91bmRzOwotICAgIGRlc3RCdWZmZXIgPSBDcmVhdGVDbGFtcE9y
UmVwZWF0VGV4dHVyZUltYWdlKGdsKCksIGRlc3RCdWZmZXJEaW1zLCBhQ29udGVudFR5cGUpOwor
ICAgIGRlc3RCdWZmZXJSZWN0ID0gbmVlZGVkQm91bmRzOworICAgIGRlc3RCdWZmZXIgPSBDcmVh
dGVDbGFtcE9yUmVwZWF0VGV4dHVyZUltYWdlKGdsKCksIGRlc3RCdWZmZXJEaW1zLCBhQ29udGVu
dFR5cGUsIHRleHR1cmVGbGFncyk7CiAgICAgREVCVUdfR0xfRVJST1JfQ0hFQ0soZ2woKSk7CiAg
ICAgaWYgKCFkZXN0QnVmZmVyKQogICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIGlmIChtb2Rl
ID09IExheWVyOjpTVVJGQUNFX0NPTVBPTkVOVF9BTFBIQSkgewogICAgICAgZGVzdEJ1ZmZlck9u
V2hpdGUgPSAKLSAgICAgICAgQ3JlYXRlQ2xhbXBPclJlcGVhdFRleHR1cmVJbWFnZShnbCgpLCBk
ZXN0QnVmZmVyRGltcywgYUNvbnRlbnRUeXBlKTsKKyAgICAgICAgQ3JlYXRlQ2xhbXBPclJlcGVh
dFRleHR1cmVJbWFnZShnbCgpLCBkZXN0QnVmZmVyRGltcywgYUNvbnRlbnRUeXBlLCB0ZXh0dXJl
RmxhZ3MpOwogICAgICAgREVCVUdfR0xfRVJST1JfQ0hFQ0soZ2woKSk7CiAgICAgICBpZiAoIWRl
c3RCdWZmZXJPbldoaXRlKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgfQogCiAg
IGlmICghZGVzdEJ1ZmZlciAmJiAhbVRleEltYWdlKSB7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTU2MCwzMiArNTkxLDM0IEBAIEJhc2ljQnVmZmVyT0dMOjpCZWdpblBhaW50KENvbnRlbnRUeXBl
IGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0QnVmZmVyLCBkc3RSZWN0KTsK
ICAgICAgICAgaWYgKG1vZGUgPT0gTGF5ZXI6OlNVUkZBQ0VfQ09NUE9ORU5UX0FMUEhBKSB7CiAg
ICAgICAgICAgZGVzdEJ1ZmZlck9uV2hpdGUtPlJlc2l6ZShzaXplKTsKICAgICAgICAgICBnbCgp
LT5CbGl0VGV4dHVyZUltYWdlKG1UZXhJbWFnZU9uV2hpdGUsIHNyY1JlY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0QnVmZmVyT25XaGl0ZSwgZHN0UmVjdCk7CiAgICAg
ICAgIH0KICAgICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIGNhbid0IGJsaXQsIGp1c3QgZHJhdyBl
dmVyeXRoaW5nCi0gICAgICAgIGRlc3RCdWZmZXJSZWN0ID0gdmlzaWJsZUJvdW5kczsKLSAgICAg
ICAgZGVzdEJ1ZmZlciA9IENyZWF0ZUNsYW1wT3JSZXBlYXRUZXh0dXJlSW1hZ2UoZ2woKSwgZGVz
dEJ1ZmZlckRpbXMsIGFDb250ZW50VHlwZSk7CisgICAgICAgIGRlc3RCdWZmZXJSZWN0ID0gbmVl
ZGVkQm91bmRzOworICAgICAgICBkZXN0QnVmZmVyID0gQ3JlYXRlQ2xhbXBPclJlcGVhdFRleHR1
cmVJbWFnZShnbCgpLCBkZXN0QnVmZmVyRGltcywgYUNvbnRlbnRUeXBlLCB0ZXh0dXJlRmxhZ3Mp
OwogICAgICAgICBpZiAobW9kZSA9PSBMYXllcjo6U1VSRkFDRV9DT01QT05FTlRfQUxQSEEpIHsK
ICAgICAgICAgICBkZXN0QnVmZmVyT25XaGl0ZSA9IAotICAgICAgICAgICAgQ3JlYXRlQ2xhbXBP
clJlcGVhdFRleHR1cmVJbWFnZShnbCgpLCBkZXN0QnVmZmVyRGltcywgYUNvbnRlbnRUeXBlKTsK
KyAgICAgICAgICAgIENyZWF0ZUNsYW1wT3JSZXBlYXRUZXh0dXJlSW1hZ2UoZ2woKSwgZGVzdEJ1
ZmZlckRpbXMsIGFDb250ZW50VHlwZSwgdGV4dHVyZUZsYWdzKTsKICAgICAgICAgfQogICAgICAg
fQogICAgIH0KIAogICAgIG1UZXhJbWFnZSA9IGRlc3RCdWZmZXIuZm9yZ2V0KCk7CiAgICAgaWYg
KG1vZGUgPT0gTGF5ZXI6OlNVUkZBQ0VfQ09NUE9ORU5UX0FMUEhBKSB7CiAgICAgICBtVGV4SW1h
Z2VPbldoaXRlID0gZGVzdEJ1ZmZlck9uV2hpdGUuZm9yZ2V0KCk7CiAgICAgfQogICAgIG1CdWZm
ZXJSZWN0ID0gZGVzdEJ1ZmZlclJlY3Q7CiAgICAgbUJ1ZmZlclJvdGF0aW9uID0gbnNJbnRQb2lu
dCgwLDApOwogICB9CisgIE5TX0FTU0VSVElPTihtRW5hYmxlUm90YXRpb25PcHRpbWl6YXRpb24g
fHwgbUJ1ZmZlclJvdGF0aW9uID09IG5zSW50UG9pbnQoMCwwKSwKKyAgICAgICAgICAgICAgICJS
b3RhdGlvbiBkaXNhYmxlZCwgYnV0IHdlIGhhdmUgbm9uemVybyByb3RhdGlvbj8iKTsKIAogICBu
c0ludFJlZ2lvbiBpbnZhbGlkYXRlOwogICBpbnZhbGlkYXRlLlN1YihtTGF5ZXItPkdldFZhbGlk
UmVnaW9uKCksIGRlc3RCdWZmZXJSZWN0KTsKICAgcmVzdWx0Lm1SZWdpb25Ub0ludmFsaWRhdGUu
T3IocmVzdWx0Lm1SZWdpb25Ub0ludmFsaWRhdGUsIGludmFsaWRhdGUpOwogCiAgIC8vIEZpZ3Vy
ZSBvdXQgd2hpY2ggcXVhZHJhbnQgdG8gZHJhdyBpbgogICBQUkludDMyIHhCb3VuZGFyeSA9IG1C
dWZmZXJSZWN0LlhNb3N0KCkgLSBtQnVmZmVyUm90YXRpb24ueDsKICAgUFJJbnQzMiB5Qm91bmRh
cnkgPSBtQnVmZmVyUmVjdC5ZTW9zdCgpIC0gbUJ1ZmZlclJvdGF0aW9uLnk7CkBAIC02MjUsMTcg
KzY1OCwxNyBAQCBCYXNpY0J1ZmZlck9HTDo6QmVnaW5QYWludChDb250ZW50VHlwZSBhCiAgICAg
Ly8gYmUgaW5jb3JyZWN0LgogICAgIHN1cmYtPlNldEFsbG93VXNlQXNTb3VyY2UoUFJfRkFMU0Up
OwogICAgIHJlc3VsdC5tQ29udGV4dCA9IG5ldyBnZnhDb250ZXh0KHN1cmYpOwogICB9IGVsc2Ug
ewogICAgIHJlc3VsdC5tQ29udGV4dCA9IG5ldyBnZnhDb250ZXh0KG1UZXhJbWFnZS0+QmVnaW5V
cGRhdGUocmVzdWx0Lm1SZWdpb25Ub0RyYXcpKTsKICAgICBpZiAobVRleEltYWdlLT5HZXRDb250
ZW50VHlwZSgpID09IGdmeEFTdXJmYWNlOjpDT05URU5UX0NPTE9SX0FMUEhBKSB7CiAgICAgICBn
ZnhVdGlsczo6Q2xpcFRvUmVnaW9uKHJlc3VsdC5tQ29udGV4dCwgcmVzdWx0Lm1SZWdpb25Ub0Ry
YXcpOwogICAgICAgcmVzdWx0Lm1Db250ZXh0LT5TZXRPcGVyYXRvcihnZnhDb250ZXh0OjpPUEVS
QVRPUl9DTEVBUik7Ci0gICAgICByZXN1bHQubUNvbnRleHQtPkZpbGwoKTsKKyAgICAgIHJlc3Vs
dC5tQ29udGV4dC0+UGFpbnQoKTsKICAgICAgIHJlc3VsdC5tQ29udGV4dC0+U2V0T3BlcmF0b3Io
Z2Z4Q29udGV4dDo6T1BFUkFUT1JfT1ZFUik7CiAgICAgfQogICB9CiAgIGlmICghcmVzdWx0Lm1D
b250ZXh0KSB7CiAgICAgTlNfV0FSTklORygidW5hYmxlIHRvIGdldCBjb250ZXh0IGZvciB1cGRh
dGUiKTsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAgIHJlc3VsdC5tQ29udGV4dC0+U2NhbGUo
YVhSZXNvbHV0aW9uLCBhWVJlc29sdXRpb24pOwpAQCAtNzE5LDQ1ICs3NTIsNTkgQEAgVGhlYmVz
TGF5ZXJPR0w6OlJlbmRlckxheWVyKGludCBhUHJldmlvdQogICBtT0dMTWFuYWdlci0+TWFrZUN1
cnJlbnQoKTsKICAgZ2woKS0+ZkFjdGl2ZVRleHR1cmUoTE9DQUxfR0xfVEVYVFVSRTApOwogCiAg
IFRleHR1cmVJbWFnZTo6Q29udGVudFR5cGUgY29udGVudFR5cGUgPQogICAgIENhblVzZU9wYXF1
ZVN1cmZhY2UoKSA/IGdmeEFTdXJmYWNlOjpDT05URU5UX0NPTE9SIDoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZnhBU3VyZmFjZTo6Q09OVEVOVF9DT0xPUl9BTFBIQTsKIAogICBjb25z
dCBnZngzRE1hdHJpeCYgdHJhbnNmb3JtID0gR2V0RWZmZWN0aXZlVHJhbnNmb3JtKCk7CisgIG5z
SW50UmVnaW9uIG5lZWRlZFJlZ2lvbiA9IG1WaXNpYmxlUmVnaW9uOwogICBnZnhNYXRyaXggdHJh
bnNmb3JtMmQ7CiAgIGdmeFNpemUgc2NhbGUoMS4wLCAxLjApOworICBmbG9hdCBwYWludFhSZXMg
PSAxLjA7CisgIGZsb2F0IHBhaW50WVJlcyA9IDEuMDsKKyAgYm9vbCB3aWxsUmVzYW1wbGU7CiAg
IGlmICh0cmFuc2Zvcm0uSXMyRCgmdHJhbnNmb3JtMmQpKSB7CiAgICAgc2NhbGUgPSB0cmFuc2Zv
cm0yZC5TY2FsZUZhY3RvcnMoUFJfVFJVRSk7CisgICAgcGFpbnRYUmVzID0gZ2Z4VXRpbHM6OkNs
YW1wVG9TY2FsZUZhY3RvcihzY2FsZS53aWR0aCk7CisgICAgcGFpbnRZUmVzID0gZ2Z4VXRpbHM6
OkNsYW1wVG9TY2FsZUZhY3RvcihzY2FsZS5oZWlnaHQpOworICAgIHRyYW5zZm9ybTJkLlNjYWxl
KDEuMC9wYWludFhSZXMsIDEuMC9wYWludFlSZXMpOworICAgIHdpbGxSZXNhbXBsZSA9IHRyYW5z
Zm9ybTJkLkhhc05vbkludGVnZXJUcmFuc2xhdGlvbigpOworICB9IGVsc2UgeworICAgIHdpbGxS
ZXNhbXBsZSA9IHRydWU7CiAgIH0KLSAgZmxvYXQgcGFpbnRYUmVzID0gZ2Z4VXRpbHM6OkNsYW1w
VG9TY2FsZUZhY3RvcihzY2FsZS53aWR0aCk7Ci0gIGZsb2F0IHBhaW50WVJlcyA9IGdmeFV0aWxz
OjpDbGFtcFRvU2NhbGVGYWN0b3Ioc2NhbGUuaGVpZ2h0KTsKKyAgaWYgKHdpbGxSZXNhbXBsZSAm
JiBuZWVkZWRSZWdpb24uR2V0TnVtUmVjdHMoKSA+IDEpIHsKKyAgICBuZWVkZWRSZWdpb24gPSBt
VmlzaWJsZVJlZ2lvbi5HZXRCb3VuZHMoKTsKKyAgICBjb250ZW50VHlwZSA9IGdmeEFTdXJmYWNl
OjpDT05URU5UX0NPTE9SX0FMUEhBOworICB9CiAKLSAgQnVmZmVyOjpQYWludFN0YXRlIHN0YXRl
ID0gbUJ1ZmZlci0+QmVnaW5QYWludChjb250ZW50VHlwZSwgcGFpbnRYUmVzLCBwYWludFlSZXMp
OworICBtQnVmZmVyLT5TZXRFbmFibGVSb3RhdGlvbk9wdGltaXphdGlvbighd2lsbFJlc2FtcGxl
KTsKKyAgQnVmZmVyOjpQYWludFN0YXRlIHN0YXRlID0KKyAgICBtQnVmZmVyLT5CZWdpblBhaW50
KGNvbnRlbnRUeXBlLCBuZWVkZWRSZWdpb24sIHBhaW50WFJlcywgcGFpbnRZUmVzKTsKICAgbVZh
bGlkUmVnaW9uLlN1YihtVmFsaWRSZWdpb24sIHN0YXRlLm1SZWdpb25Ub0ludmFsaWRhdGUpOwog
CiAgIGlmIChzdGF0ZS5tQ29udGV4dCkgewotICAgIHN0YXRlLm1SZWdpb25Ub0ludmFsaWRhdGUu
QW5kKHN0YXRlLm1SZWdpb25Ub0ludmFsaWRhdGUsIG1WaXNpYmxlUmVnaW9uKTsKKyAgICBzdGF0
ZS5tUmVnaW9uVG9JbnZhbGlkYXRlLkFuZChzdGF0ZS5tUmVnaW9uVG9JbnZhbGlkYXRlLCBuZWVk
ZWRSZWdpb24pOwogICAgIG1YUmVzb2x1dGlvbiA9IHBhaW50WFJlczsKICAgICBtWVJlc29sdXRp
b24gPSBwYWludFlSZXM7CiAKICAgICBMYXllck1hbmFnZXI6OkRyYXdUaGViZXNMYXllckNhbGxi
YWNrIGNhbGxiYWNrID0KICAgICAgIG1PR0xNYW5hZ2VyLT5HZXRUaGViZXNMYXllckNhbGxiYWNr
KCk7CiAgICAgaWYgKCFjYWxsYmFjaykgewogICAgICAgTlNfRVJST1IoIkdMIHNob3VsZCBuZXZl
ciBuZWVkIHRvIHVwZGF0ZSBUaGViZXNMYXllcnMgaW4gYW4gZW1wdHkgdHJhbnNhY3Rpb24iKTsK
ICAgICB9IGVsc2UgewogICAgICAgdm9pZCogY2FsbGJhY2tEYXRhID0gbU9HTE1hbmFnZXItPkdl
dFRoZWJlc0xheWVyQ2FsbGJhY2tEYXRhKCk7CiAgICAgICBjYWxsYmFjayh0aGlzLCBzdGF0ZS5t
Q29udGV4dCwgc3RhdGUubVJlZ2lvblRvRHJhdywKICAgICAgICAgICAgICAgIHN0YXRlLm1SZWdp
b25Ub0ludmFsaWRhdGUsIGNhbGxiYWNrRGF0YSk7CiAgICAgICAvLyBFdmVyeXRoaW5nIHRoYXQn
cyB2aXNpYmxlIGhhcyBiZWVuIHZhbGlkYXRlZC4gRG8gdGhpcyBpbnN0ZWFkIG9mCiAgICAgICAv
LyBPUi1pbmcgd2l0aCBhUmVnaW9uVG9EcmF3LCBzaW5jZSB0aGF0IGNhbiBsZWFkIHRvIGEgdmVy
eSBjb21wbGV4IHJlZ2lvbgogICAgICAgLy8gaGVyZSAoT1IgZG9lc24ndCBhdXRvbWF0aWNhbGx5
IHNpbXBsaWZ5IHRvIHRoZSBzaW1wbGVzdCBwb3NzaWJsZQogICAgICAgLy8gcmVwcmVzZW50YXRp
b24gb2YgYSByZWdpb24uKQotICAgICAgbVZhbGlkUmVnaW9uLk9yKG1WYWxpZFJlZ2lvbiwgbVZp
c2libGVSZWdpb24pOworICAgICAgbVZhbGlkUmVnaW9uLk9yKG1WYWxpZFJlZ2lvbiwgbmVlZGVk
UmVnaW9uKTsKICAgICB9CiAgIH0KIAogICBERUJVR19HTF9FUlJPUl9DSEVDSyhnbCgpKTsKIAog
ICBnbCgpLT5mQmluZEZyYW1lYnVmZmVyKExPQ0FMX0dMX0ZSQU1FQlVGRkVSLCBhUHJldmlvdXNG
cmFtZUJ1ZmZlcik7CiAgIG1CdWZmZXItPlJlbmRlclRvKGFPZmZzZXQsIG1PR0xNYW5hZ2VyKTsK
ICAgREVCVUdfR0xfRVJST1JfQ0hFQ0soZ2woKSk7CkBAIC03ODAsMjkgKzgyNywyMyBAQCBUaGVi
ZXNMYXllck9HTDo6SXNFbXB0eSgpCiAKIGNsYXNzIFNoYWRvd0J1ZmZlck9HTCA6IHB1YmxpYyBU
aGViZXNMYXllckJ1ZmZlck9HTAogewogcHVibGljOgogICBTaGFkb3dCdWZmZXJPR0woU2hhZG93
VGhlYmVzTGF5ZXJPR0wqIGFMYXllcikKICAgICA6IFRoZWJlc0xheWVyQnVmZmVyT0dMKGFMYXll
ciwgYUxheWVyKQogICB7fQogCi0gIHZpcnR1YWwgUGFpbnRTdGF0ZSBCZWdpblBhaW50KENvbnRl
bnRUeXBlIGFDb250ZW50VHlwZSwgZmxvYXQsIGZsb2F0KSB7CisgIHZpcnR1YWwgdm9pZCBTZXRF
bmFibGVSb3RhdGlvbk9wdGltaXphdGlvbihQUkJvb2wgYUVuYWJsZSkge30KKyAgdmlydHVhbCBQ
YWludFN0YXRlIEJlZ2luUGFpbnQoQ29udGVudFR5cGUgYUNvbnRlbnRUeXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0ludFJlZ2lvbiYsIGZsb2F0LCBmbG9hdCkg
ewogICAgIE5TX1JVTlRJTUVBQk9SVCgiY2FuJ3QgQmVnaW5QYWludCBmb3IgYSBzaGFkb3cgbGF5
ZXIiKTsKICAgICByZXR1cm4gUGFpbnRTdGF0ZSgpOwogICB9CiAKLSAgdm9pZAotICBDcmVhdGVU
ZXh0dXJlKENvbnRlbnRUeXBlIGFUeXBlLCBjb25zdCBuc0ludFNpemUmIGFTaXplKQotICB7Ci0g
ICAgTlNfQVNTRVJUSU9OKGdmeEFTdXJmYWNlOjpDT05URU5UX0FMUEhBICE9IGFUeXBlLCJUaGVi
ZXNCdWZmZXIgaGFzIGNvbG9yIik7Ci0KLSAgICBtVGV4SW1hZ2UgPSBDcmVhdGVDbGFtcE9yUmVw
ZWF0VGV4dHVyZUltYWdlKGdsKCksIGFTaXplLCBhVHlwZSk7Ci0gIH0KLQogICB2b2lkIFVwbG9h
ZChnZnhBU3VyZmFjZSogYVVwZGF0ZSwgY29uc3QgbnNJbnRSZWdpb24mIGFVcGRhdGVkLAogICAg
ICAgICAgICAgICBjb25zdCBuc0ludFJlY3QmIGFSZWN0LCBjb25zdCBuc0ludFBvaW50JiBhUm90
YXRpb24pOwogCiBwcm90ZWN0ZWQ6CiAgIHZpcnR1YWwgbnNJbnRQb2ludCBHZXRPcmlnaW5PZmZz
ZXQoKSB7CiAgICAgcmV0dXJuIG1CdWZmZXJSZWN0LlRvcExlZnQoKSAtIG1CdWZmZXJSb3RhdGlv
bjsKICAgfQogCkBAIC04MTIsMTggKzg1MywyMCBAQCBwcml2YXRlOgogfTsKIAogdm9pZAogU2hh
ZG93QnVmZmVyT0dMOjpVcGxvYWQoZ2Z4QVN1cmZhY2UqIGFVcGRhdGUsIGNvbnN0IG5zSW50UmVn
aW9uJiBhVXBkYXRlZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSW50UmVjdCYg
YVJlY3QsIGNvbnN0IG5zSW50UG9pbnQmIGFSb3RhdGlvbikKIHsKICAgZ2Z4SW50U2l6ZSBzaXpl
ID0gYVVwZGF0ZS0+R2V0U2l6ZSgpOwogICBpZiAoR2V0U2l6ZSgpICE9IG5zSW50U2l6ZShzaXpl
LndpZHRoLCBzaXplLmhlaWdodCkpIHsKLSAgICBDcmVhdGVUZXh0dXJlKGFVcGRhdGUtPkdldENv
bnRlbnRUeXBlKCksCi0gICAgICAgICAgICAgICAgICBuc0ludFNpemUoc2l6ZS53aWR0aCwgc2l6
ZS5oZWlnaHQpKTsKKyAgICAvLyBYWFggd2Ugc2hvdWxkIGRvIHNvbWV0aGluZyBoZXJlIHRvIGRl
Y2lkZSB3aGV0aGVyIHRvIHVzZSBSRVBFQVQgb3Igbm90LAorICAgIC8vIGJ1dCBJJ20gbm90IHN1
cmUgd2hhdAorICAgIG1UZXhJbWFnZSA9IENyZWF0ZUNsYW1wT3JSZXBlYXRUZXh0dXJlSW1hZ2Uo
Z2woKSwKKyAgICAgIG5zSW50U2l6ZShzaXplLndpZHRoLCBzaXplLmhlaWdodCksIGFVcGRhdGUt
PkdldENvbnRlbnRUeXBlKCksIEFMTE9XX1JFUEVBVCk7CiAgIH0KIAogICBuc0ludFJlZ2lvbiBk
ZXN0UmVnaW9uKGFVcGRhdGVkKTsKICAgLy8gYVVwZGF0ZWQgaXMgaW4gc2NyZWVuIGNvb3JkaW5h
dGVzLiAgTW92ZSBpdCBzbyB0aGF0IHRoZSBsYXllcidzCiAgIC8vIHRvcC1sZWZ0IGlzIDAsMAog
ICBuc0ludFBvaW50IHZpc1RvcExlZnQgPSBtTGF5ZXItPkdldFZpc2libGVSZWdpb24oKS5HZXRC
b3VuZHMoKS5Ub3BMZWZ0KCk7CiAgIGRlc3RSZWdpb24uTW92ZUJ5KC12aXNUb3BMZWZ0KTsKIAo=
</data>
<flag name="review"
          id="430418"
          type_id="937"
          status="+"
          setter="matt.woodrow"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>514449</attachid>
            <date>2011-02-23 02:05:34 -0800</date>
            <delta_ts>2011-02-23 10:15:38 -0800</delta_ts>
            <desc>Add layersOpenGL to the reftest harness</desc>
            <filename>bug635373-reftest</filename>
            <type>text/plain</type>
            <size>1263</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">RnJvbTogUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYmVydEBvY2FsbGFoYW4ub3JnPgpCdWcgNjM1Mzcz
LiBBZGQgbGF5ZXJzT3BlbkdMIHRvIHRoZSByZWZ0ZXN0IGhhcm5lc3MuIHI9ZGJhcm9uCgpkaWZm
IC0tZ2l0IGEvbGF5b3V0L3Rvb2xzL3JlZnRlc3QvcmVmdGVzdC5qcyBiL2xheW91dC90b29scy9y
ZWZ0ZXN0L3JlZnRlc3QuanMKLS0tIGEvbGF5b3V0L3Rvb2xzL3JlZnRlc3QvcmVmdGVzdC5qcwor
KysgYi9sYXlvdXQvdG9vbHMvcmVmdGVzdC9yZWZ0ZXN0LmpzCkBAIC0zOTAsMjAgKzM5MCwyMCBA
QCBmdW5jdGlvbiBCdWlsZENvbmRpdGlvblNhbmRib3goYVVSTCkgewogICAKICAgICB0cnkgewog
ICAgICAgLy8gbnNJR2Z4SW5mbyBpcyBjdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBvbiBXaW5k
b3dzCiAgICAgICBzYW5kYm94LmQyZCA9IChOU19HRlhJTkZPX0NPTlRSQUNUSUQgaW4gQ0MpICYm
IENDW05TX0dGWElORk9fQ09OVFJBQ1RJRF0uZ2V0U2VydmljZShDSS5uc0lHZnhJbmZvKS5EMkRF
bmFibGVkOwogICAgIH0gY2F0Y2goZSkgewogICAgICAgc2FuZGJveC5kMmQgPSBmYWxzZTsKICAg
ICB9CiAKLSAgICBpZiAoZ1dpbmRvd1V0aWxzICYmIGdXaW5kb3dVdGlscy5sYXllck1hbmFnZXJU
eXBlICE9ICJCYXNpYyIpCi0gICAgICBzYW5kYm94LmxheWVyc0dQVUFjY2VsZXJhdGVkID0gdHJ1
ZTsKLSAgICBlbHNlCi0gICAgICBzYW5kYm94LmxheWVyc0dQVUFjY2VsZXJhdGVkID0gZmFsc2U7
CisgICAgc2FuZGJveC5sYXllcnNHUFVBY2NlbGVyYXRlZCA9CisgICAgICBnV2luZG93VXRpbHMg
JiYgZ1dpbmRvd1V0aWxzLmxheWVyTWFuYWdlclR5cGUgIT0gIkJhc2ljIjsKKyAgICBzYW5kYm94
LmxheWVyc09wZW5HTCA9CisgICAgICBnV2luZG93VXRpbHMgJiYgZ1dpbmRvd1V0aWxzLmxheWVy
TWFuYWdlclR5cGUgPT0gIk9wZW5HTCI7CiAgCiAgICAgLy8gU2hvcnRjdXRzIGZvciB3aWRnZXQg
dG9vbGtpdHMuCiAgICAgc2FuZGJveC5jb2NvYVdpZGdldCA9IHhyLndpZGdldFRvb2xraXQgPT0g
ImNvY29hIjsKICAgICBzYW5kYm94Lmd0azJXaWRnZXQgPSB4ci53aWRnZXRUb29sa2l0ID09ICJn
dGsyIjsKICAgICBzYW5kYm94LnF0V2lkZ2V0ID0geHIud2lkZ2V0VG9vbGtpdCA9PSAicXQiOwog
ICAgIHNhbmRib3gud2luV2lkZ2V0ID0geHIud2lkZ2V0VG9vbGtpdCA9PSAid2luZG93cyI7CiAK
ICAgICB2YXIgaGggPSBDQ1tOU19ORVRXT1JLX1BST1RPQ09MX0NPTlRSQUNUSURfUFJFRklYICsg
Imh0dHAiXS4K
</data>
<flag name="review"
          id="430671"
          type_id="937"
          status="+"
          setter="dbaron"
    />
    <flag name="superreview"
          id="430672"
          type_id="5"
          status="+"
          setter="joe"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>514973</attachid>
            <date>2011-02-24 18:43:19 -0800</date>
            <delta_ts>2011-03-01 11:56:16 -0800</delta_ts>
            <desc>BasicLayers fix</desc>
            <filename>bug635373-basic</filename>
            <type>text/plain</type>
            <size>16832</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">RnJvbTogUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYmVydEBvY2FsbGFoYW4ub3JnPgpCdWcgNjM1Mzcz
LiBEaXNhYmxlIFRoZWJlc0xheWVyQnVmZmVyIHJvdGF0aW9uIGZvciBub24taWRlbnRpdHkgcmVz
b2x1dGlvbnMsIGFuZCBhZGQgQVBJIHRvIGRpc2FibGUgcm90YXRpb24gZXhwbGljaXRseS4gcj1j
am9uZXMKCmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL1RoZWJlc0xheWVyQnVmZmVyLmNwcCBiL2dm
eC9sYXllcnMvVGhlYmVzTGF5ZXJCdWZmZXIuY3BwCi0tLSBhL2dmeC9sYXllcnMvVGhlYmVzTGF5
ZXJCdWZmZXIuY3BwCisrKyBiL2dmeC9sYXllcnMvVGhlYmVzTGF5ZXJCdWZmZXIuY3BwCkBAIC0x
NzUsMTE2ICsxNzUsMTU2IEBAIFdyYXBSb3RhdGlvbkF4aXMoUFJJbnQzMiogYVJvdGF0aW9uUG9p
bnQKICAgICAqYVJvdGF0aW9uUG9pbnQgKz0gYVNpemU7CiAgIH0gZWxzZSBpZiAoKmFSb3RhdGlv
blBvaW50ID49IGFTaXplKSB7CiAgICAgKmFSb3RhdGlvblBvaW50IC09IGFTaXplOwogICB9CiB9
CiAKIFRoZWJlc0xheWVyQnVmZmVyOjpQYWludFN0YXRlCiBUaGViZXNMYXllckJ1ZmZlcjo6QmVn
aW5QYWludChUaGViZXNMYXllciogYUxheWVyLCBDb250ZW50VHlwZSBhQ29udGVudFR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhWFJlc29sdXRpb24sIGZsb2F0IGFZ
UmVzb2x1dGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFYUmVzb2x1
dGlvbiwgZmxvYXQgYVlSZXNvbHV0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJVaW50MzIgYUZsYWdzKQogewogICBQYWludFN0YXRlIHJlc3VsdDsKLQotICByZXN1bHQubVJl
Z2lvblRvRHJhdy5TdWIoYUxheWVyLT5HZXRWaXNpYmxlUmVnaW9uKCksIGFMYXllci0+R2V0VmFs
aWRSZWdpb24oKSk7Ci0KICAgZmxvYXQgY3VyWFJlcyA9IGFMYXllci0+R2V0WFJlc29sdXRpb24o
KTsKICAgZmxvYXQgY3VyWVJlcyA9IGFMYXllci0+R2V0WVJlc29sdXRpb24oKTsKLSAgaWYgKG1C
dWZmZXIgJiYKLSAgICAgIChhQ29udGVudFR5cGUgIT0gbUJ1ZmZlci0+R2V0Q29udGVudFR5cGUo
KSB8fAotICAgICAgIGFYUmVzb2x1dGlvbiAhPSBjdXJYUmVzIHx8IGFZUmVzb2x1dGlvbiAhPSBj
dXJZUmVzKSkgewotICAgIC8vIFdlJ3JlIGVmZmVjdGl2ZWx5IGNsZWFyaW5nIHRoZSB2YWxpZCBy
ZWdpb24sIHNvIHdlIG5lZWQgdG8gZHJhdwotICAgIC8vIHRoZSBlbnRpcmUgdmlzaWJsZSByZWdp
b24gbm93LgotICAgIC8vCi0gICAgLy8gWFhYL2Nqb25lczogYSBwb3NzaWJseSB3b3J0aHdoaWxl
IG9wdGltaXphdGlvbiB0byBrZWVwIGluIG1pbmQKLSAgICAvLyBpcyB0byByZS11c2UgYnVmZmVy
cyB3aGVuIHRoZSByZXNvbHV0aW9uIGFuZCB2aXNpYmxlIHJlZ2lvbgotICAgIC8vIGhhdmUgY2hh
bmdlZCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGJ1ZmZlciBzaXplIHN0YXlzIHRoZSBzYW1lLgot
ICAgIC8vIEl0IG1pZ2h0IG1ha2UgZXZlbiBtb3JlIHNlbnNlIHRvIGFsbG9jYXRlIGJ1ZmZlcnMg
ZnJvbSBhCi0gICAgLy8gcmVjeWNsYWJsZSBwb29sLCBzbyB0aGF0IHdlIGNvdWxkIGtlZXAgdGhp
cyBsb2dpYyBzaW1wbGUgYW5kCi0gICAgLy8gc3RpbGwgZ2V0IGJhY2sgdGhlIHNhbWUgYnVmZmVy
LgotICAgIHJlc3VsdC5tUmVnaW9uVG9EcmF3ID0gYUxheWVyLT5HZXRWaXNpYmxlUmVnaW9uKCk7
Ci0gICAgcmVzdWx0Lm1SZWdpb25Ub0ludmFsaWRhdGUgPSBhTGF5ZXItPkdldFZhbGlkUmVnaW9u
KCk7Ci0gICAgQ2xlYXIoKTsKKworICBuc0ludFJlZ2lvbiB2YWxpZFJlZ2lvbiA9IGFMYXllci0+
R2V0VmFsaWRSZWdpb24oKTsKKworICBDb250ZW50VHlwZSBjb250ZW50VHlwZTsKKyAgbnNJbnRS
ZWdpb24gbmVlZGVkUmVnaW9uOworICBuc0ludFNpemUgZGVzdEJ1ZmZlckRpbXM7CisgIFBSQm9v
bCBjYW5SZXVzZUJ1ZmZlcjsKKyAgbnNJbnRSZWN0IGRlc3RCdWZmZXJSZWN0OworCisgIHdoaWxl
IChQUl9UUlVFKSB7CisgICAgY29udGVudFR5cGUgPSBhQ29udGVudFR5cGU7CisgICAgbmVlZGVk
UmVnaW9uID0gYUxheWVyLT5HZXRWaXNpYmxlUmVnaW9uKCk7CisgICAgZGVzdEJ1ZmZlckRpbXMg
PSBTY2FsZWRTaXplKG5lZWRlZFJlZ2lvbi5HZXRCb3VuZHMoKS5TaXplKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFYUmVzb2x1dGlvbiwgYVlSZXNvbHV0aW9uKTsKKyAgICBj
YW5SZXVzZUJ1ZmZlciA9IEJ1ZmZlclNpemVPa0ZvcihkZXN0QnVmZmVyRGltcyk7CisKKyAgICBp
ZiAoY2FuUmV1c2VCdWZmZXIpIHsKKyAgICAgIGlmIChtQnVmZmVyUmVjdC5Db250YWlucyhuZWVk
ZWRSZWdpb24uR2V0Qm91bmRzKCkpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYWRq
dXN0IG1CdWZmZXJSZWN0LgorICAgICAgICBkZXN0QnVmZmVyUmVjdCA9IG1CdWZmZXJSZWN0Owor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlcidzIGJpZyBlbm91Z2ggYnV0IGRv
ZXNuJ3QgY29udGFpbiBldmVyeXRoaW5nIHRoYXQncworICAgICAgICAvLyBnb2luZyB0byBiZSB2
aXNpYmxlLiBXZSdsbCBtb3ZlIGl0LgorICAgICAgICBkZXN0QnVmZmVyUmVjdCA9IG5zSW50UmVj
dChuZWVkZWRSZWdpb24uR2V0Qm91bmRzKCkuVG9wTGVmdCgpLCBtQnVmZmVyUmVjdC5TaXplKCkp
OworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBkZXN0QnVmZmVyUmVjdCA9IG5lZWRlZFJl
Z2lvbi5HZXRCb3VuZHMoKTsKKyAgICB9CisKKyAgICBpZiAoKGFGbGFncyAmIFBBSU5UX1dJTExf
UkVTQU1QTEUpICYmCisgICAgICAgIChuZWVkZWRSZWdpb24uR2V0Qm91bmRzKCkgIT0gZGVzdEJ1
ZmZlclJlY3QgfHwKKyAgICAgICAgIG5lZWRlZFJlZ2lvbi5HZXROdW1SZWN0cygpID4gMSkpIHsK
KyAgICAgIC8vIFRoZSBhcmVhIHdlIGFkZCB0byBuZWVkZWRSZWdpb24gbWlnaHQgbm90IGJlIHBh
aW50ZWQgb3BhcXVlbHkKKyAgICAgIGNvbnRlbnRUeXBlID0gZ2Z4QVN1cmZhY2U6OkNPTlRFTlRf
Q09MT1JfQUxQSEE7CisKKyAgICAgIC8vIFdlIG5lZWQgdG8gdmFsaWRhdGUgdGhlIGVudGlyZSBi
dWZmZXIsIHRvIG1ha2Ugc3VyZSB0aGF0IG9ubHkgdmFsaWQKKyAgICAgIC8vIHBpeGVscyBhcmUg
c2FtcGxlZAorICAgICAgbmVlZGVkUmVnaW9uID0gZGVzdEJ1ZmZlclJlY3Q7CisgICAgICBkZXN0
QnVmZmVyRGltcyA9IFNjYWxlZFNpemUobmVlZGVkUmVnaW9uLkdldEJvdW5kcygpLlNpemUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWFJlc29sdXRpb24sIGFZUmVzb2x1
dGlvbik7CisgICAgfQorCisgICAgaWYgKG1CdWZmZXIgJiYKKyAgICAgICAgKGNvbnRlbnRUeXBl
ICE9IG1CdWZmZXItPkdldENvbnRlbnRUeXBlKCkgfHwKKyAgICAgICAgIGFYUmVzb2x1dGlvbiAh
PSBjdXJYUmVzIHx8IGFZUmVzb2x1dGlvbiAhPSBjdXJZUmVzKSkgeworICAgICAgLy8gV2UncmUg
ZWZmZWN0aXZlbHkgY2xlYXJpbmcgdGhlIHZhbGlkIHJlZ2lvbiwgc28gd2UgbmVlZCB0byBkcmF3
CisgICAgICAvLyB0aGUgZW50aXJlIG5lZWRlZCByZWdpb24gbm93LgorICAgICAgLy8KKyAgICAg
IC8vIFhYWC9jam9uZXM6IGEgcG9zc2libHkgd29ydGh3aGlsZSBvcHRpbWl6YXRpb24gdG8ga2Vl
cCBpbiBtaW5kCisgICAgICAvLyBpcyB0byByZS11c2UgYnVmZmVycyB3aGVuIHRoZSByZXNvbHV0
aW9uIGFuZCB2aXNpYmxlIHJlZ2lvbgorICAgICAgLy8gaGF2ZSBjaGFuZ2VkIGluIHN1Y2ggYSB3
YXkgdGhhdCB0aGUgYnVmZmVyIHNpemUgc3RheXMgdGhlIHNhbWUuCisgICAgICAvLyBJdCBtaWdo
dCBtYWtlIGV2ZW4gbW9yZSBzZW5zZSB0byBhbGxvY2F0ZSBidWZmZXJzIGZyb20gYQorICAgICAg
Ly8gcmVjeWNsYWJsZSBwb29sLCBzbyB0aGF0IHdlIGNvdWxkIGtlZXAgdGhpcyBsb2dpYyBzaW1w
bGUgYW5kCisgICAgICAvLyBzdGlsbCBnZXQgYmFjayB0aGUgc2FtZSBidWZmZXIuCisgICAgICBy
ZXN1bHQubVJlZ2lvblRvSW52YWxpZGF0ZSA9IGFMYXllci0+R2V0VmFsaWRSZWdpb24oKTsKKyAg
ICAgIHZhbGlkUmVnaW9uLlNldEVtcHR5KCk7CisgICAgICBDbGVhcigpOworICAgICAgLy8gUmVz
dGFydCBkZWNpc2lvbiBwcm9jZXNzIHdpdGggdGhlIGNsZWFyZWQgYnVmZmVyLiBXZSBjYW4gb25s
eSBnbworICAgICAgLy8gYXJvdW5kIHRoZSBsb29wIG9uZSBtb3JlIGl0ZXJhdGlvbiwgc2luY2Ug
bUJ1ZmZlciBpcyBudWxsIG5vdy4KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGJyZWFr
OwogICB9CiAKKyAgcmVzdWx0Lm1SZWdpb25Ub0RyYXcuU3ViKG5lZWRlZFJlZ2lvbiwgdmFsaWRS
ZWdpb24pOwogICBpZiAocmVzdWx0Lm1SZWdpb25Ub0RyYXcuSXNFbXB0eSgpKQogICAgIHJldHVy
biByZXN1bHQ7CisKKyAgLy8gSWYgd2UgaGF2ZSBub24taWRlbnRpdHkgcmVzb2x1dGlvbiB0aGVu
IG1CdWZmZXJSb3RhdGlvbiBtaWdodCBub3QgZmFsbAorICAvLyBvbiBhIGJ1ZmZlciBwaXhlbCBi
b3VuZGFyeSwgaW4gd2hpY2ggY2FzZSB0aGF0IHJvdyBvZiBwaXhlbHMgd2lsbCBjb250YWluCisg
IC8vIGEgbWl4IG9mIHR3byBjb21wbGV0ZWx5IGRpZmZlcmVudCByb3dzIG9mIHRoZSBsYXllciwg
d2hpY2ggd291bGQgYmUKKyAgLy8gYSBjYXRhc3Ryb3BoZS4gU28gZGlzYWJsZSByb3RhdGlvbiBp
biB0aGF0IGNhc2UuCisgIC8vIFdlIGFsc28gbmVlZCB0byBkaXNhYmxlIHJvdGF0aW9uIGlmIHdl
J3JlIGdvaW5nIHRvIGJlIHJlc2FtcGxlZCB3aGVuCisgIC8vIGRyYXdpbmcsIGJlY2F1c2Ugd2Ug
bWlnaHQgc2FtcGxlIGFjcm9zcyB0aGUgcm90YXRpb24gYm91bmRhcnkuCisgIFBSQm9vbCBjYW5I
YXZlUm90YXRpb24gPQorICAgICEoYUZsYWdzICYgUEFJTlRfV0lMTF9SRVNBTVBMRSkgJiYgYVhS
ZXNvbHV0aW9uID09IDEuMCAmJiBhWVJlc29sdXRpb24gPT0gMS4wOwogICBuc0ludFJlY3QgZHJh
d0JvdW5kcyA9IHJlc3VsdC5tUmVnaW9uVG9EcmF3LkdldEJvdW5kcygpOwotCi0gIG5zSW50UmVj
dCB2aXNpYmxlQm91bmRzID0gYUxheWVyLT5HZXRWaXNpYmxlUmVnaW9uKCkuR2V0Qm91bmRzKCk7
Ci0gIG5zSW50U2l6ZSBkZXN0QnVmZmVyRGltcyA9IFNjYWxlZFNpemUodmlzaWJsZUJvdW5kcy5T
aXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVhSZXNvbHV0
aW9uLCBhWVJlc29sdXRpb24pOwogICBuc1JlZlB0cjxnZnhBU3VyZmFjZT4gZGVzdEJ1ZmZlcjsK
LSAgbnNJbnRSZWN0IGRlc3RCdWZmZXJSZWN0OwogICBQUkJvb2wgYnVmZmVyRGltc0NoYW5nZWQg
PSBQUl9GQUxTRTsKLQotICBpZiAoQnVmZmVyU2l6ZU9rRm9yKGRlc3RCdWZmZXJEaW1zKSkgewor
ICBpZiAoY2FuUmV1c2VCdWZmZXIpIHsKICAgICBOU19BU1NFUlRJT04oY3VyWFJlcyA9PSBhWFJl
c29sdXRpb24gJiYgY3VyWVJlcyA9PSBhWVJlc29sdXRpb24sCiAgICAgICAgICAgICAgICAgICJy
ZXNvbHV0aW9uIGNoYW5nZXMgbXVzdCBDbGVhcigpISIpOwogCi0gICAgLy8gVGhlIGN1cnJlbnQg
YnVmZmVyIGlzIGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgdmlzaWJsZSBhcmVhLgotICAgIGlmICht
QnVmZmVyUmVjdC5Db250YWlucyh2aXNpYmxlQm91bmRzKSkgewotICAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCB0byBhZGp1c3QgbUJ1ZmZlclJlY3QuCi0gICAgICBkZXN0QnVmZmVyUmVjdCA9IG1CdWZm
ZXJSZWN0OwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBUaGUgYnVmZmVyJ3MgYmlnIGVub3VnaCBi
dXQgZG9lc24ndCBjb250YWluIGV2ZXJ5dGhpbmcgdGhhdCdzCi0gICAgICAvLyBnb2luZyB0byBi
ZSB2aXNpYmxlLiBXZSdsbCBtb3ZlIGl0LgotICAgICAgZGVzdEJ1ZmZlclJlY3QgPSBuc0ludFJl
Y3QodmlzaWJsZUJvdW5kcy5Ub3BMZWZ0KCksIG1CdWZmZXJSZWN0LlNpemUoKSk7Ci0gICAgfQog
ICAgIG5zSW50UmVjdCBrZWVwQXJlYTsKICAgICBpZiAoa2VlcEFyZWEuSW50ZXJzZWN0UmVjdChk
ZXN0QnVmZmVyUmVjdCwgbUJ1ZmZlclJlY3QpKSB7CiAgICAgICAvLyBTZXQgbUJ1ZmZlclJvdGF0
aW9uIHNvIHRoYXQgdGhlIHBpeGVscyBjdXJyZW50bHkgaW4gbUJ1ZmZlcgogICAgICAgLy8gd2ls
bCBzdGlsbCBiZSByZW5kZXJlZCBpbiB0aGUgcmlnaHQgcGxhY2Ugd2hlbiBtQnVmZmVyUmVjdAog
ICAgICAgLy8gY2hhbmdlcyB0byBkZXN0QnVmZmVyUmVjdC4KICAgICAgIG5zSW50UG9pbnQgbmV3
Um90YXRpb24gPSBtQnVmZmVyUm90YXRpb24gKwogICAgICAgICAoZGVzdEJ1ZmZlclJlY3QuVG9w
TGVmdCgpIC0gbUJ1ZmZlclJlY3QuVG9wTGVmdCgpKTsKICAgICAgIFdyYXBSb3RhdGlvbkF4aXMo
Jm5ld1JvdGF0aW9uLngsIG1CdWZmZXJSZWN0LndpZHRoKTsKICAgICAgIFdyYXBSb3RhdGlvbkF4
aXMoJm5ld1JvdGF0aW9uLnksIG1CdWZmZXJSZWN0LmhlaWdodCk7CiAgICAgICBOU19BU1NFUlRJ
T04obnNJbnRSZWN0KG5zSW50UG9pbnQoMCwwKSwgbUJ1ZmZlclJlY3QuU2l6ZSgpKS5Db250YWlu
cyhuZXdSb3RhdGlvbiksCiAgICAgICAgICAgICAgICAgICAgIm5ld1JvdGF0aW9uIG91dCBvZiBi
b3VuZHMiKTsKICAgICAgIFBSSW50MzIgeEJvdW5kYXJ5ID0gZGVzdEJ1ZmZlclJlY3QuWE1vc3Qo
KSAtIG5ld1JvdGF0aW9uLng7CiAgICAgICBQUkludDMyIHlCb3VuZGFyeSA9IGRlc3RCdWZmZXJS
ZWN0LllNb3N0KCkgLSBuZXdSb3RhdGlvbi55OwogICAgICAgaWYgKChkcmF3Qm91bmRzLnggPCB4
Qm91bmRhcnkgJiYgeEJvdW5kYXJ5IDwgZHJhd0JvdW5kcy5YTW9zdCgpKSB8fAotICAgICAgICAg
IChkcmF3Qm91bmRzLnkgPCB5Qm91bmRhcnkgJiYgeUJvdW5kYXJ5IDwgZHJhd0JvdW5kcy5ZTW9z
dCgpKSkgeworICAgICAgICAgIChkcmF3Qm91bmRzLnkgPCB5Qm91bmRhcnkgJiYgeUJvdW5kYXJ5
IDwgZHJhd0JvdW5kcy5ZTW9zdCgpKSB8fAorICAgICAgICAgIChuZXdSb3RhdGlvbiAhPSBuc0lu
dFBvaW50KDAsMCkgJiYgIWNhbkhhdmVSb3RhdGlvbikpIHsKICAgICAgICAgLy8gVGhlIHN0dWZm
IHdlIG5lZWQgdG8gcmVkcmF3IHdpbGwgd3JhcCBhcm91bmQgYW4gZWRnZSBvZiB0aGUKICAgICAg
ICAgLy8gYnVmZmVyLCBzbyB3ZSB3aWxsIG5lZWQgdG8gZG8gYSBzZWxmLWNvcHkKICAgICAgICAg
aWYgKG1CdWZmZXItPlN1cHBvcnRzU2VsZkNvcHkoKSAmJiBtQnVmZmVyUm90YXRpb24gPT0gbnNJ
bnRQb2ludCgwLDApKSB7CiAgICAgICAgICAgZGVzdEJ1ZmZlciA9IG1CdWZmZXI7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgLy8gV2UgY2FuJ3QgZG8gYSByZWFsIHNlbGYtY29weSBiZWNh
dXNlIHRoZSBidWZmZXIgaXMgcm90YXRlZC4KICAgICAgICAgICAvLyBTbyBhbGxvY2F0ZSBhIG5l
dyBidWZmZXIgZm9yIHRoZSBkZXN0aW5hdGlvbi4KLSAgICAgICAgICBkZXN0QnVmZmVyUmVjdCA9
IHZpc2libGVCb3VuZHM7Ci0gICAgICAgICAgZGVzdEJ1ZmZlckRpbXMgPSBTY2FsZWRTaXplKGRl
c3RCdWZmZXJSZWN0LlNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYVhSZXNvbHV0aW9uLCBhWVJlc29sdXRpb24pOworICAgICAgICAgIGRlc3RCdWZmZXJSZWN0
ID0gbmVlZGVkUmVnaW9uLkdldEJvdW5kcygpOwogICAgICAgICAgIGJ1ZmZlckRpbXNDaGFuZ2Vk
ID0gUFJfVFJVRTsKLSAgICAgICAgICBkZXN0QnVmZmVyID0gQ3JlYXRlQnVmZmVyKGFDb250ZW50
VHlwZSwgZGVzdEJ1ZmZlckRpbXMpOworICAgICAgICAgIGRlc3RCdWZmZXIgPSBDcmVhdGVCdWZm
ZXIoY29udGVudFR5cGUsIGRlc3RCdWZmZXJEaW1zKTsKICAgICAgICAgICBpZiAoIWRlc3RCdWZm
ZXIpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICB9IGVsc2Ug
ewogICAgICAgICBtQnVmZmVyUmVjdCA9IGRlc3RCdWZmZXJSZWN0OwogICAgICAgICBtQnVmZmVy
Um90YXRpb24gPSBuZXdSb3RhdGlvbjsKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgLy8g
Tm8gcGl4ZWxzIGFyZSBnb2luZyB0byBiZSBrZXB0LiBUaGUgd2hvbGUgdmlzaWJsZSByZWdpb24K
ICAgICAgIC8vIHdpbGwgYmUgcmVkcmF3biwgc28gd2UgZG9uJ3QgbmVlZCB0byBjb3B5IGFueXRo
aW5nLCBzbyB3ZSBkb24ndAogICAgICAgLy8gc2V0IGRlc3RCdWZmZXIuCiAgICAgICBtQnVmZmVy
UmVjdCA9IGRlc3RCdWZmZXJSZWN0OwogICAgICAgbUJ1ZmZlclJvdGF0aW9uID0gbnNJbnRQb2lu
dCgwLDApOwogICAgIH0KICAgfSBlbHNlIHsKICAgICAvLyBUaGUgYnVmZmVyJ3Mgbm90IGJpZyBl
bm91Z2gsIHNvIGFsbG9jYXRlIGEgbmV3IG9uZQotICAgIGRlc3RCdWZmZXJSZWN0ID0gdmlzaWJs
ZUJvdW5kczsKLSAgICBkZXN0QnVmZmVyRGltcyA9IFNjYWxlZFNpemUoZGVzdEJ1ZmZlclJlY3Qu
U2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWFJlc29sdXRpb24sIGFZ
UmVzb2x1dGlvbik7CisgICAgZGVzdEJ1ZmZlclJlY3QgPSBuZWVkZWRSZWdpb24uR2V0Qm91bmRz
KCk7CiAgICAgYnVmZmVyRGltc0NoYW5nZWQgPSBQUl9UUlVFOwotICAgIGRlc3RCdWZmZXIgPSBD
cmVhdGVCdWZmZXIoYUNvbnRlbnRUeXBlLCBkZXN0QnVmZmVyRGltcyk7CisgICAgZGVzdEJ1ZmZl
ciA9IENyZWF0ZUJ1ZmZlcihjb250ZW50VHlwZSwgZGVzdEJ1ZmZlckRpbXMpOwogICAgIGlmICgh
ZGVzdEJ1ZmZlcikKICAgICAgIHJldHVybiByZXN1bHQ7CiAgIH0KKyAgTlNfQVNTRVJUSU9OKCEo
YUZsYWdzICYgUEFJTlRfV0lMTF9SRVNBTVBMRSkgfHwgZGVzdEJ1ZmZlclJlY3QgPT0gbmVlZGVk
UmVnaW9uLkdldEJvdW5kcygpLAorICAgICAgICAgICAgICAgIklmIHdlJ3JlIHJlc2FtcGxpbmcs
IHdlIG5lZWQgdG8gdmFsaWRhdGUgdGhlIGVudGlyZSBidWZmZXIiKTsKIAogICAvLyBJZiB3ZSBo
YXZlIG5vIGJ1ZmZlcmVkIGRhdGEgYWxyZWFkeSwgdGhlbiBkZXN0QnVmZmVyIHdpbGwgYmUgYSBm
cmVzaCBidWZmZXIKICAgLy8gYW5kIHdlIGRvIG5vdCBuZWVkIHRvIGNsZWFyIGl0IGJlbG93Lgog
ICBQUkJvb2wgaXNDbGVhciA9IG1CdWZmZXIgPT0gbnNudWxsOwogCiAgIGlmIChkZXN0QnVmZmVy
KSB7CiAgICAgaWYgKG1CdWZmZXIpIHsKICAgICAgIC8vIENvcHkgdGhlIGJpdHMKQEAgLTMwMCwy
NiArMzQwLDI4IEBAIFRoZWJlc0xheWVyQnVmZmVyOjpCZWdpblBhaW50KFRoZWJlc0xheWUKIAog
ICAgIG1CdWZmZXIgPSBkZXN0QnVmZmVyLmZvcmdldCgpOwogICAgIG1CdWZmZXJSZWN0ID0gZGVz
dEJ1ZmZlclJlY3Q7CiAgICAgbUJ1ZmZlclJvdGF0aW9uID0gbnNJbnRQb2ludCgwLDApOwogICB9
CiAgIGlmIChidWZmZXJEaW1zQ2hhbmdlZCkgewogICAgIG1CdWZmZXJEaW1zID0gZGVzdEJ1ZmZl
ckRpbXM7CiAgIH0KKyAgTlNfQVNTRVJUSU9OKGNhbkhhdmVSb3RhdGlvbiB8fCBtQnVmZmVyUm90
YXRpb24gPT0gbnNJbnRQb2ludCgwLDApLAorICAgICAgICAgICAgICAgIlJvdGF0aW9uIGRpc2Fi
bGVkLCBidXQgd2UgaGF2ZSBub256ZXJvIHJvdGF0aW9uPyIpOwogCiAgIG5zSW50UmVnaW9uIGlu
dmFsaWRhdGU7CiAgIGludmFsaWRhdGUuU3ViKGFMYXllci0+R2V0VmFsaWRSZWdpb24oKSwgZGVz
dEJ1ZmZlclJlY3QpOwogICByZXN1bHQubVJlZ2lvblRvSW52YWxpZGF0ZS5PcihyZXN1bHQubVJl
Z2lvblRvSW52YWxpZGF0ZSwgaW52YWxpZGF0ZSk7CiAKICAgcmVzdWx0Lm1Db250ZXh0ID0gR2V0
Q29udGV4dEZvclF1YWRyYW50VXBkYXRlKGRyYXdCb3VuZHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhWFJlc29sdXRpb24sIGFZUmVzb2x1dGlvbik7
CiAKICAgZ2Z4VXRpbHM6OkNsaXBUb1JlZ2lvblNuYXBwZWQocmVzdWx0Lm1Db250ZXh0LCByZXN1
bHQubVJlZ2lvblRvRHJhdyk7Ci0gIGlmIChhQ29udGVudFR5cGUgPT0gZ2Z4QVN1cmZhY2U6OkNP
TlRFTlRfQ09MT1JfQUxQSEEgJiYgIWlzQ2xlYXIpIHsKKyAgaWYgKGNvbnRlbnRUeXBlID09IGdm
eEFTdXJmYWNlOjpDT05URU5UX0NPTE9SX0FMUEhBICYmICFpc0NsZWFyKSB7CiAgICAgcmVzdWx0
Lm1Db250ZXh0LT5TZXRPcGVyYXRvcihnZnhDb250ZXh0OjpPUEVSQVRPUl9DTEVBUik7CiAgICAg
cmVzdWx0Lm1Db250ZXh0LT5QYWludCgpOwogICAgIHJlc3VsdC5tQ29udGV4dC0+U2V0T3BlcmF0
b3IoZ2Z4Q29udGV4dDo6T1BFUkFUT1JfT1ZFUik7CiAgIH0KICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9UaGViZXNMYXllckJ1ZmZlci5oIGIvZ2Z4L2xh
eWVycy9UaGViZXNMYXllckJ1ZmZlci5oCi0tLSBhL2dmeC9sYXllcnMvVGhlYmVzTGF5ZXJCdWZm
ZXIuaAorKysgYi9nZngvbGF5ZXJzL1RoZWJlc0xheWVyQnVmZmVyLmgKQEAgLTExMywyNiArMTEz
LDM4IEBAIHB1YmxpYzoKICAgICogZGVwZW5kIG9uIHRoZSBidWZmZXIgdHlwZS4KICAgICovCiAg
IHN0cnVjdCBQYWludFN0YXRlIHsKICAgICBuc1JlZlB0cjxnZnhDb250ZXh0PiBtQ29udGV4dDsK
ICAgICBuc0ludFJlZ2lvbiBtUmVnaW9uVG9EcmF3OwogICAgIG5zSW50UmVnaW9uIG1SZWdpb25U
b0ludmFsaWRhdGU7CiAgIH07CiAKKyAgZW51bSB7CisgICAgUEFJTlRfV0lMTF9SRVNBTVBMRSA9
IDB4MDEKKyAgfTsKICAgLyoqCiAgICAqIFN0YXJ0IGEgZHJhd2luZyBvcGVyYXRpb24uIFRoaXMg
cmV0dXJucyBhIFBhaW50U3RhdGUgZGVzY3JpYmluZyB3aGF0CiAgICAqIG5lZWRzIHRvIGJlIGRy
YXduIHRvIGJyaW5nIHRoZSBidWZmZXIgdXAgdG8gZGF0ZSBpbiB0aGUgdmlzaWJsZSByZWdpb24u
CiAgICAqIFRoaXMgcXVlcmllcyBhTGF5ZXIgdG8gZ2V0IHRoZSBjdXJyZW50bHkgdmFsaWQgYW5k
IHZpc2libGUgcmVnaW9ucy4KICAgICogVGhlIHJldHVybmVkIG1Db250ZXh0IG1heSBiZSBudWxs
IGlmIG1SZWdpb25Ub0RyYXcgaXMgZW1wdHkuCiAgICAqIE90aGVyd2lzZSBpdCBtdXN0IG5vdCBi
ZSBudWxsLgogICAgKiBtUmVnaW9uVG9JbnZhbGlkYXRlIHdpbGwgY29udGFpbiBtUmVnaW9uVG9E
cmF3LgorICAgKiBAcGFyYW0gYUZsYWdzIHdoZW4gUEFJTlRfV0lMTF9SRVNBTVBMRSBpcyBwYXNz
ZWQsIHRoaXMgaW5kaWNhdGVzIHRoYXQKKyAgICogYnVmZmVyIHdpbGwgYmUgcmVzYW1wbGVkIHdo
ZW4gcmVuZGVyaW5nIChpLmUgdGhlIGVmZmVjdGl2ZSB0cmFuc2Zvcm0KKyAgICogY29tYmluZWQg
d2l0aCB0aGUgc2NhbGUgZm9yIHRoZSByZXNvbHV0aW9uIGlzIG5vdCBqdXN0IGFuIGludGVnZXIK
KyAgICogdHJhbnNsYXRpb24pLiBUaGlzIHdpbGwgZGlzYWJsZSBidWZmZXIgcm90YXRpb24gKHNp
bmNlIHdlIGRvbid0IHdhbnQKKyAgICogdG8gcmVzYW1wbGUgYWNyb3NzIHRoZSByb3RhdGlvbiBi
b3VuZGFyeSkgYW5kIHdpbGwgZW5zdXJlIHRoYXQgd2UKKyAgICogbWFrZSB0aGUgZW50aXJlIGJ1
ZmZlciBjb250ZW50cyB2YWxpZCAoc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBzYW1wbGUKKyAgICog
aW52YWxpZCBwaXhlbHMgb3V0c2lkZSB0aGUgdmlzaWJsZSByZWdpb24sIGlmIHRoZSB2aXNpYmxl
IHJlZ2lvbiBkb2Vzbid0CisgICAqIGZpbGwgdGhlIGJ1ZmZlciBib3VuZHMpLgogICAgKi8KICAg
UGFpbnRTdGF0ZSBCZWdpblBhaW50KFRoZWJlc0xheWVyKiBhTGF5ZXIsIENvbnRlbnRUeXBlIGFD
b250ZW50VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFYUmVzb2x1dGlvbiwg
ZmxvYXQgYVlSZXNvbHV0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFYUmVz
b2x1dGlvbiwgZmxvYXQgYVlSZXNvbHV0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgUFJV
aW50MzIgYUZsYWdzKTsKIAogICAvKioKICAgICogUmV0dXJuIGEgbmV3IHN1cmZhY2Ugb2YgfGFT
aXplfCBhbmQgfGFUeXBlfC4KICAgICovCiAgIHZpcnR1YWwgYWxyZWFkeV9BZGRSZWZlZDxnZnhB
U3VyZmFjZT4KICAgQ3JlYXRlQnVmZmVyKENvbnRlbnRUeXBlIGFUeXBlLCBjb25zdCBuc0ludFNp
emUmIGFTaXplKSA9IDA7CiAKICAgLyoqCmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL2Jhc2ljL0Jh
c2ljTGF5ZXJzLmNwcCBiL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNMYXllcnMuY3BwCi0tLSBhL2dm
eC9sYXllcnMvYmFzaWMvQmFzaWNMYXllcnMuY3BwCisrKyBiL2dmeC9sYXllcnMvYmFzaWMvQmFz
aWNMYXllcnMuY3BwCkBAIC0zMDMsMTcgKzMwMywxOCBAQCBDb250YWluZXJSZW1vdmVDaGlsZChM
YXllciogYUNoaWxkLCBDb250CiBjbGFzcyBCYXNpY1RoZWJlc0xheWVyOwogY2xhc3MgQmFzaWNU
aGViZXNMYXllckJ1ZmZlciA6IHB1YmxpYyBUaGViZXNMYXllckJ1ZmZlciB7CiAgIHR5cGVkZWYg
VGhlYmVzTGF5ZXJCdWZmZXIgQmFzZTsKIAogcHVibGljOgogICBCYXNpY1RoZWJlc0xheWVyQnVm
ZmVyKEJhc2ljVGhlYmVzTGF5ZXIqIGFMYXllcikKICAgICA6IEJhc2UoQ29udGFpbnNWaXNpYmxl
Qm91bmRzKQogICAgICwgbUxheWVyKGFMYXllcikKLSAge30KKyAgeworICB9CiAKICAgdmlydHVh
bCB+QmFzaWNUaGViZXNMYXllckJ1ZmZlcigpCiAgIHt9CiAKICAgdXNpbmcgQmFzZTo6QnVmZmVy
UmVjdDsKICAgdXNpbmcgQmFzZTo6QnVmZmVyUm90YXRpb247CiAKICAgLyoqCkBAIC00MzAsMjEg
KzQzMSwyMyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgIHZvaWQqIGFDYWxsYmFja0RhdGEp
CiAgIHsKICAgICBpZiAoIWFDYWxsYmFjaykgewogICAgICAgQmFzaWNNYW5hZ2VyKCktPlNldFRy
YW5zYWN0aW9uSW5jb21wbGV0ZSgpOwogICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhQ2FsbGJh
Y2sodGhpcywgYUNvbnRleHQsIGFSZWdpb25Ub0RyYXcsIGFSZWdpb25Ub0ludmFsaWRhdGUsCiAg
ICAgICAgICAgICAgIGFDYWxsYmFja0RhdGEpOwotICAgIC8vIEV2ZXJ5dGhpbmcgdGhhdCdzIHZp
c2libGUgaGFzIGJlZW4gdmFsaWRhdGVkLiBEbyB0aGlzIGluc3RlYWQgb2YKKyAgICAvLyBFdmVy
eXRoaW5nIHRoYXQncyB2aXNpYmxlIGhhcyBiZWVuIHZhbGlkYXRlZC4gRG8gdGhpcyBpbnN0ZWFk
IG9mIGp1c3QKICAgICAvLyBPUi1pbmcgd2l0aCBhUmVnaW9uVG9EcmF3LCBzaW5jZSB0aGF0IGNh
biBsZWFkIHRvIGEgdmVyeSBjb21wbGV4IHJlZ2lvbgogICAgIC8vIGhlcmUgKE9SIGRvZXNuJ3Qg
YXV0b21hdGljYWxseSBzaW1wbGlmeSB0byB0aGUgc2ltcGxlc3QgcG9zc2libGUKICAgICAvLyBy
ZXByZXNlbnRhdGlvbiBvZiBhIHJlZ2lvbi4pCi0gICAgbVZhbGlkUmVnaW9uLk9yKG1WYWxpZFJl
Z2lvbiwgbVZpc2libGVSZWdpb24pOworICAgIG5zSW50UmVnaW9uIHRtcDsKKyAgICB0bXAuT3Io
bVZpc2libGVSZWdpb24sIGFSZWdpb25Ub0RyYXcpOworICAgIG1WYWxpZFJlZ2lvbi5PcihtVmFs
aWRSZWdpb24sIHRtcCk7CiAgIH0KIAogICBCdWZmZXIgbUJ1ZmZlcjsKIH07CiAKIC8qKgogICog
Q2xpcHMgdG8gdGhlIHNtYWxsZXN0IGRldmljZS1waXhlbC1hbGlnbmVkIHJlY3RhbmdsZSBjb250
YWluaW5nIGFSZWN0CiAgKiBpbiB1c2VyIHNwYWNlLgpAQCAtNTcyLDE4ICs1NzUsMjQgQEAgQmFz
aWNUaGViZXNMYXllcjo6UGFpbnRUaGViZXMoZ2Z4Q29udGV4dAogICAgIH0KICAgICByZXR1cm47
CiAgIH0KIAogICB7CiAgICAgZ2Z4U2l6ZSBzY2FsZSA9IGFDb250ZXh0LT5DdXJyZW50TWF0cml4
KCkuU2NhbGVGYWN0b3JzKFBSX1RSVUUpOwogICAgIGZsb2F0IHBhaW50WFJlcyA9IEJhc2ljTWFu
YWdlcigpLT5YUmVzb2x1dGlvbigpICogZ2Z4VXRpbHM6OkNsYW1wVG9TY2FsZUZhY3RvcihzY2Fs
ZS53aWR0aCk7CiAgICAgZmxvYXQgcGFpbnRZUmVzID0gQmFzaWNNYW5hZ2VyKCktPllSZXNvbHV0
aW9uKCkgKiBnZnhVdGlsczo6Q2xhbXBUb1NjYWxlRmFjdG9yKHNjYWxlLmhlaWdodCk7CisgICAg
UFJVaW50MzIgZmxhZ3MgPSAwOworICAgIGdmeE1hdHJpeCB0cmFuc2Zvcm07CisgICAgaWYgKCFH
ZXRFZmZlY3RpdmVUcmFuc2Zvcm0oKS5JczJEKCZ0cmFuc2Zvcm0pIHx8CisgICAgICAgIHRyYW5z
Zm9ybS5IYXNOb25JbnRlZ2VyVHJhbnNsYXRpb24oKSkgeworICAgICAgZmxhZ3MgfD0gVGhlYmVz
TGF5ZXJCdWZmZXI6OlBBSU5UX1dJTExfUkVTQU1QTEU7CisgICAgfQogICAgIEJ1ZmZlcjo6UGFp
bnRTdGF0ZSBzdGF0ZSA9Ci0gICAgICBtQnVmZmVyLkJlZ2luUGFpbnQodGhpcywgY29udGVudFR5
cGUsIHBhaW50WFJlcywgcGFpbnRZUmVzKTsKKyAgICAgIG1CdWZmZXIuQmVnaW5QYWludCh0aGlz
LCBjb250ZW50VHlwZSwgcGFpbnRYUmVzLCBwYWludFlSZXMsIGZsYWdzKTsKICAgICBtVmFsaWRS
ZWdpb24uU3ViKG1WYWxpZFJlZ2lvbiwgc3RhdGUubVJlZ2lvblRvSW52YWxpZGF0ZSk7CiAKICAg
ICBpZiAoc3RhdGUubUNvbnRleHQpIHsKICAgICAgIC8vIFRoZSBhcmVhIHRoYXQgYmVjYW1lIGlu
dmFsaWQgYW5kIGlzIHZpc2libGUgbmVlZHMgdG8gYmUgcmVwYWludGVkCiAgICAgICAvLyAodGhp
cyBjb3VsZCBiZSB0aGUgd2hvbGUgdmlzaWJsZSBhcmVhIGlmIG91ciBidWZmZXIgc3dpdGNoZWQK
ICAgICAgIC8vIGZyb20gUkdCIHRvIFJHQkEsIGJlY2F1c2Ugd2UgbWlnaHQgbmVlZCB0byByZXBh
aW50IHdpdGgKICAgICAgIC8vIHN1YnBpeGVsIEFBKQogICAgICAgc3RhdGUubVJlZ2lvblRvSW52
YWxpZGF0ZS5BbmQoc3RhdGUubVJlZ2lvblRvSW52YWxpZGF0ZSwgbVZpc2libGVSZWdpb24pOwpk
aWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9vcGVuZ2wvVGhlYmVzTGF5ZXJPR0wuY3BwIGIvZ2Z4L2xh
eWVycy9vcGVuZ2wvVGhlYmVzTGF5ZXJPR0wuY3BwCi0tLSBhL2dmeC9sYXllcnMvb3BlbmdsL1Ro
ZWJlc0xheWVyT0dMLmNwcAorKysgYi9nZngvbGF5ZXJzL29wZW5nbC9UaGViZXNMYXllck9HTC5j
cHAKQEAgLTI5NSwxNyArMjk1LDE4IEBAIHB1YmxpYzoKICAgdmlydHVhbCBQYWludFN0YXRlIEJl
Z2luUGFpbnQoQ29udGVudFR5cGUgYUNvbnRlbnRUeXBlLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgYVhSZXNvbHV0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgYVlSZXNvbHV0aW9uKQogICB7CiAgICAgLy8gTGV0IFRoZWJlc0xheWVy
QnVmZmVyIGRvIGFsbCB0aGUgaGFyZCB3b3JrIGZvciB1cyEgOkQKICAgICByZXR1cm4gVGhlYmVz
TGF5ZXJCdWZmZXI6OkJlZ2luUGFpbnQobUxheWVyLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYUNvbnRlbnRUeXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYVhSZXNvbHV0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYVlSZXNvbHV0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYVlSZXNvbHV0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwKTsKICAgfQogCiAgIC8vIFRoZWJlc0xheWVyQnVmZmVyIGludGVy
ZmFjZQogICB2aXJ0dWFsIGFscmVhZHlfQWRkUmVmZWQ8Z2Z4QVN1cmZhY2U+CiAgIENyZWF0ZUJ1
ZmZlcihDb250ZW50VHlwZSBhVHlwZSwgY29uc3QgbnNJbnRTaXplJiBhU2l6ZSkKICAgewogICAg
IE5TX0FTU0VSVElPTihnZnhBU3VyZmFjZTo6Q09OVEVOVF9BTFBIQSAhPSBhVHlwZSwiVGhlYmVz
QnVmZmVyIGhhcyBjb2xvciIpOwogCkBAIC03NDMsMjEgKzc0NCwyMyBAQCBUaGViZXNMYXllck9H
TDo6UmVuZGVyTGF5ZXIoaW50IGFQcmV2aW91CiAgICAgTGF5ZXJNYW5hZ2VyOjpEcmF3VGhlYmVz
TGF5ZXJDYWxsYmFjayBjYWxsYmFjayA9CiAgICAgICBtT0dMTWFuYWdlci0+R2V0VGhlYmVzTGF5
ZXJDYWxsYmFjaygpOwogICAgIGlmICghY2FsbGJhY2spIHsKICAgICAgIE5TX0VSUk9SKCJHTCBz
aG91bGQgbmV2ZXIgbmVlZCB0byB1cGRhdGUgVGhlYmVzTGF5ZXJzIGluIGFuIGVtcHR5IHRyYW5z
YWN0aW9uIik7CiAgICAgfSBlbHNlIHsKICAgICAgIHZvaWQqIGNhbGxiYWNrRGF0YSA9IG1PR0xN
YW5hZ2VyLT5HZXRUaGViZXNMYXllckNhbGxiYWNrRGF0YSgpOwogICAgICAgY2FsbGJhY2sodGhp
cywgc3RhdGUubUNvbnRleHQsIHN0YXRlLm1SZWdpb25Ub0RyYXcsCiAgICAgICAgICAgICAgICBz
dGF0ZS5tUmVnaW9uVG9JbnZhbGlkYXRlLCBjYWxsYmFja0RhdGEpOwotICAgICAgLy8gRXZlcnl0
aGluZyB0aGF0J3MgdmlzaWJsZSBoYXMgYmVlbiB2YWxpZGF0ZWQuIERvIHRoaXMgaW5zdGVhZCBv
ZgorICAgICAgLy8gRXZlcnl0aGluZyB0aGF0J3MgdmlzaWJsZSBoYXMgYmVlbiB2YWxpZGF0ZWQu
IERvIHRoaXMgaW5zdGVhZCBvZiBqdXN0CiAgICAgICAvLyBPUi1pbmcgd2l0aCBhUmVnaW9uVG9E
cmF3LCBzaW5jZSB0aGF0IGNhbiBsZWFkIHRvIGEgdmVyeSBjb21wbGV4IHJlZ2lvbgogICAgICAg
Ly8gaGVyZSAoT1IgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNpbXBsaWZ5IHRvIHRoZSBzaW1wbGVz
dCBwb3NzaWJsZQogICAgICAgLy8gcmVwcmVzZW50YXRpb24gb2YgYSByZWdpb24uKQotICAgICAg
bVZhbGlkUmVnaW9uLk9yKG1WYWxpZFJlZ2lvbiwgbVZpc2libGVSZWdpb24pOworICAgICAgbnNJ
bnRSZWdpb24gdG1wOworICAgICAgdG1wLk9yKG1WaXNpYmxlUmVnaW9uLCBzdGF0ZS5tUmVnaW9u
VG9EcmF3KTsKKyAgICAgIG1WYWxpZFJlZ2lvbi5PcihtVmFsaWRSZWdpb24sIHRtcCk7CiAgICAg
fQogICB9CiAKICAgREVCVUdfR0xfRVJST1JfQ0hFQ0soZ2woKSk7CiAKICAgZ2woKS0+ZkJpbmRG
cmFtZWJ1ZmZlcihMT0NBTF9HTF9GUkFNRUJVRkZFUiwgYVByZXZpb3VzRnJhbWVCdWZmZXIpOwog
ICBtQnVmZmVyLT5SZW5kZXJUbyhhT2Zmc2V0LCBtT0dMTWFuYWdlcik7CiAgIERFQlVHX0dMX0VS
Uk9SX0NIRUNLKGdsKCkpOwo=
</data>
<flag name="review"
          id="431113"
          type_id="937"
          status="+"
          setter="cjones.bugs"
    />
    <flag name="approval2.0"
          id="431532"
          type_id="647"
          status="+"
          setter="mbeltzner"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>514974</attachid>
            <date>2011-02-24 18:43:59 -0800</date>
            <delta_ts>2011-02-28 12:13:24 -0800</delta_ts>
            <desc>Updated GL patch</desc>
            <filename>bug635373-gl</filename>
            <type>text/plain</type>
            <size>29999</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">RnJvbTogUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYmVydEBvY2FsbGFoYW4ub3JnPgpCdWcgNjM1Mzcz
LiBUaGViZXNMYXllck9HTCBuZWVkcyB0byBtYWtlIHN1cmUgd2Ugb25seSBzYW1wbGUgdmFsaWQg
cGl4ZWxzIHRvby4gcj1tYXR0d29vZHJvdwoKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvVGhlYmVz
TGF5ZXJCdWZmZXIuY3BwIGIvZ2Z4L2xheWVycy9UaGViZXNMYXllckJ1ZmZlci5jcHAKLS0tIGEv
Z2Z4L2xheWVycy9UaGViZXNMYXllckJ1ZmZlci5jcHAKKysrIGIvZ2Z4L2xheWVycy9UaGViZXNM
YXllckJ1ZmZlci5jcHAKQEAgLTE4MSwxNiArMTgxLDI0IEBAIFdyYXBSb3RhdGlvbkF4aXMoUFJJ
bnQzMiogYVJvdGF0aW9uUG9pbnQKIFRoZWJlc0xheWVyQnVmZmVyOjpQYWludFN0YXRlCiBUaGVi
ZXNMYXllckJ1ZmZlcjo6QmVnaW5QYWludChUaGViZXNMYXllciogYUxheWVyLCBDb250ZW50VHlw
ZSBhQ29udGVudFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhWFJl
c29sdXRpb24sIGZsb2F0IGFZUmVzb2x1dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSVWludDMyIGFGbGFncykKIHsKICAgUGFpbnRTdGF0ZSByZXN1bHQ7CiAgIGZsb2F0IGN1
clhSZXMgPSBhTGF5ZXItPkdldFhSZXNvbHV0aW9uKCk7CiAgIGZsb2F0IGN1cllSZXMgPSBhTGF5
ZXItPkdldFlSZXNvbHV0aW9uKCk7CisgIC8vIElmIHdlIGhhdmUgbm9uLWlkZW50aXR5IHJlc29s
dXRpb24gdGhlbiBtQnVmZmVyUm90YXRpb24gbWlnaHQgbm90IGZhbGwKKyAgLy8gb24gYSBidWZm
ZXIgcGl4ZWwgYm91bmRhcnksIGluIHdoaWNoIGNhc2UgdGhhdCByb3cgb2YgcGl4ZWxzIHdpbGwg
Y29udGFpbgorICAvLyBhIG1peCBvZiB0d28gY29tcGxldGVseSBkaWZmZXJlbnQgcm93cyBvZiB0
aGUgbGF5ZXIsIHdoaWNoIHdvdWxkIGJlCisgIC8vIGEgY2F0YXN0cm9waGUuIFNvIGRpc2FibGUg
cm90YXRpb24gaW4gdGhhdCBjYXNlLgorICAvLyBXZSBhbHNvIG5lZWQgdG8gZGlzYWJsZSByb3Rh
dGlvbiBpZiB3ZSdyZSBnb2luZyB0byBiZSByZXNhbXBsZWQgd2hlbgorICAvLyBkcmF3aW5nLCBi
ZWNhdXNlIHdlIG1pZ2h0IHNhbXBsZSBhY3Jvc3MgdGhlIHJvdGF0aW9uIGJvdW5kYXJ5LgorICBQ
UkJvb2wgY2FuSGF2ZVJvdGF0aW9uID0KKyAgICAhKGFGbGFncyAmIFBBSU5UX1dJTExfUkVTQU1Q
TEUpICYmIGFYUmVzb2x1dGlvbiA9PSAxLjAgJiYgYVlSZXNvbHV0aW9uID09IDEuMDsKIAogICBu
c0ludFJlZ2lvbiB2YWxpZFJlZ2lvbiA9IGFMYXllci0+R2V0VmFsaWRSZWdpb24oKTsKIAogICBD
b250ZW50VHlwZSBjb250ZW50VHlwZTsKICAgbnNJbnRSZWdpb24gbmVlZGVkUmVnaW9uOwogICBu
c0ludFNpemUgZGVzdEJ1ZmZlckRpbXM7CiAgIFBSQm9vbCBjYW5SZXVzZUJ1ZmZlcjsKICAgbnNJ
bnRSZWN0IGRlc3RCdWZmZXJSZWN0OwpAQCAtMjUwLDI3ICsyNTgsMjAgQEAgVGhlYmVzTGF5ZXJC
dWZmZXI6OkJlZ2luUGFpbnQoVGhlYmVzTGF5ZQogCiAgICAgYnJlYWs7CiAgIH0KIAogICByZXN1
bHQubVJlZ2lvblRvRHJhdy5TdWIobmVlZGVkUmVnaW9uLCB2YWxpZFJlZ2lvbik7CiAgIGlmIChy
ZXN1bHQubVJlZ2lvblRvRHJhdy5Jc0VtcHR5KCkpCiAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAv
LyBJZiB3ZSBoYXZlIG5vbi1pZGVudGl0eSByZXNvbHV0aW9uIHRoZW4gbUJ1ZmZlclJvdGF0aW9u
IG1pZ2h0IG5vdCBmYWxsCi0gIC8vIG9uIGEgYnVmZmVyIHBpeGVsIGJvdW5kYXJ5LCBpbiB3aGlj
aCBjYXNlIHRoYXQgcm93IG9mIHBpeGVscyB3aWxsIGNvbnRhaW4KLSAgLy8gYSBtaXggb2YgdHdv
IGNvbXBsZXRlbHkgZGlmZmVyZW50IHJvd3Mgb2YgdGhlIGxheWVyLCB3aGljaCB3b3VsZCBiZQot
ICAvLyBhIGNhdGFzdHJvcGhlLiBTbyBkaXNhYmxlIHJvdGF0aW9uIGluIHRoYXQgY2FzZS4KLSAg
Ly8gV2UgYWxzbyBuZWVkIHRvIGRpc2FibGUgcm90YXRpb24gaWYgd2UncmUgZ29pbmcgdG8gYmUg
cmVzYW1wbGVkIHdoZW4KLSAgLy8gZHJhd2luZywgYmVjYXVzZSB3ZSBtaWdodCBzYW1wbGUgYWNy
b3NzIHRoZSByb3RhdGlvbiBib3VuZGFyeS4KLSAgUFJCb29sIGNhbkhhdmVSb3RhdGlvbiA9Ci0g
ICAgIShhRmxhZ3MgJiBQQUlOVF9XSUxMX1JFU0FNUExFKSAmJiBhWFJlc29sdXRpb24gPT0gMS4w
ICYmIGFZUmVzb2x1dGlvbiA9PSAxLjA7CiAgIG5zSW50UmVjdCBkcmF3Qm91bmRzID0gcmVzdWx0
Lm1SZWdpb25Ub0RyYXcuR2V0Qm91bmRzKCk7CiAgIG5zUmVmUHRyPGdmeEFTdXJmYWNlPiBkZXN0
QnVmZmVyOwogICBQUkJvb2wgYnVmZmVyRGltc0NoYW5nZWQgPSBQUl9GQUxTRTsKKyAgUFJVaW50
MzIgYnVmZmVyRmxhZ3MgPSBjYW5IYXZlUm90YXRpb24gPyBBTExPV19SRVBFQVQgOiAwOwogICBp
ZiAoY2FuUmV1c2VCdWZmZXIpIHsKICAgICBOU19BU1NFUlRJT04oY3VyWFJlcyA9PSBhWFJlc29s
dXRpb24gJiYgY3VyWVJlcyA9PSBhWVJlc29sdXRpb24sCiAgICAgICAgICAgICAgICAgICJyZXNv
bHV0aW9uIGNoYW5nZXMgbXVzdCBDbGVhcigpISIpOwogCiAgICAgbnNJbnRSZWN0IGtlZXBBcmVh
OwogICAgIGlmIChrZWVwQXJlYS5JbnRlcnNlY3RSZWN0KGRlc3RCdWZmZXJSZWN0LCBtQnVmZmVy
UmVjdCkpIHsKICAgICAgIC8vIFNldCBtQnVmZmVyUm90YXRpb24gc28gdGhhdCB0aGUgcGl4ZWxz
IGN1cnJlbnRseSBpbiBtQnVmZmVyCiAgICAgICAvLyB3aWxsIHN0aWxsIGJlIHJlbmRlcmVkIGlu
IHRoZSByaWdodCBwbGFjZSB3aGVuIG1CdWZmZXJSZWN0CkBAIC0yODgsMzggKzI4OSwzNiBAQCBU
aGViZXNMYXllckJ1ZmZlcjo6QmVnaW5QYWludChUaGViZXNMYXllCiAgICAgICAgICAgKG5ld1Jv
dGF0aW9uICE9IG5zSW50UG9pbnQoMCwwKSAmJiAhY2FuSGF2ZVJvdGF0aW9uKSkgewogICAgICAg
ICAvLyBUaGUgc3R1ZmYgd2UgbmVlZCB0byByZWRyYXcgd2lsbCB3cmFwIGFyb3VuZCBhbiBlZGdl
IG9mIHRoZQogICAgICAgICAvLyBidWZmZXIsIHNvIHdlIHdpbGwgbmVlZCB0byBkbyBhIHNlbGYt
Y29weQogICAgICAgICBpZiAobUJ1ZmZlci0+U3VwcG9ydHNTZWxmQ29weSgpICYmIG1CdWZmZXJS
b3RhdGlvbiA9PSBuc0ludFBvaW50KDAsMCkpIHsKICAgICAgICAgICBkZXN0QnVmZmVyID0gbUJ1
ZmZlcjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAvLyBXZSBjYW4ndCBkbyBhIHJlYWwg
c2VsZi1jb3B5IGJlY2F1c2UgdGhlIGJ1ZmZlciBpcyByb3RhdGVkLgogICAgICAgICAgIC8vIFNv
IGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBmb3IgdGhlIGRlc3RpbmF0aW9uLgotICAgICAgICAgIGRl
c3RCdWZmZXJSZWN0ID0gbmVlZGVkUmVnaW9uLkdldEJvdW5kcygpOwogICAgICAgICAgIGJ1ZmZl
ckRpbXNDaGFuZ2VkID0gUFJfVFJVRTsKLSAgICAgICAgICBkZXN0QnVmZmVyID0gQ3JlYXRlQnVm
ZmVyKGNvbnRlbnRUeXBlLCBkZXN0QnVmZmVyRGltcyk7CisgICAgICAgICAgZGVzdEJ1ZmZlciA9
IENyZWF0ZUJ1ZmZlcihjb250ZW50VHlwZSwgZGVzdEJ1ZmZlckRpbXMsIGJ1ZmZlckZsYWdzKTsK
ICAgICAgICAgICBpZiAoIWRlc3RCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAgICAgICB9IGVsc2UgewogICAgICAgICBtQnVmZmVyUmVjdCA9IGRlc3RCdWZm
ZXJSZWN0OwogICAgICAgICBtQnVmZmVyUm90YXRpb24gPSBuZXdSb3RhdGlvbjsKICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgLy8gTm8gcGl4ZWxzIGFyZSBnb2luZyB0byBiZSBrZXB0LiBU
aGUgd2hvbGUgdmlzaWJsZSByZWdpb24KICAgICAgIC8vIHdpbGwgYmUgcmVkcmF3biwgc28gd2Ug
ZG9uJ3QgbmVlZCB0byBjb3B5IGFueXRoaW5nLCBzbyB3ZSBkb24ndAogICAgICAgLy8gc2V0IGRl
c3RCdWZmZXIuCiAgICAgICBtQnVmZmVyUmVjdCA9IGRlc3RCdWZmZXJSZWN0OwogICAgICAgbUJ1
ZmZlclJvdGF0aW9uID0gbnNJbnRQb2ludCgwLDApOwogICAgIH0KICAgfSBlbHNlIHsKICAgICAv
LyBUaGUgYnVmZmVyJ3Mgbm90IGJpZyBlbm91Z2gsIHNvIGFsbG9jYXRlIGEgbmV3IG9uZQotICAg
IGRlc3RCdWZmZXJSZWN0ID0gbmVlZGVkUmVnaW9uLkdldEJvdW5kcygpOwogICAgIGJ1ZmZlckRp
bXNDaGFuZ2VkID0gUFJfVFJVRTsKLSAgICBkZXN0QnVmZmVyID0gQ3JlYXRlQnVmZmVyKGNvbnRl
bnRUeXBlLCBkZXN0QnVmZmVyRGltcyk7CisgICAgZGVzdEJ1ZmZlciA9IENyZWF0ZUJ1ZmZlcihj
b250ZW50VHlwZSwgZGVzdEJ1ZmZlckRpbXMsIGJ1ZmZlckZsYWdzKTsKICAgICBpZiAoIWRlc3RC
dWZmZXIpCiAgICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAgIE5TX0FTU0VSVElPTighKGFGbGFn
cyAmIFBBSU5UX1dJTExfUkVTQU1QTEUpIHx8IGRlc3RCdWZmZXJSZWN0ID09IG5lZWRlZFJlZ2lv
bi5HZXRCb3VuZHMoKSwKICAgICAgICAgICAgICAgICJJZiB3ZSdyZSByZXNhbXBsaW5nLCB3ZSBu
ZWVkIHRvIHZhbGlkYXRlIHRoZSBlbnRpcmUgYnVmZmVyIik7CiAKICAgLy8gSWYgd2UgaGF2ZSBu
byBidWZmZXJlZCBkYXRhIGFscmVhZHksIHRoZW4gZGVzdEJ1ZmZlciB3aWxsIGJlIGEgZnJlc2gg
YnVmZmVyCiAgIC8vIGFuZCB3ZSBkbyBub3QgbmVlZCB0byBjbGVhciBpdCBiZWxvdy4KZGlmZiAt
LWdpdCBhL2dmeC9sYXllcnMvVGhlYmVzTGF5ZXJCdWZmZXIuaCBiL2dmeC9sYXllcnMvVGhlYmVz
TGF5ZXJCdWZmZXIuaAotLS0gYS9nZngvbGF5ZXJzL1RoZWJlc0xheWVyQnVmZmVyLmgKKysrIGIv
Z2Z4L2xheWVycy9UaGViZXNMYXllckJ1ZmZlci5oCkBAIC0xMzYsMjEgKzEzNiwyNiBAQCBwdWJs
aWM6CiAgICAqIG1ha2UgdGhlIGVudGlyZSBidWZmZXIgY29udGVudHMgdmFsaWQgKHNpbmNlIHdl
IGRvbid0IHdhbnQgdG8gc2FtcGxlCiAgICAqIGludmFsaWQgcGl4ZWxzIG91dHNpZGUgdGhlIHZp
c2libGUgcmVnaW9uLCBpZiB0aGUgdmlzaWJsZSByZWdpb24gZG9lc24ndAogICAgKiBmaWxsIHRo
ZSBidWZmZXIgYm91bmRzKS4KICAgICovCiAgIFBhaW50U3RhdGUgQmVnaW5QYWludChUaGViZXNM
YXllciogYUxheWVyLCBDb250ZW50VHlwZSBhQ29udGVudFR5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCBhWFJlc29sdXRpb24sIGZsb2F0IGFZUmVzb2x1dGlvbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSVWludDMyIGFGbGFncyk7CiAKKyAgZW51bSB7CisgICAgQUxMT1df
UkVQRUFUID0gMHgwMQorICB9OwogICAvKioKICAgICogUmV0dXJuIGEgbmV3IHN1cmZhY2Ugb2Yg
fGFTaXplfCBhbmQgfGFUeXBlfC4KKyAgICogQHBhcmFtIGFGbGFncyBpZiBBTExPV19SRVBFQVQg
aXMgc2V0LCB0aGVuIHRoZSBidWZmZXIgc2hvdWxkIGJlIGNvbmZpZ3VyZWQKKyAgICogdG8gYWxs
b3cgcmVwZWF0LW1vZGUsIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgaW4gcGFkIChjbGFtcCkgbW9k
ZQogICAgKi8KICAgdmlydHVhbCBhbHJlYWR5X0FkZFJlZmVkPGdmeEFTdXJmYWNlPgotICBDcmVh
dGVCdWZmZXIoQ29udGVudFR5cGUgYVR5cGUsIGNvbnN0IG5zSW50U2l6ZSYgYVNpemUpID0gMDsK
KyAgQ3JlYXRlQnVmZmVyKENvbnRlbnRUeXBlIGFUeXBlLCBjb25zdCBuc0ludFNpemUmIGFTaXpl
LCBQUlVpbnQzMiBhRmxhZ3MpID0gMDsKIAogICAvKioKICAgICogR2V0IHRoZSB1bmRlcmx5aW5n
IGJ1ZmZlciwgaWYgYW55LiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHdlIGNhbiBwYXNzCiAgICAq
IGluIHRoZSBidWZmZXIgYXMgdGhlIGRlZmF1bHQgInJlZmVyZW5jZSBzdXJmYWNlIiBpZiB0aGVy
ZSBpcyBvbmUuCiAgICAqIERvbid0IHVzZSBpdCBmb3IgYW55dGhpbmcgZWxzZSEKICAgICovCiAg
IGdmeEFTdXJmYWNlKiBHZXRCdWZmZXIoKSB7IHJldHVybiBtQnVmZmVyOyB9CiAKZGlmZiAtLWdp
dCBhL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNMYXllcnMuY3BwIGIvZ2Z4L2xheWVycy9iYXNpYy9C
YXNpY0xheWVycy5jcHAKLS0tIGEvZ2Z4L2xheWVycy9iYXNpYy9CYXNpY0xheWVycy5jcHAKKysr
IGIvZ2Z4L2xheWVycy9iYXNpYy9CYXNpY0xheWVycy5jcHAKQEAgLTMyMCwxNyArMzIwLDE3IEBA
IHB1YmxpYzoKICAgLyoqCiAgICAqIENvbXBsZXRlIHRoZSBkcmF3aW5nIG9wZXJhdGlvbi4gVGhl
IHJlZ2lvbiB0byBkcmF3IG11c3QgaGF2ZSBiZWVuCiAgICAqIGRyYXduIGJlZm9yZSB0aGlzIGlz
IGNhbGxlZC4gVGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgYXJlIGRyYXduCiAgICAqIHRvIGFU
YXJnZXQuCiAgICAqLwogICB2b2lkIERyYXdUbyhUaGViZXNMYXllciogYUxheWVyLCBnZnhDb250
ZXh0KiBhVGFyZ2V0LCBmbG9hdCBhT3BhY2l0eSk7CiAKICAgdmlydHVhbCBhbHJlYWR5X0FkZFJl
ZmVkPGdmeEFTdXJmYWNlPgotICBDcmVhdGVCdWZmZXIoQ29udGVudFR5cGUgYVR5cGUsIGNvbnN0
IG5zSW50U2l6ZSYgYVNpemUpOworICBDcmVhdGVCdWZmZXIoQ29udGVudFR5cGUgYVR5cGUsIGNv
bnN0IG5zSW50U2l6ZSYgYVNpemUsIFBSVWludDMyIGFGbGFncyk7CiAKICAgLyoqCiAgICAqIFN3
YXAgb3V0IHRoZSBvbGQgYmFja2luZyBidWZmZXIgZm9yIHxhQnVmZmVyfCBhbmQgYXR0cmlidXRl
cy4KICAgICovCiAgIHZvaWQgU2V0QmFja2luZ0J1ZmZlcihnZnhBU3VyZmFjZSogYUJ1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSW50UmVjdCYgYVJlY3QsIGNvbnN0IG5z
SW50UG9pbnQmIGFSb3RhdGlvbikKICAgewogICAgIGdmeEludFNpemUgcHJldlNpemUgPSBnZnhJ
bnRTaXplKEJ1ZmZlckRpbXMoKS53aWR0aCwgQnVmZmVyRGltcygpLmhlaWdodCk7CkBAIC02NTgs
MTcgKzY1OCwxNyBAQCBCYXNpY1RoZWJlc0xheWVyQnVmZmVyOjpEcmF3VG8oVGhlYmVzTGF5CiAg
IH0KICAgRHJhd0J1ZmZlcldpdGhSb3RhdGlvbihhVGFyZ2V0LCBhT3BhY2l0eSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBhTGF5ZXItPkdldFhSZXNvbHV0aW9uKCksIGFMYXllci0+R2V0WVJl
c29sdXRpb24oKSk7CiAgIGFUYXJnZXQtPlJlc3RvcmUoKTsKIH0KIAogYWxyZWFkeV9BZGRSZWZl
ZDxnZnhBU3VyZmFjZT4KIEJhc2ljVGhlYmVzTGF5ZXJCdWZmZXI6OkNyZWF0ZUJ1ZmZlcihDb250
ZW50VHlwZSBhVHlwZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNJbnRTaXplJiBhU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc0ludFNpemUmIGFTaXplLCBQUlVpbnQzMiBhRmxhZ3MpCiB7CiAgIHJldHVybiBt
TGF5ZXItPkNyZWF0ZUJ1ZmZlcihhVHlwZSwgYVNpemUpOwogfQogCiB2b2lkCiBCYXNpY1RoZWJl
c0xheWVyQnVmZmVyOjpTZXRCYWNraW5nQnVmZmVyQW5kVXBkYXRlRnJvbSgKICAgZ2Z4QVN1cmZh
Y2UqIGFCdWZmZXIsCiAgIGdmeEFTdXJmYWNlKiBhU291cmNlLCBjb25zdCBuc0ludFJlY3QmIGFS
ZWN0LCBjb25zdCBuc0ludFBvaW50JiBhUm90YXRpb24sCmRpZmYgLS1naXQgYS9nZngvbGF5ZXJz
L29wZW5nbC9UaGViZXNMYXllck9HTC5jcHAgYi9nZngvbGF5ZXJzL29wZW5nbC9UaGViZXNMYXll
ck9HTC5jcHAKLS0tIGEvZ2Z4L2xheWVycy9vcGVuZ2wvVGhlYmVzTGF5ZXJPR0wuY3BwCisrKyBi
L2dmeC9sYXllcnMvb3BlbmdsL1RoZWJlc0xheWVyT0dMLmNwcApAQCAtNDcsMjggKzQ3LDM0IEBA
CiAjaW5jbHVkZSAiZ2Z4VGVlU3VyZmFjZS5oIgogCiBuYW1lc3BhY2UgbW96aWxsYSB7CiBuYW1l
c3BhY2UgbGF5ZXJzIHsKIAogdXNpbmcgZ2w6OkdMQ29udGV4dDsKIHVzaW5nIGdsOjpUZXh0dXJl
SW1hZ2U7CiAKK3N0YXRpYyBjb25zdCBpbnQgQUxMT1dfUkVQRUFUID0gVGhlYmVzTGF5ZXJCdWZm
ZXI6OkFMTE9XX1JFUEVBVDsKKwogLy8gQmluZEFuZERyYXdRdWFkV2l0aFRleHR1cmVSZWN0IGNh
biB3b3JrIHdpdGggZWl0aGVyIEdMX1JFUEVBVCAocHJlZmVycmVkKQotLy8gb3IgR0xfQ0xBTVBf
VE9fRURHRSB0ZXh0dXJlcy4gIFdlIHNlbGVjdCBiYXNlZCBvbiB3aGV0aGVyIFJFUEVBVCBpcwot
Ly8gdmFsaWQgZm9yIG5vbi1wb3dlci1vZi10d28gdGV4dHVyZXMgLS0gaWYgd2UgaGF2ZSBOUE9U
IHN1cHBvcnQgd2UgdXNlIGl0LAotLy8gb3RoZXJ3aXNlIHdlIHN0aWNrIHdpdGggQ0xBTVBfVE9f
RURHRSBhbmQgZGVjb21wb3NlLgorLy8gb3IgR0xfQ0xBTVBfVE9fRURHRSB0ZXh0dXJlcy4gSWYg
QUxMT1dfUkVQRUFUIGlzIHNldCBpbiBhRmxhZ3MsIHdlCisvLyBzZWxlY3QgYmFzZWQgb24gd2hl
dGhlciBSRVBFQVQgaXMgdmFsaWQgZm9yIG5vbi1wb3dlci1vZi10d28gdGV4dHVyZXMgLS0KKy8v
IGlmIHdlIGhhdmUgTlBPVCBzdXBwb3J0IHdlIHVzZSBpdCwgb3RoZXJ3aXNlIHdlIHN0aWNrIHdp
dGggQ0xBTVBfVE9fRURHRSBhbmQKKy8vIGRlY29tcG9zZS4KKy8vIElmIEFMTE9XX1JFUEVBVCBp
cyBub3Qgc2V0LCB3ZSBhbHdheXMgdXNlIEdMX0NMQU1QX1RPX0VER0UuCiBzdGF0aWMgYWxyZWFk
eV9BZGRSZWZlZDxUZXh0dXJlSW1hZ2U+CiBDcmVhdGVDbGFtcE9yUmVwZWF0VGV4dHVyZUltYWdl
KEdMQ29udGV4dCAqYUdsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c0ludFNpemUmIGFTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJl
SW1hZ2U6OkNvbnRlbnRUeXBlIGFDb250ZW50VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVGV4dHVyZUltYWdlOjpDb250ZW50VHlwZSBhQ29udGVudFR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFGbGFncykKIHsKICAgR0xlbnVtIHdy
YXBNb2RlID0gTE9DQUxfR0xfQ0xBTVBfVE9fRURHRTsKLSAgaWYgKGFHbC0+SXNFeHRlbnNpb25T
dXBwb3J0ZWQoR0xDb250ZXh0OjpBUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvKSB8fAotICAg
ICAgYUdsLT5Jc0V4dGVuc2lvblN1cHBvcnRlZChHTENvbnRleHQ6Ok9FU190ZXh0dXJlX25wb3Qp
KQorICBpZiAoKGFGbGFncyAmIEFMTE9XX1JFUEVBVCkgJiYKKyAgICAgIChhR2wtPklzRXh0ZW5z
aW9uU3VwcG9ydGVkKEdMQ29udGV4dDo6QVJCX3RleHR1cmVfbm9uX3Bvd2VyX29mX3R3bykgfHwK
KyAgICAgICBhR2wtPklzRXh0ZW5zaW9uU3VwcG9ydGVkKEdMQ29udGV4dDo6T0VTX3RleHR1cmVf
bnBvdCkpKQogICB7CiAgICAgd3JhcE1vZGUgPSBMT0NBTF9HTF9SRVBFQVQ7CiAgIH0KIAogICBy
ZXR1cm4gYUdsLT5DcmVhdGVUZXh0dXJlSW1hZ2UoYVNpemUsIGFDb250ZW50VHlwZSwgd3JhcE1v
ZGUpOwogfQogCiAvLyB8YVRleENvb3JkUmVjdHwgaXMgdGhlIHJlY3RhbmdsZSBmcm9tIHRoZSB0
ZXh0dXJlIHRoYXQgd2Ugd2FudCB0bwpAQCAtMTUxLDE5ICsxNTcsMjEgQEAgcHVibGljOgogICB0
eXBlZGVmIFRoZWJlc0xheWVyQnVmZmVyOjpQYWludFN0YXRlIFBhaW50U3RhdGU7CiAKICAgVGhl
YmVzTGF5ZXJCdWZmZXJPR0woVGhlYmVzTGF5ZXIqIGFMYXllciwgTGF5ZXJPR0wqIGFPR0xMYXll
cikKICAgICA6IG1MYXllcihhTGF5ZXIpCiAgICAgLCBtT0dMTGF5ZXIoYU9HTExheWVyKQogICB7
fQogICB2aXJ0dWFsIH5UaGViZXNMYXllckJ1ZmZlck9HTCgpIHt9CiAKKyAgZW51bSB7IFBBSU5U
X1dJTExfUkVTQU1QTEUgPSBUaGViZXNMYXllckJ1ZmZlcjo6UEFJTlRfV0lMTF9SRVNBTVBMRSB9
OwogICB2aXJ0dWFsIFBhaW50U3RhdGUgQmVnaW5QYWludChDb250ZW50VHlwZSBhQ29udGVudFR5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFYUmVzb2x1dGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVlSZXNvbHV0aW9uKSA9IDA7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFZUmVzb2x1dGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzKSA9IDA7CiAKICAg
dm9pZCBSZW5kZXJUbyhjb25zdCBuc0ludFBvaW50JiBhT2Zmc2V0LCBMYXllck1hbmFnZXJPR0wq
IGFNYW5hZ2VyKTsKIAogICBuc0ludFNpemUgR2V0U2l6ZSgpIHsKICAgICBpZiAobVRleEltYWdl
KQogICAgICAgcmV0dXJuIG1UZXhJbWFnZS0+R2V0U2l6ZSgpOwogICAgIHJldHVybiBuc0ludFNp
emUoMCwgMCk7CiAgIH0KQEAgLTIyOCwxNyArMjM2LDE3IEBAIFRoZWJlc0xheWVyQnVmZmVyT0dM
OjpSZW5kZXJUbyhjb25zdCBuc0kKICAgICAgIERFQlVHX0dMX0VSUk9SX0NIRUNLKGdsKCkpOwog
ICAgICAgYWxwaGFQcm9ncmFtLT5TZXRCbGFja1RleHR1cmVVbml0KDApOwogICAgICAgYWxwaGFQ
cm9ncmFtLT5TZXRXaGl0ZVRleHR1cmVVbml0KDEpOwogICAgICAgcHJvZ3JhbSA9IGFscGhhUHJv
Z3JhbTsKICAgICB9IGVsc2UgewogICAgICAgLy8gTm90ZSBCR1I6IENhaXJvJ3MgaW1hZ2Ugc3Vy
ZmFjZXMgYXJlIGFsd2F5cyBpbiB3aGF0CiAgICAgICAvLyBPcGVuR0wgYW5kIG91ciBzaGFkZXJz
IGNvbnNpZGVyIEJHUiBmb3JtYXQuCiAgICAgICBDb2xvclRleHR1cmVMYXllclByb2dyYW0gKmJh
c2ljUHJvZ3JhbSA9Ci0gICAgICAgIGFNYW5hZ2VyLT5HZXRCYXNpY0xheWVyUHJvZ3JhbShtTGF5
ZXItPkNhblVzZU9wYXF1ZVN1cmZhY2UoKSwKKyAgICAgICAgYU1hbmFnZXItPkdldEJhc2ljTGF5
ZXJQcm9ncmFtKG1UZXhJbWFnZS0+R2V0Q29udGVudFR5cGUoKSA9PSBnZnhBU3VyZmFjZTo6Q09O
VEVOVF9DT0xPUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZXhJ
bWFnZS0+SXNSR0IoKSk7CiAKICAgICAgIGJhc2ljUHJvZ3JhbS0+QWN0aXZhdGUoKTsKICAgICAg
IERFQlVHX0dMX0VSUk9SX0NIRUNLKGdsKCkpOwogICAgICAgYmFzaWNQcm9ncmFtLT5TZXRUZXh0
dXJlVW5pdCgwKTsKICAgICAgIHByb2dyYW0gPSBiYXNpY1Byb2dyYW07CiAgICAgfQogCkBAIC0y
ODksMzMgKzI5NywzNCBAQCBwdWJsaWM6CiAgICAgLCBUaGViZXNMYXllckJ1ZmZlcihTaXplZFRv
VmlzaWJsZUJvdW5kcykKICAgewogICB9CiAgIHZpcnR1YWwgflN1cmZhY2VCdWZmZXJPR0woKSB7
fQogCiAgIC8vIFRoZWJlc0xheWVyQnVmZmVyT0dMIGludGVyZmFjZQogICB2aXJ0dWFsIFBhaW50
U3RhdGUgQmVnaW5QYWludChDb250ZW50VHlwZSBhQ29udGVudFR5cGUsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBhWFJlc29sdXRpb24sIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBhWVJlc29sdXRpb24pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGFZUmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MzIgYUZsYWdzKQogICB7CiAgICAgLy8gTGV0IFRoZWJlc0xheWVyQnVm
ZmVyIGRvIGFsbCB0aGUgaGFyZCB3b3JrIGZvciB1cyEgOkQKICAgICByZXR1cm4gVGhlYmVzTGF5
ZXJCdWZmZXI6OkJlZ2luUGFpbnQobUxheWVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYUNvbnRlbnRUeXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYVhSZXNvbHV0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYVlSZXNvbHV0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYUZsYWdzKTsKICAgfQogCiAgIC8vIFRoZWJlc0xheWVyQnVmZmVyIGludGVyZmFjZQogICB2
aXJ0dWFsIGFscmVhZHlfQWRkUmVmZWQ8Z2Z4QVN1cmZhY2U+Ci0gIENyZWF0ZUJ1ZmZlcihDb250
ZW50VHlwZSBhVHlwZSwgY29uc3QgbnNJbnRTaXplJiBhU2l6ZSkKKyAgQ3JlYXRlQnVmZmVyKENv
bnRlbnRUeXBlIGFUeXBlLCBjb25zdCBuc0ludFNpemUmIGFTaXplLCBQUlVpbnQzMiBhRmxhZ3Mp
CiAgIHsKICAgICBOU19BU1NFUlRJT04oZ2Z4QVN1cmZhY2U6OkNPTlRFTlRfQUxQSEEgIT0gYVR5
cGUsIlRoZWJlc0J1ZmZlciBoYXMgY29sb3IiKTsKIAotICAgIG1UZXhJbWFnZSA9IENyZWF0ZUNs
YW1wT3JSZXBlYXRUZXh0dXJlSW1hZ2UoZ2woKSwgYVNpemUsIGFUeXBlKTsKKyAgICBtVGV4SW1h
Z2UgPSBDcmVhdGVDbGFtcE9yUmVwZWF0VGV4dHVyZUltYWdlKGdsKCksIGFTaXplLCBhVHlwZSwg
YUZsYWdzKTsKICAgICByZXR1cm4gbVRleEltYWdlID8gbVRleEltYWdlLT5HZXRCYWNraW5nU3Vy
ZmFjZSgpIDogbnNudWxsOwogICB9CiAKIHByb3RlY3RlZDoKICAgdmlydHVhbCBuc0ludFBvaW50
IEdldE9yaWdpbk9mZnNldCgpIHsKICAgICByZXR1cm4gQnVmZmVyUmVjdCgpLlRvcExlZnQoKSAt
IEJ1ZmZlclJvdGF0aW9uKCk7CiAgIH0KIH07CkBAIC0zMzIsMTcgKzM0MSwxOCBAQCBwdWJsaWM6
CiAgICAgOiBUaGViZXNMYXllckJ1ZmZlck9HTChhTGF5ZXIsIGFMYXllcikKICAgICAsIG1CdWZm
ZXJSZWN0KDAsMCwwLDApCiAgICAgLCBtQnVmZmVyUm90YXRpb24oMCwwKQogICB7fQogICB2aXJ0
dWFsIH5CYXNpY0J1ZmZlck9HTCgpIHt9CiAKICAgdmlydHVhbCBQYWludFN0YXRlIEJlZ2luUGFp
bnQoQ29udGVudFR5cGUgYUNvbnRlbnRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBhWFJlc29sdXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGFZUmVzb2x1dGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IGFZUmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50
MzIgYUZsYWdzKTsKIAogcHJvdGVjdGVkOgogICBlbnVtIFhTaWRlIHsKICAgICBMRUZULCBSSUdI
VAogICB9OwogICBlbnVtIFlTaWRlIHsKICAgICBUT1AsIEJPVFRPTQogICB9OwpAQCAtMzk5LDEx
NiArNDA5LDE2NyBAQCBTY2FsZWRTaXplKGNvbnN0IG5zSW50U2l6ZSYgYVNpemUsIGZsb2F0CiAg
IG5zSW50UmVjdCByZWN0KDAsIDAsIGFTaXplLndpZHRoLCBhU2l6ZS5oZWlnaHQpOwogICByZWN0
LlNjYWxlUm91bmRPdXQoYVhTY2FsZSwgYVlTY2FsZSk7CiAgIHJldHVybiByZWN0LlNpemUoKTsK
IH0KIAogQmFzaWNCdWZmZXJPR0w6OlBhaW50U3RhdGUKIEJhc2ljQnVmZmVyT0dMOjpCZWdpblBh
aW50KENvbnRlbnRUeXBlIGFDb250ZW50VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGFYUmVzb2x1dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFZ
UmVzb2x1dGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFZUmVzb2x1dGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFGbGFncykKIHsKICAgUGFp
bnRTdGF0ZSByZXN1bHQ7Ci0KLSAgcmVzdWx0Lm1SZWdpb25Ub0RyYXcuU3ViKG1MYXllci0+R2V0
VmlzaWJsZVJlZ2lvbigpLCBtTGF5ZXItPkdldFZhbGlkUmVnaW9uKCkpOwotICAKICAgZmxvYXQg
Y3VyWFJlcyA9IG1MYXllci0+R2V0WFJlc29sdXRpb24oKTsKICAgZmxvYXQgY3VyWVJlcyA9IG1M
YXllci0+R2V0WVJlc29sdXRpb24oKTsKLSAgTGF5ZXI6OlN1cmZhY2VNb2RlIG1vZGUgPSBtTGF5
ZXItPkdldFN1cmZhY2VNb2RlKCk7CisgIC8vIElmIHdlIGhhdmUgbm9uLWlkZW50aXR5IHJlc29s
dXRpb24gdGhlbiBtQnVmZmVyUm90YXRpb24gbWlnaHQgbm90IGZhbGwKKyAgLy8gb24gYSBidWZm
ZXIgcGl4ZWwgYm91bmRhcnksIGluIHdoaWNoIGNhc2UgdGhhdCByb3cgb2YgcGl4ZWxzIHdpbGwg
Y29udGFpbgorICAvLyBhIG1peCBvZiB0d28gY29tcGxldGVseSBkaWZmZXJlbnQgcm93cyBvZiB0
aGUgbGF5ZXIsIHdoaWNoIHdvdWxkIGJlCisgIC8vIGEgY2F0YXN0cm9waGUuIFNvIGRpc2FibGUg
cm90YXRpb24gaW4gdGhhdCBjYXNlLgorICAvLyBXZSBhbHNvIG5lZWQgdG8gZGlzYWJsZSByb3Rh
dGlvbiBpZiB3ZSdyZSBnb2luZyB0byBiZSByZXNhbXBsZWQgd2hlbgorICAvLyBkcmF3aW5nLCBi
ZWNhdXNlIHdlIG1pZ2h0IHNhbXBsZSBhY3Jvc3MgdGhlIHJvdGF0aW9uIGJvdW5kYXJ5LgorICBQ
UkJvb2wgY2FuSGF2ZVJvdGF0aW9uID0KKyAgICAhKGFGbGFncyAmIFBBSU5UX1dJTExfUkVTQU1Q
TEUpICYmIGFYUmVzb2x1dGlvbiA9PSAxLjAgJiYgYVlSZXNvbHV0aW9uID09IDEuMDsKIAotICBp
ZiAobW9kZSA9PSBMYXllcjo6U1VSRkFDRV9DT01QT05FTlRfQUxQSEEpIHsKKyAgbnNJbnRSZWdp
b24gdmFsaWRSZWdpb24gPSBtTGF5ZXItPkdldFZhbGlkUmVnaW9uKCk7CisKKyAgTGF5ZXI6OlN1
cmZhY2VNb2RlIG1vZGU7CisgIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlOworICBuc0ludFJlZ2lv
biBuZWVkZWRSZWdpb247CisgIG5zSW50U2l6ZSBkZXN0QnVmZmVyRGltczsKKyAgUFJCb29sIGNh
blJldXNlQnVmZmVyOworICBuc0ludFJlY3QgZGVzdEJ1ZmZlclJlY3Q7CisKKyAgd2hpbGUgKFBS
X1RSVUUpIHsKKyAgICBtb2RlID0gbUxheWVyLT5HZXRTdXJmYWNlTW9kZSgpOworICAgIGNvbnRl
bnRUeXBlID0gYUNvbnRlbnRUeXBlOworICAgIG5lZWRlZFJlZ2lvbiA9IG1MYXllci0+R2V0Vmlz
aWJsZVJlZ2lvbigpOworICAgIGRlc3RCdWZmZXJEaW1zID0gU2NhbGVkU2l6ZShuZWVkZWRSZWdp
b24uR2V0Qm91bmRzKCkuU2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
WFJlc29sdXRpb24sIGFZUmVzb2x1dGlvbik7CisgICAgLy8gSWYgd2UncmUgZ29pbmcgdG8gcmVz
YW1wbGUsIHdlIG5lZWQgYSBidWZmZXIgdGhhdCdzIGluIGNsYW1wIG1vZGUuCisgICAgY2FuUmV1
c2VCdWZmZXIgPSBuZWVkZWRSZWdpb24uR2V0Qm91bmRzKCkuU2l6ZSgpIDw9IG1CdWZmZXJSZWN0
LlNpemUoKSAmJgorICAgICAgbVRleEltYWdlICYmCisgICAgICAoIShhRmxhZ3MgJiBQQUlOVF9X
SUxMX1JFU0FNUExFKSB8fAorICAgICAgIG1UZXhJbWFnZS0+R2V0V3JhcE1vZGUoKSA9PSBMT0NB
TF9HTF9DTEFNUF9UT19FREdFKTsKKworICAgIGlmIChjYW5SZXVzZUJ1ZmZlcikgeworICAgICAg
aWYgKG1CdWZmZXJSZWN0LkNvbnRhaW5zKG5lZWRlZFJlZ2lvbi5HZXRCb3VuZHMoKSkpIHsKKyAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBhZGp1c3QgbUJ1ZmZlclJlY3QuCisgICAgICAgIGRl
c3RCdWZmZXJSZWN0ID0gbUJ1ZmZlclJlY3Q7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBU
aGUgYnVmZmVyJ3MgYmlnIGVub3VnaCBidXQgZG9lc24ndCBjb250YWluIGV2ZXJ5dGhpbmcgdGhh
dCdzCisgICAgICAgIC8vIGdvaW5nIHRvIGJlIHZpc2libGUuIFdlJ2xsIG1vdmUgaXQuCisgICAg
ICAgIGRlc3RCdWZmZXJSZWN0ID0gbnNJbnRSZWN0KG5lZWRlZFJlZ2lvbi5HZXRCb3VuZHMoKS5U
b3BMZWZ0KCksIG1CdWZmZXJSZWN0LlNpemUoKSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgIGRlc3RCdWZmZXJSZWN0ID0gbmVlZGVkUmVnaW9uLkdldEJvdW5kcygpOworICAgIH0KKwor
ICAgIGlmIChtb2RlID09IExheWVyOjpTVVJGQUNFX0NPTVBPTkVOVF9BTFBIQSkgewogI2lmZGVm
IE1PWl9HRlhfT1BUSU1JWkVfTU9CSUxFCi0gICAgbW9kZSA9IExheWVyOjpTVVJGQUNFX1NJTkdM
RV9DSEFOTkVMX0FMUEhBOworICAgICAgbW9kZSA9IExheWVyOjpTVVJGQUNFX1NJTkdMRV9DSEFO
TkVMX0FMUEhBOwogI2Vsc2UKLSAgICBpZiAoIW1MYXllci0+R2V0UGFyZW50KCkgfHwgIW1MYXll
ci0+R2V0UGFyZW50KCktPlN1cHBvcnRzQ29tcG9uZW50QWxwaGFDaGlsZHJlbigpKSB7Ci0gICAg
ICBtb2RlID0gTGF5ZXI6OlNVUkZBQ0VfU0lOR0xFX0NIQU5ORUxfQUxQSEE7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIGFDb250ZW50VHlwZSA9IGdmeEFTdXJmYWNlOjpDT05URU5UX0NPTE9SOworICAg
ICAgaWYgKCFtTGF5ZXItPkdldFBhcmVudCgpIHx8ICFtTGF5ZXItPkdldFBhcmVudCgpLT5TdXBw
b3J0c0NvbXBvbmVudEFscGhhQ2hpbGRyZW4oKSkgeworICAgICAgICBtb2RlID0gTGF5ZXI6OlNV
UkZBQ0VfU0lOR0xFX0NIQU5ORUxfQUxQSEE7CisgICAgICB9IGVsc2UgeworICAgICAgICBjb250
ZW50VHlwZSA9IGdmeEFTdXJmYWNlOjpDT05URU5UX0NPTE9SOworICAgICAgfQorI2VuZGlmCiAg
ICAgfQotI2VuZGlmCisKKyAgICBpZiAoKGFGbGFncyAmIFBBSU5UX1dJTExfUkVTQU1QTEUpICYm
CisgICAgICAgIChuZWVkZWRSZWdpb24uR2V0Qm91bmRzKCkgIT0gZGVzdEJ1ZmZlclJlY3QgfHwK
KyAgICAgICAgIG5lZWRlZFJlZ2lvbi5HZXROdW1SZWN0cygpID4gMSkpIHsKKyAgICAgIC8vIFRo
ZSBhcmVhIHdlIGFkZCB0byBuZWVkZWRSZWdpb24gbWlnaHQgbm90IGJlIHBhaW50ZWQgb3BhcXVl
bHkKKyAgICAgIGlmIChtb2RlID09IExheWVyOjpTVVJGQUNFX09QQVFVRSkgeworICAgICAgICBj
b250ZW50VHlwZSA9IGdmeEFTdXJmYWNlOjpDT05URU5UX0NPTE9SX0FMUEhBOworICAgICAgICBt
b2RlID0gTGF5ZXI6OlNVUkZBQ0VfU0lOR0xFX0NIQU5ORUxfQUxQSEE7CisgICAgICB9CisgICAg
ICAvLyBGb3IgY29tcG9uZW50IGFscGhhIGxheWVycywgd2UgbGVhdmUgY29udGVudFR5cGUgYXMg
Q09OVEVOVF9DT0xPUi4KKworICAgICAgLy8gV2UgbmVlZCB0byB2YWxpZGF0ZSB0aGUgZW50aXJl
IGJ1ZmZlciwgdG8gbWFrZSBzdXJlIHRoYXQgb25seSB2YWxpZAorICAgICAgLy8gcGl4ZWxzIGFy
ZSBzYW1wbGVkCisgICAgICBuZWVkZWRSZWdpb24gPSBkZXN0QnVmZmVyUmVjdDsKKyAgICAgIGRl
c3RCdWZmZXJEaW1zID0gU2NhbGVkU2l6ZShuZWVkZWRSZWdpb24uR2V0Qm91bmRzKCkuU2l6ZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFYUmVzb2x1dGlvbiwgYVlSZXNv
bHV0aW9uKTsKKyAgICB9CisKKyAgICBpZiAobVRleEltYWdlICYmCisgICAgICAgIChtVGV4SW1h
Z2UtPkdldENvbnRlbnRUeXBlKCkgIT0gY29udGVudFR5cGUgfHwKKyAgICAgICAgIGFYUmVzb2x1
dGlvbiAhPSBjdXJYUmVzIHx8IGFZUmVzb2x1dGlvbiAhPSBjdXJZUmVzIHx8CisgICAgICAgICAo
bW9kZSA9PSBMYXllcjo6U1VSRkFDRV9DT01QT05FTlRfQUxQSEEpICE9IChtVGV4SW1hZ2VPbldo
aXRlICE9IG5zbnVsbCkpKSB7CisgICAgICAvLyBXZSdyZSBlZmZlY3RpdmVseSBjbGVhcmluZyB0
aGUgdmFsaWQgcmVnaW9uLCBzbyB3ZSBuZWVkIHRvIGRyYXcKKyAgICAgIC8vIHRoZSBlbnRpcmUg
bmVlZGVkIHJlZ2lvbiBub3cuCisgICAgICAvLworICAgICAgLy8gWFhYL2Nqb25lczogYSBwb3Nz
aWJseSB3b3J0aHdoaWxlIG9wdGltaXphdGlvbiB0byBrZWVwIGluIG1pbmQKKyAgICAgIC8vIGlz
IHRvIHJlLXVzZSBidWZmZXJzIHdoZW4gdGhlIHJlc29sdXRpb24gYW5kIHZpc2libGUgcmVnaW9u
CisgICAgICAvLyBoYXZlIGNoYW5nZWQgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBidWZmZXIgc2l6
ZSBzdGF5cyB0aGUgc2FtZS4KKyAgICAgIC8vIEl0IG1pZ2h0IG1ha2UgZXZlbiBtb3JlIHNlbnNl
IHRvIGFsbG9jYXRlIGJ1ZmZlcnMgZnJvbSBhCisgICAgICAvLyByZWN5Y2xhYmxlIHBvb2wsIHNv
IHRoYXQgd2UgY291bGQga2VlcCB0aGlzIGxvZ2ljIHNpbXBsZSBhbmQKKyAgICAgIC8vIHN0aWxs
IGdldCBiYWNrIHRoZSBzYW1lIGJ1ZmZlci4KKyAgICAgIHJlc3VsdC5tUmVnaW9uVG9JbnZhbGlk
YXRlID0gbUxheWVyLT5HZXRWYWxpZFJlZ2lvbigpOworICAgICAgdmFsaWRSZWdpb24uU2V0RW1w
dHkoKTsKKyAgICAgIG1UZXhJbWFnZSA9IG5zbnVsbDsKKyAgICAgIG1UZXhJbWFnZU9uV2hpdGUg
PSBuc251bGw7CisgICAgICBtQnVmZmVyUmVjdC5TZXRSZWN0KDAsIDAsIDAsIDApOworICAgICAg
bUJ1ZmZlclJvdGF0aW9uLk1vdmVUbygwLCAwKTsKKyAgICAgIC8vIFJlc3RhcnQgZGVjaXNpb24g
cHJvY2VzcyB3aXRoIHRoZSBjbGVhcmVkIGJ1ZmZlci4gV2UgY2FuIG9ubHkgZ28KKyAgICAgIC8v
IGFyb3VuZCB0aGUgbG9vcCBvbmUgbW9yZSBpdGVyYXRpb24sIHNpbmNlIG1UZXhJbWFnZSBpcyBu
dWxsIG5vdy4KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGJyZWFrOwogICB9CiAKLSAg
aWYgKCFtVGV4SW1hZ2UgfHwgbVRleEltYWdlLT5HZXRDb250ZW50VHlwZSgpICE9IGFDb250ZW50
VHlwZSB8fAotICAgICAgYVhSZXNvbHV0aW9uICE9IGN1clhSZXMgfHwgYVlSZXNvbHV0aW9uICE9
IGN1cllSZXMgfHwKLSAgICAgIChtb2RlID09IExheWVyOjpTVVJGQUNFX0NPTVBPTkVOVF9BTFBI
QSkgIT0gKG1UZXhJbWFnZU9uV2hpdGUgIT0gbnNudWxsKSkgewotICAgIC8vIFdlJ3JlIGVmZmVj
dGl2ZWx5IGNsZWFyaW5nIHRoZSB2YWxpZCByZWdpb24sIHNvIHdlIG5lZWQgdG8gZHJhdwotICAg
IC8vIHRoZSBlbnRpcmUgdmlzaWJsZSByZWdpb24gbm93LgotICAgIC8vCi0gICAgLy8gWFhYL2Nq
b25lczogYSBwb3NzaWJseSB3b3J0aHdoaWxlIG9wdGltaXphdGlvbiB0byBrZWVwIGluIG1pbmQK
LSAgICAvLyBpcyB0byByZS11c2UgYnVmZmVycyB3aGVuIHRoZSByZXNvbHV0aW9uIGFuZCB2aXNp
YmxlIHJlZ2lvbgotICAgIC8vIGhhdmUgY2hhbmdlZCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGJ1
ZmZlciBzaXplIHN0YXlzIHRoZSBzYW1lLgotICAgIC8vIEl0IG1pZ2h0IG1ha2UgZXZlbiBtb3Jl
IHNlbnNlIHRvIGFsbG9jYXRlIGJ1ZmZlcnMgZnJvbSBhCi0gICAgLy8gcmVjeWNsYWJsZSBwb29s
LCBzbyB0aGF0IHdlIGNvdWxkIGtlZXAgdGhpcyBsb2dpYyBzaW1wbGUgYW5kCi0gICAgLy8gc3Rp
bGwgZ2V0IGJhY2sgdGhlIHNhbWUgYnVmZmVyLgotICAgIHJlc3VsdC5tUmVnaW9uVG9EcmF3ID0g
bUxheWVyLT5HZXRWaXNpYmxlUmVnaW9uKCk7Ci0gICAgcmVzdWx0Lm1SZWdpb25Ub0ludmFsaWRh
dGUgPSBtTGF5ZXItPkdldFZhbGlkUmVnaW9uKCk7Ci0gICAgbVRleEltYWdlID0gbnNudWxsOwot
ICAgIG1UZXhJbWFnZU9uV2hpdGUgPSBuc251bGw7Ci0gICAgbUJ1ZmZlclJlY3QuU2V0UmVjdCgw
LCAwLCAwLCAwKTsKLSAgICBtQnVmZmVyUm90YXRpb24uTW92ZVRvKDAsIDApOwotICB9Ci0KKyAg
cmVzdWx0Lm1SZWdpb25Ub0RyYXcuU3ViKG5lZWRlZFJlZ2lvbiwgdmFsaWRSZWdpb24pOwogICBp
ZiAocmVzdWx0Lm1SZWdpb25Ub0RyYXcuSXNFbXB0eSgpKQogICAgIHJldHVybiByZXN1bHQ7CiAK
LSAgbnNJbnRSZWN0IHZpc2libGVCb3VuZHMgPSBtTGF5ZXItPkdldFZpc2libGVSZWdpb24oKS5H
ZXRCb3VuZHMoKTsKLSAgbnNJbnRSZWN0IGRyYXdCb3VuZHMgPSByZXN1bHQubVJlZ2lvblRvRHJh
dy5HZXRCb3VuZHMoKTsKLSAgbnNJbnRTaXplIGRlc3RCdWZmZXJEaW1zID0gU2NhbGVkU2l6ZSh2
aXNpYmxlQm91bmRzLlNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhWFJlc29sdXRpb24sIGFZUmVzb2x1dGlvbik7Ci0gIAogICBpZiAoZGVzdEJ1ZmZlckRp
bXMud2lkdGggPiBnbCgpLT5HZXRNYXhUZXh0dXJlU2l6ZSgpIHx8CiAgICAgICBkZXN0QnVmZmVy
RGltcy5oZWlnaHQgPiBnbCgpLT5HZXRNYXhUZXh0dXJlU2l6ZSgpKSB7CiAgICAgcmV0dXJuIHJl
c3VsdDsKICAgfQogCisgIG5zSW50UmVjdCBkcmF3Qm91bmRzID0gcmVzdWx0Lm1SZWdpb25Ub0Ry
YXcuR2V0Qm91bmRzKCk7CiAgIG5zUmVmUHRyPFRleHR1cmVJbWFnZT4gZGVzdEJ1ZmZlcjsKICAg
bnNSZWZQdHI8VGV4dHVyZUltYWdlPiBkZXN0QnVmZmVyT25XaGl0ZTsKLSAgbnNJbnRSZWN0IGRl
c3RCdWZmZXJSZWN0OwotCi0gIGlmICh2aXNpYmxlQm91bmRzLlNpemUoKSA8PSBtQnVmZmVyUmVj
dC5TaXplKCkpIHsKKyAgUFJVaW50MzIgYnVmZmVyRmxhZ3MgPSBjYW5IYXZlUm90YXRpb24gPyBB
TExPV19SRVBFQVQgOiAwOworICBpZiAoY2FuUmV1c2VCdWZmZXIpIHsKICAgICBOU19BU1NFUlRJ
T04oY3VyWFJlcyA9PSBhWFJlc29sdXRpb24gJiYgY3VyWVJlcyA9PSBhWVJlc29sdXRpb24sCiAg
ICAgICAgICAgICAgICAgICJyZXNvbHV0aW9uIGNoYW5nZXMgbXVzdCBjbGVhciB0aGUgYnVmZmVy
ISIpOwotICAgIC8vIFRoZSBjdXJyZW50IGJ1ZmZlciBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgdGhl
IHZpc2libGUgYXJlYS4KLSAgICBpZiAobUJ1ZmZlclJlY3QuQ29udGFpbnModmlzaWJsZUJvdW5k
cykpIHsKLSAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYWRqdXN0IG1CdWZmZXJSZWN0LgotICAg
ICAgZGVzdEJ1ZmZlclJlY3QgPSBtQnVmZmVyUmVjdDsKLSAgICB9IGVsc2UgewotICAgICAgLy8g
VGhlIGJ1ZmZlcidzIGJpZyBlbm91Z2ggYnV0IGRvZXNuJ3QgY29udGFpbiBldmVyeXRoaW5nIHRo
YXQncwotICAgICAgLy8gZ29pbmcgdG8gYmUgdmlzaWJsZS4gV2UnbGwgbW92ZSBpdC4KLSAgICAg
IGRlc3RCdWZmZXJSZWN0ID0gbnNJbnRSZWN0KHZpc2libGVCb3VuZHMuVG9wTGVmdCgpLCBtQnVm
ZmVyUmVjdC5TaXplKCkpOwotICAgIH0KKwogICAgIG5zSW50UmVjdCBrZWVwQXJlYTsKICAgICBp
ZiAoa2VlcEFyZWEuSW50ZXJzZWN0UmVjdChkZXN0QnVmZmVyUmVjdCwgbUJ1ZmZlclJlY3QpKSB7
CiAgICAgICAvLyBTZXQgbUJ1ZmZlclJvdGF0aW9uIHNvIHRoYXQgdGhlIHBpeGVscyBjdXJyZW50
bHkgaW4gbUJ1ZmZlcgogICAgICAgLy8gd2lsbCBzdGlsbCBiZSByZW5kZXJlZCBpbiB0aGUgcmln
aHQgcGxhY2Ugd2hlbiBtQnVmZmVyUmVjdAogICAgICAgLy8gY2hhbmdlcyB0byBkZXN0QnVmZmVy
UmVjdC4KICAgICAgIG5zSW50UG9pbnQgbmV3Um90YXRpb24gPSBtQnVmZmVyUm90YXRpb24gKwog
ICAgICAgICAoZGVzdEJ1ZmZlclJlY3QuVG9wTGVmdCgpIC0gbUJ1ZmZlclJlY3QuVG9wTGVmdCgp
KTsKICAgICAgIFdyYXBSb3RhdGlvbkF4aXMoJm5ld1JvdGF0aW9uLngsIG1CdWZmZXJSZWN0Lndp
ZHRoKTsKICAgICAgIFdyYXBSb3RhdGlvbkF4aXMoJm5ld1JvdGF0aW9uLnksIG1CdWZmZXJSZWN0
LmhlaWdodCk7CiAgICAgICBOU19BU1NFUlRJT04obnNJbnRSZWN0KG5zSW50UG9pbnQoMCwwKSwg
bUJ1ZmZlclJlY3QuU2l6ZSgpKS5Db250YWlucyhuZXdSb3RhdGlvbiksCiAgICAgICAgICAgICAg
ICAgICAgIm5ld1JvdGF0aW9uIG91dCBvZiBib3VuZHMiKTsKICAgICAgIFBSSW50MzIgeEJvdW5k
YXJ5ID0gZGVzdEJ1ZmZlclJlY3QuWE1vc3QoKSAtIG5ld1JvdGF0aW9uLng7CiAgICAgICBQUklu
dDMyIHlCb3VuZGFyeSA9IGRlc3RCdWZmZXJSZWN0LllNb3N0KCkgLSBuZXdSb3RhdGlvbi55Owog
ICAgICAgaWYgKChkcmF3Qm91bmRzLnggPCB4Qm91bmRhcnkgJiYgeEJvdW5kYXJ5IDwgZHJhd0Jv
dW5kcy5YTW9zdCgpKSB8fAotICAgICAgICAgIChkcmF3Qm91bmRzLnkgPCB5Qm91bmRhcnkgJiYg
eUJvdW5kYXJ5IDwgZHJhd0JvdW5kcy5ZTW9zdCgpKSkgeworICAgICAgICAgIChkcmF3Qm91bmRz
LnkgPCB5Qm91bmRhcnkgJiYgeUJvdW5kYXJ5IDwgZHJhd0JvdW5kcy5ZTW9zdCgpKSB8fAorICAg
ICAgICAgIChuZXdSb3RhdGlvbiAhPSBuc0ludFBvaW50KDAsMCkgJiYgIWNhbkhhdmVSb3RhdGlv
bikpIHsKICAgICAgICAgLy8gVGhlIHN0dWZmIHdlIG5lZWQgdG8gcmVkcmF3IHdpbGwgd3JhcCBh
cm91bmQgYW4gZWRnZSBvZiB0aGUKICAgICAgICAgLy8gYnVmZmVyLCBzbyB3ZSB3aWxsIG5lZWQg
dG8gZG8gYSBzZWxmLWNvcHkKICAgICAgICAgLy8gSWYgbUJ1ZmZlclJvdGF0aW9uID09IG5zSW50
UG9pbnQoMCwwKSB3ZSBjb3VsZCBkbyBhIHJlYWwKICAgICAgICAgLy8gc2VsZi1jb3B5IGJ1dCB3
ZSdyZSBub3QgZ29pbmcgdG8gZG8gdGhhdCBpbiBHTCB5ZXQuCiAgICAgICAgIC8vIFdlIGNhbid0
IGRvIGEgcmVhbCBzZWxmLWNvcHkgYmVjYXVzZSB0aGUgYnVmZmVyIGlzIHJvdGF0ZWQuCiAgICAg
ICAgIC8vIFNvIGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBmb3IgdGhlIGRlc3RpbmF0aW9uLgotICAg
ICAgICBkZXN0QnVmZmVyUmVjdCA9IHZpc2libGVCb3VuZHM7Ci0gICAgICAgIGRlc3RCdWZmZXIg
PSBDcmVhdGVDbGFtcE9yUmVwZWF0VGV4dHVyZUltYWdlKGdsKCksIGRlc3RCdWZmZXJEaW1zLCBh
Q29udGVudFR5cGUpOworICAgICAgICBkZXN0QnVmZmVyID0gQ3JlYXRlQ2xhbXBPclJlcGVhdFRl
eHR1cmVJbWFnZShnbCgpLCBkZXN0QnVmZmVyRGltcywgY29udGVudFR5cGUsIGJ1ZmZlckZsYWdz
KTsKICAgICAgICAgREVCVUdfR0xfRVJST1JfQ0hFQ0soZ2woKSk7CiAgICAgICAgIGlmICghZGVz
dEJ1ZmZlcikKICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBpZiAobW9kZSA9PSBM
YXllcjo6U1VSRkFDRV9DT01QT05FTlRfQUxQSEEpIHsKICAgICAgICAgICBkZXN0QnVmZmVyT25X
aGl0ZSA9Ci0gICAgICAgICAgICBDcmVhdGVDbGFtcE9yUmVwZWF0VGV4dHVyZUltYWdlKGdsKCks
IGRlc3RCdWZmZXJEaW1zLCBhQ29udGVudFR5cGUpOworICAgICAgICAgICAgQ3JlYXRlQ2xhbXBP
clJlcGVhdFRleHR1cmVJbWFnZShnbCgpLCBkZXN0QnVmZmVyRGltcywgY29udGVudFR5cGUsIGJ1
ZmZlckZsYWdzKTsKICAgICAgICAgICBERUJVR19HTF9FUlJPUl9DSEVDSyhnbCgpKTsKICAgICAg
ICAgICBpZiAoIWRlc3RCdWZmZXJPbldoaXRlKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKICAgICAgICAgbUJ1ZmZlclJlY3QgPSBkZXN0QnVm
ZmVyUmVjdDsKICAgICAgICAgbUJ1ZmZlclJvdGF0aW9uID0gbmV3Um90YXRpb247CiAgICAgICB9
CkBAIC01MTYsMzAgKzU3NywzMSBAQCBCYXNpY0J1ZmZlck9HTDo6QmVnaW5QYWludChDb250ZW50
VHlwZSBhCiAgICAgICAvLyBObyBwaXhlbHMgYXJlIGdvaW5nIHRvIGJlIGtlcHQuIFRoZSB3aG9s
ZSB2aXNpYmxlIHJlZ2lvbgogICAgICAgLy8gd2lsbCBiZSByZWRyYXduLCBzbyB3ZSBkb24ndCBu
ZWVkIHRvIGNvcHkgYW55dGhpbmcsIHNvIHdlIGRvbid0CiAgICAgICAvLyBzZXQgZGVzdEJ1ZmZl
ci4KICAgICAgIG1CdWZmZXJSZWN0ID0gZGVzdEJ1ZmZlclJlY3Q7CiAgICAgICBtQnVmZmVyUm90
YXRpb24gPSBuc0ludFBvaW50KDAsMCk7CiAgICAgfQogICB9IGVsc2UgewogICAgIC8vIFRoZSBi
dWZmZXIncyBub3QgYmlnIGVub3VnaCwgc28gYWxsb2NhdGUgYSBuZXcgb25lCi0gICAgZGVzdEJ1
ZmZlclJlY3QgPSB2aXNpYmxlQm91bmRzOwotICAgIGRlc3RCdWZmZXIgPSBDcmVhdGVDbGFtcE9y
UmVwZWF0VGV4dHVyZUltYWdlKGdsKCksIGRlc3RCdWZmZXJEaW1zLCBhQ29udGVudFR5cGUpOwor
ICAgIGRlc3RCdWZmZXIgPSBDcmVhdGVDbGFtcE9yUmVwZWF0VGV4dHVyZUltYWdlKGdsKCksIGRl
c3RCdWZmZXJEaW1zLCBjb250ZW50VHlwZSwgYnVmZmVyRmxhZ3MpOwogICAgIERFQlVHX0dMX0VS
Uk9SX0NIRUNLKGdsKCkpOwogICAgIGlmICghZGVzdEJ1ZmZlcikKICAgICAgIHJldHVybiByZXN1
bHQ7CiAKICAgICBpZiAobW9kZSA9PSBMYXllcjo6U1VSRkFDRV9DT01QT05FTlRfQUxQSEEpIHsK
ICAgICAgIGRlc3RCdWZmZXJPbldoaXRlID0gCi0gICAgICAgIENyZWF0ZUNsYW1wT3JSZXBlYXRU
ZXh0dXJlSW1hZ2UoZ2woKSwgZGVzdEJ1ZmZlckRpbXMsIGFDb250ZW50VHlwZSk7CisgICAgICAg
IENyZWF0ZUNsYW1wT3JSZXBlYXRUZXh0dXJlSW1hZ2UoZ2woKSwgZGVzdEJ1ZmZlckRpbXMsIGNv
bnRlbnRUeXBlLCBidWZmZXJGbGFncyk7CiAgICAgICBERUJVR19HTF9FUlJPUl9DSEVDSyhnbCgp
KTsKICAgICAgIGlmICghZGVzdEJ1ZmZlck9uV2hpdGUpCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICB9CisgIE5TX0FTU0VSVElPTighKGFGbGFncyAmIFBBSU5UX1dJTExfUkVTQU1Q
TEUpIHx8IGRlc3RCdWZmZXJSZWN0ID09IG5lZWRlZFJlZ2lvbi5HZXRCb3VuZHMoKSwKKyAgICAg
ICAgICAgICAgICJJZiB3ZSdyZSByZXNhbXBsaW5nLCB3ZSBuZWVkIHRvIHZhbGlkYXRlIHRoZSBl
bnRpcmUgYnVmZmVyIik7CiAKICAgaWYgKCFkZXN0QnVmZmVyICYmICFtVGV4SW1hZ2UpIHsKICAg
ICByZXR1cm4gcmVzdWx0OwogICB9CiAKICAgaWYgKGRlc3RCdWZmZXIpIHsKICAgICBpZiAobVRl
eEltYWdlICYmIChtb2RlICE9IExheWVyOjpTVVJGQUNFX0NPTVBPTkVOVF9BTFBIQSB8fCBtVGV4
SW1hZ2VPbldoaXRlKSkgewogICAgICAgLy8gQmxpdFRleHR1cmVJbWFnZSBkZXBlbmRzIG9uIHRo
ZSBGQk8gdGV4dHVyZSB0YXJnZXQgYmVpbmcKQEAgLTU2MSwzMiArNjIzLDMzIEBAIEJhc2ljQnVm
ZmVyT0dMOjpCZWdpblBhaW50KENvbnRlbnRUeXBlIGEKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0QnVmZmVyLCBkc3RSZWN0KTsKICAgICAgICAgaWYgKG1vZGUgPT0gTGF5ZXI6
OlNVUkZBQ0VfQ09NUE9ORU5UX0FMUEhBKSB7CiAgICAgICAgICAgZGVzdEJ1ZmZlck9uV2hpdGUt
PlJlc2l6ZShzaXplKTsKICAgICAgICAgICBnbCgpLT5CbGl0VGV4dHVyZUltYWdlKG1UZXhJbWFn
ZU9uV2hpdGUsIHNyY1JlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
QnVmZmVyT25XaGl0ZSwgZHN0UmVjdCk7CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgIC8vIGNhbid0IGJsaXQsIGp1c3QgZHJhdyBldmVyeXRoaW5nCi0gICAgICAgIGRlc3RCdWZm
ZXJSZWN0ID0gdmlzaWJsZUJvdW5kczsKLSAgICAgICAgZGVzdEJ1ZmZlciA9IENyZWF0ZUNsYW1w
T3JSZXBlYXRUZXh0dXJlSW1hZ2UoZ2woKSwgZGVzdEJ1ZmZlckRpbXMsIGFDb250ZW50VHlwZSk7
CisgICAgICAgIGRlc3RCdWZmZXIgPSBDcmVhdGVDbGFtcE9yUmVwZWF0VGV4dHVyZUltYWdlKGds
KCksIGRlc3RCdWZmZXJEaW1zLCBjb250ZW50VHlwZSwgYnVmZmVyRmxhZ3MpOwogICAgICAgICBp
ZiAobW9kZSA9PSBMYXllcjo6U1VSRkFDRV9DT01QT05FTlRfQUxQSEEpIHsKICAgICAgICAgICBk
ZXN0QnVmZmVyT25XaGl0ZSA9IAotICAgICAgICAgICAgQ3JlYXRlQ2xhbXBPclJlcGVhdFRleHR1
cmVJbWFnZShnbCgpLCBkZXN0QnVmZmVyRGltcywgYUNvbnRlbnRUeXBlKTsKKyAgICAgICAgICAg
IENyZWF0ZUNsYW1wT3JSZXBlYXRUZXh0dXJlSW1hZ2UoZ2woKSwgZGVzdEJ1ZmZlckRpbXMsIGNv
bnRlbnRUeXBlLCBidWZmZXJGbGFncyk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKICAg
ICBtVGV4SW1hZ2UgPSBkZXN0QnVmZmVyLmZvcmdldCgpOwogICAgIGlmIChtb2RlID09IExheWVy
OjpTVVJGQUNFX0NPTVBPTkVOVF9BTFBIQSkgewogICAgICAgbVRleEltYWdlT25XaGl0ZSA9IGRl
c3RCdWZmZXJPbldoaXRlLmZvcmdldCgpOwogICAgIH0KICAgICBtQnVmZmVyUmVjdCA9IGRlc3RC
dWZmZXJSZWN0OwogICAgIG1CdWZmZXJSb3RhdGlvbiA9IG5zSW50UG9pbnQoMCwwKTsKICAgfQor
ICBOU19BU1NFUlRJT04oY2FuSGF2ZVJvdGF0aW9uIHx8IG1CdWZmZXJSb3RhdGlvbiA9PSBuc0lu
dFBvaW50KDAsMCksCisgICAgICAgICAgICAgICAiUm90YXRpb24gZGlzYWJsZWQsIGJ1dCB3ZSBo
YXZlIG5vbnplcm8gcm90YXRpb24/Iik7CiAKICAgbnNJbnRSZWdpb24gaW52YWxpZGF0ZTsKICAg
aW52YWxpZGF0ZS5TdWIobUxheWVyLT5HZXRWYWxpZFJlZ2lvbigpLCBkZXN0QnVmZmVyUmVjdCk7
CiAgIHJlc3VsdC5tUmVnaW9uVG9JbnZhbGlkYXRlLk9yKHJlc3VsdC5tUmVnaW9uVG9JbnZhbGlk
YXRlLCBpbnZhbGlkYXRlKTsKIAogICAvLyBGaWd1cmUgb3V0IHdoaWNoIHF1YWRyYW50IHRvIGRy
YXcgaW4KICAgUFJJbnQzMiB4Qm91bmRhcnkgPSBtQnVmZmVyUmVjdC5YTW9zdCgpIC0gbUJ1ZmZl
clJvdGF0aW9uLng7CiAgIFBSSW50MzIgeUJvdW5kYXJ5ID0gbUJ1ZmZlclJlY3QuWU1vc3QoKSAt
IG1CdWZmZXJSb3RhdGlvbi55OwpAQCAtNjI2LDE3ICs2ODksMTcgQEAgQmFzaWNCdWZmZXJPR0w6
OkJlZ2luUGFpbnQoQ29udGVudFR5cGUgYQogICAgIC8vIGJlIGluY29ycmVjdC4KICAgICBzdXJm
LT5TZXRBbGxvd1VzZUFzU291cmNlKFBSX0ZBTFNFKTsKICAgICByZXN1bHQubUNvbnRleHQgPSBu
ZXcgZ2Z4Q29udGV4dChzdXJmKTsKICAgfSBlbHNlIHsKICAgICByZXN1bHQubUNvbnRleHQgPSBu
ZXcgZ2Z4Q29udGV4dChtVGV4SW1hZ2UtPkJlZ2luVXBkYXRlKHJlc3VsdC5tUmVnaW9uVG9EcmF3
KSk7CiAgICAgaWYgKG1UZXhJbWFnZS0+R2V0Q29udGVudFR5cGUoKSA9PSBnZnhBU3VyZmFjZTo6
Q09OVEVOVF9DT0xPUl9BTFBIQSkgewogICAgICAgZ2Z4VXRpbHM6OkNsaXBUb1JlZ2lvbihyZXN1
bHQubUNvbnRleHQsIHJlc3VsdC5tUmVnaW9uVG9EcmF3KTsKICAgICAgIHJlc3VsdC5tQ29udGV4
dC0+U2V0T3BlcmF0b3IoZ2Z4Q29udGV4dDo6T1BFUkFUT1JfQ0xFQVIpOwotICAgICAgcmVzdWx0
Lm1Db250ZXh0LT5GaWxsKCk7CisgICAgICByZXN1bHQubUNvbnRleHQtPlBhaW50KCk7CiAgICAg
ICByZXN1bHQubUNvbnRleHQtPlNldE9wZXJhdG9yKGdmeENvbnRleHQ6Ok9QRVJBVE9SX09WRVIp
OwogICAgIH0KICAgfQogICBpZiAoIXJlc3VsdC5tQ29udGV4dCkgewogICAgIE5TX1dBUk5JTkco
InVuYWJsZSB0byBnZXQgY29udGV4dCBmb3IgdXBkYXRlIik7CiAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgfQogICByZXN1bHQubUNvbnRleHQtPlNjYWxlKGFYUmVzb2x1dGlvbiwgYVlSZXNvbHV0aW9u
KTsKQEAgLTcxOSwyNiArNzgyLDM1IEBAIFRoZWJlc0xheWVyT0dMOjpSZW5kZXJMYXllcihpbnQg
YVByZXZpb3UKIAogICBtT0dMTWFuYWdlci0+TWFrZUN1cnJlbnQoKTsKICAgZ2woKS0+ZkFjdGl2
ZVRleHR1cmUoTE9DQUxfR0xfVEVYVFVSRTApOwogCiAgIFRleHR1cmVJbWFnZTo6Q29udGVudFR5
cGUgY29udGVudFR5cGUgPQogICAgIENhblVzZU9wYXF1ZVN1cmZhY2UoKSA/IGdmeEFTdXJmYWNl
OjpDT05URU5UX0NPTE9SIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZnhBU3VyZmFj
ZTo6Q09OVEVOVF9DT0xPUl9BTFBIQTsKIAotICBjb25zdCBnZngzRE1hdHJpeCYgdHJhbnNmb3Jt
ID0gR2V0RWZmZWN0aXZlVHJhbnNmb3JtKCk7CiAgIGdmeE1hdHJpeCB0cmFuc2Zvcm0yZDsKICAg
Z2Z4U2l6ZSBzY2FsZSgxLjAsIDEuMCk7Ci0gIGlmICh0cmFuc2Zvcm0uSXMyRCgmdHJhbnNmb3Jt
MmQpKSB7CisgIGZsb2F0IHBhaW50WFJlcyA9IDEuMDsKKyAgZmxvYXQgcGFpbnRZUmVzID0gMS4w
OworICBQUlVpbnQzMiBmbGFncyA9IDA7CisgIGlmIChHZXRFZmZlY3RpdmVUcmFuc2Zvcm0oKS5J
czJEKCZ0cmFuc2Zvcm0yZCkpIHsKICAgICBzY2FsZSA9IHRyYW5zZm9ybTJkLlNjYWxlRmFjdG9y
cyhQUl9UUlVFKTsKKyAgICBwYWludFhSZXMgPSBnZnhVdGlsczo6Q2xhbXBUb1NjYWxlRmFjdG9y
KHNjYWxlLndpZHRoKTsKKyAgICBwYWludFlSZXMgPSBnZnhVdGlsczo6Q2xhbXBUb1NjYWxlRmFj
dG9yKHNjYWxlLmhlaWdodCk7CisgICAgdHJhbnNmb3JtMmQuU2NhbGUoMS4wL3BhaW50WFJlcywg
MS4wL3BhaW50WVJlcyk7CisgICAgaWYgKHRyYW5zZm9ybTJkLkhhc05vbkludGVnZXJUcmFuc2xh
dGlvbigpKSB7CisgICAgICBmbGFncyB8PSBUaGViZXNMYXllckJ1ZmZlck9HTDo6UEFJTlRfV0lM
TF9SRVNBTVBMRTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZmxhZ3MgfD0gVGhlYmVzTGF5ZXJC
dWZmZXJPR0w6OlBBSU5UX1dJTExfUkVTQU1QTEU7CiAgIH0KLSAgZmxvYXQgcGFpbnRYUmVzID0g
Z2Z4VXRpbHM6OkNsYW1wVG9TY2FsZUZhY3RvcihzY2FsZS53aWR0aCk7Ci0gIGZsb2F0IHBhaW50
WVJlcyA9IGdmeFV0aWxzOjpDbGFtcFRvU2NhbGVGYWN0b3Ioc2NhbGUuaGVpZ2h0KTsKIAotICBC
dWZmZXI6OlBhaW50U3RhdGUgc3RhdGUgPSBtQnVmZmVyLT5CZWdpblBhaW50KGNvbnRlbnRUeXBl
LCBwYWludFhSZXMsIHBhaW50WVJlcyk7CisgIEJ1ZmZlcjo6UGFpbnRTdGF0ZSBzdGF0ZSA9Cisg
ICAgbUJ1ZmZlci0+QmVnaW5QYWludChjb250ZW50VHlwZSwgcGFpbnRYUmVzLCBwYWludFlSZXMs
IGZsYWdzKTsKICAgbVZhbGlkUmVnaW9uLlN1YihtVmFsaWRSZWdpb24sIHN0YXRlLm1SZWdpb25U
b0ludmFsaWRhdGUpOwogCiAgIGlmIChzdGF0ZS5tQ29udGV4dCkgewogICAgIHN0YXRlLm1SZWdp
b25Ub0ludmFsaWRhdGUuQW5kKHN0YXRlLm1SZWdpb25Ub0ludmFsaWRhdGUsIG1WaXNpYmxlUmVn
aW9uKTsKICAgICBtWFJlc29sdXRpb24gPSBwYWludFhSZXM7CiAgICAgbVlSZXNvbHV0aW9uID0g
cGFpbnRZUmVzOwogCiAgICAgTGF5ZXJNYW5hZ2VyOjpEcmF3VGhlYmVzTGF5ZXJDYWxsYmFjayBj
YWxsYmFjayA9CkBAIC03ODMsMjkgKzg1NSwyMiBAQCBUaGViZXNMYXllck9HTDo6SXNFbXB0eSgp
CiAKIGNsYXNzIFNoYWRvd0J1ZmZlck9HTCA6IHB1YmxpYyBUaGViZXNMYXllckJ1ZmZlck9HTAog
ewogcHVibGljOgogICBTaGFkb3dCdWZmZXJPR0woU2hhZG93VGhlYmVzTGF5ZXJPR0wqIGFMYXll
cikKICAgICA6IFRoZWJlc0xheWVyQnVmZmVyT0dMKGFMYXllciwgYUxheWVyKQogICB7fQogCi0g
IHZpcnR1YWwgUGFpbnRTdGF0ZSBCZWdpblBhaW50KENvbnRlbnRUeXBlIGFDb250ZW50VHlwZSwg
ZmxvYXQsIGZsb2F0KSB7CisgIHZpcnR1YWwgUGFpbnRTdGF0ZSBCZWdpblBhaW50KENvbnRlbnRU
eXBlIGFDb250ZW50VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQs
IGZsb2F0LCBQUlVpbnQzMikgewogICAgIE5TX1JVTlRJTUVBQk9SVCgiY2FuJ3QgQmVnaW5QYWlu
dCBmb3IgYSBzaGFkb3cgbGF5ZXIiKTsKICAgICByZXR1cm4gUGFpbnRTdGF0ZSgpOwogICB9CiAK
LSAgdm9pZAotICBDcmVhdGVUZXh0dXJlKENvbnRlbnRUeXBlIGFUeXBlLCBjb25zdCBuc0ludFNp
emUmIGFTaXplKQotICB7Ci0gICAgTlNfQVNTRVJUSU9OKGdmeEFTdXJmYWNlOjpDT05URU5UX0FM
UEhBICE9IGFUeXBlLCJUaGViZXNCdWZmZXIgaGFzIGNvbG9yIik7Ci0KLSAgICBtVGV4SW1hZ2Ug
PSBDcmVhdGVDbGFtcE9yUmVwZWF0VGV4dHVyZUltYWdlKGdsKCksIGFTaXplLCBhVHlwZSk7Ci0g
IH0KLQogICB2b2lkIFVwbG9hZChnZnhBU3VyZmFjZSogYVVwZGF0ZSwgY29uc3QgbnNJbnRSZWdp
b24mIGFVcGRhdGVkLAogICAgICAgICAgICAgICBjb25zdCBuc0ludFJlY3QmIGFSZWN0LCBjb25z
dCBuc0ludFBvaW50JiBhUm90YXRpb24pOwogCiBwcm90ZWN0ZWQ6CiAgIHZpcnR1YWwgbnNJbnRQ
b2ludCBHZXRPcmlnaW5PZmZzZXQoKSB7CiAgICAgcmV0dXJuIG1CdWZmZXJSZWN0LlRvcExlZnQo
KSAtIG1CdWZmZXJSb3RhdGlvbjsKICAgfQogCkBAIC04MTUsMTggKzg4MCwyMCBAQCBwcml2YXRl
OgogfTsKIAogdm9pZAogU2hhZG93QnVmZmVyT0dMOjpVcGxvYWQoZ2Z4QVN1cmZhY2UqIGFVcGRh
dGUsIGNvbnN0IG5zSW50UmVnaW9uJiBhVXBkYXRlZCwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG5zSW50UmVjdCYgYVJlY3QsIGNvbnN0IG5zSW50UG9pbnQmIGFSb3RhdGlvbikKIHsK
ICAgZ2Z4SW50U2l6ZSBzaXplID0gYVVwZGF0ZS0+R2V0U2l6ZSgpOwogICBpZiAoR2V0U2l6ZSgp
ICE9IG5zSW50U2l6ZShzaXplLndpZHRoLCBzaXplLmhlaWdodCkpIHsKLSAgICBDcmVhdGVUZXh0
dXJlKGFVcGRhdGUtPkdldENvbnRlbnRUeXBlKCksCi0gICAgICAgICAgICAgICAgICBuc0ludFNp
emUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpKTsKKyAgICAvLyBYWFggd2Ugc2hvdWxkIGRvIHNv
bWV0aGluZyBoZXJlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHVzZSBSRVBFQVQgb3Igbm90LAorICAg
IC8vIGJ1dCBJJ20gbm90IHN1cmUgd2hhdAorICAgIG1UZXhJbWFnZSA9IENyZWF0ZUNsYW1wT3JS
ZXBlYXRUZXh0dXJlSW1hZ2UoZ2woKSwKKyAgICAgIG5zSW50U2l6ZShzaXplLndpZHRoLCBzaXpl
LmhlaWdodCksIGFVcGRhdGUtPkdldENvbnRlbnRUeXBlKCksIEFMTE9XX1JFUEVBVCk7CiAgIH0K
IAogICBuc0ludFJlZ2lvbiBkZXN0UmVnaW9uKGFVcGRhdGVkKTsKICAgLy8gYVVwZGF0ZWQgaXMg
aW4gc2NyZWVuIGNvb3JkaW5hdGVzLiAgTW92ZSBpdCBzbyB0aGF0IHRoZSBsYXllcidzCiAgIC8v
IHRvcC1sZWZ0IGlzIDAsMAogICBuc0ludFBvaW50IHZpc1RvcExlZnQgPSBtTGF5ZXItPkdldFZp
c2libGVSZWdpb24oKS5HZXRCb3VuZHMoKS5Ub3BMZWZ0KCk7CiAgIGRlc3RSZWdpb24uTW92ZUJ5
KC12aXNUb3BMZWZ0KTsKIAo=
</data>
<flag name="review"
          id="431114"
          type_id="937"
          status="+"
          setter="matt.woodrow"
    />
    <flag name="approval2.0"
          id="431533"
          type_id="647"
          status="-"
          setter="mbeltzner"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>522336</attachid>
            <date>2011-03-28 05:05:33 -0700</date>
            <delta_ts>2011-03-28 06:36:06 -0700</delta_ts>
            <desc>draw layer in a single quad when resampling</desc>
            <filename>bug635373-full</filename>
            <type>text/plain</type>
            <size>6853</size>
            <attacher>roc</attacher>
            
              <data encoding="base64">RnJvbTogUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYmVydEBvY2FsbGFoYW4ub3JnPgpCdWcgNjM1Mzcz
LiBXaGVuIHJlc2FtcGxpbmcgYSBUaGViZXNMYXllciwgZW5zdXJlIHRoYXQgRDNEOSBhbmQgT3Bl
bkdMIGxheWVycyBwYWludCB0aGUgZW50aXJlIGxheWVyIGFzIG9uZSBxdWFkIHRvIGF2b2lkIHVu
bmVjZXNzYXJ5IGFsaWFzaW5nLiByPWJhcwoKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNkOS9U
aGViZXNMYXllckQzRDkuY3BwIGIvZ2Z4L2xheWVycy9kM2Q5L1RoZWJlc0xheWVyRDNEOS5jcHAK
LS0tIGEvZ2Z4L2xheWVycy9kM2Q5L1RoZWJlc0xheWVyRDNEOS5jcHAKKysrIGIvZ2Z4L2xheWVy
cy9kM2Q5L1RoZWJlc0xheWVyRDNEOS5jcHAKQEAgLTE3MiwxOSArMTcyLDE5IEBAIFRoZWJlc0xh
eWVyRDNEOTo6VXBkYXRlVGV4dHVyZXMoU3VyZmFjZU0KICAgICBDcmVhdGVOZXdUZXh0dXJlcyhn
ZnhJbnRTaXplKHZpc2libGVSZWN0LndpZHRoLCB2aXNpYmxlUmVjdC5oZWlnaHQpLCBhTW9kZSk7
CiAgICAgbVRleHR1cmVSZWN0ID0gdmlzaWJsZVJlY3Q7CiAgICAgCiAgICAgTlNfQVNTRVJUSU9O
KG1WYWxpZFJlZ2lvbi5Jc0VtcHR5KCksICJTb21lb25lIGZvcmdvdCB0byBlbXB0eSB0aGUgcmVn
aW9uIik7CiAgIH0KIH0KIAogdm9pZAotVGhlYmVzTGF5ZXJEM0Q5OjpSZW5kZXJWaXNpYmxlUmVn
aW9uKCkKK1RoZWJlc0xheWVyRDNEOTo6UmVuZGVyUmVnaW9uKGNvbnN0IG5zSW50UmVnaW9uJiBh
UmVnaW9uKQogewotICBuc0ludFJlZ2lvblJlY3RJdGVyYXRvciBpdGVyKG1WaXNpYmxlUmVnaW9u
KTsKKyAgbnNJbnRSZWdpb25SZWN0SXRlcmF0b3IgaXRlcihhUmVnaW9uKTsKIAogICBjb25zdCBu
c0ludFJlY3QgKml0ZXJSZWN0OwogICB3aGlsZSAoKGl0ZXJSZWN0ID0gaXRlci5OZXh0KCkpKSB7
CiAgICAgZGV2aWNlKCktPlNldFZlcnRleFNoYWRlckNvbnN0YW50RihDQnZMYXllclF1YWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJDb25zdGFudFJlY3Qo
aXRlclJlY3QtPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXRlclJlY3QtPnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlclJlY3QtPndpZHRoLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJSZWN0
LT5oZWlnaHQpLApAQCAtMjc0LDMxICsyNzQsMzEgQEAgVGhlYmVzTGF5ZXJEM0Q5OjpSZW5kZXJU
aGViZXNMYXllcihSZWFkYgogICBTZXRTaGFkZXJUcmFuc2Zvcm1BbmRPcGFjaXR5KCk7CiAKICAg
aWYgKG1vZGUgPT0gU1VSRkFDRV9DT01QT05FTlRfQUxQSEEpIHsKICAgICBtRDNETWFuYWdlci0+
U2V0U2hhZGVyTW9kZShEZXZpY2VNYW5hZ2VyRDNEOTo6Q09NUE9ORU5UTEFZRVJQQVNTMSk7CiAg
ICAgZGV2aWNlKCktPlNldFRleHR1cmUoMCwgbVRleHR1cmUpOwogICAgIGRldmljZSgpLT5TZXRU
ZXh0dXJlKDEsIG1UZXh0dXJlT25XaGl0ZSk7CiAgICAgZGV2aWNlKCktPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NSQ0JMRU5ELCBEM0RCTEVORF9aRVJPKTsKICAgICBkZXZpY2UoKS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfREVTVEJMRU5ELCBEM0RCTEVORF9JTlZTUkNDT0xPUik7Ci0gICAgUmVuZGVy
VmlzaWJsZVJlZ2lvbigpOworICAgIFJlbmRlclJlZ2lvbihuZWVkZWRSZWdpb24pOwogCiAgICAg
bUQzRE1hbmFnZXItPlNldFNoYWRlck1vZGUoRGV2aWNlTWFuYWdlckQzRDk6OkNPTVBPTkVOVExB
WUVSUEFTUzIpOwogICAgIGRldmljZSgpLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TUkNCTEVORCwg
RDNEQkxFTkRfT05FKTsKICAgICBkZXZpY2UoKS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfREVTVEJM
RU5ELCBEM0RCTEVORF9PTkUpOwotICAgIFJlbmRlclZpc2libGVSZWdpb24oKTsKKyAgICBSZW5k
ZXJSZWdpb24obmVlZGVkUmVnaW9uKTsKIAogICAgIC8vIFJlc3RvcmUgZGVmYXVsdHMKICAgICBk
ZXZpY2UoKS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JDQkxFTkQsIEQzREJMRU5EX09ORSk7CiAg
ICAgZGV2aWNlKCktPlNldFJlbmRlclN0YXRlKEQzRFJTX0RFU1RCTEVORCwgRDNEQkxFTkRfSU5W
U1JDQUxQSEEpOwogICAgIGRldmljZSgpLT5TZXRUZXh0dXJlKDEsIE5VTEwpOwogICB9IGVsc2Ug
ewogICAgIG1EM0RNYW5hZ2VyLT5TZXRTaGFkZXJNb2RlKERldmljZU1hbmFnZXJEM0Q5OjpSR0JB
TEFZRVIpOwogICAgIGRldmljZSgpLT5TZXRUZXh0dXJlKDAsIG1UZXh0dXJlKTsKLSAgICBSZW5k
ZXJWaXNpYmxlUmVnaW9uKCk7CisgICAgUmVuZGVyUmVnaW9uKG5lZWRlZFJlZ2lvbik7CiAgIH0K
IAogICAvLyBTZXQgYmFjayB0byBkZWZhdWx0LgogICBkZXZpY2UoKS0+U2V0VmVydGV4U2hhZGVy
Q29uc3RhbnRGKENCdlRleHR1cmVDb29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2hhZGVyQ29uc3RhbnRSZWN0KDAsIDAsIDEuMGYsIDEuMGYpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOwogfQogCmRpZmYgLS1naXQgYS9nZngvbGF5
ZXJzL2QzZDkvVGhlYmVzTGF5ZXJEM0Q5LmggYi9nZngvbGF5ZXJzL2QzZDkvVGhlYmVzTGF5ZXJE
M0Q5LmgKLS0tIGEvZ2Z4L2xheWVycy9kM2Q5L1RoZWJlc0xheWVyRDNEOS5oCisrKyBiL2dmeC9s
YXllcnMvZDNkOS9UaGViZXNMYXllckQzRDkuaApAQCAtOTMsMTcgKzkzLDE3IEBAIHByaXZhdGU6
CiAgICAqIHRvIG1WaXNpYmxlUmVnaW9uLkdldEJvdW5kcygpLiBUaGlzIGNyZWF0ZXMgbmV3IHRl
eHR1cmUgb2JqZWN0cyBhcwogICAgKiBuZWNlc3NhcnkgYW5kIGFsc28gY29waWVzIGV4aXN0aW5n
IHZhbGlkIHRleHR1cmUgZGF0YSBpZiBuZWNlc3NhcnkuCiAgICAqLwogICB2b2lkIFVwZGF0ZVRl
eHR1cmVzKFN1cmZhY2VNb2RlIGFNb2RlKTsKIAogICAvKiBSZW5kZXIgdGhlIHJlY3RhbmdsZXMg
b2YgbVZpc2libGVSZWdpb24gd2l0aCBEM0Q5IHVzaW5nIHRoZSBjdXJyZW50bHkKICAgICogYm91
bmQgdGV4dHVyZXMsIHRhcmdldCwgc2hhZGVycywgZXRjLgogICAgKi8KLSAgdm9pZCBSZW5kZXJW
aXNpYmxlUmVnaW9uKCk7CisgIHZvaWQgUmVuZGVyUmVnaW9uKGNvbnN0IG5zSW50UmVnaW9uJiBh
UmVnaW9uKTsKIAogICAvKiBIYXZlIGEgcmVnaW9uIG9mIG91ciBsYXllciBkcmF3biAqLwogICB2
b2lkIERyYXdSZWdpb24obnNJbnRSZWdpb24gJmFSZWdpb24sIFN1cmZhY2VNb2RlIGFNb2RlLAog
ICAgICAgICAgICAgICAgICAgY29uc3QgbnNUQXJyYXk8UmVhZGJhY2tQcm9jZXNzb3I6OlVwZGF0
ZT4mIGFSZWFkYmFja1VwZGF0ZXMpOwogCiAgIC8qIENyZWF0ZSBhIG5ldyB0ZXh0dXJlICovCiAg
IHZvaWQgQ3JlYXRlTmV3VGV4dHVyZXMoY29uc3QgZ2Z4SW50U2l6ZSAmYVNpemUsIFN1cmZhY2VN
b2RlIGFNb2RlKTsKIApkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9vcGVuZ2wvVGhlYmVzTGF5ZXJP
R0wuY3BwIGIvZ2Z4L2xheWVycy9vcGVuZ2wvVGhlYmVzTGF5ZXJPR0wuY3BwCi0tLSBhL2dmeC9s
YXllcnMvb3BlbmdsL1RoZWJlc0xheWVyT0dMLmNwcAorKysgYi9nZngvbGF5ZXJzL29wZW5nbC9U
aGViZXNMYXllck9HTC5jcHAKQEAgLTE3MCwxNyArMTcwLDE4IEBAIHB1YmxpYzoKICAgdmlydHVh
bCB+VGhlYmVzTGF5ZXJCdWZmZXJPR0woKSB7fQogCiAgIGVudW0geyBQQUlOVF9XSUxMX1JFU0FN
UExFID0gVGhlYmVzTGF5ZXJCdWZmZXI6OlBBSU5UX1dJTExfUkVTQU1QTEUgfTsKICAgdmlydHVh
bCBQYWludFN0YXRlIEJlZ2luUGFpbnQoQ29udGVudFR5cGUgYUNvbnRlbnRUeXBlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhWFJlc29sdXRpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFZUmVzb2x1dGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzKSA9IDA7CiAKLSAgdm9pZCBSZW5kZXJU
byhjb25zdCBuc0ludFBvaW50JiBhT2Zmc2V0LCBMYXllck1hbmFnZXJPR0wqIGFNYW5hZ2VyKTsK
KyAgdm9pZCBSZW5kZXJUbyhjb25zdCBuc0ludFBvaW50JiBhT2Zmc2V0LCBMYXllck1hbmFnZXJP
R0wqIGFNYW5hZ2VyLAorICAgICAgICAgICAgICAgIFBSVWludDMyIGFGbGFncyk7CiAKICAgbnNJ
bnRTaXplIEdldFNpemUoKSB7CiAgICAgaWYgKG1UZXhJbWFnZSkKICAgICAgIHJldHVybiBtVGV4
SW1hZ2UtPkdldFNpemUoKTsKICAgICByZXR1cm4gbnNJbnRTaXplKDAsIDApOwogICB9CiAKIHBy
b3RlY3RlZDoKQEAgLTE5MSwxNyArMTkyLDE4IEBAIHByb3RlY3RlZDoKICAgVGhlYmVzTGF5ZXIq
IG1MYXllcjsKICAgTGF5ZXJPR0wqIG1PR0xMYXllcjsKICAgbnNSZWZQdHI8VGV4dHVyZUltYWdl
PiBtVGV4SW1hZ2U7CiAgIG5zUmVmUHRyPFRleHR1cmVJbWFnZT4gbVRleEltYWdlT25XaGl0ZTsK
IH07CiAKIHZvaWQKIFRoZWJlc0xheWVyQnVmZmVyT0dMOjpSZW5kZXJUbyhjb25zdCBuc0ludFBv
aW50JiBhT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWVyTWFuYWdl
ck9HTCogYU1hbmFnZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXJNYW5h
Z2VyT0dMKiBhTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQz
MiBhRmxhZ3MpCiB7CiAgIGlmICghbVRleEltYWdlKQogICAgIHJldHVybjsKIAogICBpZiAobVRl
eEltYWdlLT5JblVwZGF0ZSgpKSB7CiAgICAgbVRleEltYWdlLT5FbmRVcGRhdGUoKTsKICAgfQog
CkBAIC0yNTUsMTcgKzI1NywyMiBAQCBUaGViZXNMYXllckJ1ZmZlck9HTDo6UmVuZGVyVG8oY29u
c3QgbnNJCiAgICAgICBiYXNpY1Byb2dyYW0tPlNldFRleHR1cmVVbml0KDApOwogICAgICAgcHJv
Z3JhbSA9IGJhc2ljUHJvZ3JhbTsKICAgICB9CiAKICAgICBwcm9ncmFtLT5TZXRMYXllck9wYWNp
dHkobUxheWVyLT5HZXRFZmZlY3RpdmVPcGFjaXR5KCkpOwogICAgIHByb2dyYW0tPlNldExheWVy
VHJhbnNmb3JtKG1MYXllci0+R2V0RWZmZWN0aXZlVHJhbnNmb3JtKCkpOwogICAgIHByb2dyYW0t
PlNldFJlbmRlck9mZnNldChhT2Zmc2V0KTsKIAotICAgIG5zSW50UmVnaW9uUmVjdEl0ZXJhdG9y
IGl0ZXIobUxheWVyLT5HZXRFZmZlY3RpdmVWaXNpYmxlUmVnaW9uKCkpOworICAgIGNvbnN0IG5z
SW50UmVnaW9uJiB2aXNpYmxlUmVnaW9uID0gbUxheWVyLT5HZXRFZmZlY3RpdmVWaXNpYmxlUmVn
aW9uKCk7CisgICAgLy8gSWYgd2UncmUgcmVzYW1wbGluZywgdGhlbiB0aGUgdGV4dHVyZSBpbWFn
ZSB3aWxsIGNvbnRhaW4gZXhhY3RseSB0aGUKKyAgICAvLyBlbnRpcmUgdmlzaWJsZSByZWdpb24n
cyBib3VuZHMsIGFuZCB3ZSBzaG91bGQgZHJhdyBpdCBhbGwgaW4gb25lIHF1YWQKKyAgICAvLyB0
byBhdm9pZCB1bmV4cGVjdGVkIGFsaWFzaW5nLgorICAgIG5zSW50UmVnaW9uUmVjdEl0ZXJhdG9y
IGl0ZXIoCisgICAgICAgIChhRmxhZ3MgJiBQQUlOVF9XSUxMX1JFU0FNUExFKSA/IG5zSW50UmVn
aW9uKHZpc2libGVSZWdpb24uR2V0Qm91bmRzKCkpIDogdmlzaWJsZVJlZ2lvbik7CiAgICAgd2hp
bGUgKGNvbnN0IG5zSW50UmVjdCAqaXRlclJlY3QgPSBpdGVyLk5leHQoKSkgewogICAgICAgbnNJ
bnRSZWN0IHF1YWRSZWN0ID0gKml0ZXJSZWN0OwogICAgICAgcHJvZ3JhbS0+U2V0TGF5ZXJRdWFk
UmVjdChxdWFkUmVjdCk7CiAKICAgICAgIHF1YWRSZWN0Lk1vdmVCeSgtR2V0T3JpZ2luT2Zmc2V0
KCkpOwogCiAgICAgICAvLyBUaGUgYnVmZmVyIHJlY3QgYW5kIHJvdGF0aW9uIGFyZSByZXNvbHV0
aW9uLW5ldXRyYWw7IHdpdGggYQogICAgICAgLy8gbm9uLTEuMCByZXNvbHV0aW9uLCBvbmx5IHRo
ZSB0ZXh0dXJlIHNpemUgaXMgc2NhbGVkIGJ5IHRoZQpAQCAtODMwLDE3ICs4MzcsMTcgQEAgVGhl
YmVzTGF5ZXJPR0w6OlJlbmRlckxheWVyKGludCBhUHJldmlvdQogICAgICAgbVZhbGlkUmVnaW9u
Lk9yKG1WYWxpZFJlZ2lvbiwgdG1wKTsKICAgICB9CiAgIH0KIAogICAvLyBEcmF3aW5nIHRoZWJl
cyBsYXllcnMgY2FuIGNoYW5nZSB0aGUgY3VycmVudCBjb250ZXh0LCByZXNldCBpdC4KICAgZ2wo
KS0+TWFrZUN1cnJlbnQoKTsKIAogICBnbCgpLT5mQmluZEZyYW1lYnVmZmVyKExPQ0FMX0dMX0ZS
QU1FQlVGRkVSLCBhUHJldmlvdXNGcmFtZUJ1ZmZlcik7Ci0gIG1CdWZmZXItPlJlbmRlclRvKGFP
ZmZzZXQsIG1PR0xNYW5hZ2VyKTsKKyAgbUJ1ZmZlci0+UmVuZGVyVG8oYU9mZnNldCwgbU9HTE1h
bmFnZXIsIGZsYWdzKTsKIH0KIAogTGF5ZXIqCiBUaGViZXNMYXllck9HTDo6R2V0TGF5ZXIoKQog
ewogICByZXR1cm4gdGhpczsKIH0KIApAQCAtMTAxMiwxNiArMTAxOSwxNiBAQCBTaGFkb3dUaGVi
ZXNMYXllck9HTDo6UmVuZGVyTGF5ZXIoaW50IGFQCiAgICAgcmV0dXJuOwogICB9CiAgIE5TX0FC
T1JUX0lGX0ZBTFNFKG1CdWZmZXIsICJzaG91bGQgaGF2ZSBhIGJ1ZmZlciBoZXJlIik7CiAKICAg
bU9HTE1hbmFnZXItPk1ha2VDdXJyZW50KCk7CiAgIGdsKCktPmZBY3RpdmVUZXh0dXJlKExPQ0FM
X0dMX1RFWFRVUkUwKTsKIAogICBnbCgpLT5mQmluZEZyYW1lYnVmZmVyKExPQ0FMX0dMX0ZSQU1F
QlVGRkVSLCBhUHJldmlvdXNGcmFtZUJ1ZmZlcik7Ci0gIG1CdWZmZXItPlJlbmRlclRvKGFPZmZz
ZXQsIG1PR0xNYW5hZ2VyKTsKKyAgbUJ1ZmZlci0+UmVuZGVyVG8oYU9mZnNldCwgbU9HTE1hbmFn
ZXIsIDApOwogfQogCiAjZW5kaWYgIC8vIE1PWl9JUEMKIAogCiB9IC8qIGxheWVycyAqLwogfSAv
KiBtb3ppbGxhICovCg==
</data>
<flag name="review"
          id="436586"
          type_id="937"
          status="+"
          setter="bas"
    />
          </attachment>


    </bug>

</bugzilla>