Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libs/bower_components/jQuery.dotdotdot/src/js')
-rw-r--r--libs/bower_components/jQuery.dotdotdot/src/js/jquery.dotdotdot.js685
-rw-r--r--libs/bower_components/jQuery.dotdotdot/src/js/jquery.dotdotdot.min.js13
2 files changed, 0 insertions, 698 deletions
diff --git a/libs/bower_components/jQuery.dotdotdot/src/js/jquery.dotdotdot.js b/libs/bower_components/jQuery.dotdotdot/src/js/jquery.dotdotdot.js
deleted file mode 100644
index 7a0be4cdd3..0000000000
--- a/libs/bower_components/jQuery.dotdotdot/src/js/jquery.dotdotdot.js
+++ /dev/null
@@ -1,685 +0,0 @@
-/*
- * jQuery dotdotdot 1.7.4
- *
- * Copyright (c) Fred Heusschen
- * www.frebsite.nl
- *
- * Plugin website:
- * dotdotdot.frebsite.nl
- *
- * Licensed under the MIT license.
- * http://en.wikipedia.org/wiki/MIT_License
- */
-
-(function( $, undef )
-{
- if ( $.fn.dotdotdot )
- {
- return;
- }
-
- $.fn.dotdotdot = function( o )
- {
- if ( this.length == 0 )
- {
- $.fn.dotdotdot.debug( 'No element found for "' + this.selector + '".' );
- return this;
- }
- if ( this.length > 1 )
- {
- return this.each(
- function()
- {
- $(this).dotdotdot( o );
- }
- );
- }
-
-
- var $dot = this;
-
- if ( $dot.data( 'dotdotdot' ) )
- {
- $dot.trigger( 'destroy.dot' );
- }
-
- $dot.data( 'dotdotdot-style', $dot.attr( 'style' ) || '' );
- $dot.css( 'word-wrap', 'break-word' );
- if ($dot.css( 'white-space' ) === 'nowrap')
- {
- $dot.css( 'white-space', 'normal' );
- }
-
- $dot.bind_events = function()
- {
- $dot.bind(
- 'update.dot',
- function( e, c )
- {
- $dot.removeClass("is-truncated");
- e.preventDefault();
- e.stopPropagation();
-
- switch( typeof opts.height )
- {
- case 'number':
- opts.maxHeight = opts.height;
- break;
-
- case 'function':
- opts.maxHeight = opts.height.call( $dot[ 0 ] );
- break;
-
- default:
- opts.maxHeight = getTrueInnerHeight( $dot );
- break;
- }
-
- opts.maxHeight += opts.tolerance;
-
- if ( typeof c != 'undefined' )
- {
- if ( typeof c == 'string' || ('nodeType' in c && c.nodeType === 1) )
- {
- c = $('<div />').append( c ).contents();
- }
- if ( c instanceof $ )
- {
- orgContent = c;
- }
- }
-
- $inr = $dot.wrapInner( '<div class="dotdotdot" />' ).children();
- $inr.contents()
- .detach()
- .end()
- .append( orgContent.clone( true ) )
- .find( 'br' )
- .replaceWith( ' <br /> ' )
- .end()
- .css({
- 'height' : 'auto',
- 'width' : 'auto',
- 'border' : 'none',
- 'padding' : 0,
- 'margin' : 0
- });
-
- var after = false,
- trunc = false;
-
- if ( conf.afterElement )
- {
- after = conf.afterElement.clone( true );
- after.show();
- conf.afterElement.detach();
- }
-
- if ( test( $inr, opts ) )
- {
- if ( opts.wrap == 'children' )
- {
- trunc = children( $inr, opts, after );
- }
- else
- {
- trunc = ellipsis( $inr, $dot, $inr, opts, after );
- }
- }
- $inr.replaceWith( $inr.contents() );
- $inr = null;
-
- if ( $.isFunction( opts.callback ) )
- {
- opts.callback.call( $dot[ 0 ], trunc, orgContent );
- }
-
- conf.isTruncated = trunc;
- return trunc;
- }
-
- ).bind(
- 'isTruncated.dot',
- function( e, fn )
- {
- e.preventDefault();
- e.stopPropagation();
-
- if ( typeof fn == 'function' )
- {
- fn.call( $dot[ 0 ], conf.isTruncated );
- }
- return conf.isTruncated;
- }
-
- ).bind(
- 'originalContent.dot',
- function( e, fn )
- {
- e.preventDefault();
- e.stopPropagation();
-
- if ( typeof fn == 'function' )
- {
- fn.call( $dot[ 0 ], orgContent );
- }
- return orgContent;
- }
-
- ).bind(
- 'destroy.dot',
- function( e )
- {
- e.preventDefault();
- e.stopPropagation();
-
- $dot.unwatch()
- .unbind_events()
- .contents()
- .detach()
- .end()
- .append( orgContent )
- .attr( 'style', $dot.data( 'dotdotdot-style' ) || '' )
- .data( 'dotdotdot', false );
- }
- );
- return $dot;
- }; // /bind_events
-
- $dot.unbind_events = function()
- {
- $dot.unbind('.dot');
- return $dot;
- }; // /unbind_events
-
- $dot.watch = function()
- {
- $dot.unwatch();
- if ( opts.watch == 'window' )
- {
- var $window = $(window),
- _wWidth = $window.width(),
- _wHeight = $window.height();
-
- $window.bind(
- 'resize.dot' + conf.dotId,
- function()
- {
- if ( _wWidth != $window.width() || _wHeight != $window.height() || !opts.windowResizeFix )
- {
- _wWidth = $window.width();
- _wHeight = $window.height();
-
- if ( watchInt )
- {
- clearInterval( watchInt );
- }
- watchInt = setTimeout(
- function()
- {
- $dot.trigger( 'update.dot' );
- }, 100
- );
- }
- }
- );
- }
- else
- {
- watchOrg = getSizes( $dot );
- watchInt = setInterval(
- function()
- {
- if ( $dot.is( ':visible' ) )
- {
- var watchNew = getSizes( $dot );
- if ( watchOrg.width != watchNew.width ||
- watchOrg.height != watchNew.height )
- {
- $dot.trigger( 'update.dot' );
- watchOrg = watchNew;
- }
- }
- }, 500
- );
- }
- return $dot;
- };
- $dot.unwatch = function()
- {
- $(window).unbind( 'resize.dot' + conf.dotId );
- if ( watchInt )
- {
- clearInterval( watchInt );
- }
- return $dot;
- };
-
- var orgContent = $dot.contents(),
- opts = $.extend( true, {}, $.fn.dotdotdot.defaults, o ),
- conf = {},
- watchOrg = {},
- watchInt = null,
- $inr = null;
-
-
- if ( !( opts.lastCharacter.remove instanceof Array ) )
- {
- opts.lastCharacter.remove = $.fn.dotdotdot.defaultArrays.lastCharacter.remove;
- }
- if ( !( opts.lastCharacter.noEllipsis instanceof Array ) )
- {
- opts.lastCharacter.noEllipsis = $.fn.dotdotdot.defaultArrays.lastCharacter.noEllipsis;
- }
-
-
- conf.afterElement = getElement( opts.after, $dot );
- conf.isTruncated = false;
- conf.dotId = dotId++;
-
-
- $dot.data( 'dotdotdot', true )
- .bind_events()
- .trigger( 'update.dot' );
-
- if ( opts.watch )
- {
- $dot.watch();
- }
-
- return $dot;
- };
-
-
- // public
- $.fn.dotdotdot.defaults = {
- 'ellipsis' : '... ',
- 'wrap' : 'word',
- 'fallbackToLetter' : true,
- 'lastCharacter' : {},
- 'tolerance' : 0,
- 'callback' : null,
- 'after' : null,
- 'height' : null,
- 'watch' : false,
- 'windowResizeFix' : true
- };
- $.fn.dotdotdot.defaultArrays = {
- 'lastCharacter' : {
- 'remove' : [ ' ', '\u3000', ',', ';', '.', '!', '?' ],
- 'noEllipsis' : []
- }
- };
- $.fn.dotdotdot.debug = function( msg ) {};
-
-
- // private
- var dotId = 1;
-
- function children( $elem, o, after )
- {
- var $elements = $elem.children(),
- isTruncated = false;
-
- $elem.empty();
-
- for ( var a = 0, l = $elements.length; a < l; a++ )
- {
- var $e = $elements.eq( a );
- $elem.append( $e );
- if ( after )
- {
- $elem.append( after );
- }
- if ( test( $elem, o ) )
- {
- $e.remove();
- isTruncated = true;
- break;
- }
- else
- {
- if ( after )
- {
- after.detach();
- }
- }
- }
- return isTruncated;
- }
- function ellipsis( $elem, $d, $i, o, after )
- {
- var isTruncated = false;
-
- // Don't put the ellipsis directly inside these elements
- var notx = 'a, table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, blockquote, select, optgroup, option, textarea, script, style';
-
- // Don't remove these elements even if they are after the ellipsis
- var noty = 'script, .dotdotdot-keep';
-
- $elem
- .contents()
- .detach()
- .each(
- function()
- {
-
- var e = this,
- $e = $(e);
-
- if ( typeof e == 'undefined' )
- {
- return true;
- }
- else if ( $e.is( noty ) )
- {
- $elem.append( $e );
- }
- else if ( isTruncated )
- {
- return true;
- }
- else
- {
- $elem.append( $e );
- if ( after && !$e.is( o.after ) && !$e.find( o.after ).length )
- {
- $elem[ $elem.is( notx ) ? 'after' : 'append' ]( after );
- }
- if ( test( $i, o ) )
- {
- if ( e.nodeType == 3 ) // node is TEXT
- {
- isTruncated = ellipsisElement( $e, $d, $i, o, after );
- }
- else
- {
- isTruncated = ellipsis( $e, $d, $i, o, after );
- }
-
- if ( !isTruncated )
- {
- $e.detach();
- isTruncated = true;
- }
- }
-
- if ( !isTruncated )
- {
- if ( after )
- {
- after.detach();
- }
- }
- }
- }
- );
- $d.addClass("is-truncated");
- return isTruncated;
- }
- function ellipsisElement( $e, $d, $i, o, after )
- {
- var e = $e[ 0 ];
-
- if ( !e )
- {
- return false;
- }
-
- var txt = getTextContent( e ),
- space = ( txt.indexOf(' ') !== -1 ) ? ' ' : '\u3000',
- separator = ( o.wrap == 'letter' ) ? '' : space,
- textArr = txt.split( separator ),
- position = -1,
- midPos = -1,
- startPos = 0,
- endPos = textArr.length - 1;
-
-
- // Only one word
- if ( o.fallbackToLetter && startPos == 0 && endPos == 0 )
- {
- separator = '';
- textArr = txt.split( separator );
- endPos = textArr.length - 1;
- }
-
- while ( startPos <= endPos && !( startPos == 0 && endPos == 0 ) )
- {
- var m = Math.floor( ( startPos + endPos ) / 2 );
- if ( m == midPos )
- {
- break;
- }
- midPos = m;
-
- setTextContent( e, textArr.slice( 0, midPos + 1 ).join( separator ) + o.ellipsis );
- $i.children()
- .each(
- function()
- {
- $(this).toggle().toggle();
- }
- );
-
- if ( !test( $i, o ) )
- {
- position = midPos;
- startPos = midPos;
- }
- else
- {
- endPos = midPos;
-
- // Fallback to letter
- if (o.fallbackToLetter && startPos == 0 && endPos == 0 )
- {
- separator = '';
- textArr = textArr[ 0 ].split( separator );
- position = -1;
- midPos = -1;
- startPos = 0;
- endPos = textArr.length - 1;
- }
- }
- }
-
- if ( position != -1 && !( textArr.length == 1 && textArr[ 0 ].length == 0 ) )
- {
- txt = addEllipsis( textArr.slice( 0, position + 1 ).join( separator ), o );
- setTextContent( e, txt );
- }
- else
- {
- var $w = $e.parent();
- $e.detach();
-
- var afterLength = ( after && after.closest($w).length ) ? after.length : 0;
-
- if ( $w.contents().length > afterLength )
- {
- e = findLastTextNode( $w.contents().eq( -1 - afterLength ), $d );
- }
- else
- {
- e = findLastTextNode( $w, $d, true );
- if ( !afterLength )
- {
- $w.detach();
- }
- }
- if ( e )
- {
- txt = addEllipsis( getTextContent( e ), o );
- setTextContent( e, txt );
- if ( afterLength && after )
- {
- $(e).parent().append( after );
- }
- }
- }
-
- return true;
- }
- function test( $i, o )
- {
- return $i.innerHeight() > o.maxHeight;
- }
- function addEllipsis( txt, o )
- {
- while( $.inArray( txt.slice( -1 ), o.lastCharacter.remove ) > -1 )
- {
- txt = txt.slice( 0, -1 );
- }
- if ( $.inArray( txt.slice( -1 ), o.lastCharacter.noEllipsis ) < 0 )
- {
- txt += o.ellipsis;
- }
- return txt;
- }
- function getSizes( $d )
- {
- return {
- 'width' : $d.innerWidth(),
- 'height': $d.innerHeight()
- };
- }
- function setTextContent( e, content )
- {
- if ( e.innerText )
- {
- e.innerText = content;
- }
- else if ( e.nodeValue )
- {
- e.nodeValue = content;
- }
- else if (e.textContent)
- {
- e.textContent = content;
- }
-
- }
- function getTextContent( e )
- {
- if ( e.innerText )
- {
- return e.innerText;
- }
- else if ( e.nodeValue )
- {
- return e.nodeValue;
- }
- else if ( e.textContent )
- {
- return e.textContent;
- }
- else
- {
- return "";
- }
- }
- function getPrevNode( n )
- {
- do
- {
- n = n.previousSibling;
- }
- while ( n && n.nodeType !== 1 && n.nodeType !== 3 );
-
- return n;
- }
- function findLastTextNode( $el, $top, excludeCurrent )
- {
- var e = $el && $el[ 0 ], p;
- if ( e )
- {
- if ( !excludeCurrent )
- {
- if ( e.nodeType === 3 )
- {
- return e;
- }
- if ( $.trim( $el.text() ) )
- {
- return findLastTextNode( $el.contents().last(), $top );
- }
- }
- p = getPrevNode( e );
- while ( !p )
- {
- $el = $el.parent();
- if ( $el.is( $top ) || !$el.length )
- {
- return false;
- }
- p = getPrevNode( $el[0] );
- }
- if ( p )
- {
- return findLastTextNode( $(p), $top );
- }
- }
- return false;
- }
- function getElement( e, $i )
- {
- if ( !e )
- {
- return false;
- }
- if ( typeof e === 'string' )
- {
- e = $(e, $i);
- return ( e.length )
- ? e
- : false;
- }
- return !e.jquery
- ? false
- : e;
- }
- function getTrueInnerHeight( $el )
- {
- var h = $el.innerHeight(),
- a = [ 'paddingTop', 'paddingBottom' ];
-
- for ( var z = 0, l = a.length; z < l; z++ )
- {
- var m = parseInt( $el.css( a[ z ] ), 10 );
- if ( isNaN( m ) )
- {
- m = 0;
- }
- h -= m;
- }
- return h;
- }
-
-
- // override jQuery.html
- var _orgHtml = $.fn.html;
- $.fn.html = function( str )
- {
- if ( str != undef && !$.isFunction( str ) && this.data( 'dotdotdot' ) )
- {
- return this.trigger( 'update', [ str ] );
- }
- return _orgHtml.apply( this, arguments );
- };
-
-
- // override jQuery.text
- var _orgText = $.fn.text;
- $.fn.text = function( str )
- {
- if ( str != undef && !$.isFunction( str ) && this.data( 'dotdotdot' ) )
- {
- str = $( '<div />' ).text( str ).html();
- return this.trigger( 'update', [ str ] );
- }
- return _orgText.apply( this, arguments );
- };
-
-
-})( jQuery );
diff --git a/libs/bower_components/jQuery.dotdotdot/src/js/jquery.dotdotdot.min.js b/libs/bower_components/jQuery.dotdotdot/src/js/jquery.dotdotdot.min.js
deleted file mode 100644
index 95bce3afed..0000000000
--- a/libs/bower_components/jQuery.dotdotdot/src/js/jquery.dotdotdot.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * jQuery dotdotdot 1.7.4
- *
- * Copyright (c) Fred Heusschen
- * www.frebsite.nl
- *
- * Plugin website:
- * dotdotdot.frebsite.nl
- *
- * Licensed under the MIT license.
- * http://en.wikipedia.org/wiki/MIT_License
- */
-!function(t,e){function n(t,e,n){var r=t.children(),o=!1;t.empty();for(var i=0,d=r.length;d>i;i++){var l=r.eq(i);if(t.append(l),n&&t.append(n),a(t,e)){l.remove(),o=!0;break}n&&n.detach()}return o}function r(e,n,i,d,l){var s=!1,c="a, table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, blockquote, select, optgroup, option, textarea, script, style",u="script, .dotdotdot-keep";return e.contents().detach().each(function(){var h=this,f=t(h);if("undefined"==typeof h)return!0;if(f.is(u))e.append(f);else{if(s)return!0;e.append(f),!l||f.is(d.after)||f.find(d.after).length||e[e.is(c)?"after":"append"](l),a(i,d)&&(s=3==h.nodeType?o(f,n,i,d,l):r(f,n,i,d,l),s||(f.detach(),s=!0)),s||l&&l.detach()}}),n.addClass("is-truncated"),s}function o(e,n,r,o,d){var c=e[0];if(!c)return!1;var h=s(c),f=-1!==h.indexOf(" ")?" ":" ",p="letter"==o.wrap?"":f,g=h.split(p),v=-1,w=-1,b=0,y=g.length-1;for(o.fallbackToLetter&&0==b&&0==y&&(p="",g=h.split(p),y=g.length-1);y>=b&&(0!=b||0!=y);){var m=Math.floor((b+y)/2);if(m==w)break;w=m,l(c,g.slice(0,w+1).join(p)+o.ellipsis),r.children().each(function(){t(this).toggle().toggle()}),a(r,o)?(y=w,o.fallbackToLetter&&0==b&&0==y&&(p="",g=g[0].split(p),v=-1,w=-1,b=0,y=g.length-1)):(v=w,b=w)}if(-1==v||1==g.length&&0==g[0].length){var x=e.parent();e.detach();var T=d&&d.closest(x).length?d.length:0;x.contents().length>T?c=u(x.contents().eq(-1-T),n):(c=u(x,n,!0),T||x.detach()),c&&(h=i(s(c),o),l(c,h),T&&d&&t(c).parent().append(d))}else h=i(g.slice(0,v+1).join(p),o),l(c,h);return!0}function a(t,e){return t.innerHeight()>e.maxHeight}function i(e,n){for(;t.inArray(e.slice(-1),n.lastCharacter.remove)>-1;)e=e.slice(0,-1);return t.inArray(e.slice(-1),n.lastCharacter.noEllipsis)<0&&(e+=n.ellipsis),e}function d(t){return{width:t.innerWidth(),height:t.innerHeight()}}function l(t,e){t.innerText?t.innerText=e:t.nodeValue?t.nodeValue=e:t.textContent&&(t.textContent=e)}function s(t){return t.innerText?t.innerText:t.nodeValue?t.nodeValue:t.textContent?t.textContent:""}function c(t){do t=t.previousSibling;while(t&&1!==t.nodeType&&3!==t.nodeType);return t}function u(e,n,r){var o,a=e&&e[0];if(a){if(!r){if(3===a.nodeType)return a;if(t.trim(e.text()))return u(e.contents().last(),n)}for(o=c(a);!o;){if(e=e.parent(),e.is(n)||!e.length)return!1;o=c(e[0])}if(o)return u(t(o),n)}return!1}function h(e,n){return e?"string"==typeof e?(e=t(e,n),e.length?e:!1):e.jquery?e:!1:!1}function f(t){for(var e=t.innerHeight(),n=["paddingTop","paddingBottom"],r=0,o=n.length;o>r;r++){var a=parseInt(t.css(n[r]),10);isNaN(a)&&(a=0),e-=a}return e}if(!t.fn.dotdotdot){t.fn.dotdotdot=function(e){if(0==this.length)return t.fn.dotdotdot.debug('No element found for "'+this.selector+'".'),this;if(this.length>1)return this.each(function(){t(this).dotdotdot(e)});var o=this;o.data("dotdotdot")&&o.trigger("destroy.dot"),o.data("dotdotdot-style",o.attr("style")||""),o.css("word-wrap","break-word"),"nowrap"===o.css("white-space")&&o.css("white-space","normal"),o.bind_events=function(){return o.bind("update.dot",function(e,d){switch(o.removeClass("is-truncated"),e.preventDefault(),e.stopPropagation(),typeof l.height){case"number":l.maxHeight=l.height;break;case"function":l.maxHeight=l.height.call(o[0]);break;default:l.maxHeight=f(o)}l.maxHeight+=l.tolerance,"undefined"!=typeof d&&(("string"==typeof d||"nodeType"in d&&1===d.nodeType)&&(d=t("<div />").append(d).contents()),d instanceof t&&(i=d)),g=o.wrapInner('<div class="dotdotdot" />').children(),g.contents().detach().end().append(i.clone(!0)).find("br").replaceWith(" <br /> ").end().css({height:"auto",width:"auto",border:"none",padding:0,margin:0});var c=!1,u=!1;return s.afterElement&&(c=s.afterElement.clone(!0),c.show(),s.afterElement.detach()),a(g,l)&&(u="children"==l.wrap?n(g,l,c):r(g,o,g,l,c)),g.replaceWith(g.contents()),g=null,t.isFunction(l.callback)&&l.callback.call(o[0],u,i),s.isTruncated=u,u}).bind("isTruncated.dot",function(t,e){return t.preventDefault(),t.stopPropagation(),"function"==typeof e&&e.call(o[0],s.isTruncated),s.isTruncated}).bind("originalContent.dot",function(t,e){return t.preventDefault(),t.stopPropagation(),"function"==typeof e&&e.call(o[0],i),i}).bind("destroy.dot",function(t){t.preventDefault(),t.stopPropagation(),o.unwatch().unbind_events().contents().detach().end().append(i).attr("style",o.data("dotdotdot-style")||"").data("dotdotdot",!1)}),o},o.unbind_events=function(){return o.unbind(".dot"),o},o.watch=function(){if(o.unwatch(),"window"==l.watch){var e=t(window),n=e.width(),r=e.height();e.bind("resize.dot"+s.dotId,function(){n==e.width()&&r==e.height()&&l.windowResizeFix||(n=e.width(),r=e.height(),u&&clearInterval(u),u=setTimeout(function(){o.trigger("update.dot")},100))})}else c=d(o),u=setInterval(function(){if(o.is(":visible")){var t=d(o);(c.width!=t.width||c.height!=t.height)&&(o.trigger("update.dot"),c=t)}},500);return o},o.unwatch=function(){return t(window).unbind("resize.dot"+s.dotId),u&&clearInterval(u),o};var i=o.contents(),l=t.extend(!0,{},t.fn.dotdotdot.defaults,e),s={},c={},u=null,g=null;return l.lastCharacter.remove instanceof Array||(l.lastCharacter.remove=t.fn.dotdotdot.defaultArrays.lastCharacter.remove),l.lastCharacter.noEllipsis instanceof Array||(l.lastCharacter.noEllipsis=t.fn.dotdotdot.defaultArrays.lastCharacter.noEllipsis),s.afterElement=h(l.after,o),s.isTruncated=!1,s.dotId=p++,o.data("dotdotdot",!0).bind_events().trigger("update.dot"),l.watch&&o.watch(),o},t.fn.dotdotdot.defaults={ellipsis:"... ",wrap:"word",fallbackToLetter:!0,lastCharacter:{},tolerance:0,callback:null,after:null,height:null,watch:!1,windowResizeFix:!0},t.fn.dotdotdot.defaultArrays={lastCharacter:{remove:[" "," ",",",";",".","!","?"],noEllipsis:[]}},t.fn.dotdotdot.debug=function(){};var p=1,g=t.fn.html;t.fn.html=function(n){return n!=e&&!t.isFunction(n)&&this.data("dotdotdot")?this.trigger("update",[n]):g.apply(this,arguments)};var v=t.fn.text;t.fn.text=function(n){return n!=e&&!t.isFunction(n)&&this.data("dotdotdot")?(n=t("<div />").text(n).html(),this.trigger("update",[n])):v.apply(this,arguments)}}}(jQuery); \ No newline at end of file