From 74f6ddc816cc6a09558e996dec3f0b6b66df3e72 Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Tue, 19 Aug 2014 03:27:17 +0000 Subject: [PATCH] TinyMCE wpView: ignore more keys when the caret is around a view. Part props avryl, fixes #29115. Built from https://develop.svn.wordpress.org/trunk@29535 git-svn-id: http://core.svn.wordpress.org/trunk@29311 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- .../js/tinymce/plugins/wpview/plugin.js | 16 +++++++++++++++- .../js/tinymce/plugins/wpview/plugin.min.js | 2 +- wp-includes/js/tinymce/wp-tinymce.js.gz | Bin 134121 -> 134164 bytes 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/wp-includes/js/tinymce/plugins/wpview/plugin.js b/wp-includes/js/tinymce/plugins/wpview/plugin.js index da12d957d3..e0dbafacca 100644 --- a/wp-includes/js/tinymce/plugins/wpview/plugin.js +++ b/wp-includes/js/tinymce/plugins/wpview/plugin.js @@ -353,6 +353,14 @@ tinymce.PluginManager.add( 'wpview', function( editor ) { } }); + // Excludes arrow keys, delete, backspace, enter, space bar. + function isSpecialKey( key ) { + return ( ( key <= 47 && key !== VK.SPACEBAR && key !== VK.ENTER && key !== VK.DELETE && key !== VK.BACKSPACE && ( key < 37 || key > 40 ) ) || + key === 144 || key === 145 || // Num Lock, Scroll Lock + ( key >= 91 && key <= 93 ) || // Windows keys + ( key >= 112 && key <= 123 ) ); // F keys + } + // (De)select views when arrow keys are used to navigate the content of the editor. editor.on( 'keydown', function( event ) { var key = event.keyCode, @@ -410,9 +418,10 @@ tinymce.PluginManager.add( 'wpview', function( editor ) { } else { setViewCursor( false, view ); } + event.preventDefault(); // Ignore keys that don't insert anything. - } else if ( ( key > 47 || VK.SPACEBAR || key === VK.ENTER || key === VK.DELETE || key === VK.BACKSPACE ) && key !== 144 && key !== 145 ) { + } else if ( ! isSpecialKey( key ) ) { removeView( selected ); if ( key === VK.ENTER || key === VK.DELETE || key === VK.BACKSPACE ) { @@ -472,6 +481,11 @@ tinymce.PluginManager.add( 'wpview', function( editor ) { return; } + if ( isSpecialKey( key ) ) { + // ignore + return; + } + if ( ( cursorAfter && key === VK.UP ) || ( cursorBefore && key === VK.BACKSPACE ) ) { if ( view.previousSibling ) { if ( getView( view.previousSibling ) ) { diff --git a/wp-includes/js/tinymce/plugins/wpview/plugin.min.js b/wp-includes/js/tinymce/plugins/wpview/plugin.min.js index 19a19f5ee6..9aef959cbd 100644 --- a/wp-includes/js/tinymce/plugins/wpview/plugin.min.js +++ b/wp-includes/js/tinymce/plugins/wpview/plugin.min.js @@ -1 +1 @@ -tinymce.PluginManager.add("wpview",function(a){function b(a){return c(a,"wpview-wrap")}function c(a,b){for(;a&&a.parentNode;){if(a.className&&-1!==(" "+a.className+" ").indexOf(" "+b+" "))return a;a=a.parentNode}return!1}function d(c){return(c=b(c))?window.decodeURIComponent(a.dom.getAttrib(c,"data-wpview-text")||""):""}function e(c,d){return c=b(c),c?(a.dom.setAttrib(c,"data-wpview-text",window.encodeURIComponent(d||"")),!0):!1}function f(a){a.stopPropagation()}function g(b,c){var d=b?"before":"after",e=b?0:1;k(),a.selection.setCursorLocation(a.dom.select(".wpview-selection-"+d,c)[0],e),a.nodeChanged()}function h(b,c,d){var e=a.dom,f=e.create("p");s.ie&&s.ie<11||(f.innerHTML='
'),c?b.parentNode.insertBefore(f,b):e.insertAfter(f,b),k(),c&&d===t.ENTER?g(c,b):a.selection.setCursorLocation(f,0),a.nodeChanged()}function i(b){a.undoManager.transact(function(){h(b),a.dom.remove(b)})}function j(b){var c,e=a.dom;b&&b!==m&&(a.getBody().focus(),k(),m=b,e.setAttrib(b,"data-mce-selected",1),c=e.create("div",{"class":"wpview-clipboard",contenteditable:"true"},d(b)),a.dom.select(".wpview-body",b)[0].appendChild(c),e.bind(c,"beforedeactivate focusin focusout",f),e.bind(m,"beforedeactivate focusin focusout",f),y?a.selection.select(c):a.selection.select(c,!0),a.nodeChanged(),a.fire("wpview-selected",b))}function k(){var b,c=a.dom;m&&(b=a.dom.select(".wpview-clipboard",m)[0],c.unbind(b),c.remove(b),c.unbind(m,"beforedeactivate focusin focusout click mouseup",f),c.setAttrib(m,"data-mce-selected",null)),m=null}function l(a){return a.replace(/]+data-wpview-text=\"([^"]+)"[^>]*>[\s\S]+?wpview-selection-after[^>]+>(?: |\u00a0)*<\/p><\/div>/g,"$1")}var m,n,o,p,q,r,s=tinymce.Env,t=tinymce.util.VK,u=tinymce.dom.TreeWalker,v=!1,w=!0,x=function(){return!1},y=/iPad|iPod|iPhone/.test(navigator.userAgent);return"undefined"!=typeof wp&&wp.mce?(a.on("BeforeAddUndo",function(a){a.lastLevel&&l(a.level.content)===l(a.lastLevel.content)&&a.preventDefault()}),a.on("BeforeSetContent",function(b){var c;b.content&&(m&&i(m),c=a.selection.getNode(),(!b.content.match(/^\s*(https?:\/\/[^\s"]+)\s*$/i)||"P"===c.nodeName&&c.parentNode===a.getBody()&&a.dom.isEmpty(c))&&(b.content=wp.mce.views.toViews(b.content)))}),a.on("SetContent",function(){wp.mce.views.render()}),a.on("click",function(c){var d,e=c.clientX,f=c.clientY,h=a.getBody(),i=h.getBoundingClientRect(),j=h.firstChild,k=j.getBoundingClientRect(),l=h.lastChild,m=l.getBoundingClientRect();fm.bottom&&(d=b(l))?(g(!1,d),c.preventDefault()):tinymce.each(a.dom.select(".wpview-wrap"),function(a){var b=a.getBoundingClientRect();return f>=b.top&&f<=b.bottom?void(ei.right&&(g(!1,a),c.preventDefault())):void 0})}),a.on("init",function(){var c=!1,d=a.selection;a.on("BeforeSetContent",function(){var c,e,f=b(d.getNode());f&&(!f.nextSibling||b(f.nextSibling)?(e=a.getDoc().createTextNode(""),a.dom.insertAfter(e,f)):(c=new u(f.nextSibling,f.nextSibling),e=c.next()),d.select(e),d.collapse(!0))}),a.dom.bind(a.getDoc(),"touchmove",function(){c=!0}),a.on("mousedown mouseup click touchend",function(d){var e=b(d.target);if(w=!1,e){if(d.stopImmediatePropagation(),d.preventDefault(),!("touchend"!==d.type&&"mousedown"!==d.type||d.metaKey||d.ctrlKey)){if(a.dom.hasClass(d.target,"edit"))return wp.mce.views.edit(e),a.focus(),!1;if(a.dom.hasClass(d.target,"remove"))return i(e),!1}return"touchend"===d.type&&c?c=!1:j(e),!1}("touchend"===d.type||"mousedown"===d.type)&&k(),"touchend"===d.type&&c&&(c=!1)},!0)}),a.on("PreProcess",function(b){tinymce.each(a.dom.select("div[data-wpview-text]",b.node),function(a){a.textContent=a.innerText=" "})}),a.on("PostProcess",function(a){a.content&&(a.content=a.content.replace(/
]*?data-wpview-text="([^"]*)"[^>]*>[\s\S]*?<\/div>/g,function(a,b){return b?"

