金山打字
【金山打字】这是一个练习打字的游戏,当游戏开始后,界面从顶部不断落下内容为随机字母的方块,当按下相对应的按键时,就会清除对应方块。游戏难度会随着落下的速度加快而提高。玩家每次成功清除字母方块,都会获得一定的分数。
运行效果:
HTML
源码-demo.html
:
doctype html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 金山打字游戏title >
< script src = " jquery.js" > script >
< script src = " js.js" > script >
< script>
$ ( function ( ) {
new typegame ( ) ;
} ) ;
script >
head >
< style>
body {
margin : 0;
background : url ( game.jpg) no-repeat;
background-size : cover;
font-family : "幼圆" ;
background : #E8F0F0;
overflow : hidden;
}
.stop1 {
width : 130px;
height : 50px;
background : red;
position : absolute;
bottom : 0;
left : 30px;
text-align : center;
cursor : pointer;
background : url ( "stop.png" ) ;
background-size : 130px 50px;
line-height : 50px;
color : #392112;
font-size : 16px;
z-index : 6666666;
font-weight : bold;
}
.screen1 {
width : 100%;
height : 100%;
background : url ( img/dz2.jpg) no-repeat;
background-size : cover;
margin : 0 auto;
padding : 0;
position : relative;
overflow : hidden;
}
.xiabian {
width : 100%;
height : 40px;
background : #000;
position : absolute;
bottom : 0;
right : 0;
opacity : 0.8;
filter : alpha ( opacity=80) ;
}
@keyframes cg{
0% {
transform : translateY ( -50%) ;
}
100% {
transform : translateY ( 0%) ;
}
}
@keyframes cgfont{
0% {
transform : scale ( 0, 0) ;
}
100% {
transform : scale ( 1, 1) ;
}
}
body {
background : #84B526;
}
style >
< body>
< div class = " screen1" >
div >
< div class = " stop1" > 暂停游戏div >
< div class = " xiabian" > div >
body >
html >
js
源码
(1)js.js
:
function typegame ( ) {
this . objletter= { } ;
this . creatGame ( ) ;
this . num= 3 ;
this . check ( ) ;
this . creatScore ( ) ;
this . score= 0 ;
this . stage= 1 ;
this . startGame ( ) ;
this . stopGame ( ) ;
}
typegame. prototype= {
creatGame : function ( ) {
var height= $ ( window) . height ( ) ;
var width1= $ ( window) . width ( ) ;
$ ( ".screen1" ) . css ( {
width : width1,
height : $ ( window) . height ( ) - 10 ,
overflow : "hidden"
} ) ;
} ,
creatletter : function ( ) {
var that= this ;
do {
var randomnum= Math. floor ( Math. random ( ) * 26 + 65 ) ;
var randomletter= String. fromCharCode ( randomnum) ;
} while ( this . objletter[ randomletter] ) ;
var top1= - Math. round ( Math. random ( ) * 100 ) ;
do {
var left1= Math. round ( Math. random ( ) * 740 ) ;
} while ( this . check ( left1) ) ;
var time= new Date ( ) . getTime ( ) ;
var ele= $ ( "+time+ ">
" ) . css ( {
width : "100px" , height : "100px" ,
background : "url(img/" + randomletter+ ".png) center no-repeat" , backgroundSize : "contain"
, lineHeight : "60px" , fontSize : "30px" , color : "#fff" ,
textAlign : "center" , position : "absolute" , left : left1, top : top1
} ) . appendTo ( ".screen1" ) . animate ( { top : $ ( window) . height ( ) } , 6000 , "linear" , function ( ) {
if ( $ ( "div[data-time=" + time+ "]" ) [ 0 ] ) {
that. num = 3 ;
that. score= 0 ;
that. stage= 1 ;
$. each ( that. objletter, function ( index, value ) {
value. el. remove ( ) ;
} ) ;
that. objletter= { } ;
that. createFail ( ) ;
}
} ) ;
this . objletter[ randomletter] = { start : left1- 60 , end : left1+ 60 , keycode : randomnum, el : ele}
} ,
palyGame : function ( ) {
this . keydown ( ) ;
for ( var i= 0 ; i< this . num; ++ i) {
this . creatletter ( ) ;
}
} ,
check : function ( left ) {
var flag= false ;
$. each ( this . objletter, function ( index, value ) {
if ( left> value. start&& left< value. end) {
flag= true ;
}
} ) ;
return flag;
} ,
keydown : function ( ) {
var that= this ;
$ ( document) . keydown ( function ( e ) {
var code= e. keyCode;
$. each ( that. objletter, function ( index, value ) {
if ( code== value. keycode) {
value. el. remove ( ) ;
delete that. objletter[ index] ;
that. creatletter ( ) ;
that. score++ ;
$ ( ".score" ) . html ( that. score) ;
if ( that. score>= that. stage* 10 ) {
that. score= 0 ;
$ ( ".score" ) . html ( 0 ) ;
that. num++ ;
that. stage++ ;
$. each ( that. objletter, function ( index, value ) {
value. el. remove ( ) ;
} ) ;
that. objletter= { } ;
that. creatStage ( ) ;
}
}
} ) ;
} ) ;
} ,
creatScore : function ( ) {
$ ( "0
" ) . css ( {
background : "url(fs.png) no-repeat" ,
backgroundSize : "150px 180px" ,
width : 150 , height : 180 ,
position : "absolute" , right : 25 , bottom : 60 , color : "#522E1A" ,
fontSize : "60px" , lineHeight : "140px" , textAlign : "center"
} ) . appendTo ( "body" ) ;
} ,
creatStage : function ( ) {
var that= this ;
$ ( "
" ) . css ( {
position : "absolute" , top : "-50%" , bottom : 0 , right : 0 , left : 0 ,
background : "url(cg.png)" ,
width : 520 , height : 400 , backgroundSize : "contain no-repeat" ,
margin : "auto" ,
borderRadius : "5%" ,
animation : "cg 2s linear"
} ) . appendTo ( "body" ) ;
var btn= $ ( "
" ) . css ( {
position : "absolute" , top : "235px" , right : 0 , left : "65px" , margin : "auto" ,
background : "url(xy.png)" ,
zIndex : 9999 ,
fontFamily : "幼圆" ,
fontSize : "22px" ,
width : 100 , height : 40 , margin : "0 auto" ,
marginTop : "200" ,
color : "#fff" ,
lineHeight : "40px" ,
backgroundSize : "240px 300px" ,
cursor : "pointer"
} ) . appendTo ( ".stage" ) . click ( function ( ) {
that. palyGame ( ) ;
$ ( this ) . parent ( ) . remove ( ) ;
} ) ;
} ,
createFail : function ( ) {
var that= this ;
if ( this . failbord) {
this . failbord. remove ( ) ;
}
var btn= $ ( "
" ) . css ( {
width : 160 , height : 35 , textAlign : "center" , lineHeight : "30px" ,
margin : "0 auto" , cursor : "pointer" ,
position : "absolute" , right : 0 , left : 0 , margin : "auto" , bottom : "70px"
} ) . click ( function ( ) {
$ ( ".scor" ) . html ( 0 ) ;
that. palyGame ( ) ;
$ ( this ) . parent ( ) . remove ( ) ;
} ) ;
this . failbord= $ ( "
" ) . css ( {
position : "absolute" , top : "-50%" , bottom : 0 , right : 0 , left : 0 ,
background : "url(sp1.png)" ,
width : 500 , height : 350 , backgroundSize : "400px 340px" ,
margin : "auto" ,
borderRadius : "5%" ,
backgroundSize : "contain no-repeat" ,
animation : "cg 2s linear"
} ) . appendTo ( "body" ) . append ( btn) ;
} ,
startGame : function ( ) {
var that= this ;
$ ( "开始游戏
" ) . css ( {
width : 130 , height : 50 , textAlign : "center" , lineHeight : "50px" ,
margin : "0 auto" , cursor : "pointer" ,
background : "url(stop.png) no-repeat" ,
backgroundSize : "130px 50px" ,
color : "#392112" ,
position : "absolute" ,
left : "175px" , bottom : 0 ,
fontWeight : "bold" ,
marginTop : "55px"
} ) . appendTo ( "body" ) . click ( function ( ) {
that. palyGame ( ) ;
} )
} ,
stopGame : function ( ) {
var that= this ;
$ ( ".stop1" ) . click ( function ( ) {
$. each ( that. objletter, function ( index, value ) {
value. el. stop ( ) ;
} ) ;
if ( $ ( ".stop1" ) . html ( ) == "暂停游戏" ) {
$ ( ".stop1" ) . html ( "继续游戏" ) ;
} else if ( $ ( ".stop1" ) . html ( ) == "继续游戏" ) {
$ ( ".stop1" ) . html ( "暂停游戏" ) ;
$. each ( that. objletter, function ( index, value ) {
value. el. animate ( { top : $ ( window) . height ( ) } , 6000 , "linear" , function ( ) {
that. num= 3 ;
that. stage= 1 ;
that. score= 0 ;
$. each ( that. objletter, function ( index, value ) {
value. el. remove ( ) ;
} ) ;
that. objletter= { } ;
that. createFail ( ) ;
} )
} )
}
} )
}
} ;
(2)juery.js
! function ( a, b ) { "object" == typeof module&& "object" == typeof module. exports? module. exports= a. document? b ( a, ! 0 ) : function ( a ) { if ( ! a. document) throw new Error ( "jQuery requires a window with a document" ) ; return b ( a) } : b ( a) } ( "undefined" != typeof window? window: this , function ( a, b ) { var c= [ ] , d= a. document, e= c. slice, f= c. concat, g= c. push, h= c. indexOf, i= { } , j= i. toString, k= i. hasOwnProperty, l= { } , m= "1.12.2" , n = function ( a, b ) { return new n. fn. init ( a, b) } , o= / ^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$ / g , p= / ^-ms- / , q= / -([\da-z]) / gi , r = function ( a, b ) { return b. toUpperCase ( ) } ; n. fn= n. prototype= { jquery : m, constructor : n, selector : "" , length : 0 , toArray : function ( ) { return e . call ( this ) } , get : function ( a ) { return null != a? 0 > a? this [ a+ this . length] : this [ a] : e . call ( this ) } , pushStack : function ( a ) { var b= n. merge ( this . constructor ( ) , a) ; return b. prevObject= this , b. context= this . context, b} , each : function ( a ) { return n. each ( this , a) } , map : function ( a ) { return this . pushStack ( n. map ( this , function ( b, c ) { return a . call ( b, c, b) } ) ) } , slice : function ( ) { return this . pushStack ( e . apply ( this , arguments) ) } , first : function ( ) { return this . eq ( 0 ) } , last : function ( ) { return this . eq ( - 1 ) } , eq : function ( a ) { var b= this . length, c= + a+ ( 0 > a? b: 0 ) ; return this . pushStack ( c>= 0 && b> c? [ this [ c] ] : [ ] ) } , end : function ( ) { return this . prevObject|| this . constructor ( ) } , push : g, sort : c. sort, splice : c. splice} , n. extend= n. fn. extend = function ( ) { var a, b, c, d, e, f, g= arguments[ 0 ] || { } , h= 1 , i= arguments. length, j= ! 1 ; for ( "boolean" == typeof g&& ( j= g, g= arguments[ h] || { } , h++ ) , "object" == typeof g|| n. isFunction ( g) || ( g= { } ) , h=== i&& ( g= this , h-- ) ; i> h; h++ ) if ( null != ( e= arguments[ h] ) ) for ( d in e) a= g[ d] , c= e[ d] , g!== c&& ( j&& c&& ( n. isPlainObject ( c) || ( b= n. isArray ( c) ) ) ? ( b? ( b= ! 1 , f= a&& n. isArray ( a) ? a: [ ] ) : f= a&& n. isPlainObject ( a) ? a: { } , g[ d] = n. extend ( j, f, c) ) : void 0 !== c&& ( g[ d] = c) ) ; return g} , n. extend ( { expando : "jQuery" + ( m+ Math. random ( ) ) . replace ( / \D / g , "" ) , isReady : ! 0 , error : function ( a ) { throw new Error ( a) } , noop : function ( ) { } , isFunction : function ( a ) { return "function" === n. type ( a) } , isArray : Array. isArray|| function ( a ) { return "array" === n. type ( a) } , isWindow : function ( a ) { return null != a&& a== a. window} , isNumeric : function ( a ) { var b= a&& a. toString ( ) ; return ! n. isArray ( a) && b- parseFloat ( b) + 1 >= 0 } , isEmptyObject : function ( a ) { var b; for ( b in a) return ! 1 ; return ! 0 } , isPlainObject : function ( a ) { var b; if ( ! a|| "object" !== n. type ( a) || a. nodeType|| n. isWindow ( a) ) return ! 1 ; try { if ( a. constructor&& ! k . call ( a, "constructor" ) && ! k . call ( a. constructor. prototype, "isPrototypeOf" ) ) return ! 1 } catch ( c) { return ! 1 } if ( ! l. ownFirst) for ( b in a) return k . call ( a, b) ; for ( b in a) ; return void 0 === b|| k . call ( a, b) } , type : function ( a ) { return null == a? a+ "" : "object" == typeof a|| "function" == typeof a? i[ j . call ( a) ] || "object" : typeof a} , globalEval : function ( b ) { b&& n. trim ( b) && ( a. execScript|| function ( b ) { a. eval . call ( a, b) } ) ( b) } , camelCase : function ( a ) { return a. replace ( p, "ms-" ) . replace ( q, r) } , nodeName : function ( a, b ) { return a. nodeName&& a. nodeName. toLowerCase ( ) === b. toLowerCase ( ) } , each : function ( a, b ) { var c, d= 0 ; if ( s ( a) ) { for ( c= a. length; c> d; d++ ) if ( b . call ( a[ d] , d, a[ d] ) === ! 1 ) break } else for ( d in a) if ( b . call ( a[ d] , d, a[ d] ) === ! 1 ) break ; return a} , trim : function ( a ) { return null == a? "" : ( a+ "" ) . replace ( o, "" ) } , makeArray : function ( a, b ) { var c= b|| [ ] ; return null != a&& ( s ( Object ( a) ) ? n. merge ( c, "string" == typeof a? [ a] : a) : g . call ( c, a) ) , c} , inArray : function ( a, b, c ) { var d; if ( b) { if ( h) return h . call ( b, a, c) ; for ( d= b. length, c= c? 0 > c? Math. max ( 0 , d+ c) : c: 0 ; d> c; c++ ) if ( c in b&& b[ c] === a) return c} return - 1 } , merge : function ( a, b ) { var c= + b. length, d= 0 , e= a. length; while ( c> d) a[ e++ ] = b[ d++ ] ; if ( c!== c) while ( void 0 !== b[ d] ) a[ e++ ] = b[ d++ ] ; return a. length= e, a} , grep : function ( a, b, c ) { for ( var d, e= [ ] , f= 0 , g= a. length, h= ! c; g> f; f++ ) d= ! b ( a[ f] , f) , d!== h&& e. push ( a[ f] ) ; return e} , map : function ( a, b, c ) { var d, e, g= 0 , h= [ ] ; if ( s ( a) ) for ( d= a. length; d> g; g++ ) e= b ( a[ g] , g, c) , null != e&& h. push ( e) ; else for ( g in a) e= b ( a[ g] , g, c) , null != e&& h. push ( e) ; return f . apply ( [ ] , h) } , guid : 1 , proxy : function ( a, b ) { var c, d, f; return "string" == typeof b&& ( f= a[ b] , b= a, a= f) , n. isFunction ( a) ? ( c= e . call ( arguments, 2 ) , d = function ( ) { return a . apply ( b|| this , c. concat ( e . call ( arguments) ) ) } , d. guid= a. guid= a. guid|| n. guid++ , d) : void 0 } , now : function ( ) { return + new Date } , support : l} ) , "function" == typeof Symbol&& ( n. fn[ Symbol. iterator] = c[ Symbol. iterator] ) , n. each ( "Boolean Number String Function Array Date RegExp Object Error Symbol" . split ( " " ) , function ( a, b ) { i[ "[object " + b+ "]" ] = b. toLowerCase ( ) } ) ; function s ( a ) { var b= ! ! a&& "length" in a&& a. length, c= n. type ( a) ; return "function" === c|| n. isWindow ( a) ? ! 1 : "array" === c|| 0 === b|| "number" == typeof b&& b> 0 && b- 1 in a} var t = function ( a ) { var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u= "sizzle" + 1 * new Date , v= a. document, w= 0 , x= 0 , y= ga ( ) , z= ga ( ) , A = ga ( ) , B = function ( a, b ) { return a=== b&& ( l= ! 0 ) , 0 } , C = 1 << 31 , D = { } . hasOwnProperty, E = [ ] , F = E . pop, G = E . push, H = E . push, I = E . slice, J = function ( a, b ) { for ( var c= 0 , d= a. length; d> c; c++ ) if ( a[ c] === b) return c; return - 1 } , K = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped" , L = "[\\x20\\t\\r\\n\\f]" , M = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+" , N = "\\[" + L + "*(" + M + ")(?:" + L + "*([*^$|!~]?=)" + L + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + M + "))|)" + L + "*\\]" , O = ":(" + M + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + N + ")*)|.*)\\)|)" , P = new RegExp ( L + "+" , "g" ) , Q = new RegExp ( "^" + L + "+|((?:^|[^\\\\])(?:\\\\.)*)" + L + "+$" , "g" ) , R = new RegExp ( "^" + L + "*," + L + "*" ) , S = new RegExp ( "^" + L + "*([>+~]|" + L + ")" + L + "*" ) , T = new RegExp ( "=" + L + "*([^\\]'\"]*?)" + L + "*\\]" , "g" ) , U = new RegExp ( O ) , V = new RegExp ( "^" + M + "$" ) , W = { ID : new RegExp ( "^#(" + M + ")" ) , CLASS : new RegExp ( "^\\.(" + M + ")" ) , TAG : new RegExp ( "^(" + M + "|[*])" ) , ATTR : new RegExp ( "^" + N ) , PSEUDO : new RegExp ( "^" + O ) , CHILD : new RegExp ( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + L + "*(even|odd|(([+-]|)(\\d*)n|)" + L + "*(?:([+-]|)" + L + "*(\\d+)|))" + L + "*\\)|)" , "i" ) , bool : new RegExp ( "^(?:" + K + ")$" , "i" ) , needsContext : new RegExp ( "^" + L + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + L + "*((?:-\\d)?\\d*)" + L + "*\\)|)(?=[^-]|$)" , "i" ) } , X = / ^(?:input|select|textarea|button)$ / i , Y = / ^h\d$ / i , Z = / ^[^{]+\{\s*\[native \w / , $= / ^(?:#([\w-]+)|(\w+)|\.([\w-]+))$ / , _= / [+~] / , aa= / '|\\ / g , ba= new RegExp ( "\\\\([\\da-f]{1,6}" + L + "?|(" + L + ")|.)" , "ig" ) , ca = function ( a, b, c ) { var d= "0x" + b- 65536 ; return d!== d|| c? b: 0 > d? String. fromCharCode ( d+ 65536 ) : String. fromCharCode ( d>> 10 | 55296 , 1023 & d| 56320 ) } , da = function ( ) { m ( ) } ; try { H . apply ( E = I . call ( v. childNodes) , v. childNodes) , E [ v. childNodes. length] . nodeType} catch ( ea) { H = { apply : E . length? function ( a, b ) { G . apply ( a, I . call ( b) ) } : function ( a, b ) { var c= a. length, d= 0 ; while ( a[ c++ ] = b[ d++ ] ) ; a. length= c- 1 } } } function fa ( a, b, d, e ) { var f, h, j, k, l, o, r, s, w= b&& b. ownerDocument, x= b? b. nodeType: 9 ; if ( d= d|| [ ] , "string" != typeof a|| ! a|| 1 !== x&& 9 !== x&& 11 !== x) return d; if ( ! e&& ( ( b? b. ownerDocument|| b: v) !== n&& m ( b) , b= b|| n, p) ) { if ( 11 !== x&& ( o= $. exec ( a) ) ) if ( f= o[ 1 ] ) { if ( 9 === x) { if ( ! ( j= b. getElementById ( f) ) ) return d; if ( j. id=== f) return d. push ( j) , d} else if ( w&& ( j= w. getElementById ( f) ) && t ( b, j) && j. id=== f) return d. push ( j) , d} else { if ( o[ 2 ] ) return H . apply ( d, b. getElementsByTagName ( a) ) , d; if ( ( f= o[ 3 ] ) && c. getElementsByClassName&& b. getElementsByClassName) return H . apply ( d, b. getElementsByClassName ( f) ) , d} if ( c. qsa&& ! A [ a+ " " ] && ( ! q|| ! q. test ( a) ) ) { if ( 1 !== x) w= b, s= a; else if ( "object" !== b. nodeName. toLowerCase ( ) ) { ( k= b. getAttribute ( "id" ) ) ? k= k. replace ( aa, "\\$&" ) : b. setAttribute ( "id" , k= u) , r= g ( a) , h= r. length, l= V . test ( k) ? "#" + k: "[id='" + k+ "']" ; while ( h-- ) r[ h] = l+ " " + qa ( r[ h] ) ; s= r. join ( "," ) , w= _. test ( a) && oa ( b. parentNode) || b} if ( s) try { return H . apply ( d, w. querySelectorAll ( s) ) , d} catch ( y) { } finally { k=== u&& b. removeAttribute ( "id" ) } } } return i ( a. replace ( Q , "$1" ) , b, d, e) } function ga ( ) { var a= [ ] ; function b ( c, e ) { return a. push ( c+ " " ) > d. cacheLength&& delete b[ a. shift ( ) ] , b[ c+ " " ] = e} return b} function ha ( a ) { return a[ u] = ! 0 , a} function ia ( a ) { var b= n. createElement ( "div" ) ; try { return ! ! a ( b) } catch ( c) { return ! 1 } finally { b. parentNode&& b. parentNode. removeChild ( b) , b= null } } function ja ( a, b ) { var c= a. split ( "|" ) , e= c. length; while ( e-- ) d. attrHandle[ c[ e] ] = b} function ka ( a, b ) { var c= b&& a, d= c&& 1 === a. nodeType&& 1 === b. nodeType&& ( ~ b. sourceIndex|| C ) - ( ~ a. sourceIndex|| C ) ; if ( d) return d; if ( c) while ( c= c. nextSibling) if ( c=== b) return - 1 ; return a? 1 : - 1 } function la ( a ) { return function ( b ) { var c= b. nodeName. toLowerCase ( ) ; return "input" === c&& b. type=== a} } function ma ( a ) { return function ( b ) { var c= b. nodeName. toLowerCase ( ) ; return ( "input" === c|| "button" === c) && b. type=== a} } function na ( a ) { return ha ( function ( b ) { return b= + b, ha ( function ( c, d ) { var e, f= a ( [ ] , c. length, b) , g= f. length; while ( g-- ) c[ e= f[ g] ] && ( c[ e] = ! ( d[ e] = c[ e] ) ) } ) } ) } function oa ( a ) { return a&& "undefined" != typeof a. getElementsByTagName&& a} c= fa. support= { } , f= fa. isXML = function ( a ) { var b= a&& ( a. ownerDocument|| a) . documentElement; return b? "HTML" !== b. nodeName: ! 1 } , m= fa. setDocument = function ( a ) { var b, e, g= a? a. ownerDocument|| a: v; return g!== n&& 9 === g. nodeType&& g. documentElement? ( n= g, o= n. documentElement, p= ! f ( n) , ( e= n. defaultView) && e. top!== e&& ( e. addEventListener? e. addEventListener ( "unload" , da, ! 1 ) : e. attachEvent&& e. attachEvent ( "onunload" , da) ) , c. attributes= ia ( function ( a ) { return a. className= "i" , ! a. getAttribute ( "className" ) } ) , c. getElementsByTagName= ia ( function ( a ) { return a. appendChild ( n. createComment ( "" ) ) , ! a. getElementsByTagName ( "*" ) . length} ) , c. getElementsByClassName= Z . test ( n. getElementsByClassName) , c. getById= ia ( function ( a ) { return o. appendChild ( a) . id= u, ! n. getElementsByName|| ! n. getElementsByName ( u) . length} ) , c. getById? ( d. find. ID = function ( a, b ) { if ( "undefined" != typeof b. getElementById&& p) { var c= b. getElementById ( a) ; return c? [ c] : [ ] } } , d. filter. ID = function ( a ) { var b= a. replace ( ba, ca) ; return function ( a ) { return a. getAttribute ( "id" ) === b} } ) : ( delete d. find. ID , d. filter. ID = function ( a ) { var b= a. replace ( ba, ca) ; return function ( a ) { var c= "undefined" != typeof a. getAttributeNode&& a. getAttributeNode ( "id" ) ; return c&& c. value=== b} } ) , d. find. TAG = c. getElementsByTagName? function ( a, b ) { return "undefined" != typeof b. getElementsByTagName? b. getElementsByTagName ( a) : c. qsa? b. querySelectorAll ( a) : void 0 } : function ( a, b ) { var c, d= [ ] , e= 0 , f= b. getElementsByTagName ( a) ; if ( "*" === a) { while ( c= f[ e++ ] ) 1 === c. nodeType&& d. push ( c) ; return d} return f} , d. find. CLASS = c. getElementsByClassName&& function ( a, b ) { return "undefined" != typeof b. getElementsByClassName&& p? b. getElementsByClassName ( a) : void 0 } , r= [ ] , q= [ ] , ( c. qsa= Z . test ( n. querySelectorAll) ) && ( ia ( function ( a ) { o. appendChild ( a) . innerHTML= " " , a. querySelectorAll ( "[msallowcapture^='']" ) . length&& q. push ( "[*^$]=" + L + "*(?:''|\"\")" ) , a. querySelectorAll ( "[selected]" ) . length|| q. push ( "\\[" + L + "*(?:value|" + K + ")" ) , a. querySelectorAll ( "[id~=" + u+ "-]" ) . length|| q. push ( "~=" ) , a. querySelectorAll ( ":checked" ) . length|| q. push ( ":checked" ) , a. querySelectorAll ( "a#" + u+ "+*" ) . length|| q. push ( ".#.+[+~]" ) } ) , ia ( function ( a ) { var b= n. createElement ( "input" ) ; b. setAttribute ( "type" , "hidden" ) , a. appendChild ( b) . setAttribute ( "name" , "D" ) , a. querySelectorAll ( "[name=d]" ) . length&& q. push ( "name" + L + "*[*^$|!~]?=" ) , a. querySelectorAll ( ":enabled" ) . length|| q. push ( ":enabled" , ":disabled" ) , a. querySelectorAll ( "*,:x" ) , q. push ( ",.*:" ) } ) ) , ( c. matchesSelector= Z . test ( s= o. matches|| o. webkitMatchesSelector|| o. mozMatchesSelector|| o. oMatchesSelector|| o. msMatchesSelector) ) && ia ( function ( a ) { c. disconnectedMatch= s . call ( a, "div" ) , s . call ( a, "[s!='']:x" ) , r. push ( "!=" , O ) } ) , q= q. length&& new RegExp ( q. join ( "|" ) ) , r= r. length&& new RegExp ( r. join ( "|" ) ) , b= Z . test ( o. compareDocumentPosition) , t= b|| Z . test ( o. contains) ? function ( a, b ) { var c= 9 === a. nodeType? a. documentElement: a, d= b&& b. parentNode; return a=== d|| ! ( ! d|| 1 !== d. nodeType|| ! ( c. contains? c. contains ( d) : a. compareDocumentPosition&& 16 & a. compareDocumentPosition ( d) ) ) } : function ( a, b ) { if ( b) while ( b= b. parentNode) if ( b=== a) return ! 0 ; return ! 1 } , B = b? function ( a, b ) { if ( a=== b) return l= ! 0 , 0 ; var d= ! a. compareDocumentPosition- ! b. compareDocumentPosition; return d? d: ( d= ( a. ownerDocument|| a) === ( b. ownerDocument|| b) ? a. compareDocumentPosition ( b) : 1 , 1 & d|| ! c. sortDetached&& b. compareDocumentPosition ( a) === d? a=== n|| a. ownerDocument=== v&& t ( v, a) ? - 1 : b=== n|| b. ownerDocument=== v&& t ( v, b) ? 1 : k? J ( k, a) - J ( k, b) : 0 : 4 & d? - 1 : 1 ) } : function ( a, b ) { if ( a=== b) return l= ! 0 , 0 ; var c, d= 0 , e= a. parentNode, f= b. parentNode, g= [ a] , h= [ b] ; if ( ! e|| ! f) return a=== n? - 1 : b=== n? 1 : e? - 1 : f? 1 : k? J ( k, a) - J ( k, b) : 0 ; if ( e=== f) return ka ( a, b) ; c= a; while ( c= c. parentNode) g. unshift ( c) ; c= b; while ( c= c. parentNode) h. unshift ( c) ; while ( g[ d] === h[ d] ) d++ ; return d? ka ( g[ d] , h[ d] ) : g[ d] === v? - 1 : h[ d] === v? 1 : 0 } , n) : n} , fa. matches = function ( a, b ) { return fa ( a, null , null , b) } , fa. matchesSelector = function ( a, b ) { if ( ( a. ownerDocument|| a) !== n&& m ( a) , b= b. replace ( T , "='$1']" ) , c. matchesSelector&& p&& ! A [ b+ " " ] && ( ! r|| ! r. test ( b) ) && ( ! q|| ! q. test ( b) ) ) try { var d= s . call ( a, b) ; if ( d|| c. disconnectedMatch|| a. document&& 11 !== a. document. nodeType) return d} catch ( e) { } return fa ( b, n, null , [ a] ) . length> 0 } , fa. contains = function ( a, b ) { return ( a. ownerDocument|| a) !== n&& m ( a) , t ( a, b) } , fa. attr = function ( a, b ) { ( a. ownerDocument|| a) !== n&& m ( a) ; var e= d. attrHandle[ b. toLowerCase ( ) ] , f= e&& D . call ( d. attrHandle, b. toLowerCase ( ) ) ? e ( a, b, ! p) : void 0 ; return void 0 !== f? f: c. attributes|| ! p? a. getAttribute ( b) : ( f= a. getAttributeNode ( b) ) && f. specified? f. value: null } , fa. error = function ( a ) { throw new Error ( "Syntax error, unrecognized expression: " + a) } , fa. uniqueSort = function ( a ) { var b, d= [ ] , e= 0 , f= 0 ; if ( l= ! c. detectDuplicates, k= ! c. sortStable&& a. slice ( 0 ) , a. sort ( B ) , l) { while ( b= a[ f++ ] ) b=== a[ f] && ( e= d. push ( f) ) ; while ( e-- ) a. splice ( d[ e] , 1 ) } return k= null , a} , e= fa. getText = function ( a ) { var b, c= "" , d= 0 , f= a. nodeType; if ( f) { if ( 1 === f|| 9 === f|| 11 === f) { if ( "string" == typeof a. textContent) return a. textContent; for ( a= a. firstChild; a; a= a. nextSibling) c+= e ( a) } else if ( 3 === f|| 4 === f) return a. nodeValue} else while ( b= a[ d++ ] ) c+= e ( b) ; return c} , d= fa. selectors= { cacheLength : 50 , createPseudo : ha, match : W , attrHandle : { } , find : { } , relative : { ">" : { dir : "parentNode" , first : ! 0 } , " " : { dir : "parentNode" } , "+" : { dir : "previousSibling" , first : ! 0 } , "~" : { dir : "previousSibling" } } , preFilter : { ATTR : function ( a ) { return a[ 1 ] = a[ 1 ] . replace ( ba, ca) , a[ 3 ] = ( a[ 3 ] || a[ 4 ] || a[ 5 ] || "" ) . replace ( ba, ca) , "~=" === a[ 2 ] && ( a[ 3 ] = " " + a[ 3 ] + " " ) , a. slice ( 0 , 4 ) } , CHILD : function ( a ) { return a[ 1 ] = a[ 1 ] . toLowerCase ( ) , "nth" === a[ 1 ] . slice ( 0 , 3 ) ? ( a[ 3 ] || fa. error ( a[ 0 ] ) , a[ 4 ] = + ( a[ 4 ] ? a[ 5 ] + ( a[ 6 ] || 1 ) : 2 * ( "even" === a[ 3 ] || "odd" === a[ 3 ] ) ) , a[ 5 ] = + ( a[ 7 ] + a[ 8 ] || "odd" === a[ 3 ] ) ) : a[ 3 ] && fa. error ( a[ 0 ] ) , a} , PSEUDO : function ( a ) { var b, c= ! a[ 6 ] && a[ 2 ] ; return W . CHILD . test ( a[ 0 ] ) ? null : ( a[ 3 ] ? a[ 2 ] = a[ 4 ] || a[ 5 ] || "" : c&& U . test ( c) && ( b= g ( c, ! 0 ) ) && ( b= c. indexOf ( ")" , c. length- b) - c. length) && ( a[ 0 ] = a[ 0 ] . slice ( 0 , b) , a[ 2 ] = c. slice ( 0 , b) ) , a. slice ( 0 , 3 ) ) } } , filter : { TAG : function ( a ) { var b= a. replace ( ba, ca) . toLowerCase ( ) ; return "*" === a? function ( ) { return ! 0 } : function ( a ) { return a. nodeName&& a. nodeName. toLowerCase ( ) === b} } , CLASS : function ( a ) { var b= y[ a+ " " ] ; return b|| ( b= new RegExp ( "(^|" + L + ")" + a+ "(" + L + "|$)" ) ) && y ( a, function ( a ) { return b. test ( "string" == typeof a. className&& a. className|| "undefined" != typeof a. getAttribute&& a. getAttribute ( "class" ) || "" ) } ) } , ATTR : function ( a, b, c ) { return function ( d ) { var e= fa. attr ( d, a) ; return null == e? "!=" === b: b? ( e+= "" , "=" === b? e=== c: "!=" === b? e!== c: "^=" === b? c&& 0 === e. indexOf ( c) : "*=" === b? c&& e. indexOf ( c) > - 1 : "$=" === b? c&& e. slice ( - c. length) === c: "~=" === b? ( " " + e. replace ( P , " " ) + " " ) . indexOf ( c) > - 1 : "|=" === b? e=== c|| e. slice ( 0 , c. length+ 1 ) === c+ "-" : ! 1 ) : ! 0 } } , CHILD : function ( a, b, c, d, e ) { var f= "nth" !== a. slice ( 0 , 3 ) , g= "last" !== a. slice ( - 4 ) , h= "of-type" === b; return 1 === d&& 0 === e? function ( a ) { return ! ! a. parentNode} : function ( b, c, i ) { var j, k, l, m, n, o, p= f!== g? "nextSibling" : "previousSibling" , q= b. parentNode, r= h&& b. nodeName. toLowerCase ( ) , s= ! i&& ! h, t= ! 1 ; if ( q) { if ( f) { while ( p) { m= b; while ( m= m[ p] ) if ( h? m. nodeName. toLowerCase ( ) === r: 1 === m. nodeType) return ! 1 ; o= p= "only" === a&& ! o&& "nextSibling" } return ! 0 } if ( o= [ g? q. firstChild: q. lastChild] , g&& s) { m= q, l= m[ u] || ( m[ u] = { } ) , k= l[ m. uniqueID] || ( l[ m. uniqueID] = { } ) , j= k[ a] || [ ] , n= j[ 0 ] === w&& j[ 1 ] , t= n&& j[ 2 ] , m= n&& q. childNodes[ n] ; while ( m= ++ n&& m&& m[ p] || ( t= n= 0 ) || o. pop ( ) ) if ( 1 === m. nodeType&& ++ t&& m=== b) { k[ a] = [ w, n, t] ; break } } else if ( s&& ( m= b, l= m[ u] || ( m[ u] = { } ) , k= l[ m. uniqueID] || ( l[ m. uniqueID] = { } ) , j= k[ a] || [ ] , n= j[ 0 ] === w&& j[ 1 ] , t= n) , t=== ! 1 ) while ( m= ++ n&& m&& m[ p] || ( t= n= 0 ) || o. pop ( ) ) if ( ( h? m. nodeName. toLowerCase ( ) === r: 1 === m. nodeType) && ++ t&& ( s&& ( l= m[ u] || ( m[ u] = { } ) , k= l[ m. uniqueID] || ( l[ m. uniqueID] = { } ) , k[ a] = [ w, t] ) , m=== b) ) break ; return t-= e, t=== d|| t% d=== 0 && t/ d>= 0 } } } , PSEUDO : function ( a, b ) { var c, e= d. pseudos[ a] || d. setFilters[ a. toLowerCase ( ) ] || fa. error ( "unsupported pseudo: " + a) ; return e[ u] ? e ( b) : e. length> 1 ? ( c= [ a, a, "" , b] , d. setFilters. hasOwnProperty ( a. toLowerCase ( ) ) ? ha ( function ( a, c ) { var d, f= e ( a, b) , g= f. length; while ( g-- ) d= J ( a, f[ g] ) , a[ d] = ! ( c[ d] = f[ g] ) } ) : function ( a ) { return e ( a, 0 , c) } ) : e} } , pseudos : { not : ha ( function ( a ) { var b= [ ] , c= [ ] , d= h ( a. replace ( Q , "$1" ) ) ; return d[ u] ? ha ( function ( a, b, c, e ) { var f, g= d ( a, null , e, [ ] ) , h= a. length; while ( h-- ) ( f= g[ h] ) && ( a[ h] = ! ( b[ h] = f) ) } ) : function ( a, e, f ) { return b[ 0 ] = a, d ( b, null , f, c) , b[ 0 ] = null , ! c. pop ( ) } } ) , has : ha ( function ( a ) { return function ( b ) { return fa ( a, b) . length> 0 } } ) , contains : ha ( function ( a ) { return a= a. replace ( ba, ca) , function ( b ) { return ( b. textContent|| b. innerText|| e ( b) ) . indexOf ( a) > - 1 } } ) , lang : ha ( function ( a ) { return V . test ( a|| "" ) || fa. error ( "unsupported lang: " + a) , a= a. replace ( ba, ca) . toLowerCase ( ) , function ( b ) { var c; do if ( c= p? b. lang: b. getAttribute ( "xml:lang" ) || b. getAttribute ( "lang" ) ) return c= c. toLowerCase ( ) , c=== a|| 0 === c. indexOf ( a+ "-" ) ; while ( ( b= b. parentNode) && 1 === b. nodeType) ; return ! 1 } } ) , target : function ( b ) { var c= a. location&& a. location. hash; return c&& c. slice ( 1 ) === b. id} , root : function ( a ) { return a=== o} , focus : function ( a ) { return a=== n. activeElement&& ( ! n. hasFocus|| n. hasFocus ( ) ) && ! ! ( a. type|| a. href|| ~ a. tabIndex) } , enabled : function ( a ) { return a. disabled=== ! 1 } , disabled : function ( a ) { return a. disabled=== ! 0 } , checked : function ( a ) { var b= a. nodeName. toLowerCase ( ) ; return "input" === b&& ! ! a. checked|| "option" === b&& ! ! a. selected} , selected : function ( a ) { return a. parentNode&& a. parentNode. selectedIndex, a. selected=== ! 0 } , empty : function ( a ) { for ( a= a. firstChild; a; a= a. nextSibling) if ( a. nodeType< 6 ) return ! 1 ; return ! 0 } , parent : function ( a ) { return ! d. pseudos. empty ( a) } , header : function ( a ) { return Y . test ( a. nodeName) } , input : function ( a ) { return X . test ( a. nodeName) } , button : function ( a ) { var b= a. nodeName. toLowerCase ( ) ; return "input" === b&& "button" === a. type|| "button" === b} , text : function ( a ) { var b; return "input" === a. nodeName. toLowerCase ( ) && "text" === a. type&& ( null == ( b= a. getAttribute ( "type" ) ) || "text" === b. toLowerCase ( ) ) } , first : na ( function ( ) { return [ 0 ] } ) , last : na ( function ( a, b ) { return [ b- 1 ] } ) , eq : na ( function ( a, b, c ) { return [ 0 > c? c+ b: c] } ) , even : na ( function ( a, b ) { for ( var c= 0 ; b> c; c+= 2 ) a. push ( c) ; return a} ) , odd : na ( function ( a, b ) { for ( var c= 1 ; b> c; c+= 2 ) a. push ( c) ; return a} ) , lt : na ( function ( a, b, c ) { for ( var d= 0 > c? c+ b: c; -- d>= 0 ; ) a. push ( d) ; return a} ) , gt : na ( function ( a, b, c ) { for ( var d= 0 > c? c+ b: c; ++ d< b; ) a. push ( d) ; return a} ) } } , d. pseudos. nth= d. pseudos. eq; for ( b in { radio : ! 0 , checkbox : ! 0 , file : ! 0 , password : ! 0 , image : ! 0 } ) d. pseudos[ b] = la ( b) ; for ( b in { submit : ! 0 , reset : ! 0 } ) d. pseudos[ b] = ma ( b) ; function pa ( ) { } pa. prototype= d. filters= d. pseudos, d. setFilters= new pa , g= fa. tokenize = function ( a, b ) { var c, e, f, g, h, i, j, k= z[ a+ " " ] ; if ( k) return b? 0 : k. slice ( 0 ) ; h= a, i= [ ] , j= d. preFilter; while ( h) { c&& ! ( e= R . exec ( h) ) || ( e&& ( h= h. slice ( e[ 0 ] . length) || h) , i. push ( f= [ ] ) ) , c= ! 1 , ( e= S . exec ( h) ) && ( c= e. shift ( ) , f. push ( { value : c, type : e[ 0 ] . replace ( Q , " " ) } ) , h= h. slice ( c. length) ) ; for ( g in d. filter) ! ( e= W [ g] . exec ( h) ) || j[ g] && ! ( e= j[ g] ( e) ) || ( c= e. shift ( ) , f. push ( { value : c, type : g, matches : e} ) , h= h. slice ( c. length) ) ; if ( ! c) break } return b? h. length: h? fa. error ( a) : z ( a, i) . slice ( 0 ) } ; function qa ( a ) { for ( var b= 0 , c= a. length, d= "" ; c> b; b++ ) d+= a[ b] . value; return d} function ra ( a, b, c ) { var d= b. dir, e= c&& "parentNode" === d, f= x++ ; return b. first? function ( b, c, f ) { while ( b= b[ d] ) if ( 1 === b. nodeType|| e) return a ( b, c, f) } : function ( b, c, g ) { var h, i, j, k= [ w, f] ; if ( g) { while ( b= b[ d] ) if ( ( 1 === b. nodeType|| e) && a ( b, c, g) ) return ! 0 } else while ( b= b[ d] ) if ( 1 === b. nodeType|| e) { if ( j= b[ u] || ( b[ u] = { } ) , i= j[ b. uniqueID] || ( j[ b. uniqueID] = { } ) , ( h= i[ d] ) && h[ 0 ] === w&& h[ 1 ] === f) return k[ 2 ] = h[ 2 ] ; if ( i[ d] = k, k[ 2 ] = a ( b, c, g) ) return ! 0 } } } function sa ( a ) { return a. length> 1 ? function ( b, c, d ) { var e= a. length; while ( e-- ) if ( ! a[ e] ( b, c, d) ) return ! 1 ; return ! 0 } : a[ 0 ] } function ta ( a, b, c ) { for ( var d= 0 , e= b. length; e> d; d++ ) fa ( a, b[ d] , c) ; return c} function ua ( a, b, c, d, e ) { for ( var f, g= [ ] , h= 0 , i= a. length, j= null != b; i> h; h++ ) ( f= a[ h] ) && ( c&& ! c ( f, d, e) || ( g. push ( f) , j&& b. push ( h) ) ) ; return g} function va ( a, b, c, d, e, f ) { return d&& ! d[ u] && ( d= va ( d) ) , e&& ! e[ u] && ( e= va ( e, f) ) , ha ( function ( f, g, h, i ) { var j, k, l, m= [ ] , n= [ ] , o= g. length, p= f|| ta ( b|| "*" , h. nodeType? [ h] : h, [ ] ) , q= ! a|| ! f&& b? p: ua ( p, m, a, h, i) , r= c? e|| ( f? a: o|| d) ? [ ] : g: q; if ( c&& c ( q, r, h, i) , d) { j= ua ( r, n) , d ( j, [ ] , h, i) , k= j. length; while ( k-- ) ( l= j[ k] ) && ( r[ n[ k] ] = ! ( q[ n[ k] ] = l) ) } if ( f) { if ( e|| a) { if ( e) { j= [ ] , k= r. length; while ( k-- ) ( l= r[ k] ) && j. push ( q[ k] = l) ; e ( null , r= [ ] , j, i) } k= r. length; while ( k-- ) ( l= r[ k] ) && ( j= e? J ( f, l) : m[ k] ) > - 1 && ( f[ j] = ! ( g[ j] = l) ) } } else r= ua ( r=== g? r. splice ( o, r. length) : r) , e? e ( null , g, r, i) : H . apply ( g, r) } ) } function wa ( a ) { for ( var b, c, e, f= a. length, g= d. relative[ a[ 0 ] . type] , h= g|| d. relative[ " " ] , i= g? 1 : 0 , k= ra ( function ( a ) { return a=== b} , h, ! 0 ) , l= ra ( function ( a ) { return J ( b, a) > - 1 } , h, ! 0 ) , m= [ function ( a, c, d ) { var e= ! g&& ( d|| c!== j) || ( ( b= c) . nodeType? k ( a, c, d) : l ( a, c, d) ) ; return b= null , e} ] ; f> i; i++ ) if ( c= d. relative[ a[ i] . type] ) m= [ ra ( sa ( m) , c) ] ; else { if ( c= d. filter[ a[ i] . type] . apply ( null , a[ i] . matches) , c[ u] ) { for ( e= ++ i; f> e; e++ ) if ( d. relative[ a[ e] . type] ) break ; return va ( i> 1 && sa ( m) , i> 1 && qa ( a. slice ( 0 , i- 1 ) . concat ( { value : " " === a[ i- 2 ] . type? "*" : "" } ) ) . replace ( Q , "$1" ) , c, e> i&& wa ( a. slice ( i, e) ) , f> e&& wa ( a= a. slice ( e) ) , f> e&& qa ( a) ) } m. push ( c) } return sa ( m) } function xa ( a, b ) { var c= b. length> 0 , e= a. length> 0 , f = function ( f, g, h, i, k ) { var l, o, q, r= 0 , s= "0" , t= f&& [ ] , u= [ ] , v= j, x= f|| e&& d. find. TAG ( "*" , k) , y= w+= null == v? 1 : Math. random ( ) || .1 , z= x. length; for ( k&& ( j= g=== n|| g|| k) ; s!== z&& null != ( l= x[ s] ) ; s++ ) { if ( e&& l) { o= 0 , g|| l. ownerDocument=== n|| ( m ( l) , h= ! p) ; while ( q= a[ o++ ] ) if ( q ( l, g|| n, h) ) { i. push ( l) ; break } k&& ( w= y) } c&& ( ( l= ! q&& l) && r-- , f&& t. push ( l) ) } if ( r+= s, c&& s!== r) { o= 0 ; while ( q= b[ o++ ] ) q ( t, u, g, h) ; if ( f) { if ( r> 0 ) while ( s-- ) t[ s] || u[ s] || ( u[ s] = F . call ( i) ) ; u= ua ( u) } H . apply ( i, u) , k&& ! f&& u. length> 0 && r+ b. length> 1 && fa. uniqueSort ( i) } return k&& ( w= y, j= v) , t} ; return c? ha ( f) : f} return h= fa. compile = function ( a, b ) { var c, d= [ ] , e= [ ] , f= A [ a+ " " ] ; if ( ! f) { b|| ( b= g ( a) ) , c= b. length; while ( c-- ) f= wa ( b[ c] ) , f[ u] ? d. push ( f) : e. push ( f) ; f= A ( a, xa ( e, d) ) , f. selector= a} return f} , i= fa. select = function ( a, b, e, f ) { var i, j, k, l, m, n= "function" == typeof a&& a, o= ! f&& g ( a= n. selector|| a) ; if ( e= e|| [ ] , 1 === o. length) { if ( j= o[ 0 ] = o[ 0 ] . slice ( 0 ) , j. length> 2 && "ID" === ( k= j[ 0 ] ) . type&& c. getById&& 9 === b. nodeType&& p&& d. relative[ j[ 1 ] . type] ) { if ( b= ( d. find. ID ( k. matches[ 0 ] . replace ( ba, ca) , b) || [ ] ) [ 0 ] , ! b) return e; n&& ( b= b. parentNode) , a= a. slice ( j. shift ( ) . value. length) } i= W . needsContext. test ( a) ? 0 : j. length; while ( i-- ) { if ( k= j[ i] , d. relative[ l= k. type] ) break ; if ( ( m= d. find[ l] ) && ( f= m ( k. matches[ 0 ] . replace ( ba, ca) , _. test ( j[ 0 ] . type) && oa ( b. parentNode) || b) ) ) { if ( j. splice ( i, 1 ) , a= f. length&& qa ( j) , ! a) return H . apply ( e, f) , e; break } } } return ( n|| h ( a, o) ) ( f, b, ! p, e, ! b|| _. test ( a) && oa ( b. parentNode) || b) , e} , c. sortStable= u. split ( "" ) . sort ( B ) . join ( "" ) === u, c. detectDuplicates= ! ! l, m ( ) , c. sortDetached= ia ( function ( a ) { return 1 & a. compareDocumentPosition ( n. createElement ( "div" ) ) } ) , ia ( function ( a ) { return a. innerHTML= " " , "#" === a. firstChild. getAttribute ( "href" ) } ) || ja ( "type|href|height|width" , function ( a, b, c ) { return c? void 0 : a. getAttribute ( b, "type" === b. toLowerCase ( ) ? 1 : 2 ) } ) , c. attributes&& ia ( function ( a ) { return a. innerHTML= " " , a. firstChild. setAttribute ( "value" , "" ) , "" === a. firstChild. getAttribute ( "value" ) } ) || ja ( "value" , function ( a, b, c ) { return c|| "input" !== a. nodeName. toLowerCase ( ) ? void 0 : a. defaultValue} ) , ia ( function ( a ) { return null == a. getAttribute ( "disabled" ) } ) || ja ( K , function ( a, b, c ) { var d; return c? void 0 : a[ b] === ! 0 ? b. toLowerCase ( ) : ( d= a. getAttributeNode ( b) ) && d. specified? d. value: null } ) , fa} ( a) ; n. find= t, n. expr= t. selectors, n. expr[ ":" ] = n. expr. pseudos, n. uniqueSort= n. unique= t. uniqueSort, n. text= t. getText, n. isXMLDoc= t. isXML, n. contains= t. contains; var u = function ( a, b, c ) { var d= [ ] , e= void 0 !== c; while ( ( a= a[ b] ) && 9 !== a. nodeType) if ( 1 === a. nodeType) { if ( e&& n ( a) . is ( c) ) break ; d. push ( a) } return d} , v = function ( a, b ) { for ( var c= [ ] ; a; a= a. nextSibling) 1 === a. nodeType&& a!== b&& c. push ( a) ; return c} , w= n. expr. match. needsContext, x= / ^<([\w-]+)\s*\/?>(?:<\/\1>|)$ / , y= / ^.[^:#\[\.,]*$ / ; function z ( a, b, c ) { if ( n. isFunction ( b) ) return n. grep ( a, function ( a, d ) { return ! ! b . call ( a, d, a) !== c} ) ; if ( b. nodeType) return n. grep ( a, function ( a ) { return a=== b!== c} ) ; if ( "string" == typeof b) { if ( y. test ( b) ) return n. filter ( b, a, c) ; b= n. filter ( b, a) } return n. grep ( a, function ( a ) { return n. inArray ( a, b) > - 1 !== c} ) } n. filter = function ( a, b, c ) { var d= b[ 0 ] ; return c&& ( a= ":not(" + a+ ")" ) , 1 === b. length&& 1 === d. nodeType? n. find. matchesSelector ( d, a) ? [ d] : [ ] : n. find. matches ( a, n. grep ( b, function ( a ) { return 1 === a. nodeType} ) ) } , n. fn. extend ( { find : function ( a ) { var b, c= [ ] , d= this , e= d. length; if ( "string" != typeof a) return this . pushStack ( n ( a) . filter ( function ( ) { for ( b= 0 ; e> b; b++ ) if ( n. contains ( d[ b] , this ) ) return ! 0 } ) ) ; for ( b= 0 ; e> b; b++ ) n. find ( a, d[ b] , c) ; return c= this . pushStack ( e> 1 ? n. unique ( c) : c) , c. selector= this . selector? this . selector+ " " + a: a, c} , filter : function ( a ) { return this . pushStack ( z ( this , a|| [ ] , ! 1 ) ) } , not : function ( a ) { return this . pushStack ( z ( this , a|| [ ] , ! 0 ) ) } , is : function ( a ) { return ! ! z ( this , "string" == typeof a&& w. test ( a) ? n ( a) : a|| [ ] , ! 1 ) . length} } ) ; var A , B = / ^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$ / , C = n. fn. init = function ( a, b, c ) { var e, f; if ( ! a) return this ; if ( c= c|| A , "string" == typeof a) { if ( e= "<" === a. charAt ( 0 ) && ">" === a. charAt ( a. length- 1 ) && a. length>= 3 ? [ null , a, null ] : B . exec ( a) , ! e|| ! e[ 1 ] && b) return ! b|| b. jquery? ( b|| c) . find ( a) : this . constructor ( b) . find ( a) ; if ( e[ 1 ] ) { if ( b= b instanceof n ? b[ 0 ] : b, n. merge ( this , n. parseHTML ( e[ 1 ] , b&& b. nodeType? b. ownerDocument|| b: d, ! 0 ) ) , x. test ( e[ 1 ] ) && n. isPlainObject ( b) ) for ( e in b) n. isFunction ( this [ e] ) ? this [ e] ( b[ e] ) : this . attr ( e, b[ e] ) ; return this } if ( f= d. getElementById ( e[ 2 ] ) , f&& f. parentNode) { if ( f. id!== e[ 2 ] ) return A . find ( a) ; this . length= 1 , this [ 0 ] = f} return this . context= d, this . selector= a, this } return a. nodeType? ( this . context= this [ 0 ] = a, this . length= 1 , this ) : n. isFunction ( a) ? "undefined" != typeof c. ready? c. ready ( a) : a ( n) : ( void 0 !== a. selector&& ( this . selector= a. selector, this . context= a. context) , n. makeArray ( a, this ) ) } ; C . prototype= n. fn, A = n ( d) ; var D = / ^(?:parents|prev(?:Until|All)) / , E = { children : ! 0 , contents : ! 0 , next : ! 0 , prev : ! 0 } ; n. fn. extend ( { has : function ( a ) { var b, c= n ( a, this ) , d= c. length; return this . filter ( function ( ) { for ( b= 0 ; d> b; b++ ) if ( n. contains ( this , c[ b] ) ) return ! 0 } ) } , closest : function ( a, b ) { for ( var c, d= 0 , e= this . length, f= [ ] , g= w. test ( a) || "string" != typeof a? n ( a, b|| this . context) : 0 ; e> d; d++ ) for ( c= this [ d] ; c&& c!== b; c= c. parentNode) if ( c. nodeType< 11 && ( g? g. index ( c) > - 1 : 1 === c. nodeType&& n. find. matchesSelector ( c, a) ) ) { f. push ( c) ; break } return this . pushStack ( f. length> 1 ? n. uniqueSort ( f) : f) } , index : function ( a ) { return a? "string" == typeof a? n. inArray ( this [ 0 ] , n ( a) ) : n. inArray ( a. jquery? a[ 0 ] : a, this ) : this [ 0 ] && this [ 0 ] . parentNode? this . first ( ) . prevAll ( ) . length: - 1 } , add : function ( a, b ) { return this . pushStack ( n. uniqueSort ( n. merge ( this . get ( ) , n ( a, b) ) ) ) } , addBack : function ( a ) { return this . add ( null == a? this . prevObject: this . prevObject. filter ( a) ) } } ) ; function F ( a, b ) { do a= a[ b] ; while ( a&& 1 !== a. nodeType) ; return a} n. each ( { parent : function ( a ) { var b= a. parentNode; return b&& 11 !== b. nodeType? b: null } , parents : function ( a ) { return u ( a, "parentNode" ) } , parentsUntil : function ( a, b, c ) { return u ( a, "parentNode" , c) } , next : function ( a ) { return F ( a, "nextSibling" ) } , prev : function ( a ) { return F ( a, "previousSibling" ) } , nextAll : function ( a ) { return u ( a, "nextSibling" ) } , prevAll : function ( a ) { return u ( a, "previousSibling" ) } , nextUntil : function ( a, b, c ) { return u ( a, "nextSibling" , c) } , prevUntil : function ( a, b, c ) { return u ( a, "previousSibling" , c) } , siblings : function ( a ) { return v ( ( a. parentNode|| { } ) . firstChild, a) } , children : function ( a ) { return v ( a. firstChild) } , contents : function ( a ) { return n. nodeName ( a, "iframe" ) ? a. contentDocument|| a. contentWindow. document: n. merge ( [ ] , a. childNodes) } } , function ( a, b ) { n. fn[ a] = function ( c, d ) { var e= n. map ( this , b, c) ; return "Until" !== a. slice ( - 5 ) && ( d= c) , d&& "string" == typeof d&& ( e= n. filter ( d, e) ) , this . length> 1 && ( E [ a] || ( e= n. uniqueSort ( e) ) , D . test ( a) && ( e= e. reverse ( ) ) ) , this . pushStack ( e) } } ) ; var G = / \S+ / g ; function H ( a ) { var b= { } ; return n. each ( a. match ( G ) || [ ] , function ( a, c ) { b[ c] = ! 0 } ) , b} n. Callbacks = function ( a ) { a= "string" == typeof a? H ( a) : n. extend ( { } , a) ; var b, c, d, e, f= [ ] , g= [ ] , h= - 1 , i = function ( ) { for ( e= a. once, d= b= ! 0 ; g. length; h= - 1 ) { c= g. shift ( ) ; while ( ++ h< f. length) f[ h] . apply ( c[ 0 ] , c[ 1 ] ) === ! 1 && a. stopOnFalse&& ( h= f. length, c= ! 1 ) } a. memory|| ( c= ! 1 ) , b= ! 1 , e&& ( f= c? [ ] : "" ) } , j= { add : function ( ) { return f&& ( c&& ! b&& ( h= f. length- 1 , g. push ( c) ) , function d ( b ) { n. each ( b, function ( b, c ) { n. isFunction ( c) ? a. unique&& j. has ( c) || f. push ( c) : c&& c. length&& "string" !== n. type ( c) && d ( c) } ) } ( arguments) , c&& ! b&& i ( ) ) , this } , remove : function ( ) { return n. each ( arguments, function ( a, b ) { var c; while ( ( c= n. inArray ( b, f, c) ) > - 1 ) f. splice ( c, 1 ) , h>= c&& h-- } ) , this } , has : function ( a ) { return a? n. inArray ( a, f) > - 1 : f. length> 0 } , empty : function ( ) { return f&& ( f= [ ] ) , this } , disable : function ( ) { return e= g= [ ] , f= c= "" , this } , disabled : function ( ) { return ! f} , lock : function ( ) { return e= ! 0 , c|| j. disable ( ) , this } , locked : function ( ) { return ! ! e} , fireWith : function ( a, c ) { return e|| ( c= c|| [ ] , c= [ a, c. slice? c. slice ( ) : c] , g. push ( c) , b|| i ( ) ) , this } , fire : function ( ) { return j. fireWith ( this , arguments) , this } , fired : function ( ) { return ! ! d} } ; return j} , n. extend ( { Deferred : function ( a ) { var b= [ [ "resolve" , "done" , n. Callbacks ( "once memory" ) , "resolved" ] , [ "reject" , "fail" , n. Callbacks ( "once memory" ) , "rejected" ] , [ "notify" , "progress" , n. Callbacks ( "memory" ) ] ] , c= "pending" , d= { state : function ( ) { return c} , always : function ( ) { return e. done ( arguments) . fail ( arguments) , this } , then : function ( ) { var a= arguments; return n. Deferred ( function ( c ) { n. each ( b, function ( b, f ) { var g= n. isFunction ( a[ b] ) && a[ b] ; e[ f[ 1 ] ] ( function ( ) { var a= g&& g . apply ( this , arguments) ; a&& n. isFunction ( a. promise) ? a. promise ( ) . progress ( c. notify) . done ( c. resolve) . fail ( c. reject) : c[ f[ 0 ] + "With" ] ( this === d? c. promise ( ) : this , g? [ a] : arguments) } ) } ) , a= null } ) . promise ( ) } , promise : function ( a ) { return null != a? n. extend ( a, d) : d} } , e= { } ; return d. pipe= d. then, n. each ( b, function ( a, f ) { var g= f[ 2 ] , h= f[ 3 ] ; d[ f[ 1 ] ] = g. add, h&& g. add ( function ( ) { c= h} , b[ 1 ^ a] [ 2 ] . disable, b[ 2 ] [ 2 ] . lock) , e[ f[ 0 ] ] = function ( ) { return e[ f[ 0 ] + "With" ] ( this === e? d: this , arguments) , this } , e[ f[ 0 ] + "With" ] = g. fireWith} ) , d. promise ( e) , a&& a . call ( e, e) , e} , when : function ( a ) { var b= 0 , c= e . call ( arguments) , d= c. length, f= 1 !== d|| a&& n. isFunction ( a. promise) ? d: 0 , g= 1 === f? a: n. Deferred ( ) , h = function ( a, b, c ) { return function ( d ) { b[ a] = this , c[ a] = arguments. length> 1 ? e . call ( arguments) : d, c=== i? g. notifyWith ( b, c) : -- f|| g. resolveWith ( b, c) } } , i, j, k; if ( d> 1 ) for ( i= new Array ( d) , j= new Array ( d) , k= new Array ( d) ; d> b; b++ ) c[ b] && n. isFunction ( c[ b] . promise) ? c[ b] . promise ( ) . progress ( h ( b, j, i) ) . done ( h ( b, k, c) ) . fail ( g. reject) : -- f; return f|| g. resolveWith ( k, c) , g. promise ( ) } } ) ; var I ; n. fn. ready = function ( a ) { return n. ready. promise ( ) . done ( a) , this } , n. extend ( { isReady : ! 1 , readyWait : 1 , holdReady : function ( a ) { a? n. readyWait++ : n. ready ( ! 0 ) } , ready : function ( a ) { ( a=== ! 0 ? -- n. readyWait: n. isReady) || ( n. isReady= ! 0 , a!== ! 0 && -- n. readyWait> 0 || ( I . resolveWith ( d, [ n] ) , n. fn. triggerHandler&& ( n ( d) . triggerHandler ( "ready" ) , n ( d) . off ( "ready" ) ) ) ) } } ) ; function J ( ) { d. addEventListener? ( d. removeEventListener ( "DOMContentLoaded" , K ) , a. removeEventListener ( "load" , K ) ) : ( d. detachEvent ( "onreadystatechange" , K ) , a. detachEvent ( "onload" , K ) ) } function K ( ) { ( d. addEventListener|| "load" === a. event. type|| "complete" === d. readyState) && ( J ( ) , n. ready ( ) ) } n. ready. promise = function ( b ) { if ( ! I ) if ( I = n. Deferred ( ) , "complete" === d. readyState|| "loading" !== d. readyState&& ! d. documentElement. doScroll) a. setTimeout ( n. ready) ; else if ( d. addEventListener) d. addEventListener ( "DOMContentLoaded" , K ) , a. addEventListener ( "load" , K ) ; else { d. attachEvent ( "onreadystatechange" , K ) , a. attachEvent ( "onload" , K ) ; var c= ! 1 ; try { c= null == a. frameElement&& d. documentElement} catch ( e) { } c&& c. doScroll&& ! function f ( ) { if ( ! n. isReady) { try { c. doScroll ( "left" ) } catch ( b) { return a. setTimeout ( f, 50 ) } J ( ) , n. ready ( ) } } ( ) } return I . promise ( b) } , n. ready. promise ( ) ; var L ; for ( L in n ( l) ) break ; l. ownFirst= "0" === L , l. inlineBlockNeedsLayout= ! 1 , n ( function ( ) { var a, b, c, e; c= d. getElementsByTagName ( "body" ) [ 0 ] , c&& c. style&& ( b= d. createElement ( "div" ) , e= d. createElement ( "div" ) , e. style. cssText= "position:absolute;border:0;width:0;height:0;top:0;left:-9999px" , c. appendChild ( e) . appendChild ( b) , "undefined" != typeof b. style. zoom&& ( b. style. cssText= "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1" , l. inlineBlockNeedsLayout= a= 3 === b. offsetWidth, a&& ( c. style. zoom= 1 ) ) , c. removeChild ( e) ) } ) , function ( ) { var a= d. createElement ( "div" ) ; l. deleteExpando= ! 0 ; try { delete a. test} catch ( b) { l. deleteExpando= ! 1 } a= null } ( ) ; var M = function ( a ) { var b= n. noData[ ( a. nodeName+ " " ) . toLowerCase ( ) ] , c= + a. nodeType|| 1 ; return 1 !== c&& 9 !== c? ! 1 : ! b|| b!== ! 0 && a. getAttribute ( "classid" ) === b} , N = / ^(?:\{[\w\W]*\}|\[[\w\W]*\])$ / , O = / ([A-Z]) / g ; function P ( a, b, c ) { if ( void 0 === c&& 1 === a. nodeType) { var d= "data-" + b. replace ( O , "-$1" ) . toLowerCase ( ) ; if ( c= a. getAttribute ( d) , "string" == typeof c) { try { c= "true" === c? ! 0 : "false" === c? ! 1 : "null" === c? null : + c+ "" === c? + c: N . test ( c) ? n. parseJSON ( c) : c} catch ( e) { } n. data ( a, b, c) } else c= void 0 ;
} return c} function Q ( a ) { var b; for ( b in a) if ( ( "data" !== b|| ! n. isEmptyObject ( a[ b] ) ) && "toJSON" !== b) return ! 1 ; return ! 0 } function R ( a, b, d, e ) { if ( M ( a) ) { var f, g, h= n. expando, i= a. nodeType, j= i? n. cache: a, k= i? a[ h] : a[ h] && h; if ( k&& j[ k] && ( e|| j[ k] . data) || void 0 !== d|| "string" != typeof b) return k|| ( k= i? a[ h] = c. pop ( ) || n. guid++ : h) , j[ k] || ( j[ k] = i? { } : { toJSON : n. noop} ) , "object" != typeof b&& "function" != typeof b|| ( e? j[ k] = n. extend ( j[ k] , b) : j[ k] . data= n. extend ( j[ k] . data, b) ) , g= j[ k] , e|| ( g. data|| ( g. data= { } ) , g= g. data) , void 0 !== d&& ( g[ n. camelCase ( b) ] = d) , "string" == typeof b? ( f= g[ b] , null == f&& ( f= g[ n. camelCase ( b) ] ) ) : f= g, f} } function S ( a, b, c ) { if ( M ( a) ) { var d, e, f= a. nodeType, g= f? n. cache: a, h= f? a[ n. expando] : n. expando; if ( g[ h] ) { if ( b&& ( d= c? g[ h] : g[ h] . data) ) { n. isArray ( b) ? b= b. concat ( n. map ( b, n. camelCase) ) : b in d? b= [ b] : ( b= n. camelCase ( b) , b= b in d? [ b] : b. split ( " " ) ) , e= b. length; while ( e-- ) delete d[ b[ e] ] ; if ( c? ! Q ( d) : ! n. isEmptyObject ( d) ) return } ( c|| ( delete g[ h] . data, Q ( g[ h] ) ) ) && ( f? n. cleanData ( [ a] , ! 0 ) : l. deleteExpando|| g!= g. window? delete g[ h] : g[ h] = void 0 ) } } } n. extend ( { cache : { } , noData : { "applet " : ! 0 , "embed " : ! 0 , "object " : "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" } , hasData : function ( a ) { return a= a. nodeType? n. cache[ a[ n. expando] ] : a[ n. expando] , ! ! a&& ! Q ( a) } , data : function ( a, b, c ) { return R ( a, b, c) } , removeData : function ( a, b ) { return S ( a, b) } , _data : function ( a, b, c ) { return R ( a, b, c, ! 0 ) } , _removeData : function ( a, b ) { return S ( a, b, ! 0 ) } } ) , n. fn. extend ( { data : function ( a, b ) { var c, d, e, f= this [ 0 ] , g= f&& f. attributes; if ( void 0 === a) { if ( this . length&& ( e= n. data ( f) , 1 === f. nodeType&& ! n. _data ( f, "parsedAttrs" ) ) ) { c= g. length; while ( c-- ) g[ c] && ( d= g[ c] . name, 0 === d. indexOf ( "data-" ) && ( d= n. camelCase ( d. slice ( 5 ) ) , P ( f, d, e[ d] ) ) ) ; n. _data ( f, "parsedAttrs" , ! 0 ) } return e} return "object" == typeof a? this . each ( function ( ) { n. data ( this , a) } ) : arguments. length> 1 ? this . each ( function ( ) { n. data ( this , a, b) } ) : f? P ( f, a, n. data ( f, a) ) : void 0 } , removeData : function ( a ) { return this . each ( function ( ) { n. removeData ( this , a) } ) } } ) , n. extend ( { queue : function ( a, b, c ) { var d; return a? ( b= ( b|| "fx" ) + "queue" , d= n. _data ( a, b) , c&& ( ! d|| n. isArray ( c) ? d= n. _data ( a, b, n. makeArray ( c) ) : d. push ( c) ) , d|| [ ] ) : void 0 } , dequeue : function ( a, b ) { b= b|| "fx" ; var c= n. queue ( a, b) , d= c. length, e= c. shift ( ) , f= n. _queueHooks ( a, b) , g = function ( ) { n. dequeue ( a, b) } ; "inprogress" === e&& ( e= c. shift ( ) , d-- ) , e&& ( "fx" === b&& c. unshift ( "inprogress" ) , delete f. stop, e . call ( a, g, f) ) , ! d&& f&& f. empty. fire ( ) } , _queueHooks : function ( a, b ) { var c= b+ "queueHooks" ; return n. _data ( a, c) || n. _data ( a, c, { empty : n. Callbacks ( "once memory" ) . add ( function ( ) { n. _removeData ( a, b+ "queue" ) , n. _removeData ( a, c) } ) } ) } } ) , n. fn. extend ( { queue : function ( a, b ) { var c= 2 ; return "string" != typeof a&& ( b= a, a= "fx" , c-- ) , arguments. length< c? n. queue ( this [ 0 ] , a) : void 0 === b? this : this . each ( function ( ) { var c= n. queue ( this , a, b) ; n. _queueHooks ( this , a) , "fx" === a&& "inprogress" !== c[ 0 ] && n. dequeue ( this , a) } ) } , dequeue : function ( a ) { return this . each ( function ( ) { n. dequeue ( this , a) } ) } , clearQueue : function ( a ) { return this . queue ( a|| "fx" , [ ] ) } , promise : function ( a, b ) { var c, d= 1 , e= n. Deferred ( ) , f= this , g= this . length, h = function ( ) { -- d|| e. resolveWith ( f, [ f] ) } ; "string" != typeof a&& ( b= a, a= void 0 ) , a= a|| "fx" ; while ( g-- ) c= n. _data ( f[ g] , a+ "queueHooks" ) , c&& c. empty&& ( d++ , c. empty. add ( h) ) ; return h ( ) , e. promise ( b) } } ) , function ( ) { var a; l. shrinkWrapBlocks = function ( ) { if ( null != a) return a; a= ! 1 ; var b, c, e; return c= d. getElementsByTagName ( "body" ) [ 0 ] , c&& c. style? ( b= d. createElement ( "div" ) , e= d. createElement ( "div" ) , e. style. cssText= "position:absolute;border:0;width:0;height:0;top:0;left:-9999px" , c. appendChild ( e) . appendChild ( b) , "undefined" != typeof b. style. zoom&& ( b. style. cssText= "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1" , b. appendChild ( d. createElement ( "div" ) ) . style. width= "5px" , a= 3 !== b. offsetWidth) , c. removeChild ( e) , a) : void 0 } } ( ) ; var T = / [+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|) / . source, U = new RegExp ( "^(?:([+-])=|)(" + T + ")([a-z%]*)$" , "i" ) , V = [ "Top" , "Right" , "Bottom" , "Left" ] , W = function ( a, b ) { return a= b|| a, "none" === n. css ( a, "display" ) || ! n. contains ( a. ownerDocument, a) } ; function X ( a, b, c, d ) { var e, f= 1 , g= 20 , h= d? function ( ) { return d. cur ( ) } : function ( ) { return n. css ( a, b, "" ) } , i= h ( ) , j= c&& c[ 3 ] || ( n. cssNumber[ b] ? "" : "px" ) , k= ( n. cssNumber[ b] || "px" !== j&& + i) && U . exec ( n. css ( a, b) ) ; if ( k&& k[ 3 ] !== j) { j= j|| k[ 3 ] , c= c|| [ ] , k= + i|| 1 ; do f= f|| ".5" , k/= f, n. style ( a, b, k+ j) ; while ( f!== ( f= h ( ) / i) && 1 !== f&& -- g) } return c&& ( k= + k|| + i|| 0 , e= c[ 1 ] ? k+ ( c[ 1 ] + 1 ) * c[ 2 ] : + c[ 2 ] , d&& ( d. unit= j, d. start= k, d. end= e) ) , e} var Y = function ( a, b, c, d, e, f, g ) { var h= 0 , i= a. length, j= null == c; if ( "object" === n. type ( c) ) { e= ! 0 ; for ( h in c) Y ( a, b, h, c[ h] , ! 0 , f, g) } else if ( void 0 !== d&& ( e= ! 0 , n. isFunction ( d) || ( g= ! 0 ) , j&& ( g? ( b . call ( a, d) , b= null ) : ( j= b, b = function ( a, b, c ) { return j . call ( n ( a) , c) } ) ) , b) ) for ( ; i> h; h++ ) b ( a[ h] , c, g? d: d . call ( a[ h] , h, b ( a[ h] , c) ) ) ; return e? a: j? b . call ( a) : i? b ( a[ 0 ] , c) : f} , Z = / ^(?:checkbox|radio)$ / i , $= / <([\w:-]+) / , _= / ^$|\/(?:java|ecma)script / i , aa= / ^\s+ / , ba= "abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video" ; function ca ( a ) { var b= ba. split ( "|" ) , c= a. createDocumentFragment ( ) ; if ( c. createElement) while ( b. length) c. createElement ( b. pop ( ) ) ; return c} ! function ( ) { var a= d. createElement ( "div" ) , b= d. createDocumentFragment ( ) , c= d. createElement ( "input" ) ; a. innerHTML= " a " , l. leadingWhitespace= 3 === a. firstChild. nodeType, l. tbody= ! a. getElementsByTagName ( "tbody" ) . length, l. htmlSerialize= ! ! a. getElementsByTagName ( "link" ) . length, l. html5Clone= "<:nav>" !== d. createElement ( "nav" ) . cloneNode ( ! 0 ) . outerHTML, c. type= "checkbox" , c. checked= ! 0 , b. appendChild ( c) , l. appendChecked= c. checked, a. innerHTML= "" , l. noCloneChecked= ! ! a. cloneNode ( ! 0 ) . lastChild. defaultValue, b. appendChild ( a) , c= d. createElement ( "input" ) , c. setAttribute ( "type" , "radio" ) , c. setAttribute ( "checked" , "checked" ) , c. setAttribute ( "name" , "t" ) , a. appendChild ( c) , l. checkClone= a. cloneNode ( ! 0 ) . cloneNode ( ! 0 ) . lastChild. checked, l. noCloneEvent= ! ! a. addEventListener, a[ n. expando] = 1 , l. attributes= ! a. getAttribute ( n. expando) } ( ) ; var da= { option : [ 1 , "" , "" ] , legend : [ 1 , "" , "" ] , area : [ 1 , "" , "" ] , param : [ 1 , "" , "" ] , thead : [ 1 , "" ] , tr : [ 2 , "" ] , col : [ 2 , "" ] , td : [ 3 , "" ] , _default : l. htmlSerialize? [ 0 , "" , "" ] : [ 1 , "X", "
" ] } ; da. optgroup= da. option, da. tbody= da. tfoot= da. colgroup= da. caption= da. thead, da. th= da. td; function ea ( a, b ) { var c, d, e= 0 , f= "undefined" != typeof a. getElementsByTagName? a. getElementsByTagName ( b|| "*" ) : "undefined" != typeof a. querySelectorAll? a. querySelectorAll ( b|| "*" ) : void 0 ; if ( ! f) for ( f= [ ] , c= a. childNodes|| a; null != ( d= c[ e] ) ; e++ ) ! b|| n. nodeName ( d, b) ? f. push ( d) : n. merge ( f, ea ( d, b) ) ; return void 0 === b|| b&& n. nodeName ( a, b) ? n. merge ( [ a] , f) : f} function fa ( a, b ) { for ( var c, d= 0 ; null != ( c= a[ d] ) ; d++ ) n. _data ( c, "globalEval" , ! b|| n. _data ( b[ d] , "globalEval" ) ) } var ga= / <|?\w+; / , ha= / / i ; function ia ( a ) { Z . test ( a. type) && ( a. defaultChecked= a. checked) } function ja ( a, b, c, d, e ) { for ( var f, g, h, i, j, k, m, o= a. length, p= ca ( b) , q= [ ] , r= 0 ; o> r; r++ ) if ( g= a[ r] , g|| 0 === g) if ( "object" === n. type ( g) ) n. merge ( q, g. nodeType? [ g] : g) ; else if ( ga. test ( g) ) { i= i|| p. appendChild ( b. createElement ( "div" ) ) , j= ( $. exec ( g) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) , m= da[ j] || da. _default, i. innerHTML= m[ 1 ] + n. htmlPrefilter ( g) + m[ 2 ] , f= m[ 0 ] ; while ( f-- ) i= i. lastChild; if ( ! l. leadingWhitespace&& aa. test ( g) && q. push ( b. createTextNode ( aa. exec ( g) [ 0 ] ) ) , ! l. tbody) { g= "table" !== j|| ha. test ( g) ? ""!== m[ 1 ] || ha. test ( g) ? 0 : i: i. firstChild, f= g&& g. childNodes. length; while ( f-- ) n. nodeName ( k= g. childNodes[ f] , "tbody" ) && ! k. childNodes. length&& g. removeChild ( k) } n. merge ( q, i. childNodes) , i. textContent= "" ; while ( i. firstChild) i. removeChild ( i. firstChild) ; i= p. lastChild} else q. push ( b. createTextNode ( g) ) ; i&& p. removeChild ( i) , l. appendChecked|| n. grep ( ea ( q, "input" ) , ia) , r= 0 ; while ( g= q[ r++ ] ) if ( d&& n. inArray ( g, d) > - 1 ) e&& e. push ( g) ; else if ( h= n. contains ( g. ownerDocument, g) , i= ea ( p. appendChild ( g) , "script" ) , h&& fa ( i) , c) { f= 0 ; while ( g= i[ f++ ] ) _. test ( g. type|| "" ) && c. push ( g) } return i= null , p} ! function ( ) { var b, c, e= d. createElement ( "div" ) ; for ( b in { submit : ! 0 , change : ! 0 , focusin : ! 0 } ) c= "on" + b, ( l[ b] = c in a) || ( e. setAttribute ( c, "t" ) , l[ b] = e. attributes[ c] . expando=== ! 1 ) ; e= null } ( ) ; var ka= / ^(?:input|select|textarea)$ / i , la= / ^key / , ma= / ^(?:mouse|pointer|contextmenu|drag|drop)|click / , na= / ^(?:focusinfocus|focusoutblur)$ / , oa= / ^([^.]*)(?:\.(.+)|) / ; function pa ( ) { return ! 0 } function qa ( ) { return ! 1 } function ra ( ) { try { return d. activeElement} catch ( a) { } } function sa ( a, b, c, d, e, f ) { var g, h; if ( "object" == typeof b) { "string" != typeof c&& ( d= d|| c, c= void 0 ) ; for ( h in b) sa ( a, h, c, d, b[ h] , f) ; return a} if ( null == d&& null == e? ( e= c, d= c= void 0 ) : null == e&& ( "string" == typeof c? ( e= d, d= void 0 ) : ( e= d, d= c, c= void 0 ) ) , e=== ! 1 ) e= qa; else if ( ! e) return a; return 1 === f&& ( g= e, e = function ( a ) { return n ( ) . off ( a) , g . apply ( this , arguments) } , e. guid= g. guid|| ( g. guid= n. guid++ ) ) , a. each ( function ( ) { n. event. add ( this , b, e, d, c) } ) } n. event= { global : { } , add : function ( a, b, c, d, e ) { var f, g, h, i, j, k, l, m, o, p, q, r= n. _data ( a) ; if ( r) { c. handler&& ( i= c, c= i. handler, e= i. selector) , c. guid|| ( c. guid= n. guid++ ) , ( g= r. events) || ( g= r. events= { } ) , ( k= r. handle) || ( k= r. handle = function ( a ) { return "undefined" == typeof n|| a&& n. event. triggered=== a. type? void 0 : n. event. dispatch . apply ( k. elem, arguments) } , k. elem= a) , b= ( b|| "" ) . match ( G ) || [ "" ] , h= b. length; while ( h-- ) f= oa. exec ( b[ h] ) || [ ] , o= q= f[ 1 ] , p= ( f[ 2 ] || "" ) . split ( "." ) . sort ( ) , o&& ( j= n. event. special[ o] || { } , o= ( e? j. delegateType: j. bindType) || o, j= n. event. special[ o] || { } , l= n. extend ( { type : o, origType : q, data : d, handler : c, guid : c. guid, selector : e, needsContext : e&& n. expr. match. needsContext. test ( e) , namespace : p. join ( "." ) } , i) , ( m= g[ o] ) || ( m= g[ o] = [ ] , m. delegateCount= 0 , j. setup&& j. setup . call ( a, d, p, k) !== ! 1 || ( a. addEventListener? a. addEventListener ( o, k, ! 1 ) : a. attachEvent&& a. attachEvent ( "on" + o, k) ) ) , j. add&& ( j. add . call ( a, l) , l. handler. guid|| ( l. handler. guid= c. guid) ) , e? m. splice ( m. delegateCount++ , 0 , l) : m. push ( l) , n. event. global[ o] = ! 0 ) ; a= null } } , remove : function ( a, b, c, d, e ) { var f, g, h, i, j, k, l, m, o, p, q, r= n. hasData ( a) && n. _data ( a) ; if ( r&& ( k= r. events) ) { b= ( b|| "" ) . match ( G ) || [ "" ] , j= b. length; while ( j-- ) if ( h= oa. exec ( b[ j] ) || [ ] , o= q= h[ 1 ] , p= ( h[ 2 ] || "" ) . split ( "." ) . sort ( ) , o) { l= n. event. special[ o] || { } , o= ( d? l. delegateType: l. bindType) || o, m= k[ o] || [ ] , h= h[ 2 ] && new RegExp ( "(^|\\.)" + p. join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , i= f= m. length; while ( f-- ) g= m[ f] , ! e&& q!== g. origType|| c&& c. guid!== g. guid|| h&& ! h. test ( g. namespace) || d&& d!== g. selector&& ( "**" !== d|| ! g. selector) || ( m. splice ( f, 1 ) , g. selector&& m. delegateCount-- , l. remove&& l. remove . call ( a, g) ) ; i&& ! m. length&& ( l. teardown&& l. teardown . call ( a, p, r. handle) !== ! 1 || n. removeEvent ( a, o, r. handle) , delete k[ o] ) } else for ( o in k) n. event. remove ( a, o+ b[ j] , c, d, ! 0 ) ; n. isEmptyObject ( k) && ( delete r. handle, n. _removeData ( a, "events" ) ) } } , trigger : function ( b, c, e, f ) { var g, h, i, j, l, m, o, p= [ e|| d] , q= k . call ( b, "type" ) ? b. type: b, r= k . call ( b, "namespace" ) ? b. namespace. split ( "." ) : [ ] ; if ( i= m= e= e|| d, 3 !== e. nodeType&& 8 !== e. nodeType&& ! na. test ( q+ n. event. triggered) && ( q. indexOf ( "." ) > - 1 && ( r= q. split ( "." ) , q= r. shift ( ) , r. sort ( ) ) , h= q. indexOf ( ":" ) < 0 && "on" + q, b= b[ n. expando] ? b: new n. Event ( q, "object" == typeof b&& b) , b. isTrigger= f? 2 : 3 , b. namespace= r. join ( "." ) , b. rnamespace= b. namespace? new RegExp ( "(^|\\.)" + r. join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , b. result= void 0 , b. target|| ( b. target= e) , c= null == c? [ b] : n. makeArray ( c, [ b] ) , l= n. event. special[ q] || { } , f|| ! l. trigger|| l. trigger . apply ( e, c) !== ! 1 ) ) { if ( ! f&& ! l. noBubble&& ! n. isWindow ( e) ) { for ( j= l. delegateType|| q, na. test ( j+ q) || ( i= i. parentNode) ; i; i= i. parentNode) p. push ( i) , m= i; m=== ( e. ownerDocument|| d) && p. push ( m. defaultView|| m. parentWindow|| a) } o= 0 ; while ( ( i= p[ o++ ] ) && ! b. isPropagationStopped ( ) ) b. type= o> 1 ? j: l. bindType|| q, g= ( n. _data ( i, "events" ) || { } ) [ b. type] && n. _data ( i, "handle" ) , g&& g . apply ( i, c) , g= h&& i[ h] , g&& g. apply&& M ( i) && ( b. result= g . apply ( i, c) , b. result=== ! 1 && b. preventDefault ( ) ) ; if ( b. type= q, ! f&& ! b. isDefaultPrevented ( ) && ( ! l. _default|| l. _default . apply ( p. pop ( ) , c) === ! 1 ) && M ( e) && h&& e[ q] && ! n. isWindow ( e) ) { m= e[ h] , m&& ( e[ h] = null ) , n. event. triggered= q; try { e[ q] ( ) } catch ( s) { } n. event. triggered= void 0 , m&& ( e[ h] = m) } return b. result} } , dispatch : function ( a ) { a= n. event. fix ( a) ; var b, c, d, f, g, h= [ ] , i= e . call ( arguments) , j= ( n. _data ( this , "events" ) || { } ) [ a. type] || [ ] , k= n. event. special[ a. type] || { } ; if ( i[ 0 ] = a, a. delegateTarget= this , ! k. preDispatch|| k. preDispatch . call ( this , a) !== ! 1 ) { h= n. event. handlers . call ( this , a, j) , b= 0 ; while ( ( f= h[ b++ ] ) && ! a. isPropagationStopped ( ) ) { a. currentTarget= f. elem, c= 0 ; while ( ( g= f. handlers[ c++ ] ) && ! a. isImmediatePropagationStopped ( ) ) a. rnamespace&& ! a. rnamespace. test ( g. namespace) || ( a. handleObj= g, a. data= g. data, d= ( ( n. event. special[ g. origType] || { } ) . handle|| g. handler) . apply ( f. elem, i) , void 0 !== d&& ( a. result= d) === ! 1 && ( a. preventDefault ( ) , a. stopPropagation ( ) ) ) } return k. postDispatch&& k. postDispatch . call ( this , a) , a. result} } , handlers : function ( a, b ) { var c, d, e, f, g= [ ] , h= b. delegateCount, i= a. target; if ( h&& i. nodeType&& ( "click" !== a. type|| isNaN ( a. button) || a. button< 1 ) ) for ( ; i!= this ; i= i. parentNode|| this ) if ( 1 === i. nodeType&& ( i. disabled!== ! 0 || "click" !== a. type) ) { for ( d= [ ] , c= 0 ; h> c; c++ ) f= b[ c] , e= f. selector+ " " , void 0 === d[ e] && ( d[ e] = f. needsContext? n ( e, this ) . index ( i) > - 1 : n. find ( e, this , null , [ i] ) . length) , d[ e] && d. push ( f) ; d. length&& g. push ( { elem : i, handlers : d} ) } return h< b. length&& g. push ( { elem : this , handlers : b. slice ( h) } ) , g} , fix : function ( a ) { if ( a[ n. expando] ) return a; var b, c, e, f= a. type, g= a, h= this . fixHooks[ f] ; h|| ( this . fixHooks[ f] = h= ma. test ( f) ? this . mouseHooks: la. test ( f) ? this . keyHooks: { } ) , e= h. props? this . props. concat ( h. props) : this . props, a= new n. Event ( g) , b= e. length; while ( b-- ) c= e[ b] , a[ c] = g[ c] ; return a. target|| ( a. target= g. srcElement|| d) , 3 === a. target. nodeType&& ( a. target= a. target. parentNode) , a. metaKey= ! ! a. metaKey, h. filter? h. filter ( a, g) : a} , props : "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which" . split ( " " ) , fixHooks : { } , keyHooks : { props : "char charCode key keyCode" . split ( " " ) , filter : function ( a, b ) { return null == a. which&& ( a. which= null != b. charCode? b. charCode: b. keyCode) , a} } , mouseHooks : { props : "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement" . split ( " " ) , filter : function ( a, b ) { var c, e, f, g= b. button, h= b. fromElement; return null == a. pageX&& null != b. clientX&& ( e= a. target. ownerDocument|| d, f= e. documentElement, c= e. body, a. pageX= b. clientX+ ( f&& f. scrollLeft|| c&& c. scrollLeft|| 0 ) - ( f&& f. clientLeft|| c&& c. clientLeft|| 0 ) , a. pageY= b. clientY+ ( f&& f. scrollTop|| c&& c. scrollTop|| 0 ) - ( f&& f. clientTop|| c&& c. clientTop|| 0 ) ) , ! a. relatedTarget&& h&& ( a. relatedTarget= h=== a. target? b. toElement: h) , a. which|| void 0 === g|| ( a. which= 1 & g? 1 : 2 & g? 3 : 4 & g? 2 : 0 ) , a} } , special : { load : { noBubble : ! 0 } , focus : { trigger : function ( ) { if ( this !== ra ( ) && this . focus) try { return this . focus ( ) , ! 1 } catch ( a) { } } , delegateType : "focusin" }
注意:
由于博客字数限制,本篇文章只展示了部分代码。本项目的完整代码及素材包关注+私信我获取
你可能感兴趣的:(web前端项目-源码自取,前端,游戏,javascript,html)
美易官方:盘前道指期货涨0.5%,游戏驿站跌逾15%
美股投资
财经 人工智能 大数据 新浪微博 微信 微信公众平台 百度 金融
在股市开盘前的交易时段,道指期货上涨了0.5%,而游戏驿站(GameStop)的股价却出现了大幅下跌,跌幅超过15%。这一市场动态引发了投资者的广泛关注,也反映了当前股市的复杂性和不确定性。美股股指期货周三盘前走强,交易员为季度末的再平衡做准备。本周因假期而缩短,美国将公布关键通胀数据。道指期货涨0.5%,标普500指数期货涨0.6%,纳指期货涨0.5%。德国DAX指数涨0.4%,英国富时100指
浪潮 M5系列服务器IPMI无法监控存储RAID卡问题.
Songxwn
硬件服务器 服务器 运维
简介浪潮的M5代服务器,可能有WebBMC无法查看存储RAID/SAS卡状态的情况,可以通过以下方式修改。修改完成后重启BMC即可生效。ESXiIPMITools使用:https://songxwn.com/ESXi8_IPMI/(Linux也可以直接使用)Linux/ESXiIPMITool下载:https://songxwn.com/file/ipmitoolWindows下载:https:/
下载Android源码
赛非斯
repoinit-uhttps://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest-bandroid-10.0.0_r411.首先下载repo:a)终端运行gitclonegit://codeaurora.org/tools/repo.gitb)mkdir~/binc)拷贝repo到~/bin下面,修改repo权限,chmoda+x~
uni-app实现 步骤条
夏夏的码农
uni-app
实现如图样式html部分代码如下投资期限与收益0?'active':'default'">募集开始1?'active':'default'">募集结束2?'active':'default'">产品成立3?'active':'default'">产品到期0?'active-step1':'step1'">1?'active-st
中原焦点团队38期王芳芳坚持分享第236天,20230630总约练134次,来访113次,咨8次,观察员13次
芳芳王
学习焦点的初心是想拯救孩子,孩子由于沉迷游戏,成绩下滑,在学习的过程中发现是自己的教育方式出了状况。经过半年的学习,一些焦点的基本技巧,如接纳、欣赏、倾听、同理心、尊重等都有了一定的了解。但在实际应用时仍然存在很多问题,感觉自己仍然没有放下对孩子成绩的期望,仍然把握不住对孩子管理的度。我该如何去陪伴好孩子?多用心去听课,并加强反思,多约练。去思考如何让自己快乐起来?
请简单介绍一下Shiro框架是什么?Shiro在Java安全领域的主要作用是什么?Shiro主要提供了哪些安全功能?
AaronWang94
shiro java java 安全 开发语言
请简单介绍一下Shiro框架是什么?Shiro框架是一个强大且灵活的开源安全框架,为Java应用程序提供了全面的安全解决方案。它主要用于身份验证、授权、加密和会话管理等功能,可以轻松地集成到任何JavaWeb应用程序中,并提供了易于理解和使用的API,使开发人员能够快速实现安全特性。Shiro的核心组件包括Subject、SecurityManager和Realms。Subject代表了当前与应用
大前端-postcss安装使用指南
黑夜照亮前行的路
postcss
PostCSS是一款强大的CSS处理工具,可以用来自动添加浏览器前缀、代码合并、代码压缩等,提升代码的可读性,并支持使用最新的CSS语法。以下是一份简化的PostCSS安装使用指南:一、安装PostCSS在你的项目目录中,通过npm(NodePackageManager)来安装PostCSS。打开命令行窗口,输入以下命令:bash复制代码npminstallpostcss--save-dev这将把
谷歌浏览器驱动Chromedriver(114-120版本)文件以及驱动下载教程
pigerr杨
Python python chrome drivers
ChromeDriver官方网站GitHub||GoogleChromeLabs/chrome-for-testingChromeDriver113-125_JSONChromeforTestingavailability123-125zip白月黑羽Python基础|进阶|Qt图形界面|Django|自动化测试|性能测试|JS语言|JS前端|原理与安装
虚拟 DOM 的优缺点有哪些
咕噜签名分发
前端 javascript 开发语言
虚拟DOM(VirtualDOM)技术作为现代前端开发中的重要组成部分,已经成为了众多流行前端框架的核心特性。它的引入为前端开发带来了诸多优势,同时也需要我们认真思考其潜在的考量。下面简单的介绍一下虚拟DOM技术的优势与缺点,深入探讨其在实际应用中的影响。提升性能虚拟DOM的最大优势之一是提升页面性能。通过比较前后两次虚拟DOM树的差异,最小化实际DOM操作,从而减少页面重渲染时的性能消耗。这种优
3、JavaWeb-Ajax/Axios-前端工程化-Element
所谓远行Misnearch
# JavaWeb 前端 ajax elementui java 前端框架
P34Ajax介绍Ajax:AsynchroousJavaScriptAndXML,异步的JS和XMLJS网页动作,XML一种标记语言,存储数据,作用:数据交换:通过Ajax给服务器发送请求,并获取服务器响应的数据异步交互:在不重新加载整个页面的情况下,与服务器交换数据并实现更新部分网页的技术,例如:搜索联想、用户名是否可用的校验等等。同步与异步:同步:服务器在处理中客户端要处于等待状态,输入域名
docker怎么端口映射
Lance_mu
docker 容器 运维
1、默认固定的端口#Web服务器:WebApache或Nginx通常使用80端口HTTP:80HTTPS:443#数据库服务器MySQL:3306PostgreSQL:5432MongoDB:27017Redis:6379#邮件服务器SMTP:25POP3:110IMAP:143#其他服务SSH:22FTP:21DNS(域名解析):53代理服务器Squid:3128版本控制系统Git:9418(S
倒贴服传奇在什么平台下载 2024最火的倒贴服传奇平台排行榜
诸葛村夫一游戏频道
2024游戏盒子网站排行榜大全随着数位科技的发展,2024年手游市场持续火爆,各种新开手游持续涌现。本文为广大手游爱好者带来巅峰推荐,总结五个最具实力的手游新服发布网站,为您提供最全面的游戏资讯以及专业的游戏攻略。▶2024最火的倒贴服传奇平台排行榜TOP1:游戏豹官网特点:内部特权游戏类型:多类型推荐日活跃人数:15万网址链接:www.ystt88.cn游戏介绍:游戏豹官网以快速获取新开手游的特
网络安全(黑客)——自学2024
小言同学喜欢挖漏洞
web安全 安全 网络 学习 网络安全 信息安全 渗透测试
01什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也有Web防御技术(WAF)。作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。02怎样规划网络安全如果你是一
黑客(网络安全)技术自学30天
一个迷人的黑客
web安全 安全 网络 笔记 网络安全 信息安全 渗透测试
01什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也有Web防御技术(WAF)。作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。02怎样规划网络安全如果你是一
剧本杀【幕后玩家】复盘解析+凶手是谁+剧透结局+测评+怎么玩?
VX搜_彤彤速递
每天持续更新复盘有15000+:线下剧本杀·百变大侦探·我是谜·谁是凶手·玩吧·剧本杀线上·戏精大侦探·魔王杀·儿童剧本杀...所有谜题在等着你去揭开。为了你获得更好的游戏体验,本文仅显示《幕后玩家》剧本杀部分真相复盘,获取完整真相复盘只需两步①【微信关注公众号:云云复盘】②回复【幕后玩家】即可查看获取哦贾友仁利用自己保险公司的职务,在杨光审车时,隐瞒了车子存在刹车不灵的问题。想让杜若出车祸死亡,
python转码
Desamond
python 开发语言
转码在许多场景中都有应用,以下是一些常见的场景:网页开发:当用户在网页上输入文本时,可能需要将特殊字符(如空格、引号、特殊符号等)进行转码,以防止这些字符对URL或HTML代码产生干扰。文件名处理:在处理文件名时,可能需要将特殊字符进行转码,以避免文件名被错误地解析或显示。数据传输:在数据传输过程中,为了确保数据的完整性和正确性,可能需要将数据中的特殊字符进行转码。数据存储:在数据库或数据存储中,
webpack.prod.js(webpack生产环境配置文件)
门板_
webpack javascript 前端
生产环境:只打包不运行本地服务器对于在config目录下的webpack.prod.js1.在根目录下运行npxwebpack--config./config/webpack.prod.js2.在package.json文件中配置"build":"npxwebpack--config./config/webpack.prod.js"constpath=require('path')constESL
Python dict字符串转json对象,小数精度丢失问题
朝如青丝 暮成雪
json python
一前言JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,dict是Python的一种数据格式。本篇介绍一个float数据转换时精度丢失的案例。二问题描述importjsontest_str1='{"π":3.1415926535897932384626433832795028841971}'test_str2='{"value":10.00000}'print
VUE 页面禁止缩放(华为平板浏览器可能失效)
唐屁屁儿
JS vue webview javascript
h5页面移动端禁止缩放、web页面禁止浏览器缩放移动端优先,可禁止用户缩放和双击放大;在App.vue中的script内的方法里加入以下代码:window.onload=function(){document.addEventListener('touchstart',function(event){if(event.touches.length>1){event.preventDefault()
java实体中返回前端的double类型四舍五入(格式化)
婲落ヽ紅顏誶
java
根据业务,需要通过后端给前端返回部分double类型的数值,一般需要保留两位小数,使用jackson转换对象packagecom.ruoyi.common.core.config;importcom.fasterxml.jackson.core.JsonGenerator;importcom.fasterxml.jackson.databind.JsonSerializer;importcom.f
Django forms组件
在飞行-米龙
Django django python 后端
【一】引入【1】实现登陆验证功能(1)需求分析登陆验证需要前后端交互,采用form表单提交数据对数据进行校验用户名必须以英文大写字母开头密码必须大于三位数反馈给用户错误的信息除了反馈错误的信息还有保留原始输入内容(2)后端代码使用user_info_dict字典每次刷新存储存储前端发送的信息存储后端进行验证的信息defhome(request):#每次后刷新这个信息字典user_info_dict
C语言演示多线程编程条件下自旋锁和屏障的使用
嫦娥妹妹等等我
开发语言 c语言 开源
主线故事:有4个人玩游戏输了,惩罚:1分别使用4台不同的ATM机给我存钱2必须一块一块的存3存完还得在ATM上看一下我的余额设计模式:1每个人使用一条单独的线程,再准备一个计时线程用来输出时间2存钱涉及到对共享资源的读写,是原子操作需要用锁保护这里使用自旋锁3都存完钱后需要等待在各自的ATM上回显余额这里使用屏障技术4如果在主线程中回显对应他们给我打电话告诉我存完了我自己看一下则不需要使用屏障因为
UNDERSTANDING HTML WITH LARGE LANGUAGE MODELS
liferecords
LLM 语言模型 人工智能 自然语言处理
UNDERSTANDINGHTMLWITHLARGELANGUAGEMODELS相关链接:arXiv关键字:大型语言模型、HTML理解、Web自动化、自然语言处理、机器学习摘要大型语言模型(LLMs)在各种自然语言任务上表现出色。然而,它们在HTML理解方面的能力——即解析网页的原始HTML,对于自动化基于Web的任务、爬取和浏览器辅助检索等应用——尚未被充分探索。我们为HTML理解模型(经过微调
自学黑客(网络安全)技术——2024最新
九九归二
web安全 安全 学习 笔记 网络 网络安全 信息安全
01什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也有Web防御技术(WAF)。作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。02怎样规划网络安全如果你是一
西安 专业nft开发NFT寄售-NFT抢购-NFT盲盒-NFT空投
电报dapp119
区块链软件开发 区块链
在数字化时代的今天,非同质化代币(NFT)正成为数字资产领域的新宠。作为区块链技术的一种应用,NFT赋予数字资产独一无二的身份和价值,从而在艺术、游戏、音乐、收藏品等领域掀起了一股热潮。西安,这座千年古城,也融入了这股数字化潮流,拥有专业的NFT开发公司,为个人和企业提供多种NFT相关服务,其中包括NFT寄售、NFT抢购、NFT盲盒和NFT空投。NFT寄售NFT寄售是一种常见的NFT交易方式,通过
Webpack构建优化——区分环境
oWSQo
为什么需要区分环境在开发网页的时候,一般都会有多套运行环境,例如:在开发过程中方便开发调试的环境。发布到线上给用户使用的运行环境。这两套不同的环境虽然都是由同一套源代码编译而来,但是代码内容却不一样,差异包括:线上代码被特殊压缩过。开发用的代码包含一些用于提示开发者的提示日志,这些日志普通用户不可能去看它。开发用的代码所连接的后端数据接口地址也可能和线上环境不同,因为要避免开发过程中造成对线上数据
Java回溯知识点(含面试大厂题和源码)
一成码农
java 面试 开发语言
回溯算法是一种通过遍历所有可能的候选解来寻找所有解的算法,如果候选解被确认不是一个解(或至少不是最后一个解),回溯算法会通过在上一步进行一些变化来丢弃这个解,即“回溯”并尝试另一个候选解。回溯法通常用递归方法来实现,在解决排列、组合、选择问题时非常有效。回溯算法的核心要点:路径:也就是已经做出的选择。选择列表:也就是你当前可以做的选择。结束条件:也就是到达决策树底层,无法再做出选择的条件。回溯算法
《红太阳幼儿园》剧本杀复盘/凶手/剧透/真相/答案/攻略
VX搜_小燕子复盘
为了你获得更好的游戏体验,本文仅显示《红太阳幼儿园》剧本杀部分真相复盘,获取完整真相复盘只需两步①【微信关注公众号:集美复盘】②回复【红太阳幼儿园】即可查看获取哦﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎﹎1、剧本杀《红太阳幼儿园》角色介绍【宋晓晓】女,28岁,上市公司的董事长,独立果敢,执着认真,有着新时代女性独有的风采。【林缘】女,27岁,温柔秀气的女孩,十
找好定位,坚持下去
LZ冷颜
最近在看有关写作方面的书籍时看到,一个优秀的创造者,是写自己很熟悉的东西。我是一个00后,你要问我什么我最熟悉,我肯定说游戏,没错游戏基本伴随了我们00后一代。网上前段时间有人不是说禁止游戏吗?网上那些网友不是讨论十分激烈吗?在我看来游戏也是以后的大方向,你们有没有想过未来的游戏可以用于医疗,帮助那些不会走路的走路等等。一个东西不能急于给他评论,慢慢观察,就比如QQ和支付宝,当年有谁看好他们,现在
Web前端Html的表单
任家伟
前端 html
表单的关键字:form标签表示一个表单区域action=“后端地址”method=“提交数据方式:get/post”input单行输入框type=“text”文本name=“定义名称名字自定义”向后端提交的键readonly=“readonly”只读,不可修改,但是可以提交disabled=“disabled”禁用组件不可修改,不能提交type=“password”密码框type=“radio”单
mongodb3.03开启认证
21jhf
mongodb
下载了最新mongodb3.03版本,当使用--auth 参数命令行开启mongodb用户认证时遇到很多问题,现总结如下:
(百度上搜到的基本都是老版本的,看到db.addUser的就是,请忽略)
Windows下我做了一个bat文件,用来启动mongodb,命令行如下:
mongod --dbpath db\data --port 27017 --directoryperdb --logp
【Spark103】Task not serializable
bit1129
Serializable
Task not serializable是Spark开发过程最令人头疼的问题之一,这里记录下出现这个问题的两个实例,一个是自己遇到的,另一个是stackoverflow上看到。等有时间了再仔细探究出现Task not serialiazable的各种原因以及出现问题后如何快速定位问题的所在,至少目前阶段碰到此类问题,没有什么章法
1.
package spark.exampl
你所熟知的 LRU(最近最少使用)
dalan_123
java
关于LRU这个名词在很多地方或听说,或使用,接下来看下lru缓存回收的实现
1、大体的想法
a、查询出最近最晚使用的项
b、给最近的使用的项做标记
通过使用链表就可以完成这两个操作,关于最近最少使用的项只需要返回链表的尾部;标记最近使用的项,只需要将该项移除并放置到头部,那么难点就出现 你如何能够快速在链表定位对应的该项?
这时候多
Javascript 跨域
周凡杨
JavaScript jsonp 跨域 cross-domain
 
linux下安装apache服务器
g21121
apache
安装apache
下载windows版本apache,下载地址:http://httpd.apache.org/download.cgi
1.windows下安装apache
Windows下安装apache比较简单,注意选择路径和端口即可,这里就不再赘述了。 2.linux下安装apache:
下载之后上传到linux的相关目录,这里指定为/home/apach
FineReport的JS编辑框和URL地址栏语法简介
老A不折腾
finereport web报表 报表软件 语法总结
JS编辑框:
1.FineReport的js。
作为一款BS产品,browser端的JavaScript是必不可少的。
FineReport中的js是已经调用了finereport.js的。
大家知道,预览报表时,报表servlet会将cpt模板转为html,在这个html的head头部中会引入FineReport的js,这个finereport.js中包含了许多内置的fun
根据STATUS信息对MySQL进行优化
墙头上一根草
status
mysql 查看当前正在执行的操作,即正在执行的sql语句的方法为:
show processlist 命令
mysql> show global status;可以列出MySQL服务器运行各种状态值,我个人较喜欢的用法是show status like '查询值%';一、慢查询mysql> show variab
我的spring学习笔记7-Spring的Bean配置文件给Bean定义别名
aijuans
Spring 3
本文介绍如何给Spring的Bean配置文件的Bean定义别名?
原始的
<bean id="business" class="onlyfun.caterpillar.device.Business">
<property name="writer">
<ref b
高性能mysql 之 性能剖析
annan211
性能 mysql mysql 性能剖析 剖析
1 定义性能优化
mysql服务器性能,此处定义为 响应时间。
在解释性能优化之前,先来消除一个误解,很多人认为,性能优化就是降低cpu的利用率或者减少对资源的使用。
这是一个陷阱。
资源时用来消耗并用来工作的,所以有时候消耗更多的资源能够加快查询速度,保持cpu忙绿,这是必要的。很多时候发现
编译进了新版本的InnoDB之后,cpu利用率上升的很厉害,这并不
主外键和索引唯一性约束
百合不是茶
索引 唯一性约束 主外键约束 联机删除
目标;第一步;创建两张表 用户表和文章表
第二步;发表文章
1,建表;
---用户表 BlogUsers
--userID唯一的
--userName
--pwd
--sex
create
线程的调度
bijian1013
java 多线程 thread 线程的调度 java多线程
1. Java提供一个线程调度程序来监控程序中启动后进入可运行状态的所有线程。线程调度程序按照线程的优先级决定应调度哪些线程来执行。
2. 多数线程的调度是抢占式的(即我想中断程序运行就中断,不需要和将被中断的程序协商)
a) 
查看日志常用命令
bijian1013
linux 命令 unix
一.日志查找方法,可以用通配符查某台主机上的所有服务器grep "关键字" /wls/applogs/custom-*/error.log
二.查看日志常用命令1.grep '关键字' error.log:在error.log中搜索'关键字'2.grep -C10 '关键字' error.log:显示关键字前后10行记录3.grep '关键字' error.l
【持久化框架MyBatis3一】MyBatis版HelloWorld
bit1129
helloworld
MyBatis这个系列的文章,主要参考《Java Persistence with MyBatis 3》。
样例数据
本文以MySQL数据库为例,建立一个STUDENTS表,插入两条数据,然后进行单表的增删改查
CREATE TABLE STUDENTS
(
stud_id int(11) NOT NULL AUTO_INCREMENT,
【Hadoop十五】Hadoop Counter
bit1129
hadoop
1. 只有Map任务的Map Reduce Job
File System Counters
FILE: Number of bytes read=3629530
FILE: Number of bytes written=98312
FILE: Number of read operations=0
FILE: Number of lar
解决Tomcat数据连接池无法释放
ronin47
tomcat 连接池 优化
近段时间,公司的检测中心报表系统(SMC)的开发人员时不时找到我,说用户老是出现无法登录的情况。前些日子因为手头上 有Jboss集群的测试工作,发现用户不能登录时,都是在Tomcat中将这个项目Reload一下就好了,不过只是治标而已,因为大概几个小时之后又会 再次出现无法登录的情况。
今天上午,开发人员小毛又找到我,要我协助将这个问题根治一下,拖太久用户难保不投诉。
简单分析了一
java-75-二叉树两结点的最低共同父结点
bylijinnan
java
import java.util.LinkedList;
import java.util.List;
import ljn.help.*;
public class BTreeLowestParentOfTwoNodes {
public static void main(String[] args) {
/*
* node data is stored in
行业垂直搜索引擎网页抓取项目
carlwu
Lucene Nutch Heritrix Solr
公司有一个搜索引擎项目,希望各路高人有空来帮忙指导,谢谢!
这是详细需求:
(1) 通过提供的网站地址(大概100-200个网站),网页抓取程序能不断抓取网页和其它类型的文件(如Excel、PDF、Word、ppt及zip类型),并且程序能够根据事先提供的规则,过滤掉不相干的下载内容。
(2) 程序能够搜索这些抓取的内容,并能对这些抓取文件按照油田名进行分类,然后放到服务器不同的目录中。
[通讯与服务]在总带宽资源没有大幅增加之前,不适宜大幅度降低资费
comsci
资源
降低通讯服务资费,就意味着有更多的用户进入,就意味着通讯服务提供商要接待和服务更多的用户,在总体运维成本没有由于技术升级而大幅下降的情况下,这种降低资费的行为将导致每个用户的平均带宽不断下降,而享受到的服务质量也在下降,这对用户和服务商都是不利的。。。。。。。。
&nbs
Java时区转换及时间格式
Cwind
java
本文介绍Java API 中 Date, Calendar, TimeZone和DateFormat的使用,以及不同时区时间相互转化的方法和原理。
问题描述:
向处于不同时区的服务器发请求时需要考虑时区转换的问题。譬如,服务器位于东八区(北京时间,GMT+8:00),而身处东四区的用户想要查询当天的销售记录。则需把东四区的“今天”这个时间范围转换为服务器所在时区的时间范围。
readonly,只读,不可用
dashuaifu
js jsp disable readOnly readOnly
readOnly 和 readonly 不同,在做js开发时一定要注意函数大小写和jsp黄线的警告!!!我就经历过这么一件事:
使用readOnly在某些浏览器或同一浏览器不同版本有的可以实现“只读”功能,有的就不行,而且函数readOnly有黄线警告!!!就这样被折磨了不短时间!!!(期间使用过disable函数,但是发现disable函数之后后台接收不到前台的的数据!!!)
LABjs、RequireJS、SeaJS 介绍
dcj3sjt126com
js Web
LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行。LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化。LABjs 是一个文件加载器。RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更
[应用结构]入口脚本
dcj3sjt126com
PHP yii2
入口脚本
入口脚本是应用启动流程中的第一环,一个应用(不管是网页应用还是控制台应用)只有一个入口脚本。终端用户的请求通过入口脚本实例化应用并将将请求转发到应用。
Web 应用的入口脚本必须放在终端用户能够访问的目录下,通常命名为 index.php,也可以使用 Web 服务器能定位到的其他名称。
控制台应用的入口脚本一般在应用根目录下命名为 yii(后缀为.php),该文
haoop shell命令
eksliang
hadoop hadoop shell
cat
chgrp
chmod
chown
copyFromLocal
copyToLocal
cp
du
dus
expunge
get
getmerge
ls
lsr
mkdir
movefromLocal
mv
put
rm
rmr
setrep
stat
tail
test
text
MultiStateView不同的状态下显示不同的界面
gundumw100
android
只要将指定的view放在该控件里面,可以该view在不同的状态下显示不同的界面,这对ListView很有用,比如加载界面,空白界面,错误界面。而且这些见面由你指定布局,非常灵活。
PS:ListView虽然可以设置一个EmptyView,但使用起来不方便,不灵活,有点累赘。
<com.kennyc.view.MultiStateView xmlns:android=&qu
jQuery实现页面内锚点平滑跳转
ini
JavaScript html jquery html5 css
平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,就像#keleyi,今天我就介绍一款 jquery 做的滚动的特效,既可以设置滚动速度,又可以在 url 链接上没有“小尾巴”。
效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/37.htmHTML文件代码:
&
kafka offset迁移
kane_xie
kafka
在早前的kafka版本中(0.8.0),offset是被存储在zookeeper中的。
到当前版本(0.8.2)为止,kafka同时支持offset存储在zookeeper和offset manager(broker)中。
从官方的说明来看,未来offset的zookeeper存储将会被弃用。因此现有的基于kafka的项目如果今后计划保持更新的话,可以考虑在合适
android > 搭建 cordova 环境
mft8899
android
1 , 安装 node.js
http://nodejs.org
node -v 查看版本
2, 安装 npm
可以先从 https://github.com/isaacs/npm/tags 下载 源码 解压到
java封装的比较器,比较是否全相同,获取不同字段名字
qifeifei
非常实用的java比较器,贴上代码:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
i
记录一些函数用法
.Aky.
位运算 PHP 数据库 函数 IP
高手们照旧忽略。
想弄个全天朝IP段数据库,找了个今天最新更新的国内所有运营商IP段,copy到文件,用文件函数,字符串函数把玩下。分割出startIp和endIp这样格式写入.txt文件,直接用phpmyadmin导入.csv文件的形式导入。(生命在于折腾,也许你们觉得我傻X,直接下载人家弄好的导入不就可以,做自己的菜鸟,让别人去说吧)
当然用到了ip2long()函数把字符串转为整型数
sublime text 3 rust
wudixiaotie
Sublime Text
1.sublime text 3 => install package => Rust
2.cd ~/.config/sublime-text-3/Packages
3.mkdir rust
4.git clone https://github.com/sp0/rust-style
5.cd rust-style
6.cargo build --release
7.ctrl