REKLAMA

BrightSign HD920A.rar

BrightSign HD920A - Jak wykorzystać jako serwer filmów lub urządzenie multimedialne?

Witam Dostałem w formie złomu od kolegi pracującego za granicą urządzenie jak w temacie Czy macie pomysł na wykorzystanie go jako jakiś serwer filmów czy inne cudo multimedialne do TV Używane prawdopodobnie przy kioskach reklamowych. Na stronie producenta nie mogę doszukać się zbyt wiele informacji W załączniku opis z ebay`a


Pobierz plik - link do postu
  • BrightSign HD920A.rar
    • BrightSign HD920A Digital Signage Player Retail Display HDMI Solid State Media _ eBay.html
    • BrightSign HD920A Digital Signage Player Retail Display HDMI Solid State Media _ eBay_files
      • saved_resource(4).html
      • s-l200(3).jpg
      • gpt.js.pobrane
      • saved_resource(1).html
      • s-l200.jpg
      • nttd1clkxq43xgfxcqzezssfxuc.js.pobrane
      • m0ejmomyyy42zpxgl2ydv321ji1.js.pobrane
      • s-l64(1).jpg
      • tx1tpj3cwuys1a0xmzaqnxnmm2u.js.pobrane
      • gleeizhr1e2edih4gvb0ummik2q.css
      • s-l64.jpg
      • qyekahrh522cffjhura2sdontuk.css
      • btt.png
      • eBay-postHoliday-clearance-small.jpg
      • ug5swannj2zhramycvq3mi4mwih.js.pobrane
      • z3ww5Qsy1PheaKo-Cv2QcQG8Qjxfbz0d9LH5OG7p13M.js.pobrane
      • s.gif
      • async-ads.js.pobrane
      • templates-css-83478b.css
      • s-l64(4).jpg
      • logoPaypalCredit_104x16.png
      • logoPayPal_51x14.png
      • dest5.html
      • imgECheck.gif
      • BTF.html
      • s-l200(4).jpg
      • CC_icons.png
      • saved_resource(5).html
      • satelliteLib-4015f254cd3c11b97219ce6c8b668b778bd61dfa.js.pobrane
      • FinancingAdPlacementLogo.gif
      • s-l200(1).jpg
      • MPU.html
      • saved_resource(3).html
      • s-l200(2).jpg
      • ads.html
      • s(1).gif
      • s(2).gif
      • logoPaypalCreditv2_157x55.png
      • fxxj3ttftm5ltcqnto1o4baovyl.png
      • 711-13271-9788-0
      • ttywvbgtn2zele04cgc3lus4huo.css
      • iconImgNA_96x96.gif
      • collect-widget-init-v1-042915.js.pobrane
      • 17001.html
      • s-l64(3).jpg
      • s-l200(5).jpg
      • async-ads.js(1).pobrane
      • djqvmfbe422cni10y0mpu22ciqa.js.pobrane
      • eBayISAPI.html
      • saved_resource.html
      • saved_resource(2).html
      • s-l64(2).jpg
      • s-l500.jpg


BrightSign HD920A.rar > 17001.html

function bk_clear(id){try{document.getElementById(id).innerHTML=''}catch(e){}} setTimeout( " bk_clear('bk_pl_1') " ,2250); setTimeout( " bk_clear('bk_pl_1237') " ,2000); setTimeout( " bk_clear('bk_pl_1326') " ,2001); setTimeout( " bk_clear('bk_pl_1855') " ,2200); setTimeout( " bk_clear('bk_pl_2178') " ,2002); setTimeout( " bk_clear('bk_pl_3200') " ,2003); setTimeout( " bk_clear('bk_pl_3307') " ,2004); setTimeout( " bk_clear('bk_pl_5835') " ,3000);


BrightSign HD920A.rar > dest5.html

Adobe AudienceManager
var Demdex={version: " 5.1 " ,dest: " 5 " ,PROTOCOL: " https: " ==document.location.protocol? " https: " : " http: " ,COOKIE_DOMAIN:function(){var a=document.domain;/demdex\.net$/i.test(a) & & (a= " .demdex.net " );return a}(),SIX_MONTHS_IN_MINUTES:259200,errorReportingEnabled:!1,sent:[],errored:[],dpids:null,cbmacros:[ " %timestamp% " , " %rnd% " , " %did% " , " %http_proto% " ],validators:{isPopulatedString:function(a){return " string " ==typeof a & & a.length}},addListener:function(){if(document.addEventListener)return function(a,d,b){a.addEventListener(d,
function(a){ " function " ==typeof b & & b(a)},!1)};if(document.attachEvent)return function(a,d,b){a.attachEvent( " on " +d,function(a){ " function " ==typeof b & & b(a)})}}(),replaceMacro:function(a){var d;if( " %rnd% " ==a|| " %timestamp% " ==a)return " " +(new Date).getTime();if( " %did% " ==a){if(this.dpids===Object(this.dpids) & & this.validators.isPopulatedString(this.dpids.uuid))return this.dpids.uuid;if(d=this.getCookie( " demdex " ))return d.replace(/==/g, " " ).replace(/:/, " - " )}return " %http_proto% " ==a? " https: " ==document.location.protocol?
" https " : " http " :a},canSetCookie:function(){var a,d;return navigator.cookieEnabled & & (a=this.getCookie( " demdex " ),a||(this.setCookie( " _dp " , " 1 " ,1, " / " ,this.COOKIE_DOMAIN,!1),d=this.getCookie( " _dp " )),a||d)?(this.setCookie( " _dp " , " 1 " ,-1E3, " / " ,this.COOKIE_DOMAIN,!1),!0):!1},getCookie:function(a){a+= " = " ;var d=document.cookie.split( " ; " ),b,c,f;b=0;for(c=d.length;b


BrightSign HD920A.rar > BrightSign HD920A Digital Signage Player Retail Display HDMI Solid State Media _ eBay.html

body #Body .btn, body #Body c-std {
filter:none;
-ms-filter: " progid:DXImageTransform.Microsoft.gradient(startColorstr='#0079bc',endColorstr='#00509d') " ;
}





BrightSign HD920A Digital Signage Player Retail Display HDMI Solid State Media | eBay





body .is.vi-ppc-main .mm-dp {
width:35%;
}

#vi-snippet-description-main.u-padB20 {
padding-top:10px;
float:left;
}

.vi-descsnpt-feedbacklnk {
position: relative;
top: -20px;
width: 500px;
margin-left: 250px;
}

.asqMain {
clear:both;
}

div#bsi-c {
clear: both;
}
.vi-pco-bboxtxt-Ins * {
font-weight: normal !important;
color: #0654ba !important;
}
div.addonyes{ background: url('http://ir.ebaystatic.com/cr/v/c1/addonwrty.png') no-repeat 0 -54px; background-size: 16px; }
div.addonno{ background: url('http://ir.ebaystatic.com/cr/v/c1/addonwrty.png') no-repeat 0 -72px; background-size: 16px; }
html a:link{
color: #0654ba;
}
ul#bc a:link{
color: #0654ba;
}
.mbg a:link{
color: #0654ba !important;
}
.mbg-l a:link{
color: #0654ba !important;
}
#Body .nav-tabs-m a:link{
color: #0654ba;
}

.colw-tooltip {background: none repeat scroll 0 0 #ffffff;border: 1px solid #dddddd;border-radius: 3px 3px 3px 3px;box-shadow: 6px 6px 10px rgba(0, 0, 0, 0.35);font-size: 13px;padding: 20px;position: absolute;top: 36px;width: 340px;line-height: 17px;z-index:999;color:#333333;margin-top: 5px;font-family: arial;}.clnw-icn .colw-tooltip {top: 42px;}.clnw-lk .colw-tooltip {top: 22px;}.colw-tooltip:before {border-bottom: 7px solid #ffffff;border-left: 7px solid transparent;border-right: 7px solid transparent;border-color: #dddddd transparent;content: " " ;display: inline-block;left: 10px;position: absolute;top: -7px;}.colw-tooltip:after {border-bottom: 6px solid #ffffff;border-left: 6px solid transparent;border-right: 6px solid transparent;content: " " ;display: inline-block;left: 11px;position: absolute;top: -6px;}.colw-tooltip.tor:before {left: 92%;}.colw-tooltip.tor:after {left: 92.5%;}











.gh-hide-if-nocss{display:none;}.gh-ar-hdn{color:#fff} Skip to main content eBay eBay Shop by category Collectibles & amp; art Collectibles Coins & amp; paper money Antiques Sports memorabilia Electronics Computers & amp; tablets Cameras & amp; photo TV, audio & amp; surveillance Cell phones & amp; accessories Entertainment memorabilia Video games & amp; consoles Music DVDs & amp; movies Tickets & amp; experiences Fashion Women Men Watches Shoes Home & amp; garden Yard, garden & amp; outdoor Crafts Home improvement Pet supplies Motors Parts & amp; accessories Cars & amp; trucks Motorcycles Passenger vehicles Sporting goods Outdoor sports Team sports Exercise & amp; fitness Golf Toys & amp; hobbies Vintage & amp; antique toys Kids toys Action figures Dolls & amp; bears Other categories Books Health & amp; beauty Musical instruments & amp; gear Business & amp; industrial Explore trending collections See all categories Enter your search keyword All Categories Antiques Art Baby Books Business & amp; Industrial Cameras & amp; Photo Cell Phones & amp; Accessories Clothing, Shoes & amp; Accessories Coins & amp; Paper Money Collectibles Computers/Tablets & amp; Networking Consumer Electronics Crafts Dolls & amp; Bears DVDs & amp; Movies eBay Motors Entertainment Memorabilia Gift Cards & amp; Coupons Health & amp; Beauty Home & amp; Garden Jewelry & amp; Watches Music Musical Instruments & amp; Gear Pet Supplies Pottery & amp; Glass Real Estate Specialty Services Sporting Goods Sports Mem, Cards & amp; Fan Shop Stamps Tickets & amp; Experiences Toys & amp; Hobbies Travel Video Games & amp; Consoles Everything Else Advanced Hi! Sign in & nbsp; or register Daily Deals Gift Cards Sell Help & amp; Contact My eBay Expand My eBay Summary Bids/Offers Watch list Wish list All lists Purchase history Selling My Collections Followed searches Messages Notification













& nbsp;



Back to home page

|



| Listed in category: & nbsp;






Business & amp; Industrial
& gt;
Retail & amp; Services
& gt;
Other Retail & amp; Services






Consumer Electronics
& gt;
TV, Video & amp; Home Audio
& gt;
Internet & amp; Media Streamers















/* PicturePanel */
#PicturePanel div.img {
border:1px solid #ccc;
background-color:white;
}
/* BuyBox */
.actPanel {
border-top:1px solid #ccc;
border-left:1px solid #ccc;
border-right:1px solid #ccc;
}
.watchListCmp {
border-bottom:1px solid #ccc;
border-left:1px solid #ccc;
border-right:1px solid #ccc;
}




































Picture Information






var sPT = new Date().getTime(),picTimer,picTimer1,picTimer2;


-- & gt;


-- & gt;





Mouse over to Zoom - Click to enlarge






Image not available
Photos not available for this variation
& lt;style type= " text/css " & gt;.vi-hide-mImgThr {display: none;} & lt;/style & gt; & lt;img id= " icImg " class= " img img500 " itemprop= " image " src= " http://i.ebayimg.com/images/g/ssEAAOSwWntXNJjY/s-l500.jpg " style= " " clk= " " alt= " BrightSign-HD920A-Digital-Signage-Player-Retail-Display-HDMI-Solid-State-Media " / & gt;

function picOnLoad(isSetClkId){
var elem = document.getElementById('icThrImg');
var pic = document.getElementById('icImg');
elem.style.display = 'none';
pic.style.display = '';
if(isSetClkId) {
pic.setAttribute('clk', elem.getAttribute('imgsel'));
}
document.getElementById('imgNATxt').style.display = 'none';
document.getElementById('mainImgHldr').style.backgroundImage = 'none';
return;
}
function picOnError(){
var elemThr = document.getElementById('icThrImg');
var pic = document.getElementById('icImg');
elemThr.src='http://p.ebaystatic.com/aw/pics/cmp/icn/iconImgNA_96x96.gif';
elemThr.style.display = '';
pic.style.display = 'none';
pic.setAttribute('clk', elemThr.getAttribute('imgsel'));
document.getElementById('imgNATxt').style.display = 'block';
document.getElementById('mainImgHldr').style.backgroundImage = 'none';
return;
}
var image = document.createElement('img');
image.src= 'http://i.ebayimg.com/images/g/ssEAAOSwWntXNJjY/s-l500.jpg';
if(image.complete || image.readyState === 4){
picTimer2=new Date().getTime();
picOnLoad(true);
}else{
image.onload = function(){
picTimer1=new Date().getTime();
picOnLoad(true);
};
image.onerror = function(){
picOnError();
};
}
image.onerror = function(){
picOnError();
};

var backgroundImgTest = 'false';
if (backgroundImgTest === 'true') {
var bigImage = document.createElement('img');
bigImage.src = '';
}
















X























































































































































































Have one to sell?




Sell now









Details about & nbsp; BrightSign HD920A Digital Signage Player Retail Display HDMI Solid State Media




BrightSign HD920A Digital Signage Player Retail Display HDMI Solid State Media







Email to friends
Share on Facebook - opens in a new window or tab
Share on Twitter - opens in a new window or tab
Share on Pinterest - opens in a new window or tab






|

Add to watch list













Seller information


bargainsandrepair

( 1574
)

99.4% & nbsp;Positive feedback








Follow this seller





Visit store: Bargains and Repair


See other items


More...
See all



bargainsandrepair has no other items for sale.












Item Information




Item condition:
Used





“ Excellent condition. Comes with power strips. ”








Quantity:













4 available









Please enter a quantity of $qty_dummy$ or less
Please enter a quantity of 1
Purchases are limited to $qty_dummy$ per buyer
Please enter quantity of 1 or more
Please enter a lower number
Choose quantity that is less than $qty_dummy1$ or equal to $qty_dummy$
You can only choose quantity that is equal to $qty_dummy$











Price:


US $100.00










Buy It Now




& nbsp;
& nbsp;


Add to cart






Best Offer:
& nbsp;


Make Offer





Loading...
Resume making your offer , if the page does not update immediately.









& nbsp;


1 watching





Add to watch list
Remove from watch list





Watch list is full







Add to collection







Longtime member
Best offer available








Shipping:



Does not ship to Poland
|

See details


function getElementsByClassName(e,t){var n=[];var r=new RegExp( " (^| ) " +t+ " ( |$) " );var i=e.getElementsByTagName( " * " );for(var s=0,o=i.length;s

var shElemntArry = getElementsByClassName(document.body,'sh-CostBB');for(var i = shElemntArry.length - 1; i & gt; = 0; --i){shElemntArry[i].style.display = 'none';}
var shElemntArry = getElementsByClassName(document.body,'sh-CostBB-lkdhdr');for(var i = shElemntArry.length - 1; i & gt; = 0; --i){shElemntArry[i].style.display = 'none';}





& nbsp;



Item location:
Elk Grove, California, United States






& nbsp;



Ships to:


United States
& nbsp;| & nbsp;
See exclusions









Import charges:




(amount confirmed at checkout)
To be provided at checkout

& nbsp; help icon for Shipping - opens a layer


This amount includes applicable customs duties, taxes, brokerage and other fees. This amount is subject to change until you make payment. For additional information, see the Global Shipping Program terms and conditions - opens in a new window or tab
This amount includes applicable customs duties, taxes, brokerage and other fees. This amount is subject to change until you make payment. If you reside in an EU member state besides UK, import VAT on this purchase is not recoverable. For additional information, see the Global Shipping Program terms and conditions - opens in a new window or tab



No additional import charges on delivery


Delivery:




Varies





Payments:




Credit Cards processed by PayPal






6 months to pay on $99+. & nbsp;




Loading...

An error occurred, please try again.


Apply Now - opens in a new window or tab
& nbsp;| & nbsp;
See Terms - opens in a new window or tab


See payment details




Any international shipping is paid in part to Pitney Bowes Inc. Learn More - opens in a new window or tab

International shipping and import charges paid to Pitney Bowes Inc. Learn More - opens in a new window or tab
Any international shipping and import charges are paid in part to Pitney Bowes Inc. Learn More - opens in a new window or tab
International shipping paid to Pitney Bowes Inc. Learn More - opens in a new window or tab
Any international shipping is paid in part to Pitney Bowes Inc. Learn More - opens in a new window or tab


Get low monthly payments | Get instant funding


Returns:




Seller does not offer returns.







Guarantee:




Money Back Guarantee
Covered by eBay Money Back Guarantee
& nbsp;| & nbsp; See details - opens in a new window or tab




Get the item you ordered or get your money back.



Covers your purchase price and original shipping.






















-- & gt;
var clientModuleImprTrackingOn=true;var userName= " " ;itemID= " 252387403511 " ;
Bottom panel for Description -- & gt;









Report item - opens in a new window or tab

Description current
Shipping and payments








eBay item number: 252387403511


Seller assumes all responsibility for this listing.

Last updated on
& nbsp;Sep 21, 2016 07:15:07 PDT & nbsp;
View all revisions





Item specifics


Condition:
Used
:






An item that has been used previously. The item may have some signs of cosmetic wear, but is fully operational and functions as intended. This item may be a floor model or store return that has been used. See the seller’s listing for full details and description of any imperfections.
See all condition definitions - opens in a new window or tab





Seller Notes:
“ Excellent condition. Comes with power strips. ”






Brand:


BrightSign

MPN:


HD920A



Model:


HD920

UPC:


Does not apply











if ((typeof (oGaugeInfo) != " undefined " )){var descGaugeStartInfo = {descST:(new Date()).getTime()};}





Questions and answers about this item



No questions or answers have been posted about this item.

Ask a question - opens in a new window or tab












Seller assumes all responsibility for this listing.








Shipping and handling



The seller has not specified a shipping method to Poland . Contact the seller - opens in a new window or tab and request shipping to your location.


Shipping cost cannot be calculated. Please enter a valid ZIP Code.





Item location: Elk Grove, California, United States




Shipping to: United States



Excludes: Africa, Asia, Central America and Caribbean, Europe, Middle East, North America, Oceania, Southeast Asia, South America








No additional import charges at delivery!

This item will be shipped through the Global Shipping Program and includes international tracking. Learn more - opens in a new window or tab














Quantity:




Change country:

-Select-
United States


There are 4 items available. Please enter a number less than or equal to 4.
Select a valid country.




ZIP Code:



Please enter a valid ZIP Code.
Please enter 5 or 9 numbers for the ZIP Code.










This item does not ship to Poland









Handling time


Estimated sales tax






Will usually ship within 1 business day of receiving cleared payment - opens in a new window or tab .


Seller charges sales tax for items shipped to: CA (8.25%).


















Return policy




Return policy details




Seller does not offer returns. You are covered by the eBay Money Back Guarantee - opens in a new window or tab if you received an item that is not as described in the listing.














Payment details




Payment method
Preferred / Accepted
& nbsp;











Accepted


& nbsp;









Enjoy more time to pay
Pay for your purchases when it's right for you. Choose PayPal Credit to pay all at once or enjoy the flexibility of paying over time with special financing offers.
For example, if your purchase qualifies, you could enjoy No Payments + No Interest if paid in full in 6 months on $99+.
Interest will be charged on your account from the posting date (which is usually within a few days after the purchase date) if the purchase balance is not paid in full within the promotional period. Subject to credit approval. See terms - opens in a new window or tab
Other offers may be available from time to time.
The lender for PayPal Credit accounts is Comenity Capital Bank.


& nbsp;






Seller's payment instructions

Please Note
Items are sold as-is. All sales are final. No refunds or returns. No exceptions.
Please contact us with any questions before bidding.
We do our best to present accurate detailed information for every item we sell.
Any item not specifically listed as included with the auction is not included
(including if an accessory is mentioned in the listing description elsewhere)
Original / factory / manufacturer's warranties are no longer valid.




























Current bid amount









+





+ import charges (shown at checkout)




time left
##2## left
|
Bid Count


























Your high bid amount:
























Your bid amount:




Calculating import charges...
+ import charges (shown at checkout)





Confirm
















Place your bid
Help button.Click to expand the details about Quick bid ?


Consider bidding the highest amount you're willing to pay. We'll bid for you, just enough to keep you in the lead. We'll keep your high bid amount hidden from everyone else.
See more ButtonClick to expand the details about Quick bid


Here's how bidding works:

If the current bid is $20, and you bid $30, we bid $21 for you.
If no one else bids, you win and pay $21.
If someone else bids $31, we bid for you up to your max of $30.















Approx.










Approx.










Approx.















OR







Really want to win? Try raising your high bid amount.



















Bid























By placing a bid, you're committing to buy this item if you win.
By submitting your bid, you are committing to buy this item from the seller if you are the winning bidder. You have read and agree to the Global Shipping Program terms and conditions - opens in a new window or tab . Import charges previously quoted are subject to change if you increase you maximum bid amount.
By clicking Confirm , you commit to buy this item from the seller if you are the winning bidder.
By clicking Confirm , you are committing to buy this item from the seller if you are the winning bidder and have read and agree to the Global Shipping Program terms and conditions - opens in a new window or tab . Import charges previously quoted are subject to change if you increase you maximum bid amount.












Loading...





Bid layer is updating the contents.
Resume bidding , if the page does not update immediately.






d
h
m
s
day
hour
hours
FREE shipping
See item description
+ See item description for shipping
Calculate
Approximately:
(Enter ##1## or more)
(Enter more than ##1##)
Your max bid:

You've been outbid. Don't let it get away - place another bid.
You've been outbid by an automatic bid placed earlier by another bidder.
You're the highest bidder on this item!
You're the first bidder on this item!
You're the highest bidder on this item, but you're close to being outbid.
This auction is almost over and you're currently the high bidder.
You're the high bidder on this item, but the reserve price hasn't been met yet.


You've been outbid by someone else.
You can still win! Try bidding again.
You've been outbid by someone else's max bid.
You can still win! Try bidding again.
Your bid wasn't accepted because it's the same as someone else's bid.
Try raising your max bid.
You're the highest bidder!
To increase your chances of winning, try raising your bid.
You're the first bidder. Good Luck!
You're still the highest bidder!
You increased your max bid to

Please enter your bid again.
Enter a valid amount for your bid.
Enter a bid that is the minimum bid amount or higher.
You have to bid at least
Sorry, you can't lower your maximum bid once it's placed.
This seller requires the buyer to have a PayPal account to purchase this item. Get a PayPal account here .
Your bid is the same as or more than the Buy It Now price.You can save time and money by buying it now.



Place bid
Review and confirm your bid
Bid confirmation
Increase max bid

Enter a custom max bid more than ##2##
Enter a custom max bid of ##2## or more
+ ##2## approximate import charges
##2## (approximately)
Please enter a higher amount than the current bid.
+ ##2## for shipping
+ FREE SHIPPING

Bid ##3## now
Bid ##3##

































Time left:







Current bid:


(approximately ##1##)






Your maximum bid:


(approximately ##1##)





Increase your maximum bid:


















By clicking 1 Click Bid , you commit to buy this item from the seller if you're the winning bidder. Learn more about 1-click bid - opens in a new window or tab









day
hour
min
sec
days
hours
mins
secs
(approximately ##1##)
Winning bid:
Starting bid:

Close

Congrats! The auction has ended and you're the winner.
The auction has ended, but the reserve price was not met.
Sorry, the auction has ended and you were outbid.
Good news, you're the high bidder.
Sorry, you've been outbid.
You're the high bidder, but the reserve price is not met.
Please enter a higher amount than the current bid.
Maximum bids cannot be lowered once submitted.
Please enter a valid number.











if ( " ActiveXObject " in window) {
window.addEventListener('beforeunload', function() {
var iframeElements = Array.prototype.slice.call(document.getElementsByTagName('iframe'));
for (var i = 0, l = iframeElements.length; i

#BottomPanelDF {display: inline-block !important; width: 100%;}





See what other people are watching Feedback on our suggestions MICROSOFT LUMIA 635 640 , 640 XL UNLOCK CODE ATT… $1.89 Free shipping & nbsp; NOKIA MICROSOFT LUMIA 635 640 & amp; XL UNLOCK COD… $1.99 Free shipping & nbsp; ZTE MAVEN Z812 UNLOCK CODE ATT AT & amp;T NETWORK… $1.99 Free shipping & nbsp; MOTOROLA Moto E UNLOCK CODE 2nd Generation XT15… $1.99 Free shipping & nbsp; ZTE Zmax Pro UNLOCK SERVICE FOR METROPCS… $999.00 Free shipping & nbsp; 5 x 12 mm Void Warranty Label Sticker ( 510 pcs ) $4.99 Free shipping & nbsp;
Sponsored Links



















Back to home page



Return to top



More to explore :
Retail Jewelry Packaging and Display ,
HDMI Tablets & amp; eBook Readers with Media Player ,
HDMI 64GB Tablets & amp; eBook Readers with Media Player ,
HDMI 4GB Tablets & amp; eBook Readers with Media Player ,
Western Digital HDMI Home Internet & amp; Media Streamers ,
Western Digital Solid State Drive








































Additional site navigation
About eBay
Announcements
Community
Security Center
Resolution Center
Seller Information Center
Policies
Affiliates
Help & amp; Contact
Site Map Copyright © 1995-2016 eBay Inc. All Rights Reserved. User Agreement , Privacy , Cookies and AdChoice

var rtmUITrackerConfig = { " viewComplete " :3, " viewInterval " :500, " pageId " :2047675, " deactivateAfter " :600, " trackingEnabled " : " true " , " samplingRate " :100, " hoverMin " :500};
var _plsubtInp = { " appId " : " viewitem " , " eventFamily " : " ADS " , " pageId " :2047675, " disableImp " :true, " env " : " PROD " };
_plsubtInp.pageLoadTime = new Date().getTime();
_plsubtInp.samplingRate = rtmUITrackerConfig.samplingRate;
var _tq = [];

(function(){
raptor.require('raptor.rtm.RtmManager').manage({ " fallbackBaseURL " : " http://srv.ebay.com/ws/eBayISAPI.dll?RtmCmd " , " isSignedIn " :false, " jsDependencyURLs " :[ " http://ir.ebaystatic.com/rs/v/2p5dmzzesuyhnk0rnfuuau2e0mr.js " , " http://ir.ebaystatic.com/rs/v/xo22otjt4a0ovdrhq1uphcrgo22.js " , " http://ir.ebaystatic.com/rs/v/vdl104thoi5lbnavivof55u3a2q.js " , " http://ir.ebaystatic.com/rs/v/ordlg4hi1a4vhkzcohhdubazg23.js " , " http://ir.ebaystatic.com/rs/v/wa2of3yznyyarcmjoype0qiwran.js " ], " nonBlockingSRX " :true, " pageId " :2047675, " userId " :null, " baseURL " : " http://srx.main.ebayrtm.com/rtm?RtmCmd & a=json & g=5de2c61d1580abc55f84d44ff5bd9b29 & uf=0 & c=1H4sIAAAAAAAAAHVRTUsjQRC951c0LHiQbFLVXf0V6IMxorIExYk3QcZMM2kckiHTY9h%2Fv9VR1pOnqn6vqXrv1a%2FNbhSruBXSC4QFqoU24na9%2BQ12ASAkoJn0ClygSU8kA0x69BRQassEBDIWsGAYqs3D081r9by8vpr00tmAFqUBSxqdnSoAR4ROeodTaSVXMkBeT5UET2Q9zyzTrQvLcUj7OAziQtzvm3HIx1R3LyMA4FPMdeqYqOLxI23j8Ak%2F5F08ih%2FIMlR%2FKd2mhsV%2F4gj%2FeaLg2SeyaNbOdqEUfgHMSqtMeB5iw52x5wzOSUhjgreFpqC4eB2QV1ly1hQYICyPqd3lKrV7cbfyEq7EKrUp150oWN1G8djVf7%2B1r9LQM8Cf1%2FeiOnSpEVWucxTr2KS6rMKwy7kfXhbz%2Bel0mrWHQ9vFWd%2FN%2BUBKBjSsBJ0KEohVaHbFp3gf2%2FXbn9MlD%2BAoigHlWKvz53v6ILXkbwRKIwdgSgqo7NeZ%2FwGyLIe%2BJAIAAA%3D%3D & ord=1483031636152 " , " csrfToken " : " e8175fba869f7bd41e7644a9e924f742c5ce1a0eef0d72bc2d8cab332f1c30c2 " , " followSvcUrl " : " http://mbe.vip.ebay.com/merbak/v0/feed/users/{user}/follows " , " ver " :5, " jsonpSvcUrl " : " http://svcs.ebay.com/proxy/ " , " placementsInfo " :[[1527,2,0,0, " " ],[699,2,0,0, " " ],[11575,3,0,0, " " ],[825,3,0,0, " " ],[827,3,0,0, " " ],[829,3,0,0, " " ],[280,4,0,0, " " ],[283,3,0,0, " " ],[20047,4,0,0, " " ]]});

$(document).trigger( " RTM_REGISTER_PLACEMENTS " ,{'placementsInfo':[[876,0,0,0],[912,0,0,0],[433,0,0,0],[1650,1,0,0],[1651,1,0,0]]});

window.setTimeout(function(){$(document).trigger( " RTM_INIT " ,{'init':0});},0);
})(); (function(){
(function() {
var Context = raptor.require('ebay.context.Context');
Context.call(Context,{ " site " :0, " errors " :{ " enabled " :false}, " app " : " viewitem " , " domain " : " .ebay.com " , " cobrand " :2, " pool " : " production " , " locale " : " en_US_MAIN " , " features " :{}, " pid " :2047675});
})();

if(typeof FastClick === 'function') {FastClick.attach(document.body);}
try { if ($( " .vi-VR-cvipCntr1 " ).length & gt; 0) { var script = document.createElement( " script " ); script.innerHTML = " var vidummyhelper = 0; " ; var head = document.getElementsByTagName('head')[0]; if (head) { head.appendChild(script); } } } catch (e) { }
$(document).ready(function(){ try { $('#smtBackToAnchor').on('click', function(){var backToAnchor=$('.vi-VR-spl-lnk'); var url= backToAnchor.attr('href'); if(url.indexOf('http%3A%')!=-1) { url = decodeURIComponent(url); backToAnchor.attr('href',url); }}); var offset = $( " #vi_snippetdesc_btn " ).offset(); if (offset){ $( " .vi-descsnpt-feedbacklnk " ).offset({ top: offset.top+10, left: offset.left+275}); } if (($( " #paymentsPlaceHolderId " ).length 0) ) { if ($( " #ppcMsg .ppcDispMsg " ).length & gt; 0) { $( " #ret-accept " ).prepend(' Payments: Credit Cards processed by PayPal See payment details '); $( " .vi-cc-exp-txt " ).html($( " #ppcMsg .ppcDispMsg " ).html()); $( " #vi-abf-payppc-lnkPH " ).click(function(){ var tabId = ($( " body.vi-deeplinksv2 " ).length & gt; 0) ? " #viTabs_0 " : " #viTabs_1 " ; var tabElem = $(tabId); if(tabElem.length & gt; 0){ tabElem.trigger('click', ['noTabTracking']); trackingUtil( " Payments_See_details_Iteminfo " ); } }); } } var e1 = $('#e1.lowpay');var vehc_rdloans=$('#vehc_rdloans'); if(e1.size() & gt; 0 & & vehc_rdloans.size() & gt; 0) { vehc_rdloans.text(e1.text()); vehc_rdloans.css('text-transform','capitalize')} } catch (e) {} });
var trkAnonFunTrg = false;
var trkAnonFun = function(isTimer) {
var url = '';
try {
var isBOT = /bot|googlebot|crawler|spider|robot|crawling/i.test(navigator.userAgent);
if (trkAnonFunTrg || isBOT) {
return;
}
trkAnonFunTrg = true;
var ary = [],
m_l = {};
ary.push('sid=p2047675.m4652');
if (typeof ciidVal != 'undefined') ary.push('ciid=' + ciidVal);
if (typeof modules_loaded != 'undefined') {
for (var i in modules_loaded) {
if (modules_loaded[i] & & i != 'ex1') {
ary.push(i + '=' + modules_loaded[i]);
}
}
if ($('#promotionBanner') & & modules_loaded['vi_sme'] == 'undefined') {
ary.push('ex1=smeElig|' + isTimer);
} else {
ary.push('ex1=smeNElig|' + isTimer);
}
}
var merAry = [];
var tmerchModuleRef = merchModueRef;
if ((typeof tmerchModuleRef != 'undefined') & & !tmerchModuleRef) {
tmerchModuleRef = $('#merch_html_100005, #merch_html_100008, #merch_html_100005, #merch_html_100623, #merch_html_100009, #merch_html_100010, #merch_html_100047');
}
if (typeof isPRP != 'undefined' & & isPRP) merAry.push('PRP');
for (var i = 0, l = tmerchModuleRef.length; i 0) {
var id = tmerchModuleRef[i].id;
if (id) merAry.push(id.split('_')[2]);
}
}
if (merAry.length & gt; 0) {
ary.push('vi_mer=true');
ary.push('vi_merids=' + merAry.join(','));
}
url = $trk.rover.uri + $trk.rover.clk + '?trknvp=' + encodeURIComponent(ary.join(' & '));
} catch (e) {
var err = " ex1=' " + e.message + " ' " ;
url = 'http://rover.ebay.com/roverclk/0/0/9?trknvp=sid%3Dp2047675.m4652%26' + encodeURIComponent(err);
}
$.ajax({
url: url,
async: isTimer
});
};

setTimeout(function() {
trkAnonFun(true);
}, 2000); if(typeof GH!= " undefined " & & GH){GH.urls={ autocomplete_js: " http://ir.ebaystatic.com/f/hbapik23s25eziiie4hiz2ejiq5.js " ,fnet_js: " https://c.paypal.com/webstatic/r/fb/fb-all-prod.akamai.pp2.min.js " ,ie8_js: " http://ir.ebaystatic.com/f/rbezfuzpu20wfd2kvejeb5adxyg.js " ,scandal_js: " http://ir.ebaystatic.com/f/4uow4cyy2q2sdoswfzoc53mvoiq.js " }; GH.GHSW={ raptor: " true " ,sandbox:0,emp:0,ac1:0,ac2:0,ac3:0,ac4:0,ac5:0,ac6:0,hideMobile:0,langSwitch:0,pool:0,ALERT_POPUPOFF:0,NEWALERT_POPUPOFF:0,newprofile:0,desktop_new_profile_service: " true " ,UNLOAD_Firefox: " true " ,UNLOAD_Chrome: " true " ,UNLOAD_IE:0,UNLOAD_Safari:0 };} if(typeof GH!= " undefined " & & GH){GH_config={ " siteId " : " 0 " , " geoLang " : " [] " ,sin:0,id:'',fn:'',pageId:2047675,selectedCatId:'12576',ct:0,tmx:''};GH.init();}
var enImgCarousel = raptor.require('ebay.viewItem.imageCarousel');
new enImgCarousel({ " layerId " : " viEnlargeImgLayer " , " imgCntId " : " viEnlargeImgLayer_img_ctr " , " imgArr " : [{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FssEAAOSwWntXNJjY\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FssEAAOSwWntXNJjY\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FssEAAOSwWntXNJjY\u002Fs-l1600.jpg " , " maxImageHeight " :956, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002F3WYAAOSw1KxXNJjV\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002F3WYAAOSw1KxXNJjV\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002F3WYAAOSw1KxXNJjV\u002Fs-l1600.jpg " , " maxImageHeight " :1532, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FPkMAAOSwl-FXNJjh\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FPkMAAOSwl-FXNJjh\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FPkMAAOSwl-FXNJjh\u002Fs-l1600.jpg " , " maxImageHeight " :931, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FtQEAAOSwWntXNJjm\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FtQEAAOSwWntXNJjm\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FtQEAAOSwWntXNJjm\u002Fs-l1600.jpg " , " maxImageHeight " :1348, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FUfgAAOSwfZhXNJjp\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FUfgAAOSwfZhXNJjp\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FUfgAAOSwfZhXNJjp\u002Fs-l1600.jpg " , " maxImageHeight " :1318, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false}], " islarge " : true, " isEnableTouch " : false, " clsTrk " : " VI_ENG_IMG_LYR_V2_CLOSE " , " opnTrk " : " ENLARGE_PANEL " , " arrTrk " : " VI_ENLARGE_IMAGE_LAYER_V2_ARROW_CLK " , " fsARRTrk " : " VI_ENLARGE_IMAGE_LAYER_V2_FS_ARRW_CLK " , " fsTHBTrk " : " VI_ENG_IMG_LYR_V2_THB_CLK " , " isFS " : true, " fsId " : " viEnlargeImgLayer_layer_fs " , " sliderId " : " viEnlargeImgLayer_layer_fs_slider " , " cellWidth " : " 75 " , " cellHeight " : " 76 " , " cellNumber " : " 6 " , " isVideoPresent " : " false " });
var pageLayer = raptor.require( " com.ebay.raptor.vi.pagelayer " );new pageLayer({cmpId:'viEnlargeImgLayer', isHideScroll:true, isFade:true, isBckBtnSupport:true});
var enLayer = raptor.require('ebay.viewItem.enlargeLayerv2');
new enLayer({ " id " : " viEnlargeImgLayer " , " mainImgHldrId " : " mainImgHldr " });

var filmstrip = raptor.require('ebay.viewItem.utils.filmstrip');
new filmstrip({ " sliderId " : " vi_main_img_fs_slider " , " fsId " : " vi_main_img_fs " , " cellNumber " : 6, " cellWidth " : 75, " cellHeight " : " 76 " , " speed " : " 6 " , " fsARRTrk " : " VI_FILMSTRIP_ARR_CLICK " , " fsTHBTrk " : " VI_FILMSTRIP_THUMBS_CLICK " });

raptor.require( " ebay.viewItem.PicturePanelPH " ).init({'prLdImgThrsld':5, 'fsImgList':[{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FssEAAOSwWntXNJjY\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FssEAAOSwWntXNJjY\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FssEAAOSwWntXNJjY\u002Fs-l1600.jpg " , " maxImageHeight " :956, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002F3WYAAOSw1KxXNJjV\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002F3WYAAOSw1KxXNJjV\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002F3WYAAOSw1KxXNJjV\u002Fs-l1600.jpg " , " maxImageHeight " :1532, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FPkMAAOSwl-FXNJjh\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FPkMAAOSwl-FXNJjh\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FPkMAAOSwl-FXNJjh\u002Fs-l1600.jpg " , " maxImageHeight " :931, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FtQEAAOSwWntXNJjm\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FtQEAAOSwWntXNJjm\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FtQEAAOSwWntXNJjm\u002Fs-l1600.jpg " , " maxImageHeight " :1348, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FUfgAAOSwfZhXNJjp\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FUfgAAOSwfZhXNJjp\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FUfgAAOSwfZhXNJjp\u002Fs-l1600.jpg " , " maxImageHeight " :1318, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false}]});
$( " #vi-desc-sNotes " ).click(function(){try{$( " #viTabs_0 " ).trigger('click', ['noTabTracking']);}catch(e){$( " #viTabs_1 " ).trigger('click', ['noTabTracking']);}});
var addToCollect = raptor.require( " com.ebay.raptor.vi.addtocollectionr1 " );
new addToCollect({js: " http://ir.ebaystatic.com/rs/c/collect-widget-init-v1-042915.js " , pageId: " 2047675 " , clsName: " clnw-collect " , csrfToken: " 010001000000503adb5f5bffe4d3f4f96cbae14a0402cc615397fcdaa3494ccb09e1c8207cb71320332a50ed860c4e5048738a5dad9a557a515224e69bb6dce68fab25be3b208044d9b57aa0aced9e60df28b61cf5c2f9 " , varElmId: " var " , isProdEnv:true, itmclcnt:0, cvarmap:null, siteid: " EBAY-US " , countryid: " PL " , localeid: " en-US " });
$( " #e2 " ).click(function(){var tabId = ($( " body.vi-deeplinksv2 " ).length & gt; 0) ? " viTabs_0 " : " viTabs_1 " ;trackingUtil( " Shipping_See_all_details_ItemSummary " );try{$( " # " + tabId)[0].trigger('click', ['noTabTracking']);}catch(e){$( " # " + tabId).trigger('click', ['noTabTracking']);}});$( " #expedited_link " ).click(function(){var tabId = ($( " body.vi-deeplinksv2 " ).length & gt; 0) ? " viTabs_0 " : " viTabs_1 " ;trackingUtil( " OneDayShipping_Link_in_Delivery_Expedited_Shipping " );try{$( " # " + tabId)[0].trigger('click', ['noTabTracking']);}catch(e){$( " # " + tabId).trigger('click', ['noTabTracking']);}});$( " #e3 " ).click(function(){var tabId = ($( " body.vi-deeplinksv2 " ).length & gt; 0) ? " viTabs_0 " : " viTabs_1 " ;trackingUtil( " Calculate_link_ItemSummary " );try{$( " # " + tabId)[0].trigger('click', ['noTabTracking']);}catch(e){$( " # " + tabId).trigger('click', ['noTabTracking']);}});var tabId = ($( " body.vi-deeplinksv2 " ).length & gt; 0) ? " viTabs_0 " : " viTabs_1 " ;$( " #e4 " ).click(function(){try{$( " # " + tabId)[0].trigger('click', ['noTabTracking']);}catch(e){$( " # " + tabId).trigger('click', ['noTabTracking']);}trackingUtil( " See_exclusions_itemInfo " );});
$( " #e5 " ).click(function(){
var tabId = ($( " body.vi-deeplinksv2 " ).length & gt; 0) ? " viTabs_0 " : " viTabs_1 " ;
try{
$( " # " + tabId)[0].trigger('click', ['noTabTracking']);
}catch(e){
$( " # " + tabId).trigger('click', ['noTabTracking']);
}
trackingUtil( " Payments_See_details_Iteminfo " );
});

$( " .vi-ppc-offlnk " ).click(function(){
trackingUtil( " VIP_PPC_OFFER_LNK " );
});

$( " # " ).click(function(){
var tabId = (false) ? " viTabs_0 " : " viTabs_1 " ;
if (!(false)){
tabId = ($( " body.vi-deeplinksv2 " ).length & gt; 0) ? " viTabs_0 " : " viTabs_1 " ;
}

try{
$( " # " + tabId)[0].trigger('click', ['noTabTracking']);
}catch(e){
$( " # " + tabId).trigger('click', ['noTabTracking']);
}
trackingUtil( " Returns_Read_details " );
});

$( " #vi-VR-return-deLnk " ).click(function(){
var tabId = (false) ? " viTabs_0 " : " viTabs_1 " ;
if (!(false)){
tabId = ($( " body.vi-deeplinksv2 " ).length & gt; 0) ? " viTabs_0 " : " viTabs_1 " ;
}

try{
$( " # " + tabId)[0].trigger('click', ['noTabTracking']);
}catch(e){
$( " # " + tabId).trigger('click', ['noTabTracking']);
}
trackingUtil( " Returns_Read_details " );
});
$( " # " ).click(function(){$( " #viTabs_0 " )[0].click();});var ia = raptor.require('com.ebay.raptor.vi.ItemAttributes');new ia({readMoreId : 'readFull', hiddenContentId : 'hiddenContent'});
$( " span.vi-rpd-textStyle a " ).each(function(i,e){$(this).attr('target', " _blank " );});

var deeplinksv2 = false;
var isAutoCars = false;
var prForBotsEnabled = false;
var enableSpaceBarOnTabsFlag = false;
$( " #viTabs_0 " ).bind('click', function(event, param) {
if(param !== 'noTabTracking') {
trackingUtil( " Description_Tab " );
}
});

$('ul.nav-tabs-m a').bind( " keydown " ,function(event){
if(event.keyCode==37){
//check if any element exists to the left
var previousTab = $(this).parent().prev('li');
var previousChildLink = previousTab.children( " a " );
if(previousTab.length & gt; 0){
previousChildLink.trigger( " click " );
previousChildLink.focus();
}else{
}
}
else if(event.keyCode==39){
//check if any element exists to the right
var nextTab=$(this).parent().next('li');
var nextChildLink = nextTab.children( " a " );
if(nextTab.length & gt; 0){
nextChildLink.trigger( " click " );
nextChildLink.focus();
}else{
}
}
else if(enableSpaceBarOnTabsFlag & & event.keyCode==32){
var focussedElement = $(this);
focussedElement.trigger( " click " );
}
});

if(enableSpaceBarOnTabsFlag){
window.onkeydown = function(e) {
if($('ul.nav-tabs-m a').is(':focus'))return !(e.keyCode == 32);
};
}

$('ul.nav-tabs-m a').click(function (event) {
event.stopPropagation();
var id = $(this).parent().index();
var tempAttr;
id+=1;
if ($(this).parent().attr( " class " ) != " item active sel " ) {
$('ul.nav-tabs-m li').each(function(index) {
$(this).removeClass( " active sel " );
$(this).children( " a " ).attr( " aria-selected " , " false " );
$( " #selectedSpan " ).remove();
});

$('div.tab-content-m div').each(function(index) {
$(this).removeClass( " active sel " );
});
$( " ul.nav-tabs-m li:nth-child( " +id+ " ) " ).addClass( " active sel " );
$( " ul.nav-tabs-m li:nth-child( " +id+ " ) " ).children( " a " ).attr( " aria-selected " , " true " );
$( " ul.nav-tabs-m li:nth-child( " +id+ " ) " ).children( " a " ).append( " current " );
$( " div.tab-content-m div:nth-child( " +id+ " ) " ).addClass( " active sel " );



if ((id == 1) & & (deeplinksv2)) {
var tabNum = 2;
if (isAutoCars) {
tabNum = 3;
}
$( " div.tab-content-m div:nth-child( " + tabNum + " ) " ).addClass( " active sel " );
$( " .vi-readMore-ship " ).addClass( " u-dspn " );
}
if ((id == 2) & & (deeplinksv2)) {
$( " .vi-readMore-ship " ).removeClass( " u-dspn " );
}

}
});

if (deeplinksv2){
$(document).ready(function(){
$('a[href^= " # " ].vi-ds3-ter-a').on('click',function (e) {
e.preventDefault();
var target = this.hash,
$target = $(target);
$('html, body').stop().animate({
'scrollTop': $target.offset().top
}, 700, 'swing', function () {
window.location.hash = target;
});
});
});
}

$( " #viTabs_1 " ).bind('click', function(event, param) {
if(param !== 'noTabTracking') {
if(event.target.innerHTML == " Vehicle History Report " ){
trackingUtil( " VEHICLE_HISTORY_REPORT_TAB_CLICK " );
}
else {
trackingUtil( " Shipping_and_Payments_Tab " );
}

}else{
if(navigator & & navigator.userAgent & & navigator.userAgent.indexOf( " Opera " ) != -1) {
setTimeout(function(){document.location.hash = document.location.hash.substring(1);},50);
}
}
});

$( " #viTabs_2 " ).bind( " click " ,function(event,param){
trackingUtil( " VEHICLE_SHIPPINGPAYMENT_TAB " );
});
if(prForBotsEnabled){
$(document).ready(function(){
trackingUtil( " VI_DOCUMENT_READY_TRIGGER " );
});
}

$( " .rpMainCont a " ).attr('target','_blank');

var tRtmPubsub = raptor.require('pubsub');
if(tRtmPubsub) {
tRtmPubsub.subscribe( " ADD_TO_WATCH_TRIGGERED " , function(msg){ $('body').trigger(( " RTM_PUBLISH " ),{'pids':([ " 280 " ])});});
}

var tRtmPubsub = raptor.require('pubsub');
if(tRtmPubsub) {
tRtmPubsub.subscribe( " _SUBMIT_CARTBTN " , function(msg){ $('body').trigger(( " RTM_PUBLISH " ),{'pids':([ " 20047 " ])});});
}

$( " #_rtop " ).click(function(){
trackingUtil( " Return_to_top " );
});
raptor.require('com.ebay.raptor.vi.cookie.ScreenDetail').init({ " cookieName " : " dp1 " , " cookieletName " : " pbf " , " currentResValue " : { " maxWidth " :1366, " minWidth " :1281, " name " : " RES_1366 " , " value " :4, " id " :4, " integer " :4}, " resRange " : [{ " maxWidth " :-1, " minWidth " :-1, " name " : " DEFAULT " , " value " :0, " id " :0, " integer " :0},{ " maxWidth " :1024, " minWidth " :0, " name " : " RES_1024 " , " value " :1, " id " :1, " integer " :1},{ " maxWidth " :1152, " minWidth " :1025, " name " : " RES_1152 " , " value " :2, " id " :2, " integer " :2},{ " maxWidth " :1280, " minWidth " :1153, " name " : " RES_1280 " , " value " :3, " id " :3, " integer " :3},{ " maxWidth " :1366, " minWidth " :1281, " name " : " RES_1366 " , " value " :4, " id " :4, " integer " :4},{ " maxWidth " :1440, " minWidth " :1367, " name " : " RES_1440 " , " value " :5, " id " :5, " integer " :5},{ " maxWidth " :1680, " minWidth " :1441, " name " : " RES_1680 " , " value " :6, " id " :6, " integer " :6},{ " maxWidth " :2147483647, " minWidth " :1681, " name " : " RES_MAX " , " value " :7, " id " :7, " integer " :7}], " resBits " : [85,86,87], " currentViewportValue " : { " maxWidth " :2147483647, " minWidth " :1281, " name " : " VIEWPORT_7 " , " value " :7, " id " :7, " integer " :7}, " viewportRange " : [{ " maxWidth " :-1, " minWidth " :-1, " name " : " DEFAULT " , " value " :0, " id " :0, " integer " :0},{ " maxWidth " :1020, " minWidth " :0, " name " : " VIEWPORT_1 " , " value " :1, " id " :1, " integer " :1},{ " maxWidth " :1024, " minWidth " :1021, " name " : " VIEWPORT_2 " , " value " :2, " id " :2, " integer " :2},{ " maxWidth " :1148, " minWidth " :1025, " name " : " VIEWPORT_3 " , " value " :3, " id " :3, " integer " :3},{ " maxWidth " :1152, " minWidth " :1149, " name " : " VIEWPORT_4 " , " value " :4, " id " :4, " integer " :4},{ " maxWidth " :1276, " minWidth " :1153, " name " : " VIEWPORT_5 " , " value " :5, " id " :5, " integer " :5},{ " maxWidth " :1280, " minWidth " :1277, " name " : " VIEWPORT_6 " , " value " :6, " id " :6, " integer " :6},{ " maxWidth " :2147483647, " minWidth " :1281, " name " : " VIEWPORT_7 " , " value " :7, " id " :7, " integer " :7}], " viewportBits " : [69,70,71]});
raptor.require('com.ebay.raptor.vi.tracking.SitespeedTimers').init({ " itemId " : " 252387403511 " });
$rwidgets(['com.ebay.raptor.vi.isum.smartBackTo','w1-1',{ " smtBackToAnchorArrowId " : " smtBackToAnchorArrow " , " smtBackToAnchorId " : " smtBackToAnchor " , " numLevels " :2, " isBacktoSearch " :false},0,0,0,['ui.InlineFeedbackLink','w1-2']],['com.ebay.raptor.vi.overlayHandler','w1-3'],['com.ebay.raptor.vi.topmessagepanel.TopMessagePanel','w1-4',{ " CHINESE_BUYER_HIGH_BIDDER_PC_ON " : " You're the highest bidder. " , " CHINESE_BUYER_HIGH_BIDDER_RESERVE_NOT_MET_PC_ON " : " You're the highest bidder but the reserve price has not been met. " , " CHINESE_BUYER_OUTBIDDER_PC_ON " : " You've been outbid. " , " smId " : " w1-4-_msg " , " dummy " : " ##n## " , " inlineExp " :false, " autoRefreshSvcId " : " AUTO_REFRESH_SVC " , " panelId " : " msgPanel " }],['ebay.viewItem.PicturePanel','w1-5',{ " id " : " vi_pic_panel " , " isEnableTouch " :false, " mainImgId " : " icImg " , " mainImgHldr " : " mainImgHldr " , " thbrImgId " : " icThrImg " , " prLdImgThrsld " :5, " fsImgList " :[{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FssEAAOSwWntXNJjY\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FssEAAOSwWntXNJjY\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FssEAAOSwWntXNJjY\u002Fs-l1600.jpg " , " maxImageHeight " :956, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002F3WYAAOSw1KxXNJjV\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002F3WYAAOSw1KxXNJjV\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002F3WYAAOSw1KxXNJjV\u002Fs-l1600.jpg " , " maxImageHeight " :1532, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FPkMAAOSwl-FXNJjh\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FPkMAAOSwl-FXNJjh\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FPkMAAOSwl-FXNJjh\u002Fs-l1600.jpg " , " maxImageHeight " :931, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FtQEAAOSwWntXNJjm\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FtQEAAOSwWntXNJjm\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FtQEAAOSwWntXNJjm\u002Fs-l1600.jpg " , " maxImageHeight " :1348, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false},{ " thumbImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FUfgAAOSwfZhXNJjp\u002Fs-l64.jpg " , " thumbImgSize " :null, " displayImgUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FUfgAAOSwfZhXNJjp\u002Fs-l500.jpg " , " displayImgSize " :null, " maxImageUrl " : " http:\u002F\u002Fi.ebayimg.com\u002Fimages\u002Fg\u002FUfgAAOSwfZhXNJjp\u002Fs-l1600.jpg " , " maxImageHeight " :1318, " maxImageWidth " :1600, " videoUrl " :null, " format " :null, " size " :0, " videoLength " :0, " zoomEnabled " :true, " enlargeEnabled " :true, " video " :false}], " isVideoPresent " :false, " isSelfHosted " :true, " numberOfImages " :5, " fsId " : " vi_main_img_fs " , " mskuId " : " sel-msku-variation " },0,0,0,['ebay.viewItem.ZoomEnlarge','w1-6',{ " id " : " vi_pic_zoomEnlarge " , " mainImgId " : " icImg " , " zoomEnMsgId " : " zoom_enlarge_msg " , " zoomMsg " : " Mouse over image to zoom " , " enlargeMsg " : " Click to view larger image and other views " , " zoomEnMsgCntId " : " zoom_enlarge_msg_cnt " },'w1-5','vi_pic_zoomEnlarge',0,['ebay.viewItem.Zoom','w1-7',{ " id " : " vi_pic_zoom " , " mainImgId " : " icImg " , " maskId " : " zoom_img_mask " , " zoomSelId " : " zoom_selector " , " imgCntrId " : " zoom_main_img_cntr " , " zoomImgId " : " zoom_main_img " , " zoomCntrId " : " zoom_main_cntr " , " mImgContainerSize " :500, " isNewZoomTest1 " :true},'w1-6','vi_pic_zoom']]],['com.ebay.raptor.vi.VIButton','w1-8',{ " isCSS3 " :true, " mouseDownClass " : " md " , " btnId " : " inst_sale_btn " }],['com.ebay.raptor.vi.share.SocialWidget','w1-9',{ " fbPopupHeight " :410, " tweetPopupHeight " :350, " isTalkOn " :false, " shareMailPopJs " : " http:\u002F\u002Fir.ebaystatic.com\u002Frs\u002Fv\u002Fxrfi4swk1i23pjanawctgcgybmq.js " , " pinterestPopupHeight " :350}],['ebay.viewItem.AddToWatchLink','w1-10',{ " id " : " watchLink " , " addToWatchUrl " : " http:\u002F\u002Fwww.ebay.com\u002Fmyb\u002FWatchListAdd?_trksid=p2047675.l1359 & SubmitAction.AddToListVI=x & item=252387403511 & rt=nc & srt=0100010000005099d70284213a9591a5846d2c6330891fef53afe6b69c1b86dc46a4f9f45938401e5bf68efbf7bbd1d4811361f62aaf7adaa8a25fe492297a4077f94c668aa199da6e90f569d4fb129a47b8f9c5fb7d02 & etn=Watch list & tagId=-99 & wt=5b03cc5bec819782f52c833f0f811dee & ssPageName=VIP:watchlink:top:en & sourcePage=4340 " , " msku " :false, " ended " :false, " userSignedIn " :false, " linkTopId " : " linkTopAct " }],['follow/widget','w1-11',{ " csrf " : " e8175fba869f7bd41e7644a9e924f742c5ce1a0eef0d72bc2d8cab332f1c30c2 " , " pageId " : " 2047675 " , " entityId " : " bargainsandrepair " , " entityType " : " person " , " entityName " : " bargainsandrepair " }],['com.ebay.raptor.vi.soi.soiLayer','w1-12',{ " inline " :true, " dummyCntrId " : " vi-soi-dummy " , " overlayId " : " vi-see-allitms-ovly " }],['com.ebay.raptor.vi.utils.Timer.TimerUtils','w1-13',{ " offScreenMessage " : " (updates every ##1## seconds) " , " timeLeftOffScreenMessage " : " Time Left " }],['com.ebay.raptor.vi.ValidateQuantity','w1-14',{ " errorIcon " : " w1-14-_errIcon " , " isSupressQty " :false, " anotherfield " : " $qty_dummy1$ " , " isMinRemnantSetEnabled " :false, " maxQty " :0, " errorMsg " : " w1-14-_errMsg " , " remainingQty " :4, " dummyQty " : " $qty_dummy$ " , " errTextMap " :[ " w1-14_qtyErr_0 " , " w1-14_qtyErr_1 " , " w1-14_qtyErr_2 " , " w1-14_qtyErr_3 " , " w1-14_qtyErr_4 " , " w1-14_qtyErr_5 " , " w1-14_qtyErr_6 " ], " qtyBoxId " : " qtyTextBox " , " disableQtyCheck " :false, " remnantQtyValue " :0, " availQtyThreshold " :10, " isValid " : " isValid " }],['raptor.vi.ActionPanel','w1-15',{ " isEncodeBOPISUrl " :true, " isAddOnInterceptEnabled " :false, " binBtnId " : " binBtn_btn " , " binEnabled " : " f " , " isCartLyr " :false, " bestOfferURL " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?MakeBestOffer & rev=4 & itemId=252387403511 " , " isSMEInterruptLayer " :false, " isSubmitButtonPresent " :false, " bestOfferBtnId " : " boBtn_btn " , " binGXOUrl " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?BinController & rev=4 & fromPage=2047675 & item=252387403511 & gch=1 & fb=1 " , " isEUSite " :false, " binURL " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?BinConfirm & rev=4 & fromPage=2047675 & item=252387403511 & fb=1 " , " isBOPISOnly " :false, " isRedesign " :false, " bolEnabled " : " t " , " isPUDO " :false, " disableBINBtnFeatureON " :true, " bestOfferTrackingId " : " p2047675.l4068 " , " savingsRateUpperCase " : " OFF " , " itemId " :252387403511, " siteId " :0, " qtyBoxId " : " qtyTextBox " , " savingsRateLowerCase " : " off " , " isBidOfferTrackingEnabled " :true, " isValid " : " isValid " , " isModel " :{ " largeButton " :true, " itmCondition " : " Used " , " binPrice " : " US $100.00 " , " binPriceDouble " : " 100.0 " , " binPriceOnly " : " 100.00 " , " convertedBinPrice " :null, " binURL " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?BinConfirm & rev=4 & fromPage=2047675 & item=252387403511 & fb=1 " , " binGXOUrl " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?BinController & rev=4 & fromPage=2047675 & item=252387403511 & gch=1 & fb=1 " , " binXOUrl " : " https:\u002F\u002Fpay.ebay.com\u002Fxo?action=create & rypsvc=true & pagename=ryp & TransactionId=-1 & item=252387403511 " , " bidPrice " :null, " bidPriceDouble " :null, " bidPriceOnly " :null, " convertedBidPrice " :null, " maxBidPrice " :null, " boSalePrice " :null, " boSalePriceDouble " :null, " boSalePriceOnly " :null, " currencySymbol " : " US $ " , " bidURL " :null, " bids " :0, " bidCurrencySymbol " :null, " bidCounterModel " :null, " timeLeftUrgency " : " LOW " , " showBidsCount " :false, " showBidsCountHot " :false, " bestOfferURL " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?MakeBestOffer & rev=4 & itemId=252387403511 " , " bestOfferLayerURL " : " http:\u002F\u002Fwww.ebay.com\u002Ftxn\u002Fbo\u002FshowBuyerOffer?itemId=252387403511 " , " signInBestOfferLayerURL " : " https:\u002F\u002Fsignin.ebay.com\u002Fws\u002FeBayISAPI.dll?SignIn & ru=http%3A%2F%2Fwww.ebay.com%2Fitm%2F252387403511%3Fboolp%3D1 " , " shopCartURL " : " http:\u002F\u002Fcart.payments.ebay.com\u002Fsc\u002Fatc?item=252387403511 & atc=true & srt=0100010000005035376407f9d766e83c229ba2f7a0e1f77f00ed24501dc02408bfed2f7acb0f89b34116f267ecc8a46739299c49d7aff8465fa2da5703769c33412b0b7498a4a9a63541b8da6d7c28574e8108bffd73d3 & format=json & ssPageName=CART:ATC " , " shopCartPageURL " : " http:\u002F\u002Fcart.payments.ebay.com\u002Fsc\u002Fadd?srt=01000100000050c1e17e0f2bc39431e719f747ade70d273f1e9792e65f5c3754be9c4d001b276371ac4d3790b8b2c07ed28abcf0117bc091bf69b07c6b26e63d706d31ca560da6115d812789c0f7741967e1472b2791f9 & ssPageName=VIFS:ATC " , " binLayerURL " :null, " duringCheckoutLayerUrl " :null, " signInBinLayerURL " :null, " minToBidPrice " :null, " minToBidLocalPrice " :null, " versionQtyTxt " :null, " lotSize " :0, " remainQty " :4, " maxQtyPerBuyer " :0, " totalQty " :4, " totalOffers " :1, " qtyPurchased " :0, " totalBids " :0, " uniqueBidderCount " :0, " showUniqueBidderCount " :false, " bidHistoryUrl " :null, " showQtyPurchased " :false, " showQtyRemaining " :true, " txnSaleDate " :null, " startTime " :1463064883000, " endTime " :1483800883000, " endTimeMs " :1483800883000, " timeLeft " :{ " minutesLeft " :40, " daysLeft " :8, " hoursLeft " :21, " secondsLeft " :47}, " locale " : " en_US " , " duringCheckoutGXOUrl " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?BinController & rev=4 & fromPage=2047675 & item=252387403511 & _trksid=p2047675.l2646 & gch=1 & fb=1 " , " duringCheckoutXOUrl " : " https:\u002F\u002Fpay.ebay.com\u002Fxo?action=create & rypsvc=true & pagename=ryp & TransactionId=-1 & item=252387403511 " , " itemRevisionTimestamp " :0, " goTogetherModel " :null, " groupGiftModel " :null, " currentVatPrice " :null, " binVatPrice " :null, " currentVatConvertedPrice " :null, " binVatConvertedPrice " :null, " disableMerchOnVI " :false, " quantity " :null, " currencyCode " : " USD " , " itmConditionVisibilityKey " :null, " viewedSeoFrameUrl " :null, " flowersCutoffTime " :9, " financePartnerUrl " :null, " vehicleInspectionUrl " :null, " rateKickUrl " :null, " geicoUrl " :null, " weGoLookUrl " :null, " itemUrl " :null, " enableAfreshInterval " :true, " cartLayerURL " : " http:\u002F\u002Fcart.payments.ebay.com\u002Fsc\u002Fatc " , " itemDescSnippet " :null, " qtyNotAvailable " :false, " buyerLoginNameSha " :null, " giftExperience " :null, " liteUrlPrefixForListing " :null, " siteId " :0, " expired " :false, " bin " :true, " liveAuctionItem " :false, " gtc " :true, " halfOnCore " :false, " autoVehicle " :false, " listingSiteId " :0, " bestOffer " :true, " classifiedAd " :false, " binAvailable " :true, " ended " :false, " bid " :false, " won " :false, " reserveNotMet " :false, " sold " :false, " euBasePrice " :null, " pricingTreatment " : " NONE " , " minAdvertisedPriceExposure " : " NONE " , " originalRetailPrice " :null, " amtSaved " :null, " soldOnEBay " :false, " soldOffEBay " :false, " savingsPercent " :null, " promoSaleOn " :false, " promoSaleTimeLeft " :null, " originalPrice " :null, " discountedPrice " :null, " discountedPercentage " :0, " shopCart " :true, " itemInCart " :false, " bulkAddToCartEnabled " :true, " bulkShopCartURL " : " http:\u002F\u002Fcart.payments.ebay.com\u002Fsc\u002Fadd?srt=01000100000050a67e65b61429f0f067735327440c768666fd1e8de8b58defa95b53661a060acb6ebdd0804b7715a8892de51e331b2f353f5be017c2c7071b896d5889d214b7d66402399f8c0b3e9cefdbfdb84125a9a6 & ssPageName=CART:ATC " , " itemBinnable " :true, " availableQuantityThreshold " :10, " sellerView " :false, " supressQty " :false, " pudoavailable " :false, " conditionDetailEnabled " :true, " conditionDetail " : " Excellent condition. Comes with power strips. " , " binLayerEnabled " :false, " binLayerSigninRedirectVIEnabled " :false, " binLayer " :false, " buyerGuaranteeEnabled " :true, " bopisatfredesign " :false, " itemRevised " :true, " buyerGuaranteeUnavailabilityReasonCode " : " DEFAULT " , " itemDescSnippetsEnabledV1 " :false, " itemDescSnippetsEnabledV2 " :false, " motorsComScoreTracking " :null, " freeVHREnabled " :false, " financeTabEnabled " :false, " buildRateKickLink " :false, " buildGEICOLink " :false, " vppEnabled " :false, " autoCars " :false, " autoMotorCycles " :false, " autoPowerSports " :false, " addVehicleInspectionRTM " :false, " redPaymentsAbfEnabled " :false, " timeLeftUrgencyRed " :true, " swapButtonColors " :false, " buyerGuaranteePCEnabled " :true, " bidingAvailable " :false, " showBOPIS " :false, " bopisavailableForUser " :false, " encodeBOPISURL " :true, " pudoSymphonyPilotSeller " :false, " showEBN " :false, " duringCheckoutUrl " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?BinConfirm & rev=4 & fromPage=2047675 & item=252387403511 & _trksid=p2047675.l2646 & fb=1 " , " addXOQuantityParam " :false, " binController " :false, " binOnLoad " :false, " bidMore " :false, " buyAnother " :false, " defaultBulkShopCartURL " : " http:\u002F\u002Fcart.payments.ebay.com\u002Fsc\u002Fadd?item=iid:252387403511,qty:1 & srt=010001000000506ea29e3fe13fb5b64431566f3b6f104953116192554590124bf1dbd1be7ea88c78ee29d4995f83fe4ec81ab716854116fe96b0a8ad32953c7834e989c0cac7e1279bc929807757ebe245b9750f456aac & ssPageName=CART:ATC " , " cartLayerEnabled " :false, " nonJS " :false, " dealsItem " :false, " scheduled " :false, " buyerView " :false, " newCVIPView " :false, " origClosedViewItemUrl " :null, " bestOfferLayer " :true, " boOnLoad " :false, " realEstateItem " :false, " showBidLayer " :true, " oneClickBid " :false, " saveOnOriginalRetailPrice " :null, " saveOnOriginalPrice " :null, " minRemnantSetEnabled " :false, " remnantSetValue " :0, " signedIn " :false, " caautoVehicle " :false, " ebpbannerRedesign " :false, " itemRevisionDate " : " Sep 21, 2016 07:15:07 PDT " , " itemRevisionLink " : " http:\u002F\u002Fcgi.ebay.com\u002Fws\u002FeBayISAPI.dll?ViewItemRevisionDetails & item=252387403511 & rt=nc & _trksid=p2047675.l2569 " , " percentOff " :null, " adminView " :false, " privateSale " :false, " vatIncluded " :false, " vatExcluded " :false, " flowersCatItem " :false, " bincounterEnabled " :false, " abincounterEnabled " :true, " relativeEndTime " :true, " digitalGiftCard " :false, " dsplStpHlpIcon " :false, " dsplStpLblVar " :false, " hideStpHlpIcon " :false, " emailDigitalDeliveryItem " :false, " multiQtyEnabledForGifting " :true, " versionView " :false, " previewItem " :false, " reviewOffer " :false, " signInUrlWithCartLayerReturn " :null, " printView " :false, " ushipEnabled " :false, " showDealsItemSignal " :false, " liveAuctionHidePayNow " :false, " buildWeGoLookLink " :false, " key " : " ItemSummary " }},0,0,0,['com.ebay.raptor.vi.VIButton','w1-16',{ " isCSS3 " :true, " mouseDownClass " : " md " , " btnId " : " binBtn_btn " },'w1-15','binBtn'],['ebay.viewItem.Cart','w1-17',{ " id " : " isCartBtn_btn " , " isBulkCart " :true, " cartOlayId " : " isCartBtn_olay " , " hasWrtyIntercept " :false, " cartUrl " : " http:\u002F\u002Fcart.payments.ebay.com\u002Fsc\u002Fadd?srt=01000100000050a67e65b61429f0f067735327440c768666fd1e8de8b58defa95b53661a060acb6ebdd0804b7715a8892de51e331b2f353f5be017c2c7071b896d5889d214b7d66402399f8c0b3e9cefdbfdb84125a9a6 & ssPageName=CART:ATC " , " itemId " :252387403511, " cartBtnId " : " isCartBtn_btn " },'w1-15','isCartBtn',0,['com.ebay.raptor.vi.VIButton','w1-18',{ " isCSS3 " :true, " mouseDownClass " : " md " , " btnId " : " isCartBtn_btn " },'w1-17','isCartBtn']],['com.ebay.raptor.vi.VIButton','w1-19',{ " isCSS3 " :true, " mouseDownClass " : " md " , " btnId " : " boBtn_btn " },'w1-15','boBtn'],['raptor.vi.BestOfferRedesign','w1-20',{ " mkQkBoSiUrl " : " https:\u002F\u002Fsignin.ebay.com\u002Fws\u002FeBayISAPI.dll?SignIn & ru=http%3A%2F%2Fwww.ebay.com%2Fitm%2F252387403511%3Fboolp%3D1 " , " mkQkBoUrl " : " http:\u002F\u002Fwww.ebay.com\u002Ftxn\u002Fbo\u002FshowBuyerOffer?itemId=252387403511 " , " boOlyId " : " bstofr " , " boTrbrId " : " _BO_TRBR_ID " , " boCntId " : " _BO_CNT_ID " , " boOnLoad " :false, " signedIn " :false, " itemId " : " 252387403511 " },0,0,0,['ui.Overlay','w1-21',{ " ariaLable " : " Best offer layer is opened. Escape or Close will close the layer and refresh the page. " , " id " : " bstofr " , " accessible " :true, " enableAutoFocus " :true, " noFixedPos " :true, " closeTitle " : " Close button. This closes the best offer layer and refreshes the page. " , " modal " :true, " hasCloseButton " :true},'w1-20','bstofr']]],['ebay.viewItem.AddToWatchBtmLnkR1','w1-22',{ " atwtxt " : " Add to watch list " , " isWatched " :false, " watchName " : " Watch " , " watchersElmSelector " : " #vi-bybox-watchers-container #vi-bybox-watchers " , " removeListUrl " : " http:\u002F\u002Fmy.ebay.com\u002Fws\u002FeBayISAPI.dll?MyEbayBeta & SubmitAction.DeleteListEntries=x & vi=true " , " itemId " : " 252387403511 " , " watchFullId " : " vi-atw-full " , " defaultWatchCount " :1, " isUserSignedIn " :false, " isItemEnded " :false, " myEbayWatchListUrl " : " http:\u002F\u002Fmy.ebay.com\u002Fws\u002FeBayISAPI.dll?MyEbayBeta & CurrentPage=MyeBayNextWatching & ssPageName=STRK:ME:LNLK:MEWAX " , " watchersLabel " : " \u003Cspan class=\ " vi-buybox-watchcount\ " & gt; -1\u003C\u002Fspan & gt; watching " , " watwtxt " : " Watching " , " isNewRaptorCmd " :true, " addToWatchUrl " : " http:\u002F\u002Fwww.ebay.com\u002Fmyb\u002FWatchListAdd?_trksid=p2047675.l1360 & SubmitAction.AddToListVI=x & item=252387403511 & rt=nc & srt=01000100000050f16155c262b7a494a1fed123e6033302a0c0b39db55aed6cfad8300fc5b080a588ed3fdeaa1b60b10dd9c75cdc0da621aadf0a5c6f095abb40569b6a99f3a793b195435654792deadf83994ca78a9b1b & wt=5b03cc5bec819782f52c833f0f811dee & ssPageName=VIP:watchlink:top:en & sourcePage=4340 " , " msku " :false, " watchlnkId " : " vi-atl-lnk " , " watchListId " : " -99 " , " watcherLabel " : " \u003Cspan class=\ " vi-buybox-watchcount\ " & gt; -1\u003C\u002Fspan & gt; watching " }],['ui.Overlay','w1-23',{ " ariaLable " : " Delivery help overlay is opened. " , " position " : " pointer " , " id " : " imprtoly " , " pointerType " : " horizontal " , " trigger " : " imprthlp " , " closeOnBodyClick " :true, " accessible " :true, " enableAutoFocus " :true, " closeTitle " : " Close button. This closes the delivery help overlay. " , " ariaDesc " : " You are inside the delivery help overlay. " , " hasCloseButton " :true}],['raptor.vi.InsCalcOverlay','w1-24',{ " insCalcErrId " : " INS_CALC_ERR_DIV_ID " , " insCalcOlyId " : " insCalc " , " insCalcOlyDivId " : " INS_CALC_DIV_ID " , " insCalcTimeout " :3500, " insCalcUrl " : " https:\u002F\u002Fcreditapply.paypal.com\u002Fapply?guid=YKDL34U2 & assetId=99SAC & enableApply=true & amount=100.0 & currency=USD " , " insCalcTrbrId " : " INS_CALC_TRBR_ID " },0,0,0,['ui.Overlay','w1-25',{ " ariaLable " : " Installment calculator layer is opened. Escape or Close will close the layer. " , " position " : " center " , " id " : " insCalc " , " width " : " auto " , " accessible " :true, " enableAutoFocus " :true, " noFixedPos " :true, " closeTitle " : " Close button. This closes the Installment calculator layer. " , " ariaDesc " : " You are inside the Installment calculator overlay. " , " modal " :true, " hasCloseButton " :true},'w1-24','insCalc']],['com.ebay.raptor.vi.isum.buyerProtection','w1-26',{ " isAutoVehicle " :false, " siteUrl " : " http%3A%2F%2Fpages.ebay.com%2Febaybuyerprotection%2Findex.html " , " siteId " :0, " ebpVarWidthId " : " ebpVarWidth " , " isTwoCol " :false, " ebpHdrId " : " ebpHdr " }],['ui.Overlay','w1-27',{ " position " : " pointer " , " id " : " itmCondDscOly " , " pointerType " : " horizontal " , " trigger " : " itmCondOlyhlpIcon " , " closeOnBodyClick " :true, " triggerMode " : " click " , " width " : " 270 " , " hasCloseButton " :true}],['com.ebay.raptor.vi.Description','w1-28',{ " tgto " : " http:\u002F\u002Fvi.vipr.ebaydesc.com " , " descSnippetEnabled " :false, " logDescTimer " :true}],['com.ebay.raptor.vi.shipping.CalculateShipping','w1-29',{ " isEBNOnly " :false, " zipBx " : " shZipCode " , " isPUDO " :false, " isPaypalAccepted " :true, " isBOPIS " :false, " isPaidPUDO " :false, " countryZipMap " :{ " 2 " :true, " 1 " :true}, " qtyBx " : " shQuantity " , " id " : " sh_calc " , " getRatesBtn " : " shGetRates " , " siteId " :0, " isDePudoEnabled " :true, " getRatesUrl " : " http:\u002F\u002Fwww.ebay.com\u002Fitm\u002Fgetrates?item=252387403511 & _trksid=p2047675.l2682 " , " remQty " :4, " countryDd " : " shCountry " , " isEPLUSOnly " :false}],['com.ebay.raptor.vi.bid.BidLayer','w1-30',{ " svcId " : " _OPN_POWB_LAYER " , " invokeClkId " : " _OPN_ONLOAD_POWB_LAYER " , " openOnLoad " :false, " overlayId " : " powerBid " },0,0,0,['ui.Overlay','w1-31',{ " ariaLable " : " Bid layer is opened. Escape or Close will close the layer and refresh the page. " , " id " : " powerBid " , " width " : " 520 " , " accessible " :true, " noFixedPos " :true, " closeTitle " : " Close button. This closes the bid layer and refreshes the page. " , " modal " :true, " hasCloseButton " :true},'w1-30','powerBid',0,['com.ebay.raptor.vi.bid.powerbid.PowerBid','w1-32',{ " topBubbleId " : " vi_oly_powHelpTopOly " , " bidBtnTxtNewId " : " w1-32-_btnTxtNew " , " disclaimerId " : " w1-32-_disc " , " bidSmsCollapseId " : " w1-32-_collapse " , " minToBidOBDynTxtId " : " w1-32-_minToBidOBDynTxt " , " minBidHBTxt " : " w1-32-_minToBidHighBidder " , " OUTBIDDER_BY_SMART_BID " : " w1-32-_outbidBySmartBid " , " maxbidUrl " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?MakeQuickBid & f=json & fromPage=2047675 & uiid=953191749 & item=252387403511 & dl=2 & _trksid=p2047675.l5829 & flow=bm & isnullzero=true & stok=-743467935 & mode=1 " , " rgtBubbleId " : " vi_oly_powHelpRightOly " , " twoXConfirmUrl " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?MakeQuickBid & f=json & fromPage=2047675 & uiid=953191749 & item=252387403511 & dl=2 & _trksid=p2047675.l5529 & flow=bm & isnullzero=true & stok=-743467935 & mode=1 " , " submitPanelId " : " w1-32-_submitPanel " , " wrapper " : " _wrp " , " maxBidParamName " : " maxbid " , " approxBtnNew " : " Approx. " , " inlineFeedbackId " : " w1-32-_inlineFeedback " , " freeTxt " : " Free " , " impChBidTxtId " : " w1-32-_impChBid " , " freeShippingNewId " : " w1-32-_freeShippingNew " , " minToBidHBDynTxtId " : " w1-32-_minToBidHBDynTxt " , " maxbid_HIGHBIDDER_AGAIN_1 " : " w1-32-_mbhighBidAgain_1 " , " txt2_btn " : " _txt2_btn " , " bidSmsRemExpId " : " w1-32-_remexpand " , " showBanner " :false, " dayTxt " : " w1-32-_day " , " bidCountDynTxt " : " ##2## Bid " , " bidSmsSuccExpId " : " w1-32-_succexpand " , " txt0 " : " _txt0 " , " preBidId " : " w1-32-_preBid " , " txt1 " : " _txt1 " , " txt2 " : " _txt2 " , " txt3 " : " _txt3 " , " DECSEP " : " w1-32-_decsep " , " aprroxTopICId " : " w1-32-_aprroxTopIC " , " bidSmsSuccessId " : " w1-32-_collspan " , " highBidTopSectionId " : " w1-32-_highBidTopSec " , " detailLevelId " :0, " dummy " : " ##1## " , " HIGHBIDDER_FIRST " : " w1-32-_highBidFrst " , " maxbid_HIGHBIDDER_AGAIN_2 " : " w1-32-_mbhighBidAgain_2 " , " bidCountId " : " w1-32-_bidCount " , " currencyId " : " w1-32-_currency " , " link " : " _lnk " , " hourTxt " : " w1-32-_hour " , " approxTxt " : " w1-32-_approximately " , " seeMoreHelpId " : " w1-32-_seeMoreHelp " , " conTitle " : " w1-32-_confirmTitle " , " variant " :14, " pbTitle " : " w1-32-_plaBidTitle " , " ebayBidSectionId " : " w1-32-_ebayBidSec " , " btn " : " _btn " , " loadingId " : " w1-32-_loading " , " maxbid_HIGHBIDDER_FIRST " : " w1-32-_mbhighBidFrst " , " isAccessibilityOffScreenTimerOn " :true, " bidSmsId " : " w1-32-_bidSms " , " min " : " _min " , " MIN_BID_ERROR_STATUS " : " w1-32-_errmin " , " cnt " : " _cnt " , " freeShipLabel " : " Free shipping " , " HIGHBIDDER " : " w1-32-_highBid " , " maxbid_LOW_BIDAMOUNT " : " w1-32-_mblowBid " , " bidSmsNumId " : " w1-32-_succnum " , " exclVAT " : " _exvat " , " reviewConfirmUrl " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?MakeQuickBid & f=json & fromPage=2047675 & uiid=953191749 & item=252387403511 & dl=2 & _trksid=p2047675.l5830 & flow=bm & isnullzero=true & stok=-743467935 & mode=1 " , " txt_gamf_1 " : " _txt_gamf_1 " , " incMaxBidTxt " : " w1-32-_increaseMaxBidTxt " , " refreshUrl " : " http:\u002F\u002Fwww.ebay.com\u002Fitm\u002FBrightSign-HD920A-Digital-Signage-Player-Retail-Display-HDMI-Solid-State-Media-\u002F252387403511? & autorefresh=true " , " helplayerId " : " w1-32-_helplayer " , " bidTitleId " : " w1-32-_bidTitle " , " bidBtnTxtNowNewId " : " w1-32-_btnTxtNewNow " , " shippingId " : " w1-32-_shp " , " freeShpTxt " : " w1-32-_freeShipping " , " layerWrapper " : " w1-32-_layerWrap " , " reviewSectionId " : " w1-32-_reviewBidSec " , " yourMaxBidTxt " : " w1-32-_yourMaximumBid " , " belowBidTxt " : " bid " , " approxAmtNewId " : " w1-32-_approxAmtNew " , " INVALID_BIDAMOUNT_OF_HIGH_BIDDER " : " w1-32-_invalidHighBid " , " HIGHBIDDER_1_MAX_BID_AWAY " : " w1-32-_highBid1MaxBidAway " , " bidSmsCty " : " w1-32-_ctry " , " HIGHBIDDER_60_MIN_LEFT " : " w1-32-_highBid60MinsLeft " , " evtNS " : " .w1-32-_ns " , " belowBidsTxtId " : " w1-32-_belowBTxt " , " lable " : " _lbl " , " shipAmtNewId " : " w1-32-_shipAmtNew " , " secondCharTxt " : " w1-32-_s " , " inclVAT " : " _invat " , " bidSmsImgSc " : " w1-32-_collimgSc " , " value " : " _val " , " bidSmsPhone2 " : " w1-32-_phone2 " , " placeBidSectionId " : " w1-32-_placeBidSec " , " bidsCountDynTxt " : " ##2## Bids " , " LOW_BIDAMOUNT " : " w1-32-_lowBid " , " bidSmsElapTime " : " w1-32-_eltime " , " resumeBidId " : " w1-32-_resume " , " txt1_btn " : " _txt1_btn " , " lessTimeCss " : " redTime " , " impChId " : " w1-32-_impCh " , " oneXConfirmUrl " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?MakeQuickBid & f=json & fromPage=2047675 & uiid=953191749 & item=252387403511 & dl=2 & _trksid=p2047675.l5528 & flow=bm & isnullzero=true & stok=-743467935 & mode=1 " , " svcId " : " _OPN_POWB_LAYER " , " nowTxt " : " now " , " minBidTxt " : " w1-32-_minToBid " , " maxbid_OUTBIDDER_BY_MATCHING_BID_2 " : " w1-32-_mboutbidByMatchingBid2 " , " BUYER_BLOCKED_NO_LINKED_PAYPAL_ACCOUNT " : " w1-32-_noPaypal " , " maxbid_OUTBIDDER_BY_MATCHING_BID_1 " : " w1-32-_mboutbidByMatchingBid1 " , " bidSmsEnabled " :false, " bidSmsExpId " : " w1-32-_expand " , " calcImportChargeUrl " : " http:\u002F\u002Fwww.ebay.com\u002Fitm\u002Fgetrates?item=252387403511 & quantity=1 & _trksid=p2047675.l2681 " , " bidSmsCity " : " w1-32-_city " , " isRefreshOnClose " :true, " statusMsgId " : " w1-32-_statusMsg " , " confirmURL " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?MakeQuickBid & f=json & fromPage=2047675 & uiid=953191749 & item=252387403511 & dl=2 & flow=bm & isnullzero=true & stok=-743467935 & mode=1 " , " bidSmsImgMb " : " w1-32-_collimgMb " , " defaultShpTxtNew " : " w1-32-_shippingDefaultNew " , " maxbid_OUTBIDDER_BY_MAX_BID_1 " : " w1-32-_mboutbidBySmartBid1 " , " INVALID_BIDAMOUNT " : " w1-32-_invalidBid " , " counterStartSvcId " : " COUNTER_START_SVC_ID " , " maxbid_OUTBIDDER_BY_INC_BID_1 " : " w1-32-_mboutBid1 " , " approx " : " _approx " , " maxbid_OUTBIDDER_BY_INC_BID_2 " : " w1-32-_mboutBid2 " , " maxbid_OUTBIDDER_BY_MAX_BID_2 " : " w1-32-_mboutbidBySmartBid2 " , " olyId " : " vi_oly_powerBid " , " counterStopSvcId " : " COUNTER_STOP_SVC_ID " , " BID_GREATER_THAN_BIN " : " w1-32-_moreThanBin " , " defaultShpTxt " : " w1-32-_shippingDefault " , " curBidId " : " w1-32-_cur " , " hourCharTxt " : " w1-32-_h " , " topPanelId " : " w1-32-_topPanel " , " defaultImpChargeTxt " : " w1-32-_impChargeDefault " , " belowBidsTxt " : " bids " , " fiveXConfirmUrl " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?MakeQuickBid & f=json & fromPage=2047675 & uiid=953191749 & item=252387403511 & dl=2 & _trksid=p2047675.l5530 & flow=bm & isnullzero=true & stok=-743467935 & mode=1 " , " bidSmsSuccess3 " : " w1-32-_colltxt " , " minuteCharTxt " : " w1-32-_m " , " timeLeftId " : " w1-32-_timeLeft " , " maxbid_HIGHBIDDER_1 " : " w1-32-_mbhighBid1 " , " maxbid_HIGHBIDDER_2 " : " w1-32-_mbhighBid2 " , " showReviewScreen " :false, " bidSmsPhone1 " : " w1-32-_phone1 " , " bidSectionId " : " w1-32-_bidSec " , " overlayId " : " powerBid " , " autoRefreshSvcId " : " AUTO_REFRESH_SVC " , " dayCharTxt " : " w1-32-_d " , " revTitle " : " w1-32-_revTitle " , " counterSvcId " : " COUNTER_SVC_ID " , " OUTBIDDER " : " w1-32-_outBid " , " topHelpTxtId " : " w1-32-_topHelpTxt " , " enableAFAlways " :true, " hoursTxt " : " w1-32-_hours " , " timeLeftDynTxt " : " ##2## left " , " HIGHBIDDER_RESERVE_NOT_MET " : " w1-32-_highBidReserveNotMet " , " bidBtnTxt " : " Bid " , " powerBidInitURL " : " https:\u002F\u002Fsignin.ebay.com\u002Fws\u002FeBayISAPI.dll?SignIn & ru=http%3A%2F%2Fwww.ebay.com%2Fitm%2F252387403511%3Fpb%3D14%26bolp%3D1 " , " seperatorId " : " w1-32-_seperator " },'w1-31','w1-30-_cnt',0,['com.ebay.raptor.vi.VIButton','w1-33',{ " isCSS3 " :true, " mouseDownClass " : " md " , " btnId " : " w1-32-_reviewBidSec_btn " },'w1-32','w1-32-_reviewBidSec_btn'],['com.ebay.raptor.vi.VIButton','w1-34',{ " isCSS3 " :true, " mouseDownClass " : " md " , " btnId " : " w1-32-_placeBidSec_btn_1 " },'w1-32','w1-32-_placeBidSec_btn_1'],['com.ebay.raptor.vi.VIButton','w1-35',{ " isCSS3 " :true, " mouseDownClass " : " md " , " btnId " : " w1-32-_placeBidSec_btn_2 " },'w1-32','w1-32-_placeBidSec_btn_2'],['com.ebay.raptor.vi.VIButton','w1-36',{ " isCSS3 " :true, " mouseDownClass " : " md " , " btnId " : " w1-32-_placeBidSec_btn_3 " },'w1-32','w1-32-_placeBidSec_btn_3'],['com.ebay.raptor.vi.VIButton','w1-37',{ " isCSS3 " :true, " mouseDownClass " : " md " , " btnId " : " w1-32-_ebayBidSec_btn " },'w1-32','w1-32-_ebayBidSec_btn'],['com.ebay.raptor.vi.bid.powerbid.inlineSurvey.inlineSurvey','w1-38',{ " surveyUrl " : " http:\u002F\u002Fqu.ebay.com\u002Fsrp_survey_update " , " linkId " : " powerBidSurvey " , " inlineFeedbackId " : " w1-32-_inlineFeedback " , " surveyName " : " transaction-flows (bid-layer-redesign) " , " defaultTxt " : " Input comments here. " , " variant " : " 14 " , " treatments " : " 33297%7C35787%7C32601%7C16228%7C37890%7C11576%7C37247%7C38948%7C38692%7C38035%7C35889%7C40627%7C32772%7C36065%7C37350%7C39703%7C10192%7C37605%7C37859%7C37212%7C37511%7C39086%7C40429%7C19566%7C15235%7C38691%7C37338%7C38871%7C35320%7C35919%7C37784%7C31348%7C40128%7C " }]]]],['com.ebay.raptor.vi.bid.BidLayer','w1-39',{ " svcId " : " w1-39-_oly " , " invokeClkId " : " _OPN_ONLOAD_OCB_LAYER " , " openOnLoad " :false, " overlayId " : " w1-39-_olp " },0,0,0,['ui.Overlay','w1-40',{ " ariaLable " : " One click bid layer is opened. " , " id " : " w1-39-_olp " , " width " : " 500 " , " accessible " :true, " enableAutoFocus " :true, " noFixedPos " :true, " closeTitle " : " Close button. This closes the one click bid layer. " , " modal " :true, " hasCloseButton " :true, " draggable " :true},'w1-39','w1-39-_olp',0,['com.ebay.raptor.vi.bid.oneclick.OneClickBid','w1-41',{ " winningBidTxt " : " w1-41-_win " , " secondTxt " : " w1-41-_sec " , " disclaimerId " : " w1-41-_disc " , " bidInitURL " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?MakeQuickBid & f=json & fromPage=2047675 & item=252387403511 & flow=ocb & mode=0 " , " lable " : " _lbl " , " closeId " : " w1-41-_cls " , " OUTBIDDER_STATUS " : " w1-41-_out " , " wrapper " : " _wrp " , " maxBidParamName " : " maxbid " , " successClz " : " sccs " , " value " : " _val " , " HIGHBIDDER_STATUS " : " w1-41-_high " , " minutesTxt " : " w1-41-_mins " , " learnMoreId " : " w1-41-_lrn " , " daysTxt " : " w1-41-_day " , " MAKE_BID_ERROR_STATUS " : " w1-41-_errmake " , " dayTxt " : " w1-41-_day " , " olySvcId " : " w1-39-_oly " , " startingBidTxt " : " w1-41-_start " , " enterBidId " : " w1-41-_enter " , " svcId " : " _OPN_OCB_LAYER " , " closeTxt " : " w1-41-_close " , " invokeClkId " : " _OPN_ONLOAD_OCB_LAYER " , " bidBtnId " : " w1-41-_ocb " , " bidURL " : " http:\u002F\u002Foffer.ebay.com\u002Fws\u002FeBayISAPI.dll?MakeQuickBid & f=json & fromPage=2047675 & uiid=953191749 & item=252387403511 & flow=ocb & stok=-743467935 & mode=1 " , " openOnLoad " :false, " minuteTxt " : " w1-41-_min " , " dummy " : " ##1## " , " reviewBidId " : " w1-41-_review " , " isRefreshOnClose " :true, " statusMsgId " : " w1-41-_statusMsg " , " AUCTION_ENDED_WINNER " : " w1-41-_aewin " , " currencyId " : " w1-41-_currency " , " hourTxt " : " w1-41-_hour " , " approxTxt " : " w1-41-_approximately " , " errorClz " : " err " , " counterStartSvcId " : " COUNTER_START_SVC_ID " , " approx " : " _approx " , " btn " : " _btn " , " secondsTxt " : " w1-41-_secs " , " counterStopSvcId " : " COUNTER_STOP_SVC_ID " , " curBidId " : " w1-41-_cur " , " updateURL " : " http:\u002F\u002Fwww.ebay.com\u002Flit\u002Fv1\u002Fitem?item=252387403511 & si=3sQOf9j3fkXjCZ5gmeZmlKqJ9Y0%3D " , " warningClz " : " wrng " , " timeLeftId " : " w1-41-_timeLeft " , " MIN_BID_ERROR_STATUS " : " w1-41-_errmin " , " detailLevel " :6, " updateId " : " w1-41-_updt " , " overlayId " : " w1-39-_olp " , " AUCTION_ENDED_OUTBID " : " w1-41-_aeout " , " refreshUrl " : " http:\u002F\u002Fwww.ebay.com\u002Fitm\u002FBrightSign-HD920A-Digital-Signage-Player-Retail-Display-HDMI-Solid-State-Media-\u002F252387403511? & autorefresh=true " , " AUCTION_ENDED_RESERVE_NOT_MET " : " w1-41-_aenrwin " , " autoRefreshSvcId " : " AUTO_REFRESH_SVC " , " counterSvcId " : " COUNTER_SVC_ID " , " hoursTxt " : " w1-41-_hours " , " HIGH_BID_ERROR_STATUS " : " w1-41-_errhigh " , " HIGHBIDDER_RESERVE_NOT_MET_STATUS " : " w1-41-_highnr " },'w1-40','w1-39-_cnt',0,['com.ebay.raptor.vi.StatusMsg','w1-42',{ " message " : " w1-42-_m " , " sizeClz " : " smi-o " , " smClz " : " sm-o " , " outer " : " w1-42-_o " , " isRefresh " :false},'w1-41','w1-41-_statusMsg'],['com.ebay.raptor.vi.VIButton','w1-43',{ " isCSS3 " :true, " mouseDownClass " : " md " , " btnId " : " w1-41-_ocb_btn " },'w1-41','w1-41-_ocb']]]],['com.ebay.raptor.vi.isum.smartBackTo','w1-44',{ " smtBackToAnchorId " : " smtBackToAnchorBTF " , " showIcon " :false, " isBacktoSearch " :false}],['raptor.merch.MerchManager','w1-45',{ " enableOnScroll " :true, " pids " :[ " 100009 " , " 100010 " , " 100047 " ], " customCallbackHandler " :false, " loadJsAsync " :false, " merchRaptorEnabled " :true, " url " : " http:\u002F\u002Fwww.ebay.com\u002Frec\u002Fplmt\u002F100009-100010-100047?itm=252387403511 & fmt=html & usrSt=4 & locale=en-US & ctg=46701 & slr=1175748767 & si=0 & guid=5de2c61d1580abc55f84d44ff5bd9b29 & bWidth=1215 & cguid=5de2c6201580abc55f84d44ff5bd9b27 & srchCtxt=%28dmLCat%3D-1%7CsrCnt%3D0%7CmCCatId%3D0%7CminPrice%3D-1.0%7CmaxPrice%3D-1.0%7CcrncyId%3D840%7CfShip%3D0%7Cetrs%3D0%29 & usrSi=PL & _qi=t6ulcpjqcj9%3Fjqpsobtlrbn%28%3E1507 " , " th " :1000}]);new (raptor.require('raptor.tracking.core.Tracker'))({ " psi " : " AkugMbKw* " , " rover " :{ " imp " : " /roverimp/0/0/9 " , " clk " : " /roverclk/0/0/9 " , " uri " : " http://rover.ebay.com " }, " pid " : " p2047675 " });raptor.require('raptor.tracking.idmap.IdMap').roverService( " http://rover.ebay.com/idmap/0?footer " );})();

body.prevent-scroll {overflow: hidden; margin-right: 15px;}.lens-zoom {cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in;}.lens-modal {position:absolute;top:7%;left:50%;width:962px;margin-left:-481px;overflow:visible;outline:none;border-radius:3px;min-height:100px;display:none;}.lens-modal-wrapper {position:fixed;left:0;top:0;width:100%;height:100%;display:none;overflow: auto;-webkit-overflow-scrolling:touch;background-color: rgba(0, 0, 0, 0.7);filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr= " #AA000000 " , endColorstr= " #AA000000 " );}.lens-modal-backdrop {position:absolute;left:0;top:0;right:0;bottom:0;}.lens-modal-close {position:fixed;z-index:1;height:48px;width:60px;background-color:#fff;right:20px;top:0;border:0;border-radius:0 0 3px 3px;font-size:20px;color:#AAA;cursor:pointer;font-weight:bold;-moz-box-shadow:1px 1px 10px #333;-webkit-box-shadow: 1px 1px 10px #333;box-shadow: 1px 1px 10px #333;-webkit-transform: translateZ(0);-moz-transform: translateZ(0);-ms-transform: translateZ(0);transform: translateZ(0);}.lens-modal-close:hover {color: #00509d;}.lens-modal-throbber {background: url( " http://p.ebaystatic.com/aw/eBay3.0/lensing/throbber_45px.gif " ) 50% 50% #FFF no-repeat;}@media (max-width: 962px) {.lens-modal{width:100%;margin-left:-50%;top:0}}@media (max-height: 768px) {.lens-modal{top:1%;}}

X .gf-mrecad{max-width:1200px;margin:30px auto}#gf-mrecs-ads & gt; div:not(#clrftr){width:300px;height:265px;overflow:hidden;float:left;margin:0 30px 30px 0}#gf-mrecs-ads & gt; div:nth-child(3){margin:0!important}body.gh-flex #gf-mrecs-ads{display:block}body.gh-flex .footerBGPost{display:none}body.gh-flex #gf-mrecs-ads & gt; div:nth-child(3){margin:0}body.gh-flex #gf-mrecs-ads & gt; div:not(#clrftr){margin:0 30px 30px 0}body.gh-flex #vFoot{padding:40px 30px}body.gh-1199 #gf-mrecs-ads & gt; div:not(#clrftr){margin:0 20px 20px 0}body.gh-1199 #vFoot{padding:40px 20px}body.gh-979 #gf-mrecs-ads{display:none!important}body.gh-979 .footerBGPost{display:block}#scandal100597{width:728px;height:105px;overflow:hidden;display:block;max-width:1200px;margin:16px auto 0}


BrightSign HD920A.rar > BTF.html

ad.doubleclick.net
/* Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. */

a {
color: #585858;
}

.bad-clock .icon {
background-image: -webkit-image-set(
url(data:image/png;base64,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) 1x,
url(data:image/png;base64,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) 2x);
}

body {
background-color: #f7f7f7;
color: #646464;
}

body.safe-browsing {
background-color: rgb(206, 52, 38);
color: white;
}

button {
-webkit-user-select: none;
background: rgb(66, 133, 244);
border: 0;
border-radius: 2px;
box-sizing: border-box;
color: #fff;
cursor: pointer;
float: right;
font-size: .875em;
margin: 0;
padding: 10px 24px;
transition: box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);
}

[dir='rtl'] button {
float: left;
}

button:active {
background: rgb(50, 102, 213);
outline: 0;
}

button:hover {
box-shadow: 0 1px 3px rgba(0, 0, 0, .50);
}

#debugging {
display: inline;
overflow: auto;
}

.debugging-content {
line-height: 1em;
margin-bottom: 0;
margin-top: 1em;
}

.debugging-title {
font-weight: bold;
}

#details {
color: #696969;
margin: 45px 0 50px;
}

#details p:not(:first-of-type) {
margin-top: 20px;
}

#details-button {
background: inherit;
border: 0;
float: none;
margin: 0;
padding: 10px 0;
text-transform: uppercase;
}

#details-button:hover {
box-shadow: inherit;
text-decoration: underline;
}

.error-code {
color: #696969;
display: inline;
font-size: .86667em;
margin-top: 15px;
opacity: .5;
text-transform: uppercase;
}

#error-debugging-info {
font-size: 0.8em;
}

h1 {
color: #333;
font-size: 1.6em;
font-weight: normal;
line-height: 1.25em;
margin-bottom: 16px;
}

h2 {
font-size: 1.2em;
font-weight: normal;
}

.hidden {
display: none;
}

html {
-webkit-text-size-adjust: 100%;
font-size: 125%;
}

.icon {
background-repeat: no-repeat;
background-size: 100%;
height: 72px;
margin: 0 0 40px;
width: 72px;
}

input[type=checkbox] {
opacity: 0;
}

input[type=checkbox]:focus ~ .checkbox {
outline: -webkit-focus-ring-color auto 5px;
}

.interstitial-wrapper {
box-sizing: border-box;
font-size: 1em;
line-height: 1.6em;
margin: 100px auto 0;
max-width: 600px;
width: 100%;
}

#main-message & gt; p {
display: inline;
}

#extended-reporting-opt-in {
font-size: .875em;
margin-top: 39px;
}

#extended-reporting-opt-in label {
position: relative;
}

.nav-wrapper {
margin-top: 51px;
}

.nav-wrapper::after {
clear: both;
content: '';
display: table;
width: 100%;
}

.safe-browsing :-webkit-any(
a, #details, #details-button, h1, h2, p, .small-link) {
color: white;
}

.safe-browsing button {
background-color: rgba(255, 255, 255, .15);
}

.safe-browsing button:active {
background-color: rgba(255, 255, 255, .25);
}

.safe-browsing button:hover {
box-shadow: 0 2px 3px rgba(0, 0, 0, .5);
}

.safe-browsing .error-code {
display: none;
}

.safe-browsing .new-icons {
background-image: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAA+VBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////9/f36+vr8/Pz7+/v7+/v7+/v7+/v////r6+vn5+fk5OT5+fn19fX4+Pju7u7v7+/o6Ojx8fH09PTy8vLz8/Pj4+P39/fm5ubp6eni4uL8/Pzw8PDt7e329vbs7Ozg4ODh4eHe3t7l5eX6+vrd3d3q6urf39/c3NzbRDf7+/vb29vW1tbZ2dk+D9arAAAALXRSTlMA/eIxBfACHj3YwhYJDyfOtfr2WHObgEqpjellgY6c6mZLV3L2qKjOZemN+rUv7NpAAAACcUlEQVR4Xu2U53baQBQGAxiMaQZT3Wt6rnql9uKW9v4Pk5XEspG4WFmJ/GMeYM635cy7/8yePXv23N7uxnNwdHSwE1ENoLYLTz4NkM7vQHQFhKv4nlQCCIlUbFEOXHJxPVVYUY3nKSSpKFmIJbqANRdxPIcnTHRyGEPUAga0onuy4CMb1ZM5Bh/HmYiiGwhwE81TvIYA18VIokvY4DKKp1SBDSqlCKIyIJT5PU1AafL3FVC4q1uDLdS4+4rCXd06bKXO21fKdxcNKFzVzUFQ9KoDJRehr0z0tBgBpcrfVyZavAxM7uo2ABHNO8s2NTW4+8pEs4HUMxS+6rYAEZFBYl+Y8FQ3C5hoIImGMNVVvLp4X1FRZ2n0BU035X+u7jmgomWv/zzWR23lB7ich/b1DBeRQVNNty1FHYLDWVh1TwEXic4gs6105UfPdMrd1/HCffrnqTayrYkqP3qmSom7r9q84xyMDLIUx7Mylfn7OvIGmbYyUYmGbmry99UWnYOZ7sFc5OHb1b2HLbS9QV1vED3dPX9fQXFuWiEeF9kzpfMcfaUZkbyn9+bQTfXwvm4W0iA3RNdQUyIV1lekkDOhSx3sdGh17+At0ctA0plDpr/gLqSvSI+kXt8mAj9DVl20r3hGBM0iOwKmBtZXHOPX79fFXCJ/Ure79Gxr40Owuu9hK8LPp1mnR7JmWuv7ZsM+oH3FGZObFoWx3iY/Ul1J2LVn0b7i6B2RZM1WumwL833MoH3FMQ1hPHIGsadnvk94X3EsctPE4xK8p89FvK84ExIRuoUa6Pt98fU1DJUMosj+3/S15OtrGOsB9LnYqm+e5w+es4JAhYQDdgAAAABJRU5ErkJggg==) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAADQmBKKAAABPlBMVEUAAAD////////////////////////////////6+vr7+/v7+/v7+/v9/f36+vr7+/v7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////////////8/Pz////5+fn////////6+vr////////8/Pz7+/v7+/v////k5OTh4eHf39/e3t7g4OD6+vrbRDf5+fnv7+/x8fH09PTY2Njc3Nz39/fq6ur4+Pjz8/Pn5+f7+/vZ2dnW1tbt7e3U1NTV1dXl5eXr6+v19fXy8vLs7Oz29vba2trb29vo6Ojm5ubu7u7d3d38/Pzp6enj4+Pi4uLw8PD///+BQ30nAAAAQHRSTlMAHhYFDzEJAifiwvb98M76PdjqtoGpZll0c46qj1icTJ1KS42A6WWb2WdadYK1cvCb/cJXV+KA9qioPc5l6Y36uRjySgAABXVJREFUeF7s1kuKwlAUBNDS+JtqggkkmODIH4gPRIgD11P730BDI6HV260Z1Wu4ZxUH/4tzzjnnnHPOOeecq2tEJdlsEsRkT+4RkeGRPA4Rj4YkG0RjfCLJ0xixCPwWEIkd73aIwuTMu/MEMTiwc4AeBhd2LgPolfyhhFzLBy3Eplc+uE6hteWTLaRGCz5ZjKBU8UUFodmNL24z6KQ0pJCpaaohksxpmifQKGhjIXurSbbZhr9qRG81yTYbaJJtNuefcsFbTbLNZnwjE7zVINtsybdK4VttreytHdlml/zIUvTWjmyzFT9USd7akW02pUm22TV7WOveKttswV4K1Vtlm12xp5XmrbLNBvYWhG+15YK3qjab0STb7Fcv5tmcOBKE4Q2Xc7KrTJW3yhs/2RsuZwvBjsQShPd0JxCyJVmA5v//getpgYextLSYKdHf+PbUO93No36Ht77eqHCvNnvASaBLp4rooClvpYGurpx92Sx6Kw3Uv873ZbOHvA7Qtd12m7ZZ6a00UN+225a7F5tt8XpA7Y61rJi1ViPeSgPZ7XZnuVh4zdsseisNhAEtzgOvaZt9yGsCdSwLeJKk16DNSm+lgSCghQAax9NGbfaI1wQSD7YIgnE8H0a3iY4a8FYSyMKAxgJoMqBs1txbaSDs6AR5Zv6Asllzb6WBIKAkiefzCQA5A8Jmjb2VBtoMKHXcUSM2e8x3ADoPAAh4Jr7v5G7IVKLjhr21DHS+DshP0xyAel3CZk29lQa6ebAUeLxe74KwWTNvpYGSFVDqOK4LPFF0QdisibfSQBsdjQFNo9EoI2zWxFtpINiJw+Fs5hcBTaeDwaibETar76000GZAnggIeLqSyNxmD/luQOM4LngceDBP8ACQSnTY+L111geRtqxlMfLDAsiFkV8H1GWSyNBmW7xO+eiJyo7O87B4MCaA1Ixazd9bUwgIgFYd7a8Dwo4GIqYQgc02f291kEcd+YJHVmZusye8djkAlKxHHnjEiEUIVOTDFKKTPdxbXdnRjghI7GjgUSqTNmvurTRRkMQAtBp53IkjJuNRiY72cW8NiwdLHdyJgmcdkGTKTGz2Gd+xPOhoGVAUjZgCo8zas33cW3lviFqWhyF2ND7YbaZM2qy5t9JEs8ITPexoJlFksUzTZo+5Tk3FiIWh7KAKpEzarLm30v/2ckczlYXdsGU6NvuY6wFdJjn+y4OXKR3EytP/WMNbNYD6Y9Ag8WCs/F4yo51t9oBrAoGJzJV/+WokJDow9NbaF7QJAKkNpMyb9KPfjL2VBrLtznLpQ0DlYNTKdrHZp1wfqA0iEjhMYsislN9I9LSmtz7RBxLmGCSxW9k9pYye1LPZR9wACNQagIbutgaSfvTI3Fvp+xDwgDd6ZERAVM9mT7kB0HIZJIn4Ekp7W+KRRKfG3kqfYyAg4HHy6ZZwpB+daHgrVfG///3z5u1l38aODsbFrcH1opJ7VPgRabNnfPeaI8+13REdPV4FBA4CRkQyZWekt2rU8M3lVREQns9AG4XmgxLRjc0+v0d4q1ZNVjznNw8WgsTiviaRXmh5K/19jzsaL+biwVwhsbeXdLUfffa+nrfSX9P4rYjnRcdFBWGSQ+KUf3/ybp7vuX6lFp7woaN9eDBxiUEIwCDH/wfCWzUrXwTrgLCj14rGuhTSxx8Q3qpZLnSQ4MlXHS2He8u+xvqJ8FbdCmEFTXxcQdFAJkPP2qfVNvsLNy1vjg9WBKQsQMKPfiW8Vbt6SkdLFkb50VeEt2rX1MGA4MHUlhkRfvTFh4S3alcEHaSczmr20R+Et+rXCDu63DJsux/9+R7hrQZE0NFEHlVh/UV4q0F1B6zSEdlWF/lSsdn/AccLgKctjBheAAAAAElFTkSuQmCC) 2x);
}

.safe-browsing .old-icons {
background-image: -webkit-image-set(
url(data:image/png;base64,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) 1x,
url(data:image/png;base64,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) 2x);
}

.small-link {
color: #696969;
font-size: .875em;
}

.ssl .new-icons {
background-image: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAABAlBMVEUAAADcRTfcRDfdRET/gIDcRjr/ZmbjVTncRDfcRTfcRDfdRDzgSTncRDjeSDvcRTjbRDfbRDjeRzvcRjfbRjjcRTjcRTjcRTfdRTfcRDjdRTjcRTjbRDjbRTjbRTjbRTfcRjjdRDrcRjfbRTjZQzfcRDjZRDfZRzbWQzXXRDXXQzbXQzbWQjXYSDvWQjbbRDfOQDPSQTTUQjXCPDDNPzPJPjLGPTHVQjXMPzPRQTTWQjXLPzPDPDHYQzbAOzDTQTXHPTLIPjK8Oi++Oy/FPTHEPTHPQDTQQDTUQTXBPDDKPjK/OzC9Oi/////PQDPRQDS3OS66OS7TQTTEPDHXQjbMPjMBhLaWAAAAL3RSTlMA4tgPAhYFCcL98B4x9ie1+s49WICbqXNKZY3pjuqcgVdLZnL2qKg9zmXpjfontV8LANsAAAJrSURBVHhe7ZTnduIwFAY3ARIgBAg9vW1v173ROylby/u/yso2Fx3MNaxs9h/zAHM+Sfa8+M/s2LFjx+3tdjwH+/sHWxHVAerb8KSyANnUFkRXwLiK78llgJHJxRalwSMd11OGOeV4nsM9FO0dxhJdw4LrOJ6jYy46PoohqgEHatE9JViiFNWTPIElTpIRRXcQ4C6aJ3EJAS4TkUQXsMJFFE++CCsU8xFEBSAoiHsaQNIQ7yuQCFe3DiHUhftKIlzdKoRSFe0r8sXDAkSoumkIigYaIOkIfeWi56EESFm8r1w0fFIl4epWgBA9qOMpmirCfeWijtoa9WSx6taAELFBRl/vilS3BJRIbRk9/VFTsLrifUXRuNfXLU0y/7m6p0CKxqN+v6lJU/k3eJxu7Os5LWKDHi1tYstKG1zON1X3DGiRMR80Mx3fdCbc1+bQe3o2SJrYXcV0fFMxL9xXiz0987BBtux65qaCeF8lHCR3FabBTQ3xvk4M1yN5B/Mw2+urew8hTP1BM38Qnu5evK8gMw+7IcfH9E3ZlEBfMSO//Kf35+Cm6ua+rhbSYDeEa9CUyW3qK1HIjj5DBz8dWd0bWCd6Ult/uMPEr+BmbV/JHrVG/a9MsEybV5fsK50R3frmBFXtCtVXmt73H4PhQ4t9k9rkJ55tYXwZrO4rCEUfPHfUEcuaZC/umw97TfaVpslu2tCb2lRWnBlKFtf+huwrjaa6Pxv7RfgW7nubJPtKI/X0puQO4k/Pfe/ovtLY7KbxVwve0/sE3VeaLosIbkEDvt8Hoq/hKGwQYvoq5OMnoq/hLAbgc/FVn33PX7pAfE5QHR6fAAAAAElFTkSuQmCC) 1x,
url(data:image/png;base64,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) 2x);
}

.ssl .old-icons {
background-image: -webkit-image-set(
url(data:image/png;base64,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) 1x,
url(data:image/png;base64,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) 2x);
}

.captive-portal .icon {
background-image: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAAEyElEQVR4Xu3afWhVZRwH8LvdmjVSjKyQbKazia1k1sL6YzXoZdy28/J8f5XRC7hwEVk0hZQCXY2SipCgYgappXMQ5Ya9ELZqoEM3VHqxBkapm21jOBWmbLfudk+0Peeu2+mc3zk9514WbN9/zz18ds75Pc/vPM+JTP9NZzrT+b9Fn2nGxHrainb8ggEaRgLn0IOjaMFroloU/Ssg1yxBLZpxBD00QufpODrRiFX6IiUKXY8XcRAJsryC3nRL7EpsQJ/r0V3iSS0/MKU4D6uoQwLY/P1q4i0aYX9xVqyPRH1jbr8UtfSbE8CDqIK60wBjOEb7aDf24CBO/gN12LjJF4dM+dPAoNgMdNkUxLENQltAFViJdbTWfFTcaRbiMXyCpE1CM4vR5uAzdwB/hcxCDI5jXqGFeAadNJoGH0ErVhg3YPs46Ad9JldNS3GCAbDPkFGG/eJGWktn3PA4IUB3oxPzGY4AXSBLCSTLgfZxx2MLV1Q5tFHeWxWQDNalHulWeo4q9GW4VVShng5J0KgZ8+bkYpcEqIJk6H2y0CiW4H58gGMYQhyn8DlqUUltZIk1XF01kKUW5yhm3gVB3Q76MDaRyXBQR1aIIJnyi6jNZUgs8uTQfUiGDJIxZ9OPfxEwhAO0F70To5NR5skxrsUgWaGDZLQCHBHVxnKxWjwuivRS7McK7na1kpUZkEwUzXbFiZfZcVk8pE6xZ3u34AV5TFJUsV2ObBHU0+Q5wu0eJ21krw+eD4lzBvOYf7wLeyI5DEfLx2l1DPqoSXK8SItis/gm41mlago/9P2UApklZE0pkHhdAv6YIiB8NwEQL9HvUwCkzZHz15g5Gw8jmR0QtsizvOoACUjAIdlOZQUkHpCgDqd1gwRslhX3djZAmDsBwpATJPtDUZPqGFuyUWU453IWu7fFHZOvhjiQ+aqiDheQ/bJjXpf2oP+caRA+cgPJpkxckeZfiIHMgmirC8gee4rz0qF6KV3IJEi86R8kg0oazQ6Iv2Uyoiajt4x/qJ1BfcCe6JQZC/BQ82XvDLYHJPUEK3tmYHTmlotpbzCSwsDomDpc+mD6VgHETB3M5Or2c5xUBvGTq7P98DjBEjqrBOLbD2eDZj7o+aJdhnhooJxUbd/r1cJ+yl1mJMMBGWUSP6zlezT5SIirGNKacEB4bwKEXcxrEN7gThUGSCtILaZXMC+KiGN+5kHYITndkSj7Ko3GTIPMEvtJFKt9LDYgiZtVQTLnqUPUOJcV8KWE95df4m85ps0+CQ/ig68xN72lscF4yveCFTa5g9AXnDR5lczC1Jr+4UhuCsAv6YlH3EDURFbgPCG3Y2altmPG9FIJ8LnoOYLbXNDzgi+Myvkqii9sIuocAHZZuN9tAKi6hnaiBwka9f942y2rzFcut4tZOO+3r5J6xcVmYEeKc9xlPuC3FhDHynBA6LQ5GGA2ftnNl82RqDrIDgb1ZU4AnxzUTc7raDeWhwPCUW0BA/C7gYeP9cWqILSUX8YAgmxxIoF3tYL/DkK9Y/znwm8CI4lvRLV+dVAQThOpOPht8p+ogZ4W9/jijFFD5eXhWPgPCXjMh/pSVYD6pxaywPGOKOIBWfkYhXYKozgvy5/rYBva8avzcx19sSrgT2jJnjJMVMiUAAAAAElFTkSuQmCC) 1x,
url(data:image/png;base64,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) 2x);
}

.checkbox {
background: transparent;
border: 1px solid white;
border-radius: 2px;
display: block;
height: 14px;
left: 0;
position: absolute;
right: 0;
top: -1px;
width: 14px;
}

.checkbox::before {
background: transparent;
border: 2px solid white;
border-right-width: 0;
border-top-width: 0;
content: '';
height: 4px;
left: 2px;
opacity: 0;
position: absolute;
top: 3px;
transform: rotate(-45deg);
width: 9px;
}

.ssl-opt-in .checkbox {
border-color: #696969;
}

.ssl-opt-in .checkbox::before {
border-color: #696969;
}

input[type=checkbox]:checked ~ .checkbox::before {
opacity: 1;
}

@media (max-width: 700px) {
.interstitial-wrapper {
padding: 0 10%;
}

#error-debugging-info {
overflow: auto;
}
}

@media (max-height: 600px) {
.error-code {
margin-top: 10px;
}
}

@media (max-width: 420px) {
button,
[dir='rtl'] button,
.small-link {
float: none;
font-size: .825em;
font-weight: 400;
margin: 0;
text-transform: uppercase;
width: 100%;
}

#details {
margin: 20px 0 20px 0;
}

#details p:not(:first-of-type) {
margin-top: 10px;
}

#details-button {
display: block;
margin-top: 20px;
text-align: center;
width: 100%;
}

.interstitial-wrapper {
padding: 0 5%;
}

#extended-reporting-opt-in {
margin-top: 24px;
}

.nav-wrapper {
margin-top: 30px;
}
}

/**
* Mobile specific styling.
* Navigation buttons are anchored to the bottom of the screen.
* Details message replaces the top content in its own scrollable area.
*/

@media (max-width: 420px) and (max-height: 736px) and (orientation: portrait) {
#details-button {
border: 0;
margin: 8px 0 0;
}

.secondary-button {
-webkit-margin-end: 0;
margin-top: 16px;
}
}

/* Fixed nav. */
@media (min-width: 240px) and (max-width: 420px) and
(min-height: 401px) and (max-height: 736px) and (orientation:portrait),
(min-width: 421px) and (max-width: 736px) and (min-height: 240px) and
(max-height: 420px) and (orientation:landscape) {
body .nav-wrapper {
background: #f7f7f7;
bottom: 0;
box-shadow: 0 -22px 40px rgb(247, 247, 247);
left: 0;
margin: 0;
max-width: 736px;
padding-left: 24px;
padding-right: 24px;
position: fixed;
z-index: 1;
}

body.safe-browsing .nav-wrapper {
background: rgb(206, 52, 38);
box-shadow: 0 -22px 40px rgb(206, 52, 38);
}

.interstitial-wrapper {
max-width: 736px;
}

#details,
#main-content {
padding-bottom: 40px;
}
}

@media (max-width: 420px) and (max-height: 736px) and (orientation: portrait),
(max-width: 736px) and (max-height: 420px) and (orientation: landscape) {
body {
margin: 0 auto;
}

button,
[dir='rtl'] button,
button.small-link {
font-family: Roboto-Regular,Helvetica;
font-size: .933em;
font-weight: 600;
margin: 6px 0;
text-transform: uppercase;
}

.nav-wrapper {
box-sizing: border-box;
padding-bottom: 8px;
width: 100%;
}

.error-code {
margin-top: 0;
}

#details {
box-sizing: border-box;
height: auto;
margin: 0;
opacity: 1;
transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
}

#details.hidden,
#main-content.hidden {
display: block;
height: 0;
opacity: 0;
overflow: hidden;
transition: none;
}

#details-button {
padding-bottom: 16px;
padding-top: 16px;
}

h1 {
font-size: 1.5em;
margin-bottom: 8px;
}

.icon {
margin-bottom: 12px;
}

.interstitial-wrapper {
box-sizing: border-box;
margin: 24px auto 12px;
padding: 0 24px;
position: relative;
}

.interstitial-wrapper p {
font-size: .95em;
line-height: 1.61em;
margin-top: 8px;
}

#main-content {
margin: 0;
transition: opacity 100ms cubic-bezier(0.4, 0, 0.2, 1);
}

.small-link {
border: 0;
}

.suggested-left & gt; #control-buttons,
.suggested-right & gt; #control-buttons {
float: none;
margin: 0;
}
}

@media (min-height: 400px) and (orientation:portrait) {
.interstitial-wrapper {
margin-bottom: 145px;
}
}

@media (min-height: 299px) and (orientation:portrait) {
.nav-wrapper {
padding-bottom: 16px;
}
}

@media (min-height: 405px) and (max-height: 736px) and
(max-width: 420px) and (orientation:portrait) {
.icon {
margin-bottom: 24px;
}

.interstitial-wrapper {
margin-top: 64px;
}
}

@media (min-height: 480px) and (max-width: 420px) and
(max-height: 736px) and (orientation: portrait),
(min-height: 338px) and (max-height: 420px) and (max-width: 736px) and
(orientation: landscape) {
.icon {
margin-bottom: 24px;
}

.nav-wrapper {
padding-bottom: 24px;
}
}

@media (min-height: 500px) and (max-width: 414px) and (orientation: portrait) {
.interstitial-wrapper {
margin-top: 96px;
}
}

/* Phablet sizing */
@media (min-width: 375px) and (min-height: 641px) and (max-height: 736px) and
(max-width: 414px) and (orientation: portrait) {
button,
[dir='rtl'] button,
.small-link {
font-size: 1em;
padding-bottom: 12px;
padding-top: 12px;
}

body:not(.offline) .icon {
height: 80px;
width: 80px;
}

#details-button {
margin-top: 28px;
}

h1 {
font-size: 1.7em;
}

.icon {
margin-bottom: 28px;
}

.interstitial-wrapper {
padding: 28px;
}

.interstitial-wrapper p {
font-size: 1.05em;
}

.nav-wrapper {
padding: 28px;
}
}

@media (min-width: 420px) and (max-width: 736px) and
(min-height: 240px) and (max-height: 298px) and
(orientation:landscape) {
body:not(.offline) .icon {
height: 50px;
width: 50px;
}

.icon {
padding-top: 0;
}

.interstitial-wrapper {
margin-top: 16px;
}

.nav-wrapper {
padding: 0 24px 8px;
}
}

@media (min-width: 420px) and (max-width: 736px) and
(min-height: 240px) and (max-height: 420px) and
(orientation:landscape) {
#details-button {
margin: 0;
}

.interstitial-wrapper {
margin-bottom: 70px;
}

.nav-wrapper {
margin-top: 0;
}

#extended-reporting-opt-in {
margin-top: 0;
}
}

/* Phablet landscape */
@media (min-width: 680px) and (max-height: 414px) {
.interstitial-wrapper {
margin: 24px auto;
}

.nav-wrapper {
margin: 16px auto 0;
}
}

@media (max-height: 240px) and (orientation: landscape),
(max-height: 480px) and (orientation: portrait),
(max-width: 419px) and (max-height: 323px) {
body:not(.offline) .icon {
height: 56px;
width: 56px;
}

.icon {
margin-bottom: 16px;
}
}

/* Small mobile screens. No fixed nav. */
@media (max-height: 400px) and (orientation: portrait),
(max-height: 239px) and (orientation: landscape),
(max-width: 419px) and (max-height: 399px) {
.interstitial-wrapper {
display: flex;
flex-direction: column;
margin-bottom: 0;
}

#details {
flex: 1 1 auto;
order: 0;
}

#main-content {
flex: 1 1 auto;
order: 0;
}

.nav-wrapper {
flex: 0 1 auto;
margin-top: 8px;
order: 1;
padding-left: 0;
padding-right: 0;
position: relative;
width: 100%;
}
}

@media (max-width: 239px) and (orientation: portrait) {
.nav-wrapper {
padding-left: 0;
padding-right: 0;
}
}

/* Copyright 2013 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file. */

/* Don't use the main frame div when the error is in a subframe. */
html[subframe] #main-frame-error {
display: none;
}

/* Don't use the subframe error div when the error is in a main frame. */
html:not([subframe]) #sub-frame-error {
display: none;
}

#diagnose-button {
-webkit-margin-start: 0;
float: none;
margin-bottom: 10px;
margin-top: 20px;
}

h1 {
margin-top: 0;
word-wrap: break-word;
}

h1 span {
font-weight: 500;
}

h2 {
color: #666;
font-size: 1.2em;
font-weight: normal;
margin: 10px 0;
}

a {
color: rgb(17, 85, 204);
text-decoration: none;
}

.icon {
-webkit-user-select: none;
display: inline-block;
}

.icon-generic {
/**
* Can't access chrome://theme/IDR_ERROR_NETWORK_GENERIC from an untrusted
* renderer process, so embed the resource manually.
*/
content: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAENJREFUeF7tzbEJACEQRNGBLeAasBCza2lLEGx0CxFGG9hBMDDxRy/72O9FMnIFapGylsu1fgoBdkXfUHLrQgdfrlJN1BdYBjQQm3UAAAAASUVORK5CYII=) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQAQMAAADdiHD7AAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAFJJREFUeF7t0cENgDAMQ9FwYgxG6WjpaIzCCAxQxVggFuDiCvlLOeRdHR9yzjncHVoq3npu+wQUrUuJHylSTmBaespJyJQoObUeyxDQb3bEm5Au81c0pSCD8HYAAAAASUVORK5CYII=) 2x);
}

.icon-offline {
content: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAGxJREFUeF7tyMEJwkAQRuFf5ipMKxYQiJ3Z2nSwrWwBA0+DQZcdxEOueaePp9+dQZFB7GpUcURSVU66yVNFj6LFICatThZB6r/ko/pbRpUgilY0Cbw5sNmb9txGXUKyuH7eV25x39DtJXUNPQGJtWFV+BT/QAAAAABJRU5ErkJggg==) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQBAMAAAAVaP+LAAAAGFBMVEUAAABTU1NNTU1TU1NPT09SUlJSUlJTU1O8B7DEAAAAB3RSTlMAoArVKvVgBuEdKgAAAJ1JREFUeF7t1TEOwyAMQNG0Q6/UE+RMXD9d/tC6womIFSL9P+MnAYOXeTIzMzMzMzMzaz8J9Ri6HoITmuHXhISE8nEh9yxDh55aCEUoTGbbQwjqHwIkRAEiIaG0+0AA9VBMaE89Rogeoww936MQrWdBr4GN/z0IAdQ6nQ/FIpRXDwHcA+JIJcQowQAlFUA0MfQpXLlVQfkzR4igS6ENjknm/wiaGhsAAAAASUVORK5CYII=) 2x);
position: relative;
}

.icon-disabled {
content: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABICAMAAAAZF4G5AAAABlBMVEVMaXFTU1OXUj8tAAAAAXRSTlMAQObYZgAAASZJREFUeAHd11Fq7jAMRGGf/W/6PoWB67YMqv5DybwG/CFjRuR8JBw3+ByiRjgV9W/TJ31P0tBfC6+cj1haUFXKHmVJo5wP98WwQ0ZCbfUc6LQ6VuUBz31ikADkLMkDrfUC4rR6QGW+gF6rx7NaHWCj1Y/W6lf4L7utvgBSt3rBFSS/XBMPUILcJINHCBWYUfpWn4NBi1ZfudIc3rf6/NGEvEA+AsYTJozmXemjXeLZAov+mnkN2HfzXpMSVQDnGw++57qNJ4D1xitA2sJ+VAWMygSEaYf2mYPTjZfk2K8wmP7HLIH5Mg4/pP+PEcDzUvDMvYbs/2NWwPO5vBdMZE4EE5UTQLiBFDaUlTDPBRoJ9HdAYIkIo06og3BNXtCzy7zA1aXk5x+tJARq63eAygAAAABJRU5ErkJggg==) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOAAAACQAQMAAAArwfVjAAAABlBMVEVMaXFTU1OXUj8tAAAAAXRSTlMAQObYZgAAAYdJREFUeF7F1EFqwzAUBNARAmVj0FZe5QoBH6BX+dn4GlY2PYNzGx/A0CvkCIJuvIraKJKbgBvzf2g62weDGD7CYggpfFReis4J0ey9EGFIiEQQojFSlA9kSIiqd0KkFjKsewgRbStEN19mxUPTtmW9HQ/h6tyqNQ8NlSMZdzyE6qkoE0trVYGFm0n1WYeBhduzwbwBC7voS+vIxfeMjeaiLxsMMtQNwMPtuew+DjzcTHk8YMfDknEcIUOtf2lVfgVH3K4Xv5PRYAXRVMtItIJ3rfaCIVn9DsTH2NxisAVRex2Hh3hX+/mRUR08bAwPEYsI51ZxWH4Q0SpicQRXeyEaIug48FEdegARfMz/tADVsRciwTAxW308ehmC2gLraC+YCbV3QoTZexa+zegAEW5PhhgYfmbvJgcRqngGByOSXdFJcLk2JeDPEN0kxe1JhIt5FiFA+w+ItMELsUyPF2IaJ4aILqb4FbxPwhImwj6JauKgDUCYaxmYIsd4KXdMjIC9ItB5Bn4BNRwsG0XM2nwAAAAASUVORK5CYII=) 2x);
width: 112px;
}

.error-code {
display: block;
font-size: .8em;
}

#content-top {
margin: 20px;
}

#help-box-inner {
background-color: #f9f9f9;
border-top: 1px solid #EEE;
color: #444;
padding: 20px;
text-align: start;
}

.hidden {
display: none;
}

#suggestion {
margin-top: 15px;
}

#suggestions-list p {
-webkit-margin-after: 0;
}

#suggestions-list ul {
margin-top: 0;
}

.single-suggestion {
list-style-type: none;
padding-left: 0;
}

#short-suggestion {
margin-top: 5px;
}

#sub-frame-error-details {

color: #8F8F8F;
/* Not done on mobile for performance reasons. */
text-shadow: 0 1px 0 rgba(255,255,255,0.3);
}

[jscontent=hostName],
[jscontent=failedUrl] {
overflow-wrap: break-word;
}

#search-container {
/* Prevents a space between controls. */
display: flex;
margin-top: 20px;
}

#search-box {
border: 1px solid #cdcdcd;
flex-grow: 1;
font-size: 1em;
height: 26px;
margin-right: 0;
padding: 1px 9px;
}

#search-box:focus {
border: 1px solid rgb(93, 154, 255);
outline: none;
}

#search-button {
border: none;
border-bottom-left-radius: 0;
border-top-left-radius: 0;
box-shadow: none;
display: flex;
height: 30px;
margin: 0;
padding: 0;
width: 60px;
}

#search-image {
content:
-webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAQAAAB+HTb/AAAArElEQVR4Xn3NsUoCUBzG0XvB3U0chR4geo5qihpt6gkCx0bXFsMERWj2KWqIanAvmlUUoQapwU6g4l8H5bd9Z/iSPS0hu/RqZqrncBuzLl7U3Rn4cSpQFTeroejJl1Lgs7f4ceDPdeBMXYp86gaONYJkY83AnqHiGk9wHnjk16PKgo5N9BUCkzPf5j6M0PfuVg5MymoetFwoaKAlB26WdXAvJ7u5mezitqtkT//7Sv/u96CaLQAAAABJRU5ErkJggg==) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAeCAQAAACVzLYUAAABYElEQVR4Xr3VMUuVURzH8XO98jgkGikENkRD0KRGDUVDQy0h2SiC4IuIiktL4AvQt1CDBJUJwo1KXXS6cWdHw7tcjWwoC5Hrx+UZgnNO5CXiO/75jD/+QZf9MzjskVU7DrU1zRv9G9ir5hsA4Nii83+GA9ZI1nI1D6tWAE1TRlQMuuuFDthzMQefgo4nKr+f3dIGDdUUHPYD1ISoMQdgJgUfgqaKEOcxWE/BVTArJBvwC0cGY7gNLgiZNsD1GP4EPVn4EtyLYRuczcJ34HYMP4E7GdajDS7FcB48z8AJ8FmI4TjouBkzZ2yBuRQMlsButIZ+dfDVUBqOaIHvavpLVHXfFmAqv45r9gEHNr3y3hcAfLSgSMPgiiZR+6Z9AMuKNAwqpjUcA2h55pxgAfBWkYRlQ254YMJloaxPHbCkiGCymL5RlLA7GnRDXyuC7uhicLoKdRyaDE5Pl00K//93nABqPgBDK8sfWgAAAABJRU5ErkJggg==) 2x);
margin: auto;
}

.secondary-button {
-webkit-margin-end: 16px;
background: #d9d9d9;
color: #696969;
}

.snackbar {
background: #323232;
border-radius: 2px;
bottom: 24px;
box-sizing: border-box;
color: #fff;
font-size: .87em;
left: 24px;
max-width: 568px;
min-width: 288px;
opacity: 0;
padding: 16px 24px 12px;
position: fixed;
transform: translateY(90px);
will-change: opacity, transform;
z-index: 999;
}

.snackbar-show {
-webkit-animation:
show-snackbar .25s cubic-bezier(0.0, 0.0, 0.2, 1) forwards,
hide-snackbar .25s cubic-bezier(0.4, 0.0, 1, 1) forwards 5s;
}

@-webkit-keyframes show-snackbar {
100% {
opacity: 1;
transform: translateY(0);
}
}

@-webkit-keyframes hide-snackbar {
0% {
opacity: 1;
transform: translateY(0);
}
100% {
opacity: 0;
transform: translateY(90px);
}
}

.suggestions {
margin-top: 18px;
}

.suggestion-header {
font-weight: bold;
margin-bottom: 4px;
}

.suggestion-body {
color: #777;
}

/* Increase line height at higher resolutions. */
@media (min-width: 641px) and (min-height: 641px) {
#help-box-inner {
line-height: 18px;
}
}

/* Decrease padding at low sizes. */
@media (max-width: 640px), (max-height: 640px) {
h1 {
margin: 0 0 15px;
}
#content-top {
margin: 15px;
}
#help-box-inner {
padding: 20px;
}
.suggestions {
margin-top: 10px;
}
.suggestion-header {
margin-bottom: 0;
}
}

/* Don't allow overflow when in a subframe. */
html[subframe] body {
overflow: hidden;
}

#sub-frame-error {
-webkit-align-items: center;
background-color: #DDD;
display: -webkit-flex;
-webkit-flex-flow: column;
height: 100%;
-webkit-justify-content: center;
left: 0;
position: absolute;
text-align: center;
top: 0;
transition: background-color .2s ease-in-out;
width: 100%;
}

#sub-frame-error:hover {
background-color: #EEE;
}

#sub-frame-error .icon-generic {
margin: 0 0 16px;
}

#sub-frame-error-details {
margin: 0 10px;
text-align: center;
visibility: hidden;
}

/* Show details only when hovering. */
#sub-frame-error:hover #sub-frame-error-details {
visibility: visible;
}

/* If the iframe is too small, always hide the error code. */
/* TODO(mmenke): See if overflow: no-display works better, once supported. */
@media (max-width: 200px), (max-height: 95px) {
#sub-frame-error-details {
display: none;
}
}

/* Adjust icon for small embedded frames in apps. */
@media (max-height: 100px) {
#sub-frame-error .icon-generic {
height: auto;
margin: 0;
padding-top: 0;
width: 25px;
}
}

/* details-button is special; it's a element that looks like a link. */
#details-button {
box-shadow: none;
min-width: 0;
}

/* Styles for platform dependent separation of controls and details button. */
.suggested-left & gt; #control-buttons,
.suggested-left #stale-load-button,
.suggested-right & gt; #details-button {
float: left;
}

.suggested-right & gt; #control-buttons,
.suggested-right #stale-load-button,
.suggested-left & gt; #details-button {
float: right;
}

.suggested-left .secondary-button {
-webkit-margin-end: 0px;
-webkit-margin-start: 16px;
}

#details-button.singular {
float: none;
}

#buttons::after {
clear: both;
content: '';
display: block;
width: 100%;
}

/* Offline page */
.offline {
transition: -webkit-filter 1.5s cubic-bezier(0.65, 0.05, 0.36, 1),
background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
will-change: -webkit-filter, background-color;
}

.offline #main-message & gt; p {
display: none;
}

.offline.inverted {
-webkit-filter: invert(100%);
background-color: #000;
}

.offline .interstitial-wrapper {
color: #2b2b2b;
font-size: 1em;
line-height: 1.55;
margin: 0 auto;
max-width: 600px;
padding-top: 100px;
width: 100%;
}

.offline .runner-container {
height: 150px;
max-width: 600px;
overflow: hidden;
position: absolute;
top: 35px;
width: 44px;
}

.offline .runner-canvas {
height: 150px;
max-width: 600px;
opacity: 1;
overflow: hidden;
position: absolute;
top: 0;
z-index: 2;
}

.offline .controller {
background: rgba(247,247,247, .1);
height: 100vh;
left: 0;
position: absolute;
top: 0;
width: 100vw;
z-index: 1;
}

#offline-resources {
display: none;
}

@media (max-width: 420px) {
.suggested-left & gt; #control-buttons,
.suggested-right & gt; #control-buttons {
float: none;
}

.snackbar {
left: 0;
bottom: 0;
width: 100%;
border-radius: 0;
}
}

@media (max-height: 350px) {
h1 {
margin: 0 0 15px;
}

.icon-offline {
margin: 0 0 10px;
}

.interstitial-wrapper {
margin-top: 5%;
}

.nav-wrapper {
margin-top: 30px;
}
}

@media (min-width: 600px) and (max-width: 736px) and (orientation: landscape) {
.offline .interstitial-wrapper {
margin-left: 0;
margin-right: 0;
}
}

@media (min-width: 420px) and (max-width: 736px) and
(min-height: 240px) and (max-height: 420px) and
(orientation:landscape) {
.interstitial-wrapper {
margin-bottom: 100px;
}
}

@media (min-height: 240px) and (orientation: landscape) {
.offline .interstitial-wrapper {
margin-bottom: 90px;
}

.icon-offline {
margin-bottom: 20px;
}
}

@media (max-height: 320px) and (orientation: landscape) {
.icon-offline {
margin-bottom: 0;
}

.offline .runner-container {
top: 10px;
}
}

@media (max-width: 240px) {
button {
padding-left: 12px;
padding-right: 12px;
}

.interstitial-wrapper {
overflow: inherit;
padding: 0 8px;
}
}

@media (max-width: 120px) {
button {
width: auto;
}
}

// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var mobileNav = false;

/**
* For small screen mobile the navigation buttons are moved
* below the advanced text.
*/
function onResize() {
var helpOuterBox = document.querySelector('#details');
var mainContent = document.querySelector('#main-content');
var mediaQuery = '(min-width: 240px) and (max-width: 420px) and ' +
'(max-height: 736px) and (min-height: 401px) and ' +
'(orientation: portrait), (max-width: 736px) and ' +
'(max-height: 420px) and (min-height: 240px) and ' +
'(min-width: 421px) and (orientation: landscape)';

var detailsHidden = helpOuterBox.classList.contains('hidden');
var runnerContainer = document.querySelector('.runner-container');

// Check for change in nav status.
if (mobileNav != window.matchMedia(mediaQuery).matches) {
mobileNav = !mobileNav;

// Handle showing the top content / details sections according to state.
if (mobileNav) {
mainContent.classList.toggle('hidden', !detailsHidden);
helpOuterBox.classList.toggle('hidden', detailsHidden);
if (runnerContainer) {
runnerContainer.classList.toggle('hidden', !detailsHidden);
}
} else if (!detailsHidden) {
// Non mobile nav with visible details.
mainContent.classList.remove('hidden');
helpOuterBox.classList.remove('hidden');
if (runnerContainer) {
runnerContainer.classList.remove('hidden');
}
}
}
}

function setupMobileNav() {
window.addEventListener('resize', onResize);
onResize();
}

document.addEventListener('DOMContentLoaded', setupMobileNav);

// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

function toggleHelpBox() {
var helpBoxOuter = document.getElementById('details');
helpBoxOuter.classList.toggle('hidden');
var detailsButton = document.getElementById('details-button');
if (helpBoxOuter.classList.contains('hidden'))
detailsButton.innerText = detailsButton.detailsText;
else
detailsButton.innerText = detailsButton.hideDetailsText;

// Details appears over the main content on small screens.
if (mobileNav) {
document.getElementById('main-content').classList.toggle('hidden');
var runnerContainer = document.querySelector('.runner-container');
if (runnerContainer) {
runnerContainer.classList.toggle('hidden');
}
}
}

function diagnoseErrors() {
if (window.errorPageController)
errorPageController.diagnoseErrorsButtonClick();

}

// Subframes use a different layout but the same html file. This is to make it
// easier to support platforms that load the error page via different
// mechanisms (Currently just iOS).
if (window.top.location != window.location)
document.documentElement.setAttribute('subframe', '');

// Re-renders the error page using |strings| as the dictionary of values.
// Used by NetErrorTabHelper to update DNS error pages with probe results.
function updateForDnsProbe(strings) {
var context = new JsEvalContext(strings);
jstProcess(context, document.getElementById('t'));
}

// Given the classList property of an element, adds an icon class to the list
// and removes the previously-
function updateIconClass(classList, newClass) {
var oldClass;

if (classList.hasOwnProperty('last_icon_class')) {
oldClass = classList['last_icon_class'];
if (oldClass == newClass)
return;
}

classList.add(newClass);
if (oldClass !== undefined)
classList.remove(oldClass);

classList['last_icon_class'] = newClass;

if (newClass == 'icon-offline') {
document.body.classList.add('offline');
new Runner('.interstitial-wrapper');
} else {
document.body.classList.add('neterror');
}
}

// Does a search using |baseSearchUrl| and the text in the search box.
function search(baseSearchUrl) {
var searchTextNode = document.getElementById('search-box');
document.location = baseSearchUrl + searchTextNode.value;
return false;
}

// Use to track clicks on elements generated by the navigation correction
// service. If |trackingId| is negative, the element does not come from the
// correction service.
function trackClick(trackingId) {
// This can't be done with XHRs because XHRs are cancelled on navigation
// start, and because these are cross-site requests.
if (trackingId & gt; = 0 & & errorPageController)
errorPageController.trackClick(trackingId);
}

// Called when an tag generated by the navigation correction service is
// clicked. Separate function from trackClick so the resources don't have to
// be updated if new data is added to jstdata.
function linkClicked(jstdata) {
trackClick(jstdata.trackingId);
}

// Implements button clicks. This function is needed during the transition
// between implementing these in trunk chromium and implementing them in
// iOS.
function reloadButtonClick(url) {
if (window.errorPageController) {
errorPageController.reloadButtonClick();
} else {
location = url;
}
}

function showSavedCopyButtonClick() {
if (window.errorPageController) {
errorPageController.showSavedCopyButtonClick();
}
}

function showOfflinePagesButtonClick() {
if (window.errorPageController) {
errorPageController.showOfflinePagesButtonClick();
}
}

function detailsButtonClick() {
if (window.errorPageController)
errorPageController.detailsButtonClick();
}

/**
* Replace the reload button with the Google cached copy suggestion.
*/
function setUpCachedButton(buttonStrings) {
var reloadButton = document.getElementById('reload-button');

reloadButton.textContent = buttonStrings.msg;
var url = buttonStrings.cacheUrl;
var trackingId = buttonStrings.trackingId;
reloadButton.onclick = function(e) {
e.preventDefault();
trackClick(trackingId);
if (window.errorPageController) {
errorPageController.trackCachedCopyButtonClick();
}
location = url;
};
reloadButton.style.display = '';
document.getElementById('control-buttons').hidden = false;
}

var primaryControlOnLeft = true;


function onDocumentLoad() {
var controlButtonDiv = document.getElementById('control-buttons');
var reloadButton = document.getElementById('reload-button');
var detailsButton = document.getElementById('details-button');
var showSavedCopyButton = document.getElementById('show-saved-copy-button');
var showOfflinePagesButton =
document.getElementById('show-offline-pages-button');

var reloadButtonVisible = loadTimeData.valueExists('reloadButton') & &
loadTimeData.getValue('reloadButton').msg;
var showSavedCopyButtonVisible =
loadTimeData.valueExists('showSavedCopyButton') & &
loadTimeData.getValue('showSavedCopyButton').msg;
var showOfflinePagesButtonVisible =
loadTimeData.valueExists('showOfflinePagesButton') & &
loadTimeData.getValue('showOfflinePagesButton').msg;

var primaryButton, secondaryButton;
if (showSavedCopyButton.primary) {
primaryButton = showSavedCopyButton;
secondaryButton = reloadButton;
} else {
primaryButton = reloadButton;
secondaryButton = showSavedCopyButton;
}

// Sets up the proper button layout for the current platform.
if (primaryControlOnLeft) {
buttons.classList.add('suggested-left');
controlButtonDiv.insertBefore(secondaryButton, primaryButton);
} else {
buttons.classList.add('suggested-right');
controlButtonDiv.insertBefore(primaryButton, secondaryButton);
}

// Check for Google cached copy suggestion.
if (loadTimeData.valueExists('cacheButton')) {
setUpCachedButton(loadTimeData.getValue('cacheButton'));
}

if (reloadButton.style.display == 'none' & &
showSavedCopyButton.style.display == 'none' & &
showOfflinePagesButton.style.display == 'none') {
detailsButton.classList.add('singular');
}

// Show control buttons.
if (reloadButtonVisible || showSavedCopyButtonVisible ||
showOfflinePagesButtonVisible) {
controlButtonDiv.hidden = false;

// Set the secondary button state in the cases of two call to actions.
if ((reloadButtonVisible || showOfflinePagesButtonVisible) & &
showSavedCopyButtonVisible) {
secondaryButton.classList.add('secondary-button');
}
}
}

document.addEventListener('DOMContentLoaded', onDocumentLoad);

// Copyright (c) 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(function() {
'use strict';
/**
* T-Rex runner.
* @param {string} outerContainerId Outer containing element id.
* @param {Object} opt_config
* @constructor
* @export
*/
function Runner(outerContainerId, opt_config) {
// Singleton
if (Runner.instance_) {
return Runner.instance_;
}
Runner.instance_ = this;

this.outerContainerEl = document.querySelector(outerContainerId);
this.containerEl = null;
this.snackbarEl = null;
this.detailsButton = this.outerContainerEl.querySelector('#details-button');

this.config = opt_config || Runner.config;

this.dimensions = Runner.defaultDimensions;

this.canvas = null;
this.canvasCtx = null;

this.tRex = null;

this.distanceMeter = null;
this.distanceRan = 0;

this.highestScore = 0;

this.time = 0;
this.runningTime = 0;
this.msPerFrame = 1000 / FPS;
this.currentSpeed = this.config.SPEED;

this.obstacles = [];

this.activated = false; // Whether the easter egg has been activated.
this.playing = false; // Whether the game is currently in play state.
this.crashed = false;
this.paused = false;
this.inverted = false;
this.invertTimer = 0;
this.resizeTimerId_ = null;

this.playCount = 0;

// Sound FX.
this.audioBuffer = null;
this.soundFx = {};

// Global web audio context for playing sounds.
this.audioContext = null;

// Images.
this.images = {};
this.imagesLoaded = 0;

if (this.isDisabled()) {
this.setupDisabledRunner();
} else {
this.loadImages();
}
}
window['Runner'] = Runner;


/**
* Default game width.
* @const
*/
var DEFAULT_WIDTH = 600;

/**
* Frames per second.
* @const
*/
var FPS = 60;

/** @const */
var IS_HIDPI = window.devicePixelRatio & gt; 1;

/** @const */
var IS_IOS = window.navigator.userAgent.indexOf('CriOS') & gt; -1 ||
window.navigator.userAgent == 'UIWebViewForStaticFileContent';

/** @const */
var IS_MOBILE = window.navigator.userAgent.indexOf('Mobi') & gt; -1 || IS_IOS;

/** @const */
var IS_TOUCH_ENABLED = 'ontouchstart' in window;

/**
* Default game configuration.
* @enum {number}
*/
Runner.config = {
ACCELERATION: 0.001,
BG_CLOUD_SPEED: 0.2,
BOTTOM_PAD: 10,
CLEAR_TIME: 3000,
CLOUD_FREQUENCY: 0.5,
GAMEOVER_CLEAR_TIME: 750,
GAP_COEFFICIENT: 0.6,
GRAVITY: 0.6,
INITIAL_JUMP_VELOCITY: 12,
INVERT_FADE_DURATION: 12000,
INVERT_DISTANCE: 700,
MAX_BLINK_COUNT: 3,
MAX_CLOUDS: 6,
MAX_OBSTACLE_LENGTH: 3,
MAX_OBSTACLE_DUPLICATION: 2,
MAX_SPEED: 13,
MIN_JUMP_HEIGHT: 35,
MOBILE_SPEED_COEFFICIENT: 1.2,
RESOURCE_TEMPLATE_ID: 'audio-resources',
SPEED: 6,
SPEED_DROP_COEFFICIENT: 3
};


/**
* Default dimensions.
* @enum {string}
*/
Runner.defaultDimensions = {
WIDTH: DEFAULT_WIDTH,
HEIGHT: 150
};


/**
* CSS class names.
* @enum {string}
*/
Runner.classes = {
CANVAS: 'runner-canvas',
CONTAINER: 'runner-container',
CRASHED: 'crashed',
ICON: 'icon-offline',
INVERTED: 'inverted',
SNACKBAR: 'snackbar',
SNACKBAR_SHOW: 'snackbar-show',
TOUCH_CONTROLLER: 'controller'
};


/**
* Sprite definition layout of the spritesheet.
* @enum {Object}
*/
Runner.spriteDefinition = {
LDPI: {
CACTUS_LARGE: {x: 332, y: 2},
CACTUS_SMALL: {x: 228, y: 2},
CLOUD: {x: 86, y: 2},
HORIZON: {x: 2, y: 54},
MOON: {x: 484, y: 2},
PTERODACTYL: {x: 134, y: 2},
RESTART: {x: 2, y: 2},
TEXT_SPRITE: {x: 655, y: 2},
TREX: {x: 848, y: 2},
STAR: {x: 645, y: 2}
},
HDPI: {
CACTUS_LARGE: {x: 652, y: 2},
CACTUS_SMALL: {x: 446, y: 2},
CLOUD: {x: 166, y: 2},
HORIZON: {x: 2, y: 104},
MOON: {x: 954, y: 2},
PTERODACTYL: {x: 260, y: 2},
RESTART: {x: 2, y: 2},
TEXT_SPRITE: {x: 1294, y: 2},
TREX: {x: 1678, y: 2},
STAR: {x: 1276, y: 2}
}
};


/**
* Sound FX. Reference to the ID of the audio tag on interstitial page.
* @enum {string}
*/
Runner.sounds = {
BUTTON_PRESS: 'offline-sound-press',
HIT: 'offline-sound-hit',
SCORE: 'offline-sound-reached'
};


/**
* Key code mapping.
* @enum {Object}
*/
Runner.keycodes = {
JUMP: {'38': 1, '32': 1}, // Up, spacebar
DUCK: {'40': 1}, // Down
RESTART: {'13': 1} // Enter
};


/**
* Runner event names.
* @enum {string}
*/
Runner.events = {
ANIM_END: 'webkitAnimationEnd',
CLICK: 'click',
KEYDOWN: 'keydown',
KEYUP: 'keyup',
MOUSEDOWN: 'mousedown',
MOUSEUP: 'mouseup',
RESIZE: 'resize',
TOUCHEND: 'touchend',
TOUCHSTART: 'touchstart',
VISIBILITY: 'visibilitychange',
BLUR: 'blur',
FOCUS: 'focus',
LOAD: 'load'
};


Runner.prototype = {
/**
* Whether the easter egg has been disabled. CrOS enterprise enrolled devices.
* @return {boolean}
*/
isDisabled: function() {
return loadTimeData & & loadTimeData.valueExists('disabledEasterEgg');
},

/**
* For disabled instances, set up a snackbar with the disabled message.
*/
setupDisabledRunner: function() {
this.containerEl = document.createElement('div');
this.containerEl.className = Runner.classes.SNACKBAR;
this.containerEl.textContent = loadTimeData.getValue('disabledEasterEgg');
this.outerContainerEl.appendChild(this.containerEl);

// Show notification when the activation key is pressed.
document.addEventListener(Runner.events.KEYDOWN, function(e) {
if (Runner.keycodes.JUMP[e.keyCode]) {
this.containerEl.classList.add(Runner.classes.SNACKBAR_SHOW);
document.querySelector('.icon').classList.add('icon-disabled');
}
}.bind(this));
},

/**
* Setting individual settings for debugging.
* @param {string} setting
* @param {*} value
*/
updateConfigSetting: function(setting, value) {
if (setting in this.config & & value != undefined) {
this.config[setting] = value;

switch (setting) {
case 'GRAVITY':
case 'MIN_JUMP_HEIGHT':
case 'SPEED_DROP_COEFFICIENT':
this.tRex.config[setting] = value;
break;
case 'INITIAL_JUMP_VELOCITY':
this.tRex.setJumpVelocity(value);
break;
case 'SPEED':
this.setSpeed(value);
break;
}
}
},

/**
* Cache the appropriate image sprite from the page and get the sprite sheet
* definition.
*/
loadImages: function() {
if (IS_HIDPI) {
Runner.imageSprite = document.getElementById('offline-resources-2x');
this.spriteDef = Runner.spriteDefinition.HDPI;
} else {
Runner.imageSprite = document.getElementById('offline-resources-1x');
this.spriteDef = Runner.spriteDefinition.LDPI;
}

if (Runner.imageSprite.complete) {
this.init();
} else {
// If the images are not yet loaded, add a listener.
Runner.imageSprite.addEventListener(Runner.events.LOAD,
this.init.bind(this));
}
},

/**
* Load and decode base 64 encoded sounds.
*/
loadSounds: function() {
if (!IS_IOS) {
this.audioContext = new AudioContext();

var resourceTemplate =
document.getElementById(this.config.RESOURCE_TEMPLATE_ID).content;

for (var sound in Runner.sounds) {
var soundSrc =
resourceTemplate.getElementById(Runner.sounds[sound]).src;
soundSrc = soundSrc.substr(soundSrc.indexOf(',') + 1);
var buffer = decodeBase64ToArrayBuffer(soundSrc);

// Async, so no guarantee of order in array.
this.audioContext.decodeAudioData(buffer, function(index, audioData) {
this.soundFx[index] = audioData;
}.bind(this, sound));
}
}
},

/**
* Sets the game speed. Adjust the speed accordingly if on a smaller screen.
* @param {number} opt_speed
*/
setSpeed: function(opt_speed) {
var speed = opt_speed || this.currentSpeed;

// Reduce the speed on smaller mobile screens.
if (this.dimensions.WIDTH speed ? speed : mobileSpeed;
} else if (opt_speed) {
this.currentSpeed = opt_speed;
}
},

/**
* Game initialiser.
*/
init: function() {
// Hide the static icon.
document.querySelector('.' + Runner.classes.ICON).style.visibility =
'hidden';

this.adjustDimensions();
this.setSpeed();

this.containerEl = document.createElement('div');
this.containerEl.className = Runner.classes.CONTAINER;

// Player canvas container.
this.canvas = createCanvas(this.containerEl, this.dimensions.WIDTH,
this.dimensions.HEIGHT, Runner.classes.PLAYER);

this.canvasCtx = this.canvas.getContext('2d');
this.canvasCtx.fillStyle = '#f7f7f7';
this.canvasCtx.fill();
Runner.updateCanvasScaling(this.canvas);

// Horizon contains clouds, obstacles and the ground.
this.horizon = new Horizon(this.canvas, this.spriteDef, this.dimensions,
this.config.GAP_COEFFICIENT);

// Distance meter
this.distanceMeter = new DistanceMeter(this.canvas,
this.spriteDef.TEXT_SPRITE, this.dimensions.WIDTH);

// Draw t-rex
this.tRex = new Trex(this.canvas, this.spriteDef.TREX);

this.outerContainerEl.appendChild(this.containerEl);

if (IS_MOBILE) {
this.createTouchController();
}

this.startListening();
this.update();

window.addEventListener(Runner.events.RESIZE,
this.debounceResize.bind(this));
},

/**
* Create the touch controller. A div that covers whole screen.
*/
createTouchController: function() {
this.touchController = document.createElement('div');
this.touchController.className = Runner.classes.TOUCH_CONTROLLER;
},

/**
* Debounce the resize event.
*/
debounceResize: function() {
if (!this.resizeTimerId_) {
this.resizeTimerId_ =
setInterval(this.adjustDimensions.bind(this), 250);
}
},

/**
* Adjust game space dimensions on resize.
*/
adjustDimensions: function() {
clearInterval(this.resizeTimerId_);
this.resizeTimerId_ = null;

var boxStyles = window.getComputedStyle(this.outerContainerEl);
var padding = Number(boxStyles.paddingLeft.substr(0,
boxStyles.paddingLeft.length - 2));

this.dimensions.WIDTH = this.outerContainerEl.offsetWidth - padding * 2;

// Redraw the elements back onto the canvas.
if (this.canvas) {
this.canvas.width = this.dimensions.WIDTH;
this.canvas.height = this.dimensions.HEIGHT;

Runner.updateCanvasScaling(this.canvas);

this.distanceMeter.calcXPos(this.dimensions.WIDTH);
this.clearCanvas();
this.horizon.update(0, 0, true);
this.tRex.update(0);

// Outer container and distance meter.
if (this.playing || this.crashed || this.paused) {
this.containerEl.style.width = this.dimensions.WIDTH + 'px';
this.containerEl.style.height = this.dimensions.HEIGHT + 'px';
this.distanceMeter.update(0, Math.ceil(this.distanceRan));
this.stop();
} else {
this.tRex.draw(0, 0);
}

// Game over panel.
if (this.crashed & & this.gameOverPanel) {
this.gameOverPanel.updateDimensions(this.dimensions.WIDTH);
this.gameOverPanel.draw();
}
}
},

/**
* Play the game intro.
* Canvas container width expands out to the full width.
*/
playIntro: function() {
if (!this.activated & & !this.crashed) {
this.playingIntro = true;
this.tRex.playingIntro = true;

// CSS animation definition.
var keyframes = '@-webkit-keyframes intro { ' +
'from { width:' + Trex.config.WIDTH + 'px }' +
'to { width: ' + this.dimensions.WIDTH + 'px }' +
'}';
document.styleSheets[0].insertRule(keyframes, 0);

this.containerEl.addEventListener(Runner.events.ANIM_END,
this.startGame.bind(this));

this.containerEl.style.webkitAnimation = 'intro .4s ease-out 1 both';
this.containerEl.style.width = this.dimensions.WIDTH + 'px';

if (this.touchController) {
this.outerContainerEl.appendChild(this.touchController);
}
this.playing = true;
this.activated = true;
} else if (this.crashed) {
this.restart();
}
},


/**
* Update the game status to started.
*/
startGame: function() {
this.runningTime = 0;
this.playingIntro = false;
this.tRex.playingIntro = false;
this.containerEl.style.webkitAnimation = '';
this.playCount++;

// Handle tabbing off the page. Pause the current game.
document.addEventListener(Runner.events.VISIBILITY,
this.onVisibilityChange.bind(this));

window.addEventListener(Runner.events.BLUR,
this.onVisibilityChange.bind(this));

window.addEventListener(Runner.events.FOCUS,
this.onVisibilityChange.bind(this));
},

clearCanvas: function() {
this.canvasCtx.clearRect(0, 0, this.dimensions.WIDTH,
this.dimensions.HEIGHT);
},

/**
* Update the game frame and schedules the next one.
*/
update: function() {
this.updatePending = false;

var now = getTimeStamp();
var deltaTime = now - (this.time || now);
this.time = now;

if (this.playing) {
this.clearCanvas();

if (this.tRex.jumping) {
this.tRex.updateJump(deltaTime);
}

this.runningTime += deltaTime;
var hasObstacles = this.runningTime & gt; this.config.CLEAR_TIME;

// First jump triggers the intro.
if (this.tRex.jumpCount == 1 & & !this.playingIntro) {
this.playIntro();
}

// The horizon doesn't move until the intro is over.
if (this.playingIntro) {
this.horizon.update(0, this.currentSpeed, hasObstacles);
} else {
deltaTime = !this.activated ? 0 : deltaTime;
this.horizon.update(deltaTime, this.currentSpeed, hasObstacles,
this.inverted);
}

// Check for collisions.
var collision = hasObstacles & &
checkForCollision(this.horizon.obstacles[0], this.tRex);

if (!collision) {
this.distanceRan += this.currentSpeed * deltaTime / this.msPerFrame;

if (this.currentSpeed this.config.INVERT_FADE_DURATION) {
this.invertTimer = 0;
this.invertTrigger = false;
this.invert();
} else if (this.invertTimer) {
this.invertTimer += deltaTime;
} else {
var actualDistance =
this.distanceMeter.getActualDistance(Math.ceil(this.distanceRan));

if (actualDistance & gt; 0) {
this.invertTrigger = !(actualDistance %
this.config.INVERT_DISTANCE);

if (this.invertTrigger & & this.invertTimer === 0) {
this.invertTimer += deltaTime;
this.invert();
}
}
}
}

if (this.playing || (!this.activated & &
this.tRex.blinkCount = this.config.GAMEOVER_CLEAR_TIME & &
Runner.keycodes.JUMP[keyCode])) {
this.restart();
}
} else if (this.paused & & isjumpKey) {
// Reset the jump state
this.tRex.reset();
this.play();
}
},

/**
* Returns whether the event was a left click on canvas.
* On Windows right click is registered as a click.
* @param {Event} e
* @return {boolean}
*/
isLeftClickOnCanvas: function(e) {
return e.button != null & & e.button this.highestScore) {
this.highestScore = Math.ceil(this.distanceRan);
this.distanceMeter.setHighScore(this.highestScore);
}

// Reset the time clock.
this.time = getTimeStamp();
},

stop: function() {
this.playing = false;
this.paused = true;
cancelAnimationFrame(this.raqId);
this.raqId = 0;
},

play: function() {
if (!this.crashed) {
this.playing = true;
this.paused = false;
this.tRex.update(0, Trex.status.RUNNING);
this.time = getTimeStamp();
this.update();
}
},

restart: function() {
if (!this.raqId) {
this.playCount++;
this.runningTime = 0;
this.playing = true;
this.crashed = false;
this.distanceRan = 0;
this.setSpeed(this.config.SPEED);
this.time = getTimeStamp();
this.containerEl.classList.remove(Runner.classes.CRASHED);
this.clearCanvas();
this.distanceMeter.reset(this.highestScore);
this.horizon.reset();
this.tRex.reset();
this.playSound(this.soundFx.BUTTON_PRESS);
this.invert(true);
this.update();
}
},

/**
* Pause the game if the tab is not in focus.
*/
onVisibilityChange: function(e) {
if (document.hidden || document.webkitHidden || e.type == 'blur' ||
document.visibilityState != 'visible') {
this.stop();
} else if (!this.crashed) {
this.tRex.reset();
this.play();
}
},

/**
* Play a sound.
* @param {SoundBuffer} soundBuffer
*/
playSound: function(soundBuffer) {
if (soundBuffer) {
var sourceNode = this.audioContext.createBufferSource();
sourceNode.buffer = soundBuffer;
sourceNode.connect(this.audioContext.destination);
sourceNode.start(0);
}
},

/**
* Inverts the current page / canvas colors.
* @param {boolean} Whether to reset colors.
*/
invert: function(reset) {
if (reset) {
document.body.classList.toggle(Runner.classes.INVERTED, false);
this.invertTimer = 0;
this.inverted = false;
} else {
this.inverted = document.body.classList.toggle(Runner.classes.INVERTED,
this.invertTrigger);
}
}
};


/**
* Updates the canvas size taking into
* account the backing store pixel ratio and
* the device pixel ratio.
*
* See article by Paul Lewis:
* http://www.html5rocks.com/en/tutorials/canvas/hidpi/
*
* @param {HTMLCanvasElement} canvas
* @param {number} opt_width
* @param {number} opt_height
* @return {boolean} Whether the canvas was scaled.
*/
Runner.updateCanvasScaling = function(canvas, opt_width, opt_height) {
var context = canvas.getContext('2d');

// Query the various pixel ratios
var devicePixelRatio = Math.floor(window.devicePixelRatio) || 1;
var backingStoreRatio = Math.floor(context.webkitBackingStorePixelRatio) || 1;
var ratio = devicePixelRatio / backingStoreRatio;

// Upscale the canvas if the two ratios don't match
if (devicePixelRatio !== backingStoreRatio) {
var oldWidth = opt_width || canvas.width;
var oldHeight = opt_height || canvas.height;

canvas.width = oldWidth * ratio;
canvas.height = oldHeight * ratio;

canvas.style.width = oldWidth + 'px';
canvas.style.height = oldHeight + 'px';

// Scale the context to counter the fact that we've manually scaled
// our canvas element.
context.scale(ratio, ratio);
return true;
} else if (devicePixelRatio == 1) {
// Reset the canvas width / height. Fixes scaling bug when the page is
// zoomed and the devicePixelRatio changes accordingly.
canvas.style.width = canvas.width + 'px';
canvas.style.height = canvas.height + 'px';
}
return false;
};


/**
* Get random number.
* @param {number} min
* @param {number} max
* @param {number}
*/
function getRandomNum(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}


/**
* Vibrate on mobile devices.
* @param {number} duration Duration of the vibration in milliseconds.
*/
function vibrate(duration) {
if (IS_MOBILE & & window.navigator.vibrate) {
window.navigator.vibrate(duration);
}
}


/**
* Create canvas element.
* @param {HTMLElement} container Element to append canvas to.
* @param {number} width
* @param {number} height
* @param {string} opt_classname
* @return {HTMLCanvasElement}
*/
function createCanvas(container, width, height, opt_classname) {
var canvas = document.createElement('canvas');
canvas.className = opt_classname ? Runner.classes.CANVAS + ' ' +
opt_classname : Runner.classes.CANVAS;
canvas.width = width;
canvas.height = height;
container.appendChild(canvas);

return canvas;
}


/**
* Decodes the base 64 audio to ArrayBuffer used by Web Audio.
* @param {string} base64String
*/
function decodeBase64ToArrayBuffer(base64String) {
var len = (base64String.length / 4) * 3;
var str = atob(base64String);
var arrayBuffer = new ArrayBuffer(len);
var bytes = new Uint8Array(arrayBuffer);

for (var i = 0; i }
*/
function checkForCollision(obstacle, tRex, opt_canvasCtx) {
var obstacleBoxXPos = Runner.defaultDimensions.WIDTH + obstacle.xPos;

// Adjustments are made to the bounding box as there is a 1 pixel white
// border around the t-rex and obstacles.
var tRexBox = new CollisionBox(
tRex.xPos + 1,
tRex.yPos + 1,
tRex.config.WIDTH - 2,
tRex.config.HEIGHT - 2);

var obstacleBox = new CollisionBox(
obstacle.xPos + 1,
obstacle.yPos + 1,
obstacle.typeConfig.width * obstacle.size - 2,
obstacle.typeConfig.height - 2);

// Debug outer box
if (opt_canvasCtx) {
drawCollisionBoxes(opt_canvasCtx, tRexBox, obstacleBox);
}

// Simple outer bounds check.
if (boxCompare(tRexBox, obstacleBox)) {
var collisionBoxes = obstacle.collisionBoxes;
var tRexCollisionBoxes = tRex.ducking ?
Trex.collisionBoxes.DUCKING : Trex.collisionBoxes.RUNNING;

// Detailed axis aligned box check.
for (var t = 0; t obstacleBoxX & &
tRexBox.y obstacleBox.y) {
crashed = true;
}

return crashed;
};


//******************************************************************************

/**
* Collision box object.
* @param {number} x X position.
* @param {number} y Y Position.
* @param {number} w Width.
* @param {number} h Height.
*/
function CollisionBox(x, y, w, h) {
this.x = x;
this.y = y;
this.width = w;
this.height = h;
};


//******************************************************************************

/**
* Obstacle.
* @param {HTMLCanvasCtx} canvasCtx
* @param {Obstacle.type} type
* @param {Object} spritePos Obstacle position in sprite.
* @param {Object} dimensions
* @param {number} gapCoefficient Mutipler in determining the gap.
* @param {number} speed
* @param {number} opt_xOffset
*/
function Obstacle(canvasCtx, type, spriteImgPos, dimensions,
gapCoefficient, speed, opt_xOffset) {

this.canvasCtx = canvasCtx;
this.spritePos = spriteImgPos;
this.typeConfig = type;
this.gapCoefficient = gapCoefficient;
this.size = getRandomNum(1, Obstacle.MAX_OBSTACLE_LENGTH);
this.dimensions = dimensions;
this.remove = false;
this.xPos = dimensions.WIDTH + (opt_xOffset || 0);
this.yPos = 0;
this.width = 0;
this.collisionBoxes = [];
this.gap = 0;
this.speedOffset = 0;

// For animated obstacles.
this.currentFrame = 0;
this.timer = 0;

this.init(speed);
};

/**
* Coefficient for calculating the maximum gap.
* @const
*/
Obstacle.MAX_GAP_COEFFICIENT = 1.5;

/**
* Maximum obstacle grouping count.
* @const
*/
Obstacle.MAX_OBSTACLE_LENGTH = 3,


Obstacle.prototype = {
/**
* Initialise the DOM for the obstacle.
* @param {number} speed
*/
init: function(speed) {
this.cloneCollisionBoxes();

// Only allow sizing if we're at the right speed.
if (this.size & gt; 1 & & this.typeConfig.multipleSpeed & gt; speed) {
this.size = 1;
}

this.width = this.typeConfig.width * this.size;

// Check if obstacle can be positioned at various heights.
if (Array.isArray(this.typeConfig.yPos)) {
var yPosConfig = IS_MOBILE ? this.typeConfig.yPosMobile :
this.typeConfig.yPos;
this.yPos = yPosConfig[getRandomNum(0, yPosConfig.length - 1)];
} else {
this.yPos = this.typeConfig.yPos;
}

this.draw();

// Make collision box adjustments,
// Central box is adjusted to the size as one box.
// ____ ______ ________
// _| |-| _| |-| _| |-|
// | | | | | | | | | | | |
// | | 1 | | | | 2 | | | | 3 | |
// |_|___|_| |_|_____|_| |_|_______|_|
//
if (this.size & gt; 1) {
this.collisionBoxes[1].width = this.width - this.collisionBoxes[0].width -
this.collisionBoxes[2].width;
this.collisionBoxes[2].x = this.width - this.collisionBoxes[2].width;
}

// For obstacles that go at a different speed from the horizon.
if (this.typeConfig.speedOffset) {
this.speedOffset = Math.random() & gt; 0.5 ? this.typeConfig.speedOffset :
-this.typeConfig.speedOffset;
}

this.gap = this.getGap(this.gapCoefficient, speed);
},

/**
* Draw and crop based on size.
*/
draw: function() {
var sourceWidth = this.typeConfig.width;
var sourceHeight = this.typeConfig.height;

if (IS_HIDPI) {
sourceWidth = sourceWidth * 2;
sourceHeight = sourceHeight * 2;
}

// X position in sprite.
var sourceX = (sourceWidth * this.size) * (0.5 * (this.size - 1)) +
this.spritePos.x;

// Animation frames.
if (this.currentFrame & gt; 0) {
sourceX += sourceWidth * this.currentFrame;
}

this.canvasCtx.drawImage(Runner.imageSprite,
sourceX, this.spritePos.y,
sourceWidth * this.size, sourceHeight,
this.xPos, this.yPos,
this.typeConfig.width * this.size, this.typeConfig.height);
},

/**
* Obstacle frame update.
* @param {number} deltaTime
* @param {number} speed
*/
update: function(deltaTime, speed) {
if (!this.remove) {
if (this.typeConfig.speedOffset) {
speed += this.speedOffset;
}
this.xPos -= Math.floor((speed * FPS / 1000) * deltaTime);

// Update frame
if (this.typeConfig.numFrames) {
this.timer += deltaTime;
if (this.timer & gt; = this.typeConfig.frameRate) {
this.currentFrame =
this.currentFrame == this.typeConfig.numFrames - 1 ?
0 : this.currentFrame + 1;
this.timer = 0;
}
}
this.draw();

if (!this.isVisible()) {
this.remove = true;
}
}
},

/**
* Calculate a random gap size.
* - Minimum gap gets wider as speed increses
* @param {number} gapCoefficient
* @param {number} speed
* @return {number} The gap size.
*/
getGap: function(gapCoefficient, speed) {
var minGap = Math.round(this.width * speed +
this.typeConfig.minGap * gapCoefficient);
var maxGap = Math.round(minGap * Obstacle.MAX_GAP_COEFFICIENT);
return getRandomNum(minGap, maxGap);
},

/**
* Check if obstacle is visible.
* @return {boolean} Whether the obstacle is in the game area.
*/
isVisible: function() {
return this.xPos + this.width & gt; 0;
},

/**
* Make a copy of the collision boxes, since these will change based on
* obstacle type and size.
*/
cloneCollisionBoxes: function() {
var collisionBoxes = this.typeConfig.collisionBoxes;

for (var i = collisionBoxes.length - 1; i & gt; = 0; i--) {
this.collisionBoxes[i] = new CollisionBox(collisionBoxes[i].x,
collisionBoxes[i].y, collisionBoxes[i].width,
collisionBoxes[i].height);
}
}
};


/**
* Obstacle definitions.
* minGap: minimum pixel space betweeen obstacles.
* multipleSpeed: Speed at which multiples are allowed.
* speedOffset: speed faster / slower than the horizon.
* minSpeed: Minimum speed which the obstacle can make an appearance.
*/
Obstacle.types = [
{
type: 'CACTUS_SMALL',
width: 17,
height: 35,
yPos: 105,
multipleSpeed: 4,
minGap: 120,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 7, 5, 27),
new CollisionBox(4, 0, 6, 34),
new CollisionBox(10, 4, 7, 14)
]
},
{
type: 'CACTUS_LARGE',
width: 25,
height: 50,
yPos: 90,
multipleSpeed: 7,
minGap: 120,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 12, 7, 38),
new CollisionBox(8, 0, 7, 49),
new CollisionBox(13, 10, 10, 38)
]
},
{
type: 'PTERODACTYL',
width: 46,
height: 40,
yPos: [ 100, 75, 50 ], // Variable height.
yPosMobile: [ 100, 50 ], // Variable height mobile.
multipleSpeed: 999,
minSpeed: 8.5,
minGap: 150,
collisionBoxes: [
new CollisionBox(15, 15, 16, 5),
new CollisionBox(18, 21, 24, 6),
new CollisionBox(2, 14, 4, 3),
new CollisionBox(6, 10, 4, 7),
new CollisionBox(10, 8, 6, 9)
],
numFrames: 2,
frameRate: 1000/6,
speedOffset: .8
}
];


//******************************************************************************
/**
* T-rex game character.
* @param {HTMLCanvas} canvas
* @param {Object} spritePos Positioning within image sprite.
* @constructor
*/
function Trex(canvas, spritePos) {
this.canvas = canvas;
this.canvasCtx = canvas.getContext('2d');
this.spritePos = spritePos;
this.xPos = 0;
this.yPos = 0;
// Position when on the ground.
this.groundYPos = 0;
this.currentFrame = 0;
this.currentAnimFrames = [];
this.blinkDelay = 0;
this.blinkCount = 0;
this.animStartTime = 0;
this.timer = 0;
this.msPerFrame = 1000 / FPS;
this.config = Trex.config;
// Current status.
this.status = Trex.status.WAITING;

this.jumping = false;
this.ducking = false;
this.jumpVelocity = 0;
this.reachedMinHeight = false;
this.speedDrop = false;
this.jumpCount = 0;
this.jumpspotX = 0;

this.init();
};


/**
* T-rex player config.
* @enum {number}
*/
Trex.config = {
DROP_VELOCITY: -5,
GRAVITY: 0.6,
HEIGHT: 47,
HEIGHT_DUCK: 25,
INIITAL_JUMP_VELOCITY: -10,
INTRO_DURATION: 1500,
MAX_JUMP_HEIGHT: 30,
MIN_JUMP_HEIGHT: 30,
SPEED_DROP_COEFFICIENT: 3,
SPRITE_WIDTH: 262,
START_X_POS: 50,
WIDTH: 44,
WIDTH_DUCK: 59
};


/**
* Used in collision detection.
* @type {Array }
*/
Trex.collisionBoxes = {
DUCKING: [
new CollisionBox(1, 18, 55, 25)
],
RUNNING: [
new CollisionBox(22, 0, 17, 16),
new CollisionBox(1, 18, 30, 9),
new CollisionBox(10, 35, 14, 8),
new CollisionBox(1, 24, 29, 5),
new CollisionBox(5, 30, 21, 4),
new CollisionBox(9, 34, 15, 4)
]
};


/**
* Animation states.
* @enum {string}
*/
Trex.status = {
CRASHED: 'CRASHED',
DUCKING: 'DUCKING',
JUMPING: 'JUMPING',
RUNNING: 'RUNNING',
WAITING: 'WAITING'
};

/**
* Blinking coefficient.
* @const
*/
Trex.BLINK_TIMING = 7000;


/**
* Animation config for different states.
* @enum {Object}
*/
Trex.animFrames = {
WAITING: {
frames: [44, 0],
msPerFrame: 1000 / 3
},
RUNNING: {
frames: [88, 132],
msPerFrame: 1000 / 12
},
CRASHED: {
frames: [220],
msPerFrame: 1000 / 60
},
JUMPING: {
frames: [0],
msPerFrame: 1000 / 60
},
DUCKING: {
frames: [262, 321],
msPerFrame: 1000 / 8
}
};


Trex.prototype = {
/**
* T-rex player initaliser.
* Sets the t-rex to blink at random intervals.
*/
init: function() {
this.groundYPos = Runner.defaultDimensions.HEIGHT - this.config.HEIGHT -
Runner.config.BOTTOM_PAD;
this.yPos = this.groundYPos;
this.minJumpHeight = this.groundYPos - this.config.MIN_JUMP_HEIGHT;

this.draw(0, 0);
this.update(0, Trex.status.WAITING);
},

/**
* Setter for the jump velocity.
* The approriate drop velocity is also set.
*/
setJumpVelocity: function(setting) {
this.config.INIITAL_JUMP_VELOCITY = -setting;
this.config.DROP_VELOCITY = -setting / 2;
},

/**
* Set the animation status.
* @param {!number} deltaTime
* @param {Trex.status} status Optional status to switch to.
*/
update: function(deltaTime, opt_status) {
this.timer += deltaTime;

// Update the status.
if (opt_status) {
this.status = opt_status;
this.currentFrame = 0;
this.msPerFrame = Trex.animFrames[opt_status].msPerFrame;
this.currentAnimFrames = Trex.animFrames[opt_status].frames;

if (opt_status == Trex.status.WAITING) {
this.animStartTime = getTimeStamp();
this.setBlinkDelay();
}
}

// Game intro animation, T-rex moves in from the left.
if (this.playingIntro & & this.xPos = this.msPerFrame) {
this.currentFrame = this.currentFrame ==
this.currentAnimFrames.length - 1 ? 0 : this.currentFrame + 1;
this.timer = 0;
}

// Speed drop becomes duck if the down key is still being pressed.
if (this.speedDrop & & this.yPos == this.groundYPos) {
this.speedDrop = false;
this.setDuck(true);
}
},

/**
* Draw the t-rex to a particular position.
* @param {number} x
* @param {number} y
*/
draw: function(x, y) {
var sourceX = x;
var sourceY = y;
var sourceWidth = this.ducking & & this.status != Trex.status.CRASHED ?
this.config.WIDTH_DUCK : this.config.WIDTH;
var sourceHeight = this.config.HEIGHT;

if (IS_HIDPI) {
sourceX *= 2;
sourceY *= 2;
sourceWidth *= 2;
sourceHeight *= 2;
}

// Adjustments for sprite sheet position.
sourceX += this.spritePos.x;
sourceY += this.spritePos.y;

// Ducking.
if (this.ducking & & this.status != Trex.status.CRASHED) {
this.canvasCtx.drawImage(Runner.imageSprite, sourceX, sourceY,
sourceWidth, sourceHeight,
this.xPos, this.yPos,
this.config.WIDTH_DUCK, this.config.HEIGHT);
} else {
// Crashed whilst ducking. Trex is standing up so needs adjustment.
if (this.ducking & & this.status == Trex.status.CRASHED) {
this.xPos++;
}
// Standing / running
this.canvasCtx.drawImage(Runner.imageSprite, sourceX, sourceY,
sourceWidth, sourceHeight,
this.xPos, this.yPos,
this.config.WIDTH, this.config.HEIGHT);
}
},

/**
* Sets a random time for the blink to happen.
*/
setBlinkDelay: function() {
this.blinkDelay = Math.ceil(Math.random() * Trex.BLINK_TIMING);
},

/**
* Make t-rex blink at random intervals.
* @param {number} time Current time in milliseconds.
*/
blink: function(time) {
var deltaTime = time - this.animStartTime;

if (deltaTime & gt; = this.blinkDelay) {
this.draw(this.currentAnimFrames[this.currentFrame], 0);

if (this.currentFrame == 1) {
// Set new random delay to blink.
this.setBlinkDelay();
this.animStartTime = time;
this.blinkCount++;
}
}
},

/**
* Initialise a jump.
* @param {number} speed
*/
startJump: function(speed) {
if (!this.jumping) {
this.update(0, Trex.status.JUMPING);
// Tweak the jump velocity based on the speed.
this.jumpVelocity = this.config.INIITAL_JUMP_VELOCITY - (speed / 10);
this.jumping = true;
this.reachedMinHeight = false;
this.speedDrop = false;
}
},

/**
* Jump is complete, falling down.
*/
endJump: function() {
if (this.reachedMinHeight & &
this.jumpVelocity this.groundYPos) {
this.reset();
this.jumpCount++;
}

this.update(deltaTime);
},

/**
* Set the speed drop. Immediately cancels the current jump.
*/
setSpeedDrop: function() {
this.speedDrop = true;
this.jumpVelocity = 1;
},

/**
* @param {boolean} isDucking.
*/
setDuck: function(isDucking) {
if (isDucking & & this.status != Trex.status.DUCKING) {
this.update(0, Trex.status.DUCKING);
this.ducking = true;
} else if (this.status == Trex.status.DUCKING) {
this.update(0, Trex.status.RUNNING);
this.ducking = false;
}
},

/**
* Reset the t-rex to running at start of game.
*/
reset: function() {
this.yPos = this.groundYPos;
this.jumpVelocity = 0;
this.jumping = false;
this.ducking = false;
this.update(0, Trex.status.RUNNING);
this.midair = false;
this.speedDrop = false;
this.jumpCount = 0;
}
};


//******************************************************************************

/**
* Handles displaying the distance meter.
* @param {!HTMLCanvasElement} canvas
* @param {Object} spritePos Image position in sprite.
* @param {number} canvasWidth
* @constructor
*/
function DistanceMeter(canvas, spritePos, canvasWidth) {
this.canvas = canvas;
this.canvasCtx = canvas.getContext('2d');
this.image = Runner.imageSprite;
this.spritePos = spritePos;
this.x = 0;
this.y = 5;

this.currentDistance = 0;
this.maxScore = 0;
this.highScore = 0;
this.container = null;

this.digits = [];
this.acheivement = false;
this.defaultString = '';
this.flashTimer = 0;
this.flashIterations = 0;
this.invertTrigger = false;

this.config = DistanceMeter.config;
this.maxScoreUnits = this.config.MAX_DISTANCE_UNITS;
this.init(canvasWidth);
};


/**
* @enum {number}
*/
DistanceMeter.dimensions = {
WIDTH: 10,
HEIGHT: 13,
DEST_WIDTH: 11
};


/**
* Y positioning of the digits in the sprite sheet.
* X position is always 0.
* @type {Array }
*/
DistanceMeter.yPos = [0, 13, 27, 40, 53, 67, 80, 93, 107, 120];


/**
* Distance meter config.
* @enum {number}
*/
DistanceMeter.config = {
// Number of digits.
MAX_DISTANCE_UNITS: 5,

// Distance that causes achievement animation.
ACHIEVEMENT_DISTANCE: 100,

// Used for conversion from pixel distance to a scaled unit.
COEFFICIENT: 0.025,

// Flash duration in milliseconds.
FLASH_DURATION: 1000 / 4,

// Flash iterations for achievement animation.
FLASH_ITERATIONS: 3
};


DistanceMeter.prototype = {
/**
* Initialise the distance meter to '00000'.
* @param {number} width Canvas width in px.
*/
init: function(width) {
var maxDistanceStr = '';

this.calcXPos(width);
this.maxScore = this.maxScoreUnits;
for (var i = 0; i this.maxScore & & this.maxScoreUnits ==
this.config.MAX_DISTANCE_UNITS) {
this.maxScoreUnits++;
this.maxScore = parseInt(this.maxScore + '9');
} else {
this.distance = 0;
}

if (distance & gt; 0) {
// Acheivement unlocked
if (distance % this.config.ACHIEVEMENT_DISTANCE == 0) {
// Flash score and play sound.
this.acheivement = true;
this.flashTimer = 0;
playSound = true;
}

// Create a string representation of the distance with leading 0.
var distanceStr = (this.defaultString +
distance).substr(-this.maxScoreUnits);
this.digits = distanceStr.split('');
} else {
this.digits = this.defaultString.split('');
}
} else {
// Control flashing of the score on reaching acheivement.
if (this.flashIterations
this.config.FLASH_DURATION * 2) {
this.flashTimer = 0;
this.flashIterations++;
}
} else {
this.acheivement = false;
this.flashIterations = 0;
this.flashTimer = 0;
}
}

// Draw the digits if not flashing.
if (paint) {
for (var i = this.digits.length - 1; i & gt; = 0; i--) {
this.draw(i, parseInt(this.digits[i]));
}
}

this.drawHighScore();
return playSound;
},

/**
* Draw the high score.
*/
drawHighScore: function() {
this.canvasCtx.save();
this.canvasCtx.globalAlpha = .8;
for (var i = this.highScore.length - 1; i & gt; = 0; i--) {
this.draw(i, parseInt(this.highScore[i], 10), true);
}
this.canvasCtx.restore();
},

/**
* Set the highscore as a array string.
* Position of char in the sprite: H - 10, I - 11.
* @param {number} distance Distance ran in pixels.
*/
setHighScore: function(distance) {
distance = this.getActualDistance(distance);
var highScoreStr = (this.defaultString +
distance).substr(-this.maxScoreUnits);

this.highScore = ['10', '11', ''].concat(highScoreStr.split(''));
},

/**
* Reset the distance meter back to '00000'.
*/
reset: function() {
this.update(0);
this.acheivement = false;
}
};


//******************************************************************************

/**
* Cloud background item.
* Similar to an obstacle object but without collision boxes.
* @param {HTMLCanvasElement} canvas Canvas element.
* @param {Object} spritePos Position of image in sprite.
* @param {number} containerWidth
*/
function Cloud(canvas, spritePos, containerWidth) {
this.canvas = canvas;
this.canvasCtx = this.canvas.getContext('2d');
this.spritePos = spritePos;
this.containerWidth = containerWidth;
this.xPos = containerWidth;
this.yPos = 0;
this.remove = false;
this.cloudGap = getRandomNum(Cloud.config.MIN_CLOUD_GAP,
Cloud.config.MAX_CLOUD_GAP);

this.init();
};


/**
* Cloud object config.
* @enum {number}
*/
Cloud.config = {
HEIGHT: 14,
MAX_CLOUD_GAP: 400,
MAX_SKY_LEVEL: 30,
MIN_CLOUD_GAP: 100,
MIN_SKY_LEVEL: 71,
WIDTH: 46
};


Cloud.prototype = {
/**
* Initialise the cloud. Sets the Cloud height.
*/
init: function() {
this.yPos = getRandomNum(Cloud.config.MAX_SKY_LEVEL,
Cloud.config.MIN_SKY_LEVEL);
this.draw();
},

/**
* Draw the cloud.
*/
draw: function() {
this.canvasCtx.save();
var sourceWidth = Cloud.config.WIDTH;
var sourceHeight = Cloud.config.HEIGHT;

if (IS_HIDPI) {
sourceWidth = sourceWidth * 2;
sourceHeight = sourceHeight * 2;
}

this.canvasCtx.drawImage(Runner.imageSprite, this.spritePos.x,
this.spritePos.y,
sourceWidth, sourceHeight,
this.xPos, this.yPos,
Cloud.config.WIDTH, Cloud.config.HEIGHT);

this.canvasCtx.restore();
},

/**
* Update the cloud position.
* @param {number} speed
*/
update: function(speed) {
if (!this.remove) {
this.xPos -= Math.ceil(speed);
this.draw();

// Mark as removeable if no longer in the canvas.
if (!this.isVisible()) {
this.remove = true;
}
}
},

/**
* Check if the cloud is visible on the stage.
* @return {boolean}
*/
isVisible: function() {
return this.xPos + Cloud.config.WIDTH & gt; 0;
}
};


//******************************************************************************

/**
* Nightmode shows a moon and stars on the horizon.
*/
function NightMode(canvas, spritePos, containerWidth) {
this.spritePos = spritePos;
this.canvas = canvas;
this.canvasCtx = canvas.getContext('2d');
this.xPos = containerWidth - 50;
this.yPos = 30;
this.currentPhase = 0;
this.opacity = 0;
this.containerWidth = containerWidth;
this.stars = [];
this.drawStars = false;
this.placeStars();
};

/**
* @enum {number}
*/
NightMode.config = {
FADE_SPEED: 0.035,
HEIGHT: 40,
MOON_SPEED: 0.25,
NUM_STARS: 2,
STAR_SIZE: 9,
STAR_SPEED: 0.3,
STAR_MAX_Y: 70,
WIDTH: 20
};

NightMode.phases = [140, 120, 100, 60, 40, 20, 0];

NightMode.prototype = {
/**
* Update moving moon, changing phases.
* @param {boolean} activated Whether night mode is activated.
* @param {number} delta
*/
update: function(activated, delta) {
// Moon phase.
if (activated & & this.opacity == 0) {
this.currentPhase++;

if (this.currentPhase & gt; = NightMode.phases.length) {
this.currentPhase = 0;
}
}

// Fade in / out.
if (activated & & (this.opacity 0) {
this.opacity -= NightMode.config.FADE_SPEED;
}

// Set moon positioning.
if (this.opacity & gt; 0) {
this.xPos = this.updateXPos(this.xPos, NightMode.config.MOON_SPEED);

// Update stars.
if (this.drawStars) {
for (var i = 0; i this.bumpThreshold ? this.dimensions.WIDTH : 0;
},

/**
* Draw the horizon line.
*/
draw: function() {
this.canvasCtx.drawImage(Runner.imageSprite, this.sourceXPos[0],
this.spritePos.y,
this.sourceDimensions.WIDTH, this.sourceDimensions.HEIGHT,
this.xPos[0], this.yPos,
this.dimensions.WIDTH, this.dimensions.HEIGHT);

this.canvasCtx.drawImage(Runner.imageSprite, this.sourceXPos[1],
this.spritePos.y,
this.sourceDimensions.WIDTH, this.sourceDimensions.HEIGHT,
this.xPos[1], this.yPos,
this.dimensions.WIDTH, this.dimensions.HEIGHT);
},

/**
* Update the x position of an indivdual piece of the line.
* @param {number} pos Line position.
* @param {number} increment
*/
updateXPos: function(pos, increment) {
var line1 = pos;
var line2 = pos == 0 ? 1 : 0;

this.xPos[line1] -= increment;
this.xPos[line2] = this.xPos[line1] + this.dimensions.WIDTH;

if (this.xPos[line1] = 0; i--) {
this.clouds[i].update(cloudSpeed);
}

var lastCloud = this.clouds[numClouds - 1];

// Check for adding a new cloud.
if (numClouds lastCloud.cloudGap & &
this.cloudFrequency & gt; Math.random()) {
this.addCloud();
}

// Remove expired clouds.
this.clouds = this.clouds.filter(function(obj) {
return !obj.remove;
});
} else {
this.addCloud();
}
},

/**
* Update the obstacle positions.
* @param {number} deltaTime
* @param {number} currentSpeed
*/
updateObstacles: function(deltaTime, currentSpeed) {
// Obstacles, move to Horizon layer.
var updatedObstacles = this.obstacles.slice(0);

for (var i = 0; i 0) {
var lastObstacle = this.obstacles[this.obstacles.length - 1];

if (lastObstacle & & !lastObstacle.followingObstacleCreated & &
lastObstacle.isVisible() & &
(lastObstacle.xPos + lastObstacle.width + lastObstacle.gap) 1) {
this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION);
}
}
},

/**
* Returns whether the previous two obstacles are the same as the next one.
* Maximum duplication is set in config value MAX_OBSTACLE_DUPLICATION.
* @return {boolean}
*/
duplicateObstacleCheck: function(nextObstacleType) {
var duplicateCount = 0;

for (var i = 0; i = Runner.config.MAX_OBSTACLE_DUPLICATION;
},

/**
* Reset the horizon layer.
* Remove existing obstacles and reposition the horizon line.
*/
reset: function() {
this.obstacles = [];
this.horizonLine.reset();
this.nightMode.reset();
},

/**
* Update the canvas width and scaling.
* @param {number} width Canvas width.
* @param {number} height Canvas height.
*/
resize: function(width, height) {
this.canvas.width = width;
this.canvas.height = height;
},

/**
* Add a new cloud to the horizon.
*/
addCloud: function() {
this.clouds.push(new Cloud(this.canvas, this.spritePos.CLOUD,
this.dimensions.WIDTH));
}
};
})();







Strona ad.doubleclick.net jest zablokowana
Żądania do serwera zostały zablokowane przez rozszerzenie.



Spróbuj wyłączyć rozszerzenia.


ERR_BLOCKED_BY_CLIENT






Odśwież
















Żądania do serwera zostały zablokowane przez rozszerzenie.









// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
* @fileoverview This file defines a singleton which provides access to all data
* that is available as soon as the page's resources are loaded (before DOM
* content has finished loading). This data includes both localized strings and
* any data that is important to have ready from a very early stage (e.g. things
* that must be displayed right away).
*/

/** @type {!LoadTimeData} */ var loadTimeData;

// Expose this type globally as a temporary work around until
// https://github.com/google/closure-compiler/issues/544 is fixed.
/** @constructor */
function LoadTimeData() {}

(function() {
'use strict';

LoadTimeData.prototype = {
/**
* Sets the backing object.
*
* Note that there is no getter for |data_| to discourage abuse of the form:
*
* var value = loadTimeData.data()['key'];
*
* @param {Object} value The de-serialized page data.
*/
set data(value) {
expect(!this.data_, 'Re-setting data.');
this.data_ = value;
},

/**
* Returns a JsEvalContext for |data_|.
* @returns {JsEvalContext}
*/
createJsEvalContext: function() {
return new JsEvalContext(this.data_);
},

/**
* @param {string} id An ID of a value that might exist.
* @return {boolean} True if |id| is a key in the dictionary.
*/
valueExists: function(id) {
return id in this.data_;
},

/**
* Fetches a value, expecting that it exists.
* @param {string} id The key that identifies the desired value.
* @return {*} The corresponding value.
*/
getValue: function(id) {
expect(this.data_, 'No data. Did you remember to include strings.js?');
var value = this.data_[id];
expect(typeof value != 'undefined', 'Could not find value for ' + id);
return value;
},

/**
* As above, but also makes sure that the value is a string.
* @param {string} id The key that identifies the desired string.
* @return {string} The corresponding string value.
*/
getString: function(id) {
var value = this.getValue(id);
expectIsType(id, value, 'string');
return /** @type {string} */ (value);
},

/**
* Returns a formatted localized string where $1 to $9 are replaced by the
* second to the tenth argument.
* @param {string} id The ID of the string we want.
* @param {...(string|number)} var_args The extra values to include in the
* formatted output.
* @return {string} The formatted string.
*/
getStringF: function(id, var_args) {
var value = this.getString(id);
if (!value)
return '';

var varArgs = arguments;
return value.replace(/\$[$1-9]/g, function(m) {
return m == '$$' ? '$' : varArgs[m[1]];
});
},

/**
* As above, but also makes sure that the value is a boolean.
* @param {string} id The key that identifies the desired boolean.
* @return {boolean} The corresponding boolean value.
*/
getBoolean: function(id) {
var value = this.getValue(id);
expectIsType(id, value, 'boolean');
return /** @type {boolean} */ (value);
},

/**
* As above, but also makes sure that the value is an integer.
* @param {string} id The key that identifies the desired number.
* @return {number} The corresponding number value.
*/
getInteger: function(id) {
var value = this.getValue(id);
expectIsType(id, value, 'number');
expect(value == Math.floor(value), 'Number isn\'t integer: ' + value);
return /** @type {number} */ (value);
},

/**
* Override values in loadTimeData with the values found in |replacements|.
* @param {Object} replacements The dictionary object of keys to replace.
*/
overrideValues: function(replacements) {
expect(typeof replacements == 'object',
'Replacements must be a dictionary object.');
for (var key in replacements) {
this.data_[key] = replacements[key];
}
}
};

/**
* Checks condition, displays error message if expectation fails.
* @param {*} condition The condition to check for truthiness.
* @param {string} message The message to display if the check fails.
*/
function expect(condition, message) {
if (!condition) {
console.error('Unexpected condition on ' + document.location.href + ': ' +
message);
}
}

/**
* Checks that the given value has the given type.
* @param {string} id The id of the value (only used for error message).
* @param {*} value The value to check the type on.
* @param {string} type The type we expect |value| to be.
*/
function expectIsType(id, value, type) {
expect(typeof value == type, '[' + value + '] (' + id +
') is not a ' + type);
}

expect(!loadTimeData, 'should only include this file once');
loadTimeData = new LoadTimeData;
})();
loadTimeData.data = { " details " : " Szczegóły " , " errorCode " : " ERR_BLOCKED_BY_CLIENT " , " fontfamily " : " 'Segoe UI', Tahoma, sans-serif " , " fontsize " : " 75% " , " heading " :{ " hostName " : " ad.doubleclick.net " , " msg " : " Strona \u003Cspan jscontent=\ " hostName\ " & gt; \u003C/span & gt; jest zablokowana " }, " hideDetails " : " Ukryj szczegóły " , " iconClass " : " icon-generic " , " language " : " pl " , " reloadButton " :{ " msg " : " Odśwież " , " reloadTrackingId " :-1, " reloadUrl " : " http://ad.doubleclick.net/N6245/adi/ebay.ebayus.vip/BTF;tcat=12576;items=;ice=;ccode=;sz=728x90;u=i_1493276523140272031%7Cm_364534;;cat=46701;cat=12576;cat=11890;seg=AdvGL_Vtr;tile=2;ot=1;um=0;us=13;eb_trk=364534;pr=20;xp=20;np=20;uz=Unknown;fbi=;sbi=;fbo=;sbo=;fse=;sse=;fvi=;svi=;kw=brightsign,hd920a,digital,signage,player,retail,display,hdmi,solid,state,media;lkw=;cg=5de2c6201580abc55f84d44ff5bd9b27;ord=1483031638352; " }, " suggestionsDetails " :[], " suggestionsSummaryList " :[{ " summary " : " Spróbuj wyłączyć rozszerzenia. " }], " summary " :{ " dnsDefinition " : " DNS to usługa sieciowa tłumacząca nazwę serwera na jego adres internetowy. " , " failedUrl " : " http://ad.doubleclick.net/N6245/adi/ebay.ebayus.vip/BTF;tcat=12576;items=;ice=;ccode=;sz=728x90;u=i_1493276523140272031%7Cm_364534;;cat=46701;cat=12576;cat=11890;seg=AdvGL_Vtr;tile=2;ot=1;um=0;us=13;eb_trk=364534;pr=20;xp=20;np=20;uz=Unknown;fbi=;sbi=;fbo=;sbo=;fse=;sse=;fvi=;svi=;kw=brightsign,hd920a,digital,signage,player,retail,display,hdmi,solid,state,media;lkw=;cg=5de2c6201580abc55f84d44ff5bd9b27;ord=1483031638352; " , " hostName " : " ad.doubleclick.net " , " msg " : " Żądania do serwera zostały zablokowane przez rozszerzenie. " }, " textdirection " : " ltr " , " title " : " ad.doubleclick.net " }; // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/** @typedef {Document|DocumentFragment|Element} */
var ProcessingRoot;

/**
* @fileoverview This is a simple template engine inspired by JsTemplates
* optimized for i18n.
*
* It currently supports three handlers:
*
* * i18n-content which sets the textContent of the element.
*
*
*
* * i18n-options which generates elements for a .
*
*
*
* * i18n-values is a list of attribute-value or property-value pairs.
* Properties are prefixed with a '.' and can contain nested properties.
*
*
*
* This file is a copy of i18n_template.js, with minor tweaks to support using
* load_time_data.js. It should replace i18n_template.js eventually.
*/

var i18nTemplate = (function() {
/**
* This provides the handlers for the templating engine. The key is used as
* the attribute name and the value is the function that gets called for every
* single node that has this attribute.
* @type {!Object}
*/
var handlers = {
/**
* This handler sets the textContent of the element.
* @param {!HTMLElement} element The node to modify.
* @param {string} key The name of the value in |data|.
* @param {!LoadTimeData} data The data source to draw from.
* @param {!Set } visited
*/
'i18n-content': function(element, key, data, visited) {
element.textContent = data.getString(key);
},

/**
* This handler adds options to a element.
* @param {!HTMLElement} select The node to modify.
* @param {string} key The name of the value in |data|. It should
* identify an array of values to initialize an . Each value,
* if a pair, represents [content, value]. Otherwise, it should be a
* content string with no value.
* @param {!LoadTimeData} data The data source to draw from.
* @param {!Set } visited
*/
'i18n-options': function(select, key, data, visited) {
var options = data.getValue(key);
options.forEach(function(optionData) {
var option = typeof optionData == 'string' ?
new Option(optionData) :
new Option(optionData[1], optionData[0]);
select.appendChild(option);
});
},

/**
* This is used to set HTML attributes and DOM properties. The syntax is:
* attributename:key;
* .domProperty:key;
* .nested.dom.property:key
* @param {!HTMLElement} element The node to modify.
* @param {string} attributeAndKeys The path of the attribute to modify
* followed by a colon, and the name of the value in |data|.
* Multiple attribute/key pairs may be separated by semicolons.
* @param {!LoadTimeData} data The data source to draw from.
* @param {!Set } visited
*/
'i18n-values': function(element, attributeAndKeys, data, visited) {
var parts = attributeAndKeys.replace(/\s/g, '').split(/;/);
parts.forEach(function(part) {
if (!part)
return;

var attributeAndKeyPair = part.match(/^([^:]+):(.+)$/);
if (!attributeAndKeyPair)
throw new Error('malformed i18n-values: ' + attributeAndKeys);

var propName = attributeAndKeyPair[1];
var propExpr = attributeAndKeyPair[2];

var value = data.getValue(propExpr);

// Allow a property of the form '.foo.bar' to assign a value into
// element.foo.bar.
if (propName[0] == '.') {
var path = propName.slice(1).split('.');
var targetObject = element;
while (targetObject & & path.length & gt; 1) {
targetObject = targetObject[path.shift()];
}
if (targetObject) {
targetObject[path] = value;
// In case we set innerHTML (ignoring others) we need to recursively
// check the content.
if (path == 'innerHTML') {
for (var i = 0; i } visited Already visited roots.
* @param {boolean} mark Whether nodes should be marked processed.
*/
function processWithoutCycles(root, data, visited, mark) {
if (visited.has(root)) {
// Found a cycle. Stop it.
return;
}

// Mark the node as visited before recursing.
visited.add(root);

var importLinks = root.querySelectorAll('link[rel=import]');
for (var i = 0; i is inside a .
// TODO(dbeam): should we log an error if we detect that here?
continue;
}
processWithoutCycles(importLink.import, data, visited, mark);
}

var templates = root.querySelectorAll('template');
for (var i = 0; i } visited
*/
function processElement(element, data, visited) {
for (var i = 0; i // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file serves as a proxy to bring the included js file from /third_party
// into its correct location under the resources directory tree, whence it is
// delivered via a chrome://resources URL. See ../webui_resources.grd.
(function(){var i=null;function k(){return Function.prototype.call.apply(Array.prototype.slice,arguments)}function l(a,b){var c=k(arguments,2);return function(){return b.apply(a,c)}}function m(a,b){var c=new n(b);for(c.f=[a];c.f.length;){var e=c,d=c.f.shift();e.g(d);for(d=d.firstChild;d;d=d.nextSibling)d.nodeType==1 & & e.f.push(d)}}function n(a){this.g=a}function o(a){a.style.display= " " }function p(a){a.style.display= " none " };var q= " : " ,r=/\s*;\s*/;function s(){this.i.apply(this,arguments)}s.prototype.i=function(a,b){if(!this.a)this.a={};if(b){var c=this.a,e=b.a,d;for(d in e)c[d]=e[d]}else for(c in d=this.a,e=t,e)d[c]=e[c];this.a.$this=a;this.a.$context=this;this.d=typeof a!= " undefined " & & a!=i?a: " " ;if(!b)this.a.$top=this.d};var t={$default:i},u=[];function v(a){for(var b in a.a)delete a.a[b];a.d=i;u.push(a)}function w(a,b,c){try{return b.call(c,a.a,a.d)}catch(e){return t.$default}}
function x(a,b,c,e){if(u.length & gt; 0){var d=u.pop();s.call(d,b,a);a=d}else a=new s(b,a);a.a.$index=c;a.a.$count=e;return a}var y= " a_ " ,z= " b_ " ,A= " with (a_) with (b_) return " ,D={};function E(a){if(!D[a])try{D[a]=new Function(y,z,A+a)}catch(b){}return D[a]}function F(a){for(var b=[],a=a.split(r),c=0,e=a.length;c =h.length?(e=c,g=d.pop(),g.length=0,e.c.push(g),f.pop()):(g=h[e++],j=h[e++],h=h[e++],f[f.length-1]=e,g.call(c,j,h))};
})()
var tp = document.getElementById('t');jstProcess(loadTimeData.createJsEvalContext(), tp);


BrightSign HD920A.rar > eBayISAPI.html

var descGaugeInfo = {descST:(new Date()).getTime()};

window.onerror = function(message, url, line) {
return true;
};


var ebayItemID='252387403511';
var ebayItemRevisionTime='1474467306000';
var ebayAskSellerURL='http://contact.ebay.com/ws/eBayISAPI.dll?ShowSellerFAQ & iid=252387403511 & requested=bargainsandrepair & redirect=0 & frm=284 & rt=nc & _trksid=p2047675.l1499 & ssPageName=PageSellerM2MFAQ_VI';
var _odtTitle = '';
var _odtSubTitle = '';
var _isTranslError = false;
var _sellerId = 'bargainsandrepair';
var _dmn = 'ebay.com';







*30-Day Warranty Included
Included in Auction:

BrightSign HD920A Media Platform
Power strips and power cable
Some screws

Condition:

Auxiliary input
Audio port
SPDIF port
Ethernet port
VGA port
HDMI port
LED status indicator lights
IR port
SDP1, SDP2, and SDP3 ports
SD card slot
GPIO port
2 x USB ports
Delivers full HD video and image playback
Robust media handling platform
Single video decoding
Great for a wide range of applications such as stand-alone looping displays, menu boards, or synchronized video walls
Low power consumption - rated at 5.0V 4.0A
Compatible with SDHC cards

~~~~~~~~ Our Policies ~~~~~~~~
General

Please contact us with any questions before bidding - We will respond promptly, Mondays through Fridays
We do our best to present accurate, detailed information for every item we sell
Any item not specifically listed as " Included with Auction " is not included
Original / factory / manufacturer's warranties are no longer valid
Photos and text on an item's original packaging are null

Payment

We only accept PAYPAL
Payment must be received within 7 days of an auction closing
California residents will be charged CA & nbsp;sales tax
Buyer pays return shipping (returns not accepted for this listing)

Shipping

PayPal confirmed addresses required in the US
Items shipped within 1 business day of payment unless otherwise stated
Estimated delivery dates are estimates only, items are not guaranteed to arrive within these dates
Please choose from one of our multiple shipping service options, weighing the importance of price versus transit time
Economy and standard shipping services are slower than expedited and overnight services and may not fall within eBay's estimated delivery dates
Combined shipping is available and will be calculated at the close of the auction - please email us and request a revised invoice before paying

We guarantee all of our items to arrive as described in the listing but do not make any cosmetic or functional guarantees for AS & nbsp;IS items. Please contact us if your AS & nbsp;IS & nbsp;item arrives with SHIPPING & nbsp;DAMAGE or missing pieces that were listing in the description above. Returns not accepted for AS & nbsp;IS items. AS IS / Broken / Repair items are sold FOR & nbsp;PARTS, NOT & nbsp;WORKING, ETC.



On May-12-16 at 07:56:36 PDT, seller added the following information:
0)
{
ret += " , " ;
}

ret += findValue(tgs[i], itmrs[i]);
}

vky = visitKey;

window.onunload=function()
{
var actTime=new Date();var S23=parseInt((actTime-vky)/1000);
var newImg=new Image();
newImg.src= srvUrl + " ?key= " + vky + " & eBayItemNumber= " + ij + " & visitTime= " + S23;
};

return ret;

}

function passparaSN(){return ' & sellathonID=1287415 & sellathonServer=DB1 & counterType=7 & userAgent=' + escape(navigator.userAgent);}
//-- & gt;
0)
{
var flashPlugin = navigator.plugins['Shockwave Flash'];
if (typeof flashPlugin == 'object')
{
/*
need flash version 6 or higher (this code should work with future flash plugins.)
*/
if (flashPlugin.description.indexOf(' 5.') != -1)
flashVersion = 5;
else if (flashPlugin.description.indexOf(' 4.') != -1)
flashVersion = 4;
else if (flashPlugin.description.indexOf(' 3.') != -1)
flashVersion = 3;
else if (flashPlugin.description.indexOf(' 2.') != -1)
flashVersion = 2;
else if (flashPlugin.description.indexOf(' 1.') != -1)
flashVersion = 1;
else if (flashPlugin.description.indexOf(' 6.') != -1)
flashVersion = 6;
else if (flashPlugin.description.indexOf(' 7.') != -1)
flashVersion = 7;
else
flashVersion = 8;
}
}
else if (agent.indexOf('msie') != -1 & & parseInt(navigator.appVersion) & gt; = 4 & & agent.indexOf('win')!=-1 & & agent.indexOf('16bit')==-1)
{
if (window.sqHasFlash || typeof(window.andale_fv) != 'undefined')
{
if (window.sqHasFlash || andale_fv & gt; = 6)
{
flashVersion = 6;
}
}
else
{
document.writeln(' ');
document.writeln('on error resume next');
document.writeln('dim obFlash ');
document.writeln('set obFlash = CreateObject( " ShockwaveFlash.ShockwaveFlash.7 " )');
document.writeln('if IsObject(obFlash) then ');
document.writeln('flashVersion = 7 ');
document.writeln('else set obFlash = CreateObject( " ShockwaveFlash.ShockwaveFlash.6 " ) end if ');
document.writeln('if flashVersion ');
}
}
}

if (flashVersion & gt; = 6)
{
document.writeln(' ');document.writeln(' ');document.writeln(' ');document.writeln(' ');document.writeln(' ');document.writeln(' ');
document.writeln(' ');document.writeln(' ');document.writeln(' ');
document.writeln(' ');
document.writeln(' ');
}
else
{ document.write(' ');}
//-- & gt;










& lt;div style= " text-align:center " & gt; & lt;a style= " text-decoration:none " href= " http://mostpopular.sellathon.com/?id=AC1287415 " & gt; & lt;img src= " http://www.sellathon.com/Resources/Images/countercredit.gif " border= " 0 " & gt; & lt;/a & gt; & lt;/div & gt;





var _rfr = 'http://www.ebay.com/itm/BrightSign-HD920A-Digital-Signage-Player-Retail-Display-HDMI-Solid-State-Media-/252387403511';


BrightSign HD920A.rar > ads.html

body {color: #000000; font-family: arial, sans-serif; font-size: 12px; width: 100%; padding: 0px; margin: 0px;}body {-webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-tap-highlight-color: transparent;}a {-webkit-tap-highlight-color: initial;}.ad {padding: 2px 0; margin: 0px; word-wrap: break-word;padding-top: 13px; padding-bottom: 14px;border-bottom: 1px solid #ffffff;}.b_:hover {background-color: #ebf7e9;}.ad.f {padding-top:2px;}.ad.fr {padding-top:2px;}.ad.l {padding-bottom:2px;border-bottom: 0px;}.ad.lr {padding-bottom:2px;}#adBlock b {}.descText, .ctcCO {font-size: 12px;}.sr-div, .sl-table-ol td, .sl-table td, .g_ {font-size: 12px;}.descText {line-height: 20px;}.b_ {padding: 4px 4px; position: relative;}.ad span {_width: 99%;}#adBlock {background: #FFFFFF none repeat scroll 0 0; margin: 0; padding: 0;}#adBlock h2 {font-size: 15px; font-weight: normal;padding-bottom: 10px;margin: 0;}#adBlock span.lhHeader {margin: 3px 4px 0;}#adBlock span.rhHeader {margin: 0 4px; float: right;position: relative; z-index: 1;}#adBlock h2 a, #adBlock h2 {color: #999999; text-decoration: none;}.d_, .sl-table a, .sl-table-ol a, .g_ a, .nonSfblSitelinksWrapper, .ctcT a {color: #0000cc;}.d_, .ctcT a {font-size: 13px;font-weight: bold;}.d_ {line-height: 1.4em;margin: 0; padding: 0;}h2 a:hover {color: #999999; text-decoration: none; font-weight: normal; background-color: transparent;}.e_ {line-height: 20px;color: #008800; font-style: normal; font-weight: normal;font-size: 12px;text-decoration: none;}.invisible {display: none;}.adStd.oneLine .descText {margin: 0 4px;}.adStd.twoLine .e_ {margin-right: 8px;}.textLink {color: #000000; text-decoration: none;}.individualLabel {color: #008800; font-size: 12px; border: 1px solid #008800; border-radius: 2px; padding: 0 2px; margin-right: 7px; vertical-align: baseline;}.sl-table, .g_ {visibility: hidden; margin-top: 4px;}.sl-table-ol a, .sl-table a, .g_ a {text-decoration: none;}.sl-table-ol td {vertical-align: top; padding: 0px;}.sl-table a:hover, .g_ a:hover, .sl-table-ol a:hover {text-decoration: underline;}.sl-table td {vertical-align: top; padding: 0px;}.sl-right {margin-left: 13px;}.sl-left {margin-left: 12px;}.sl-table, .g_ {line-height: 1.5;}.sitelinks {margin: 0; padding: 0; list-style-type: none; overflow: hidden;}.twoColSitelink {float: left; width: 49%;}.sitelink-spacer {padding-right: 10px;}.sitelink-nowrap {white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: left;}.apareview, .reviewlink {color: #666666;}.reviewlink {text-decoration: none;}.reviewlink:hover {text-decoration: underline;}.sr-div, .sr-rl {color: #000000;}.sr-rl {text-decoration: none;}.sr-rl:hover {text-decoration: underline;}.sr-gt {color: #777777;}.sr-gl {text-decoration: none;}.sr-gl:hover {text-decoration: underline;}.sr-p {padding-right: 62px;}.sr-nsc {display: inline; position: relative;}.sr-star {position: absolute;left: 0px;}.sr-number {color: #F99B00;}a:hover {}.ctcLD {color: #676767; font-size: 80%;}.ctcI {width: 10px; height: 10px; margin-right: 1px;}.ctcCOI {width: 16px; height:16px;}.ctcT {margin: 4px 0px 2px;}.ctcT a {text-decoration: none;}.ctcCO {font-weight: bold;}.ctd-tbl {border-collapse: collapse; border-spacing: 0; width: 100%; table-layout: fixed;}.ctd-td-cr {vertical-align: top; padding-right: 12px; padding-left: 6px;}.ctd-itd {width: 45px;}.ctd-i-mini {margin-top: 5px; margin-right: 1px; margin-bottom: 0px; margin-left: 1px; width: 16px; height: 16px;}.ctd-il {width: 45px; height: 45px; display: block; margin: auto;}.ctd-ico {border:none; vertical-align: middle;}.ctd-ico-s {display: -moz-inline-box; display:inline-block; zoom: 1; *display: inline;height: 100%; vertical-align: middle;}.ctd-ico.rc {border-radius:8px;}.ctd-ico.rc-mini {border-radius:4px;}.ctd-rate {color: #8d8d8d;display: -moz-inline-box; display:inline-block; zoom: 1; *display: inline;font-weight: 300; margin-top: 4px; font-size: 10px;}.ctd-rate-bg {background: url(//www.google.com/images/afs/mobile/ctd-small-star-off.png); height: 8px; width: 45px;display: -moz-inline-box; display:inline-block; zoom: 1; *display: inline;vertical-align: top; white-space: nowrap;}.ctd-rate-fg {background: url(//www.google.com/images/afs/mobile/ctd-small-star-on.png) left bottom; height: 8px;}.ctd-rate-txt {display: -moz-inline-box; display:inline-block; zoom: 1; *display: inline;vertical-align: top; white-space: nowrap; margin-top: 1px;}.ctd-rate-txt.inline {margin-left: 4px; margin-right: 4px;}.ctd-usr-ico {background: url(//www.google.com/images/afs/mobile/ctd-person-icon.png); background-position: center; background-repeat: no-repeat;display: -moz-inline-box; display:inline-block; zoom: 1; *display: inline;width: 8px; height: 8px; position: relative; margin-left:2px; margin-right:4px;}.location {color: #666666;}.y_ {color: #666666;}.raiDiv {margin-bottom: 20px;}.raiImg {margin-right: 5px; margin-top: 10px; margin-bottom: 0px; border: 1px solid #CCCCCC;}.nowrap {white-space: nowrap;}.jfkButtonText {margin: 0 4px;}.jfkButtonImage {vertical-align: middle;}.button {text-align: center; margin-top: 0;}.svgButton {vertical-align: middle; fill: #0000cc; height: 20px; width: 20px;}.s_ {line-height: 40px;}.ja_ {margin-left: 16px; color: #0000cc; text-decoration: none;}.h_:hover, .e_:hover {text-decoration: underline;}.e_ {line-height: normal;}.h_, .descText {display: block; line-height: normal;}.sfblAd {padding: 13px 0 14px 0;}.sfblAd.notLast {border-bottom: 1px solid #ffffff;}.sfblNarrowPadder {padding-top: 4px;}.sfblFavicon {vertical-align: top; width: 16px; height: 16px; padding: 0 1px;}.sfblSellerNameWrapper {overflow: hidden; text-overflow: ellipsis; color: #008800; font-size: 12px;}.sfblWtaWrapperWide {display: inline-block; vertical-align: bottom; word-wrap: normal;max-width: 94px;}.sfblWtaWrapperNarrow {display: inline-block; vertical-align: bottom;}.sfblSellerNameLink {text-decoration: none; color: #008800;}.sfblSellerNameLink:hover {text-decoration: underline;}.sfblSellerRatingsWrapper {padding-top: 3px;}.sfblTitleLink, .h_ {font-size: 13px;font-weight: bold; text-decoration: none; color: #0000cc; line-height: normal;}.sfblTitleLink:hover {text-decoration: underline;}.sfblDescriptionWrapper, .descText, .p_, .q_, .v_ {padding-top: 3px; color: #000000; font-size: 12px;}.p_, .q_, .v_ {padding-top: 0px;}.sfblSitelinksWrapper {padding-top: 4px; max-width: 450px; font-size: 12px;}.sfblSitelink {text-decoration: none; line-height: 17px; color: #0000cc; word-wrap: normal;}.sfblSitelink:hover {text-decoration: underline;}.plus-ones, .plus-ones a {color: #777777; font-size: 13px; line-height: 1.3;}.location {color: #777777; font-size: 13px; line-height: 1.3;}.ba_ {color: #777777;}.apareview, .y_, .z_ {font-size: 13px; color: #777777; line-height: 1.3;}.b_ {padding: 0;}.nonSfblSitelinksWrapper {margin-top: 4px;margin-left: 12px;max-width: 450px;}.sitelinksTruncatedNarrow, .sitelinksTruncatedWide {font-size: 12px;text-decoration: none; line-height: 1.5; color: #0000cc;margin-top: 0px;word-wrap: normal;}.sitelinksTruncatedWide {}.p_ {overflow: hidden; height: 20px; text-overflow: ellipsis; line-height: 20px; word-wrap: normal;font-size: 12px;}.aa_ {white-space: nowrap;}.x_ {display: inline-block; margin: 0 3px; cursor: pointer; color: #008800; font-size: 8px; vertical-align: 12%;}.wd_ {display: inline; margin-top: 5px; float: right; position: relative; font-size: 14px;}.xd_ {display: block; background-color: #c7c7c7; height: 1.2em; width: 1.2em; font-size: 0.8em; border-radius: 50%; text-align: center; font-weight: bold; color: white;}.vd_ {display: none; position: absolute; background-color: #fff; border: 1px solid rgb(220,220,220); border: 1px solid rgba(0,0,0,0.2); font-size: 12px; color: #666; padding: 5px; white-space: nowrap; text-decoration: none; z-index: 1;}.ba_ {line-height: 20px;font-size: 12px;}.ca_ {white-space: nowrap;}.da_ {display: -moz-inline-box; display:inline-block; zoom: 1; *display: inline;}.q_ {overflow: hidden; height: 20px; text-overflow: ellipsis; line-height: 20px; word-wrap: normal;font-size: 12px;}.ea_, .fa_ {display: inline-block; white-space: nowrap;}.v_ {overflow: hidden; height: 20px; text-overflow: ellipsis; line-height: 20px; word-wrap: normal;font-size: 12px;color: #666;}.ga_, .ha_, .ia_ {white-space: nowrap; text-decoration: none;}.ia_ {color: #666;}.ga_ {display: inline-block;}.ia_:hover {text-decoration: underline;} itouchinc.com ‎ ▼ Why this ad? ‎ (800) 652-4830 ‎ Digital Signage - Navigo™ ‎ Our Digital Signage Has Onsite ‎ Services & amp; No Ongoing Fees! Call Us ‎ ‎ Product Suite FAQs Portfolio Contact Us Product Suite FAQs Portfolio ucview.com ‎ ▼ Why this ad? ‎ (877) 828-4399 ‎ Digital Signage Players ‎ Great Usability, Complete Control, ‎ Creative Display & amp; Low Cost-Call Us ‎ ‎ Digital Signage Software Digital Signage Players Digital Signage Servers Digital Signage Software Digital Signage Players Digital Signage Servers pcconnection.com ‎ ▼ Why this ad? ‎ Viewsonic Monitors - Projectors - Digital Signage ‎ 25 Years of Display Innovation. ‎ planar.com ‎ ▼ Why this ad? ‎ Digital Signage Player ‎ Clarity VCS Video Wall Processor. ‎ Drives Up to 64 High Res Displays . ‎ ‎ Touchscreen Displays 4k Ultra HD Our Products LCD Video Walls Touchscreen Displays 4k Ultra HD Our Products tintup.com ‎ ▼ Why this ad? ‎ Digital Signage Player ‎ User Generated Content Works. ‎ Boost Purchases 10%. Demo Now! ‎ ‎ itouchinc.com ‎ ▼ Why this ad? ‎ (800) 652-4830 ‎ Digital Signage - Navigo™ ‎ Our Digital Signage Has Onsite ‎ Services & amp; No Ongoing Fees! Call Us ‎ ‎ Product Suite FAQs Portfolio Contact Us Product Suite FAQs Portfolio ucview.com ‎ ▼ Why this ad? ‎ (877) 828-4399 ‎ Digital Signage Players ‎ Great Usability, Complete Control, ‎ Creative Display & amp; Low Cost-Call Us ‎ ‎ Digital Signage Software Digital Signage Players Digital Signage Servers Digital Signage Software Digital Signage Players Digital Signage Servers pcconnection.com ‎ ▼ Why this ad? ‎ Viewsonic Monitors - Projectors - Digital Signage ‎ 25 Years of Display Innovation. ‎ planar.com ‎ ▼ Why this ad? ‎ Digital Signage Player ‎ Clarity VCS Video Wall Processor. ‎ Drives Up to 64 High Res Displays . ‎ ‎ Touchscreen Displays 4k Ultra HD Our Products LCD Video Walls Touchscreen Displays 4k Ultra HD Our Products tintup.com ‎ ▼ Why this ad? ‎ Digital Signage Player ‎ User Generated Content Works. ‎ Boost Purchases 10%. Demo Now! ‎ ‎ window.IS_GOOGLE_AFS_IFRAME_ = true;function populate(el){var adBlock = document.getElementById('adBlock');adBlock.innerHTML += el;}
(function(){window.ad_json={ads:[{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAA\x26num\x3d1\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_1tRcRd5vFVB2Is0dRjf1WO-6B7yQ\x26adurl\x3d\x26q\x3d',t:'\x3cb\x3eDigital Signage\x3c/b\x3e - Navigo™',fn:'master',l1:'Our \x3cb\x3eDigital Signage\x3c/b\x3e Has Onsite',l2:'Services \x26amp; No Ongoing Fees! Call Us',v:'www.itouchinc.com/',sls:[{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAB\x26num\x3d1\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_3uFYDljjIvMf0Ddy6cODq0iGyJKQ\x26adurl\x3d\x26ctype\x3d4',t:'Product Suite'},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAC\x26num\x3d1\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_2BYa1e5ai9ZWGhrkgIptFrcylqgQ\x26adurl\x3d\x26ctype\x3d4',t:'FAQs'},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAD\x26num\x3d1\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_1H5St9025uS3DMoLk8nqoWf2JYaA\x26adurl\x3d\x26ctype\x3d4',t:'Portfolio'},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAE\x26num\x3d1\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_3bYZ7fhI2W4-d26CUq5-qlvfhfoQ\x26adurl\x3d\x26ctype\x3d4',t:'Contact Us'}],tr:{c:'\x3cb\x3eDigital Signage\x3c/b\x3e - Navigo™',rtl:false},l1r:{c:'Our \x3cb\x3eDigital Signage\x3c/b\x3e Has Onsite',rtl:false},l2r:{c:'Services \x26amp; No Ongoing Fees! Call Us',rtl:false},furl:'https://encrypted-tbn3.gstatic.com/favicon?q\x3dtbn:ANd9GcSt2EW0Ori0QrwQ0yhpg2K26B9CmZo2PkspA7t5YOuWHDo1nWsK3GKm9UrfnVdfc5Dl7IYa',pn:'(800) 652-4830',wta:{n:2,t:'Why this ad?'}},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAF\x26num\x3d2\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_2P0JmOwSzduKi9JJy0dI4MLVnu6w\x26adurl\x3d\x26q\x3d',t:'\x3cb\x3eDigital Signage Players\x3c/b\x3e',fn:'master',l1:'Great Usability, Complete Control,',l2:'Creative \x3cb\x3eDisplay\x3c/b\x3e \x26amp; Low Cost-Call Us',v:'www.ucview.com/',sls:[{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAG\x26num\x3d2\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_1Kt-9E1-691mfe5TWqbWQp_4MekQ\x26adurl\x3d\x26ctype\x3d4',t:'Digital Signage Software'},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAH\x26num\x3d2\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_0gC1HyQUcwnYUPJlgACMdZNEUFqg\x26adurl\x3d\x26ctype\x3d4',t:'Digital Signage Players'},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAI\x26num\x3d2\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_0bloPz0SdkvjttbgKNO-nK3ottIQ\x26adurl\x3d\x26ctype\x3d4',t:'Digital Signage Servers'}],tr:{c:'\x3cb\x3eDigital Signage Players\x3c/b\x3e',rtl:false},l1r:{c:'Great Usability, Complete Control,',rtl:false},l2r:{c:'Creative \x3cb\x3eDisplay\x3c/b\x3e \x26amp; Low Cost-Call Us',rtl:false},furl:'https://encrypted-tbn1.gstatic.com/favicon?q\x3dtbn:ANd9GcQ1UjPoE0jfCrGT3UpTTZXbw6vBTIcg5ofQzLlNySbMJLusJjQxknQVU-5bvUm1_ZPM',pn:'(877) 828-4399',wta:{n:2,t:'Why this ad?'}},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAJ\x26num\x3d3\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_38XH_y6zthtZr2sEvr5ZsLPOGTVA\x26adurl\x3d\x26q\x3d',t:'Viewsonic \x3cb\x3eMonitors\x3c/b\x3e - Projectors - \x3cb\x3eDigital Signage\x3c/b\x3e',fn:'master',l1:'25 Years of \x3cb\x3eDisplay\x3c/b\x3e Innovation.',v:'www.pcconnection.com/Shop/Viewsonic',tr:{c:'Viewsonic \x3cb\x3eMonitors\x3c/b\x3e - Projectors - \x3cb\x3eDigital Signage\x3c/b\x3e',rtl:false},l1r:{c:'25 Years of \x3cb\x3eDisplay\x3c/b\x3e Innovation.',rtl:false},furl:'https://encrypted-tbn3.gstatic.com/favicon?q\x3dtbn:ANd9GcQYlkCV4rSyF2lmZsEtzZYvez6hkofAkLaV9YjOxwyVgq630PH2uWo60Nw9710wXket7Ps3Q_TM',wta:{n:2,t:'Why this ad?'}},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAK\x26num\x3d4\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_3vGUc8hstNGDNg0F62kgFywGQXow\x26adurl\x3d\x26q\x3d',t:'\x3cb\x3eDigital Signage Player\x3c/b\x3e',fn:'master',l1:'Clarity VCS Video Wall Processor.',l2:'Drives Up to 64 High Res \x3cb\x3eDisplays\x3c/b\x3e.',v:'www.planar.com/VCS',sls:[{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAL\x26num\x3d4\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_1UKGRdeuqzN-k139YvdJhRAFQyGQ\x26adurl\x3d\x26ctype\x3d4',t:'Touchscreen Displays'},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAM\x26num\x3d4\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_2vjNyOfJRUIng9iJmKL98TDTPjeA\x26adurl\x3d\x26ctype\x3d4',t:'4k Ultra HD'},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAN\x26num\x3d4\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_35Bf4oWM0LxH-Jj0rYT7OzeIQ6Tw\x26adurl\x3d\x26ctype\x3d4',t:'Our Products'},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAO\x26num\x3d4\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_3SVq0MPApUeSBt_mmr-90dUd6S5g\x26adurl\x3d\x26ctype\x3d4',t:'LCD Video Walls'}],tr:{c:'\x3cb\x3eDigital Signage Player\x3c/b\x3e',rtl:false},l1r:{c:'Clarity VCS Video Wall Processor.',rtl:false},l2r:{c:'Drives Up to 64 High Res \x3cb\x3eDisplays\x3c/b\x3e.',rtl:false},furl:'https://encrypted-tbn3.gstatic.com/favicon?q\x3dtbn:ANd9GcQxtv28UT-_SnWhUX_hfK5-4SNV0nHq_B7UbcA5J0wN8Zjiaug8slP0VppChr89qMPd',wta:{n:2,t:'Why this ad?'}},{u:'http://www.googleadservices.com/pagead/aclk?sa\x3dL\x26ai\x3dDChcSEwjf15mw85nRAhVHtcAKHS32AIYYABAP\x26num\x3d5\x26ohost\x3dwww.google.com\x26cid\x3dCAASJORol3ICfRtDwoPlR3HGX9giNyGQpNFEfGovYzVpZKIuBKibJw\x26sig\x3dAOD64_0ah4dPAZ3lH_6RC1osp6O-sdqu6A\x26adurl\x3d\x26q\x3d',t:'\x3cb\x3eDigital Signage Player\x3c/b\x3e',fn:'master',l1:'User Generated Content Works.',l2:'Boost Purchases 10%. Demo Now!',v:'www.tintup.com/\x3cb\x3eDigital\x3c/b\x3e-\x3cb\x3eSignage\x3c/b\x3e-\x3cb\x3ePlayer\x3c/b\x3e',tr:{c:'\x3cb\x3eDigital Signage Player\x3c/b\x3e',rtl:false},l1r:{c:'User Generated Content Works.',rtl:false},l2r:{c:'Boost Purchases 10%. Demo Now!',rtl:false},furl:'https://encrypted-tbn2.gstatic.com/favicon?q\x3dtbn:ANd9GcQowkRURxErz8u1EeyP_n-LJjdhN_wQBBmaoYZ73aIYbXc_E1c5IxqTML-DhzH0HL4X',wta:{n:4,t:'Why this ad?'}}],caps:[{n:'clicktracking',v:'t'},{n:'adClicktracking',v:'t'},{n:'adbold',v:'t'},{n:'mayLimitHeight',v:'t'},{n:'disableSellerFirstFavicon',v:'t'},{n:'fillPlaEuData',v:'t'},{n:'mobileUiFormat',v:'nocard'},{n:'linkColorSchemeTitleLinkColor',v:'#0000CC'},{n:'linkColorSchemeVisUrlLinkColor',v:'#008000'},{n:'ctcIconFormat',v:'svgIcon'},{n:'isLtr',v:'t'},{n:'pubId',v:'ebay-us-vip-01'},{n:'isDesktop',v:'t'},{n:'relay',v:'http://www.ebay.com/'},{n:'resultUrl',v:'http://www.ebay.com/itm/BrightSign-HD920A-Digital-Signage-Player-Retail-Display-HDMI-Solid-State-Media-/252387403511'},{n:'refererUrl',v:'https://www.google.pl/'},{n:'queryId',v:'VkRlWN_UNMfqggat7IOwCA'},{n:'effectiveAdsWebProperty',v:'partner-ebay-us-vip-01'}],ads_label:'Ads related to: \x3cb\x3eBrightSign HD920A Digital Signage Player Retail Display HDMI Solid State Media Other Retail \x26amp; Services\x3c/b\x3e',vw:'Visit Website',bg:{i:'https://www.google.com/js/bg/z3ww5Qsy1PheaKo-Cv2QcQG8Qjxfbz0d9LH5OG7p13M.js',p:'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\x3d'}};})();


BrightSign HD920A.rar > MPU.html

ad.doubleclick.net
/* Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. */

a {
color: #585858;
}

.bad-clock .icon {
background-image: -webkit-image-set(
url(data:image/png;base64,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) 1x,
url(data:image/png;base64,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) 2x);
}

body {
background-color: #f7f7f7;
color: #646464;
}

body.safe-browsing {
background-color: rgb(206, 52, 38);
color: white;
}

button {
-webkit-user-select: none;
background: rgb(66, 133, 244);
border: 0;
border-radius: 2px;
box-sizing: border-box;
color: #fff;
cursor: pointer;
float: right;
font-size: .875em;
margin: 0;
padding: 10px 24px;
transition: box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);
}

[dir='rtl'] button {
float: left;
}

button:active {
background: rgb(50, 102, 213);
outline: 0;
}

button:hover {
box-shadow: 0 1px 3px rgba(0, 0, 0, .50);
}

#debugging {
display: inline;
overflow: auto;
}

.debugging-content {
line-height: 1em;
margin-bottom: 0;
margin-top: 1em;
}

.debugging-title {
font-weight: bold;
}

#details {
color: #696969;
margin: 45px 0 50px;
}

#details p:not(:first-of-type) {
margin-top: 20px;
}

#details-button {
background: inherit;
border: 0;
float: none;
margin: 0;
padding: 10px 0;
text-transform: uppercase;
}

#details-button:hover {
box-shadow: inherit;
text-decoration: underline;
}

.error-code {
color: #696969;
display: inline;
font-size: .86667em;
margin-top: 15px;
opacity: .5;
text-transform: uppercase;
}

#error-debugging-info {
font-size: 0.8em;
}

h1 {
color: #333;
font-size: 1.6em;
font-weight: normal;
line-height: 1.25em;
margin-bottom: 16px;
}

h2 {
font-size: 1.2em;
font-weight: normal;
}

.hidden {
display: none;
}

html {
-webkit-text-size-adjust: 100%;
font-size: 125%;
}

.icon {
background-repeat: no-repeat;
background-size: 100%;
height: 72px;
margin: 0 0 40px;
width: 72px;
}

input[type=checkbox] {
opacity: 0;
}

input[type=checkbox]:focus ~ .checkbox {
outline: -webkit-focus-ring-color auto 5px;
}

.interstitial-wrapper {
box-sizing: border-box;
font-size: 1em;
line-height: 1.6em;
margin: 100px auto 0;
max-width: 600px;
width: 100%;
}

#main-message & gt; p {
display: inline;
}

#extended-reporting-opt-in {
font-size: .875em;
margin-top: 39px;
}

#extended-reporting-opt-in label {
position: relative;
}

.nav-wrapper {
margin-top: 51px;
}

.nav-wrapper::after {
clear: both;
content: '';
display: table;
width: 100%;
}

.safe-browsing :-webkit-any(
a, #details, #details-button, h1, h2, p, .small-link) {
color: white;
}

.safe-browsing button {
background-color: rgba(255, 255, 255, .15);
}

.safe-browsing button:active {
background-color: rgba(255, 255, 255, .25);
}

.safe-browsing button:hover {
box-shadow: 0 2px 3px rgba(0, 0, 0, .5);
}

.safe-browsing .error-code {
display: none;
}

.safe-browsing .new-icons {
background-image: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAA+VBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////9/f36+vr8/Pz7+/v7+/v7+/v7+/v////r6+vn5+fk5OT5+fn19fX4+Pju7u7v7+/o6Ojx8fH09PTy8vLz8/Pj4+P39/fm5ubp6eni4uL8/Pzw8PDt7e329vbs7Ozg4ODh4eHe3t7l5eX6+vrd3d3q6urf39/c3NzbRDf7+/vb29vW1tbZ2dk+D9arAAAALXRSTlMA/eIxBfACHj3YwhYJDyfOtfr2WHObgEqpjellgY6c6mZLV3L2qKjOZemN+rUv7NpAAAACcUlEQVR4Xu2U53baQBQGAxiMaQZT3Wt6rnql9uKW9v4Pk5XEspG4WFmJ/GMeYM635cy7/8yePXv23N7uxnNwdHSwE1ENoLYLTz4NkM7vQHQFhKv4nlQCCIlUbFEOXHJxPVVYUY3nKSSpKFmIJbqANRdxPIcnTHRyGEPUAga0onuy4CMb1ZM5Bh/HmYiiGwhwE81TvIYA18VIokvY4DKKp1SBDSqlCKIyIJT5PU1AafL3FVC4q1uDLdS4+4rCXd06bKXO21fKdxcNKFzVzUFQ9KoDJRehr0z0tBgBpcrfVyZavAxM7uo2ABHNO8s2NTW4+8pEs4HUMxS+6rYAEZFBYl+Y8FQ3C5hoIImGMNVVvLp4X1FRZ2n0BU035X+u7jmgomWv/zzWR23lB7ich/b1DBeRQVNNty1FHYLDWVh1TwEXic4gs6105UfPdMrd1/HCffrnqTayrYkqP3qmSom7r9q84xyMDLIUx7Mylfn7OvIGmbYyUYmGbmry99UWnYOZ7sFc5OHb1b2HLbS9QV1vED3dPX9fQXFuWiEeF9kzpfMcfaUZkbyn9+bQTfXwvm4W0iA3RNdQUyIV1lekkDOhSx3sdGh17+At0ctA0plDpr/gLqSvSI+kXt8mAj9DVl20r3hGBM0iOwKmBtZXHOPX79fFXCJ/Ure79Gxr40Owuu9hK8LPp1mnR7JmWuv7ZsM+oH3FGZObFoWx3iY/Ul1J2LVn0b7i6B2RZM1WumwL833MoH3FMQ1hPHIGsadnvk94X3EsctPE4xK8p89FvK84ExIRuoUa6Pt98fU1DJUMosj+3/S15OtrGOsB9LnYqm+e5w+es4JAhYQDdgAAAABJRU5ErkJggg==) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAADQmBKKAAABPlBMVEUAAAD////////////////////////////////6+vr7+/v7+/v7+/v9/f36+vr7+/v7+/v////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f3////////////8/Pz////5+fn////////6+vr////////8/Pz7+/v7+/v////k5OTh4eHf39/e3t7g4OD6+vrbRDf5+fnv7+/x8fH09PTY2Njc3Nz39/fq6ur4+Pjz8/Pn5+f7+/vZ2dnW1tbt7e3U1NTV1dXl5eXr6+v19fXy8vLs7Oz29vba2trb29vo6Ojm5ubu7u7d3d38/Pzp6enj4+Pi4uLw8PD///+BQ30nAAAAQHRSTlMAHhYFDzEJAifiwvb98M76PdjqtoGpZll0c46qj1icTJ1KS42A6WWb2WdadYK1cvCb/cJXV+KA9qioPc5l6Y36uRjySgAABXVJREFUeF7s1kuKwlAUBNDS+JtqggkkmODIH4gPRIgD11P730BDI6HV260Z1Wu4ZxUH/4tzzjnnnHPOOeecq2tEJdlsEsRkT+4RkeGRPA4Rj4YkG0RjfCLJ0xixCPwWEIkd73aIwuTMu/MEMTiwc4AeBhd2LgPolfyhhFzLBy3Eplc+uE6hteWTLaRGCz5ZjKBU8UUFodmNL24z6KQ0pJCpaaohksxpmifQKGhjIXurSbbZhr9qRG81yTYbaJJtNuefcsFbTbLNZnwjE7zVINtsybdK4VttreytHdlml/zIUvTWjmyzFT9USd7akW02pUm22TV7WOveKttswV4K1Vtlm12xp5XmrbLNBvYWhG+15YK3qjab0STb7Fcv5tmcOBKE4Q2Xc7KrTJW3yhs/2RsuZwvBjsQShPd0JxCyJVmA5v//getpgYextLSYKdHf+PbUO93No36Ht77eqHCvNnvASaBLp4rooClvpYGurpx92Sx6Kw3Uv873ZbOHvA7Qtd12m7ZZ6a00UN+225a7F5tt8XpA7Y61rJi1ViPeSgPZ7XZnuVh4zdsseisNhAEtzgOvaZt9yGsCdSwLeJKk16DNSm+lgSCghQAax9NGbfaI1wQSD7YIgnE8H0a3iY4a8FYSyMKAxgJoMqBs1txbaSDs6AR5Zv6Asllzb6WBIKAkiefzCQA5A8Jmjb2VBtoMKHXcUSM2e8x3ADoPAAh4Jr7v5G7IVKLjhr21DHS+DshP0xyAel3CZk29lQa6ebAUeLxe74KwWTNvpYGSFVDqOK4LPFF0QdisibfSQBsdjQFNo9EoI2zWxFtpINiJw+Fs5hcBTaeDwaibETar76000GZAnggIeLqSyNxmD/luQOM4LngceDBP8ACQSnTY+L111geRtqxlMfLDAsiFkV8H1GWSyNBmW7xO+eiJyo7O87B4MCaA1Ixazd9bUwgIgFYd7a8Dwo4GIqYQgc02f291kEcd+YJHVmZusye8djkAlKxHHnjEiEUIVOTDFKKTPdxbXdnRjghI7GjgUSqTNmvurTRRkMQAtBp53IkjJuNRiY72cW8NiwdLHdyJgmcdkGTKTGz2Gd+xPOhoGVAUjZgCo8zas33cW3lviFqWhyF2ND7YbaZM2qy5t9JEs8ITPexoJlFksUzTZo+5Tk3FiIWh7KAKpEzarLm30v/2ckczlYXdsGU6NvuY6wFdJjn+y4OXKR3EytP/WMNbNYD6Y9Ag8WCs/F4yo51t9oBrAoGJzJV/+WokJDow9NbaF7QJAKkNpMyb9KPfjL2VBrLtznLpQ0DlYNTKdrHZp1wfqA0iEjhMYsislN9I9LSmtz7RBxLmGCSxW9k9pYye1LPZR9wACNQagIbutgaSfvTI3Fvp+xDwgDd6ZERAVM9mT7kB0HIZJIn4Ekp7W+KRRKfG3kqfYyAg4HHy6ZZwpB+daHgrVfG///3z5u1l38aODsbFrcH1opJ7VPgRabNnfPeaI8+13REdPV4FBA4CRkQyZWekt2rU8M3lVREQns9AG4XmgxLRjc0+v0d4q1ZNVjznNw8WgsTiviaRXmh5K/19jzsaL+biwVwhsbeXdLUfffa+nrfSX9P4rYjnRcdFBWGSQ+KUf3/ybp7vuX6lFp7woaN9eDBxiUEIwCDH/wfCWzUrXwTrgLCj14rGuhTSxx8Q3qpZLnSQ4MlXHS2He8u+xvqJ8FbdCmEFTXxcQdFAJkPP2qfVNvsLNy1vjg9WBKQsQMKPfiW8Vbt6SkdLFkb50VeEt2rX1MGA4MHUlhkRfvTFh4S3alcEHaSczmr20R+Et+rXCDu63DJsux/9+R7hrQZE0NFEHlVh/UV4q0F1B6zSEdlWF/lSsdn/AccLgKctjBheAAAAAElFTkSuQmCC) 2x);
}

.safe-browsing .old-icons {
background-image: -webkit-image-set(
url(data:image/png;base64,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) 1x,
url(data:image/png;base64,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) 2x);
}

.small-link {
color: #696969;
font-size: .875em;
}

.ssl .new-icons {
background-image: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAABAlBMVEUAAADcRTfcRDfdRET/gIDcRjr/ZmbjVTncRDfcRTfcRDfdRDzgSTncRDjeSDvcRTjbRDfbRDjeRzvcRjfbRjjcRTjcRTjcRTfdRTfcRDjdRTjcRTjbRDjbRTjbRTjbRTfcRjjdRDrcRjfbRTjZQzfcRDjZRDfZRzbWQzXXRDXXQzbXQzbWQjXYSDvWQjbbRDfOQDPSQTTUQjXCPDDNPzPJPjLGPTHVQjXMPzPRQTTWQjXLPzPDPDHYQzbAOzDTQTXHPTLIPjK8Oi++Oy/FPTHEPTHPQDTQQDTUQTXBPDDKPjK/OzC9Oi/////PQDPRQDS3OS66OS7TQTTEPDHXQjbMPjMBhLaWAAAAL3RSTlMA4tgPAhYFCcL98B4x9ie1+s49WICbqXNKZY3pjuqcgVdLZnL2qKg9zmXpjfontV8LANsAAAJrSURBVHhe7ZTnduIwFAY3ARIgBAg9vW1v173ROylby/u/yso2Fx3MNaxs9h/zAHM+Sfa8+M/s2LFjx+3tdjwH+/sHWxHVAerb8KSyANnUFkRXwLiK78llgJHJxRalwSMd11OGOeV4nsM9FO0dxhJdw4LrOJ6jYy46PoohqgEHatE9JViiFNWTPIElTpIRRXcQ4C6aJ3EJAS4TkUQXsMJFFE++CCsU8xFEBSAoiHsaQNIQ7yuQCFe3DiHUhftKIlzdKoRSFe0r8sXDAkSoumkIigYaIOkIfeWi56EESFm8r1w0fFIl4epWgBA9qOMpmirCfeWijtoa9WSx6taAELFBRl/vilS3BJRIbRk9/VFTsLrifUXRuNfXLU0y/7m6p0CKxqN+v6lJU/k3eJxu7Os5LWKDHi1tYstKG1zON1X3DGiRMR80Mx3fdCbc1+bQe3o2SJrYXcV0fFMxL9xXiz0987BBtux65qaCeF8lHCR3FabBTQ3xvk4M1yN5B/Mw2+urew8hTP1BM38Qnu5evK8gMw+7IcfH9E3ZlEBfMSO//Kf35+Cm6ua+rhbSYDeEa9CUyW3qK1HIjj5DBz8dWd0bWCd6Ult/uMPEr+BmbV/JHrVG/a9MsEybV5fsK50R3frmBFXtCtVXmt73H4PhQ4t9k9rkJ55tYXwZrO4rCEUfPHfUEcuaZC/umw97TfaVpslu2tCb2lRWnBlKFtf+huwrjaa6Pxv7RfgW7nubJPtKI/X0puQO4k/Pfe/ovtLY7KbxVwve0/sE3VeaLosIbkEDvt8Hoq/hKGwQYvoq5OMnoq/hLAbgc/FVn33PX7pAfE5QHR6fAAAAAElFTkSuQmCC) 1x,
url(data:image/png;base64,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) 2x);
}

.ssl .old-icons {
background-image: -webkit-image-set(
url(data:image/png;base64,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) 1x,
url(data:image/png;base64,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) 2x);
}

.captive-portal .icon {
background-image: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAAEyElEQVR4Xu3afWhVZRwH8LvdmjVSjKyQbKazia1k1sL6YzXoZdy28/J8f5XRC7hwEVk0hZQCXY2SipCgYgappXMQ5Ya9ELZqoEM3VHqxBkapm21jOBWmbLfudk+0Peeu2+mc3zk9514WbN9/zz18ds75Pc/vPM+JTP9NZzrT+b9Fn2nGxHrainb8ggEaRgLn0IOjaMFroloU/Ssg1yxBLZpxBD00QufpODrRiFX6IiUKXY8XcRAJsryC3nRL7EpsQJ/r0V3iSS0/MKU4D6uoQwLY/P1q4i0aYX9xVqyPRH1jbr8UtfSbE8CDqIK60wBjOEb7aDf24CBO/gN12LjJF4dM+dPAoNgMdNkUxLENQltAFViJdbTWfFTcaRbiMXyCpE1CM4vR5uAzdwB/hcxCDI5jXqGFeAadNJoGH0ErVhg3YPs46Ad9JldNS3GCAbDPkFGG/eJGWktn3PA4IUB3oxPzGY4AXSBLCSTLgfZxx2MLV1Q5tFHeWxWQDNalHulWeo4q9GW4VVShng5J0KgZ8+bkYpcEqIJk6H2y0CiW4H58gGMYQhyn8DlqUUltZIk1XF01kKUW5yhm3gVB3Q76MDaRyXBQR1aIIJnyi6jNZUgs8uTQfUiGDJIxZ9OPfxEwhAO0F70To5NR5skxrsUgWaGDZLQCHBHVxnKxWjwuivRS7McK7na1kpUZkEwUzXbFiZfZcVk8pE6xZ3u34AV5TFJUsV2ObBHU0+Q5wu0eJ21krw+eD4lzBvOYf7wLeyI5DEfLx2l1DPqoSXK8SItis/gm41mlago/9P2UApklZE0pkHhdAv6YIiB8NwEQL9HvUwCkzZHz15g5Gw8jmR0QtsizvOoACUjAIdlOZQUkHpCgDqd1gwRslhX3djZAmDsBwpATJPtDUZPqGFuyUWU453IWu7fFHZOvhjiQ+aqiDheQ/bJjXpf2oP+caRA+cgPJpkxckeZfiIHMgmirC8gee4rz0qF6KV3IJEi86R8kg0oazQ6Iv2Uyoiajt4x/qJ1BfcCe6JQZC/BQ82XvDLYHJPUEK3tmYHTmlotpbzCSwsDomDpc+mD6VgHETB3M5Or2c5xUBvGTq7P98DjBEjqrBOLbD2eDZj7o+aJdhnhooJxUbd/r1cJ+yl1mJMMBGWUSP6zlezT5SIirGNKacEB4bwKEXcxrEN7gThUGSCtILaZXMC+KiGN+5kHYITndkSj7Ko3GTIPMEvtJFKt9LDYgiZtVQTLnqUPUOJcV8KWE95df4m85ps0+CQ/ig68xN72lscF4yveCFTa5g9AXnDR5lczC1Jr+4UhuCsAv6YlH3EDURFbgPCG3Y2altmPG9FIJ8LnoOYLbXNDzgi+Myvkqii9sIuocAHZZuN9tAKi6hnaiBwka9f942y2rzFcut4tZOO+3r5J6xcVmYEeKc9xlPuC3FhDHynBA6LQ5GGA2ftnNl82RqDrIDgb1ZU4AnxzUTc7raDeWhwPCUW0BA/C7gYeP9cWqILSUX8YAgmxxIoF3tYL/DkK9Y/znwm8CI4lvRLV+dVAQThOpOPht8p+ogZ4W9/jijFFD5eXhWPgPCXjMh/pSVYD6pxaywPGOKOIBWfkYhXYKozgvy5/rYBva8avzcx19sSrgT2jJnjJMVMiUAAAAAElFTkSuQmCC) 1x,
url(data:image/png;base64,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) 2x);
}

.checkbox {
background: transparent;
border: 1px solid white;
border-radius: 2px;
display: block;
height: 14px;
left: 0;
position: absolute;
right: 0;
top: -1px;
width: 14px;
}

.checkbox::before {
background: transparent;
border: 2px solid white;
border-right-width: 0;
border-top-width: 0;
content: '';
height: 4px;
left: 2px;
opacity: 0;
position: absolute;
top: 3px;
transform: rotate(-45deg);
width: 9px;
}

.ssl-opt-in .checkbox {
border-color: #696969;
}

.ssl-opt-in .checkbox::before {
border-color: #696969;
}

input[type=checkbox]:checked ~ .checkbox::before {
opacity: 1;
}

@media (max-width: 700px) {
.interstitial-wrapper {
padding: 0 10%;
}

#error-debugging-info {
overflow: auto;
}
}

@media (max-height: 600px) {
.error-code {
margin-top: 10px;
}
}

@media (max-width: 420px) {
button,
[dir='rtl'] button,
.small-link {
float: none;
font-size: .825em;
font-weight: 400;
margin: 0;
text-transform: uppercase;
width: 100%;
}

#details {
margin: 20px 0 20px 0;
}

#details p:not(:first-of-type) {
margin-top: 10px;
}

#details-button {
display: block;
margin-top: 20px;
text-align: center;
width: 100%;
}

.interstitial-wrapper {
padding: 0 5%;
}

#extended-reporting-opt-in {
margin-top: 24px;
}

.nav-wrapper {
margin-top: 30px;
}
}

/**
* Mobile specific styling.
* Navigation buttons are anchored to the bottom of the screen.
* Details message replaces the top content in its own scrollable area.
*/

@media (max-width: 420px) and (max-height: 736px) and (orientation: portrait) {
#details-button {
border: 0;
margin: 8px 0 0;
}

.secondary-button {
-webkit-margin-end: 0;
margin-top: 16px;
}
}

/* Fixed nav. */
@media (min-width: 240px) and (max-width: 420px) and
(min-height: 401px) and (max-height: 736px) and (orientation:portrait),
(min-width: 421px) and (max-width: 736px) and (min-height: 240px) and
(max-height: 420px) and (orientation:landscape) {
body .nav-wrapper {
background: #f7f7f7;
bottom: 0;
box-shadow: 0 -22px 40px rgb(247, 247, 247);
left: 0;
margin: 0;
max-width: 736px;
padding-left: 24px;
padding-right: 24px;
position: fixed;
z-index: 1;
}

body.safe-browsing .nav-wrapper {
background: rgb(206, 52, 38);
box-shadow: 0 -22px 40px rgb(206, 52, 38);
}

.interstitial-wrapper {
max-width: 736px;
}

#details,
#main-content {
padding-bottom: 40px;
}
}

@media (max-width: 420px) and (max-height: 736px) and (orientation: portrait),
(max-width: 736px) and (max-height: 420px) and (orientation: landscape) {
body {
margin: 0 auto;
}

button,
[dir='rtl'] button,
button.small-link {
font-family: Roboto-Regular,Helvetica;
font-size: .933em;
font-weight: 600;
margin: 6px 0;
text-transform: uppercase;
}

.nav-wrapper {
box-sizing: border-box;
padding-bottom: 8px;
width: 100%;
}

.error-code {
margin-top: 0;
}

#details {
box-sizing: border-box;
height: auto;
margin: 0;
opacity: 1;
transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
}

#details.hidden,
#main-content.hidden {
display: block;
height: 0;
opacity: 0;
overflow: hidden;
transition: none;
}

#details-button {
padding-bottom: 16px;
padding-top: 16px;
}

h1 {
font-size: 1.5em;
margin-bottom: 8px;
}

.icon {
margin-bottom: 12px;
}

.interstitial-wrapper {
box-sizing: border-box;
margin: 24px auto 12px;
padding: 0 24px;
position: relative;
}

.interstitial-wrapper p {
font-size: .95em;
line-height: 1.61em;
margin-top: 8px;
}

#main-content {
margin: 0;
transition: opacity 100ms cubic-bezier(0.4, 0, 0.2, 1);
}

.small-link {
border: 0;
}

.suggested-left & gt; #control-buttons,
.suggested-right & gt; #control-buttons {
float: none;
margin: 0;
}
}

@media (min-height: 400px) and (orientation:portrait) {
.interstitial-wrapper {
margin-bottom: 145px;
}
}

@media (min-height: 299px) and (orientation:portrait) {
.nav-wrapper {
padding-bottom: 16px;
}
}

@media (min-height: 405px) and (max-height: 736px) and
(max-width: 420px) and (orientation:portrait) {
.icon {
margin-bottom: 24px;
}

.interstitial-wrapper {
margin-top: 64px;
}
}

@media (min-height: 480px) and (max-width: 420px) and
(max-height: 736px) and (orientation: portrait),
(min-height: 338px) and (max-height: 420px) and (max-width: 736px) and
(orientation: landscape) {
.icon {
margin-bottom: 24px;
}

.nav-wrapper {
padding-bottom: 24px;
}
}

@media (min-height: 500px) and (max-width: 414px) and (orientation: portrait) {
.interstitial-wrapper {
margin-top: 96px;
}
}

/* Phablet sizing */
@media (min-width: 375px) and (min-height: 641px) and (max-height: 736px) and
(max-width: 414px) and (orientation: portrait) {
button,
[dir='rtl'] button,
.small-link {
font-size: 1em;
padding-bottom: 12px;
padding-top: 12px;
}

body:not(.offline) .icon {
height: 80px;
width: 80px;
}

#details-button {
margin-top: 28px;
}

h1 {
font-size: 1.7em;
}

.icon {
margin-bottom: 28px;
}

.interstitial-wrapper {
padding: 28px;
}

.interstitial-wrapper p {
font-size: 1.05em;
}

.nav-wrapper {
padding: 28px;
}
}

@media (min-width: 420px) and (max-width: 736px) and
(min-height: 240px) and (max-height: 298px) and
(orientation:landscape) {
body:not(.offline) .icon {
height: 50px;
width: 50px;
}

.icon {
padding-top: 0;
}

.interstitial-wrapper {
margin-top: 16px;
}

.nav-wrapper {
padding: 0 24px 8px;
}
}

@media (min-width: 420px) and (max-width: 736px) and
(min-height: 240px) and (max-height: 420px) and
(orientation:landscape) {
#details-button {
margin: 0;
}

.interstitial-wrapper {
margin-bottom: 70px;
}

.nav-wrapper {
margin-top: 0;
}

#extended-reporting-opt-in {
margin-top: 0;
}
}

/* Phablet landscape */
@media (min-width: 680px) and (max-height: 414px) {
.interstitial-wrapper {
margin: 24px auto;
}

.nav-wrapper {
margin: 16px auto 0;
}
}

@media (max-height: 240px) and (orientation: landscape),
(max-height: 480px) and (orientation: portrait),
(max-width: 419px) and (max-height: 323px) {
body:not(.offline) .icon {
height: 56px;
width: 56px;
}

.icon {
margin-bottom: 16px;
}
}

/* Small mobile screens. No fixed nav. */
@media (max-height: 400px) and (orientation: portrait),
(max-height: 239px) and (orientation: landscape),
(max-width: 419px) and (max-height: 399px) {
.interstitial-wrapper {
display: flex;
flex-direction: column;
margin-bottom: 0;
}

#details {
flex: 1 1 auto;
order: 0;
}

#main-content {
flex: 1 1 auto;
order: 0;
}

.nav-wrapper {
flex: 0 1 auto;
margin-top: 8px;
order: 1;
padding-left: 0;
padding-right: 0;
position: relative;
width: 100%;
}
}

@media (max-width: 239px) and (orientation: portrait) {
.nav-wrapper {
padding-left: 0;
padding-right: 0;
}
}

/* Copyright 2013 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file. */

/* Don't use the main frame div when the error is in a subframe. */
html[subframe] #main-frame-error {
display: none;
}

/* Don't use the subframe error div when the error is in a main frame. */
html:not([subframe]) #sub-frame-error {
display: none;
}

#diagnose-button {
-webkit-margin-start: 0;
float: none;
margin-bottom: 10px;
margin-top: 20px;
}

h1 {
margin-top: 0;
word-wrap: break-word;
}

h1 span {
font-weight: 500;
}

h2 {
color: #666;
font-size: 1.2em;
font-weight: normal;
margin: 10px 0;
}

a {
color: rgb(17, 85, 204);
text-decoration: none;
}

.icon {
-webkit-user-select: none;
display: inline-block;
}

.icon-generic {
/**
* Can't access chrome://theme/IDR_ERROR_NETWORK_GENERIC from an untrusted
* renderer process, so embed the resource manually.
*/
content: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAENJREFUeF7tzbEJACEQRNGBLeAasBCza2lLEGx0CxFGG9hBMDDxRy/72O9FMnIFapGylsu1fgoBdkXfUHLrQgdfrlJN1BdYBjQQm3UAAAAASUVORK5CYII=) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQAQMAAADdiHD7AAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAFJJREFUeF7t0cENgDAMQ9FwYgxG6WjpaIzCCAxQxVggFuDiCvlLOeRdHR9yzjncHVoq3npu+wQUrUuJHylSTmBaespJyJQoObUeyxDQb3bEm5Au81c0pSCD8HYAAAAASUVORK5CYII=) 2x);
}

.icon-offline {
content: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAGxJREFUeF7tyMEJwkAQRuFf5ipMKxYQiJ3Z2nSwrWwBA0+DQZcdxEOueaePp9+dQZFB7GpUcURSVU66yVNFj6LFICatThZB6r/ko/pbRpUgilY0Cbw5sNmb9txGXUKyuH7eV25x39DtJXUNPQGJtWFV+BT/QAAAAABJRU5ErkJggg==) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQBAMAAAAVaP+LAAAAGFBMVEUAAABTU1NNTU1TU1NPT09SUlJSUlJTU1O8B7DEAAAAB3RSTlMAoArVKvVgBuEdKgAAAJ1JREFUeF7t1TEOwyAMQNG0Q6/UE+RMXD9d/tC6womIFSL9P+MnAYOXeTIzMzMzMzMzaz8J9Ri6HoITmuHXhISE8nEh9yxDh55aCEUoTGbbQwjqHwIkRAEiIaG0+0AA9VBMaE89Rogeoww936MQrWdBr4GN/z0IAdQ6nQ/FIpRXDwHcA+JIJcQowQAlFUA0MfQpXLlVQfkzR4igS6ENjknm/wiaGhsAAAAASUVORK5CYII=) 2x);
position: relative;
}

.icon-disabled {
content: -webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABICAMAAAAZF4G5AAAABlBMVEVMaXFTU1OXUj8tAAAAAXRSTlMAQObYZgAAASZJREFUeAHd11Fq7jAMRGGf/W/6PoWB67YMqv5DybwG/CFjRuR8JBw3+ByiRjgV9W/TJ31P0tBfC6+cj1haUFXKHmVJo5wP98WwQ0ZCbfUc6LQ6VuUBz31ikADkLMkDrfUC4rR6QGW+gF6rx7NaHWCj1Y/W6lf4L7utvgBSt3rBFSS/XBMPUILcJINHCBWYUfpWn4NBi1ZfudIc3rf6/NGEvEA+AsYTJozmXemjXeLZAov+mnkN2HfzXpMSVQDnGw++57qNJ4D1xitA2sJ+VAWMygSEaYf2mYPTjZfk2K8wmP7HLIH5Mg4/pP+PEcDzUvDMvYbs/2NWwPO5vBdMZE4EE5UTQLiBFDaUlTDPBRoJ9HdAYIkIo06og3BNXtCzy7zA1aXk5x+tJARq63eAygAAAABJRU5ErkJggg==) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOAAAACQAQMAAAArwfVjAAAABlBMVEVMaXFTU1OXUj8tAAAAAXRSTlMAQObYZgAAAYdJREFUeF7F1EFqwzAUBNARAmVj0FZe5QoBH6BX+dn4GlY2PYNzGx/A0CvkCIJuvIraKJKbgBvzf2g62weDGD7CYggpfFReis4J0ey9EGFIiEQQojFSlA9kSIiqd0KkFjKsewgRbStEN19mxUPTtmW9HQ/h6tyqNQ8NlSMZdzyE6qkoE0trVYGFm0n1WYeBhduzwbwBC7voS+vIxfeMjeaiLxsMMtQNwMPtuew+DjzcTHk8YMfDknEcIUOtf2lVfgVH3K4Xv5PRYAXRVMtItIJ3rfaCIVn9DsTH2NxisAVRex2Hh3hX+/mRUR08bAwPEYsI51ZxWH4Q0SpicQRXeyEaIug48FEdegARfMz/tADVsRciwTAxW308ehmC2gLraC+YCbV3QoTZexa+zegAEW5PhhgYfmbvJgcRqngGByOSXdFJcLk2JeDPEN0kxe1JhIt5FiFA+w+ItMELsUyPF2IaJ4aILqb4FbxPwhImwj6JauKgDUCYaxmYIsd4KXdMjIC9ItB5Bn4BNRwsG0XM2nwAAAAASUVORK5CYII=) 2x);
width: 112px;
}

.error-code {
display: block;
font-size: .8em;
}

#content-top {
margin: 20px;
}

#help-box-inner {
background-color: #f9f9f9;
border-top: 1px solid #EEE;
color: #444;
padding: 20px;
text-align: start;
}

.hidden {
display: none;
}

#suggestion {
margin-top: 15px;
}

#suggestions-list p {
-webkit-margin-after: 0;
}

#suggestions-list ul {
margin-top: 0;
}

.single-suggestion {
list-style-type: none;
padding-left: 0;
}

#short-suggestion {
margin-top: 5px;
}

#sub-frame-error-details {

color: #8F8F8F;
/* Not done on mobile for performance reasons. */
text-shadow: 0 1px 0 rgba(255,255,255,0.3);
}

[jscontent=hostName],
[jscontent=failedUrl] {
overflow-wrap: break-word;
}

#search-container {
/* Prevents a space between controls. */
display: flex;
margin-top: 20px;
}

#search-box {
border: 1px solid #cdcdcd;
flex-grow: 1;
font-size: 1em;
height: 26px;
margin-right: 0;
padding: 1px 9px;
}

#search-box:focus {
border: 1px solid rgb(93, 154, 255);
outline: none;
}

#search-button {
border: none;
border-bottom-left-radius: 0;
border-top-left-radius: 0;
box-shadow: none;
display: flex;
height: 30px;
margin: 0;
padding: 0;
width: 60px;
}

#search-image {
content:
-webkit-image-set(
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAQAAAB+HTb/AAAArElEQVR4Xn3NsUoCUBzG0XvB3U0chR4geo5qihpt6gkCx0bXFsMERWj2KWqIanAvmlUUoQapwU6g4l8H5bd9Z/iSPS0hu/RqZqrncBuzLl7U3Rn4cSpQFTeroejJl1Lgs7f4ceDPdeBMXYp86gaONYJkY83AnqHiGk9wHnjk16PKgo5N9BUCkzPf5j6M0PfuVg5MymoetFwoaKAlB26WdXAvJ7u5mezitqtkT//7Sv/u96CaLQAAAABJRU5ErkJggg==) 1x,
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAeCAQAAACVzLYUAAABYElEQVR4Xr3VMUuVURzH8XO98jgkGikENkRD0KRGDUVDQy0h2SiC4IuIiktL4AvQt1CDBJUJwo1KXXS6cWdHw7tcjWwoC5Hrx+UZgnNO5CXiO/75jD/+QZf9MzjskVU7DrU1zRv9G9ir5hsA4Nii83+GA9ZI1nI1D6tWAE1TRlQMuuuFDthzMQefgo4nKr+f3dIGDdUUHPYD1ISoMQdgJgUfgqaKEOcxWE/BVTArJBvwC0cGY7gNLgiZNsD1GP4EPVn4EtyLYRuczcJ34HYMP4E7GdajDS7FcB48z8AJ8FmI4TjouBkzZ2yBuRQMlsButIZ+dfDVUBqOaIHvavpLVHXfFmAqv45r9gEHNr3y3hcAfLSgSMPgiiZR+6Z9AMuKNAwqpjUcA2h55pxgAfBWkYRlQ254YMJloaxPHbCkiGCymL5RlLA7GnRDXyuC7uhicLoKdRyaDE5Pl00K//93nABqPgBDK8sfWgAAAABJRU5ErkJggg==) 2x);
margin: auto;
}

.secondary-button {
-webkit-margin-end: 16px;
background: #d9d9d9;
color: #696969;
}

.snackbar {
background: #323232;
border-radius: 2px;
bottom: 24px;
box-sizing: border-box;
color: #fff;
font-size: .87em;
left: 24px;
max-width: 568px;
min-width: 288px;
opacity: 0;
padding: 16px 24px 12px;
position: fixed;
transform: translateY(90px);
will-change: opacity, transform;
z-index: 999;
}

.snackbar-show {
-webkit-animation:
show-snackbar .25s cubic-bezier(0.0, 0.0, 0.2, 1) forwards,
hide-snackbar .25s cubic-bezier(0.4, 0.0, 1, 1) forwards 5s;
}

@-webkit-keyframes show-snackbar {
100% {
opacity: 1;
transform: translateY(0);
}
}

@-webkit-keyframes hide-snackbar {
0% {
opacity: 1;
transform: translateY(0);
}
100% {
opacity: 0;
transform: translateY(90px);
}
}

.suggestions {
margin-top: 18px;
}

.suggestion-header {
font-weight: bold;
margin-bottom: 4px;
}

.suggestion-body {
color: #777;
}

/* Increase line height at higher resolutions. */
@media (min-width: 641px) and (min-height: 641px) {
#help-box-inner {
line-height: 18px;
}
}

/* Decrease padding at low sizes. */
@media (max-width: 640px), (max-height: 640px) {
h1 {
margin: 0 0 15px;
}
#content-top {
margin: 15px;
}
#help-box-inner {
padding: 20px;
}
.suggestions {
margin-top: 10px;
}
.suggestion-header {
margin-bottom: 0;
}
}

/* Don't allow overflow when in a subframe. */
html[subframe] body {
overflow: hidden;
}

#sub-frame-error {
-webkit-align-items: center;
background-color: #DDD;
display: -webkit-flex;
-webkit-flex-flow: column;
height: 100%;
-webkit-justify-content: center;
left: 0;
position: absolute;
text-align: center;
top: 0;
transition: background-color .2s ease-in-out;
width: 100%;
}

#sub-frame-error:hover {
background-color: #EEE;
}

#sub-frame-error .icon-generic {
margin: 0 0 16px;
}

#sub-frame-error-details {
margin: 0 10px;
text-align: center;
visibility: hidden;
}

/* Show details only when hovering. */
#sub-frame-error:hover #sub-frame-error-details {
visibility: visible;
}

/* If the iframe is too small, always hide the error code. */
/* TODO(mmenke): See if overflow: no-display works better, once supported. */
@media (max-width: 200px), (max-height: 95px) {
#sub-frame-error-details {
display: none;
}
}

/* Adjust icon for small embedded frames in apps. */
@media (max-height: 100px) {
#sub-frame-error .icon-generic {
height: auto;
margin: 0;
padding-top: 0;
width: 25px;
}
}

/* details-button is special; it's a element that looks like a link. */
#details-button {
box-shadow: none;
min-width: 0;
}

/* Styles for platform dependent separation of controls and details button. */
.suggested-left & gt; #control-buttons,
.suggested-left #stale-load-button,
.suggested-right & gt; #details-button {
float: left;
}

.suggested-right & gt; #control-buttons,
.suggested-right #stale-load-button,
.suggested-left & gt; #details-button {
float: right;
}

.suggested-left .secondary-button {
-webkit-margin-end: 0px;
-webkit-margin-start: 16px;
}

#details-button.singular {
float: none;
}

#buttons::after {
clear: both;
content: '';
display: block;
width: 100%;
}

/* Offline page */
.offline {
transition: -webkit-filter 1.5s cubic-bezier(0.65, 0.05, 0.36, 1),
background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
will-change: -webkit-filter, background-color;
}

.offline #main-message & gt; p {
display: none;
}

.offline.inverted {
-webkit-filter: invert(100%);
background-color: #000;
}

.offline .interstitial-wrapper {
color: #2b2b2b;
font-size: 1em;
line-height: 1.55;
margin: 0 auto;
max-width: 600px;
padding-top: 100px;
width: 100%;
}

.offline .runner-container {
height: 150px;
max-width: 600px;
overflow: hidden;
position: absolute;
top: 35px;
width: 44px;
}

.offline .runner-canvas {
height: 150px;
max-width: 600px;
opacity: 1;
overflow: hidden;
position: absolute;
top: 0;
z-index: 2;
}

.offline .controller {
background: rgba(247,247,247, .1);
height: 100vh;
left: 0;
position: absolute;
top: 0;
width: 100vw;
z-index: 1;
}

#offline-resources {
display: none;
}

@media (max-width: 420px) {
.suggested-left & gt; #control-buttons,
.suggested-right & gt; #control-buttons {
float: none;
}

.snackbar {
left: 0;
bottom: 0;
width: 100%;
border-radius: 0;
}
}

@media (max-height: 350px) {
h1 {
margin: 0 0 15px;
}

.icon-offline {
margin: 0 0 10px;
}

.interstitial-wrapper {
margin-top: 5%;
}

.nav-wrapper {
margin-top: 30px;
}
}

@media (min-width: 600px) and (max-width: 736px) and (orientation: landscape) {
.offline .interstitial-wrapper {
margin-left: 0;
margin-right: 0;
}
}

@media (min-width: 420px) and (max-width: 736px) and
(min-height: 240px) and (max-height: 420px) and
(orientation:landscape) {
.interstitial-wrapper {
margin-bottom: 100px;
}
}

@media (min-height: 240px) and (orientation: landscape) {
.offline .interstitial-wrapper {
margin-bottom: 90px;
}

.icon-offline {
margin-bottom: 20px;
}
}

@media (max-height: 320px) and (orientation: landscape) {
.icon-offline {
margin-bottom: 0;
}

.offline .runner-container {
top: 10px;
}
}

@media (max-width: 240px) {
button {
padding-left: 12px;
padding-right: 12px;
}

.interstitial-wrapper {
overflow: inherit;
padding: 0 8px;
}
}

@media (max-width: 120px) {
button {
width: auto;
}
}

// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var mobileNav = false;

/**
* For small screen mobile the navigation buttons are moved
* below the advanced text.
*/
function onResize() {
var helpOuterBox = document.querySelector('#details');
var mainContent = document.querySelector('#main-content');
var mediaQuery = '(min-width: 240px) and (max-width: 420px) and ' +
'(max-height: 736px) and (min-height: 401px) and ' +
'(orientation: portrait), (max-width: 736px) and ' +
'(max-height: 420px) and (min-height: 240px) and ' +
'(min-width: 421px) and (orientation: landscape)';

var detailsHidden = helpOuterBox.classList.contains('hidden');
var runnerContainer = document.querySelector('.runner-container');

// Check for change in nav status.
if (mobileNav != window.matchMedia(mediaQuery).matches) {
mobileNav = !mobileNav;

// Handle showing the top content / details sections according to state.
if (mobileNav) {
mainContent.classList.toggle('hidden', !detailsHidden);
helpOuterBox.classList.toggle('hidden', detailsHidden);
if (runnerContainer) {
runnerContainer.classList.toggle('hidden', !detailsHidden);
}
} else if (!detailsHidden) {
// Non mobile nav with visible details.
mainContent.classList.remove('hidden');
helpOuterBox.classList.remove('hidden');
if (runnerContainer) {
runnerContainer.classList.remove('hidden');
}
}
}
}

function setupMobileNav() {
window.addEventListener('resize', onResize);
onResize();
}

document.addEventListener('DOMContentLoaded', setupMobileNav);

// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

function toggleHelpBox() {
var helpBoxOuter = document.getElementById('details');
helpBoxOuter.classList.toggle('hidden');
var detailsButton = document.getElementById('details-button');
if (helpBoxOuter.classList.contains('hidden'))
detailsButton.innerText = detailsButton.detailsText;
else
detailsButton.innerText = detailsButton.hideDetailsText;

// Details appears over the main content on small screens.
if (mobileNav) {
document.getElementById('main-content').classList.toggle('hidden');
var runnerContainer = document.querySelector('.runner-container');
if (runnerContainer) {
runnerContainer.classList.toggle('hidden');
}
}
}

function diagnoseErrors() {
if (window.errorPageController)
errorPageController.diagnoseErrorsButtonClick();

}

// Subframes use a different layout but the same html file. This is to make it
// easier to support platforms that load the error page via different
// mechanisms (Currently just iOS).
if (window.top.location != window.location)
document.documentElement.setAttribute('subframe', '');

// Re-renders the error page using |strings| as the dictionary of values.
// Used by NetErrorTabHelper to update DNS error pages with probe results.
function updateForDnsProbe(strings) {
var context = new JsEvalContext(strings);
jstProcess(context, document.getElementById('t'));
}

// Given the classList property of an element, adds an icon class to the list
// and removes the previously-
function updateIconClass(classList, newClass) {
var oldClass;

if (classList.hasOwnProperty('last_icon_class')) {
oldClass = classList['last_icon_class'];
if (oldClass == newClass)
return;
}

classList.add(newClass);
if (oldClass !== undefined)
classList.remove(oldClass);

classList['last_icon_class'] = newClass;

if (newClass == 'icon-offline') {
document.body.classList.add('offline');
new Runner('.interstitial-wrapper');
} else {
document.body.classList.add('neterror');
}
}

// Does a search using |baseSearchUrl| and the text in the search box.
function search(baseSearchUrl) {
var searchTextNode = document.getElementById('search-box');
document.location = baseSearchUrl + searchTextNode.value;
return false;
}

// Use to track clicks on elements generated by the navigation correction
// service. If |trackingId| is negative, the element does not come from the
// correction service.
function trackClick(trackingId) {
// This can't be done with XHRs because XHRs are cancelled on navigation
// start, and because these are cross-site requests.
if (trackingId & gt; = 0 & & errorPageController)
errorPageController.trackClick(trackingId);
}

// Called when an tag generated by the navigation correction service is
// clicked. Separate function from trackClick so the resources don't have to
// be updated if new data is added to jstdata.
function linkClicked(jstdata) {
trackClick(jstdata.trackingId);
}

// Implements button clicks. This function is needed during the transition
// between implementing these in trunk chromium and implementing them in
// iOS.
function reloadButtonClick(url) {
if (window.errorPageController) {
errorPageController.reloadButtonClick();
} else {
location = url;
}
}

function showSavedCopyButtonClick() {
if (window.errorPageController) {
errorPageController.showSavedCopyButtonClick();
}
}

function showOfflinePagesButtonClick() {
if (window.errorPageController) {
errorPageController.showOfflinePagesButtonClick();
}
}

function detailsButtonClick() {
if (window.errorPageController)
errorPageController.detailsButtonClick();
}

/**
* Replace the reload button with the Google cached copy suggestion.
*/
function setUpCachedButton(buttonStrings) {
var reloadButton = document.getElementById('reload-button');

reloadButton.textContent = buttonStrings.msg;
var url = buttonStrings.cacheUrl;
var trackingId = buttonStrings.trackingId;
reloadButton.onclick = function(e) {
e.preventDefault();
trackClick(trackingId);
if (window.errorPageController) {
errorPageController.trackCachedCopyButtonClick();
}
location = url;
};
reloadButton.style.display = '';
document.getElementById('control-buttons').hidden = false;
}

var primaryControlOnLeft = true;


function onDocumentLoad() {
var controlButtonDiv = document.getElementById('control-buttons');
var reloadButton = document.getElementById('reload-button');
var detailsButton = document.getElementById('details-button');
var showSavedCopyButton = document.getElementById('show-saved-copy-button');
var showOfflinePagesButton =
document.getElementById('show-offline-pages-button');

var reloadButtonVisible = loadTimeData.valueExists('reloadButton') & &
loadTimeData.getValue('reloadButton').msg;
var showSavedCopyButtonVisible =
loadTimeData.valueExists('showSavedCopyButton') & &
loadTimeData.getValue('showSavedCopyButton').msg;
var showOfflinePagesButtonVisible =
loadTimeData.valueExists('showOfflinePagesButton') & &
loadTimeData.getValue('showOfflinePagesButton').msg;

var primaryButton, secondaryButton;
if (showSavedCopyButton.primary) {
primaryButton = showSavedCopyButton;
secondaryButton = reloadButton;
} else {
primaryButton = reloadButton;
secondaryButton = showSavedCopyButton;
}

// Sets up the proper button layout for the current platform.
if (primaryControlOnLeft) {
buttons.classList.add('suggested-left');
controlButtonDiv.insertBefore(secondaryButton, primaryButton);
} else {
buttons.classList.add('suggested-right');
controlButtonDiv.insertBefore(primaryButton, secondaryButton);
}

// Check for Google cached copy suggestion.
if (loadTimeData.valueExists('cacheButton')) {
setUpCachedButton(loadTimeData.getValue('cacheButton'));
}

if (reloadButton.style.display == 'none' & &
showSavedCopyButton.style.display == 'none' & &
showOfflinePagesButton.style.display == 'none') {
detailsButton.classList.add('singular');
}

// Show control buttons.
if (reloadButtonVisible || showSavedCopyButtonVisible ||
showOfflinePagesButtonVisible) {
controlButtonDiv.hidden = false;

// Set the secondary button state in the cases of two call to actions.
if ((reloadButtonVisible || showOfflinePagesButtonVisible) & &
showSavedCopyButtonVisible) {
secondaryButton.classList.add('secondary-button');
}
}
}

document.addEventListener('DOMContentLoaded', onDocumentLoad);

// Copyright (c) 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(function() {
'use strict';
/**
* T-Rex runner.
* @param {string} outerContainerId Outer containing element id.
* @param {Object} opt_config
* @constructor
* @export
*/
function Runner(outerContainerId, opt_config) {
// Singleton
if (Runner.instance_) {
return Runner.instance_;
}
Runner.instance_ = this;

this.outerContainerEl = document.querySelector(outerContainerId);
this.containerEl = null;
this.snackbarEl = null;
this.detailsButton = this.outerContainerEl.querySelector('#details-button');

this.config = opt_config || Runner.config;

this.dimensions = Runner.defaultDimensions;

this.canvas = null;
this.canvasCtx = null;

this.tRex = null;

this.distanceMeter = null;
this.distanceRan = 0;

this.highestScore = 0;

this.time = 0;
this.runningTime = 0;
this.msPerFrame = 1000 / FPS;
this.currentSpeed = this.config.SPEED;

this.obstacles = [];

this.activated = false; // Whether the easter egg has been activated.
this.playing = false; // Whether the game is currently in play state.
this.crashed = false;
this.paused = false;
this.inverted = false;
this.invertTimer = 0;
this.resizeTimerId_ = null;

this.playCount = 0;

// Sound FX.
this.audioBuffer = null;
this.soundFx = {};

// Global web audio context for playing sounds.
this.audioContext = null;

// Images.
this.images = {};
this.imagesLoaded = 0;

if (this.isDisabled()) {
this.setupDisabledRunner();
} else {
this.loadImages();
}
}
window['Runner'] = Runner;


/**
* Default game width.
* @const
*/
var DEFAULT_WIDTH = 600;

/**
* Frames per second.
* @const
*/
var FPS = 60;

/** @const */
var IS_HIDPI = window.devicePixelRatio & gt; 1;

/** @const */
var IS_IOS = window.navigator.userAgent.indexOf('CriOS') & gt; -1 ||
window.navigator.userAgent == 'UIWebViewForStaticFileContent';

/** @const */
var IS_MOBILE = window.navigator.userAgent.indexOf('Mobi') & gt; -1 || IS_IOS;

/** @const */
var IS_TOUCH_ENABLED = 'ontouchstart' in window;

/**
* Default game configuration.
* @enum {number}
*/
Runner.config = {
ACCELERATION: 0.001,
BG_CLOUD_SPEED: 0.2,
BOTTOM_PAD: 10,
CLEAR_TIME: 3000,
CLOUD_FREQUENCY: 0.5,
GAMEOVER_CLEAR_TIME: 750,
GAP_COEFFICIENT: 0.6,
GRAVITY: 0.6,
INITIAL_JUMP_VELOCITY: 12,
INVERT_FADE_DURATION: 12000,
INVERT_DISTANCE: 700,
MAX_BLINK_COUNT: 3,
MAX_CLOUDS: 6,
MAX_OBSTACLE_LENGTH: 3,
MAX_OBSTACLE_DUPLICATION: 2,
MAX_SPEED: 13,
MIN_JUMP_HEIGHT: 35,
MOBILE_SPEED_COEFFICIENT: 1.2,
RESOURCE_TEMPLATE_ID: 'audio-resources',
SPEED: 6,
SPEED_DROP_COEFFICIENT: 3
};


/**
* Default dimensions.
* @enum {string}
*/
Runner.defaultDimensions = {
WIDTH: DEFAULT_WIDTH,
HEIGHT: 150
};


/**
* CSS class names.
* @enum {string}
*/
Runner.classes = {
CANVAS: 'runner-canvas',
CONTAINER: 'runner-container',
CRASHED: 'crashed',
ICON: 'icon-offline',
INVERTED: 'inverted',
SNACKBAR: 'snackbar',
SNACKBAR_SHOW: 'snackbar-show',
TOUCH_CONTROLLER: 'controller'
};


/**
* Sprite definition layout of the spritesheet.
* @enum {Object}
*/
Runner.spriteDefinition = {
LDPI: {
CACTUS_LARGE: {x: 332, y: 2},
CACTUS_SMALL: {x: 228, y: 2},
CLOUD: {x: 86, y: 2},
HORIZON: {x: 2, y: 54},
MOON: {x: 484, y: 2},
PTERODACTYL: {x: 134, y: 2},
RESTART: {x: 2, y: 2},
TEXT_SPRITE: {x: 655, y: 2},
TREX: {x: 848, y: 2},
STAR: {x: 645, y: 2}
},
HDPI: {
CACTUS_LARGE: {x: 652, y: 2},
CACTUS_SMALL: {x: 446, y: 2},
CLOUD: {x: 166, y: 2},
HORIZON: {x: 2, y: 104},
MOON: {x: 954, y: 2},
PTERODACTYL: {x: 260, y: 2},
RESTART: {x: 2, y: 2},
TEXT_SPRITE: {x: 1294, y: 2},
TREX: {x: 1678, y: 2},
STAR: {x: 1276, y: 2}
}
};


/**
* Sound FX. Reference to the ID of the audio tag on interstitial page.
* @enum {string}
*/
Runner.sounds = {
BUTTON_PRESS: 'offline-sound-press',
HIT: 'offline-sound-hit',
SCORE: 'offline-sound-reached'
};


/**
* Key code mapping.
* @enum {Object}
*/
Runner.keycodes = {
JUMP: {'38': 1, '32': 1}, // Up, spacebar
DUCK: {'40': 1}, // Down
RESTART: {'13': 1} // Enter
};


/**
* Runner event names.
* @enum {string}
*/
Runner.events = {
ANIM_END: 'webkitAnimationEnd',
CLICK: 'click',
KEYDOWN: 'keydown',
KEYUP: 'keyup',
MOUSEDOWN: 'mousedown',
MOUSEUP: 'mouseup',
RESIZE: 'resize',
TOUCHEND: 'touchend',
TOUCHSTART: 'touchstart',
VISIBILITY: 'visibilitychange',
BLUR: 'blur',
FOCUS: 'focus',
LOAD: 'load'
};


Runner.prototype = {
/**
* Whether the easter egg has been disabled. CrOS enterprise enrolled devices.
* @return {boolean}
*/
isDisabled: function() {
return loadTimeData & & loadTimeData.valueExists('disabledEasterEgg');
},

/**
* For disabled instances, set up a snackbar with the disabled message.
*/
setupDisabledRunner: function() {
this.containerEl = document.createElement('div');
this.containerEl.className = Runner.classes.SNACKBAR;
this.containerEl.textContent = loadTimeData.getValue('disabledEasterEgg');
this.outerContainerEl.appendChild(this.containerEl);

// Show notification when the activation key is pressed.
document.addEventListener(Runner.events.KEYDOWN, function(e) {
if (Runner.keycodes.JUMP[e.keyCode]) {
this.containerEl.classList.add(Runner.classes.SNACKBAR_SHOW);
document.querySelector('.icon').classList.add('icon-disabled');
}
}.bind(this));
},

/**
* Setting individual settings for debugging.
* @param {string} setting
* @param {*} value
*/
updateConfigSetting: function(setting, value) {
if (setting in this.config & & value != undefined) {
this.config[setting] = value;

switch (setting) {
case 'GRAVITY':
case 'MIN_JUMP_HEIGHT':
case 'SPEED_DROP_COEFFICIENT':
this.tRex.config[setting] = value;
break;
case 'INITIAL_JUMP_VELOCITY':
this.tRex.setJumpVelocity(value);
break;
case 'SPEED':
this.setSpeed(value);
break;
}
}
},

/**
* Cache the appropriate image sprite from the page and get the sprite sheet
* definition.
*/
loadImages: function() {
if (IS_HIDPI) {
Runner.imageSprite = document.getElementById('offline-resources-2x');
this.spriteDef = Runner.spriteDefinition.HDPI;
} else {
Runner.imageSprite = document.getElementById('offline-resources-1x');
this.spriteDef = Runner.spriteDefinition.LDPI;
}

if (Runner.imageSprite.complete) {
this.init();
} else {
// If the images are not yet loaded, add a listener.
Runner.imageSprite.addEventListener(Runner.events.LOAD,
this.init.bind(this));
}
},

/**
* Load and decode base 64 encoded sounds.
*/
loadSounds: function() {
if (!IS_IOS) {
this.audioContext = new AudioContext();

var resourceTemplate =
document.getElementById(this.config.RESOURCE_TEMPLATE_ID).content;

for (var sound in Runner.sounds) {
var soundSrc =
resourceTemplate.getElementById(Runner.sounds[sound]).src;
soundSrc = soundSrc.substr(soundSrc.indexOf(',') + 1);
var buffer = decodeBase64ToArrayBuffer(soundSrc);

// Async, so no guarantee of order in array.
this.audioContext.decodeAudioData(buffer, function(index, audioData) {
this.soundFx[index] = audioData;
}.bind(this, sound));
}
}
},

/**
* Sets the game speed. Adjust the speed accordingly if on a smaller screen.
* @param {number} opt_speed
*/
setSpeed: function(opt_speed) {
var speed = opt_speed || this.currentSpeed;

// Reduce the speed on smaller mobile screens.
if (this.dimensions.WIDTH speed ? speed : mobileSpeed;
} else if (opt_speed) {
this.currentSpeed = opt_speed;
}
},

/**
* Game initialiser.
*/
init: function() {
// Hide the static icon.
document.querySelector('.' + Runner.classes.ICON).style.visibility =
'hidden';

this.adjustDimensions();
this.setSpeed();

this.containerEl = document.createElement('div');
this.containerEl.className = Runner.classes.CONTAINER;

// Player canvas container.
this.canvas = createCanvas(this.containerEl, this.dimensions.WIDTH,
this.dimensions.HEIGHT, Runner.classes.PLAYER);

this.canvasCtx = this.canvas.getContext('2d');
this.canvasCtx.fillStyle = '#f7f7f7';
this.canvasCtx.fill();
Runner.updateCanvasScaling(this.canvas);

// Horizon contains clouds, obstacles and the ground.
this.horizon = new Horizon(this.canvas, this.spriteDef, this.dimensions,
this.config.GAP_COEFFICIENT);

// Distance meter
this.distanceMeter = new DistanceMeter(this.canvas,
this.spriteDef.TEXT_SPRITE, this.dimensions.WIDTH);

// Draw t-rex
this.tRex = new Trex(this.canvas, this.spriteDef.TREX);

this.outerContainerEl.appendChild(this.containerEl);

if (IS_MOBILE) {
this.createTouchController();
}

this.startListening();
this.update();

window.addEventListener(Runner.events.RESIZE,
this.debounceResize.bind(this));
},

/**
* Create the touch controller. A div that covers whole screen.
*/
createTouchController: function() {
this.touchController = document.createElement('div');
this.touchController.className = Runner.classes.TOUCH_CONTROLLER;
},

/**
* Debounce the resize event.
*/
debounceResize: function() {
if (!this.resizeTimerId_) {
this.resizeTimerId_ =
setInterval(this.adjustDimensions.bind(this), 250);
}
},

/**
* Adjust game space dimensions on resize.
*/
adjustDimensions: function() {
clearInterval(this.resizeTimerId_);
this.resizeTimerId_ = null;

var boxStyles = window.getComputedStyle(this.outerContainerEl);
var padding = Number(boxStyles.paddingLeft.substr(0,
boxStyles.paddingLeft.length - 2));

this.dimensions.WIDTH = this.outerContainerEl.offsetWidth - padding * 2;

// Redraw the elements back onto the canvas.
if (this.canvas) {
this.canvas.width = this.dimensions.WIDTH;
this.canvas.height = this.dimensions.HEIGHT;

Runner.updateCanvasScaling(this.canvas);

this.distanceMeter.calcXPos(this.dimensions.WIDTH);
this.clearCanvas();
this.horizon.update(0, 0, true);
this.tRex.update(0);

// Outer container and distance meter.
if (this.playing || this.crashed || this.paused) {
this.containerEl.style.width = this.dimensions.WIDTH + 'px';
this.containerEl.style.height = this.dimensions.HEIGHT + 'px';
this.distanceMeter.update(0, Math.ceil(this.distanceRan));
this.stop();
} else {
this.tRex.draw(0, 0);
}

// Game over panel.
if (this.crashed & & this.gameOverPanel) {
this.gameOverPanel.updateDimensions(this.dimensions.WIDTH);
this.gameOverPanel.draw();
}
}
},

/**
* Play the game intro.
* Canvas container width expands out to the full width.
*/
playIntro: function() {
if (!this.activated & & !this.crashed) {
this.playingIntro = true;
this.tRex.playingIntro = true;

// CSS animation definition.
var keyframes = '@-webkit-keyframes intro { ' +
'from { width:' + Trex.config.WIDTH + 'px }' +
'to { width: ' + this.dimensions.WIDTH + 'px }' +
'}';
document.styleSheets[0].insertRule(keyframes, 0);

this.containerEl.addEventListener(Runner.events.ANIM_END,
this.startGame.bind(this));

this.containerEl.style.webkitAnimation = 'intro .4s ease-out 1 both';
this.containerEl.style.width = this.dimensions.WIDTH + 'px';

if (this.touchController) {
this.outerContainerEl.appendChild(this.touchController);
}
this.playing = true;
this.activated = true;
} else if (this.crashed) {
this.restart();
}
},


/**
* Update the game status to started.
*/
startGame: function() {
this.runningTime = 0;
this.playingIntro = false;
this.tRex.playingIntro = false;
this.containerEl.style.webkitAnimation = '';
this.playCount++;

// Handle tabbing off the page. Pause the current game.
document.addEventListener(Runner.events.VISIBILITY,
this.onVisibilityChange.bind(this));

window.addEventListener(Runner.events.BLUR,
this.onVisibilityChange.bind(this));

window.addEventListener(Runner.events.FOCUS,
this.onVisibilityChange.bind(this));
},

clearCanvas: function() {
this.canvasCtx.clearRect(0, 0, this.dimensions.WIDTH,
this.dimensions.HEIGHT);
},

/**
* Update the game frame and schedules the next one.
*/
update: function() {
this.updatePending = false;

var now = getTimeStamp();
var deltaTime = now - (this.time || now);
this.time = now;

if (this.playing) {
this.clearCanvas();

if (this.tRex.jumping) {
this.tRex.updateJump(deltaTime);
}

this.runningTime += deltaTime;
var hasObstacles = this.runningTime & gt; this.config.CLEAR_TIME;

// First jump triggers the intro.
if (this.tRex.jumpCount == 1 & & !this.playingIntro) {
this.playIntro();
}

// The horizon doesn't move until the intro is over.
if (this.playingIntro) {
this.horizon.update(0, this.currentSpeed, hasObstacles);
} else {
deltaTime = !this.activated ? 0 : deltaTime;
this.horizon.update(deltaTime, this.currentSpeed, hasObstacles,
this.inverted);
}

// Check for collisions.
var collision = hasObstacles & &
checkForCollision(this.horizon.obstacles[0], this.tRex);

if (!collision) {
this.distanceRan += this.currentSpeed * deltaTime / this.msPerFrame;

if (this.currentSpeed this.config.INVERT_FADE_DURATION) {
this.invertTimer = 0;
this.invertTrigger = false;
this.invert();
} else if (this.invertTimer) {
this.invertTimer += deltaTime;
} else {
var actualDistance =
this.distanceMeter.getActualDistance(Math.ceil(this.distanceRan));

if (actualDistance & gt; 0) {
this.invertTrigger = !(actualDistance %
this.config.INVERT_DISTANCE);

if (this.invertTrigger & & this.invertTimer === 0) {
this.invertTimer += deltaTime;
this.invert();
}
}
}
}

if (this.playing || (!this.activated & &
this.tRex.blinkCount = this.config.GAMEOVER_CLEAR_TIME & &
Runner.keycodes.JUMP[keyCode])) {
this.restart();
}
} else if (this.paused & & isjumpKey) {
// Reset the jump state
this.tRex.reset();
this.play();
}
},

/**
* Returns whether the event was a left click on canvas.
* On Windows right click is registered as a click.
* @param {Event} e
* @return {boolean}
*/
isLeftClickOnCanvas: function(e) {
return e.button != null & & e.button this.highestScore) {
this.highestScore = Math.ceil(this.distanceRan);
this.distanceMeter.setHighScore(this.highestScore);
}

// Reset the time clock.
this.time = getTimeStamp();
},

stop: function() {
this.playing = false;
this.paused = true;
cancelAnimationFrame(this.raqId);
this.raqId = 0;
},

play: function() {
if (!this.crashed) {
this.playing = true;
this.paused = false;
this.tRex.update(0, Trex.status.RUNNING);
this.time = getTimeStamp();
this.update();
}
},

restart: function() {
if (!this.raqId) {
this.playCount++;
this.runningTime = 0;
this.playing = true;
this.crashed = false;
this.distanceRan = 0;
this.setSpeed(this.config.SPEED);
this.time = getTimeStamp();
this.containerEl.classList.remove(Runner.classes.CRASHED);
this.clearCanvas();
this.distanceMeter.reset(this.highestScore);
this.horizon.reset();
this.tRex.reset();
this.playSound(this.soundFx.BUTTON_PRESS);
this.invert(true);
this.update();
}
},

/**
* Pause the game if the tab is not in focus.
*/
onVisibilityChange: function(e) {
if (document.hidden || document.webkitHidden || e.type == 'blur' ||
document.visibilityState != 'visible') {
this.stop();
} else if (!this.crashed) {
this.tRex.reset();
this.play();
}
},

/**
* Play a sound.
* @param {SoundBuffer} soundBuffer
*/
playSound: function(soundBuffer) {
if (soundBuffer) {
var sourceNode = this.audioContext.createBufferSource();
sourceNode.buffer = soundBuffer;
sourceNode.connect(this.audioContext.destination);
sourceNode.start(0);
}
},

/**
* Inverts the current page / canvas colors.
* @param {boolean} Whether to reset colors.
*/
invert: function(reset) {
if (reset) {
document.body.classList.toggle(Runner.classes.INVERTED, false);
this.invertTimer = 0;
this.inverted = false;
} else {
this.inverted = document.body.classList.toggle(Runner.classes.INVERTED,
this.invertTrigger);
}
}
};


/**
* Updates the canvas size taking into
* account the backing store pixel ratio and
* the device pixel ratio.
*
* See article by Paul Lewis:
* http://www.html5rocks.com/en/tutorials/canvas/hidpi/
*
* @param {HTMLCanvasElement} canvas
* @param {number} opt_width
* @param {number} opt_height
* @return {boolean} Whether the canvas was scaled.
*/
Runner.updateCanvasScaling = function(canvas, opt_width, opt_height) {
var context = canvas.getContext('2d');

// Query the various pixel ratios
var devicePixelRatio = Math.floor(window.devicePixelRatio) || 1;
var backingStoreRatio = Math.floor(context.webkitBackingStorePixelRatio) || 1;
var ratio = devicePixelRatio / backingStoreRatio;

// Upscale the canvas if the two ratios don't match
if (devicePixelRatio !== backingStoreRatio) {
var oldWidth = opt_width || canvas.width;
var oldHeight = opt_height || canvas.height;

canvas.width = oldWidth * ratio;
canvas.height = oldHeight * ratio;

canvas.style.width = oldWidth + 'px';
canvas.style.height = oldHeight + 'px';

// Scale the context to counter the fact that we've manually scaled
// our canvas element.
context.scale(ratio, ratio);
return true;
} else if (devicePixelRatio == 1) {
// Reset the canvas width / height. Fixes scaling bug when the page is
// zoomed and the devicePixelRatio changes accordingly.
canvas.style.width = canvas.width + 'px';
canvas.style.height = canvas.height + 'px';
}
return false;
};


/**
* Get random number.
* @param {number} min
* @param {number} max
* @param {number}
*/
function getRandomNum(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}


/**
* Vibrate on mobile devices.
* @param {number} duration Duration of the vibration in milliseconds.
*/
function vibrate(duration) {
if (IS_MOBILE & & window.navigator.vibrate) {
window.navigator.vibrate(duration);
}
}


/**
* Create canvas element.
* @param {HTMLElement} container Element to append canvas to.
* @param {number} width
* @param {number} height
* @param {string} opt_classname
* @return {HTMLCanvasElement}
*/
function createCanvas(container, width, height, opt_classname) {
var canvas = document.createElement('canvas');
canvas.className = opt_classname ? Runner.classes.CANVAS + ' ' +
opt_classname : Runner.classes.CANVAS;
canvas.width = width;
canvas.height = height;
container.appendChild(canvas);

return canvas;
}


/**
* Decodes the base 64 audio to ArrayBuffer used by Web Audio.
* @param {string} base64String
*/
function decodeBase64ToArrayBuffer(base64String) {
var len = (base64String.length / 4) * 3;
var str = atob(base64String);
var arrayBuffer = new ArrayBuffer(len);
var bytes = new Uint8Array(arrayBuffer);

for (var i = 0; i }
*/
function checkForCollision(obstacle, tRex, opt_canvasCtx) {
var obstacleBoxXPos = Runner.defaultDimensions.WIDTH + obstacle.xPos;

// Adjustments are made to the bounding box as there is a 1 pixel white
// border around the t-rex and obstacles.
var tRexBox = new CollisionBox(
tRex.xPos + 1,
tRex.yPos + 1,
tRex.config.WIDTH - 2,
tRex.config.HEIGHT - 2);

var obstacleBox = new CollisionBox(
obstacle.xPos + 1,
obstacle.yPos + 1,
obstacle.typeConfig.width * obstacle.size - 2,
obstacle.typeConfig.height - 2);

// Debug outer box
if (opt_canvasCtx) {
drawCollisionBoxes(opt_canvasCtx, tRexBox, obstacleBox);
}

// Simple outer bounds check.
if (boxCompare(tRexBox, obstacleBox)) {
var collisionBoxes = obstacle.collisionBoxes;
var tRexCollisionBoxes = tRex.ducking ?
Trex.collisionBoxes.DUCKING : Trex.collisionBoxes.RUNNING;

// Detailed axis aligned box check.
for (var t = 0; t obstacleBoxX & &
tRexBox.y obstacleBox.y) {
crashed = true;
}

return crashed;
};


//******************************************************************************

/**
* Collision box object.
* @param {number} x X position.
* @param {number} y Y Position.
* @param {number} w Width.
* @param {number} h Height.
*/
function CollisionBox(x, y, w, h) {
this.x = x;
this.y = y;
this.width = w;
this.height = h;
};


//******************************************************************************

/**
* Obstacle.
* @param {HTMLCanvasCtx} canvasCtx
* @param {Obstacle.type} type
* @param {Object} spritePos Obstacle position in sprite.
* @param {Object} dimensions
* @param {number} gapCoefficient Mutipler in determining the gap.
* @param {number} speed
* @param {number} opt_xOffset
*/
function Obstacle(canvasCtx, type, spriteImgPos, dimensions,
gapCoefficient, speed, opt_xOffset) {

this.canvasCtx = canvasCtx;
this.spritePos = spriteImgPos;
this.typeConfig = type;
this.gapCoefficient = gapCoefficient;
this.size = getRandomNum(1, Obstacle.MAX_OBSTACLE_LENGTH);
this.dimensions = dimensions;
this.remove = false;
this.xPos = dimensions.WIDTH + (opt_xOffset || 0);
this.yPos = 0;
this.width = 0;
this.collisionBoxes = [];
this.gap = 0;
this.speedOffset = 0;

// For animated obstacles.
this.currentFrame = 0;
this.timer = 0;

this.init(speed);
};

/**
* Coefficient for calculating the maximum gap.
* @const
*/
Obstacle.MAX_GAP_COEFFICIENT = 1.5;

/**
* Maximum obstacle grouping count.
* @const
*/
Obstacle.MAX_OBSTACLE_LENGTH = 3,


Obstacle.prototype = {
/**
* Initialise the DOM for the obstacle.
* @param {number} speed
*/
init: function(speed) {
this.cloneCollisionBoxes();

// Only allow sizing if we're at the right speed.
if (this.size & gt; 1 & & this.typeConfig.multipleSpeed & gt; speed) {
this.size = 1;
}

this.width = this.typeConfig.width * this.size;

// Check if obstacle can be positioned at various heights.
if (Array.isArray(this.typeConfig.yPos)) {
var yPosConfig = IS_MOBILE ? this.typeConfig.yPosMobile :
this.typeConfig.yPos;
this.yPos = yPosConfig[getRandomNum(0, yPosConfig.length - 1)];
} else {
this.yPos = this.typeConfig.yPos;
}

this.draw();

// Make collision box adjustments,
// Central box is adjusted to the size as one box.
// ____ ______ ________
// _| |-| _| |-| _| |-|
// | | | | | | | | | | | |
// | | 1 | | | | 2 | | | | 3 | |
// |_|___|_| |_|_____|_| |_|_______|_|
//
if (this.size & gt; 1) {
this.collisionBoxes[1].width = this.width - this.collisionBoxes[0].width -
this.collisionBoxes[2].width;
this.collisionBoxes[2].x = this.width - this.collisionBoxes[2].width;
}

// For obstacles that go at a different speed from the horizon.
if (this.typeConfig.speedOffset) {
this.speedOffset = Math.random() & gt; 0.5 ? this.typeConfig.speedOffset :
-this.typeConfig.speedOffset;
}

this.gap = this.getGap(this.gapCoefficient, speed);
},

/**
* Draw and crop based on size.
*/
draw: function() {
var sourceWidth = this.typeConfig.width;
var sourceHeight = this.typeConfig.height;

if (IS_HIDPI) {
sourceWidth = sourceWidth * 2;
sourceHeight = sourceHeight * 2;
}

// X position in sprite.
var sourceX = (sourceWidth * this.size) * (0.5 * (this.size - 1)) +
this.spritePos.x;

// Animation frames.
if (this.currentFrame & gt; 0) {
sourceX += sourceWidth * this.currentFrame;
}

this.canvasCtx.drawImage(Runner.imageSprite,
sourceX, this.spritePos.y,
sourceWidth * this.size, sourceHeight,
this.xPos, this.yPos,
this.typeConfig.width * this.size, this.typeConfig.height);
},

/**
* Obstacle frame update.
* @param {number} deltaTime
* @param {number} speed
*/
update: function(deltaTime, speed) {
if (!this.remove) {
if (this.typeConfig.speedOffset) {
speed += this.speedOffset;
}
this.xPos -= Math.floor((speed * FPS / 1000) * deltaTime);

// Update frame
if (this.typeConfig.numFrames) {
this.timer += deltaTime;
if (this.timer & gt; = this.typeConfig.frameRate) {
this.currentFrame =
this.currentFrame == this.typeConfig.numFrames - 1 ?
0 : this.currentFrame + 1;
this.timer = 0;
}
}
this.draw();

if (!this.isVisible()) {
this.remove = true;
}
}
},

/**
* Calculate a random gap size.
* - Minimum gap gets wider as speed increses
* @param {number} gapCoefficient
* @param {number} speed
* @return {number} The gap size.
*/
getGap: function(gapCoefficient, speed) {
var minGap = Math.round(this.width * speed +
this.typeConfig.minGap * gapCoefficient);
var maxGap = Math.round(minGap * Obstacle.MAX_GAP_COEFFICIENT);
return getRandomNum(minGap, maxGap);
},

/**
* Check if obstacle is visible.
* @return {boolean} Whether the obstacle is in the game area.
*/
isVisible: function() {
return this.xPos + this.width & gt; 0;
},

/**
* Make a copy of the collision boxes, since these will change based on
* obstacle type and size.
*/
cloneCollisionBoxes: function() {
var collisionBoxes = this.typeConfig.collisionBoxes;

for (var i = collisionBoxes.length - 1; i & gt; = 0; i--) {
this.collisionBoxes[i] = new CollisionBox(collisionBoxes[i].x,
collisionBoxes[i].y, collisionBoxes[i].width,
collisionBoxes[i].height);
}
}
};


/**
* Obstacle definitions.
* minGap: minimum pixel space betweeen obstacles.
* multipleSpeed: Speed at which multiples are allowed.
* speedOffset: speed faster / slower than the horizon.
* minSpeed: Minimum speed which the obstacle can make an appearance.
*/
Obstacle.types = [
{
type: 'CACTUS_SMALL',
width: 17,
height: 35,
yPos: 105,
multipleSpeed: 4,
minGap: 120,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 7, 5, 27),
new CollisionBox(4, 0, 6, 34),
new CollisionBox(10, 4, 7, 14)
]
},
{
type: 'CACTUS_LARGE',
width: 25,
height: 50,
yPos: 90,
multipleSpeed: 7,
minGap: 120,
minSpeed: 0,
collisionBoxes: [
new CollisionBox(0, 12, 7, 38),
new CollisionBox(8, 0, 7, 49),
new CollisionBox(13, 10, 10, 38)
]
},
{
type: 'PTERODACTYL',
width: 46,
height: 40,
yPos: [ 100, 75, 50 ], // Variable height.
yPosMobile: [ 100, 50 ], // Variable height mobile.
multipleSpeed: 999,
minSpeed: 8.5,
minGap: 150,
collisionBoxes: [
new CollisionBox(15, 15, 16, 5),
new CollisionBox(18, 21, 24, 6),
new CollisionBox(2, 14, 4, 3),
new CollisionBox(6, 10, 4, 7),
new CollisionBox(10, 8, 6, 9)
],
numFrames: 2,
frameRate: 1000/6,
speedOffset: .8
}
];


//******************************************************************************
/**
* T-rex game character.
* @param {HTMLCanvas} canvas
* @param {Object} spritePos Positioning within image sprite.
* @constructor
*/
function Trex(canvas, spritePos) {
this.canvas = canvas;
this.canvasCtx = canvas.getContext('2d');
this.spritePos = spritePos;
this.xPos = 0;
this.yPos = 0;
// Position when on the ground.
this.groundYPos = 0;
this.currentFrame = 0;
this.currentAnimFrames = [];
this.blinkDelay = 0;
this.blinkCount = 0;
this.animStartTime = 0;
this.timer = 0;
this.msPerFrame = 1000 / FPS;
this.config = Trex.config;
// Current status.
this.status = Trex.status.WAITING;

this.jumping = false;
this.ducking = false;
this.jumpVelocity = 0;
this.reachedMinHeight = false;
this.speedDrop = false;
this.jumpCount = 0;
this.jumpspotX = 0;

this.init();
};


/**
* T-rex player config.
* @enum {number}
*/
Trex.config = {
DROP_VELOCITY: -5,
GRAVITY: 0.6,
HEIGHT: 47,
HEIGHT_DUCK: 25,
INIITAL_JUMP_VELOCITY: -10,
INTRO_DURATION: 1500,
MAX_JUMP_HEIGHT: 30,
MIN_JUMP_HEIGHT: 30,
SPEED_DROP_COEFFICIENT: 3,
SPRITE_WIDTH: 262,
START_X_POS: 50,
WIDTH: 44,
WIDTH_DUCK: 59
};


/**
* Used in collision detection.
* @type {Array }
*/
Trex.collisionBoxes = {
DUCKING: [
new CollisionBox(1, 18, 55, 25)
],
RUNNING: [
new CollisionBox(22, 0, 17, 16),
new CollisionBox(1, 18, 30, 9),
new CollisionBox(10, 35, 14, 8),
new CollisionBox(1, 24, 29, 5),
new CollisionBox(5, 30, 21, 4),
new CollisionBox(9, 34, 15, 4)
]
};


/**
* Animation states.
* @enum {string}
*/
Trex.status = {
CRASHED: 'CRASHED',
DUCKING: 'DUCKING',
JUMPING: 'JUMPING',
RUNNING: 'RUNNING',
WAITING: 'WAITING'
};

/**
* Blinking coefficient.
* @const
*/
Trex.BLINK_TIMING = 7000;


/**
* Animation config for different states.
* @enum {Object}
*/
Trex.animFrames = {
WAITING: {
frames: [44, 0],
msPerFrame: 1000 / 3
},
RUNNING: {
frames: [88, 132],
msPerFrame: 1000 / 12
},
CRASHED: {
frames: [220],
msPerFrame: 1000 / 60
},
JUMPING: {
frames: [0],
msPerFrame: 1000 / 60
},
DUCKING: {
frames: [262, 321],
msPerFrame: 1000 / 8
}
};


Trex.prototype = {
/**
* T-rex player initaliser.
* Sets the t-rex to blink at random intervals.
*/
init: function() {
this.groundYPos = Runner.defaultDimensions.HEIGHT - this.config.HEIGHT -
Runner.config.BOTTOM_PAD;
this.yPos = this.groundYPos;
this.minJumpHeight = this.groundYPos - this.config.MIN_JUMP_HEIGHT;

this.draw(0, 0);
this.update(0, Trex.status.WAITING);
},

/**
* Setter for the jump velocity.
* The approriate drop velocity is also set.
*/
setJumpVelocity: function(setting) {
this.config.INIITAL_JUMP_VELOCITY = -setting;
this.config.DROP_VELOCITY = -setting / 2;
},

/**
* Set the animation status.
* @param {!number} deltaTime
* @param {Trex.status} status Optional status to switch to.
*/
update: function(deltaTime, opt_status) {
this.timer += deltaTime;

// Update the status.
if (opt_status) {
this.status = opt_status;
this.currentFrame = 0;
this.msPerFrame = Trex.animFrames[opt_status].msPerFrame;
this.currentAnimFrames = Trex.animFrames[opt_status].frames;

if (opt_status == Trex.status.WAITING) {
this.animStartTime = getTimeStamp();
this.setBlinkDelay();
}
}

// Game intro animation, T-rex moves in from the left.
if (this.playingIntro & & this.xPos = this.msPerFrame) {
this.currentFrame = this.currentFrame ==
this.currentAnimFrames.length - 1 ? 0 : this.currentFrame + 1;
this.timer = 0;
}

// Speed drop becomes duck if the down key is still being pressed.
if (this.speedDrop & & this.yPos == this.groundYPos) {
this.speedDrop = false;
this.setDuck(true);
}
},

/**
* Draw the t-rex to a particular position.
* @param {number} x
* @param {number} y
*/
draw: function(x, y) {
var sourceX = x;
var sourceY = y;
var sourceWidth = this.ducking & & this.status != Trex.status.CRASHED ?
this.config.WIDTH_DUCK : this.config.WIDTH;
var sourceHeight = this.config.HEIGHT;

if (IS_HIDPI) {
sourceX *= 2;
sourceY *= 2;
sourceWidth *= 2;
sourceHeight *= 2;
}

// Adjustments for sprite sheet position.
sourceX += this.spritePos.x;
sourceY += this.spritePos.y;

// Ducking.
if (this.ducking & & this.status != Trex.status.CRASHED) {
this.canvasCtx.drawImage(Runner.imageSprite, sourceX, sourceY,
sourceWidth, sourceHeight,
this.xPos, this.yPos,
this.config.WIDTH_DUCK, this.config.HEIGHT);
} else {
// Crashed whilst ducking. Trex is standing up so needs adjustment.
if (this.ducking & & this.status == Trex.status.CRASHED) {
this.xPos++;
}
// Standing / running
this.canvasCtx.drawImage(Runner.imageSprite, sourceX, sourceY,
sourceWidth, sourceHeight,
this.xPos, this.yPos,
this.config.WIDTH, this.config.HEIGHT);
}
},

/**
* Sets a random time for the blink to happen.
*/
setBlinkDelay: function() {
this.blinkDelay = Math.ceil(Math.random() * Trex.BLINK_TIMING);
},

/**
* Make t-rex blink at random intervals.
* @param {number} time Current time in milliseconds.
*/
blink: function(time) {
var deltaTime = time - this.animStartTime;

if (deltaTime & gt; = this.blinkDelay) {
this.draw(this.currentAnimFrames[this.currentFrame], 0);

if (this.currentFrame == 1) {
// Set new random delay to blink.
this.setBlinkDelay();
this.animStartTime = time;
this.blinkCount++;
}
}
},

/**
* Initialise a jump.
* @param {number} speed
*/
startJump: function(speed) {
if (!this.jumping) {
this.update(0, Trex.status.JUMPING);
// Tweak the jump velocity based on the speed.
this.jumpVelocity = this.config.INIITAL_JUMP_VELOCITY - (speed / 10);
this.jumping = true;
this.reachedMinHeight = false;
this.speedDrop = false;
}
},

/**
* Jump is complete, falling down.
*/
endJump: function() {
if (this.reachedMinHeight & &
this.jumpVelocity this.groundYPos) {
this.reset();
this.jumpCount++;
}

this.update(deltaTime);
},

/**
* Set the speed drop. Immediately cancels the current jump.
*/
setSpeedDrop: function() {
this.speedDrop = true;
this.jumpVelocity = 1;
},

/**
* @param {boolean} isDucking.
*/
setDuck: function(isDucking) {
if (isDucking & & this.status != Trex.status.DUCKING) {
this.update(0, Trex.status.DUCKING);
this.ducking = true;
} else if (this.status == Trex.status.DUCKING) {
this.update(0, Trex.status.RUNNING);
this.ducking = false;
}
},

/**
* Reset the t-rex to running at start of game.
*/
reset: function() {
this.yPos = this.groundYPos;
this.jumpVelocity = 0;
this.jumping = false;
this.ducking = false;
this.update(0, Trex.status.RUNNING);
this.midair = false;
this.speedDrop = false;
this.jumpCount = 0;
}
};


//******************************************************************************

/**
* Handles displaying the distance meter.
* @param {!HTMLCanvasElement} canvas
* @param {Object} spritePos Image position in sprite.
* @param {number} canvasWidth
* @constructor
*/
function DistanceMeter(canvas, spritePos, canvasWidth) {
this.canvas = canvas;
this.canvasCtx = canvas.getContext('2d');
this.image = Runner.imageSprite;
this.spritePos = spritePos;
this.x = 0;
this.y = 5;

this.currentDistance = 0;
this.maxScore = 0;
this.highScore = 0;
this.container = null;

this.digits = [];
this.acheivement = false;
this.defaultString = '';
this.flashTimer = 0;
this.flashIterations = 0;
this.invertTrigger = false;

this.config = DistanceMeter.config;
this.maxScoreUnits = this.config.MAX_DISTANCE_UNITS;
this.init(canvasWidth);
};


/**
* @enum {number}
*/
DistanceMeter.dimensions = {
WIDTH: 10,
HEIGHT: 13,
DEST_WIDTH: 11
};


/**
* Y positioning of the digits in the sprite sheet.
* X position is always 0.
* @type {Array }
*/
DistanceMeter.yPos = [0, 13, 27, 40, 53, 67, 80, 93, 107, 120];


/**
* Distance meter config.
* @enum {number}
*/
DistanceMeter.config = {
// Number of digits.
MAX_DISTANCE_UNITS: 5,

// Distance that causes achievement animation.
ACHIEVEMENT_DISTANCE: 100,

// Used for conversion from pixel distance to a scaled unit.
COEFFICIENT: 0.025,

// Flash duration in milliseconds.
FLASH_DURATION: 1000 / 4,

// Flash iterations for achievement animation.
FLASH_ITERATIONS: 3
};


DistanceMeter.prototype = {
/**
* Initialise the distance meter to '00000'.
* @param {number} width Canvas width in px.
*/
init: function(width) {
var maxDistanceStr = '';

this.calcXPos(width);
this.maxScore = this.maxScoreUnits;
for (var i = 0; i this.maxScore & & this.maxScoreUnits ==
this.config.MAX_DISTANCE_UNITS) {
this.maxScoreUnits++;
this.maxScore = parseInt(this.maxScore + '9');
} else {
this.distance = 0;
}

if (distance & gt; 0) {
// Acheivement unlocked
if (distance % this.config.ACHIEVEMENT_DISTANCE == 0) {
// Flash score and play sound.
this.acheivement = true;
this.flashTimer = 0;
playSound = true;
}

// Create a string representation of the distance with leading 0.
var distanceStr = (this.defaultString +
distance).substr(-this.maxScoreUnits);
this.digits = distanceStr.split('');
} else {
this.digits = this.defaultString.split('');
}
} else {
// Control flashing of the score on reaching acheivement.
if (this.flashIterations
this.config.FLASH_DURATION * 2) {
this.flashTimer = 0;
this.flashIterations++;
}
} else {
this.acheivement = false;
this.flashIterations = 0;
this.flashTimer = 0;
}
}

// Draw the digits if not flashing.
if (paint) {
for (var i = this.digits.length - 1; i & gt; = 0; i--) {
this.draw(i, parseInt(this.digits[i]));
}
}

this.drawHighScore();
return playSound;
},

/**
* Draw the high score.
*/
drawHighScore: function() {
this.canvasCtx.save();
this.canvasCtx.globalAlpha = .8;
for (var i = this.highScore.length - 1; i & gt; = 0; i--) {
this.draw(i, parseInt(this.highScore[i], 10), true);
}
this.canvasCtx.restore();
},

/**
* Set the highscore as a array string.
* Position of char in the sprite: H - 10, I - 11.
* @param {number} distance Distance ran in pixels.
*/
setHighScore: function(distance) {
distance = this.getActualDistance(distance);
var highScoreStr = (this.defaultString +
distance).substr(-this.maxScoreUnits);

this.highScore = ['10', '11', ''].concat(highScoreStr.split(''));
},

/**
* Reset the distance meter back to '00000'.
*/
reset: function() {
this.update(0);
this.acheivement = false;
}
};


//******************************************************************************

/**
* Cloud background item.
* Similar to an obstacle object but without collision boxes.
* @param {HTMLCanvasElement} canvas Canvas element.
* @param {Object} spritePos Position of image in sprite.
* @param {number} containerWidth
*/
function Cloud(canvas, spritePos, containerWidth) {
this.canvas = canvas;
this.canvasCtx = this.canvas.getContext('2d');
this.spritePos = spritePos;
this.containerWidth = containerWidth;
this.xPos = containerWidth;
this.yPos = 0;
this.remove = false;
this.cloudGap = getRandomNum(Cloud.config.MIN_CLOUD_GAP,
Cloud.config.MAX_CLOUD_GAP);

this.init();
};


/**
* Cloud object config.
* @enum {number}
*/
Cloud.config = {
HEIGHT: 14,
MAX_CLOUD_GAP: 400,
MAX_SKY_LEVEL: 30,
MIN_CLOUD_GAP: 100,
MIN_SKY_LEVEL: 71,
WIDTH: 46
};


Cloud.prototype = {
/**
* Initialise the cloud. Sets the Cloud height.
*/
init: function() {
this.yPos = getRandomNum(Cloud.config.MAX_SKY_LEVEL,
Cloud.config.MIN_SKY_LEVEL);
this.draw();
},

/**
* Draw the cloud.
*/
draw: function() {
this.canvasCtx.save();
var sourceWidth = Cloud.config.WIDTH;
var sourceHeight = Cloud.config.HEIGHT;

if (IS_HIDPI) {
sourceWidth = sourceWidth * 2;
sourceHeight = sourceHeight * 2;
}

this.canvasCtx.drawImage(Runner.imageSprite, this.spritePos.x,
this.spritePos.y,
sourceWidth, sourceHeight,
this.xPos, this.yPos,
Cloud.config.WIDTH, Cloud.config.HEIGHT);

this.canvasCtx.restore();
},

/**
* Update the cloud position.
* @param {number} speed
*/
update: function(speed) {
if (!this.remove) {
this.xPos -= Math.ceil(speed);
this.draw();

// Mark as removeable if no longer in the canvas.
if (!this.isVisible()) {
this.remove = true;
}
}
},

/**
* Check if the cloud is visible on the stage.
* @return {boolean}
*/
isVisible: function() {
return this.xPos + Cloud.config.WIDTH & gt; 0;
}
};


//******************************************************************************

/**
* Nightmode shows a moon and stars on the horizon.
*/
function NightMode(canvas, spritePos, containerWidth) {
this.spritePos = spritePos;
this.canvas = canvas;
this.canvasCtx = canvas.getContext('2d');
this.xPos = containerWidth - 50;
this.yPos = 30;
this.currentPhase = 0;
this.opacity = 0;
this.containerWidth = containerWidth;
this.stars = [];
this.drawStars = false;
this.placeStars();
};

/**
* @enum {number}
*/
NightMode.config = {
FADE_SPEED: 0.035,
HEIGHT: 40,
MOON_SPEED: 0.25,
NUM_STARS: 2,
STAR_SIZE: 9,
STAR_SPEED: 0.3,
STAR_MAX_Y: 70,
WIDTH: 20
};

NightMode.phases = [140, 120, 100, 60, 40, 20, 0];

NightMode.prototype = {
/**
* Update moving moon, changing phases.
* @param {boolean} activated Whether night mode is activated.
* @param {number} delta
*/
update: function(activated, delta) {
// Moon phase.
if (activated & & this.opacity == 0) {
this.currentPhase++;

if (this.currentPhase & gt; = NightMode.phases.length) {
this.currentPhase = 0;
}
}

// Fade in / out.
if (activated & & (this.opacity 0) {
this.opacity -= NightMode.config.FADE_SPEED;
}

// Set moon positioning.
if (this.opacity & gt; 0) {
this.xPos = this.updateXPos(this.xPos, NightMode.config.MOON_SPEED);

// Update stars.
if (this.drawStars) {
for (var i = 0; i this.bumpThreshold ? this.dimensions.WIDTH : 0;
},

/**
* Draw the horizon line.
*/
draw: function() {
this.canvasCtx.drawImage(Runner.imageSprite, this.sourceXPos[0],
this.spritePos.y,
this.sourceDimensions.WIDTH, this.sourceDimensions.HEIGHT,
this.xPos[0], this.yPos,
this.dimensions.WIDTH, this.dimensions.HEIGHT);

this.canvasCtx.drawImage(Runner.imageSprite, this.sourceXPos[1],
this.spritePos.y,
this.sourceDimensions.WIDTH, this.sourceDimensions.HEIGHT,
this.xPos[1], this.yPos,
this.dimensions.WIDTH, this.dimensions.HEIGHT);
},

/**
* Update the x position of an indivdual piece of the line.
* @param {number} pos Line position.
* @param {number} increment
*/
updateXPos: function(pos, increment) {
var line1 = pos;
var line2 = pos == 0 ? 1 : 0;

this.xPos[line1] -= increment;
this.xPos[line2] = this.xPos[line1] + this.dimensions.WIDTH;

if (this.xPos[line1] = 0; i--) {
this.clouds[i].update(cloudSpeed);
}

var lastCloud = this.clouds[numClouds - 1];

// Check for adding a new cloud.
if (numClouds lastCloud.cloudGap & &
this.cloudFrequency & gt; Math.random()) {
this.addCloud();
}

// Remove expired clouds.
this.clouds = this.clouds.filter(function(obj) {
return !obj.remove;
});
} else {
this.addCloud();
}
},

/**
* Update the obstacle positions.
* @param {number} deltaTime
* @param {number} currentSpeed
*/
updateObstacles: function(deltaTime, currentSpeed) {
// Obstacles, move to Horizon layer.
var updatedObstacles = this.obstacles.slice(0);

for (var i = 0; i 0) {
var lastObstacle = this.obstacles[this.obstacles.length - 1];

if (lastObstacle & & !lastObstacle.followingObstacleCreated & &
lastObstacle.isVisible() & &
(lastObstacle.xPos + lastObstacle.width + lastObstacle.gap) 1) {
this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION);
}
}
},

/**
* Returns whether the previous two obstacles are the same as the next one.
* Maximum duplication is set in config value MAX_OBSTACLE_DUPLICATION.
* @return {boolean}
*/
duplicateObstacleCheck: function(nextObstacleType) {
var duplicateCount = 0;

for (var i = 0; i = Runner.config.MAX_OBSTACLE_DUPLICATION;
},

/**
* Reset the horizon layer.
* Remove existing obstacles and reposition the horizon line.
*/
reset: function() {
this.obstacles = [];
this.horizonLine.reset();
this.nightMode.reset();
},

/**
* Update the canvas width and scaling.
* @param {number} width Canvas width.
* @param {number} height Canvas height.
*/
resize: function(width, height) {
this.canvas.width = width;
this.canvas.height = height;
},

/**
* Add a new cloud to the horizon.
*/
addCloud: function() {
this.clouds.push(new Cloud(this.canvas, this.spritePos.CLOUD,
this.dimensions.WIDTH));
}
};
})();







Strona ad.doubleclick.net jest zablokowana
Żądania do serwera zostały zablokowane przez rozszerzenie.



Spróbuj wyłączyć rozszerzenia.


ERR_BLOCKED_BY_CLIENT






Odśwież
















Żądania do serwera zostały zablokowane przez rozszerzenie.









// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
* @fileoverview This file defines a singleton which provides access to all data
* that is available as soon as the page's resources are loaded (before DOM
* content has finished loading). This data includes both localized strings and
* any data that is important to have ready from a very early stage (e.g. things
* that must be displayed right away).
*/

/** @type {!LoadTimeData} */ var loadTimeData;

// Expose this type globally as a temporary work around until
// https://github.com/google/closure-compiler/issues/544 is fixed.
/** @constructor */
function LoadTimeData() {}

(function() {
'use strict';

LoadTimeData.prototype = {
/**
* Sets the backing object.
*
* Note that there is no getter for |data_| to discourage abuse of the form:
*
* var value = loadTimeData.data()['key'];
*
* @param {Object} value The de-serialized page data.
*/
set data(value) {
expect(!this.data_, 'Re-setting data.');
this.data_ = value;
},

/**
* Returns a JsEvalContext for |data_|.
* @returns {JsEvalContext}
*/
createJsEvalContext: function() {
return new JsEvalContext(this.data_);
},

/**
* @param {string} id An ID of a value that might exist.
* @return {boolean} True if |id| is a key in the dictionary.
*/
valueExists: function(id) {
return id in this.data_;
},

/**
* Fetches a value, expecting that it exists.
* @param {string} id The key that identifies the desired value.
* @return {*} The corresponding value.
*/
getValue: function(id) {
expect(this.data_, 'No data. Did you remember to include strings.js?');
var value = this.data_[id];
expect(typeof value != 'undefined', 'Could not find value for ' + id);
return value;
},

/**
* As above, but also makes sure that the value is a string.
* @param {string} id The key that identifies the desired string.
* @return {string} The corresponding string value.
*/
getString: function(id) {
var value = this.getValue(id);
expectIsType(id, value, 'string');
return /** @type {string} */ (value);
},

/**
* Returns a formatted localized string where $1 to $9 are replaced by the
* second to the tenth argument.
* @param {string} id The ID of the string we want.
* @param {...(string|number)} var_args The extra values to include in the
* formatted output.
* @return {string} The formatted string.
*/
getStringF: function(id, var_args) {
var value = this.getString(id);
if (!value)
return '';

var varArgs = arguments;
return value.replace(/\$[$1-9]/g, function(m) {
return m == '$$' ? '$' : varArgs[m[1]];
});
},

/**
* As above, but also makes sure that the value is a boolean.
* @param {string} id The key that identifies the desired boolean.
* @return {boolean} The corresponding boolean value.
*/
getBoolean: function(id) {
var value = this.getValue(id);
expectIsType(id, value, 'boolean');
return /** @type {boolean} */ (value);
},

/**
* As above, but also makes sure that the value is an integer.
* @param {string} id The key that identifies the desired number.
* @return {number} The corresponding number value.
*/
getInteger: function(id) {
var value = this.getValue(id);
expectIsType(id, value, 'number');
expect(value == Math.floor(value), 'Number isn\'t integer: ' + value);
return /** @type {number} */ (value);
},

/**
* Override values in loadTimeData with the values found in |replacements|.
* @param {Object} replacements The dictionary object of keys to replace.
*/
overrideValues: function(replacements) {
expect(typeof replacements == 'object',
'Replacements must be a dictionary object.');
for (var key in replacements) {
this.data_[key] = replacements[key];
}
}
};

/**
* Checks condition, displays error message if expectation fails.
* @param {*} condition The condition to check for truthiness.
* @param {string} message The message to display if the check fails.
*/
function expect(condition, message) {
if (!condition) {
console.error('Unexpected condition on ' + document.location.href + ': ' +
message);
}
}

/**
* Checks that the given value has the given type.
* @param {string} id The id of the value (only used for error message).
* @param {*} value The value to check the type on.
* @param {string} type The type we expect |value| to be.
*/
function expectIsType(id, value, type) {
expect(typeof value == type, '[' + value + '] (' + id +
') is not a ' + type);
}

expect(!loadTimeData, 'should only include this file once');
loadTimeData = new LoadTimeData;
})();
loadTimeData.data = { " details " : " Szczegóły " , " errorCode " : " ERR_BLOCKED_BY_CLIENT " , " fontfamily " : " 'Segoe UI', Tahoma, sans-serif " , " fontsize " : " 75% " , " heading " :{ " hostName " : " ad.doubleclick.net " , " msg " : " Strona \u003Cspan jscontent=\ " hostName\ " & gt; \u003C/span & gt; jest zablokowana " }, " hideDetails " : " Ukryj szczegóły " , " iconClass " : " icon-generic " , " language " : " pl " , " reloadButton " :{ " msg " : " Odśwież " , " reloadTrackingId " :-1, " reloadUrl " : " http://ad.doubleclick.net/N6245/adi/ebay.ebayus.vip/MPU;tcat=12576;items=;ice=;ccode=;sz=300x250;u=i_1493276518845304732%7Cm_237697;;cat=46701;cat=12576;cat=11890;seg=efdwefdwesafdc;seg=tmon;seg=AdvGL_Vtr;dcopt=ist;tile=1;ot=1;um=0;us=13;eb_trk=237697;pr=20;xp=20;np=20;uz=Unknown;fbi=;sbi=;fbo=;sbo=;fse=;sse=;fvi=;svi=;kw=brightsign,hd920a,digital,signage,player,retail,display,hdmi,solid,state,media;lkw=;cg=5de2c6201580abc55f84d44ff5bd9b27;ord=1483031638352; " }, " suggestionsDetails " :[], " suggestionsSummaryList " :[{ " summary " : " Spróbuj wyłączyć rozszerzenia. " }], " summary " :{ " dnsDefinition " : " DNS to usługa sieciowa tłumacząca nazwę serwera na jego adres internetowy. " , " failedUrl " : " http://ad.doubleclick.net/N6245/adi/ebay.ebayus.vip/MPU;tcat=12576;items=;ice=;ccode=;sz=300x250;u=i_1493276518845304732%7Cm_237697;;cat=46701;cat=12576;cat=11890;seg=efdwefdwesafdc;seg=tmon;seg=AdvGL_Vtr;dcopt=ist;tile=1;ot=1;um=0;us=13;eb_trk=237697;pr=20;xp=20;np=20;uz=Unknown;fbi=;sbi=;fbo=;sbo=;fse=;sse=;fvi=;svi=;kw=brightsign,hd920a,digital,signage,player,retail,display,hdmi,solid,state,media;lkw=;cg=5de2c6201580abc55f84d44ff5bd9b27;ord=1483031638352; " , " hostName " : " ad.doubleclick.net " , " msg " : " Żądania do serwera zostały zablokowane przez rozszerzenie. " }, " textdirection " : " ltr " , " title " : " ad.doubleclick.net " }; // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/** @typedef {Document|DocumentFragment|Element} */
var ProcessingRoot;

/**
* @fileoverview This is a simple template engine inspired by JsTemplates
* optimized for i18n.
*
* It currently supports three handlers:
*
* * i18n-content which sets the textContent of the element.
*
*
*
* * i18n-options which generates elements for a .
*
*
*
* * i18n-values is a list of attribute-value or property-value pairs.
* Properties are prefixed with a '.' and can contain nested properties.
*
*
*
* This file is a copy of i18n_template.js, with minor tweaks to support using
* load_time_data.js. It should replace i18n_template.js eventually.
*/

var i18nTemplate = (function() {
/**
* This provides the handlers for the templating engine. The key is used as
* the attribute name and the value is the function that gets called for every
* single node that has this attribute.
* @type {!Object}
*/
var handlers = {
/**
* This handler sets the textContent of the element.
* @param {!HTMLElement} element The node to modify.
* @param {string} key The name of the value in |data|.
* @param {!LoadTimeData} data The data source to draw from.
* @param {!Set } visited
*/
'i18n-content': function(element, key, data, visited) {
element.textContent = data.getString(key);
},

/**
* This handler adds options to a element.
* @param {!HTMLElement} select The node to modify.
* @param {string} key The name of the value in |data|. It should
* identify an array of values to initialize an . Each value,
* if a pair, represents [content, value]. Otherwise, it should be a
* content string with no value.
* @param {!LoadTimeData} data The data source to draw from.
* @param {!Set } visited
*/
'i18n-options': function(select, key, data, visited) {
var options = data.getValue(key);
options.forEach(function(optionData) {
var option = typeof optionData == 'string' ?
new Option(optionData) :
new Option(optionData[1], optionData[0]);
select.appendChild(option);
});
},

/**
* This is used to set HTML attributes and DOM properties. The syntax is:
* attributename:key;
* .domProperty:key;
* .nested.dom.property:key
* @param {!HTMLElement} element The node to modify.
* @param {string} attributeAndKeys The path of the attribute to modify
* followed by a colon, and the name of the value in |data|.
* Multiple attribute/key pairs may be separated by semicolons.
* @param {!LoadTimeData} data The data source to draw from.
* @param {!Set } visited
*/
'i18n-values': function(element, attributeAndKeys, data, visited) {
var parts = attributeAndKeys.replace(/\s/g, '').split(/;/);
parts.forEach(function(part) {
if (!part)
return;

var attributeAndKeyPair = part.match(/^([^:]+):(.+)$/);
if (!attributeAndKeyPair)
throw new Error('malformed i18n-values: ' + attributeAndKeys);

var propName = attributeAndKeyPair[1];
var propExpr = attributeAndKeyPair[2];

var value = data.getValue(propExpr);

// Allow a property of the form '.foo.bar' to assign a value into
// element.foo.bar.
if (propName[0] == '.') {
var path = propName.slice(1).split('.');
var targetObject = element;
while (targetObject & & path.length & gt; 1) {
targetObject = targetObject[path.shift()];
}
if (targetObject) {
targetObject[path] = value;
// In case we set innerHTML (ignoring others) we need to recursively
// check the content.
if (path == 'innerHTML') {
for (var i = 0; i } visited Already visited roots.
* @param {boolean} mark Whether nodes should be marked processed.
*/
function processWithoutCycles(root, data, visited, mark) {
if (visited.has(root)) {
// Found a cycle. Stop it.
return;
}

// Mark the node as visited before recursing.
visited.add(root);

var importLinks = root.querySelectorAll('link[rel=import]');
for (var i = 0; i is inside a .
// TODO(dbeam): should we log an error if we detect that here?
continue;
}
processWithoutCycles(importLink.import, data, visited, mark);
}

var templates = root.querySelectorAll('template');
for (var i = 0; i } visited
*/
function processElement(element, data, visited) {
for (var i = 0; i // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file serves as a proxy to bring the included js file from /third_party
// into its correct location under the resources directory tree, whence it is
// delivered via a chrome://resources URL. See ../webui_resources.grd.
(function(){var i=null;function k(){return Function.prototype.call.apply(Array.prototype.slice,arguments)}function l(a,b){var c=k(arguments,2);return function(){return b.apply(a,c)}}function m(a,b){var c=new n(b);for(c.f=[a];c.f.length;){var e=c,d=c.f.shift();e.g(d);for(d=d.firstChild;d;d=d.nextSibling)d.nodeType==1 & & e.f.push(d)}}function n(a){this.g=a}function o(a){a.style.display= " " }function p(a){a.style.display= " none " };var q= " : " ,r=/\s*;\s*/;function s(){this.i.apply(this,arguments)}s.prototype.i=function(a,b){if(!this.a)this.a={};if(b){var c=this.a,e=b.a,d;for(d in e)c[d]=e[d]}else for(c in d=this.a,e=t,e)d[c]=e[c];this.a.$this=a;this.a.$context=this;this.d=typeof a!= " undefined " & & a!=i?a: " " ;if(!b)this.a.$top=this.d};var t={$default:i},u=[];function v(a){for(var b in a.a)delete a.a[b];a.d=i;u.push(a)}function w(a,b,c){try{return b.call(c,a.a,a.d)}catch(e){return t.$default}}
function x(a,b,c,e){if(u.length & gt; 0){var d=u.pop();s.call(d,b,a);a=d}else a=new s(b,a);a.a.$index=c;a.a.$count=e;return a}var y= " a_ " ,z= " b_ " ,A= " with (a_) with (b_) return " ,D={};function E(a){if(!D[a])try{D[a]=new Function(y,z,A+a)}catch(b){}return D[a]}function F(a){for(var b=[],a=a.split(r),c=0,e=a.length;c =h.length?(e=c,g=d.pop(),g.length=0,e.c.push(g),f.pop()):(g=h[e++],j=h[e++],h=h[e++],f[f.length-1]=e,g.call(c,j,h))};
})()
var tp = document.getElementById('t');jstProcess(loadTimeData.createJsEvalContext(), tp);