"+window.decodeURIComponent(b)+"

":""}))}),a.on("keydown",function(c){var d,e,f,l,n,p,q,r=c.keyCode,s=a.dom,u=a.selection;if(m){if((c.metaKey||c.ctrlKey)&&r!==t.BACKSPACE&&86!==r||r>=112&&123>=r)return void((c.metaKey||c.ctrlKey)&&88===r&&(v=m));if(e=b(u.getNode()),e!==m)return void k();r===t.LEFT?(g(!0,e),c.preventDefault()):r===t.UP?(e.previousSibling?b(e.previousSibling)?g(!0,e.previousSibling):(k(),u.select(e.previousSibling,!0),u.collapse()):g(!0,e),c.preventDefault()):r===t.RIGHT?(g(!1,e),c.preventDefault()):r===t.DOWN?(e.nextSibling?b(e.nextSibling)?g(!1,e.nextSibling):(k(),u.setCursorLocation(e.nextSibling,0)):g(!1,e),c.preventDefault()):(r>47||t.SPACEBAR||r===t.ENTER||r===t.DELETE||r===t.BACKSPACE)&&144!==r&&145!==r&&(i(m),(r===t.ENTER||r===t.DELETE||r===t.BACKSPACE)&&c.preventDefault())}else{if(c.metaKey||c.ctrlKey||r>=112&&123>=r)return;if(d=u.getNode(),o=d,e=b(d),u.isCollapsed()||(n=u.getRng(),(e=b(n.endContainer))?(p=n.cloneRange(),u.select(e.previousSibling,!0),u.collapse(),q=u.getRng(),p.setEnd(q.endContainer,q.endOffset),u.setRng(p)):(e=b(n.startContainer))&&(p=n.cloneRange(),p.setStart(e.nextSibling,0),u.setRng(p))),!e)return void(c.keyCode===t.BACKSPACE&&(a.dom.isEmpty(d)?(e=b(d.previousSibling))&&(g(!1,e),a.dom.remove(d),c.preventDefault()):(n=u.getRng())&&0===n.startOffset&&0===n.endOffset&&(e=b(d.previousSibling))&&(g(!1,e),c.preventDefault())));if(!(f=s.hasClass(e,"wpview-selection-before"))&&!(l=s.hasClass(e,"wpview-selection-after")))return;l&&r===t.UP||f&&r===t.BACKSPACE?(e.previousSibling?b(e.previousSibling)?g(!1,e.previousSibling):s.isEmpty(e.previousSibling)&&r===t.BACKSPACE?s.remove(e.previousSibling):(u.select(e.previousSibling,!0),u.collapse()):g(!0,e),c.preventDefault()):!l||r!==t.DOWN&&r!==t.RIGHT?!f||r!==t.UP&&r!==t.LEFT?f&&r===t.DOWN?(e.nextSibling?b(e.nextSibling)?g(!0,e.nextSibling):u.setCursorLocation(e.nextSibling,0):g(!1,e),c.preventDefault()):l&&r===t.LEFT||f&&r===t.RIGHT?(j(e),c.preventDefault()):l&&r===t.BACKSPACE?(i(e),c.preventDefault()):l?h(e):f&&h(e,!0,r):(e.previousSibling&&(b(e.previousSibling)?g(r===t.UP,e.previousSibling):(u.select(e.previousSibling,!0),u.collapse())),c.preventDefault()):(e.nextSibling&&(b(e.nextSibling)?g(r===t.RIGHT,e.nextSibling):u.setCursorLocation(e.nextSibling,0)),c.preventDefault()),r===t.ENTER&&c.preventDefault()}}),a.on("keyup",function(){v&&(i(v),v=!1)}),a.on("focus",function(){var c;q=!0,a.dom.addClass(a.getBody(),"has-focus"),w&&(c=b(a.getBody().firstChild))&&g(!0,c),w=!1}),a.on("blur",function(){q=!1,a.dom.removeClass(a.getBody(),"has-focus")}),a.on("NodeChange",function(d){var e=a.dom,f=a.dom.select(".wpview-wrap"),h=d.element.className,i=b(d.element),j=o;if(o=!1,clearInterval(n),tinymce.each(f,function(a){a.className&&(a.className=a.className.replace(/ ?\bwpview-(?:selection-before|selection-after|cursor-hide)\b/g,""))}),q&&i)if("wpview-selection-before"!==h&&"wpview-selection-after"!==h||!a.selection.isCollapsed())c(d.element,"wpview-clipboard")||p||(k(),p++,g(!0,i));else{if(p=0,k(),j===i.previousSibling)return void g(!0,i);if(j===i.nextSibling)return void g(!1,i);e.addClass(i,h),n=setInterval(function(){e.hasClass(i,"wpview-cursor-hide")?e.removeClass(i,"wpview-cursor-hide"):e.addClass(i,"wpview-cursor-hide")},500)}}),a.on("BeforeExecCommand",function(){var c,d=a.selection.getNode();d&&("wpview-selection-before"===d.className||"wpview-selection-after"===d.className)&&(c=b(d))&&(h(c),r=c)}),a.on("ExecCommand",function(){var b,c;m&&(b=m,k(),j(b)),r&&(c=r.nextSibling,c&&"P"===c.nodeName&&a.dom.isEmpty(c)&&(a.dom.remove(c),g(!1,r)),r=!1)}),a.on("ResolveName",function(c){a.dom.hasClass(c.target,"wpview-wrap")?(c.name=a.dom.getAttrib(c.target,"data-wpview-type")||"wpview",c.stopPropagation()):b(c.target)&&(c.preventDefault(),c.stopPropagation())}),{getViewText:d,setViewText:e,getView:b}):{getViewText:x,setViewText:x,getView:x}}); \ No newline at end of file +tinymce.PluginManager.add("wpview",function(a){function b(a){return c(a,"wpview-wrap")}function c(a,b){for(;a&&a.parentNode;){if(a.className&&-1!==(" "+a.className+" ").indexOf(" "+b+" "))return a;a=a.parentNode}return!1}function d(c){return(c=b(c))?window.decodeURIComponent(a.dom.getAttrib(c,"data-wpview-text")||""):""}function e(c,d){return c=b(c),c?(a.dom.setAttrib(c,"data-wpview-text",window.encodeURIComponent(d||"")),!0):!1}function f(a){a.stopPropagation()}function g(b,c){var d=b?"before":"after",e=b?0:1;k(),a.selection.setCursorLocation(a.dom.select(".wpview-selection-"+d,c)[0],e),a.nodeChanged()}function h(b,c,d){var e=a.dom,f=e.create("p");t.ie&&t.ie<11||(f.innerHTML='
'),c?b.parentNode.insertBefore(f,b):e.insertAfter(f,b),k(),c&&d===u.ENTER?g(c,b):a.selection.setCursorLocation(f,0),a.nodeChanged()}function i(b){a.undoManager.transact(function(){h(b),a.dom.remove(b)})}function j(b){var c,e=a.dom;b&&b!==n&&(a.getBody().focus(),k(),n=b,e.setAttrib(b,"data-mce-selected",1),c=e.create("div",{"class":"wpview-clipboard",contenteditable:"true"},d(b)),a.dom.select(".wpview-body",b)[0].appendChild(c),e.bind(c,"beforedeactivate focusin focusout",f),e.bind(n,"beforedeactivate focusin focusout",f),z?a.selection.select(c):a.selection.select(c,!0),a.nodeChanged(),a.fire("wpview-selected",b))}function k(){var b,c=a.dom;n&&(b=a.dom.select(".wpview-clipboard",n)[0],c.unbind(b),c.remove(b),c.unbind(n,"beforedeactivate focusin focusout click mouseup",f),c.setAttrib(n,"data-mce-selected",null)),n=null}function l(a){return a.replace(/]+data-wpview-text=\"([^"]+)"[^>]*>[\s\S]+?wpview-selection-after[^>]+>(?: |\u00a0)*<\/p><\/div>/g,"$1")}function m(a){return 47>=a&&a!==u.SPACEBAR&&a!==u.ENTER&&a!==u.DELETE&&a!==u.BACKSPACE&&(37>a||a>40)||144===a||145===a||a>=91&&93>=a||a>=112&&123>=a}var n,o,p,q,r,s,t=tinymce.Env,u=tinymce.util.VK,v=tinymce.dom.TreeWalker,w=!1,x=!0,y=function(){return!1},z=/iPad|iPod|iPhone/.test(navigator.userAgent);return"undefined"!=typeof wp&&wp.mce?(a.on("BeforeAddUndo",function(a){a.lastLevel&&l(a.level.content)===l(a.lastLevel.content)&&a.preventDefault()}),a.on("BeforeSetContent",function(b){var c;b.content&&(n&&i(n),c=a.selection.getNode(),(!b.content.match(/^\s*(https?:\/\/[^\s"]+)\s*$/i)||"P"===c.nodeName&&c.parentNode===a.getBody()&&a.dom.isEmpty(c))&&(b.content=wp.mce.views.toViews(b.content)))}),a.on("SetContent",function(){wp.mce.views.render()}),a.on("click",function(c){var d,e=c.clientX,f=c.clientY,h=a.getBody(),i=h.getBoundingClientRect(),j=h.firstChild,k=j.getBoundingClientRect(),l=h.lastChild,m=l.getBoundingClientRect();fm.bottom&&(d=b(l))?(g(!1,d),c.preventDefault()):tinymce.each(a.dom.select(".wpview-wrap"),function(a){var b=a.getBoundingClientRect();return f>=b.top&&f<=b.bottom?void(ei.right&&(g(!1,a),c.preventDefault())):void 0})}),a.on("init",function(){var c=!1,d=a.selection;a.on("BeforeSetContent",function(){var c,e,f=b(d.getNode());f&&(!f.nextSibling||b(f.nextSibling)?(e=a.getDoc().createTextNode(""),a.dom.insertAfter(e,f)):(c=new v(f.nextSibling,f.nextSibling),e=c.next()),d.select(e),d.collapse(!0))}),a.dom.bind(a.getDoc(),"touchmove",function(){c=!0}),a.on("mousedown mouseup click touchend",function(d){var e=b(d.target);if(x=!1,e){if(d.stopImmediatePropagation(),d.preventDefault(),!("touchend"!==d.type&&"mousedown"!==d.type||d.metaKey||d.ctrlKey)){if(a.dom.hasClass(d.target,"edit"))return wp.mce.views.edit(e),a.focus(),!1;if(a.dom.hasClass(d.target,"remove"))return i(e),!1}return"touchend"===d.type&&c?c=!1:j(e),!1}("touchend"===d.type||"mousedown"===d.type)&&k(),"touchend"===d.type&&c&&(c=!1)},!0)}),a.on("PreProcess",function(b){tinymce.each(a.dom.select("div[data-wpview-text]",b.node),function(a){a.textContent=a.innerText=" "})}),a.on("PostProcess",function(a){a.content&&(a.content=a.content.replace(/
]*?data-wpview-text="([^"]*)"[^>]*>[\s\S]*?<\/div>/g,function(a,b){return b?"

"+window.decodeURIComponent(b)+"

":""}))}),a.on("keydown",function(c){var d,e,f,l,o,q,r,s=c.keyCode,t=a.dom,v=a.selection;if(n){if((c.metaKey||c.ctrlKey)&&s!==u.BACKSPACE&&86!==s||s>=112&&123>=s)return void((c.metaKey||c.ctrlKey)&&88===s&&(w=n));if(e=b(v.getNode()),e!==n)return void k();s===u.LEFT?(g(!0,e),c.preventDefault()):s===u.UP?(e.previousSibling?b(e.previousSibling)?g(!0,e.previousSibling):(k(),v.select(e.previousSibling,!0),v.collapse()):g(!0,e),c.preventDefault()):s===u.RIGHT?(g(!1,e),c.preventDefault()):s===u.DOWN?(e.nextSibling?b(e.nextSibling)?g(!1,e.nextSibling):(k(),v.setCursorLocation(e.nextSibling,0)):g(!1,e),c.preventDefault()):m(s)||(i(n),(s===u.ENTER||s===u.DELETE||s===u.BACKSPACE)&&c.preventDefault())}else{if(c.metaKey||c.ctrlKey||s>=112&&123>=s)return;if(d=v.getNode(),p=d,e=b(d),v.isCollapsed()||(o=v.getRng(),(e=b(o.endContainer))?(q=o.cloneRange(),v.select(e.previousSibling,!0),v.collapse(),r=v.getRng(),q.setEnd(r.endContainer,r.endOffset),v.setRng(q)):(e=b(o.startContainer))&&(q=o.cloneRange(),q.setStart(e.nextSibling,0),v.setRng(q))),!e)return void(c.keyCode===u.BACKSPACE&&(a.dom.isEmpty(d)?(e=b(d.previousSibling))&&(g(!1,e),a.dom.remove(d),c.preventDefault()):(o=v.getRng())&&0===o.startOffset&&0===o.endOffset&&(e=b(d.previousSibling))&&(g(!1,e),c.preventDefault())));if(!(f=t.hasClass(e,"wpview-selection-before"))&&!(l=t.hasClass(e,"wpview-selection-after")))return;if(m(s))return;l&&s===u.UP||f&&s===u.BACKSPACE?(e.previousSibling?b(e.previousSibling)?g(!1,e.previousSibling):t.isEmpty(e.previousSibling)&&s===u.BACKSPACE?t.remove(e.previousSibling):(v.select(e.previousSibling,!0),v.collapse()):g(!0,e),c.preventDefault()):!l||s!==u.DOWN&&s!==u.RIGHT?!f||s!==u.UP&&s!==u.LEFT?f&&s===u.DOWN?(e.nextSibling?b(e.nextSibling)?g(!0,e.nextSibling):v.setCursorLocation(e.nextSibling,0):g(!1,e),c.preventDefault()):l&&s===u.LEFT||f&&s===u.RIGHT?(j(e),c.preventDefault()):l&&s===u.BACKSPACE?(i(e),c.preventDefault()):l?h(e):f&&h(e,!0,s):(e.previousSibling&&(b(e.previousSibling)?g(s===u.UP,e.previousSibling):(v.select(e.previousSibling,!0),v.collapse())),c.preventDefault()):(e.nextSibling&&(b(e.nextSibling)?g(s===u.RIGHT,e.nextSibling):v.setCursorLocation(e.nextSibling,0)),c.preventDefault()),s===u.ENTER&&c.preventDefault()}}),a.on("keyup",function(){w&&(i(w),w=!1)}),a.on("focus",function(){var c;r=!0,a.dom.addClass(a.getBody(),"has-focus"),x&&(c=b(a.getBody().firstChild))&&g(!0,c),x=!1}),a.on("blur",function(){r=!1,a.dom.removeClass(a.getBody(),"has-focus")}),a.on("NodeChange",function(d){var e=a.dom,f=a.dom.select(".wpview-wrap"),h=d.element.className,i=b(d.element),j=p;if(p=!1,clearInterval(o),tinymce.each(f,function(a){a.className&&(a.className=a.className.replace(/ ?\bwpview-(?:selection-before|selection-after|cursor-hide)\b/g,""))}),r&&i)if("wpview-selection-before"!==h&&"wpview-selection-after"!==h||!a.selection.isCollapsed())c(d.element,"wpview-clipboard")||q||(k(),q++,g(!0,i));else{if(q=0,k(),j===i.previousSibling)return void g(!0,i);if(j===i.nextSibling)return void g(!1,i);e.addClass(i,h),o=setInterval(function(){e.hasClass(i,"wpview-cursor-hide")?e.removeClass(i,"wpview-cursor-hide"):e.addClass(i,"wpview-cursor-hide")},500)}}),a.on("BeforeExecCommand",function(){var c,d=a.selection.getNode();d&&("wpview-selection-before"===d.className||"wpview-selection-after"===d.className)&&(c=b(d))&&(h(c),s=c)}),a.on("ExecCommand",function(){var b,c;n&&(b=n,k(),j(b)),s&&(c=s.nextSibling,c&&"P"===c.nodeName&&a.dom.isEmpty(c)&&(a.dom.remove(c),g(!1,s)),s=!1)}),a.on("ResolveName",function(c){a.dom.hasClass(c.target,"wpview-wrap")?(c.name=a.dom.getAttrib(c.target,"data-wpview-type")||"wpview",c.stopPropagation()):b(c.target)&&(c.preventDefault(),c.stopPropagation())}),{getViewText:d,setViewText:e,getView:b}):{getViewText:y,setViewText:y,getView:y}}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/wp-tinymce.js.gz b/wp-includes/js/tinymce/wp-tinymce.js.gz index 457d5a03c75dc816bf92565892b09f8cb614547d..ed32c9f5d5f52729460236bd7f85e1143c97f479 100644 GIT binary patch delta 2351 zcmV+~3DEZGmk5-Y2!MnEv;qYKf9jW;HiG!8#GZ~TfpBaH1#DyuP}(xXKqeE0c1SxT z$#Np%*pB2R1nhU|v-HV&zrAniWIMF~Ky*5v?qhFnZ}+#m-?*T|A1b*)_6fkrU%5n| z7drO@pNOV>aw!klQ;q**69`VSScXdmiB?5P5sp=MSw5;x9}&kB{iTk{e=1G=;w*u3 z(SB#&w1DZFPBYiW9j398ZzTQ%8vN6d4`WeK;Gg69EAgh)yZhG0X1dGP=0fgPX%oVs zsQuukh!^d;;D`jx!#Y^uy@EgJ76a7KI{^lR}^2z;j!!a5c94Nud~y~u z$28&GzlMplyfX~xF={7tC;mw%2p?-V*u>gm^dsw6>R=?%io!Xb}Oj&+5(Jg*BXgeX18>fPdD6)DWx7Zng``u~Y}mx0l6L)?NqPkI+pV2*e022_p&%I#0l8vSzb= zz$tQ^(J9ROvPWade`oyv`PGt~sYU(SuJyl0PC)j+RT{K9_b(U^eutBgVgfRoXbzJQP2vxzq+ya zb}SmYqE?w!c%p8{9FZa8xzyML@f#Ip!;14S@*L>MHG~y4e-Zq;QwL8*@Y9c5*so-r zdHLcSyikvuX({E zHn?gIC(qB>EG#(M3x2VYcj_UmA?1#$`L0Yx7hN8CTl``we$j9Gg=N!rvsNy1I^9p2 zx-B@$e`Eyh0J=YU4y^_Cj3;)DGw&@K%8jz`SAE;W7bYXHX;Uwmjc$8~wzmFkjG? zUfT@@cJoBHD4=BS23U7&`AE7FIS6zfdGwI)f0T9m4qLstIa(fs;#kzqK&GEAmp(C7 z!d4An#uvd$<}iGnw>b}1X1G%^*GW9R5|!8YI=@J zf0Suh4px-{RH7EJ+9)Y^kxCu{nAUQ+GI1r9WL7p4fOJxoO#Xz=Pd&+%6(}Y&!o-B_ zfBtT-cT%?Pn$ZYAW0H!Zn%JbG#FScb!8>^KMJW#oc z!BML~H;iio|KSg|ckAfQufH9OgK=ZUpWlCchY^^L?1}wMJxBZ{vrPB82As0Ee|e90 zx3L!&UJ3jsiELh}Z_;edLoJERCo?0BqqQ~QS_HUq&_n|jfilLSK^MUygtU~vW#HOY z1GA3KdDSCWe8?@wn|Ee2Q{;IVKIFdi&<({m)gtv*Otl^#=)%qe>X-vP z8nDLM{{j502_s#Zaa=6jWFV<2_^(UYupg}%6Wypxy)i4_vj)x&2gV8EIsw+E&|+D= z*}WNoKD`^Cv?p4+A;GtPe;pbY+mht4{r-Ue*blz&c(JxxRb7?ABZw4JA6lEf`gStC zDy&Zz8<2C3@2ZC0DfOf4sv;HT8*jg7OtzMh_jSP0oOr0TW(A)^%Av79H`8er7jNKg za2-#*c?CT_smi^EbF}dk#xAV?UUZU(-g(iW%5zs0wz^7*k{%!zf1Q7lXxwJe>Eu3= zbu=+=##hcLB#4t+(6&58n)EZb{ zbXHjhkCA|9$JB{3f98tYdk*dkjf+aR#8k&McZ%W%mc(W)pZ!m-LO%SYAeQ{s4{ztk~Vf2FBkoFz~$ z+VAX}7BF4YY3ACv$23;*jl`cogP$GwFynX?EPqeVMdExe>6l)Ka3tc2!<(TQ78gADfAf*Jh$ZvS94oLixGXvCucEp zOgZQNHB6-Conc6iQ9GeS2}o#YT4Cx>qTZlCyz+M0Hf+do*HT)+p34MJ_9b$2t!Za1 z9|0p;gOWBf)9x}{khXBab3hKSF0OQ)VM&gy(EuHO;iBxRZW=k5*BuuRA zA|~cq>lg{(pEV&h#Okt}?VNHf)j{*^Wx2}Qn}GWfx`_jU7@;L$L}5Ya2^dY*Y_<QDBq|21*~vInlxpw)BvUdSMz73FMVhQhq^bV5YF zKoio?xaY%|&It#OGZLY3C2+&haDP?4&v*|=|8Ssh3FIB5mVe@0eu9mHR>=L;jlH*H z(a;sO%Cy3Bbvx#W3>nX*#vX{@s4yE=oPUw$Ku4}2tSAX#f0kpmmD6WgwbvLym@)Tf zWtM%6$5&Yy+(4Ik3tj46=n@};ui;^F5|7r!$qfHoGNvn{2u$Off-%)u*=3VkKEHrG zu!oCVnt|o-HeAGu_9(b3_f8~4;4bBhG4?nR2Pyj3bfk(1AshY-2Cn=dIiE}RL>LSgMsmPS6l2XuY zc0o*w?sA4Jz`{yIp`)|A#_WHy8YoF7+zvg_@F$LX{ezHC{QrLv@IV7_3T|3|F=Mn) zOfOziC32VoQ0&r7w0^~tSUanZSyikvuQ}nt5nMHgfBCa3HVbnOtbz+_uZJx!_>-64?=`u zw+ehKI)lU4wsOy8pB_jSCx%~p_**tfXA8%j2-$f86QxAOCb5mR7Lhrna6U=T^z)`6itBv_-LJR|b0v zGTb}N#vuI;OS(C|ef{g1VBMLUb@O^3e@++!ta()@^)f%=jn&Er9;ke!SX;FM3G*uh zYT*xdckA@cZ@-_3gK=xcSMNW*!w5{D@x*?no+H$eS*Ckk!zfwYyvMuS*bA>bKKf<7 zUUq54Upzl$i>-9erhjzQqIK>cJ>mcHNc{8e)rzBM8=$NRC*`28e+G&K zm5oA!#)4T0$twZUe`RZL;W5Fhp2AQ=-Zb8{iz_8#1~C)EONch}aEhqH)9e)Yxcd=G zaBY5Ij4J+Fa4)%QJY$E?bfpt=GAHP*Zsy{?vEzr-gP&slBX!ZJ}IN z9Gvcd<8rMr+k!30z~srnxn3)m?>?N!H^k1>-0aKrdR3;k55L>W?$lbLe?!J<34TpN z($?P@%UU#6jxO1&0c)K7WfO~7UG*8qt<+5hlA415x`YiI(3&yPjmp#;v+_M_;QVl4 z90@L#zcD2q%R0@(9XeNTd{Vt=(TJqx`dw;xy(^gw+u)D*kNx15$91*UpX#0sra+{a z`cV1w)wh%Js1}%tbN~=@wC7gjD zQlO4>oW?VV{ckPdFNH3*>GYup2FCL$v=qB6VW>_8dRC=y23}-DN)iRu6+fjMZdBRaOqGg#R5Ws37x4C*hHSs7rLvMSsAHfy3CwxW8b^K6Li>1ZZQt6zU)?!d;Wup?DRAi=r7Pch*XYwvL&?K$p?J~XJ zj6EMA&=lW<6~kiHg^k}_*|nYQi_!p_Is%^z^shyJ`KqoYb%#s&CcqT9j1NY^!g$I8 d3A9Ky{=lkuXH~pY74HC`{ufzf#kja41^~GOf4=|#