From 0536a9761fd2c9425833618b9ce6ce62ee05c1d8 Mon Sep 17 00:00:00 2001 From: NetMonkeyUS <46638771+NetMonkeyUS@users.noreply.github.com> Date: Fri, 9 Dec 2022 10:47:50 -0600 Subject: [PATCH 1/2] Added tooltips Added popper.min.js for boostrap tooltips. Added js at end of signup.php. --- .gitignore | 2 ++ config/db.php | 4 ++-- js/popper.min.js | 5 +++++ signup.php | 44 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 js/popper.min.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..96a0c80 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +lib/vendor/ diff --git a/config/db.php b/config/db.php index c893e29..148342d 100644 --- a/config/db.php +++ b/config/db.php @@ -9,8 +9,8 @@ } $hostname = "localhost"; - $username = "phpdemo"; - $password = "4Mu99BhzK8dr4vF1"; + $username = "root"; + $password = ""; $dbname = "positronx_db"; $connection = mysqli_connect($hostname, $username, $password, $dbname) or die("Database connection not established.") diff --git a/js/popper.min.js b/js/popper.min.js new file mode 100644 index 0000000..6078d9f --- /dev/null +++ b/js/popper.min.js @@ -0,0 +1,5 @@ +/* + Copyright (C) Federico Zivolo 2017 + Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). + */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:e?e.ownerDocument.documentElement:document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var l=a.commonAncestorContainer;if(e!==l&&t!==l||i.contains(n))return p(l)?l:r(l);var f=s(e);return f.host?d(f.host,t):d(e,s(t).host)}function a(e){var t=1=o.clientWidth&&i>=o.clientHeight}),l=0i[e]&&!t.escapeWithReference&&(n=_(p[o],i[e]-('right'===e?p.width:p.height))),pe({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=se({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=X,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var i;if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var n=o.element;if('string'==typeof n){if(n=e.instance.popper.querySelector(n),!n)return e;}else if(!e.instance.popper.contains(n))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',g=a?'bottom':'right',u=L(n)[l];d[g]-us[g]&&(e.offsets.popper[m]+=d[m]+u-s[g]),e.offsets.popper=c(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=J(_(s[l]-u,v),0),e.arrowElement=n,e.offsets.arrow=(i={},pe(i,m,Math.round(v)),pe(i,h,''),i),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(k(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=y(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=x(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case le.FLIP:p=[i,n];break;case le.CLOCKWISE:p=q(i);break;case le.COUNTERCLOCKWISE:p=q(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=x(i);var a=e.offsets.popper,l=e.offsets.reference,f=X,m='left'===i&&f(a.right)>f(l.left)||'right'===i&&f(a.left)f(l.top)||'bottom'===i&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===i&&h||'right'===i&&c||'top'===i&&g||'bottom'===i&&u,w=-1!==['top','bottom'].indexOf(i),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),y&&(r=K(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=se({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=C(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[o]-(s?n[p?'width':'height']:0),e.placement=x(t),e.offsets.popper=c(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.rightPHP User Registration System Example + + @@ -73,9 +75,51 @@ + + + From 8976abac956514f574616047008486ad9c7f4e0f Mon Sep 17 00:00:00 2001 From: NetMonkeyUS <46638771+NetMonkeyUS@users.noreply.github.com> Date: Fri, 9 Dec 2022 12:56:07 -0600 Subject: [PATCH 2/2] Removed cached gitignored files Not a good practice to have DS_Store and complied files. They are too 'heavy'. --- .DS_Store | Bin 6148 -> 0 bytes lib/vendor/autoload.php | 7 - lib/vendor/composer/ClassLoader.php | 445 - lib/vendor/composer/LICENSE | 21 - lib/vendor/composer/autoload_classmap.php | 9 - lib/vendor/composer/autoload_files.php | 14 - lib/vendor/composer/autoload_namespaces.php | 9 - lib/vendor/composer/autoload_psr4.php | 15 - lib/vendor/composer/autoload_real.php | 73 - lib/vendor/composer/autoload_static.php | 70 - lib/vendor/composer/installed.json | 489 - lib/vendor/doctrine/lexer/LICENSE | 19 - lib/vendor/doctrine/lexer/README.md | 9 - lib/vendor/doctrine/lexer/composer.json | 41 - .../Doctrine/Common/Lexer/AbstractLexer.php | 328 - .../EmailValidator/EmailLexer.php | 279 - .../EmailValidator/EmailParser.php | 137 - .../EmailValidator/EmailValidator.php | 67 - .../Exception/AtextAfterCFWS.php | 9 - .../EmailValidator/Exception/CRLFAtTheEnd.php | 9 - .../EmailValidator/Exception/CRLFX2.php | 9 - .../EmailValidator/Exception/CRNoLF.php | 9 - .../Exception/CharNotAllowed.php | 9 - .../Exception/CommaInDomain.php | 9 - .../Exception/ConsecutiveAt.php | 9 - .../Exception/ConsecutiveDot.php | 9 - .../Exception/DomainHyphened.php | 9 - .../EmailValidator/Exception/DotAtEnd.php | 9 - .../EmailValidator/Exception/DotAtStart.php | 9 - .../EmailValidator/Exception/ExpectingAT.php | 9 - .../Exception/ExpectingATEXT.php | 9 - .../Exception/ExpectingCTEXT.php | 9 - .../Exception/ExpectingDTEXT.php | 9 - .../Exception/ExpectingDomainLiteralClose.php | 9 - .../Exception/ExpectingQPair.php | 9 - .../EmailValidator/Exception/InvalidEmail.php | 14 - .../EmailValidator/Exception/NoDNSRecord.php | 9 - .../EmailValidator/Exception/NoDomainPart.php | 9 - .../EmailValidator/Exception/NoLocalPart.php | 9 - .../Exception/UnclosedComment.php | 9 - .../Exception/UnclosedQuotedString.php | 9 - .../Exception/UnopenedComment.php | 9 - .../EmailValidator/Parser/DomainPart.php | 414 - .../EmailValidator/Parser/LocalPart.php | 145 - .../EmailValidator/Parser/Parser.php | 249 - .../Validation/DNSCheckValidation.php | 77 - .../Validation/EmailValidation.php | 34 - .../Validation/Error/RFCWarnings.php | 11 - .../Validation/Error/SpoofEmail.php | 11 - .../Exception/EmptyValidationList.php | 16 - .../Validation/MultipleErrors.php | 32 - .../Validation/MultipleValidationWithAnd.php | 124 - .../Validation/NoRFCWarningsValidation.php | 41 - .../Validation/RFCValidation.php | 49 - .../Validation/SpoofCheckValidation.php | 51 - .../EmailValidator/Warning/AddressLiteral.php | 14 - .../EmailValidator/Warning/CFWSNearAt.php | 13 - .../EmailValidator/Warning/CFWSWithFWS.php | 13 - .../EmailValidator/Warning/Comment.php | 13 - .../Warning/DeprecatedComment.php | 13 - .../EmailValidator/Warning/DomainLiteral.php | 14 - .../EmailValidator/Warning/DomainTooLong.php | 14 - .../EmailValidator/Warning/EmailTooLong.php | 15 - .../EmailValidator/Warning/IPV6BadChar.php | 14 - .../EmailValidator/Warning/IPV6ColonEnd.php | 14 - .../EmailValidator/Warning/IPV6ColonStart.php | 14 - .../EmailValidator/Warning/IPV6Deprecated.php | 14 - .../Warning/IPV6DoubleColon.php | 14 - .../EmailValidator/Warning/IPV6GroupCount.php | 14 - .../EmailValidator/Warning/IPV6MaxGroups.php | 14 - .../EmailValidator/Warning/LabelTooLong.php | 14 - .../EmailValidator/Warning/LocalTooLong.php | 15 - .../EmailValidator/Warning/NoDNSMXRecord.php | 14 - .../EmailValidator/Warning/ObsoleteDTEXT.php | 14 - .../EmailValidator/Warning/QuotedPart.php | 17 - .../EmailValidator/Warning/QuotedString.php | 17 - .../EmailValidator/Warning/TLD.php | 13 - .../EmailValidator/Warning/Warning.php | 47 - lib/vendor/egulias/email-validator/LICENSE | 19 - lib/vendor/egulias/email-validator/README.md | 82 - .../egulias/email-validator/composer.json | 38 - .../egulias/email-validator/phpunit.xml.dist | 25 - .../email-validator/psalm.baseline.xml | 19 - lib/vendor/egulias/email-validator/psalm.xml | 19 - .../swiftmailer/swiftmailer/.gitattributes | 9 - .../swiftmailer/.github/ISSUE_TEMPLATE.md | 19 - .../.github/PULL_REQUEST_TEMPLATE.md | 14 - lib/vendor/swiftmailer/swiftmailer/.gitignore | 8 - .../swiftmailer/swiftmailer/.php_cs.dist | 16 - .../swiftmailer/swiftmailer/.travis.yml | 26 - lib/vendor/swiftmailer/swiftmailer/CHANGES | 354 - lib/vendor/swiftmailer/swiftmailer/LICENSE | 19 - lib/vendor/swiftmailer/swiftmailer/README.md | 19 - .../swiftmailer/swiftmailer/composer.json | 43 - .../swiftmailer/swiftmailer/doc/headers.rst | 621 - .../swiftmailer/swiftmailer/doc/index.rst | 12 - .../swiftmailer/doc/introduction.rst | 61 - .../swiftmailer/swiftmailer/doc/japanese.rst | 19 - .../swiftmailer/swiftmailer/doc/messages.rst | 947 -- .../swiftmailer/swiftmailer/doc/plugins.rst | 337 - .../swiftmailer/swiftmailer/doc/sending.rst | 453 - .../swiftmailer/lib/classes/Swift.php | 78 - .../lib/classes/Swift/AddressEncoder.php | 25 - .../AddressEncoder/IdnAddressEncoder.php | 50 - .../AddressEncoder/Utf8AddressEncoder.php | 36 - .../classes/Swift/AddressEncoderException.php | 32 - .../lib/classes/Swift/Attachment.php | 54 - .../AbstractFilterableInputStream.php | 176 - .../Swift/ByteStream/ArrayByteStream.php | 178 - .../Swift/ByteStream/FileByteStream.php | 216 - .../ByteStream/TemporaryFileByteStream.php | 42 - .../lib/classes/Swift/CharacterReader.php | 67 - .../GenericFixedWidthReader.php | 97 - .../Swift/CharacterReader/UsAsciiReader.php | 84 - .../Swift/CharacterReader/Utf8Reader.php | 176 - .../classes/Swift/CharacterReaderFactory.php | 26 - .../SimpleCharacterReaderFactory.php | 124 - .../lib/classes/Swift/CharacterStream.php | 89 - .../CharacterStream/ArrayCharacterStream.php | 291 - .../CharacterStream/NgCharacterStream.php | 262 - .../lib/classes/Swift/ConfigurableSpool.php | 63 - .../lib/classes/Swift/DependencyContainer.php | 391 - .../lib/classes/Swift/DependencyException.php | 27 - .../lib/classes/Swift/EmbeddedFile.php | 53 - .../swiftmailer/lib/classes/Swift/Encoder.php | 28 - .../classes/Swift/Encoder/Base64Encoder.php | 58 - .../lib/classes/Swift/Encoder/QpEncoder.php | 300 - .../classes/Swift/Encoder/Rfc2231Encoder.php | 90 - .../lib/classes/Swift/Events/CommandEvent.php | 64 - .../classes/Swift/Events/CommandListener.php | 24 - .../lib/classes/Swift/Events/Event.php | 38 - .../classes/Swift/Events/EventDispatcher.php | 83 - .../classes/Swift/Events/EventListener.php | 18 - .../lib/classes/Swift/Events/EventObject.php | 61 - .../classes/Swift/Events/ResponseEvent.php | 64 - .../classes/Swift/Events/ResponseListener.php | 24 - .../lib/classes/Swift/Events/SendEvent.php | 126 - .../lib/classes/Swift/Events/SendListener.php | 31 - .../Swift/Events/SimpleEventDispatcher.php | 143 - .../Swift/Events/TransportChangeEvent.php | 27 - .../Swift/Events/TransportChangeListener.php | 45 - .../Swift/Events/TransportExceptionEvent.php | 43 - .../Events/TransportExceptionListener.php | 24 - .../lib/classes/Swift/FailoverTransport.php | 33 - .../lib/classes/Swift/FileSpool.php | 208 - .../lib/classes/Swift/FileStream.php | 24 - .../lib/classes/Swift/Filterable.php | 32 - .../lib/classes/Swift/IdGenerator.php | 22 - .../swiftmailer/lib/classes/Swift/Image.php | 43 - .../lib/classes/Swift/InputByteStream.php | 75 - .../lib/classes/Swift/IoException.php | 28 - .../lib/classes/Swift/KeyCache.php | 105 - .../classes/Swift/KeyCache/ArrayKeyCache.php | 203 - .../classes/Swift/KeyCache/DiskKeyCache.php | 295 - .../Swift/KeyCache/KeyCacheInputStream.php | 51 - .../classes/Swift/KeyCache/NullKeyCache.php | 113 - .../KeyCache/SimpleKeyCacheInputStream.php | 123 - .../classes/Swift/LoadBalancedTransport.php | 33 - .../swiftmailer/lib/classes/Swift/Mailer.php | 98 - .../Swift/Mailer/ArrayRecipientIterator.php | 53 - .../Swift/Mailer/RecipientIterator.php | 32 - .../lib/classes/Swift/MemorySpool.php | 110 - .../swiftmailer/lib/classes/Swift/Message.php | 279 - .../lib/classes/Swift/Mime/Attachment.php | 144 - .../classes/Swift/Mime/CharsetObserver.php | 24 - .../lib/classes/Swift/Mime/ContentEncoder.php | 34 - .../ContentEncoder/Base64ContentEncoder.php | 101 - .../ContentEncoder/NativeQpContentEncoder.php | 123 - .../ContentEncoder/NullContentEncoder.php | 79 - .../ContentEncoder/PlainContentEncoder.php | 164 - .../Mime/ContentEncoder/QpContentEncoder.php | 134 - .../ContentEncoder/QpContentEncoderProxy.php | 96 - .../Mime/ContentEncoder/RawContentEncoder.php | 65 - .../lib/classes/Swift/Mime/EmbeddedFile.php | 41 - .../classes/Swift/Mime/EncodingObserver.php | 24 - .../lib/classes/Swift/Mime/Header.php | 93 - .../lib/classes/Swift/Mime/HeaderEncoder.php | 24 - .../HeaderEncoder/Base64HeaderEncoder.php | 55 - .../Mime/HeaderEncoder/QpHeaderEncoder.php | 65 - .../Swift/Mime/Headers/AbstractHeader.php | 476 - .../classes/Swift/Mime/Headers/DateHeader.php | 113 - .../Mime/Headers/IdentificationHeader.php | 186 - .../Swift/Mime/Headers/MailboxHeader.php | 360 - .../Swift/Mime/Headers/OpenDKIMHeader.php | 135 - .../Mime/Headers/ParameterizedHeader.php | 255 - .../classes/Swift/Mime/Headers/PathHeader.php | 155 - .../Swift/Mime/Headers/UnstructuredHeader.php | 109 - .../lib/classes/Swift/Mime/IdGenerator.php | 54 - .../lib/classes/Swift/Mime/MimePart.php | 199 - .../Swift/Mime/SimpleHeaderFactory.php | 195 - .../classes/Swift/Mime/SimpleHeaderSet.php | 399 - .../lib/classes/Swift/Mime/SimpleMessage.php | 642 - .../classes/Swift/Mime/SimpleMimeEntity.php | 820 - .../lib/classes/Swift/MimePart.php | 45 - .../lib/classes/Swift/NullTransport.php | 26 - .../lib/classes/Swift/OutputByteStream.php | 46 - .../classes/Swift/Plugins/AntiFloodPlugin.php | 137 - .../Swift/Plugins/BandwidthMonitorPlugin.php | 154 - .../Swift/Plugins/Decorator/Replacements.php | 31 - .../classes/Swift/Plugins/DecoratorPlugin.php | 200 - .../Swift/Plugins/ImpersonatePlugin.php | 65 - .../lib/classes/Swift/Plugins/Logger.php | 36 - .../classes/Swift/Plugins/LoggerPlugin.php | 126 - .../Swift/Plugins/Loggers/ArrayLogger.php | 72 - .../Swift/Plugins/Loggers/EchoLogger.php | 58 - .../classes/Swift/Plugins/MessageLogger.php | 70 - .../Swift/Plugins/Pop/Pop3Connection.php | 31 - .../Swift/Plugins/Pop/Pop3Exception.php | 27 - .../Swift/Plugins/PopBeforeSmtpPlugin.php | 254 - .../Swift/Plugins/RedirectingPlugin.php | 201 - .../lib/classes/Swift/Plugins/Reporter.php | 32 - .../classes/Swift/Plugins/ReporterPlugin.php | 57 - .../Swift/Plugins/Reporters/HitReporter.php | 58 - .../Swift/Plugins/Reporters/HtmlReporter.php | 38 - .../lib/classes/Swift/Plugins/Sleeper.php | 24 - .../classes/Swift/Plugins/ThrottlerPlugin.php | 196 - .../lib/classes/Swift/Plugins/Timer.php | 24 - .../lib/classes/Swift/Preferences.php | 100 - .../Swift/ReplacementFilterFactory.php | 27 - .../classes/Swift/RfcComplianceException.php | 27 - .../lib/classes/Swift/SendmailTransport.php | 33 - .../swiftmailer/lib/classes/Swift/Signer.php | 19 - .../lib/classes/Swift/Signers/BodySigner.php | 33 - .../lib/classes/Swift/Signers/DKIMSigner.php | 682 - .../classes/Swift/Signers/DomainKeySigner.php | 504 - .../classes/Swift/Signers/HeaderSigner.php | 65 - .../classes/Swift/Signers/OpenDKIMSigner.php | 183 - .../lib/classes/Swift/Signers/SMimeSigner.php | 542 - .../lib/classes/Swift/SmtpTransport.php | 42 - .../swiftmailer/lib/classes/Swift/Spool.php | 53 - .../lib/classes/Swift/SpoolTransport.php | 33 - .../lib/classes/Swift/StreamFilter.php | 35 - .../ByteArrayReplacementFilter.php | 166 - .../StreamFilters/StringReplacementFilter.php | 70 - .../StringReplacementFilterFactory.php | 45 - .../lib/classes/Swift/SwiftException.php | 28 - .../lib/classes/Swift/Transport.php | 79 - .../Swift/Transport/AbstractSmtpTransport.php | 543 - .../Esmtp/Auth/CramMd5Authenticator.php | 75 - .../Esmtp/Auth/LoginAuthenticator.php | 45 - .../Esmtp/Auth/NTLMAuthenticator.php | 681 - .../Esmtp/Auth/PlainAuthenticator.php | 44 - .../Esmtp/Auth/XOAuth2Authenticator.php | 64 - .../Swift/Transport/Esmtp/AuthHandler.php | 268 - .../Swift/Transport/Esmtp/Authenticator.php | 37 - .../Transport/Esmtp/EightBitMimeHandler.php | 113 - .../Swift/Transport/Esmtp/SmtpUtf8Handler.php | 107 - .../classes/Swift/Transport/EsmtpHandler.php | 86 - .../Swift/Transport/EsmtpTransport.php | 446 - .../Swift/Transport/FailoverTransport.php | 105 - .../lib/classes/Swift/Transport/IoBuffer.php | 67 - .../Swift/Transport/LoadBalancedTransport.php | 194 - .../classes/Swift/Transport/NullTransport.php | 98 - .../Swift/Transport/SendmailTransport.php | 158 - .../lib/classes/Swift/Transport/SmtpAgent.php | 36 - .../Swift/Transport/SpoolTransport.php | 120 - .../classes/Swift/Transport/StreamBuffer.php | 329 - .../lib/classes/Swift/TransportException.php | 28 - .../lib/dependency_maps/cache_deps.php | 23 - .../lib/dependency_maps/message_deps.php | 9 - .../lib/dependency_maps/mime_deps.php | 134 - .../lib/dependency_maps/transport_deps.php | 97 - .../swiftmailer/lib/mime_types.php | 1007 -- .../swiftmailer/lib/preferences.php | 19 - .../swiftmailer/lib/swift_required.php | 22 - .../lib/swiftmailer_generate_mimes_config.php | 182 - .../swiftmailer/swiftmailer/phpunit.xml.dist | 38 - .../tests/IdenticalBinaryConstraint.php | 62 - .../swiftmailer/tests/StreamCollector.php | 11 - .../tests/SwiftMailerSmokeTestCase.php | 46 - .../swiftmailer/tests/SwiftMailerTestCase.php | 38 - .../_samples/charsets/iso-2022-jp/one.txt | 11 - .../_samples/charsets/iso-8859-1/one.txt | 19 - .../tests/_samples/charsets/utf-8/one.txt | 22 - .../tests/_samples/charsets/utf-8/three.txt | 45 - .../tests/_samples/charsets/utf-8/two.txt | 3 - .../tests/_samples/dkim/dkim.test.priv | 15 - .../tests/_samples/dkim/dkim.test.pub | 6 - .../swiftmailer/tests/_samples/files/data.txt | 1 - .../tests/_samples/files/swiftmailer.png | Bin 3194 -> 0 bytes .../tests/_samples/files/textfile.zip | Bin 202 -> 0 bytes .../swiftmailer/tests/_samples/smime/CA.srl | 1 - .../swiftmailer/tests/_samples/smime/ca.crt | 21 - .../swiftmailer/tests/_samples/smime/ca.key | 27 - .../tests/_samples/smime/create-cert.sh | 40 - .../tests/_samples/smime/encrypt.crt | 19 - .../tests/_samples/smime/encrypt.key | 27 - .../tests/_samples/smime/encrypt2.crt | 19 - .../tests/_samples/smime/encrypt2.key | 27 - .../tests/_samples/smime/intermediate.crt | 19 - .../tests/_samples/smime/intermediate.key | 27 - .../swiftmailer/tests/_samples/smime/sign.crt | 19 - .../swiftmailer/tests/_samples/smime/sign.key | 27 - .../tests/_samples/smime/sign2.crt | 19 - .../tests/_samples/smime/sign2.key | 27 - .../tests/acceptance.conf.php.default | 37 - .../Swift/AttachmentAcceptanceTest.php | 12 - .../FileByteStreamAcceptanceTest.php | 162 - ...leCharacterReaderFactoryAcceptanceTest.php | 179 - .../DependencyContainerAcceptanceTest.php | 22 - .../Swift/EmbeddedFileAcceptanceTest.php | 12 - .../Encoder/Base64EncoderAcceptanceTest.php | 45 - .../Swift/Encoder/QpEncoderAcceptanceTest.php | 54 - .../Encoder/Rfc2231EncoderAcceptanceTest.php | 50 - .../KeyCache/ArrayKeyCacheAcceptanceTest.php | 173 - .../KeyCache/DiskKeyCacheAcceptanceTest.php | 173 - .../Swift/MessageAcceptanceTest.php | 55 - .../Swift/Mime/AttachmentAcceptanceTest.php | 126 - .../Base64ContentEncoderAcceptanceTest.php | 56 - .../NativeQpContentEncoderAcceptanceTest.php | 88 - .../PlainContentEncoderAcceptanceTest.php | 88 - .../QpContentEncoderAcceptanceTest.php | 160 - .../Swift/Mime/EmbeddedFileAcceptanceTest.php | 139 - .../Base64HeaderEncoderAcceptanceTest.php | 32 - .../Swift/Mime/MimePartAcceptanceTest.php | 130 - .../Mime/SimpleMessageAcceptanceTest.php | 1250 -- .../Swift/MimePartAcceptanceTest.php | 15 - .../AbstractStreamBufferAcceptanceTest.php | 131 - .../BasicSocketAcceptanceTest.php | 33 - .../StreamBuffer/ProcessAcceptanceTest.php | 26 - .../StreamBuffer/SocketTimeoutTest.php | 65 - .../StreamBuffer/SslSocketAcceptanceTest.php | 40 - .../StreamBuffer/TlsSocketAcceptanceTest.php | 39 - .../swiftmailer/tests/bootstrap.php | 21 - .../tests/bug/Swift/Bug111Test.php | 42 - .../tests/bug/Swift/Bug118Test.php | 20 - .../tests/bug/Swift/Bug206Test.php | 40 - .../tests/bug/Swift/Bug274Test.php | 25 - .../swiftmailer/tests/bug/Swift/Bug34Test.php | 75 - .../swiftmailer/tests/bug/Swift/Bug35Test.php | 73 - .../swiftmailer/tests/bug/Swift/Bug38Test.php | 192 - .../tests/bug/Swift/Bug518Test.php | 38 - .../swiftmailer/tests/bug/Swift/Bug51Test.php | 110 - .../tests/bug/Swift/Bug534Test.php | 38 - .../tests/bug/Swift/Bug650Test.php | 38 - .../swiftmailer/tests/bug/Swift/Bug71Test.php | 20 - .../swiftmailer/tests/bug/Swift/Bug76Test.php | 71 - ...FileByteStreamConsecutiveReadCallsTest.php | 18 - .../tests/fixtures/MimeEntityFixture.php | 67 - .../swiftmailer/tests/smoke.conf.php.default | 63 - .../smoke/Swift/Smoke/AttachmentSmokeTest.php | 33 - .../smoke/Swift/Smoke/BasicSmokeTest.php | 23 - .../Smoke/HtmlWithAttachmentSmokeTest.php | 33 - .../Swift/Smoke/InternationalSmokeTest.php | 40 - .../Swift/ByteStream/ArrayByteStreamTest.php | 202 - .../GenericFixedWidthReaderTest.php | 43 - .../CharacterReader/UsAsciiReaderTest.php | 52 - .../Swift/CharacterReader/Utf8ReaderTest.php | 65 - .../ArrayCharacterStreamTest.php | 358 - .../unit/Swift/DependencyContainerTest.php | 191 - .../unit/Swift/Encoder/Base64EncoderTest.php | 173 - .../unit/Swift/Encoder/QpEncoderTest.php | 400 - .../unit/Swift/Encoder/Rfc2231EncoderTest.php | 141 - .../unit/Swift/Events/CommandEventTest.php | 34 - .../unit/Swift/Events/EventObjectTest.php | 32 - .../unit/Swift/Events/ResponseEventTest.php | 38 - .../tests/unit/Swift/Events/SendEventTest.php | 96 - .../Events/SimpleEventDispatcherTest.php | 142 - .../Swift/Events/TransportChangeEventTest.php | 30 - .../Events/TransportExceptionEventTest.php | 41 - .../unit/Swift/KeyCache/ArrayKeyCacheTest.php | 240 - .../SimpleKeyCacheInputStreamTest.php | 73 - .../Mailer/ArrayRecipientIteratorTest.php | 42 - .../tests/unit/Swift/MailerTest.php | 145 - .../tests/unit/Swift/MessageTest.php | 133 - .../Swift/Mime/AbstractMimeEntityTest.php | 1092 -- .../tests/unit/Swift/Mime/AttachmentTest.php | 321 - .../Base64ContentEncoderTest.php | 323 - .../PlainContentEncoderTest.php | 171 - .../ContentEncoder/QpContentEncoderTest.php | 516 - .../unit/Swift/Mime/EmbeddedFileTest.php | 59 - .../HeaderEncoder/Base64HeaderEncoderTest.php | 13 - .../HeaderEncoder/QpHeaderEncoderTest.php | 221 - .../Swift/Mime/Headers/DateHeaderTest.php | 90 - .../Mime/Headers/IdentificationHeaderTest.php | 192 - .../Swift/Mime/Headers/MailboxHeaderTest.php | 367 - .../Mime/Headers/ParameterizedHeaderTest.php | 396 - .../Swift/Mime/Headers/PathHeaderTest.php | 95 - .../Mime/Headers/UnstructuredHeaderTest.php | 353 - .../tests/unit/Swift/Mime/IdGeneratorTest.php | 32 - .../tests/unit/Swift/Mime/MimePartTest.php | 234 - .../Swift/Mime/SimpleHeaderFactoryTest.php | 169 - .../unit/Swift/Mime/SimpleHeaderSetTest.php | 734 - .../unit/Swift/Mime/SimpleMessageTest.php | 837 - .../unit/Swift/Mime/SimpleMimeEntityTest.php | 12 - .../Swift/Plugins/AntiFloodPluginTest.php | 93 - .../Plugins/BandwidthMonitorPluginTest.php | 128 - .../Swift/Plugins/DecoratorPluginTest.php | 284 - .../unit/Swift/Plugins/LoggerPluginTest.php | 188 - .../Swift/Plugins/Loggers/ArrayLoggerTest.php | 65 - .../Swift/Plugins/Loggers/EchoLoggerTest.php | 24 - .../Swift/Plugins/PopBeforeSmtpPluginTest.php | 101 - .../Swift/Plugins/RedirectingPluginTest.php | 183 - .../unit/Swift/Plugins/ReporterPluginTest.php | 86 - .../Plugins/Reporters/HitReporterTest.php | 64 - .../Plugins/Reporters/HtmlReporterTest.php | 54 - .../Swift/Plugins/ThrottlerPluginTest.php | 102 - .../unit/Swift/Signers/DKIMSignerTest.php | 220 - .../unit/Swift/Signers/OpenDKIMSignerTest.php | 45 - .../unit/Swift/Signers/SMimeSignerTest.php | 653 - .../ByteArrayReplacementFilterTest.php | 129 - .../StringReplacementFilterFactoryTest.php | 36 - .../StringReplacementFilterTest.php | 59 - .../AbstractSmtpEventSupportTest.php | 558 - .../unit/Swift/Transport/AbstractSmtpTest.php | 1400 -- .../Esmtp/Auth/CramMd5AuthenticatorTest.php | 65 - .../Esmtp/Auth/LoginAuthenticatorTest.php | 65 - .../Esmtp/Auth/NTLMAuthenticatorTest.php | 204 - .../Esmtp/Auth/PlainAuthenticatorTest.php | 68 - .../Swift/Transport/Esmtp/AuthHandlerTest.php | 165 - .../EsmtpTransport/ExtensionSupportTest.php | 561 - .../Swift/Transport/EsmtpTransportTest.php | 651 - .../Swift/Transport/FailoverTransportTest.php | 600 - .../Transport/LoadBalancedTransportTest.php | 838 - .../Swift/Transport/SendmailTransportTest.php | 150 - .../unit/Swift/Transport/StreamBufferTest.php | 43 - lib/vendor/symfony/polyfill-iconv/Iconv.php | 741 - lib/vendor/symfony/polyfill-iconv/LICENSE | 19 - lib/vendor/symfony/polyfill-iconv/README.md | 14 - .../Resources/charset/from.big5.php | 13719 ---------------- .../Resources/charset/from.cp037.php | Bin 3779 -> 0 bytes .../Resources/charset/from.cp1006.php | Bin 3860 -> 0 bytes .../Resources/charset/from.cp1026.php | Bin 3779 -> 0 bytes .../Resources/charset/from.cp424.php | Bin 3210 -> 0 bytes .../Resources/charset/from.cp437.php | Bin 3841 -> 0 bytes .../Resources/charset/from.cp500.php | Bin 3779 -> 0 bytes .../Resources/charset/from.cp737.php | Bin 3834 -> 0 bytes .../Resources/charset/from.cp775.php | Bin 3815 -> 0 bytes .../Resources/charset/from.cp850.php | Bin 3809 -> 0 bytes .../Resources/charset/from.cp852.php | Bin 3808 -> 0 bytes .../Resources/charset/from.cp855.php | Bin 3809 -> 0 bytes .../Resources/charset/from.cp856.php | Bin 3194 -> 0 bytes .../Resources/charset/from.cp857.php | Bin 3763 -> 0 bytes .../Resources/charset/from.cp860.php | Bin 3840 -> 0 bytes .../Resources/charset/from.cp861.php | Bin 3841 -> 0 bytes .../Resources/charset/from.cp862.php | Bin 3841 -> 0 bytes .../Resources/charset/from.cp863.php | Bin 3841 -> 0 bytes .../Resources/charset/from.cp864.php | Bin 3779 -> 0 bytes .../Resources/charset/from.cp865.php | Bin 3841 -> 0 bytes .../Resources/charset/from.cp866.php | Bin 3831 -> 0 bytes .../Resources/charset/from.cp869.php | Bin 3676 -> 0 bytes .../Resources/charset/from.cp874.php | Bin 3410 -> 0 bytes .../Resources/charset/from.cp875.php | Bin 3776 -> 0 bytes .../Resources/charset/from.cp932.php | Bin 134095 -> 0 bytes .../Resources/charset/from.cp936.php | Bin 372283 -> 0 bytes .../Resources/charset/from.cp949.php | Bin 291504 -> 0 bytes .../Resources/charset/from.cp950.php | Bin 231436 -> 0 bytes .../Resources/charset/from.iso-8859-1.php | Bin 3779 -> 0 bytes .../Resources/charset/from.iso-8859-10.php | Bin 3780 -> 0 bytes .../Resources/charset/from.iso-8859-11.php | Bin 3746 -> 0 bytes .../Resources/charset/from.iso-8859-13.php | Bin 3783 -> 0 bytes .../Resources/charset/from.iso-8859-14.php | Bin 3801 -> 0 bytes .../Resources/charset/from.iso-8859-15.php | Bin 3780 -> 0 bytes .../Resources/charset/from.iso-8859-16.php | Bin 3782 -> 0 bytes .../Resources/charset/from.iso-8859-2.php | Bin 3779 -> 0 bytes .../Resources/charset/from.iso-8859-3.php | Bin 3674 -> 0 bytes .../Resources/charset/from.iso-8859-4.php | Bin 3779 -> 0 bytes .../Resources/charset/from.iso-8859-5.php | Bin 3780 -> 0 bytes .../Resources/charset/from.iso-8859-6.php | Bin 3104 -> 0 bytes .../Resources/charset/from.iso-8859-7.php | Bin 3692 -> 0 bytes .../Resources/charset/from.iso-8859-8.php | Bin 3242 -> 0 bytes .../Resources/charset/from.iso-8859-9.php | Bin 3779 -> 0 bytes .../Resources/charset/from.koi8-r.php | Bin 3835 -> 0 bytes .../Resources/charset/from.koi8-u.php | Bin 3827 -> 0 bytes .../Resources/charset/from.us-ascii.php | Bin 1859 -> 0 bytes .../Resources/charset/from.windows-1250.php | Bin 3721 -> 0 bytes .../Resources/charset/from.windows-1251.php | Bin 3782 -> 0 bytes .../Resources/charset/from.windows-1252.php | Bin 3721 -> 0 bytes .../Resources/charset/from.windows-1253.php | Bin 3542 -> 0 bytes .../Resources/charset/from.windows-1254.php | Bin 3691 -> 0 bytes .../Resources/charset/from.windows-1255.php | Bin 3454 -> 0 bytes .../Resources/charset/from.windows-1256.php | Bin 3800 -> 0 bytes .../Resources/charset/from.windows-1257.php | Bin 3616 -> 0 bytes .../Resources/charset/from.windows-1258.php | Bin 3662 -> 0 bytes .../Resources/charset/translit.php | 4098 ----- .../symfony/polyfill-iconv/bootstrap.php | 84 - .../symfony/polyfill-iconv/composer.json | 34 - lib/vendor/symfony/polyfill-intl-idn/Idn.php | 287 - lib/vendor/symfony/polyfill-intl-idn/LICENSE | 19 - .../symfony/polyfill-intl-idn/README.md | 12 - .../symfony/polyfill-intl-idn/bootstrap.php | 141 - .../symfony/polyfill-intl-idn/composer.json | 36 - lib/vendor/symfony/polyfill-mbstring/LICENSE | 19 - .../symfony/polyfill-mbstring/Mbstring.php | 847 - .../symfony/polyfill-mbstring/README.md | 13 - .../Resources/unidata/lowerCase.php | 1096 -- .../Resources/unidata/titleCaseRegexp.php | 5 - .../Resources/unidata/upperCase.php | 1104 -- .../symfony/polyfill-mbstring/bootstrap.php | 141 - .../symfony/polyfill-mbstring/composer.json | 34 - lib/vendor/symfony/polyfill-php72/LICENSE | 19 - lib/vendor/symfony/polyfill-php72/Php72.php | 217 - lib/vendor/symfony/polyfill-php72/README.md | 28 - .../symfony/polyfill-php72/bootstrap.php | 57 - .../symfony/polyfill-php72/composer.json | 31 - 495 files changed, 72910 deletions(-) delete mode 100644 .DS_Store delete mode 100644 lib/vendor/autoload.php delete mode 100644 lib/vendor/composer/ClassLoader.php delete mode 100644 lib/vendor/composer/LICENSE delete mode 100644 lib/vendor/composer/autoload_classmap.php delete mode 100644 lib/vendor/composer/autoload_files.php delete mode 100644 lib/vendor/composer/autoload_namespaces.php delete mode 100644 lib/vendor/composer/autoload_psr4.php delete mode 100644 lib/vendor/composer/autoload_real.php delete mode 100644 lib/vendor/composer/autoload_static.php delete mode 100644 lib/vendor/composer/installed.json delete mode 100644 lib/vendor/doctrine/lexer/LICENSE delete mode 100644 lib/vendor/doctrine/lexer/README.md delete mode 100644 lib/vendor/doctrine/lexer/composer.json delete mode 100644 lib/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/EmailLexer.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/EmailParser.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/EmailValidator.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/CRLFAtTheEnd.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/CRLFX2.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/CRNoLF.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/CharNotAllowed.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/CommaInDomain.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/ConsecutiveAt.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/ConsecutiveDot.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/DomainHyphened.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/DotAtEnd.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/DotAtStart.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/ExpectingAT.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/ExpectingATEXT.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/ExpectingCTEXT.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/ExpectingDTEXT.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/ExpectingDomainLiteralClose.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/InvalidEmail.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/NoDNSRecord.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/NoDomainPart.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/NoLocalPart.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/UnclosedComment.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/UnclosedQuotedString.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Exception/UnopenedComment.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Parser/DomainPart.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Validation/EmailValidation.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Validation/Error/RFCWarnings.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Validation/Error/SpoofEmail.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Validation/Exception/EmptyValidationList.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Validation/MultipleErrors.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/Comment.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/TLD.php delete mode 100644 lib/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php delete mode 100644 lib/vendor/egulias/email-validator/LICENSE delete mode 100644 lib/vendor/egulias/email-validator/README.md delete mode 100644 lib/vendor/egulias/email-validator/composer.json delete mode 100644 lib/vendor/egulias/email-validator/phpunit.xml.dist delete mode 100644 lib/vendor/egulias/email-validator/psalm.baseline.xml delete mode 100644 lib/vendor/egulias/email-validator/psalm.xml delete mode 100644 lib/vendor/swiftmailer/swiftmailer/.gitattributes delete mode 100644 lib/vendor/swiftmailer/swiftmailer/.github/ISSUE_TEMPLATE.md delete mode 100644 lib/vendor/swiftmailer/swiftmailer/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 lib/vendor/swiftmailer/swiftmailer/.gitignore delete mode 100644 lib/vendor/swiftmailer/swiftmailer/.php_cs.dist delete mode 100644 lib/vendor/swiftmailer/swiftmailer/.travis.yml delete mode 100644 lib/vendor/swiftmailer/swiftmailer/CHANGES delete mode 100644 lib/vendor/swiftmailer/swiftmailer/LICENSE delete mode 100644 lib/vendor/swiftmailer/swiftmailer/README.md delete mode 100644 lib/vendor/swiftmailer/swiftmailer/composer.json delete mode 100644 lib/vendor/swiftmailer/swiftmailer/doc/headers.rst delete mode 100644 lib/vendor/swiftmailer/swiftmailer/doc/index.rst delete mode 100644 lib/vendor/swiftmailer/swiftmailer/doc/introduction.rst delete mode 100644 lib/vendor/swiftmailer/swiftmailer/doc/japanese.rst delete mode 100644 lib/vendor/swiftmailer/swiftmailer/doc/messages.rst delete mode 100644 lib/vendor/swiftmailer/swiftmailer/doc/plugins.rst delete mode 100644 lib/vendor/swiftmailer/swiftmailer/doc/sending.rst delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/AddressEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/AddressEncoder/IdnAddressEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/AddressEncoder/Utf8AddressEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/AddressEncoderException.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Attachment.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ConfigurableSpool.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyContainer.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyException.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/EmbeddedFile.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandEvent.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandListener.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/Event.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventListener.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventObject.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseListener.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendEvent.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendListener.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FailoverTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileSpool.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Filterable.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/IdGenerator.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Image.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/InputByteStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/IoException.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MemorySpool.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Attachment.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NullContentEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Header.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimePart.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/OutputByteStream.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Logger.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Exception.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporter.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Timer.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Preferences.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/RfcComplianceException.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SendmailTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signer.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/BodySigner.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Spool.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SpoolTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilter.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SwiftException.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/NullTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/TransportException.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/cache_deps.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/message_deps.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/mime_deps.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/transport_deps.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/mime_types.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/preferences.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/swift_required.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/lib/swiftmailer_generate_mimes_config.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/phpunit.xml.dist delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/IdenticalBinaryConstraint.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/StreamCollector.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/SwiftMailerSmokeTestCase.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/SwiftMailerTestCase.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/charsets/iso-2022-jp/one.txt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/charsets/iso-8859-1/one.txt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/charsets/utf-8/one.txt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/charsets/utf-8/three.txt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/charsets/utf-8/two.txt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/dkim/dkim.test.priv delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/dkim/dkim.test.pub delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/files/data.txt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/files/swiftmailer.png delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/files/textfile.zip delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/CA.srl delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/ca.crt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/ca.key delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/create-cert.sh delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/encrypt.crt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/encrypt.key delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/encrypt2.crt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/encrypt2.key delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/intermediate.crt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/intermediate.key delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/sign.crt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/sign.key delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/sign2.crt delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/_samples/smime/sign2.key delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance.conf.php.default delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/AttachmentAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/ByteStream/FileByteStreamAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/CharacterReaderFactory/SimpleCharacterReaderFactoryAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/DependencyContainerAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EmbeddedFileAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Base64EncoderAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/QpEncoderAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Rfc2231EncoderAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/ArrayKeyCacheAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/DiskKeyCacheAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MessageAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/AttachmentAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/Base64ContentEncoderAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/NativeQpContentEncoderAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/PlainContentEncoderAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/QpContentEncoderAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/EmbeddedFileAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/HeaderEncoder/Base64HeaderEncoderAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/MimePartAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/SimpleMessageAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MimePartAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/AbstractStreamBufferAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/BasicSocketAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/ProcessAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SocketTimeoutTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SslSocketAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/TlsSocketAcceptanceTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bootstrap.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug111Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug118Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug206Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug274Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug34Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug35Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug38Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug518Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug534Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug650Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug71Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug76Test.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/BugFileByteStreamConsecutiveReadCallsTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/fixtures/MimeEntityFixture.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/smoke.conf.php.default delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/AttachmentSmokeTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/BasicSmokeTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/HtmlWithAttachmentSmokeTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/InternationalSmokeTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/ByteStream/ArrayByteStreamTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/GenericFixedWidthReaderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/UsAsciiReaderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/Utf8ReaderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterStream/ArrayCharacterStreamTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/DependencyContainerTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Base64EncoderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/QpEncoderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Rfc2231EncoderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/CommandEventTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/EventObjectTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/ResponseEventTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SendEventTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SimpleEventDispatcherTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportChangeEventTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportExceptionEventTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/ArrayKeyCacheTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/SimpleKeyCacheInputStreamTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mailer/ArrayRecipientIteratorTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MailerTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MessageTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AbstractMimeEntityTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AttachmentTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/Base64ContentEncoderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/PlainContentEncoderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/QpContentEncoderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/EmbeddedFileTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/Base64HeaderEncoderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/QpHeaderEncoderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/DateHeaderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/IdentificationHeaderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/MailboxHeaderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/ParameterizedHeaderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/PathHeaderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/UnstructuredHeaderTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/IdGeneratorTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/MimePartTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderFactoryTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderSetTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMessageTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMimeEntityTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/AntiFloodPluginTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/BandwidthMonitorPluginTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/DecoratorPluginTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/LoggerPluginTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/ArrayLoggerTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/EchoLoggerTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/PopBeforeSmtpPluginTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/RedirectingPluginTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ReporterPluginTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HitReporterTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HtmlReporterTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/DKIMSignerTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/OpenDKIMSignerTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/SMimeSignerTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/ByteArrayReplacementFilterTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterFactoryTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpEventSupportTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/CramMd5AuthenticatorTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/LoginAuthenticatorTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/NTLMAuthenticatorTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/PlainAuthenticatorTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/AuthHandlerTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransport/ExtensionSupportTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransportTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/FailoverTransportTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/LoadBalancedTransportTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/SendmailTransportTest.php delete mode 100644 lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/StreamBufferTest.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Iconv.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/LICENSE delete mode 100644 lib/vendor/symfony/polyfill-iconv/README.md delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/Resources/charset/translit.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/bootstrap.php delete mode 100644 lib/vendor/symfony/polyfill-iconv/composer.json delete mode 100644 lib/vendor/symfony/polyfill-intl-idn/Idn.php delete mode 100644 lib/vendor/symfony/polyfill-intl-idn/LICENSE delete mode 100644 lib/vendor/symfony/polyfill-intl-idn/README.md delete mode 100644 lib/vendor/symfony/polyfill-intl-idn/bootstrap.php delete mode 100644 lib/vendor/symfony/polyfill-intl-idn/composer.json delete mode 100644 lib/vendor/symfony/polyfill-mbstring/LICENSE delete mode 100644 lib/vendor/symfony/polyfill-mbstring/Mbstring.php delete mode 100644 lib/vendor/symfony/polyfill-mbstring/README.md delete mode 100644 lib/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php delete mode 100644 lib/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php delete mode 100644 lib/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php delete mode 100644 lib/vendor/symfony/polyfill-mbstring/bootstrap.php delete mode 100644 lib/vendor/symfony/polyfill-mbstring/composer.json delete mode 100644 lib/vendor/symfony/polyfill-php72/LICENSE delete mode 100644 lib/vendor/symfony/polyfill-php72/Php72.php delete mode 100644 lib/vendor/symfony/polyfill-php72/README.md delete mode 100644 lib/vendor/symfony/polyfill-php72/bootstrap.php delete mode 100644 lib/vendor/symfony/polyfill-php72/composer.json diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index cab12ddbec0e769c44eef64cb52bdb1cd8aae7f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO^(wr6n<{YkY-fT1!!iO4HApds1*z&gpf+0!D%VO#%7s?$D58is%*PzhAj2+(o+agN>)Yt9?_N zffM34LMh37^^*0az^a0k6urb=!K*<&x$v8ihp}CZ>(e1kQJ?0=7as~t8$Kg2e4b4? z=X-%u$7&;Hye@xA#Vs(ZSZzRFelD!g$BaVS%UdKwD%Zq10 zipG9FDjnN{#ZAcT-7->#vxttsnS)uCmm`> - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - // PSR-4 - private $prefixLengthsPsr4 = array(); - private $prefixDirsPsr4 = array(); - private $fallbackDirsPsr4 = array(); - - // PSR-0 - private $prefixesPsr0 = array(); - private $fallbackDirsPsr0 = array(); - - private $useIncludePath = false; - private $classMap = array(); - private $classMapAuthoritative = false; - private $missingClasses = array(); - private $apcuPrefix; - - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', $this->prefixesPsr0); - } - - return array(); - } - - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 base directories - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - } - - /** - * Unregisters this instance as an autoloader. - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return bool|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - includeFile($file); - - return true; - } - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - return false; - } -} - -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - */ -function includeFile($file) -{ - include $file; -} diff --git a/lib/vendor/composer/LICENSE b/lib/vendor/composer/LICENSE deleted file mode 100644 index f27399a..0000000 --- a/lib/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/lib/vendor/composer/autoload_classmap.php b/lib/vendor/composer/autoload_classmap.php deleted file mode 100644 index 7a91153..0000000 --- a/lib/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,9 +0,0 @@ - $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', - '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', - 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', - 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php', - '2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php', -); diff --git a/lib/vendor/composer/autoload_namespaces.php b/lib/vendor/composer/autoload_namespaces.php deleted file mode 100644 index b7fc012..0000000 --- a/lib/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($vendorDir . '/symfony/polyfill-php72'), - 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), - 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), - 'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'), - 'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'), - 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'), -); diff --git a/lib/vendor/composer/autoload_real.php b/lib/vendor/composer/autoload_real.php deleted file mode 100644 index 037e38c..0000000 --- a/lib/vendor/composer/autoload_real.php +++ /dev/null @@ -1,73 +0,0 @@ -= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); - if ($useStaticLoader) { - require_once __DIR__ . '/autoload_static.php'; - - call_user_func(\Composer\Autoload\ComposerStaticInit854828f554bcd3a7e0d89b48661ef991::getInitializer($loader)); - } else { - $map = require __DIR__ . '/autoload_namespaces.php'; - foreach ($map as $namespace => $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - } - - $loader->register(true); - - if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit854828f554bcd3a7e0d89b48661ef991::$files; - } else { - $includeFiles = require __DIR__ . '/autoload_files.php'; - } - foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire854828f554bcd3a7e0d89b48661ef991($fileIdentifier, $file); - } - - return $loader; - } -} - -function composerRequire854828f554bcd3a7e0d89b48661ef991($fileIdentifier, $file) -{ - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - require $file; - - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - } -} diff --git a/lib/vendor/composer/autoload_static.php b/lib/vendor/composer/autoload_static.php deleted file mode 100644 index ce3098a..0000000 --- a/lib/vendor/composer/autoload_static.php +++ /dev/null @@ -1,70 +0,0 @@ - __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', - '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', - 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', - 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php', - '2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php', - ); - - public static $prefixLengthsPsr4 = array ( - 'S' => - array ( - 'Symfony\\Polyfill\\Php72\\' => 23, - 'Symfony\\Polyfill\\Mbstring\\' => 26, - 'Symfony\\Polyfill\\Intl\\Idn\\' => 26, - 'Symfony\\Polyfill\\Iconv\\' => 23, - ), - 'E' => - array ( - 'Egulias\\EmailValidator\\' => 23, - ), - 'D' => - array ( - 'Doctrine\\Common\\Lexer\\' => 22, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Symfony\\Polyfill\\Php72\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-php72', - ), - 'Symfony\\Polyfill\\Mbstring\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', - ), - 'Symfony\\Polyfill\\Intl\\Idn\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn', - ), - 'Symfony\\Polyfill\\Iconv\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-iconv', - ), - 'Egulias\\EmailValidator\\' => - array ( - 0 => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator', - ), - 'Doctrine\\Common\\Lexer\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer', - ), - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit854828f554bcd3a7e0d89b48661ef991::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit854828f554bcd3a7e0d89b48661ef991::$prefixDirsPsr4; - - }, null, ClassLoader::class); - } -} diff --git a/lib/vendor/composer/installed.json b/lib/vendor/composer/installed.json deleted file mode 100644 index 713bddd..0000000 --- a/lib/vendor/composer/installed.json +++ /dev/null @@ -1,489 +0,0 @@ -[ - { - "name": "doctrine/lexer", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", - "shasum": "" - }, - "require": { - "php": "^7.2" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" - }, - "time": "2019-10-30T14:39:59+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ] - }, - { - "name": "egulias/email-validator", - "version": "2.1.17", - "version_normalized": "2.1.17.0", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" - }, - "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "time": "2020-02-13T22:36:52+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ] - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.2.3", - "version_normalized": "6.2.3.0", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/149cfdf118b169f7840bbe3ef0d4bc795d1780c9", - "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9", - "shasum": "" - }, - "require": { - "egulias/email-validator": "~2.0", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses", - "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" - }, - "time": "2019-11-12T09:31:26+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ] - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c4de7601eefbf25f9d47190abe07f79fe0a27424", - "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", - "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.17.0", - "version_normalized": "1.17.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "f048e612a3905f34931127360bdd2def19a5e582" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", - "reference": "f048e612a3905f34931127360bdd2def19a5e582", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2020-05-12T16:47:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ] - } -] diff --git a/lib/vendor/doctrine/lexer/LICENSE b/lib/vendor/doctrine/lexer/LICENSE deleted file mode 100644 index e8fdec4..0000000 --- a/lib/vendor/doctrine/lexer/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2006-2018 Doctrine Project - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/lib/vendor/doctrine/lexer/README.md b/lib/vendor/doctrine/lexer/README.md deleted file mode 100644 index e1b419a..0000000 --- a/lib/vendor/doctrine/lexer/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Doctrine Lexer - -Build Status: [![Build Status](https://travis-ci.org/doctrine/lexer.svg?branch=master)](https://travis-ci.org/doctrine/lexer) - -Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. - -This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). - -https://www.doctrine-project.org/projects/lexer.html diff --git a/lib/vendor/doctrine/lexer/composer.json b/lib/vendor/doctrine/lexer/composer.json deleted file mode 100644 index 0d8e5ad..0000000 --- a/lib/vendor/doctrine/lexer/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "doctrine/lexer", - "type": "library", - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "keywords": [ - "php", - "parser", - "lexer", - "annotations", - "docblock" - ], - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "license": "MIT", - "authors": [ - {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, - {"name": "Roman Borschel", "email": "roman@code-factory.org"}, - {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} - ], - "require": { - "php": "^7.2" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" - }, - "autoload": { - "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } - }, - "autoload-dev": { - "psr-4": { "Doctrine\\Tests\\": "tests/Doctrine" } - }, - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "config": { - "sort-packages": true - } -} diff --git a/lib/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/lib/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php deleted file mode 100644 index 385643a..0000000 --- a/lib/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php +++ /dev/null @@ -1,328 +0,0 @@ -input = $input; - $this->tokens = []; - - $this->reset(); - $this->scan($input); - } - - /** - * Resets the lexer. - * - * @return void - */ - public function reset() - { - $this->lookahead = null; - $this->token = null; - $this->peek = 0; - $this->position = 0; - } - - /** - * Resets the peek pointer to 0. - * - * @return void - */ - public function resetPeek() - { - $this->peek = 0; - } - - /** - * Resets the lexer position on the input to the given position. - * - * @param int $position Position to place the lexical scanner. - * - * @return void - */ - public function resetPosition($position = 0) - { - $this->position = $position; - } - - /** - * Retrieve the original lexer's input until a given position. - * - * @param int $position - * - * @return string - */ - public function getInputUntilPosition($position) - { - return substr($this->input, 0, $position); - } - - /** - * Checks whether a given token matches the current lookahead. - * - * @param int|string $token - * - * @return bool - */ - public function isNextToken($token) - { - return $this->lookahead !== null && $this->lookahead['type'] === $token; - } - - /** - * Checks whether any of the given tokens matches the current lookahead. - * - * @param array $tokens - * - * @return bool - */ - public function isNextTokenAny(array $tokens) - { - return $this->lookahead !== null && in_array($this->lookahead['type'], $tokens, true); - } - - /** - * Moves to the next token in the input string. - * - * @return bool - */ - public function moveNext() - { - $this->peek = 0; - $this->token = $this->lookahead; - $this->lookahead = isset($this->tokens[$this->position]) - ? $this->tokens[$this->position++] : null; - - return $this->lookahead !== null; - } - - /** - * Tells the lexer to skip input tokens until it sees a token with the given value. - * - * @param string $type The token type to skip until. - * - * @return void - */ - public function skipUntil($type) - { - while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { - $this->moveNext(); - } - } - - /** - * Checks if given value is identical to the given token. - * - * @param mixed $value - * @param int|string $token - * - * @return bool - */ - public function isA($value, $token) - { - return $this->getType($value) === $token; - } - - /** - * Moves the lookahead token forward. - * - * @return array|null The next token or NULL if there are no more tokens ahead. - */ - public function peek() - { - if (isset($this->tokens[$this->position + $this->peek])) { - return $this->tokens[$this->position + $this->peek++]; - } - - return null; - } - - /** - * Peeks at the next token, returns it and immediately resets the peek. - * - * @return array|null The next token or NULL if there are no more tokens ahead. - */ - public function glimpse() - { - $peek = $this->peek(); - $this->peek = 0; - - return $peek; - } - - /** - * Scans the input string for tokens. - * - * @param string $input A query string. - * - * @return void - */ - protected function scan($input) - { - if (! isset($this->regex)) { - $this->regex = sprintf( - '/(%s)|%s/%s', - implode(')|(', $this->getCatchablePatterns()), - implode('|', $this->getNonCatchablePatterns()), - $this->getModifiers() - ); - } - - $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; - $matches = preg_split($this->regex, $input, -1, $flags); - - if ($matches === false) { - // Work around https://bugs.php.net/78122 - $matches = [[$input, 0]]; - } - - foreach ($matches as $match) { - // Must remain before 'value' assignment since it can change content - $type = $this->getType($match[0]); - - $this->tokens[] = [ - 'value' => $match[0], - 'type' => $type, - 'position' => $match[1], - ]; - } - } - - /** - * Gets the literal for a given token. - * - * @param int|string $token - * - * @return int|string - */ - public function getLiteral($token) - { - $className = static::class; - $reflClass = new ReflectionClass($className); - $constants = $reflClass->getConstants(); - - foreach ($constants as $name => $value) { - if ($value === $token) { - return $className . '::' . $name; - } - } - - return $token; - } - - /** - * Regex modifiers - * - * @return string - */ - protected function getModifiers() - { - return 'iu'; - } - - /** - * Lexical catchable patterns. - * - * @return array - */ - abstract protected function getCatchablePatterns(); - - /** - * Lexical non-catchable patterns. - * - * @return array - */ - abstract protected function getNonCatchablePatterns(); - - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * - * @return int|string|null - */ - abstract protected function getType(&$value); -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/EmailLexer.php b/lib/vendor/egulias/email-validator/EmailValidator/EmailLexer.php deleted file mode 100644 index cb47c01..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/EmailLexer.php +++ /dev/null @@ -1,279 +0,0 @@ - self::S_OPENPARENTHESIS, - ')' => self::S_CLOSEPARENTHESIS, - '<' => self::S_LOWERTHAN, - '>' => self::S_GREATERTHAN, - '[' => self::S_OPENBRACKET, - ']' => self::S_CLOSEBRACKET, - ':' => self::S_COLON, - ';' => self::S_SEMICOLON, - '@' => self::S_AT, - '\\' => self::S_BACKSLASH, - '/' => self::S_SLASH, - ',' => self::S_COMMA, - '.' => self::S_DOT, - '"' => self::S_DQUOTE, - '-' => self::S_HYPHEN, - '::' => self::S_DOUBLECOLON, - ' ' => self::S_SP, - "\t" => self::S_HTAB, - "\r" => self::S_CR, - "\n" => self::S_LF, - "\r\n" => self::CRLF, - 'IPv6' => self::S_IPV6TAG, - '{' => self::S_OPENQBRACKET, - '}' => self::S_CLOSEQBRACKET, - '' => self::S_EMPTY, - '\0' => self::C_NUL, - ); - - /** - * @var bool - */ - protected $hasInvalidTokens = false; - - /** - * @var array - * - * @psalm-var array{value:string, type:null|int, position:int}|array - */ - protected $previous = []; - - /** - * The last matched/seen token. - * - * @var array - * - * @psalm-var array{value:string, type:null|int, position:int} - */ - public $token; - - /** - * The next token in the input. - * - * @var array|null - */ - public $lookahead; - - /** - * @psalm-var array{value:'', type:null, position:0} - */ - private static $nullToken = [ - 'value' => '', - 'type' => null, - 'position' => 0, - ]; - - public function __construct() - { - $this->previous = $this->token = self::$nullToken; - $this->lookahead = null; - } - - /** - * @return void - */ - public function reset() - { - $this->hasInvalidTokens = false; - parent::reset(); - $this->previous = $this->token = self::$nullToken; - } - - /** - * @return bool - */ - public function hasInvalidTokens() - { - return $this->hasInvalidTokens; - } - - /** - * @param int $type - * @throws \UnexpectedValueException - * @return boolean - * - * @psalm-suppress InvalidScalarArgument - */ - public function find($type) - { - $search = clone $this; - $search->skipUntil($type); - - if (!$search->lookahead) { - throw new \UnexpectedValueException($type . ' not found'); - } - return true; - } - - /** - * getPrevious - * - * @return array - */ - public function getPrevious() - { - return $this->previous; - } - - /** - * moveNext - * - * @return boolean - */ - public function moveNext() - { - $this->previous = $this->token; - $hasNext = parent::moveNext(); - $this->token = $this->token ?: self::$nullToken; - - return $hasNext; - } - - /** - * Lexical catchable patterns. - * - * @return string[] - */ - protected function getCatchablePatterns() - { - return array( - '[a-zA-Z_]+[46]?', //ASCII and domain literal - '[^\x00-\x7F]', //UTF-8 - '[0-9]+', - '\r\n', - '::', - '\s+?', - '.', - ); - } - - /** - * Lexical non-catchable patterns. - * - * @return string[] - */ - protected function getNonCatchablePatterns() - { - return array('[\xA0-\xff]+'); - } - - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * @throws \InvalidArgumentException - * @return integer - */ - protected function getType(&$value) - { - if ($this->isNullType($value)) { - return self::C_NUL; - } - - if ($this->isValid($value)) { - return $this->charValue[$value]; - } - - if ($this->isUTF8Invalid($value)) { - $this->hasInvalidTokens = true; - return self::INVALID; - } - - return self::GENERIC; - } - - /** - * @param string $value - * - * @return bool - */ - protected function isValid($value) - { - if (isset($this->charValue[$value])) { - return true; - } - - return false; - } - - /** - * @param string $value - * @return bool - */ - protected function isNullType($value) - { - if ($value === "\0") { - return true; - } - - return false; - } - - /** - * @param string $value - * @return bool - */ - protected function isUTF8Invalid($value) - { - if (preg_match('/\p{Cc}+/u', $value)) { - return true; - } - - return false; - } - - /** - * @return string - */ - protected function getModifiers() - { - return 'iu'; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/EmailParser.php b/lib/vendor/egulias/email-validator/EmailValidator/EmailParser.php deleted file mode 100644 index 6b7bad6..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/EmailParser.php +++ /dev/null @@ -1,137 +0,0 @@ - - */ -class EmailParser -{ - const EMAIL_MAX_LENGTH = 254; - - /** - * @var array - */ - protected $warnings = []; - - /** - * @var string - */ - protected $domainPart = ''; - - /** - * @var string - */ - protected $localPart = ''; - /** - * @var EmailLexer - */ - protected $lexer; - - /** - * @var LocalPart - */ - protected $localPartParser; - - /** - * @var DomainPart - */ - protected $domainPartParser; - - public function __construct(EmailLexer $lexer) - { - $this->lexer = $lexer; - $this->localPartParser = new LocalPart($this->lexer); - $this->domainPartParser = new DomainPart($this->lexer); - } - - /** - * @param string $str - * @return array - */ - public function parse($str) - { - $this->lexer->setInput($str); - - if (!$this->hasAtToken()) { - throw new NoLocalPart(); - } - - - $this->localPartParser->parse($str); - $this->domainPartParser->parse($str); - - $this->setParts($str); - - if ($this->lexer->hasInvalidTokens()) { - throw new ExpectingATEXT(); - } - - return array('local' => $this->localPart, 'domain' => $this->domainPart); - } - - /** - * @return Warning\Warning[] - */ - public function getWarnings() - { - $localPartWarnings = $this->localPartParser->getWarnings(); - $domainPartWarnings = $this->domainPartParser->getWarnings(); - $this->warnings = array_merge($localPartWarnings, $domainPartWarnings); - - $this->addLongEmailWarning($this->localPart, $this->domainPart); - - return $this->warnings; - } - - /** - * @return string - */ - public function getParsedDomainPart() - { - return $this->domainPart; - } - - /** - * @param string $email - */ - protected function setParts($email) - { - $parts = explode('@', $email); - $this->domainPart = $this->domainPartParser->getDomainPart(); - $this->localPart = $parts[0]; - } - - /** - * @return bool - */ - protected function hasAtToken() - { - $this->lexer->moveNext(); - $this->lexer->moveNext(); - if ($this->lexer->token['type'] === EmailLexer::S_AT) { - return false; - } - - return true; - } - - /** - * @param string $localPart - * @param string $parsedDomainPart - */ - protected function addLongEmailWarning($localPart, $parsedDomainPart) - { - if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) { - $this->warnings[EmailTooLong::CODE] = new EmailTooLong(); - } - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/EmailValidator.php b/lib/vendor/egulias/email-validator/EmailValidator/EmailValidator.php deleted file mode 100644 index a30f21d..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/EmailValidator.php +++ /dev/null @@ -1,67 +0,0 @@ -lexer = new EmailLexer(); - } - - /** - * @param string $email - * @param EmailValidation $emailValidation - * @return bool - */ - public function isValid($email, EmailValidation $emailValidation) - { - $isValid = $emailValidation->isValid($email, $this->lexer); - $this->warnings = $emailValidation->getWarnings(); - $this->error = $emailValidation->getError(); - - return $isValid; - } - - /** - * @return boolean - */ - public function hasWarnings() - { - return !empty($this->warnings); - } - - /** - * @return array - */ - public function getWarnings() - { - return $this->warnings; - } - - /** - * @return InvalidEmail|null - */ - public function getError() - { - return $this->error; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php b/lib/vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php deleted file mode 100644 index 97f41a2..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php +++ /dev/null @@ -1,9 +0,0 @@ -lexer->moveNext(); - - $this->performDomainStartChecks(); - - $domain = $this->doParseDomainPart(); - - $prev = $this->lexer->getPrevious(); - $length = strlen($domain); - - if ($prev['type'] === EmailLexer::S_DOT) { - throw new DotAtEnd(); - } - if ($prev['type'] === EmailLexer::S_HYPHEN) { - throw new DomainHyphened(); - } - if ($length > self::DOMAIN_MAX_LENGTH) { - $this->warnings[DomainTooLong::CODE] = new DomainTooLong(); - } - if ($prev['type'] === EmailLexer::S_CR) { - throw new CRLFAtTheEnd(); - } - $this->domainPart = $domain; - } - - private function performDomainStartChecks() - { - $this->checkInvalidTokensAfterAT(); - $this->checkEmptyDomain(); - - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->warnings[DeprecatedComment::CODE] = new DeprecatedComment(); - $this->parseDomainComments(); - } - } - - private function checkEmptyDomain() - { - $thereIsNoDomain = $this->lexer->token['type'] === EmailLexer::S_EMPTY || - ($this->lexer->token['type'] === EmailLexer::S_SP && - !$this->lexer->isNextToken(EmailLexer::GENERIC)); - - if ($thereIsNoDomain) { - throw new NoDomainPart(); - } - } - - private function checkInvalidTokensAfterAT() - { - if ($this->lexer->token['type'] === EmailLexer::S_DOT) { - throw new DotAtStart(); - } - if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN) { - throw new DomainHyphened(); - } - } - - /** - * @return string - */ - public function getDomainPart() - { - return $this->domainPart; - } - - /** - * @param string $addressLiteral - * @param int $maxGroups - */ - public function checkIPV6Tag($addressLiteral, $maxGroups = 8) - { - $prev = $this->lexer->getPrevious(); - if ($prev['type'] === EmailLexer::S_COLON) { - $this->warnings[IPV6ColonEnd::CODE] = new IPV6ColonEnd(); - } - - $IPv6 = substr($addressLiteral, 5); - //Daniel Marschall's new IPv6 testing strategy - $matchesIP = explode(':', $IPv6); - $groupCount = count($matchesIP); - $colons = strpos($IPv6, '::'); - - if (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) { - $this->warnings[IPV6BadChar::CODE] = new IPV6BadChar(); - } - - if ($colons === false) { - // We need exactly the right number of groups - if ($groupCount !== $maxGroups) { - $this->warnings[IPV6GroupCount::CODE] = new IPV6GroupCount(); - } - return; - } - - if ($colons !== strrpos($IPv6, '::')) { - $this->warnings[IPV6DoubleColon::CODE] = new IPV6DoubleColon(); - return; - } - - if ($colons === 0 || $colons === (strlen($IPv6) - 2)) { - // RFC 4291 allows :: at the start or end of an address - //with 7 other groups in addition - ++$maxGroups; - } - - if ($groupCount > $maxGroups) { - $this->warnings[IPV6MaxGroups::CODE] = new IPV6MaxGroups(); - } elseif ($groupCount === $maxGroups) { - $this->warnings[IPV6Deprecated::CODE] = new IPV6Deprecated(); - } - } - - /** - * @return string - */ - protected function doParseDomainPart() - { - $domain = ''; - $openedParenthesis = 0; - do { - $prev = $this->lexer->getPrevious(); - - $this->checkNotAllowedChars($this->lexer->token); - - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->parseComments(); - $openedParenthesis += $this->getOpenedParenthesis(); - $this->lexer->moveNext(); - $tmpPrev = $this->lexer->getPrevious(); - if ($tmpPrev['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - $openedParenthesis--; - } - } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - if ($openedParenthesis === 0) { - throw new UnopenedComment(); - } else { - $openedParenthesis--; - } - } - - $this->checkConsecutiveDots(); - $this->checkDomainPartExceptions($prev); - - if ($this->hasBrackets()) { - $this->parseDomainLiteral(); - } - - $this->checkLabelLength($prev); - - if ($this->isFWS()) { - $this->parseFWS(); - } - - $domain .= $this->lexer->token['value']; - $this->lexer->moveNext(); - } while (null !== $this->lexer->token['type']); - - return $domain; - } - - private function checkNotAllowedChars(array $token) - { - $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true]; - if (isset($notAllowed[$token['type']])) { - throw new CharNotAllowed(); - } - } - - /** - * @return string|false - */ - protected function parseDomainLiteral() - { - if ($this->lexer->isNextToken(EmailLexer::S_COLON)) { - $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); - } - if ($this->lexer->isNextToken(EmailLexer::S_IPV6TAG)) { - $lexer = clone $this->lexer; - $lexer->moveNext(); - if ($lexer->isNextToken(EmailLexer::S_DOUBLECOLON)) { - $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); - } - } - - return $this->doParseDomainLiteral(); - } - - /** - * @return string|false - */ - protected function doParseDomainLiteral() - { - $IPv6TAG = false; - $addressLiteral = ''; - do { - if ($this->lexer->token['type'] === EmailLexer::C_NUL) { - throw new ExpectingDTEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::INVALID || - $this->lexer->token['type'] === EmailLexer::C_DEL || - $this->lexer->token['type'] === EmailLexer::S_LF - ) { - $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); - } - - if ($this->lexer->isNextTokenAny(array(EmailLexer::S_OPENQBRACKET, EmailLexer::S_OPENBRACKET))) { - throw new ExpectingDTEXT(); - } - - if ($this->lexer->isNextTokenAny( - array(EmailLexer::S_HTAB, EmailLexer::S_SP, $this->lexer->token['type'] === EmailLexer::CRLF) - )) { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - $this->parseFWS(); - } - - if ($this->lexer->isNextToken(EmailLexer::S_CR)) { - throw new CRNoLF(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH) { - $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); - $addressLiteral .= $this->lexer->token['value']; - $this->lexer->moveNext(); - $this->validateQuotedPair(); - } - if ($this->lexer->token['type'] === EmailLexer::S_IPV6TAG) { - $IPv6TAG = true; - } - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEQBRACKET) { - break; - } - - $addressLiteral .= $this->lexer->token['value']; - - } while ($this->lexer->moveNext()); - - $addressLiteral = str_replace('[', '', $addressLiteral); - $addressLiteral = $this->checkIPV4Tag($addressLiteral); - - if (false === $addressLiteral) { - return $addressLiteral; - } - - if (!$IPv6TAG) { - $this->warnings[DomainLiteral::CODE] = new DomainLiteral(); - return $addressLiteral; - } - - $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); - - $this->checkIPV6Tag($addressLiteral); - - return $addressLiteral; - } - - /** - * @param string $addressLiteral - * - * @return string|false - */ - protected function checkIPV4Tag($addressLiteral) - { - $matchesIP = array(); - - // Extract IPv4 part from the end of the address-literal (if there is one) - if (preg_match( - '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', - $addressLiteral, - $matchesIP - ) > 0 - ) { - $index = strrpos($addressLiteral, $matchesIP[0]); - if ($index === 0) { - $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); - return false; - } - // Convert IPv4 part to IPv6 format for further testing - $addressLiteral = substr($addressLiteral, 0, (int) $index) . '0:0'; - } - - return $addressLiteral; - } - - protected function checkDomainPartExceptions(array $prev) - { - $invalidDomainTokens = array( - EmailLexer::S_DQUOTE => true, - EmailLexer::S_SEMICOLON => true, - EmailLexer::S_GREATERTHAN => true, - EmailLexer::S_LOWERTHAN => true, - ); - - if (isset($invalidDomainTokens[$this->lexer->token['type']])) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_COMMA) { - throw new CommaInDomain(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_AT) { - throw new ConsecutiveAt(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_OPENQBRACKET && $prev['type'] !== EmailLexer::S_AT) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN && $this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new DomainHyphened(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH - && $this->lexer->isNextToken(EmailLexer::GENERIC)) { - throw new ExpectingATEXT(); - } - } - - /** - * @return bool - */ - protected function hasBrackets() - { - if ($this->lexer->token['type'] !== EmailLexer::S_OPENBRACKET) { - return false; - } - - try { - $this->lexer->find(EmailLexer::S_CLOSEBRACKET); - } catch (\RuntimeException $e) { - throw new ExpectingDomainLiteralClose(); - } - - return true; - } - - protected function checkLabelLength(array $prev) - { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && - $prev['type'] === EmailLexer::GENERIC && - strlen($prev['value']) > 63 - ) { - $this->warnings[LabelTooLong::CODE] = new LabelTooLong(); - } - } - - protected function parseDomainComments() - { - $this->isUnclosedComment(); - while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { - $this->warnEscaping(); - $this->lexer->moveNext(); - } - - $this->lexer->moveNext(); - if ($this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new ExpectingATEXT(); - } - } - - protected function addTLDWarnings() - { - if ($this->warnings[DomainLiteral::CODE]) { - $this->warnings[TLD::CODE] = new TLD(); - } - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php b/lib/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php deleted file mode 100644 index 3c21f34..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php +++ /dev/null @@ -1,145 +0,0 @@ -lexer->token['type'] !== EmailLexer::S_AT && null !== $this->lexer->token['type']) { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && null === $this->lexer->getPrevious()['type']) { - throw new DotAtStart(); - } - - $closingQuote = $this->checkDQUOTE($closingQuote); - if ($closingQuote && $parseDQuote) { - $parseDQuote = $this->parseDoubleQuote(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { - $this->parseComments(); - $openedParenthesis += $this->getOpenedParenthesis(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { - if ($openedParenthesis === 0) { - throw new UnopenedComment(); - } - - $openedParenthesis--; - } - - $this->checkConsecutiveDots(); - - if ($this->lexer->token['type'] === EmailLexer::S_DOT && - $this->lexer->isNextToken(EmailLexer::S_AT) - ) { - throw new DotAtEnd(); - } - - $this->warnEscaping(); - $this->isInvalidToken($this->lexer->token, $closingQuote); - - if ($this->isFWS()) { - $this->parseFWS(); - } - - $totalLength += strlen($this->lexer->token['value']); - $this->lexer->moveNext(); - } - - if ($totalLength > LocalTooLong::LOCAL_PART_LENGTH) { - $this->warnings[LocalTooLong::CODE] = new LocalTooLong(); - } - } - - /** - * @return bool - */ - protected function parseDoubleQuote() - { - $parseAgain = true; - $special = array( - EmailLexer::S_CR => true, - EmailLexer::S_HTAB => true, - EmailLexer::S_LF => true - ); - - $invalid = array( - EmailLexer::C_NUL => true, - EmailLexer::S_HTAB => true, - EmailLexer::S_CR => true, - EmailLexer::S_LF => true - ); - $setSpecialsWarning = true; - - $this->lexer->moveNext(); - - while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && null !== $this->lexer->token['type']) { - $parseAgain = false; - if (isset($special[$this->lexer->token['type']]) && $setSpecialsWarning) { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - $setSpecialsWarning = false; - } - if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH && $this->lexer->isNextToken(EmailLexer::S_DQUOTE)) { - $this->lexer->moveNext(); - } - - $this->lexer->moveNext(); - - if (!$this->escaped() && isset($invalid[$this->lexer->token['type']])) { - throw new ExpectingATEXT(); - } - } - - $prev = $this->lexer->getPrevious(); - - if ($prev['type'] === EmailLexer::S_BACKSLASH) { - if (!$this->checkDQUOTE(false)) { - throw new UnclosedQuotedString(); - } - } - - if (!$this->lexer->isNextToken(EmailLexer::S_AT) && $prev['type'] !== EmailLexer::S_BACKSLASH) { - throw new ExpectingAT(); - } - - return $parseAgain; - } - - /** - * @param bool $closingQuote - */ - protected function isInvalidToken(array $token, $closingQuote) - { - $forbidden = array( - EmailLexer::S_COMMA, - EmailLexer::S_CLOSEBRACKET, - EmailLexer::S_OPENBRACKET, - EmailLexer::S_GREATERTHAN, - EmailLexer::S_LOWERTHAN, - EmailLexer::S_COLON, - EmailLexer::S_SEMICOLON, - EmailLexer::INVALID - ); - - if (in_array($token['type'], $forbidden) && !$closingQuote) { - throw new ExpectingATEXT(); - } - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php b/lib/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php deleted file mode 100644 index d0673b9..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php +++ /dev/null @@ -1,249 +0,0 @@ -lexer = $lexer; - } - - /** - * @return \Egulias\EmailValidator\Warning\Warning[] - */ - public function getWarnings() - { - return $this->warnings; - } - - /** - * @param string $str - */ - abstract public function parse($str); - - /** @return int */ - public function getOpenedParenthesis() - { - return $this->openedParenthesis; - } - - /** - * validateQuotedPair - */ - protected function validateQuotedPair() - { - if (!($this->lexer->token['type'] === EmailLexer::INVALID - || $this->lexer->token['type'] === EmailLexer::C_DEL)) { - throw new ExpectingQPair(); - } - - $this->warnings[QuotedPart::CODE] = - new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); - } - - protected function parseComments() - { - $this->openedParenthesis = 1; - $this->isUnclosedComment(); - $this->warnings[Comment::CODE] = new Comment(); - while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { - if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) { - $this->openedParenthesis++; - } - $this->warnEscaping(); - $this->lexer->moveNext(); - } - - $this->lexer->moveNext(); - if ($this->lexer->isNextTokenAny(array(EmailLexer::GENERIC, EmailLexer::S_EMPTY))) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->isNextToken(EmailLexer::S_AT)) { - $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); - } - } - - /** - * @return bool - */ - protected function isUnclosedComment() - { - try { - $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS); - return true; - } catch (\RuntimeException $e) { - throw new UnclosedComment(); - } - } - - protected function parseFWS() - { - $previous = $this->lexer->getPrevious(); - - $this->checkCRLFInFWS(); - - if ($this->lexer->token['type'] === EmailLexer::S_CR) { - throw new CRNoLF(); - } - - if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] !== EmailLexer::S_AT) { - throw new AtextAfterCFWS(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_LF || $this->lexer->token['type'] === EmailLexer::C_NUL) { - throw new ExpectingCTEXT(); - } - - if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous['type'] === EmailLexer::S_AT) { - $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); - } else { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - } - } - - protected function checkConsecutiveDots() - { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new ConsecutiveDot(); - } - } - - /** - * @return bool - */ - protected function isFWS() - { - if ($this->escaped()) { - return false; - } - - if ($this->lexer->token['type'] === EmailLexer::S_SP || - $this->lexer->token['type'] === EmailLexer::S_HTAB || - $this->lexer->token['type'] === EmailLexer::S_CR || - $this->lexer->token['type'] === EmailLexer::S_LF || - $this->lexer->token['type'] === EmailLexer::CRLF - ) { - return true; - } - - return false; - } - - /** - * @return bool - */ - protected function escaped() - { - $previous = $this->lexer->getPrevious(); - - if ($previous && $previous['type'] === EmailLexer::S_BACKSLASH - && - $this->lexer->token['type'] !== EmailLexer::GENERIC - ) { - return true; - } - - return false; - } - - /** - * @return bool - */ - protected function warnEscaping() - { - if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) { - return false; - } - - if ($this->lexer->isNextToken(EmailLexer::GENERIC)) { - throw new ExpectingATEXT(); - } - - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) { - return false; - } - - $this->warnings[QuotedPart::CODE] = - new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); - return true; - - } - - /** - * @param bool $hasClosingQuote - * - * @return bool - */ - protected function checkDQUOTE($hasClosingQuote) - { - if ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE) { - return $hasClosingQuote; - } - if ($hasClosingQuote) { - return $hasClosingQuote; - } - $previous = $this->lexer->getPrevious(); - if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] === EmailLexer::GENERIC) { - throw new ExpectingATEXT(); - } - - try { - $this->lexer->find(EmailLexer::S_DQUOTE); - $hasClosingQuote = true; - } catch (\Exception $e) { - throw new UnclosedQuotedString(); - } - $this->warnings[QuotedString::CODE] = new QuotedString($previous['value'], $this->lexer->token['value']); - - return $hasClosingQuote; - } - - protected function checkCRLFInFWS() - { - if ($this->lexer->token['type'] !== EmailLexer::CRLF) { - return; - } - - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { - throw new CRLFX2(); - } - - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { - throw new CRLFAtTheEnd(); - } - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php b/lib/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php deleted file mode 100644 index da13253..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php +++ /dev/null @@ -1,77 +0,0 @@ -checkDNS($host); - } - - public function getError() - { - return $this->error; - } - - public function getWarnings() - { - return $this->warnings; - } - - /** - * @param string $host - * - * @return bool - */ - protected function checkDNS($host) - { - $variant = INTL_IDNA_VARIANT_2003; - if ( defined('INTL_IDNA_VARIANT_UTS46') ) { - $variant = INTL_IDNA_VARIANT_UTS46; - } - $host = rtrim(idn_to_ascii($host, IDNA_DEFAULT, $variant), '.') . '.'; - - $Aresult = true; - $MXresult = checkdnsrr($host, 'MX'); - - if (!$MXresult) { - $this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord(); - $Aresult = checkdnsrr($host, 'A') || checkdnsrr($host, 'AAAA'); - if (!$Aresult) { - $this->error = new NoDNSRecord(); - } - } - return $MXresult || $Aresult; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Validation/EmailValidation.php b/lib/vendor/egulias/email-validator/EmailValidator/Validation/EmailValidation.php deleted file mode 100644 index d5a015b..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Validation/EmailValidation.php +++ /dev/null @@ -1,34 +0,0 @@ -errors = $errors; - parent::__construct(); - } - - /** - * @return InvalidEmail[] - */ - public function getErrors() - { - return $this->errors; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php b/lib/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php deleted file mode 100644 index feb2240..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php +++ /dev/null @@ -1,124 +0,0 @@ -validations = $validations; - $this->mode = $mode; - } - - /** - * {@inheritdoc} - */ - public function isValid($email, EmailLexer $emailLexer) - { - $result = true; - $errors = []; - foreach ($this->validations as $validation) { - $emailLexer->reset(); - $validationResult = $validation->isValid($email, $emailLexer); - $result = $result && $validationResult; - $this->warnings = array_merge($this->warnings, $validation->getWarnings()); - $errors = $this->addNewError($validation->getError(), $errors); - - if ($this->shouldStop($result)) { - break; - } - } - - if (!empty($errors)) { - $this->error = new MultipleErrors($errors); - } - - return $result; - } - - /** - * @param \Egulias\EmailValidator\Exception\InvalidEmail|null $possibleError - * @param \Egulias\EmailValidator\Exception\InvalidEmail[] $errors - * - * @return \Egulias\EmailValidator\Exception\InvalidEmail[] - */ - private function addNewError($possibleError, array $errors) - { - if (null !== $possibleError) { - $errors[] = $possibleError; - } - - return $errors; - } - - /** - * @param bool $result - * - * @return bool - */ - private function shouldStop($result) - { - return !$result && $this->mode === self::STOP_ON_ERROR; - } - - /** - * Returns the validation errors. - * - * @return MultipleErrors|null - */ - public function getError() - { - return $this->error; - } - - /** - * {@inheritdoc} - */ - public function getWarnings() - { - return $this->warnings; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php b/lib/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php deleted file mode 100644 index 6b31e54..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php +++ /dev/null @@ -1,41 +0,0 @@ -getWarnings())) { - return true; - } - - $this->error = new RFCWarnings(); - - return false; - } - - /** - * {@inheritdoc} - */ - public function getError() - { - return $this->error ?: parent::getError(); - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php b/lib/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php deleted file mode 100644 index 8781e0b..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php +++ /dev/null @@ -1,49 +0,0 @@ -parser = new EmailParser($emailLexer); - try { - $this->parser->parse((string)$email); - } catch (InvalidEmail $invalid) { - $this->error = $invalid; - return false; - } - - $this->warnings = $this->parser->getWarnings(); - return true; - } - - public function getError() - { - return $this->error; - } - - public function getWarnings() - { - return $this->warnings; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php b/lib/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php deleted file mode 100644 index e10bfab..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php +++ /dev/null @@ -1,51 +0,0 @@ -setChecks(Spoofchecker::SINGLE_SCRIPT); - - if ($checker->isSuspicious($email)) { - $this->error = new SpoofEmail(); - } - - return $this->error === null; - } - - /** - * @return InvalidEmail|null - */ - public function getError() - { - return $this->error; - } - - public function getWarnings() - { - return []; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php deleted file mode 100644 index 77e70f7..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Address literal in domain part'; - $this->rfcNumber = 5321; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php deleted file mode 100644 index be43bbe..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php +++ /dev/null @@ -1,13 +0,0 @@ -message = "Deprecated folding white space near @"; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php deleted file mode 100644 index dea3450..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php +++ /dev/null @@ -1,13 +0,0 @@ -message = 'Folding whites space followed by folding white space'; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/Comment.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/Comment.php deleted file mode 100644 index 704c290..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/Comment.php +++ /dev/null @@ -1,13 +0,0 @@ -message = "Comments found in this email"; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php deleted file mode 100644 index ad43bd7..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php +++ /dev/null @@ -1,13 +0,0 @@ -message = 'Deprecated comments'; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php deleted file mode 100644 index 6f36b5e..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Domain Literal'; - $this->rfcNumber = 5322; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php deleted file mode 100644 index 61ff17a..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Domain is too long, exceeds 255 chars'; - $this->rfcNumber = 5322; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php deleted file mode 100644 index 497309d..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php +++ /dev/null @@ -1,15 +0,0 @@ -message = 'Email is too long, exceeds ' . EmailParser::EMAIL_MAX_LENGTH; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php deleted file mode 100644 index ba2fcc0..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Bad char in IPV6 domain literal'; - $this->rfcNumber = 5322; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php deleted file mode 100644 index 41afa78..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php +++ /dev/null @@ -1,14 +0,0 @@ -message = ':: found at the end of the domain literal'; - $this->rfcNumber = 5322; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php deleted file mode 100644 index 1bf754e..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php +++ /dev/null @@ -1,14 +0,0 @@ -message = ':: found at the start of the domain literal'; - $this->rfcNumber = 5322; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php deleted file mode 100644 index d752caa..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Deprecated form of IPV6'; - $this->rfcNumber = 5321; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php deleted file mode 100644 index 4f82394..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Double colon found after IPV6 tag'; - $this->rfcNumber = 5322; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php deleted file mode 100644 index a59d317..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Group count is not IPV6 valid'; - $this->rfcNumber = 5322; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php deleted file mode 100644 index 936274c..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Reached the maximum number of IPV6 groups allowed'; - $this->rfcNumber = 5321; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php deleted file mode 100644 index daf07f4..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Label too long'; - $this->rfcNumber = 5322; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php deleted file mode 100644 index 0d08d8b..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php +++ /dev/null @@ -1,15 +0,0 @@ -message = 'Local part is too long, exceeds 64 chars (octets)'; - $this->rfcNumber = 5322; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php deleted file mode 100644 index b3c21a1..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'No MX DSN record was found for this email'; - $this->rfcNumber = 5321; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php deleted file mode 100644 index 10f19e3..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php +++ /dev/null @@ -1,14 +0,0 @@ -rfcNumber = 5322; - $this->message = 'Obsolete DTEXT in domain literal'; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php deleted file mode 100644 index 36a4265..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php +++ /dev/null @@ -1,17 +0,0 @@ -message = "Deprecated Quoted String found between $prevToken and $postToken"; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php deleted file mode 100644 index 817e4e8..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php +++ /dev/null @@ -1,17 +0,0 @@ -message = "Quoted String found between $prevToken and $postToken"; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/TLD.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/TLD.php deleted file mode 100644 index 2338b9f..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/TLD.php +++ /dev/null @@ -1,13 +0,0 @@ -message = "RFC5321, TLD"; - } -} diff --git a/lib/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php b/lib/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php deleted file mode 100644 index bce7e7a..0000000 --- a/lib/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php +++ /dev/null @@ -1,47 +0,0 @@ -message; - } - - /** - * @return int - */ - public function code() - { - return self::CODE; - } - - /** - * @return int - */ - public function RFCNumber() - { - return $this->rfcNumber; - } - - public function __toString() - { - return $this->message() . " rfc: " . $this->rfcNumber . "interal code: " . static::CODE; - } -} diff --git a/lib/vendor/egulias/email-validator/LICENSE b/lib/vendor/egulias/email-validator/LICENSE deleted file mode 100644 index c34d2c1..0000000 --- a/lib/vendor/egulias/email-validator/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2013-2016 Eduardo Gulias Davis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/vendor/egulias/email-validator/README.md b/lib/vendor/egulias/email-validator/README.md deleted file mode 100644 index b5b0d85..0000000 --- a/lib/vendor/egulias/email-validator/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# EmailValidator -[![Build Status](https://travis-ci.org/egulias/EmailValidator.svg?branch=master)](https://travis-ci.org/egulias/EmailValidator) [![Coverage Status](https://coveralls.io/repos/egulias/EmailValidator/badge.svg?branch=master)](https://coveralls.io/r/egulias/EmailValidator?branch=master) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/egulias/EmailValidator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/egulias/EmailValidator/?branch=master) [![SensioLabsInsight](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6/small.png)](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6) -============================= -## Suported RFCs ## -This library aims to support: - -RFC 5321, 5322, 6530, 6531, 6532. - -## Requirements ## - - * [Composer](https://getcomposer.org) is required for installation - * [Spoofchecking](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php) and [DNSCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/DNSCheckValidation.php) validation requires that your PHP system has the [PHP Internationalization Libraries](https://php.net/manual/en/book.intl.php) (also known as PHP Intl) - -## Installation ## - -Run the command below to install via Composer - -```shell -composer require egulias/email-validator -``` - -## Getting Started ## -`EmailValidator`requires you to decide which (or combination of them) validation/s strategy/ies you'd like to follow for each [validation](#available-validations). - -A basic example with the RFC validation -```php -isValid("example@example.com", new RFCValidation()); //true -``` - - -### Available validations ### - -1. [RFCValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/RFCValidation.php) -2. [NoRFCWarningsValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/NoRFCWarningsValidation.php) -3. [DNSCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/DNSCheckValidation.php) -4. [SpoofCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php) -5. [MultipleValidationWithAnd](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/MultipleValidationWithAnd.php) -6. [Your own validation](#how-to-extend) - -`MultipleValidationWithAnd` - -It is a validation that operates over other validations performing a logical and (&&) over the result of each validation. - -```php -isValid("example@example.com", $multipleValidations); //true -``` - -### How to extend ### - -It's easy! You just need to implement [EmailValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/EmailValidation.php) and you can use your own validation. - - -## Other Contributors ## -(You can find current contributors [here](https://github.com/egulias/EmailValidator/graphs/contributors)) - -As this is a port from another library and work, here are other people related to the previous one: - -* Ricard Clau [@ricardclau](https://github.com/ricardclau): Performance against PHP built-in filter_var -* Josepf Bielawski [@stloyd](https://github.com/stloyd): For its first re-work of Dominic's lib -* Dominic Sayers [@dominicsayers](https://github.com/dominicsayers): The original isemail function - -## License ## -Released under the MIT License attached with this code. - diff --git a/lib/vendor/egulias/email-validator/composer.json b/lib/vendor/egulias/email-validator/composer.json deleted file mode 100644 index 595caff..0000000 --- a/lib/vendor/egulias/email-validator/composer.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "egulias/email-validator", - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": ["email", "validation", "validator", "emailvalidation", "emailvalidator"], - "license": "MIT", - "authors": [ - {"name": "Eduardo Gulias Davis"} - ], - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "require": { - "php": ">=5.5", - "doctrine/lexer": "^1.0.1", - "symfony/polyfill-intl-idn": "^1.10" - }, - "require-dev": { - "satooshi/php-coveralls": "^1.0.1", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "dominicsayers/isemail": "^3.0.7" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" - } - }, - "autoload-dev": { - "psr-4": { - "Egulias\\Tests\\": "Tests" - } - } -} diff --git a/lib/vendor/egulias/email-validator/phpunit.xml.dist b/lib/vendor/egulias/email-validator/phpunit.xml.dist deleted file mode 100644 index 1122406..0000000 --- a/lib/vendor/egulias/email-validator/phpunit.xml.dist +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - ./Tests/EmailValidator - ./vendor/ - - - - - - ./EmailValidator/ - - - diff --git a/lib/vendor/egulias/email-validator/psalm.baseline.xml b/lib/vendor/egulias/email-validator/psalm.baseline.xml deleted file mode 100644 index f81df72..0000000 --- a/lib/vendor/egulias/email-validator/psalm.baseline.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - self::$nullToken - - - - - parse - - - - - Spoofchecker - Spoofchecker - - - diff --git a/lib/vendor/egulias/email-validator/psalm.xml b/lib/vendor/egulias/email-validator/psalm.xml deleted file mode 100644 index fb17dc8..0000000 --- a/lib/vendor/egulias/email-validator/psalm.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - diff --git a/lib/vendor/swiftmailer/swiftmailer/.gitattributes b/lib/vendor/swiftmailer/swiftmailer/.gitattributes deleted file mode 100644 index 09c3fba..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/.gitattributes +++ /dev/null @@ -1,9 +0,0 @@ -*.crt -crlf -*.key -crlf -*.srl -crlf -*.pub -crlf -*.priv -crlf -*.txt -crlf - -# ignore /notes in the git-generated distributed .zip archive -/doc/notes export-ignore diff --git a/lib/vendor/swiftmailer/swiftmailer/.github/ISSUE_TEMPLATE.md b/lib/vendor/swiftmailer/swiftmailer/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 5db6524..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,19 +0,0 @@ - - -| Q | A -| ------------------- | ----- -| Bug report? | yes/no -| Feature request? | yes/no -| RFC? | yes/no -| How used? | Standalone/Symfony/3party -| Swiftmailer version | x.y.z -| PHP version | x.y.z - -### Observed behaviour - - -### Expected behaviour - - -### Example - diff --git a/lib/vendor/swiftmailer/swiftmailer/.github/PULL_REQUEST_TEMPLATE.md b/lib/vendor/swiftmailer/swiftmailer/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 4b39510..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,14 +0,0 @@ - - -| Q | A -| ------------- | --- -| Bug fix? | yes/no -| New feature? | yes/no -| Doc update? | yes/no -| BC breaks? | yes/no -| Deprecations? | yes/no -| Fixed tickets | #... -| License | MIT - - - diff --git a/lib/vendor/swiftmailer/swiftmailer/.gitignore b/lib/vendor/swiftmailer/swiftmailer/.gitignore deleted file mode 100644 index 20d389a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -/.php_cs.cache -/.phpunit -/build/* -/composer.lock -/phpunit.xml -/tests/acceptance.conf.php -/tests/smoke.conf.php -/vendor/ diff --git a/lib/vendor/swiftmailer/swiftmailer/.php_cs.dist b/lib/vendor/swiftmailer/swiftmailer/.php_cs.dist deleted file mode 100644 index 2c04e04..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/.php_cs.dist +++ /dev/null @@ -1,16 +0,0 @@ -setRules([ - '@Symfony' => true, - '@Symfony:risky' => true, - 'array_syntax' => ['syntax' => 'short'], - 'no_unreachable_default_argument_value' => false, - 'braces' => ['allow_single_line_closure' => true], - 'heredoc_to_nowdoc' => false, - 'phpdoc_annotation_without_dot' => false, - 'ternary_to_null_coalescing' => true, - ]) - ->setRiskyAllowed(true) - ->setFinder(PhpCsFixer\Finder::create()->in(__DIR__)) -; diff --git a/lib/vendor/swiftmailer/swiftmailer/.travis.yml b/lib/vendor/swiftmailer/swiftmailer/.travis.yml deleted file mode 100644 index 610585a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/.travis.yml +++ /dev/null @@ -1,26 +0,0 @@ -language: php - -sudo: false - -before_script: - - cp tests/acceptance.conf.php.default tests/acceptance.conf.php - - cp tests/smoke.conf.php.default tests/smoke.conf.php - - composer self-update - - composer update --no-interaction --prefer-source - - gem install mime-types -v 2.99.1 - - gem install mailcatcher - - mailcatcher --smtp-port 4456 - -script: SYMFONY_PHPUNIT_VERSION=6.1 ./vendor/bin/simple-phpunit - -matrix: - include: - - php: 7.0 - - php: 7.1 - - php: 7.2 - - php: 7.3 - fast_finish: true - -cache: - directories: - - .phpunit diff --git a/lib/vendor/swiftmailer/swiftmailer/CHANGES b/lib/vendor/swiftmailer/swiftmailer/CHANGES deleted file mode 100644 index ad0c815..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/CHANGES +++ /dev/null @@ -1,354 +0,0 @@ -Changelog -========= - -6.2.2 (2019-11-12) ------------------- - - * no changes - -6.2.2 (2019-11-12) ------------------- - - * fixed cmopat with PHP 7.4 - * fixed error message when connecting to a stream raises an error before connect() - -6.2.1 (2019-04-21) ------------------- - - * reverted "deprecated Swift_CharacterStream_ArrayCharacterStream and Swift_CharacterStream_NgCharacterStream in favor of Swift_CharacterStream_CharacterStream" - -6.2.0 (2019-03-10) ------------------- - - * added support for symfony/polyfill-intl-dn - * deprecated Swift_CharacterStream_ArrayCharacterStream and Swift_CharacterStream_NgCharacterStream in favor of Swift_CharacterStream_CharacterStream - -6.1.3 (2018-09-11) ------------------- - - * added auto-start to the SMTP transport when sending a message - * tweaked error message when the response from an SMTP server is empty - * fixed missing property in Swift_Mime_IdGenerator - * exposed original body content type with Swift_Mime_SimpleMimeEntity::getBodyContentType() - * fixed typo in variable name in Swift_AddressEncoder_IdnAddressEncoder - * fixed return type in MessageLogger - * fixed missing property addressEncoder in SimpleHeaderFactory class - -6.1.2 (2018-07-13) ------------------- - - * handled recipient errors when pipelining - -6.1.1 (2018-07-04) ------------------- - - * removed hard dependency on an IDN encoder - -6.1.0 (2018-07-02) ------------------- - - * added address encoder exceptions during send - * added support for bubbling up authenticator error messages - * added support for non-ASCII email addresses - * introduced new dependencies: transport.smtphandlers and transport.authhandlers - * deprecated Swift_Signers_OpenDKIMSigner; use Swift_Signers_DKIMSigner instead - * added support for SMTP pipelining - * added Swift_Transport_Esmtp_EightBitMimeHandler - * fixed startTLS only allowed tls1.0, now allowed: tls1.0, tls1.1, tls1.2 - -6.0.2 (2017-09-30) ------------------- - - * fixed DecoratorPlugin - * removed usage of getmypid() - -6.0.1 (2017-05-20) ------------------- - - * fixed BC break that can be avoided easily - -6.0.0 (2017-05-19) ------------------- - - * added Swift_Transport::ping() - * removed Swift_Mime_HeaderFactory, Swift_Mime_HeaderSet, Swift_Mime_Message, Swift_Mime_MimeEntity, - and Swift_Mime_ParameterizedHeader interfaces - * removed Swift_MailTransport and Swift_Transport_MailTransport - * removed Swift_Encoding - * removed the Swift_Transport_MailInvoker interface and Swift_Transport_SimpleMailInvoker class - * removed the Swift_SignedMessage class - * removed newInstance() methods everywhere - * methods operating on Date header now use DateTimeImmutable object instead of Unix timestamp; - Swift_Mime_Headers_DateHeader::getTimestamp()/setTimestamp() renamed to getDateTime()/setDateTime() - * bumped minimum version to PHP 7.0 - * removed Swift_Validate and replaced by egulias/email-validator - -5.4.9 (2018-01-23) ------------------- - - * no changes, last version of the 5.x series - -5.4.8 (2017-05-01) ------------------- - - * fixed encoding inheritance in addPart() - * fixed sorting MIME children when their types are equal - -5.4.7 (2017-04-20) ------------------- - - * fixed NTLMAuthenticator clobbering bcmath scale - -5.4.6 (2017-02-13) ------------------- - - * removed exceptions thrown in destructors as they lead to fatal errors - * switched to use sha256 by default in DKIM as per the RFC - * fixed an 'Undefined variable: pipes' PHP notice - * fixed long To headers when using the mail transport - * fixed NTLMAuthenticator when no domain is passed with the username - * prevented fatal error during unserialization of a message - * fixed a PHP warning when sending a message that has a length of a multiple of 8192 - -5.4.5 (2016-12-29) ------------------- - - * SECURITY FIX: fixed CVE-2016-10074 by disallowing potentially unsafe shell characters - - Prior to 5.4.5, the mail transport (Swift_Transport_MailTransport) was vulnerable to passing - arbitrary shell arguments if the "From", "ReturnPath" or "Sender" header came - from a non-trusted source, potentially allowing Remote Code Execution - * deprecated the mail transport - -5.4.4 (2016-11-23) ------------------- - - * reverted escaping command-line args to mail (PHP mail() function already does it) - -5.4.3 (2016-07-08) ------------------- - - * fixed SimpleHeaderSet::has()/get() when the 0 index is removed - * removed the need to have mcrypt installed - * fixed broken MIME header encoding with quotes/colons and non-ascii chars - * allowed mail transport send for messages without To header - * fixed PHP 7 support - -5.4.2 (2016-05-01) ------------------- - - * fixed support for IPv6 sockets - * added auto-retry when sending messages from the memory spool - * fixed consecutive read calls in Swift_ByteStream_FileByteStream - * added support for iso-8859-15 encoding - * fixed PHP mail extra params on missing reversePath - * added methods to set custom stream context options - * fixed charset changes in QpContentEncoderProxy - * added return-path header to the ignoredHeaders list of DKIMSigner - * fixed crlf for subject using mail - * fixed add soft line break only when necessary - * fixed escaping command-line args to mail - -5.4.1 (2015-06-06) ------------------- - - * made Swiftmailer exceptions confirm to PHP base exception constructor signature - * fixed MAIL FROM & RCPT TO headers to be RFC compliant - -5.4.0 (2015-03-14) ------------------- - - * added the possibility to add extra certs to PKCS#7 signature - * fix base64 encoding with streams - * added a new RESULT_SPOOLED status for SpoolTransport - * fixed getBody() on attachments when called more than once - * removed dots from generated filenames in filespool - -5.3.1 (2014-12-05) ------------------- - - * fixed cloning of messages with attachments - -5.3.0 (2014-10-04) ------------------- - - * fixed cloning when using signers - * reverted removal of Swift_Encoding - * drop support for PHP 5.2.x - -5.2.2 (2014-09-20) ------------------- - - * fixed Japanese support - * fixed the memory spool when the message changes when in the pool - * added support for cloning messages - * fixed PHP warning in the redirect plugin - * changed the way to and cc-ed email are sent to only use one transaction - -5.2.1 (2014-06-13) ------------------- - - * SECURITY FIX: fixed CLI escaping when using sendmail as a transport - - Prior to 5.2.1, the sendmail transport (Swift_Transport_SendmailTransport) - was vulnerable to an arbitrary shell execution if the "From" header came - from a non-trusted source and no "Return-Path" is configured. - - * fixed parameter in DKIMSigner - * fixed compatibility with PHP < 5.4 - -5.2.0 (2014-05-08) ------------------- - - * fixed Swift_ByteStream_FileByteStream::read() to match to the specification - * fixed from-charset and to-charset arguments in mbstring_convert_encoding() usages - * fixed infinite loop in StreamBuffer - * fixed NullTransport to return the number of ignored emails instead of 0 - * Use phpunit and mockery for unit testing (realityking) - -5.1.0 (2014-03-18) ------------------- - - * fixed data writing to stream when sending large messages - * added support for libopendkim (https://github.com/xdecock/php-opendkim) - * merged SignedMessage and Message - * added Gmail XOAuth2 authentication - * updated the list of known mime types - * added NTLM authentication - -5.0.3 (2013-12-03) ------------------- - - * fixed double-dot bug - * fixed DKIM signer - -5.0.2 (2013-08-30) ------------------- - - * handled correct exception type while reading IoBuffer output - -5.0.1 (2013-06-17) ------------------- - - * changed the spool to only start the transport when a mail has to be sent - * fixed compatibility with PHP 5.2 - * fixed LICENSE file - -5.0.0 (2013-04-30) ------------------- - - * changed the license from LGPL to MIT - -4.3.1 (2013-04-11) ------------------- - - * removed usage of the native QP encoder when the charset is not UTF-8 - * fixed usage of uniqid to avoid collisions - * made a performance improvement when tokenizing large headers - * fixed usage of the PHP native QP encoder on PHP 5.4.7+ - -4.3.0 (2013-01-08) ------------------- - - * made the temporary directory configurable via the TMPDIR env variable - * added S/MIME signer and encryption support - -4.2.2 (2012-10-25) ------------------- - - * added the possibility to throttle messages per second in ThrottlerPlugin (mostly for Amazon SES) - * switched mime.qpcontentencoder to automatically use the PHP native encoder on PHP 5.4.7+ - * allowed specifying a whitelist with regular expressions in RedirectingPlugin - -4.2.1 (2012-07-13) ------------------- - - * changed the coding standards to PSR-1/2 - * fixed issue with autoloading - * added NativeQpContentEncoder to enhance performance (for PHP 5.3+) - -4.2.0 (2012-06-29) ------------------- - - * added documentation about how to use the Japanese support introduced in 4.1.8 - * added a way to override the default configuration in a lazy way - * changed the PEAR init script to lazy-load the initialization - * fixed a bug when calling Swift_Preferences before anything else (regression introduced in 4.1.8) - -4.1.8 (2012-06-17) ------------------- - - * added Japanese iso-2022-jp support - * changed the init script to lazy-load the initialization - * fixed docblocks (@id) which caused some problems with libraries parsing the dobclocks - * fixed Swift_Mime_Headers_IdentificationHeader::setId() when passed an array of ids - * fixed encoding of email addresses in headers - * added replacements setter to the Decorator plugin - -4.1.7 (2012-04-26) ------------------- - - * fixed QpEncoder safeMapShareId property - -4.1.6 (2012-03-23) ------------------- - - * reduced the size of serialized Messages - -4.1.5 (2012-01-04) ------------------- - - * enforced Swift_Spool::queueMessage() to return a Boolean - * made an optimization to the memory spool: start the transport only when required - * prevented stream_socket_client() from generating an error and throw a Swift_TransportException instead - * fixed a PHP warning when calling to mail() when safe_mode is off - * many doc tweaks - -4.1.4 (2011-12-16) ------------------- - - * added a memory spool (Swift_MemorySpool) - * fixed too many opened files when sending emails with attachments - -4.1.3 (2011-10-27) ------------------- - - * added STARTTLS support - * added missing @return tags on fluent methods - * added a MessageLogger plugin that logs all sent messages - * added composer.json - -4.1.2 (2011-09-13) ------------------- - - * fixed wrong detection of magic_quotes_runtime - * fixed fatal errors when no To or Subject header has been set - * fixed charset on parameter header continuations - * added documentation about how to install Swiftmailer from the PEAR channel - * fixed various typos and markup problem in the documentation - * fixed warning when cache directory does not exist - * fixed "slashes are escaped" bug - * changed require_once() to require() in autoload - -4.1.1 (2011-07-04) ------------------- - - * added missing file in PEAR package - -4.1.0 (2011-06-30) ------------------- - - * documentation has been converted to ReST - -4.1.0 RC1 (2011-06-17) ----------------------- - -New features: - - * changed the Decorator Plugin to allow replacements in all headers - * added Swift_Mime_Grammar and Swift_Validate to validate an email address - * modified the autoloader to lazy-initialize Swiftmailer - * removed Swift_Mailer::batchSend() - * added NullTransport - * added new plugins: RedirectingPlugin and ImpersonatePlugin - * added a way to send messages asynchronously (Spool) diff --git a/lib/vendor/swiftmailer/swiftmailer/LICENSE b/lib/vendor/swiftmailer/swiftmailer/LICENSE deleted file mode 100644 index bb9c80f..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2013-2018 Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/vendor/swiftmailer/swiftmailer/README.md b/lib/vendor/swiftmailer/swiftmailer/README.md deleted file mode 100644 index e718bc6..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/README.md +++ /dev/null @@ -1,19 +0,0 @@ -Swift Mailer ------------- - -Swift Mailer is a component based mailing solution for PHP 7. -It is released under the MIT license. - -Swift Mailer is highly object-oriented by design and lends itself -to use in complex web application with a great deal of flexibility. - -For full details on usage, read the [documentation](https://swiftmailer.symfony.com/docs/introduction.html). - -Sponsors --------- - - diff --git a/lib/vendor/swiftmailer/swiftmailer/composer.json b/lib/vendor/swiftmailer/swiftmailer/composer.json deleted file mode 100644 index a996e21..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/composer.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "swiftmailer/swiftmailer", - "type": "library", - "description": "Swiftmailer, free feature-rich PHP mailer", - "keywords": ["mail","mailer","email"], - "homepage": "https://swiftmailer.symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "require": { - "php": ">=7.0.0", - "egulias/email-validator": "~2.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-intl-idn": "^1.10" - }, - "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses", - "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" - }, - "autoload": { - "files": ["lib/swift_required.php"] - }, - "autoload-dev": { - "psr-0": { "Swift_": "tests/unit" } - }, - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/doc/headers.rst b/lib/vendor/swiftmailer/swiftmailer/doc/headers.rst deleted file mode 100644 index 8b8bece..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/doc/headers.rst +++ /dev/null @@ -1,621 +0,0 @@ -Message Headers -=============== - -Sometimes you'll want to add your own headers to a message or modify/remove -headers that are already present. You work with the message's HeaderSet to do -this. - -Header Basics -------------- - -All MIME entities in Swift Mailer -- including the message itself -- store -their headers in a single object called a HeaderSet. This HeaderSet is -retrieved with the ``getHeaders()`` method. - -As mentioned in the previous chapter, everything that forms a part of a message -in Swift Mailer is a MIME entity that is represented by an instance of -``Swift_Mime_SimpleMimeEntity``. This includes -- most notably -- the message -object itself, attachments, MIME parts and embedded images. Each of these MIME -entities consists of a body and a set of headers that describe the body. - -For all of the "standard" headers in these MIME entities, such as the -``Content-Type``, there are named methods for working with them, such as -``setContentType()`` and ``getContentType()``. This is because headers are a -moderately complex area of the library. Each header has a slightly different -required structure that it must meet in order to comply with the standards that -govern email (and that are checked by spam blockers etc). - -You fetch the HeaderSet from a MIME entity like so:: - - $message = new Swift_Message(); - - // Fetch the HeaderSet from a Message object - $headers = $message->getHeaders(); - - $attachment = Swift_Attachment::fromPath('document.pdf'); - - // Fetch the HeaderSet from an attachment object - $headers = $attachment->getHeaders(); - -The job of the HeaderSet is to contain and manage instances of Header objects. -Depending upon the MIME entity the HeaderSet came from, the contents of the -HeaderSet will be different, since an attachment for example has a different -set of headers to those in a message. - -You can find out what the HeaderSet contains with a quick loop, dumping out the -names of the headers:: - - foreach ($headers->getAll() as $header) { - printf("%s
\n", $header->getFieldName()); - } - - /* - Content-Transfer-Encoding - Content-Type - MIME-Version - Date - Message-ID - From - Subject - To - */ - -You can also dump out the rendered HeaderSet by calling its ``toString()`` -method:: - - echo $headers->toString(); - - /* - Message-ID: <1234869991.499a9ee7f1d5e@swift.generated> - Date: Tue, 17 Feb 2009 22:26:31 +1100 - Subject: Awesome subject! - From: sender@example.org - To: recipient@example.org - MIME-Version: 1.0 - Content-Type: text/plain; charset=utf-8 - Content-Transfer-Encoding: quoted-printable - */ - -Where the complexity comes in is when you want to modify an existing header. -This complexity comes from the fact that each header can be of a slightly -different type (such as a Date header, or a header that contains email -addresses, or a header that has key-value parameters on it!). Each header in -the HeaderSet is an instance of ``Swift_Mime_Header``. They all have common -functionality, but knowing exactly what type of header you're working with will -allow you a little more control. - -You can determine the type of header by comparing the return value of its -``getFieldType()`` method with the constants ``TYPE_TEXT``, -``TYPE_PARAMETERIZED``, ``TYPE_DATE``, ``TYPE_MAILBOX``, ``TYPE_ID`` and -``TYPE_PATH`` which are defined in ``Swift_Mime_Header``:: - - foreach ($headers->getAll() as $header) { - switch ($header->getFieldType()) { - case Swift_Mime_Header::TYPE_TEXT: $type = 'text'; - break; - case Swift_Mime_Header::TYPE_PARAMETERIZED: $type = 'parameterized'; - break; - case Swift_Mime_Header::TYPE_MAILBOX: $type = 'mailbox'; - break; - case Swift_Mime_Header::TYPE_DATE: $type = 'date'; - break; - case Swift_Mime_Header::TYPE_ID: $type = 'ID'; - break; - case Swift_Mime_Header::TYPE_PATH: $type = 'path'; - break; - } - printf("%s: is a %s header
\n", $header->getFieldName(), $type); - } - - /* - Content-Transfer-Encoding: is a text header - Content-Type: is a parameterized header - MIME-Version: is a text header - Date: is a date header - Message-ID: is a ID header - From: is a mailbox header - Subject: is a text header - To: is a mailbox header - */ - -Headers can be removed from the set, modified within the set, or added to the -set. - -The following sections show you how to work with the HeaderSet and explain the -details of each implementation of ``Swift_Mime_Header`` that may exist within -the HeaderSet. - -Header Types ------------- - -Because all headers are modeled on different data (dates, addresses, text!) -there are different types of Header in Swift Mailer. Swift Mailer attempts to -categorize all possible MIME headers into more general groups, defined by a -small number of classes. - -Text Headers -~~~~~~~~~~~~ - -Text headers are the simplest type of Header. They contain textual information -with no special information included within it -- for example the Subject -header in a message. - -There's nothing particularly interesting about a text header, though it is -probably the one you'd opt to use if you need to add a custom header to a -message. It represents text just like you'd think it does. If the text contains -characters that are not permitted in a message header (such as new lines, or -non-ascii characters) then the header takes care of encoding the text so that -it can be used. - -No header -- including text headers -- in Swift Mailer is vulnerable to -header-injection attacks. Swift Mailer breaks any attempt at header injection -by encoding the dangerous data into a non-dangerous form. - -It's easy to add a new text header to a HeaderSet. You do this by calling the -HeaderSet's ``addTextHeader()`` method:: - - $message = new Swift_Message(); - $headers = $message->getHeaders(); - $headers->addTextHeader('Your-Header-Name', 'the header value'); - -Changing the value of an existing text header is done by calling it's -``setValue()`` method:: - - $subject = $message->getHeaders()->get('Subject'); - $subject->setValue('new subject'); - -When output via ``toString()``, a text header produces something like the -following:: - - $subject = $message->getHeaders()->get('Subject'); - $subject->setValue('amazing subject line'); - echo $subject->toString(); - - /* - - Subject: amazing subject line - - */ - -If the header contains any characters that are outside of the US-ASCII range -however, they will be encoded. This is nothing to be concerned about since mail -clients will decode them back:: - - $subject = $message->getHeaders()->get('Subject'); - $subject->setValue('contains – dash'); - echo $subject->toString(); - - /* - - Subject: contains =?utf-8?Q?=E2=80=93?= dash - - */ - -Parameterized Headers -~~~~~~~~~~~~~~~~~~~~~ - -Parameterized headers are text headers that contain key-value parameters -following the textual content. The Content-Type header of a message is a -parameterized header since it contains charset information after the content -type. - -The parameterized header type is a special type of text header. It extends the -text header by allowing additional information to follow it. All of the methods -from text headers are available in addition to the methods described here. - -Adding a parameterized header to a HeaderSet is done by using the -``addParameterizedHeader()`` method which takes a text value like -``addTextHeader()`` but it also accepts an associative array of key-value -parameters:: - - $message = new Swift_Message(); - $headers = $message->getHeaders(); - $headers->addParameterizedHeader( - 'Header-Name', 'header value', - ['foo' => 'bar'] - ); - -To change the text value of the header, call it's ``setValue()`` method just as -you do with text headers. - -To change the parameters in the header, call the header's ``setParameters()`` -method or the ``setParameter()`` method (note the pluralization):: - - $type = $message->getHeaders()->get('Content-Type'); - - // setParameters() takes an associative array - $type->setParameters([ - 'name' => 'file.txt', - 'charset' => 'iso-8859-1' - ]); - - // setParameter() takes two args for $key and $value - $type->setParameter('charset', 'iso-8859-1'); - -When output via ``toString()``, a parameterized header produces something like -the following:: - - $type = $message->getHeaders()->get('Content-Type'); - $type->setValue('text/html'); - $type->setParameter('charset', 'utf-8'); - - echo $type->toString(); - - /* - - Content-Type: text/html; charset=utf-8 - - */ - -If the header contains any characters that are outside of the US-ASCII range -however, they will be encoded, just like they are for text headers. This is -nothing to be concerned about since mail clients will decode them back. -Likewise, if the parameters contain any non-ascii characters they will be -encoded so that they can be transmitted safely:: - - $attachment = new Swift_Attachment(); - $disp = $attachment->getHeaders()->get('Content-Disposition'); - $disp->setValue('attachment'); - $disp->setParameter('filename', 'report–may.pdf'); - echo $disp->toString(); - - /* - - Content-Disposition: attachment; filename*=utf-8''report%E2%80%93may.pdf - - */ - -Date Headers -~~~~~~~~~~~~ - -Date headers contains an RFC 2822 formatted date (i.e. what PHP's ``date('r')`` -returns). They are used anywhere a date or time is needed to be presented as a -message header. - -The data on which a date header is modeled as a DateTimeImmutable object. The -object is used to create a correctly structured RFC 2822 formatted date with -timezone such as ``Tue, 17 Feb 2009 22:26:31 +1100``. - -The obvious place this header type is used is in the ``Date:`` header of the -message itself. - -It's easy to add a new date header to a HeaderSet. You do this by calling the -HeaderSet's ``addDateHeader()`` method:: - - $message = new Swift_Message(); - $headers = $message->getHeaders(); - $headers->addDateHeader('Your-Header', new DateTimeImmutable('3 days ago')); - -Changing the value of an existing date header is done by calling it's -``setDateTime()`` method:: - - $date = $message->getHeaders()->get('Date'); - $date->setDateTime(new DateTimeImmutable()); - -When output via ``toString()``, a date header produces something like the -following:: - - $date = $message->getHeaders()->get('Date'); - echo $date->toString(); - - /* - - Date: Wed, 18 Feb 2009 13:35:02 +1100 - - */ - -Mailbox (e-mail address) Headers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Mailbox headers contain one or more email addresses, possibly with personalized -names attached to them. The data on which they are modeled is represented by an -associative array of email addresses and names. - -Mailbox headers are probably the most complex header type to understand in -Swift Mailer because they accept their input as an array which can take various -forms, as described in the previous chapter. - -All of the headers that contain e-mail addresses in a message -- with the -exception of ``Return-Path:`` which has a stricter syntax -- use this header -type. That is, ``To:``, ``From:`` etc. - -You add a new mailbox header to a HeaderSet by calling the HeaderSet's -``addMailboxHeader()`` method:: - - $message = new Swift_Message(); - $headers = $message->getHeaders(); - $headers->addMailboxHeader('Your-Header-Name', [ - 'person1@example.org' => 'Person Name One', - 'person2@example.org', - 'person3@example.org', - 'person4@example.org' => 'Another named person' - ]); - -Changing the value of an existing mailbox header is done by calling it's -``setNameAddresses()`` method:: - - $to = $message->getHeaders()->get('To'); - $to->setNameAddresses([ - 'joe@example.org' => 'Joe Bloggs', - 'john@example.org' => 'John Doe', - 'no-name@example.org' - ]); - -If you don't wish to concern yourself with the complicated accepted input -formats accepted by ``setNameAddresses()`` as described in the previous chapter -and you only want to set one or more addresses (not names) then you can just -use the ``setAddresses()`` method instead:: - - $to = $message->getHeaders()->get('To'); - $to->setAddresses([ - 'joe@example.org', - 'john@example.org', - 'no-name@example.org' - ]); - -.. note:: - - Both methods will accept the above input format in practice. - -If all you want to do is set a single address in the header, you can use a -string as the input parameter to ``setAddresses()`` and/or -``setNameAddresses()``:: - - $to = $message->getHeaders()->get('To'); - $to->setAddresses('joe-bloggs@example.org'); - -When output via ``toString()``, a mailbox header produces something like the -following:: - - $to = $message->getHeaders()->get('To'); - $to->setNameAddresses([ - 'person1@example.org' => 'Name of Person', - 'person2@example.org', - 'person3@example.org' => 'Another Person' - ]); - - echo $to->toString(); - - /* - - To: Name of Person , person2@example.org, Another Person - - - */ - -Internationalized domains are automatically converted to IDN encoding:: - - $to = $message->getHeaders()->get('To'); - $to->setAddresses('joe@ëxämple.org'); - - echo $to->toString(); - - /* - - To: joe@xn--xmple-gra1c.org - - */ - -ID Headers -~~~~~~~~~~ - -ID headers contain identifiers for the entity (or the message). The most -notable ID header is the Message-ID header on the message itself. - -An ID that exists inside an ID header looks more-or-less less like an email -address. For example, ``<1234955437.499becad62ec2@example.org>``. The part to -the left of the @ sign is usually unique, based on the current time and some -random factor. The part on the right is usually a domain name. - -Any ID passed to the header's ``setId()`` method absolutely MUST conform to -this structure, otherwise you'll get an Exception thrown at you by Swift Mailer -(a ``Swift_RfcComplianceException``). This is to ensure that the generated -email complies with relevant RFC documents and therefore is less likely to be -blocked as spam. - -It's easy to add a new ID header to a HeaderSet. You do this by calling the -HeaderSet's ``addIdHeader()`` method:: - - $message = new Swift_Message(); - $headers = $message->getHeaders(); - $headers->addIdHeader('Your-Header-Name', '123456.unqiue@example.org'); - -Changing the value of an existing ID header is done by calling its ``setId()`` -method:: - - $msgId = $message->getHeaders()->get('Message-ID'); - $msgId->setId(time() . '.' . uniqid('thing') . '@example.org'); - -When output via ``toString()``, an ID header produces something like the -following:: - - $msgId = $message->getHeaders()->get('Message-ID'); - echo $msgId->toString(); - - /* - - Message-ID: <1234955437.499becad62ec2@example.org> - - */ - -Path Headers -~~~~~~~~~~~~ - -Path headers are like very-restricted mailbox headers. They contain a single -email address with no associated name. The Return-Path header of a message is a -path header. - -You add a new path header to a HeaderSet by calling the HeaderSet's -``addPathHeader()`` method:: - - $message = new Swift_Message(); - $headers = $message->getHeaders(); - $headers->addPathHeader('Your-Header-Name', 'person@example.org'); - -Changing the value of an existing path header is done by calling its -``setAddress()`` method:: - - $return = $message->getHeaders()->get('Return-Path'); - $return->setAddress('my-address@example.org'); - -When output via ``toString()``, a path header produces something like the -following:: - - $return = $message->getHeaders()->get('Return-Path'); - $return->setAddress('person@example.org'); - echo $return->toString(); - - /* - - Return-Path: - - */ - -Header Operations ------------------ - -Working with the headers in a message involves knowing how to use the methods -on the HeaderSet and on the individual Headers within the HeaderSet. - -Adding new Headers -~~~~~~~~~~~~~~~~~~ - -New headers can be added to the HeaderSet by using one of the provided -``add..Header()`` methods. - -The added header will appear in the message when it is sent:: - - // Adding a custom header to a message - $message = new Swift_Message(); - $headers = $message->getHeaders(); - $headers->addTextHeader('X-Mine', 'something here'); - - // Adding a custom header to an attachment - $attachment = Swift_Attachment::fromPath('/path/to/doc.pdf'); - $attachment->getHeaders()->addDateHeader('X-Created-Time', time()); - -Retrieving Headers -~~~~~~~~~~~~~~~~~~ - -Headers are retrieved through the HeaderSet's ``get()`` and ``getAll()`` -methods:: - - $headers = $message->getHeaders(); - - // Get the To: header - $toHeader = $headers->get('To'); - - // Get all headers named "X-Foo" - $fooHeaders = $headers->getAll('X-Foo'); - - // Get the second header named "X-Foo" - $foo = $headers->get('X-Foo', 1); - - // Get all headers that are present - $all = $headers->getAll(); - -When using ``get()`` a single header is returned that matches the name (case -insensitive) that is passed to it. When using ``getAll()`` with a header name, -an array of headers with that name are returned. Calling ``getAll()`` with no -arguments returns an array of all headers present in the entity. - -.. note:: - - It's valid for some headers to appear more than once in a message (e.g. - the Received header). For this reason ``getAll()`` exists to fetch all - headers with a specified name. In addition, ``get()`` accepts an optional - numerical index, starting from zero to specify which header you want more - specifically. - -.. note:: - - If you want to modify the contents of the header and you don't know for - sure what type of header it is then you may need to check the type by - calling its ``getFieldType()`` method. - -Check if a Header Exists -~~~~~~~~~~~~~~~~~~~~~~~~ - -You can check if a named header is present in a HeaderSet by calling its -``has()`` method:: - - $headers = $message->getHeaders(); - - // Check if the To: header exists - if ($headers->has('To')) { - echo 'To: exists'; - } - - // Check if an X-Foo header exists twice (i.e. check for the 2nd one) - if ($headers->has('X-Foo', 1)) { - echo 'Second X-Foo header exists'; - } - -If the header exists, ``true`` will be returned or ``false`` if not. - -.. note:: - - It's valid for some headers to appear more than once in a message (e.g. - the Received header). For this reason ``has()`` accepts an optional - numerical index, starting from zero to specify which header you want to - check more specifically. - -Removing Headers -~~~~~~~~~~~~~~~~ - -Removing a Header from the HeaderSet is done by calling the HeaderSet's -``remove()`` or ``removeAll()`` methods:: - - $headers = $message->getHeaders(); - - // Remove the Subject: header - $headers->remove('Subject'); - - // Remove all X-Foo headers - $headers->removeAll('X-Foo'); - - // Remove only the second X-Foo header - $headers->remove('X-Foo', 1); - -When calling ``remove()`` a single header will be removed. When calling -``removeAll()`` all headers with the given name will be removed. If no headers -exist with the given name, no errors will occur. - -.. note:: - - It's valid for some headers to appear more than once in a message (e.g. - the Received header). For this reason ``remove()`` accepts an optional - numerical index, starting from zero to specify which header you want to - check more specifically. For the same reason, ``removeAll()`` exists to - remove all headers that have the given name. - -Modifying a Header's Content -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -To change a Header's content you should know what type of header it is and then -call it's appropriate setter method. All headers also have a -``setFieldBodyModel()`` method that accepts a mixed parameter and delegates to -the correct setter:: - -The header will be updated inside the HeaderSet and the changes will be seen -when the message is sent:: - - $headers = $message->getHeaders(); - - // Change the Subject: header - $subj = $headers->get('Subject'); - $subj->setValue('new subject here'); - - // Change the To: header - $to = $headers->get('To'); - $to->setNameAddresses([ - 'person@example.org' => 'Person', - 'thing@example.org' - ]); - - // Using the setFieldBodyModel() just delegates to the correct method - // So here to calls setNameAddresses() - $to->setFieldBodyModel([ - 'person@example.org' => 'Person', - 'thing@example.org' - ]); diff --git a/lib/vendor/swiftmailer/swiftmailer/doc/index.rst b/lib/vendor/swiftmailer/swiftmailer/doc/index.rst deleted file mode 100644 index 5d92889..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/doc/index.rst +++ /dev/null @@ -1,12 +0,0 @@ -Swiftmailer -=========== - -.. toctree:: - :maxdepth: 2 - - introduction - messages - headers - sending - plugins - japanese diff --git a/lib/vendor/swiftmailer/swiftmailer/doc/introduction.rst b/lib/vendor/swiftmailer/swiftmailer/doc/introduction.rst deleted file mode 100644 index 774e9f4..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/doc/introduction.rst +++ /dev/null @@ -1,61 +0,0 @@ -Introduction -============ - -Swift Mailer is a for sending e-mails from PHP applications. - -System Requirements -------------------- - -Swift Mailer requires PHP 7.0 or higher (``proc_*`` functions must be -available). - -Swift Mailer does not work when used with function overloading as implemented -by ``mbstring`` when ``mbstring.func_overload`` is set to ``2``. - -Installation ------------- - -The recommended way to install Swiftmailer is via Composer: - -.. code-block:: bash - - $ composer require "swiftmailer/swiftmailer:^6.0" - -Basic Usage ------------ - -Here is the simplest way to send emails with Swift Mailer:: - - require_once '/path/to/vendor/autoload.php'; - - // Create the Transport - $transport = (new Swift_SmtpTransport('smtp.example.org', 25)) - ->setUsername('your username') - ->setPassword('your password') - ; - - // Create the Mailer using your created Transport - $mailer = new Swift_Mailer($transport); - - // Create a message - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself') - ; - - // Send the message - $result = $mailer->send($message); - -You can also use Sendmail as a transport:: - - // Sendmail - $transport = new Swift_SendmailTransport('/usr/sbin/sendmail -bs'); - -Getting Help ------------- - -For general support, use `Stack Overflow `_. - -For bug reports and feature requests, create a new ticket in `GitHub -`_. diff --git a/lib/vendor/swiftmailer/swiftmailer/doc/japanese.rst b/lib/vendor/swiftmailer/swiftmailer/doc/japanese.rst deleted file mode 100644 index 5454821..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/doc/japanese.rst +++ /dev/null @@ -1,19 +0,0 @@ -Using Swift Mailer for Japanese Emails -====================================== - -To send emails in Japanese, you need to tweak the default configuration. - -Call the ``Swift::init()`` method with the following code as early as possible -in your code:: - - Swift::init(function () { - Swift_DependencyContainer::getInstance() - ->register('mime.qpheaderencoder') - ->asAliasOf('mime.base64headerencoder'); - - Swift_Preferences::getInstance()->setCharset('iso-2022-jp'); - }); - - /* rest of code goes here */ - -That's all! diff --git a/lib/vendor/swiftmailer/swiftmailer/doc/messages.rst b/lib/vendor/swiftmailer/swiftmailer/doc/messages.rst deleted file mode 100644 index a3431a4..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/doc/messages.rst +++ /dev/null @@ -1,947 +0,0 @@ -Creating Messages -================= - -Creating messages in Swift Mailer is done by making use of the various MIME -entities provided with the library. Complex messages can be quickly created -with very little effort. - -Quick Reference ---------------- - -You can think of creating a Message as being similar to the steps you perform -when you click the Compose button in your mail client. You give it a subject, -specify some recipients, add any attachments and write your message:: - - // Create the message - $message = (new Swift_Message()) - - // Give the message a subject - ->setSubject('Your subject') - - // Set the From address with an associative array - ->setFrom(['john@doe.com' => 'John Doe']) - - // Set the To addresses with an associative array (setTo/setCc/setBcc) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - - // Give it a body - ->setBody('Here is the message itself') - - // And optionally an alternative body - ->addPart('Here is the message itself', 'text/html') - - // Optionally add any attachments - ->attach(Swift_Attachment::fromPath('my-document.pdf')) - ; - -Message Basics --------------- - -A message is a container for anything you want to send to somebody else. There -are several basic aspects of a message that you should know. - -An e-mail message is made up of several relatively simple entities that are -combined in different ways to achieve different results. All of these entities -have the same fundamental outline but serve a different purpose. The Message -itself can be defined as a MIME entity, an Attachment is a MIME entity, all -MIME parts are MIME entities -- and so on! - -The basic units of each MIME entity -- be it the Message itself, or an -Attachment -- are its Headers and its body: - -.. code-block:: text - - Header-Name: A header value - Other-Header: Another value - - The body content itself - -The Headers of a MIME entity, and its body must conform to some strict -standards defined by various RFC documents. Swift Mailer ensures that these -specifications are followed by using various types of object, including -Encoders and different Header types to generate the entity. - -The Structure of a Message -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Of all of the MIME entities, a message -- ``Swift_Message`` is the largest and -most complex. It has many properties that can be updated and it can contain -other MIME entities -- attachments for example -- nested inside it. - -A Message has a lot of different Headers which are there to present information -about the message to the recipients' mail client. Most of these headers will be -familiar to the majority of users, but we'll list the basic ones. Although it's -possible to work directly with the Headers of a Message (or other MIME entity), -the standard Headers have accessor methods provided to abstract away the -complex details for you. For example, although the Date on a message is written -with a strict format, you only need to pass a DateTimeInterface instance to -``setDate()``. - -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| Header | Description | Accessors | -+===============================+====================================================================================================================================+=============================================+ -| ``Message-ID`` | Identifies this message with a unique ID, usually containing the domain name and time generated | ``getId()`` / ``setId()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``Return-Path`` | Specifies where bounces should go (Swift Mailer reads this for other uses) | ``getReturnPath()`` / ``setReturnPath()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``From`` | Specifies the address of the person who the message is from. This can be multiple addresses if multiple people wrote the message. | ``getFrom()`` / ``setFrom()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``Sender`` | Specifies the address of the person who physically sent the message (higher precedence than ``From:``) | ``getSender()`` / ``setSender()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``To`` | Specifies the addresses of the intended recipients | ``getTo()`` / ``setTo()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``Cc`` | Specifies the addresses of recipients who will be copied in on the message | ``getCc()`` / ``setCc()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``Bcc`` | Specifies the addresses of recipients who the message will be blind-copied to. Other recipients will not be aware of these copies. | ``getBcc()`` / ``setBcc()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``Reply-To`` | Specifies the address where replies are sent to | ``getReplyTo()`` / ``setReplyTo()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``Subject`` | Specifies the subject line that is displayed in the recipients' mail client | ``getSubject()`` / ``setSubject()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``Date`` | Specifies the date at which the message was sent | ``getDate()`` / ``setDate()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``Content-Type`` | Specifies the format of the message (usually text/plain or text/html) | ``getContentType()`` / ``setContentType()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ -| ``Content-Transfer-Encoding`` | Specifies the encoding scheme in the message | ``getEncoder()`` / ``setEncoder()`` | -+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ - -Working with a Message Object -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Although there are a lot of available methods on a message object, you only -need to make use of a small subset of them. Usually you'll use -``setSubject()``, ``setTo()`` and ``setFrom()`` before setting the body of your -message with ``setBody()``:: - - $message = new Swift_Message(); - $message->setSubject('My subject'); - -All MIME entities (including a message) have a ``toString()`` method that you -can call if you want to take a look at what is going to be sent. For example, -if you ``echo $message->toString();`` you would see something like this: - -.. code-block:: text - - Message-ID: <1230173678.4952f5eeb1432@swift.generated> - Date: Thu, 25 Dec 2008 13:54:38 +1100 - Subject: Example subject - From: Chris Corbyn - To: Receiver Name - MIME-Version: 1.0 - Content-Type: text/plain; charset=utf-8 - Content-Transfer-Encoding: quoted-printable - - Here is the message - -We'll take a closer look at the methods you use to create your message in the -following sections. - -Adding Content to Your Message ------------------------------- - -Rich content can be added to messages in Swift Mailer with relative ease by -calling methods such as ``setSubject()``, ``setBody()``, ``addPart()`` and -``attach()``. - -Setting the Subject Line -~~~~~~~~~~~~~~~~~~~~~~~~ - -The subject line, displayed in the recipients' mail client can be set with the -``setSubject()`` method, or as a parameter to ``new Swift_Message()``:: - - // Pass it as a parameter when you create the message - $message = new Swift_Message('My amazing subject'); - - // Or set it after like this - $message->setSubject('My amazing subject'); - -Setting the Body Content -~~~~~~~~~~~~~~~~~~~~~~~~ - -The body of the message -- seen when the user opens the message -- is specified -by calling the ``setBody()`` method. If an alternative body is to be included, -``addPart()`` can be used. - -The body of a message is the main part that is read by the user. Often people -want to send a message in HTML format (``text/html``), other times people want -to send in plain text (``text/plain``), or sometimes people want to send both -versions and allow the recipient to choose how they view the message. - -As a rule of thumb, if you're going to send a HTML email, always include a -plain-text equivalent of the same content so that users who prefer to read -plain text can do so. - -If the recipient's mail client offers preferences for displaying text vs. HTML -then the mail client will present that part to the user where available. In -other cases the mail client will display the "best" part it can - usually HTML -if you've included HTML:: - - // Pass it as a parameter when you create the message - $message = new Swift_Message('Subject here', 'My amazing body'); - - // Or set it after like this - $message->setBody('My amazing body', 'text/html'); - - // Add alternative parts with addPart() - $message->addPart('My amazing body in plain text', 'text/plain'); - -Attaching Files ---------------- - -Attachments are downloadable parts of a message and can be added by calling the -``attach()`` method on the message. You can add attachments that exist on disk, -or you can create attachments on-the-fly. - -Although we refer to files sent over e-mails as "attachments" -- because -they're attached to the message -- lots of other parts of the message are -actually "attached" even if we don't refer to these parts as attachments. - -File attachments are created by the ``Swift_Attachment`` class and then -attached to the message via the ``attach()`` method on it. For all of the -"every day" MIME types such as all image formats, word documents, PDFs and -spreadsheets you don't need to explicitly set the content-type of the -attachment, though it would do no harm to do so. For less common formats you -should set the content-type -- which we'll cover in a moment. - -Attaching Existing Files -~~~~~~~~~~~~~~~~~~~~~~~~ - -Files that already exist, either on disk or at a URL can be attached to a -message with just one line of code, using ``Swift_Attachment::fromPath()``. - -You can attach files that exist locally, or if your PHP installation has -``allow_url_fopen`` turned on you can attach files from other -websites. - -The attachment will be presented to the recipient as a downloadable file with -the same filename as the one you attached:: - - // Create the attachment - // * Note that you can technically leave the content-type parameter out - $attachment = Swift_Attachment::fromPath('/path/to/image.jpg', 'image/jpeg'); - - // Attach it to the message - $message->attach($attachment); - - // The two statements above could be written in one line instead - $message->attach(Swift_Attachment::fromPath('/path/to/image.jpg')); - - // You can attach files from a URL if allow_url_fopen is on in php.ini - $message->attach(Swift_Attachment::fromPath('http://site.tld/logo.png')); - -Setting the Filename -~~~~~~~~~~~~~~~~~~~~ - -Usually you don't need to explicitly set the filename of an attachment because -the name of the attached file will be used by default, but if you want to set -the filename you use the ``setFilename()`` method of the Attachment. - -The attachment will be attached in the normal way, but meta-data sent inside -the email will rename the file to something else:: - - // Create the attachment and call its setFilename() method - $attachment = Swift_Attachment::fromPath('/path/to/image.jpg') - ->setFilename('cool.jpg'); - - // Because there's a fluid interface, you can do this in one statement - $message->attach( - Swift_Attachment::fromPath('/path/to/image.jpg')->setFilename('cool.jpg') - ); - -Attaching Dynamic Content -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Files that are generated at runtime, such as PDF documents or images created -via GD can be attached directly to a message without writing them out to disk. -Use ``Swift_Attachment`` directly. - -The attachment will be presented to the recipient as a downloadable file -with the filename and content-type you specify:: - - // Create your file contents in the normal way, but don't write them to disk - $data = create_my_pdf_data(); - - // Create the attachment with your data - $attachment = new Swift_Attachment($data, 'my-file.pdf', 'application/pdf'); - - // Attach it to the message - $message->attach($attachment); - - - // You can alternatively use method chaining to build the attachment - $attachment = (new Swift_Attachment()) - ->setFilename('my-file.pdf') - ->setContentType('application/pdf') - ->setBody($data) - ; - -.. note:: - - If you would usually write the file to disk anyway you should just attach - it with ``Swift_Attachment::fromPath()`` since this will use less memory. - -Changing the Disposition -~~~~~~~~~~~~~~~~~~~~~~~~ - -Attachments just appear as files that can be saved to the Desktop if desired. -You can make attachment appear inline where possible by using the -``setDisposition()`` method of an attachment. - -The attachment will be displayed within the email viewing window if the mail -client knows how to display it:: - - // Create the attachment and call its setDisposition() method - $attachment = Swift_Attachment::fromPath('/path/to/image.jpg') - ->setDisposition('inline'); - - - // Because there's a fluid interface, you can do this in one statement - $message->attach( - Swift_Attachment::fromPath('/path/to/image.jpg')->setDisposition('inline') - ); - -.. note:: - - If you try to create an inline attachment for a non-displayable file type - such as a ZIP file, the mail client should just present the attachment as - normal. - -Embedding Inline Media Files -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Often, people want to include an image or other content inline with a HTML -message. It's easy to do this with HTML linking to remote resources, but this -approach is usually blocked by mail clients. Swift Mailer allows you to embed -your media directly into the message. - -Mail clients usually block downloads from remote resources because this -technique was often abused as a mean of tracking who opened an email. If -you're sending a HTML email and you want to include an image in the message -another approach you can take is to embed the image directly. - -Swift Mailer makes embedding files into messages extremely streamlined. You -embed a file by calling the ``embed()`` method of the message, -which returns a value you can use in a ``src`` or -``href`` attribute in your HTML. - -Just like with attachments, it's possible to embed dynamically generated -content without having an existing file available. - -The embedded files are sent in the email as a special type of attachment that -has a unique ID used to reference them within your HTML attributes. On mail -clients that do not support embedded files they may appear as attachments. - -Although this is commonly done for images, in theory it will work for any -displayable (or playable) media type. Support for other media types (such as -video) is dependent on the mail client however. - -Embedding Existing Files -........................ - -Files that already exist, either on disk or at a URL can be embedded in a -message with just one line of code, using ``Swift_EmbeddedFile::fromPath()``. - -You can embed files that exist locally, or if your PHP installation has -``allow_url_fopen`` turned on you can embed files from other websites. - -The file will be displayed with the message inline with the HTML wherever its ID -is used as a ``src`` attribute:: - - // Create the message - $message = new Swift_Message('My subject'); - - // Set the body - $message->setBody( - '' . - ' ' . - ' Here is an image Image' . - ' Rest of message' . - ' ' . - '', - 'text/html' // Mark the content-type as HTML - ); - - // You can embed files from a URL if allow_url_fopen is on in php.ini - $message->setBody( - '' . - ' ' . - ' Here is an image Image' . - ' Rest of message' . - ' ' . - '', - 'text/html' - ); - -.. note:: - - ``Swift_Image`` and ``Swift_EmbeddedFile`` are just aliases of one another. - ``Swift_Image`` exists for semantic purposes. - -.. note:: - - You can embed files in two stages if you prefer. Just capture the return - value of ``embed()`` in a variable and use that as the ``src`` attribute:: - - // If placing the embed() code inline becomes cumbersome - // it's easy to do this in two steps - $cid = $message->embed(Swift_Image::fromPath('image.png')); - - $message->setBody( - '' . - ' ' . - ' Here is an image Image' . - ' Rest of message' . - ' ' . - '', - 'text/html' // Mark the content-type as HTML - ); - -Embedding Dynamic Content -......................... - -Images that are generated at runtime, such as images created via GD can be -embedded directly to a message without writing them out to disk. Use the -standard ``new Swift_Image()`` method. - -The file will be displayed with the message inline with the HTML wherever its ID -is used as a ``src`` attribute:: - - // Create your file contents in the normal way, but don't write them to disk - $img_data = create_my_image_data(); - - // Create the message - $message = new Swift_Message('My subject'); - - // Set the body - $message->setBody( - '' . - ' ' . - ' Here is an image Image' . - ' Rest of message' . - ' ' . - '', - 'text/html' // Mark the content-type as HTML - ); - -.. note:: - - ``Swift_Image`` and ``Swift_EmbeddedFile`` are just aliases of one another. - ``Swift_Image`` exists for semantic purposes. - -.. note:: - - You can embed files in two stages if you prefer. Just capture the return - value of ``embed()`` in a variable and use that as the ``src`` attribute:: - - // If placing the embed() code inline becomes cumbersome - // it's easy to do this in two steps - $cid = $message->embed(new Swift_Image($img_data, 'image.jpg', 'image/jpeg')); - - $message->setBody( - '' . - ' ' . - ' Here is an image Image' . - ' Rest of message' . - ' ' . - '', - 'text/html' // Mark the content-type as HTML - ); - -Adding Recipients to Your Message ---------------------------------- - -Recipients are specified within the message itself via ``setTo()``, ``setCc()`` -and ``setBcc()``. Swift Mailer reads these recipients from the message when it -gets sent so that it knows where to send the message to. - -Message recipients are one of three types: - -* ``To:`` recipients -- the primary recipients (required) - -* ``Cc:`` recipients -- receive a copy of the message (optional) - -* ``Bcc:`` recipients -- hidden from other recipients (optional) - -Each type can contain one, or several addresses. It's possible to list only the -addresses of the recipients, or you can personalize the address by providing -the real name of the recipient. - -Make sure to add only valid email addresses as recipients. If you try to add an -invalid email address with ``setTo()``, ``setCc()`` or ``setBcc()``, Swift -Mailer will throw a ``Swift_RfcComplianceException``. - -If you add recipients automatically based on a data source that may contain -invalid email addresses, you can prevent possible exceptions by validating the -addresses using:: - use Egulias\EmailValidator\EmailValidator; - use Egulias\EmailValidator\Validation\RFCValidation; - - $validator = new EmailValidator(); - $validator->isValid("example@example.com", new RFCValidation()); //true -and only adding addresses that validate. Another way would be to wrap your ``setTo()``, ``setCc()`` and -``setBcc()`` calls in a try-catch block and handle the -``Swift_RfcComplianceException`` in the catch block. - -.. sidebar:: Syntax for Addresses - - If you only wish to refer to a single email address (for example your - ``From:`` address) then you can just use a string:: - - $message->setFrom('some@address.tld'); - - If you want to include a name then you must use an associative array:: - - $message->setFrom(['some@address.tld' => 'The Name']); - - If you want to include multiple addresses then you must use an array:: - - $message->setTo(['some@address.tld', 'other@address.tld']); - - You can mix personalized (addresses with a name) and non-personalized - addresses in the same list by mixing the use of associative and - non-associative array syntax:: - - $message->setTo([ - 'recipient-with-name@example.org' => 'Recipient Name One', - 'no-name@example.org', // Note that this is not a key-value pair - 'named-recipient@example.org' => 'Recipient Name Two' - ]); - -Setting ``To:`` Recipients -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -``To:`` recipients are required in a message and are set with the ``setTo()`` -or ``addTo()`` methods of the message. - -To set ``To:`` recipients, create the message object using either ``new -Swift_Message( ... )``, then call the ``setTo()`` method with a complete array -of addresses, or use the ``addTo()`` method to iteratively add recipients. - -The ``setTo()`` method accepts input in various formats as described earlier in -this chapter. The ``addTo()`` method takes either one or two parameters. The -first being the email address and the second optional parameter being the name -of the recipient. - -``To:`` recipients are visible in the message headers and will be seen by the -other recipients:: - - // Using setTo() to set all recipients in one go - $message->setTo([ - 'person1@example.org', - 'person2@otherdomain.org' => 'Person 2 Name', - 'person3@example.org', - 'person4@example.org', - 'person5@example.org' => 'Person 5 Name' - ]); - -.. note:: - - Multiple calls to ``setTo()`` will not add new recipients -- each - call overrides the previous calls. If you want to iteratively add - recipients, use the ``addTo()`` method:: - - // Using addTo() to add recipients iteratively - $message->addTo('person1@example.org'); - $message->addTo('person2@example.org', 'Person 2 Name'); - -Setting ``Cc:`` Recipients -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -``Cc:`` recipients are set with the ``setCc()`` or ``addCc()`` methods of the -message. - -To set ``Cc:`` recipients, create the message object using either ``new -Swift_Message( ... )``, then call the ``setCc()`` method with a complete array -of addresses, or use the ``addCc()`` method to iteratively add recipients. - -The ``setCc()`` method accepts input in various formats as described earlier in -this chapter. The ``addCc()`` method takes either one or two parameters. The -first being the email address and the second optional parameter being the name -of the recipient. - -``Cc:`` recipients are visible in the message headers and will be seen by the -other recipients:: - - // Using setTo() to set all recipients in one go - $message->setTo([ - 'person1@example.org', - 'person2@otherdomain.org' => 'Person 2 Name', - 'person3@example.org', - 'person4@example.org', - 'person5@example.org' => 'Person 5 Name' - ]); - -.. note:: - - Multiple calls to ``setCc()`` will not add new recipients -- each call - overrides the previous calls. If you want to iteratively add Cc: - recipients, use the ``addCc()`` method:: - - // Using addCc() to add recipients iteratively - $message->addCc('person1@example.org'); - $message->addCc('person2@example.org', 'Person 2 Name'); - -Setting ``Bcc:`` Recipients -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -``Bcc:`` recipients receive a copy of the message without anybody else knowing -it, and are set with the ``setBcc()`` or ``addBcc()`` methods of the message. - -To set ``Bcc:`` recipients, create the message object using either ``new -Swift_Message( ... )``, then call the ``setBcc()`` method with a complete array -of addresses, or use the ``addBcc()`` method to iteratively add recipients. - -The ``setBcc()`` method accepts input in various formats as described earlier -in this chapter. The ``addBcc()`` method takes either one or two parameters. -The first being the email address and the second optional parameter being the -name of the recipient. - -Only the individual ``Bcc:`` recipient will see their address in the message -headers. Other recipients (including other ``Bcc:`` recipients) will not see -the address:: - - // Using setBcc() to set all recipients in one go - $message->setBcc([ - 'person1@example.org', - 'person2@otherdomain.org' => 'Person 2 Name', - 'person3@example.org', - 'person4@example.org', - 'person5@example.org' => 'Person 5 Name' - ]); - -.. note:: - - Multiple calls to ``setBcc()`` will not add new recipients -- each call - overrides the previous calls. If you want to iteratively add Bcc: - recipients, use the ``addBcc()`` method:: - - // Using addBcc() to add recipients iteratively - $message->addBcc('person1@example.org'); - $message->addBcc('person2@example.org', 'Person 2 Name'); - -.. sidebar:: Internationalized Email Addresses - - Traditionally only ASCII characters have been allowed in email addresses. - With the introduction of internationalized domain names (IDNs), non-ASCII - characters may appear in the domain name. By default, Swiftmailer encodes - such domain names in Punycode (e.g. xn--xample-ova.invalid). This is - compatible with all mail servers. - - RFC 6531 introduced an SMTP extension, SMTPUTF8, that allows non-ASCII - characters in email addresses on both sides of the @ sign. To send to such - addresses, your outbound SMTP server must support the SMTPUTF8 extension. - You should use the ``Swift_AddressEncoder_Utf8AddressEncoder`` address - encoder and enable the ``Swift_Transport_Esmtp_SmtpUtf8Handler`` SMTP - extension handler:: - - $smtpUtf8 = new Swift_Transport_Esmtp_SmtpUtf8Handler(); - $transport->setExtensionHandlers([$smtpUtf8]); - $utf8Encoder = new Swift_AddressEncoder_Utf8AddressEncoder(); - $transport->setAddressEncoder($utf8Encoder); - -Specifying Sender Details -------------------------- - -An email must include information about who sent it. Usually this is managed by -the ``From:`` address, however there are other options. - -The sender information is contained in three possible places: - -* ``From:`` -- the address(es) of who wrote the message (required) - -* ``Sender:`` -- the address of the single person who sent the message - (optional) - -* ``Return-Path:`` -- the address where bounces should go to (optional) - -You must always include a ``From:`` address by using ``setFrom()`` on the -message. Swift Mailer will use this as the default ``Return-Path:`` unless -otherwise specified. - -The ``Sender:`` address exists because the person who actually sent the email -may not be the person who wrote the email. It has a higher precedence than the -``From:`` address and will be used as the ``Return-Path:`` unless otherwise -specified. - -Setting the ``From:`` Address -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A ``From:`` address is required and is set with the ``setFrom()`` method of the -message. ``From:`` addresses specify who actually wrote the email, and usually -who sent it. - -What most people probably don't realize is that you can have more than one -``From:`` address if more than one person wrote the email -- for example if an -email was put together by a committee. - -The ``From:`` address(es) are visible in the message headers and will be seen -by the recipients. - -.. note:: - - If you set multiple ``From:`` addresses then you absolutely must set a - ``Sender:`` address to indicate who physically sent the message. - -:: - - // Set a single From: address - $message->setFrom('your@address.tld'); - - // Set a From: address including a name - $message->setFrom(['your@address.tld' => 'Your Name']); - - // Set multiple From: addresses if multiple people wrote the email - $message->setFrom([ - 'person1@example.org' => 'Sender One', - 'person2@example.org' => 'Sender Two' - ]); - -Setting the ``Sender:`` Address -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A ``Sender:`` address specifies who sent the message and is set with the -``setSender()`` method of the message. - -The ``Sender:`` address is visible in the message headers and will be seen by -the recipients. - -This address will be used as the ``Return-Path:`` unless otherwise specified. - -.. note:: - - If you set multiple ``From:`` addresses then you absolutely must set a - ``Sender:`` address to indicate who physically sent the message. - -You must not set more than one sender address on a message because it's not -possible for more than one person to send a single message:: - - $message->setSender('your@address.tld'); - -Setting the ``Return-Path:`` (Bounce) Address -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The ``Return-Path:`` address specifies where bounce notifications should be -sent and is set with the ``setReturnPath()`` method of the message. - -You can only have one ``Return-Path:`` and it must not include a personal name. - -Bounce notifications will be sent to this address:: - - $message->setReturnPath('bounces@address.tld'); - -Signed/Encrypted Message ------------------------- - -To increase the integrity/security of a message it is possible to sign and/or -encrypt an message using one or multiple signers. - -S/MIME -~~~~~~ - -S/MIME can sign and/or encrypt a message using the OpenSSL extension. - -When signing a message, the signer creates a signature of the entire content of -the message (including attachments). - -The certificate and private key must be PEM encoded, and can be either created -using for example OpenSSL or obtained at an official Certificate Authority (CA). - -**The recipient must have the CA certificate in the list of trusted issuers in -order to verify the signature.** - -**Make sure the certificate supports emailProtection.** - -When using OpenSSL this can done by the including the *-addtrust -emailProtection* parameter when creating the certificate:: - - $message = new Swift_Message(); - - $smimeSigner = new Swift_Signers_SMimeSigner(); - $smimeSigner->setSignCertificate('/path/to/certificate.pem', '/path/to/private-key.pem'); - $message->attachSigner($smimeSigner); - -When the private key is secured using a passphrase use the following instead:: - - $message = new Swift_Message(); - - $smimeSigner = new Swift_Signers_SMimeSigner(); - $smimeSigner->setSignCertificate('/path/to/certificate.pem', ['/path/to/private-key.pem', 'passphrase']); - $message->attachSigner($smimeSigner); - -By default the signature is added as attachment, making the message still -readable for mailing agents not supporting signed messages. - -Storing the message as binary is also possible but not recommended:: - - $smimeSigner->setSignCertificate('/path/to/certificate.pem', '/path/to/private-key.pem', PKCS7_BINARY); - -When encrypting the message (also known as enveloping), the entire message -(including attachments) is encrypted using a certificate, and the recipient can -then decrypt the message using corresponding private key. - -Encrypting ensures nobody can read the contents of the message without the -private key. - -Normally the recipient provides a certificate for encrypting and keeping the -decryption key private. - -Using both signing and encrypting is also possible:: - - $message = new Swift_Message(); - - $smimeSigner = new Swift_Signers_SMimeSigner(); - $smimeSigner->setSignCertificate('/path/to/sign-certificate.pem', '/path/to/private-key.pem'); - $smimeSigner->setEncryptCertificate('/path/to/encrypt-certificate.pem'); - $message->attachSigner($smimeSigner); - -The used encryption cipher can be set as the second parameter of -setEncryptCertificate() - -See https://secure.php.net/manual/openssl.ciphers for a list of supported ciphers. - -By default the message is first signed and then encrypted, this can be changed -by adding:: - - $smimeSigner->setSignThenEncrypt(false); - -**Changing this is not recommended as most mail agents don't support this -none-standard way.** - -Only when having trouble with sign then encrypt method, this should be changed. - -Requesting a Read Receipt -------------------------- - -It is possible to request a read-receipt to be sent to an address when the -email is opened. To request a read receipt set the address with -``setReadReceiptTo()``: - - $message->setReadReceiptTo('your@address.tld'); - -When the email is opened, if the mail client supports it a notification will be -sent to this address. - -.. note:: - - Read receipts won't work for the majority of recipients since many mail - clients auto-disable them. Those clients that will send a read receipt - will make the user aware that one has been requested. - -Setting the Character Set -------------------------- - -The character set of the message (and its MIME parts) is set with the -``setCharset()`` method. You can also change the global default of UTF-8 by -working with the ``Swift_Preferences`` class. - -Swift Mailer will default to the UTF-8 character set unless otherwise -overridden. UTF-8 will work in most instances since it includes all of the -standard US keyboard characters in addition to most international characters. - -It is absolutely vital however that you know what character set your message -(or it's MIME parts) are written in otherwise your message may be received -completely garbled. - -There are two places in Swift Mailer where you can change the character set: - -* In the ``Swift_Preferences`` class - -* On each individual message and/or MIME part - -To set the character set of your Message: - -* Change the global UTF-8 setting by calling - ``Swift_Preferences::setCharset()``; or - -* Call the ``setCharset()`` method on the message or the MIME part:: - - // Approach 1: Change the global setting (suggested) - Swift_Preferences::getInstance()->setCharset('iso-8859-2'); - - // Approach 2: Call the setCharset() method of the message - $message = (new Swift_Message()) - ->setCharset('iso-8859-2'); - - // Approach 3: Specify the charset when setting the body - $message->setBody('My body', 'text/html', 'iso-8859-2'); - - // Approach 4: Specify the charset for each part added - $message->addPart('My part', 'text/plain', 'iso-8859-2'); - -Setting the Encoding --------------------- - -The body of each MIME part needs to be encoded. Binary attachments are encoded -in base64 using the ``Swift_Mime_ContentEncoder_Base64ContentEncoder``. Text -parts are traditionally encoded in quoted-printable using -``Swift_Mime_ContentEncoder_QpContentEncoder`` or -``Swift_Mime_ContentEncoder_NativeQpContentEncoder``. - -The encoder of the message or MIME part is set with the ``setEncoder()`` method. - -Quoted-printable is the safe choice, because it converts 8-bit text as 7-bit. -Most modern SMTP servers support 8-bit text. This is advertised via the 8BITMIME -SMTP extension. If your outbound SMTP server supports this SMTP extension, and -it supports downgrading the message (e.g converting to quoted-printable on the -fly) when delivering to a downstream server that does not support the extension, -you may wish to use ``Swift_Mime_ContentEncoder_PlainContentEncoder`` in -``8bit`` mode instead. This has the advantage that the source data is slightly -more readable and compact, especially for non-Western languages. - - $eightBitMime = new Swift_Transport_Esmtp_EightBitMimeHandler(); - $transport->setExtensionHandlers([$eightBitMime]); - $plainEncoder = new Swift_Mime_ContentEncoder_PlainContentEncoder('8bit'); - $message->setEncoder($plainEncoder); - -Setting the Line Length ------------------------ - -The length of lines in a message can be changed by using the -``setMaxLineLength()`` method on the message:: - - $message->setMaxLineLength(1000); - -Swift Mailer defaults to using 78 characters per line in a message. This is -done for historical reasons and so that the message can be easily viewed in -plain-text terminals - -Lines that are longer than the line length specified will be wrapped between -words. - -.. note:: - - You should never set a maximum length longer than 1000 characters - according to RFC 2822. Doing so could have unspecified side-effects such - as truncating parts of your message when it is transported between SMTP - servers. - -Setting the Message Priority ----------------------------- - -You can change the priority of the message with ``setPriority()``. Setting the -priority will not change the way your email is sent -- it is purely an -indicative setting for the recipient:: - - // Indicate "High" priority - $message->setPriority(2); - -The priority of a message is an indication to the recipient what significance -it has. Swift Mailer allows you to set the priority by calling the -``setPriority`` method. This method takes an integer value between 1 and 5: - -* ``Swift_Mime_SimpleMessage::PRIORITY_HIGHEST``: 1 -* ``Swift_Mime_SimpleMessage::PRIORITY_HIGH``: 2 -* ``Swift_Mime_SimpleMessage::PRIORITY_NORMAL``: 3 -* ``Swift_Mime_SimpleMessage::PRIORITY_LOW``: 4 -* ``Swift_Mime_SimpleMessage::PRIORITY_LOWEST``: 5 - -:: - - // Or use the constant to be more explicit - $message->setPriority(Swift_Mime_SimpleMessage::PRIORITY_HIGH); diff --git a/lib/vendor/swiftmailer/swiftmailer/doc/plugins.rst b/lib/vendor/swiftmailer/swiftmailer/doc/plugins.rst deleted file mode 100644 index 548b07f..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/doc/plugins.rst +++ /dev/null @@ -1,337 +0,0 @@ -Plugins -======= - -Plugins exist to extend, or modify the behaviour of Swift Mailer. They respond -to Events that are fired within the Transports during sending. - -There are a number of Plugins provided as part of the base Swift Mailer package -and they all follow a common interface to respond to Events fired within the -library. Interfaces are provided to "listen" to each type of Event fired and to -act as desired when a listened-to Event occurs. - -Although several plugins are provided with Swift Mailer out-of-the-box, the -Events system has been specifically designed to make it easy for experienced -object-oriented developers to write their own plugins in order to achieve -goals that may not be possible with the base library. - -AntiFlood Plugin ----------------- - -Many SMTP servers have limits on the number of messages that may be sent during -any single SMTP connection. The AntiFlood plugin provides a way to stay within -this limit while still managing a large number of emails. - -A typical limit for a single connection is 100 emails. If the server you -connect to imposes such a limit, it expects you to disconnect after that number -of emails has been sent. You could manage this manually within a loop, but the -AntiFlood plugin provides the necessary wrapper code so that you don't need to -worry about this logic. - -Regardless of limits imposed by the server, it's usually a good idea to be -conservative with the resources of the SMTP server. Sending will become -sluggish if the server is being over-used so using the AntiFlood plugin will -not be a bad idea even if no limits exist. - -The AntiFlood plugin's logic is basically to disconnect and the immediately -re-connect with the SMTP server every X number of emails sent, where X is a -number you specify to the plugin. - -You can also specify a time period in seconds that Swift Mailer should pause -for between the disconnect/re-connect process. It's a good idea to pause for a -short time (say 30 seconds every 100 emails) simply to give the SMTP server a -chance to process its queue and recover some resources. - -Using the AntiFlood Plugin -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The AntiFlood Plugin -- like all plugins -- is added with the Mailer class's -``registerPlugin()`` method. It takes two constructor parameters: the number of -emails to pause after, and optionally the number of seconds to pause for. - -When Swift Mailer sends messages it will count the number of messages that have -been sent since the last re-connect. Once the number hits your specified -threshold it will disconnect and re-connect, optionally pausing for a specified -amount of time:: - - // Create the Mailer using any Transport - $mailer = new Swift_Mailer( - new Swift_SmtpTransport('smtp.example.org', 25) - ); - - // Use AntiFlood to re-connect after 100 emails - $mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(100)); - - // And specify a time in seconds to pause for (30 secs) - $mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(100, 30)); - - // Continue sending as normal - for ($lotsOfRecipients as $recipient) { - ... - - $mailer->send( ... ); - } - -Throttler Plugin ----------------- - -If your SMTP server has restrictions in place to limit the rate at which you -send emails, then your code will need to be aware of this rate-limiting. The -Throttler plugin makes Swift Mailer run at a rate-limited speed. - -Many shared hosts don't open their SMTP servers as a free-for-all. Usually they -have policies in place (probably to discourage spammers) that only allow you to -send a fixed number of emails per-hour/day. - -The Throttler plugin supports two modes of rate-limiting and with each, you -will need to do that math to figure out the values you want. The plugin can -limit based on the number of emails per minute, or the number of -bytes-transferred per-minute. - -Using the Throttler Plugin -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Throttler Plugin -- like all plugins -- is added with the Mailer class' -``registerPlugin()`` method. It has two required constructor parameters that -tell it how to do its rate-limiting. - -When Swift Mailer sends messages it will keep track of the rate at which -sending messages is occurring. If it realises that sending is happening too -fast, it will cause your program to ``sleep()`` for enough time to average out -the rate:: - - // Create the Mailer using any Transport - $mailer = new Swift_Mailer( - new Swift_SmtpTransport('smtp.example.org', 25) - ); - - // Rate limit to 100 emails per-minute - $mailer->registerPlugin(new Swift_Plugins_ThrottlerPlugin( - 100, Swift_Plugins_ThrottlerPlugin::MESSAGES_PER_MINUTE - )); - - // Rate limit to 10MB per-minute - $mailer->registerPlugin(new Swift_Plugins_ThrottlerPlugin( - 1024 * 1024 * 10, Swift_Plugins_ThrottlerPlugin::BYTES_PER_MINUTE - )); - - // Continue sending as normal - for ($lotsOfRecipients as $recipient) { - ... - - $mailer->send( ... ); - } - -Logger Plugin -------------- - -The Logger plugins helps with debugging during the process of sending. It can -help to identify why an SMTP server is rejecting addresses, or any other -hard-to-find problems that may arise. - -The Logger plugin comes in two parts. There's the plugin itself, along with one -of a number of possible Loggers that you may choose to use. For example, the -logger may output messages directly in realtime, or it may capture messages in -an array. - -One other notable feature is the way in which the Logger plugin changes -Exception messages. If Exceptions are being thrown but the error message does -not provide conclusive information as to the source of the problem (such as an -ambiguous SMTP error) the Logger plugin includes the entire SMTP transcript in -the error message so that debugging becomes a simpler task. - -There are a few available Loggers included with Swift Mailer, but writing your -own implementation is incredibly simple and is achieved by creating a short -class that implements the ``Swift_Plugins_Logger`` interface. - -* ``Swift_Plugins_Loggers_ArrayLogger``: Keeps a collection of log messages - inside an array. The array content can be cleared or dumped out to the screen. - -* ``Swift_Plugins_Loggers_EchoLogger``: Prints output to the screen in - realtime. Handy for very rudimentary debug output. - -Using the Logger Plugin -~~~~~~~~~~~~~~~~~~~~~~~ - -The Logger Plugin -- like all plugins -- is added with the Mailer class' -``registerPlugin()`` method. It accepts an instance of ``Swift_Plugins_Logger`` -in its constructor. - -When Swift Mailer sends messages it will keep a log of all the interactions -with the underlying Transport being used. Depending upon the Logger that has -been used the behaviour will differ, but all implementations offer a way to get -the contents of the log:: - - // Create the Mailer using any Transport - $mailer = new Swift_Mailer( - new Swift_SmtpTransport('smtp.example.org', 25) - ); - - // To use the ArrayLogger - $logger = new Swift_Plugins_Loggers_ArrayLogger(); - $mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($logger)); - - // Or to use the Echo Logger - $logger = new Swift_Plugins_Loggers_EchoLogger(); - $mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($logger)); - - // Continue sending as normal - for ($lotsOfRecipients as $recipient) { - ... - - $mailer->send( ... ); - } - - // Dump the log contents - // NOTE: The EchoLogger dumps in realtime so dump() does nothing for it - echo $logger->dump(); - -Decorator Plugin ----------------- - -Often there's a need to send the same message to multiple recipients, but with -tiny variations such as the recipient's name being used inside the message -body. The Decorator plugin aims to provide a solution for allowing these small -differences. - -The decorator plugin works by intercepting the sending process of Swift Mailer, -reading the email address in the To: field and then looking up a set of -replacements for a template. - -While the use of this plugin is simple, it is probably the most commonly -misunderstood plugin due to the way in which it works. The typical mistake -users make is to try registering the plugin multiple times (once for each -recipient) -- inside a loop for example. This is incorrect. - -The Decorator plugin should be registered just once, but containing the list of -all recipients prior to sending. It will use this list of recipients to find -the required replacements during sending. - -Using the Decorator Plugin -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -To use the Decorator plugin, simply create an associative array of replacements -based on email addresses and then use the mailer's ``registerPlugin()`` method -to add the plugin. - -First create an associative array of replacements based on the email addresses -you'll be sending the message to. - -.. note:: - - The replacements array becomes a 2-dimensional array whose keys are the - email addresses and whose values are an associative array of replacements - for that email address. The curly braces used in this example can be any - type of syntax you choose, provided they match the placeholders in your - email template:: - - $replacements = []; - foreach ($users as $user) { - $replacements[$user['email']] = [ - '{username}'=>$user['username'], - '{resetcode}'=>$user['resetcode'] - ]; - } - -Now create an instance of the Decorator plugin using this array of replacements -and then register it with the Mailer. Do this only once! - -:: - - $decorator = new Swift_Plugins_DecoratorPlugin($replacements); - - $mailer->registerPlugin($decorator); - -When you create your message, replace elements in the body (and/or the subject -line) with your placeholders:: - - $message = (new Swift_Message()) - ->setSubject('Important notice for {username}') - ->setBody( - "Hello {username}, you requested to reset your password.\n" . - "Please visit https://example.com/pwreset and use the reset code {resetcode} to set a new password." - ) - ; - - foreach ($users as $user) { - $message->addTo($user['email']); - } - -When you send this message to each of your recipients listed in your -``$replacements`` array they will receive a message customized for just -themselves. For example, the message used above when received may appear like -this to one user: - -.. code-block:: text - - Subject: Important notice for smilingsunshine2009 - - Hello smilingsunshine2009, you requested to reset your password. - Please visit https://example.com/pwreset and use the reset code 183457 to set a new password. - -While another use may receive the message as: - -.. code-block:: text - - Subject: Important notice for billy-bo-bob - - Hello billy-bo-bob, you requested to reset your password. - Please visit https://example.com/pwreset and use the reset code 539127 to set a new password. - -While the decorator plugin provides a means to solve this problem, there are -various ways you could tackle this problem without the need for a plugin. We're -trying to come up with a better way ourselves and while we have several -(obvious) ideas we don't quite have the perfect solution to go ahead and -implement it. Watch this space. - -Providing Your Own Replacements Lookup for the Decorator -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Filling an array with replacements may not be the best solution for providing -replacement information to the decorator. If you have a more elegant algorithm -that performs replacement lookups on-the-fly you may provide your own -implementation. - -Providing your own replacements lookup implementation for the Decorator is -simply a matter of passing an instance of -``Swift_Plugins_Decorator_Replacements`` to the decorator plugin's constructor, -rather than passing in an array. - -The Replacements interface is very simple to implement since it has just one -method: ``getReplacementsFor($address)``. - -Imagine you want to look up replacements from a database on-the-fly, you might -provide an implementation that does this. You need to create a small class:: - - class DbReplacements implements Swift_Plugins_Decorator_Replacements { - public function getReplacementsFor($address) { - global $db; // Your PDO instance with a connection to your database - $query = $db->prepare( - "SELECT * FROM `users` WHERE `email` = ?" - ); - - $query->execute([$address]); - - if ($row = $query->fetch(PDO::FETCH_ASSOC)) { - return [ - '{username}'=>$row['username'], - '{resetcode}'=>$row['resetcode'] - ]; - } - } - } - -Now all you need to do is pass an instance of your class into the Decorator -plugin's constructor instead of passing an array:: - - $decorator = new Swift_Plugins_DecoratorPlugin(new DbReplacements()); - - $mailer->registerPlugin($decorator); - -For each message sent, the plugin will call your class' -``getReplacementsFor()`` method to find the array of replacements it needs. - -.. note:: - - If your lookup algorithm is case sensitive, you should transform the - ``$address`` argument as appropriate -- for example by passing it through - ``strtolower()``. diff --git a/lib/vendor/swiftmailer/swiftmailer/doc/sending.rst b/lib/vendor/swiftmailer/swiftmailer/doc/sending.rst deleted file mode 100644 index 0104207..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/doc/sending.rst +++ /dev/null @@ -1,453 +0,0 @@ -Sending Messages -================ - -Quick Reference for Sending a Message -------------------------------------- - -Sending a message is very straightforward. You create a Transport, use it to -create the Mailer, then you use the Mailer to send the message. - -When using ``send()`` the message will be sent just like it would be sent if -you used your mail client. An integer is returned which includes the number of -successful recipients. If none of the recipients could be sent to then zero -will be returned, which equates to a boolean ``false``. If you set two ``To:`` -recipients and three ``Bcc:`` recipients in the message and all of the -recipients are delivered to successfully then the value 5 will be returned:: - - // Create the Transport - $transport = (new Swift_SmtpTransport('smtp.example.org', 25)) - ->setUsername('your username') - ->setPassword('your password') - ; - - /* - You could alternatively use a different transport such as Sendmail: - - // Sendmail - $transport = new Swift_SendmailTransport('/usr/sbin/sendmail -bs'); - */ - - // Create the Mailer using your created Transport - $mailer = new Swift_Mailer($transport); - - // Create a message - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself') - ; - - // Send the message - $result = $mailer->send($message); - -Transport Types -~~~~~~~~~~~~~~~ - -Transports are the classes in Swift Mailer that are responsible for -communicating with a service in order to deliver a Message. There are several -types of Transport in Swift Mailer, all of which implement the -``Swift_Transport`` interface:: - -* ``Swift_SmtpTransport``: Sends messages over SMTP; Supports Authentication; - Supports Encryption. Very portable; Pleasingly predictable results; Provides - good feedback; - -* ``Swift_SendmailTransport``: Communicates with a locally installed - ``sendmail`` executable (Linux/UNIX). Quick time-to-run; Provides - less-accurate feedback than SMTP; Requires ``sendmail`` installation; - -* ``Swift_LoadBalancedTransport``: Cycles through a collection of the other - Transports to manage load-reduction. Provides graceful fallback if one - Transport fails (e.g. an SMTP server is down); Keeps the load on remote - services down by spreading the work; - -* ``Swift_FailoverTransport``: Works in conjunction with a collection of the - other Transports to provide high-availability. Provides graceful fallback if - one Transport fails (e.g. an SMTP server is down). - -The SMTP Transport -.................. - -The SMTP Transport sends messages over the (standardized) Simple Message -Transfer Protocol. It can deal with encryption and authentication. - -The SMTP Transport, ``Swift_SmtpTransport`` is without doubt the most commonly -used Transport because it will work on 99% of web servers (I just made that -number up, but you get the idea). All the server needs is the ability to -connect to a remote (or even local) SMTP server on the correct port number -(usually 25). - -SMTP servers often require users to authenticate with a username and password -before any mail can be sent to other domains. This is easily achieved using -Swift Mailer with the SMTP Transport. - -SMTP is a protocol -- in other words it's a "way" of communicating a job to be -done (i.e. sending a message). The SMTP protocol is the fundamental basis on -which messages are delivered all over the internet 7 days a week, 365 days a -year. For this reason it's the most "direct" method of sending messages you can -use and it's the one that will give you the most power and feedback (such as -delivery failures) when using Swift Mailer. - -Because SMTP is generally run as a remote service (i.e. you connect to it over -the network/internet) it's extremely portable from server-to-server. You can -easily store the SMTP server address and port number in a configuration file -within your application and adjust the settings accordingly if the code is -moved or if the SMTP server is changed. - -Some SMTP servers -- Google for example -- use encryption for security reasons. -Swift Mailer supports using both SSL and TLS encryption settings. - -Using the SMTP Transport -^^^^^^^^^^^^^^^^^^^^^^^^ - -The SMTP Transport is easy to use. Most configuration options can be set with -the constructor. - -To use the SMTP Transport you need to know which SMTP server your code needs to -connect to. Ask your web host if you're not sure. Lots of people ask me who to -connect to -- I really can't answer that since it's a setting that's extremely -specific to your hosting environment. - -A connection to the SMTP server will be established upon the first call to -``send()``:: - - // Create the Transport - $transport = new Swift_SmtpTransport('smtp.example.org', 25); - - // Create the Mailer using your created Transport - $mailer = new Swift_Mailer($transport); - - /* - It's also possible to use multiple method calls - - $transport = (new Swift_SmtpTransport()) - ->setHost('smtp.example.org') - ->setPort(25) - ; - */ - -Encrypted SMTP -^^^^^^^^^^^^^^ - -You can use SSL or TLS encryption with the SMTP Transport by specifying it as a -parameter or with a method call:: - - // Create the Transport - $transport = new Swift_SmtpTransport('smtp.example.org', 587, 'ssl'); - - // Create the Mailer using your created Transport - $mailer = new Swift_Mailer($transport); - -A connection to the SMTP server will be established upon the first call to -``send()``. The connection will be initiated with the correct encryption -settings. - -.. note:: - - For SSL or TLS encryption to work your PHP installation must have - appropriate OpenSSL transports wrappers. You can check if "tls" and/or - "ssl" are present in your PHP installation by using the PHP function - ``stream_get_transports()``. - -.. note:: - If you are using Mailcatcher_, make sure you do not set the encryption - for the ``Swift_SmtpTransport``, since Mailcatcher does not support encryption. - -SMTP with a Username and Password -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Some servers require authentication. You can provide a username and password -with ``setUsername()`` and ``setPassword()`` methods:: - - // Create the Transport the call setUsername() and setPassword() - $transport = (new Swift_SmtpTransport('smtp.example.org', 25)) - ->setUsername('username') - ->setPassword('password') - ; - - // Create the Mailer using your created Transport - $mailer = new Swift_Mailer($transport); - -Your username and password will be used to authenticate upon first connect when -``send()`` are first used on the Mailer. - -If authentication fails, an Exception of type ``Swift_TransportException`` will -be thrown. - -.. note:: - - If you need to know early whether or not authentication has failed and an - Exception is going to be thrown, call the ``start()`` method on the - created Transport. - -The Sendmail Transport -...................... - -The Sendmail Transport sends messages by communicating with a locally installed -MTA -- such as ``sendmail``. - -The Sendmail Transport, ``Swift_SendmailTransport`` does not directly connect -to any remote services. It is designed for Linux servers that have ``sendmail`` -installed. The Transport starts a local ``sendmail`` process and sends messages -to it. Usually the ``sendmail`` process will respond quickly as it spools your -messages to disk before sending them. - -The Transport is named the Sendmail Transport for historical reasons -(``sendmail`` was the "standard" UNIX tool for sending e-mail for years). It -will send messages using other transfer agents such as Exim or Postfix despite -its name, provided they have the relevant sendmail wrappers so that they can be -started with the correct command-line flags. - -It's a common misconception that because the Sendmail Transport returns a -result very quickly it must therefore deliver messages to recipients quickly -- -this is not true. It's not slow by any means, but it's certainly not faster -than SMTP when it comes to getting messages to the intended recipients. This is -because sendmail itself sends the messages over SMTP once they have been -quickly spooled to disk. - -The Sendmail Transport has the potential to be just as smart of the SMTP -Transport when it comes to notifying Swift Mailer about which recipients were -rejected, but in reality the majority of locally installed ``sendmail`` -instances are not configured well enough to provide any useful feedback. As -such Swift Mailer may report successful deliveries where they did in fact fail -before they even left your server. - -You can run the Sendmail Transport in two different modes specified by command -line flags: - -* "``-bs``" runs in SMTP mode so theoretically it will act like the SMTP - Transport - -* "``-t``" runs in piped mode with no feedback, but theoretically faster, - though not advised - -You can think of the Sendmail Transport as a sort of asynchronous SMTP -Transport -- though if you have problems with delivery failures you should try -using the SMTP Transport instead. Swift Mailer isn't doing the work here, it's -simply passing the work to somebody else (i.e. ``sendmail``). - -Using the Sendmail Transport -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To use the Sendmail Transport you simply need to call ``new -Swift_SendmailTransport()`` with the command as a parameter. - -To use the Sendmail Transport you need to know where ``sendmail`` or another -MTA exists on the server. Swift Mailer uses a default value of -``/usr/sbin/sendmail``, which should work on most systems. - -You specify the entire command as a parameter (i.e. including the command line -flags). Swift Mailer supports operational modes of "``-bs``" (default) and -"``-t``". - -.. note:: - - If you run sendmail in "``-t``" mode you will get no feedback as to whether - or not sending has succeeded. Use "``-bs``" unless you have a reason not to. - -A sendmail process will be started upon the first call to ``send()``. If the -process cannot be started successfully an Exception of type -``Swift_TransportException`` will be thrown:: - - // Create the Transport - $transport = new Swift_SendmailTransport('/usr/sbin/exim -bs'); - - // Create the Mailer using your created Transport - $mailer = new Swift_Mailer($transport); - -Available Methods for Sending Messages -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Mailer class offers one method for sending Messages -- ``send()``. - -When a message is sent in Swift Mailer, the Mailer class communicates with -whichever Transport class you have chosen to use. - -Each recipient in the message should either be accepted or rejected by the -Transport. For example, if the domain name on the email address is not -reachable the SMTP Transport may reject the address because it cannot process -it. ``send()`` will return an integer indicating the number of accepted -recipients. - -.. note:: - - It's possible to find out which recipients were rejected -- we'll cover that - later in this chapter. - -Using the ``send()`` Method -........................... - -The ``send()`` method of the ``Swift_Mailer`` class sends a message using -exactly the same logic as your Desktop mail client would use. Just pass it a -Message and get a result. - -The message will be sent just like it would be sent if you used your mail -client. An integer is returned which includes the number of successful -recipients. If none of the recipients could be sent to then zero will be -returned, which equates to a boolean ``false``. If you set two -``To:`` recipients and three ``Bcc:`` recipients in the message and all of the -recipients are delivered to successfully then the value 5 will be returned:: - - // Create the Transport - $transport = new Swift_SmtpTransport('localhost', 25); - - // Create the Mailer using your created Transport - $mailer = new Swift_Mailer($transport); - - // Create a message - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself') - ; - - // Send the message - $numSent = $mailer->send($message); - - printf("Sent %d messages\n", $numSent); - - /* Note that often that only the boolean equivalent of the - return value is of concern (zero indicates FALSE) - - if ($mailer->send($message)) - { - echo "Sent\n"; - } - else - { - echo "Failed\n"; - } - - */ - -Sending Emails in Batch -....................... - -If you want to send a separate message to each recipient so that only their own -address shows up in the ``To:`` field, follow the following recipe: - -* Create a Transport from one of the provided Transports -- - ``Swift_SmtpTransport``, ``Swift_SendmailTransport``, - or one of the aggregate Transports. - -* Create an instance of the ``Swift_Mailer`` class, using the Transport as - it's constructor parameter. - -* Create a Message. - -* Iterate over the recipients and send message via the ``send()`` method on - the Mailer object. - -Each recipient of the messages receives a different copy with only their own -email address on the ``To:`` field. - -Make sure to add only valid email addresses as recipients. If you try to add an -invalid email address with ``setTo()``, ``setCc()`` or ``setBcc()``, Swift -Mailer will throw a ``Swift_RfcComplianceException``. - -If you add recipients automatically based on a data source that may contain -invalid email addresses, you can prevent possible exceptions by validating the -addresses using ``Egulias\EmailValidator\EmailValidator`` (a dependency that is -installed with Swift Mailer) and only adding addresses that validate. Another -way would be to wrap your ``setTo()``, ``setCc()`` and ``setBcc()`` calls in a -try-catch block and handle the ``Swift_RfcComplianceException`` in the catch -block. - -Handling invalid addresses properly is especially important when sending emails -in large batches since a single invalid address might cause an unhandled -exception and stop the execution or your script early. - -.. note:: - - In the following example, two emails are sent. One to each of - ``receiver@domain.org`` and ``other@domain.org``. These recipients will - not be aware of each other:: - - // Create the Transport - $transport = new Swift_SmtpTransport('localhost', 25); - - // Create the Mailer using your created Transport - $mailer = new Swift_Mailer($transport); - - // Create a message - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setBody('Here is the message itself') - ; - - // Send the message - $failedRecipients = []; - $numSent = 0; - $to = ['receiver@domain.org', 'other@domain.org' => 'A name']; - - foreach ($to as $address => $name) - { - if (is_int($address)) { - $message->setTo($name); - } else { - $message->setTo([$address => $name]); - } - - $numSent += $mailer->send($message, $failedRecipients); - } - - printf("Sent %d messages\n", $numSent); - -Finding out Rejected Addresses -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -It's possible to get a list of addresses that were rejected by the Transport by -using a by-reference parameter to ``send()``. - -As Swift Mailer attempts to send the message to each address given to it, if a -recipient is rejected it will be added to the array. You can pass an existing -array, otherwise one will be created by-reference. - -Collecting the list of recipients that were rejected can be useful in -circumstances where you need to "prune" a mailing list for example when some -addresses cannot be delivered to. - -Getting Failures By-reference -............................. - -Collecting delivery failures by-reference with the ``send()`` method is as -simple as passing a variable name to the method call:: - - $mailer = new Swift_Mailer( ... ); - - $message = (new Swift_Message( ... )) - ->setFrom( ... ) - ->setTo([ - 'receiver@bad-domain.org' => 'Receiver Name', - 'other@domain.org' => 'A name', - 'other-receiver@bad-domain.org' => 'Other Name' - )) - ->setBody( ... ) - ; - - // Pass a variable name to the send() method - if (!$mailer->send($message, $failures)) - { - echo "Failures:"; - print_r($failures); - } - - /* - Failures: - Array ( - 0 => receiver@bad-domain.org, - 1 => other-receiver@bad-domain.org - ) - */ - -If the Transport rejects any of the recipients, the culprit addresses will be -added to the array provided by-reference. - -.. note:: - - If the variable name does not yet exist, it will be initialized as an - empty array and then failures will be added to that array. If the variable - already exists it will be type-cast to an array and failures will be added - to it. - -.. _Mailcatcher: https://mailcatcher.me/ diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php deleted file mode 100644 index daf75fb..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php +++ /dev/null @@ -1,78 +0,0 @@ -address = $address; - } - - public function getAddress(): string - { - return $this->address; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Attachment.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Attachment.php deleted file mode 100644 index 642aa6f..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Attachment.php +++ /dev/null @@ -1,54 +0,0 @@ -createDependenciesFor('mime.attachment') - ); - - $this->setBody($data, $contentType); - $this->setFilename($filename); - } - - /** - * Create a new Attachment from a filesystem path. - * - * @param string $path - * @param string $contentType optional - * - * @return self - */ - public static function fromPath($path, $contentType = null) - { - return (new self())->setFile( - new Swift_ByteStream_FileByteStream($path), - $contentType - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php deleted file mode 100644 index 3a69c15..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php +++ /dev/null @@ -1,176 +0,0 @@ -filters[$key] = $filter; - } - - /** - * Remove an already present StreamFilter based on its $key. - * - * @param string $key - */ - public function removeFilter($key) - { - unset($this->filters[$key]); - } - - /** - * Writes $bytes to the end of the stream. - * - * @param string $bytes - * - * @throws Swift_IoException - * - * @return int - */ - public function write($bytes) - { - $this->writeBuffer .= $bytes; - foreach ($this->filters as $filter) { - if ($filter->shouldBuffer($this->writeBuffer)) { - return; - } - } - $this->doWrite($this->writeBuffer); - - return ++$this->sequence; - } - - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - * - * @throws Swift_IoException - */ - public function commit() - { - $this->doWrite($this->writeBuffer); - } - - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - $this->mirrors[] = $is; - } - - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->mirrors as $k => $stream) { - if ($is === $stream) { - if ('' !== $this->writeBuffer) { - $stream->write($this->writeBuffer); - } - unset($this->mirrors[$k]); - } - } - } - - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - */ - public function flushBuffers() - { - if ('' !== $this->writeBuffer) { - $this->doWrite($this->writeBuffer); - } - $this->flush(); - - foreach ($this->mirrors as $stream) { - $stream->flushBuffers(); - } - } - - /** Run $bytes through all filters */ - private function filter($bytes) - { - foreach ($this->filters as $filter) { - $bytes = $filter->filter($bytes); - } - - return $bytes; - } - - /** Just write the bytes to the stream */ - private function doWrite($bytes) - { - $this->doCommit($this->filter($bytes)); - - foreach ($this->mirrors as $stream) { - $stream->write($bytes); - } - - $this->writeBuffer = ''; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php deleted file mode 100644 index 68dc3b1..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php +++ /dev/null @@ -1,178 +0,0 @@ -array = $stack; - $this->arraySize = count($stack); - } elseif (is_string($stack)) { - $this->write($stack); - } else { - $this->array = []; - } - } - - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. - * - * If less bytes exist than are requested the - * remaining bytes are given instead. If no bytes are remaining at all, boolean - * false is returned. - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($this->offset == $this->arraySize) { - return false; - } - - // Don't use array slice - $end = $length + $this->offset; - $end = $this->arraySize < $end ? $this->arraySize : $end; - $ret = ''; - for (; $this->offset < $end; ++$this->offset) { - $ret .= $this->array[$this->offset]; - } - - return $ret; - } - - /** - * Writes $bytes to the end of the stream. - * - * @param string $bytes - */ - public function write($bytes) - { - $to_add = str_split($bytes); - foreach ($to_add as $value) { - $this->array[] = $value; - } - $this->arraySize = count($this->array); - - foreach ($this->mirrors as $stream) { - $stream->write($bytes); - } - } - - /** - * Not used. - */ - public function commit() - { - } - - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - $this->mirrors[] = $is; - } - - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->mirrors as $k => $stream) { - if ($is === $stream) { - unset($this->mirrors[$k]); - } - } - } - - /** - * Move the internal read pointer to $byteOffset in the stream. - * - * @param int $byteOffset - * - * @return bool - */ - public function setReadPointer($byteOffset) - { - if ($byteOffset > $this->arraySize) { - $byteOffset = $this->arraySize; - } elseif ($byteOffset < 0) { - $byteOffset = 0; - } - - $this->offset = $byteOffset; - } - - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - */ - public function flushBuffers() - { - $this->offset = 0; - $this->array = []; - $this->arraySize = 0; - - foreach ($this->mirrors as $stream) { - $stream->flushBuffers(); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php deleted file mode 100644 index 0c428f7..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php +++ /dev/null @@ -1,216 +0,0 @@ -path = $path; - $this->mode = $writable ? 'w+b' : 'rb'; - } - - /** - * Get the complete path to the file. - * - * @return string - */ - public function getPath() - { - return $this->path; - } - - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. - * - * If less bytes exist than are requested the - * remaining bytes are given instead. If no bytes are remaining at all, boolean - * false is returned. - * - * @param int $length - * - * @return string|bool - * - * @throws Swift_IoException - */ - public function read($length) - { - $fp = $this->getReadHandle(); - if (!feof($fp)) { - $bytes = fread($fp, $length); - $this->offset = ftell($fp); - - // If we read one byte after reaching the end of the file - // feof() will return false and an empty string is returned - if ('' === $bytes && feof($fp)) { - $this->resetReadHandle(); - - return false; - } - - return $bytes; - } - - $this->resetReadHandle(); - - return false; - } - - /** - * Move the internal read pointer to $byteOffset in the stream. - * - * @param int $byteOffset - * - * @return bool - */ - public function setReadPointer($byteOffset) - { - if (isset($this->reader)) { - $this->seekReadStreamToPosition($byteOffset); - } - $this->offset = $byteOffset; - } - - /** Just write the bytes to the file */ - protected function doCommit($bytes) - { - fwrite($this->getWriteHandle(), $bytes); - $this->resetReadHandle(); - } - - /** Not used */ - protected function flush() - { - } - - /** Get the resource for reading */ - private function getReadHandle() - { - if (!isset($this->reader)) { - $pointer = @fopen($this->path, 'rb'); - if (!$pointer) { - throw new Swift_IoException('Unable to open file for reading ['.$this->path.']'); - } - $this->reader = $pointer; - if (0 != $this->offset) { - $this->getReadStreamSeekableStatus(); - $this->seekReadStreamToPosition($this->offset); - } - } - - return $this->reader; - } - - /** Get the resource for writing */ - private function getWriteHandle() - { - if (!isset($this->writer)) { - if (!$this->writer = fopen($this->path, $this->mode)) { - throw new Swift_IoException( - 'Unable to open file for writing ['.$this->path.']' - ); - } - } - - return $this->writer; - } - - /** Force a reload of the resource for reading */ - private function resetReadHandle() - { - if (isset($this->reader)) { - fclose($this->reader); - $this->reader = null; - } - } - - /** Check if ReadOnly Stream is seekable */ - private function getReadStreamSeekableStatus() - { - $metas = stream_get_meta_data($this->reader); - $this->seekable = $metas['seekable']; - } - - /** Streams in a readOnly stream ensuring copy if needed */ - private function seekReadStreamToPosition($offset) - { - if (null === $this->seekable) { - $this->getReadStreamSeekableStatus(); - } - if (false === $this->seekable) { - $currentPos = ftell($this->reader); - if ($currentPos < $offset) { - $toDiscard = $offset - $currentPos; - fread($this->reader, $toDiscard); - - return; - } - $this->copyReadStream(); - } - fseek($this->reader, $offset, SEEK_SET); - } - - /** Copy a readOnly Stream to ensure seekability */ - private function copyReadStream() - { - if ($tmpFile = fopen('php://temp/maxmemory:4096', 'w+b')) { - /* We have opened a php:// Stream Should work without problem */ - } elseif (function_exists('sys_get_temp_dir') && is_writable(sys_get_temp_dir()) && ($tmpFile = tmpfile())) { - /* We have opened a tmpfile */ - } else { - throw new Swift_IoException('Unable to copy the file to make it seekable, sys_temp_dir is not writable, php://memory not available'); - } - $currentPos = ftell($this->reader); - fclose($this->reader); - $source = fopen($this->path, 'rb'); - if (!$source) { - throw new Swift_IoException('Unable to open file for copying ['.$this->path.']'); - } - fseek($tmpFile, 0, SEEK_SET); - while (!feof($source)) { - fwrite($tmpFile, fread($source, 4096)); - } - fseek($tmpFile, $currentPos, SEEK_SET); - fclose($source); - $this->reader = $tmpFile; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php deleted file mode 100644 index 2d00b6a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php +++ /dev/null @@ -1,42 +0,0 @@ -getPath()))) { - throw new Swift_IoException('Failed to get temporary file content.'); - } - - return $content; - } - - public function __destruct() - { - if (file_exists($this->getPath())) { - @unlink($this->getPath()); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader.php deleted file mode 100644 index 4267adb..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader.php +++ /dev/null @@ -1,67 +0,0 @@ - - */ -interface Swift_CharacterReader -{ - const MAP_TYPE_INVALID = 0x01; - const MAP_TYPE_FIXED_LEN = 0x02; - const MAP_TYPE_POSITIONS = 0x03; - - /** - * Returns the complete character map. - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param mixed $ignoredChars - * - * @return int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars); - - /** - * Returns the mapType, see constants. - * - * @return int - */ - public function getMapType(); - - /** - * Returns an integer which specifies how many more bytes to read. - * - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * - * @param int[] $bytes - * @param int $size - * - * @return int - */ - public function validateByteSequence($bytes, $size); - - /** - * Returns the number of bytes which should be read to start each character. - * - * For fixed width character sets this should be the number of octets-per-character. - * For multibyte character sets this will probably be 1. - * - * @return int - */ - public function getInitialByteSize(); -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php deleted file mode 100644 index b09bb5b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php +++ /dev/null @@ -1,97 +0,0 @@ - - */ -class Swift_CharacterReader_GenericFixedWidthReader implements Swift_CharacterReader -{ - /** - * The number of bytes in a single character. - * - * @var int - */ - private $width; - - /** - * Creates a new GenericFixedWidthReader using $width bytes per character. - * - * @param int $width - */ - public function __construct($width) - { - $this->width = $width; - } - - /** - * Returns the complete character map. - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param mixed $ignoredChars - * - * @return int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) - { - $strlen = strlen($string); - // % and / are CPU intensive, so, maybe find a better way - $ignored = $strlen % $this->width; - $ignoredChars = $ignored ? substr($string, -$ignored) : ''; - $currentMap = $this->width; - - return ($strlen - $ignored) / $this->width; - } - - /** - * Returns the mapType. - * - * @return int - */ - public function getMapType() - { - return self::MAP_TYPE_FIXED_LEN; - } - - /** - * Returns an integer which specifies how many more bytes to read. - * - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * - * @param string $bytes - * @param int $size - * - * @return int - */ - public function validateByteSequence($bytes, $size) - { - $needed = $this->width - $size; - - return $needed > -1 ? $needed : -1; - } - - /** - * Returns the number of bytes which should be read to start each character. - * - * @return int - */ - public function getInitialByteSize() - { - return $this->width; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php deleted file mode 100644 index 67da48f..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php +++ /dev/null @@ -1,84 +0,0 @@ - "\x07F") { - // Invalid char - $currentMap[$i + $startOffset] = $string[$i]; - } - } - - return $strlen; - } - - /** - * Returns mapType. - * - * @return int mapType - */ - public function getMapType() - { - return self::MAP_TYPE_INVALID; - } - - /** - * Returns an integer which specifies how many more bytes to read. - * - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * - * @param string $bytes - * @param int $size - * - * @return int - */ - public function validateByteSequence($bytes, $size) - { - $byte = reset($bytes); - if (1 == count($bytes) && $byte >= 0x00 && $byte <= 0x7F) { - return 0; - } - - return -1; - } - - /** - * Returns the number of bytes which should be read to start each character. - * - * @return int - */ - public function getInitialByteSize() - { - return 1; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php deleted file mode 100644 index 4a2df31..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php +++ /dev/null @@ -1,176 +0,0 @@ - - */ -class Swift_CharacterReader_Utf8Reader implements Swift_CharacterReader -{ - /** Pre-computed for optimization */ - private static $length_map = [ - // N=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x0N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x1N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x2N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x3N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x4N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x5N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x6N - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x7N - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x8N - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x9N - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xAN - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xBN - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xCN - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xDN - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xEN - 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 0, 0, // 0xFN - ]; - - private static $s_length_map = [ - "\x00" => 1, "\x01" => 1, "\x02" => 1, "\x03" => 1, "\x04" => 1, "\x05" => 1, "\x06" => 1, "\x07" => 1, - "\x08" => 1, "\x09" => 1, "\x0a" => 1, "\x0b" => 1, "\x0c" => 1, "\x0d" => 1, "\x0e" => 1, "\x0f" => 1, - "\x10" => 1, "\x11" => 1, "\x12" => 1, "\x13" => 1, "\x14" => 1, "\x15" => 1, "\x16" => 1, "\x17" => 1, - "\x18" => 1, "\x19" => 1, "\x1a" => 1, "\x1b" => 1, "\x1c" => 1, "\x1d" => 1, "\x1e" => 1, "\x1f" => 1, - "\x20" => 1, "\x21" => 1, "\x22" => 1, "\x23" => 1, "\x24" => 1, "\x25" => 1, "\x26" => 1, "\x27" => 1, - "\x28" => 1, "\x29" => 1, "\x2a" => 1, "\x2b" => 1, "\x2c" => 1, "\x2d" => 1, "\x2e" => 1, "\x2f" => 1, - "\x30" => 1, "\x31" => 1, "\x32" => 1, "\x33" => 1, "\x34" => 1, "\x35" => 1, "\x36" => 1, "\x37" => 1, - "\x38" => 1, "\x39" => 1, "\x3a" => 1, "\x3b" => 1, "\x3c" => 1, "\x3d" => 1, "\x3e" => 1, "\x3f" => 1, - "\x40" => 1, "\x41" => 1, "\x42" => 1, "\x43" => 1, "\x44" => 1, "\x45" => 1, "\x46" => 1, "\x47" => 1, - "\x48" => 1, "\x49" => 1, "\x4a" => 1, "\x4b" => 1, "\x4c" => 1, "\x4d" => 1, "\x4e" => 1, "\x4f" => 1, - "\x50" => 1, "\x51" => 1, "\x52" => 1, "\x53" => 1, "\x54" => 1, "\x55" => 1, "\x56" => 1, "\x57" => 1, - "\x58" => 1, "\x59" => 1, "\x5a" => 1, "\x5b" => 1, "\x5c" => 1, "\x5d" => 1, "\x5e" => 1, "\x5f" => 1, - "\x60" => 1, "\x61" => 1, "\x62" => 1, "\x63" => 1, "\x64" => 1, "\x65" => 1, "\x66" => 1, "\x67" => 1, - "\x68" => 1, "\x69" => 1, "\x6a" => 1, "\x6b" => 1, "\x6c" => 1, "\x6d" => 1, "\x6e" => 1, "\x6f" => 1, - "\x70" => 1, "\x71" => 1, "\x72" => 1, "\x73" => 1, "\x74" => 1, "\x75" => 1, "\x76" => 1, "\x77" => 1, - "\x78" => 1, "\x79" => 1, "\x7a" => 1, "\x7b" => 1, "\x7c" => 1, "\x7d" => 1, "\x7e" => 1, "\x7f" => 1, - "\x80" => 0, "\x81" => 0, "\x82" => 0, "\x83" => 0, "\x84" => 0, "\x85" => 0, "\x86" => 0, "\x87" => 0, - "\x88" => 0, "\x89" => 0, "\x8a" => 0, "\x8b" => 0, "\x8c" => 0, "\x8d" => 0, "\x8e" => 0, "\x8f" => 0, - "\x90" => 0, "\x91" => 0, "\x92" => 0, "\x93" => 0, "\x94" => 0, "\x95" => 0, "\x96" => 0, "\x97" => 0, - "\x98" => 0, "\x99" => 0, "\x9a" => 0, "\x9b" => 0, "\x9c" => 0, "\x9d" => 0, "\x9e" => 0, "\x9f" => 0, - "\xa0" => 0, "\xa1" => 0, "\xa2" => 0, "\xa3" => 0, "\xa4" => 0, "\xa5" => 0, "\xa6" => 0, "\xa7" => 0, - "\xa8" => 0, "\xa9" => 0, "\xaa" => 0, "\xab" => 0, "\xac" => 0, "\xad" => 0, "\xae" => 0, "\xaf" => 0, - "\xb0" => 0, "\xb1" => 0, "\xb2" => 0, "\xb3" => 0, "\xb4" => 0, "\xb5" => 0, "\xb6" => 0, "\xb7" => 0, - "\xb8" => 0, "\xb9" => 0, "\xba" => 0, "\xbb" => 0, "\xbc" => 0, "\xbd" => 0, "\xbe" => 0, "\xbf" => 0, - "\xc0" => 2, "\xc1" => 2, "\xc2" => 2, "\xc3" => 2, "\xc4" => 2, "\xc5" => 2, "\xc6" => 2, "\xc7" => 2, - "\xc8" => 2, "\xc9" => 2, "\xca" => 2, "\xcb" => 2, "\xcc" => 2, "\xcd" => 2, "\xce" => 2, "\xcf" => 2, - "\xd0" => 2, "\xd1" => 2, "\xd2" => 2, "\xd3" => 2, "\xd4" => 2, "\xd5" => 2, "\xd6" => 2, "\xd7" => 2, - "\xd8" => 2, "\xd9" => 2, "\xda" => 2, "\xdb" => 2, "\xdc" => 2, "\xdd" => 2, "\xde" => 2, "\xdf" => 2, - "\xe0" => 3, "\xe1" => 3, "\xe2" => 3, "\xe3" => 3, "\xe4" => 3, "\xe5" => 3, "\xe6" => 3, "\xe7" => 3, - "\xe8" => 3, "\xe9" => 3, "\xea" => 3, "\xeb" => 3, "\xec" => 3, "\xed" => 3, "\xee" => 3, "\xef" => 3, - "\xf0" => 4, "\xf1" => 4, "\xf2" => 4, "\xf3" => 4, "\xf4" => 4, "\xf5" => 4, "\xf6" => 4, "\xf7" => 4, - "\xf8" => 5, "\xf9" => 5, "\xfa" => 5, "\xfb" => 5, "\xfc" => 6, "\xfd" => 6, "\xfe" => 0, "\xff" => 0, - ]; - - /** - * Returns the complete character map. - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param mixed $ignoredChars - * - * @return int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) - { - if (!isset($currentMap['i']) || !isset($currentMap['p'])) { - $currentMap['p'] = $currentMap['i'] = []; - } - - $strlen = strlen($string); - $charPos = count($currentMap['p']); - $foundChars = 0; - $invalid = false; - for ($i = 0; $i < $strlen; ++$i) { - $char = $string[$i]; - $size = self::$s_length_map[$char]; - if (0 == $size) { - /* char is invalid, we must wait for a resync */ - $invalid = true; - continue; - } else { - if (true === $invalid) { - /* We mark the chars as invalid and start a new char */ - $currentMap['p'][$charPos + $foundChars] = $startOffset + $i; - $currentMap['i'][$charPos + $foundChars] = true; - ++$foundChars; - $invalid = false; - } - if (($i + $size) > $strlen) { - $ignoredChars = substr($string, $i); - break; - } - for ($j = 1; $j < $size; ++$j) { - $char = $string[$i + $j]; - if ($char > "\x7F" && $char < "\xC0") { - // Valid - continue parsing - } else { - /* char is invalid, we must wait for a resync */ - $invalid = true; - continue 2; - } - } - /* Ok we got a complete char here */ - $currentMap['p'][$charPos + $foundChars] = $startOffset + $i + $size; - $i += $j - 1; - ++$foundChars; - } - } - - return $foundChars; - } - - /** - * Returns mapType. - * - * @return int mapType - */ - public function getMapType() - { - return self::MAP_TYPE_POSITIONS; - } - - /** - * Returns an integer which specifies how many more bytes to read. - * - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * - * @param string $bytes - * @param int $size - * - * @return int - */ - public function validateByteSequence($bytes, $size) - { - if ($size < 1) { - return -1; - } - $needed = self::$length_map[$bytes[0]] - $size; - - return $needed > -1 ? $needed : -1; - } - - /** - * Returns the number of bytes which should be read to start each character. - * - * @return int - */ - public function getInitialByteSize() - { - return 1; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php deleted file mode 100644 index 15b6c69..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php +++ /dev/null @@ -1,26 +0,0 @@ -init(); - } - - public function __wakeup() - { - $this->init(); - } - - public function init() - { - if (count(self::$map) > 0) { - return; - } - - $prefix = 'Swift_CharacterReader_'; - - $singleByte = [ - 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => [1], - ]; - - $doubleByte = [ - 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => [2], - ]; - - $fourBytes = [ - 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => [4], - ]; - - // Utf-8 - self::$map['utf-?8'] = [ - 'class' => $prefix.'Utf8Reader', - 'constructor' => [], - ]; - - //7-8 bit charsets - self::$map['(us-)?ascii'] = $singleByte; - self::$map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; - self::$map['windows-?125[0-9]'] = $singleByte; - self::$map['cp-?[0-9]+'] = $singleByte; - self::$map['ansi'] = $singleByte; - self::$map['macintosh'] = $singleByte; - self::$map['koi-?7'] = $singleByte; - self::$map['koi-?8-?.+'] = $singleByte; - self::$map['mik'] = $singleByte; - self::$map['(cork|t1)'] = $singleByte; - self::$map['v?iscii'] = $singleByte; - - //16 bits - self::$map['(ucs-?2|utf-?16)'] = $doubleByte; - - //32 bits - self::$map['(ucs-?4|utf-?32)'] = $fourBytes; - - // Fallback - self::$map['.*'] = $singleByte; - } - - /** - * Returns a CharacterReader suitable for the charset applied. - * - * @param string $charset - * - * @return Swift_CharacterReader - */ - public function getReaderFor($charset) - { - $charset = strtolower(trim($charset)); - foreach (self::$map as $pattern => $spec) { - $re = '/^'.$pattern.'$/D'; - if (preg_match($re, $charset)) { - if (!array_key_exists($pattern, self::$loaded)) { - $reflector = new ReflectionClass($spec['class']); - if ($reflector->getConstructor()) { - $reader = $reflector->newInstanceArgs($spec['constructor']); - } else { - $reader = $reflector->newInstance(); - } - self::$loaded[$pattern] = $reader; - } - - return self::$loaded[$pattern]; - } - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream.php deleted file mode 100644 index 717924f..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream.php +++ /dev/null @@ -1,89 +0,0 @@ -setCharacterReaderFactory($factory); - $this->setCharacterSet($charset); - } - - /** - * Set the character set used in this CharacterStream. - * - * @param string $charset - */ - public function setCharacterSet($charset) - { - $this->charset = $charset; - $this->charReader = null; - } - - /** - * Set the CharacterReaderFactory for multi charset support. - */ - public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) - { - $this->charReaderFactory = $factory; - } - - /** - * Overwrite this character stream using the byte sequence in the byte stream. - * - * @param Swift_OutputByteStream $os output stream to read from - */ - public function importByteStream(Swift_OutputByteStream $os) - { - if (!isset($this->charReader)) { - $this->charReader = $this->charReaderFactory - ->getReaderFor($this->charset); - } - - $startLength = $this->charReader->getInitialByteSize(); - while (false !== $bytes = $os->read($startLength)) { - $c = []; - for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) { - $c[] = self::$byteMap[$bytes[$i]]; - } - $size = count($c); - $need = $this->charReader - ->validateByteSequence($c, $size); - if ($need > 0 && - false !== $bytes = $os->read($need)) { - for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) { - $c[] = self::$byteMap[$bytes[$i]]; - } - } - $this->array[] = $c; - ++$this->array_size; - } - } - - /** - * Import a string a bytes into this CharacterStream, overwriting any existing - * data in the stream. - * - * @param string $string - */ - public function importString($string) - { - $this->flushContents(); - $this->write($string); - } - - /** - * Read $length characters from the stream and move the internal pointer - * $length further into the stream. - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($this->offset == $this->array_size) { - return false; - } - - // Don't use array slice - $arrays = []; - $end = $length + $this->offset; - for ($i = $this->offset; $i < $end; ++$i) { - if (!isset($this->array[$i])) { - break; - } - $arrays[] = $this->array[$i]; - } - $this->offset += $i - $this->offset; // Limit function calls - $chars = false; - foreach ($arrays as $array) { - $chars .= implode('', array_map('chr', $array)); - } - - return $chars; - } - - /** - * Read $length characters from the stream and return a 1-dimensional array - * containing there octet values. - * - * @param int $length - * - * @return int[] - */ - public function readBytes($length) - { - if ($this->offset == $this->array_size) { - return false; - } - $arrays = []; - $end = $length + $this->offset; - for ($i = $this->offset; $i < $end; ++$i) { - if (!isset($this->array[$i])) { - break; - } - $arrays[] = $this->array[$i]; - } - $this->offset += ($i - $this->offset); // Limit function calls - - return array_merge(...$arrays); - } - - /** - * Write $chars to the end of the stream. - * - * @param string $chars - */ - public function write($chars) - { - if (!isset($this->charReader)) { - $this->charReader = $this->charReaderFactory->getReaderFor( - $this->charset); - } - - $startLength = $this->charReader->getInitialByteSize(); - - $fp = fopen('php://memory', 'w+b'); - fwrite($fp, $chars); - unset($chars); - fseek($fp, 0, SEEK_SET); - - $buffer = [0]; - $buf_pos = 1; - $buf_len = 1; - $has_datas = true; - do { - $bytes = []; - // Buffer Filing - if ($buf_len - $buf_pos < $startLength) { - $buf = array_splice($buffer, $buf_pos); - $new = $this->reloadBuffer($fp, 100); - if ($new) { - $buffer = array_merge($buf, $new); - $buf_len = count($buffer); - $buf_pos = 0; - } else { - $has_datas = false; - } - } - if ($buf_len - $buf_pos > 0) { - $size = 0; - for ($i = 0; $i < $startLength && isset($buffer[$buf_pos]); ++$i) { - ++$size; - $bytes[] = $buffer[$buf_pos++]; - } - $need = $this->charReader->validateByteSequence( - $bytes, $size); - if ($need > 0) { - if ($buf_len - $buf_pos < $need) { - $new = $this->reloadBuffer($fp, $need); - - if ($new) { - $buffer = array_merge($buffer, $new); - $buf_len = count($buffer); - } - } - for ($i = 0; $i < $need && isset($buffer[$buf_pos]); ++$i) { - $bytes[] = $buffer[$buf_pos++]; - } - } - $this->array[] = $bytes; - ++$this->array_size; - } - } while ($has_datas); - - fclose($fp); - } - - /** - * Move the internal pointer to $charOffset in the stream. - * - * @param int $charOffset - */ - public function setPointer($charOffset) - { - if ($charOffset > $this->array_size) { - $charOffset = $this->array_size; - } elseif ($charOffset < 0) { - $charOffset = 0; - } - $this->offset = $charOffset; - } - - /** - * Empty the stream and reset the internal pointer. - */ - public function flushContents() - { - $this->offset = 0; - $this->array = []; - $this->array_size = 0; - } - - private function reloadBuffer($fp, $len) - { - if (!feof($fp) && false !== ($bytes = fread($fp, $len))) { - $buf = []; - for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) { - $buf[] = self::$byteMap[$bytes[$i]]; - } - - return $buf; - } - - return false; - } - - private static function initializeMaps() - { - if (!isset(self::$charMap)) { - self::$charMap = []; - for ($byte = 0; $byte < 256; ++$byte) { - self::$charMap[$byte] = chr($byte); - } - self::$byteMap = array_flip(self::$charMap); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php deleted file mode 100644 index a733063..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php +++ /dev/null @@ -1,262 +0,0 @@ - - */ -class Swift_CharacterStream_NgCharacterStream implements Swift_CharacterStream -{ - /** - * The char reader (lazy-loaded) for the current charset. - * - * @var Swift_CharacterReader - */ - private $charReader; - - /** - * A factory for creating CharacterReader instances. - * - * @var Swift_CharacterReaderFactory - */ - private $charReaderFactory; - - /** - * The character set this stream is using. - * - * @var string - */ - private $charset; - - /** - * The data's stored as-is. - * - * @var string - */ - private $datas = ''; - - /** - * Number of bytes in the stream. - * - * @var int - */ - private $datasSize = 0; - - /** - * Map. - * - * @var mixed - */ - private $map; - - /** - * Map Type. - * - * @var int - */ - private $mapType = 0; - - /** - * Number of characters in the stream. - * - * @var int - */ - private $charCount = 0; - - /** - * Position in the stream. - * - * @var int - */ - private $currentPos = 0; - - /** - * Constructor. - * - * @param string $charset - */ - public function __construct(Swift_CharacterReaderFactory $factory, $charset) - { - $this->setCharacterReaderFactory($factory); - $this->setCharacterSet($charset); - } - - /* -- Changing parameters of the stream -- */ - - /** - * Set the character set used in this CharacterStream. - * - * @param string $charset - */ - public function setCharacterSet($charset) - { - $this->charset = $charset; - $this->charReader = null; - $this->mapType = 0; - } - - /** - * Set the CharacterReaderFactory for multi charset support. - */ - public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) - { - $this->charReaderFactory = $factory; - } - - /** - * @see Swift_CharacterStream::flushContents() - */ - public function flushContents() - { - $this->datas = null; - $this->map = null; - $this->charCount = 0; - $this->currentPos = 0; - $this->datasSize = 0; - } - - /** - * @see Swift_CharacterStream::importByteStream() - */ - public function importByteStream(Swift_OutputByteStream $os) - { - $this->flushContents(); - $blocks = 512; - $os->setReadPointer(0); - while (false !== ($read = $os->read($blocks))) { - $this->write($read); - } - } - - /** - * @see Swift_CharacterStream::importString() - * - * @param string $string - */ - public function importString($string) - { - $this->flushContents(); - $this->write($string); - } - - /** - * @see Swift_CharacterStream::read() - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($this->currentPos >= $this->charCount) { - return false; - } - $ret = false; - $length = ($this->currentPos + $length > $this->charCount) ? $this->charCount - $this->currentPos : $length; - switch ($this->mapType) { - case Swift_CharacterReader::MAP_TYPE_FIXED_LEN: - $len = $length * $this->map; - $ret = substr($this->datas, - $this->currentPos * $this->map, - $len); - $this->currentPos += $length; - break; - - case Swift_CharacterReader::MAP_TYPE_INVALID: - $ret = ''; - for (; $this->currentPos < $length; ++$this->currentPos) { - if (isset($this->map[$this->currentPos])) { - $ret .= '?'; - } else { - $ret .= $this->datas[$this->currentPos]; - } - } - break; - - case Swift_CharacterReader::MAP_TYPE_POSITIONS: - $end = $this->currentPos + $length; - $end = $end > $this->charCount ? $this->charCount : $end; - $ret = ''; - $start = 0; - if ($this->currentPos > 0) { - $start = $this->map['p'][$this->currentPos - 1]; - } - $to = $start; - for (; $this->currentPos < $end; ++$this->currentPos) { - if (isset($this->map['i'][$this->currentPos])) { - $ret .= substr($this->datas, $start, $to - $start).'?'; - $start = $this->map['p'][$this->currentPos]; - } else { - $to = $this->map['p'][$this->currentPos]; - } - } - $ret .= substr($this->datas, $start, $to - $start); - break; - } - - return $ret; - } - - /** - * @see Swift_CharacterStream::readBytes() - * - * @param int $length - * - * @return int[] - */ - public function readBytes($length) - { - $read = $this->read($length); - if (false !== $read) { - $ret = array_map('ord', str_split($read, 1)); - - return $ret; - } - - return false; - } - - /** - * @see Swift_CharacterStream::setPointer() - * - * @param int $charOffset - */ - public function setPointer($charOffset) - { - if ($this->charCount < $charOffset) { - $charOffset = $this->charCount; - } - $this->currentPos = $charOffset; - } - - /** - * @see Swift_CharacterStream::write() - * - * @param string $chars - */ - public function write($chars) - { - if (!isset($this->charReader)) { - $this->charReader = $this->charReaderFactory->getReaderFor( - $this->charset); - $this->map = []; - $this->mapType = $this->charReader->getMapType(); - } - $ignored = ''; - $this->datas .= $chars; - $this->charCount += $this->charReader->getCharPositions(substr($this->datas, $this->datasSize), $this->datasSize, $this->map, $ignored); - if (false !== $ignored) { - $this->datasSize = strlen($this->datas) - strlen($ignored); - } else { - $this->datasSize = strlen($this->datas); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ConfigurableSpool.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ConfigurableSpool.php deleted file mode 100644 index a711bac..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ConfigurableSpool.php +++ /dev/null @@ -1,63 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Base class for Spools (implements time and message limits). - * - * @author Fabien Potencier - */ -abstract class Swift_ConfigurableSpool implements Swift_Spool -{ - /** The maximum number of messages to send per flush */ - private $message_limit; - - /** The time limit per flush */ - private $time_limit; - - /** - * Sets the maximum number of messages to send per flush. - * - * @param int $limit - */ - public function setMessageLimit($limit) - { - $this->message_limit = (int) $limit; - } - - /** - * Gets the maximum number of messages to send per flush. - * - * @return int The limit - */ - public function getMessageLimit() - { - return $this->message_limit; - } - - /** - * Sets the time limit (in seconds) per flush. - * - * @param int $limit The limit - */ - public function setTimeLimit($limit) - { - $this->time_limit = (int) $limit; - } - - /** - * Gets the time limit (in seconds) per flush. - * - * @return int The limit - */ - public function getTimeLimit() - { - return $this->time_limit; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyContainer.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyContainer.php deleted file mode 100644 index b38f8ce..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyContainer.php +++ /dev/null @@ -1,391 +0,0 @@ -store); - } - - /** - * Test if an item is registered in this container with the given name. - * - * @see register() - * - * @param string $itemName - * - * @return bool - */ - public function has($itemName) - { - return array_key_exists($itemName, $this->store) - && isset($this->store[$itemName]['lookupType']); - } - - /** - * Lookup the item with the given $itemName. - * - * @see register() - * - * @param string $itemName - * - * @return mixed - * - * @throws Swift_DependencyException If the dependency is not found - */ - public function lookup($itemName) - { - if (!$this->has($itemName)) { - throw new Swift_DependencyException( - 'Cannot lookup dependency "'.$itemName.'" since it is not registered.' - ); - } - - switch ($this->store[$itemName]['lookupType']) { - case self::TYPE_ALIAS: - return $this->createAlias($itemName); - case self::TYPE_VALUE: - return $this->getValue($itemName); - case self::TYPE_INSTANCE: - return $this->createNewInstance($itemName); - case self::TYPE_SHARED: - return $this->createSharedInstance($itemName); - case self::TYPE_ARRAY: - return $this->createDependenciesFor($itemName); - } - } - - /** - * Create an array of arguments passed to the constructor of $itemName. - * - * @param string $itemName - * - * @return array - */ - public function createDependenciesFor($itemName) - { - $args = []; - if (isset($this->store[$itemName]['args'])) { - $args = $this->resolveArgs($this->store[$itemName]['args']); - } - - return $args; - } - - /** - * Register a new dependency with $itemName. - * - * This method returns the current DependencyContainer instance because it - * requires the use of the fluid interface to set the specific details for the - * dependency. - * - * @see asNewInstanceOf(), asSharedInstanceOf(), asValue() - * - * @param string $itemName - * - * @return $this - */ - public function register($itemName) - { - $this->store[$itemName] = []; - $this->endPoint = &$this->store[$itemName]; - - return $this; - } - - /** - * Specify the previously registered item as a literal value. - * - * {@link register()} must be called before this will work. - * - * @param mixed $value - * - * @return $this - */ - public function asValue($value) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_VALUE; - $endPoint['value'] = $value; - - return $this; - } - - /** - * Specify the previously registered item as an alias of another item. - * - * @param string $lookup - * - * @return $this - */ - public function asAliasOf($lookup) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_ALIAS; - $endPoint['ref'] = $lookup; - - return $this; - } - - /** - * Specify the previously registered item as a new instance of $className. - * - * {@link register()} must be called before this will work. - * Any arguments can be set with {@link withDependencies()}, - * {@link addConstructorValue()} or {@link addConstructorLookup()}. - * - * @see withDependencies(), addConstructorValue(), addConstructorLookup() - * - * @param string $className - * - * @return $this - */ - public function asNewInstanceOf($className) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_INSTANCE; - $endPoint['className'] = $className; - - return $this; - } - - /** - * Specify the previously registered item as a shared instance of $className. - * - * {@link register()} must be called before this will work. - * - * @param string $className - * - * @return $this - */ - public function asSharedInstanceOf($className) - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_SHARED; - $endPoint['className'] = $className; - - return $this; - } - - /** - * Specify the previously registered item as array of dependencies. - * - * {@link register()} must be called before this will work. - * - * @return $this - */ - public function asArray() - { - $endPoint = &$this->getEndPoint(); - $endPoint['lookupType'] = self::TYPE_ARRAY; - - return $this; - } - - /** - * Specify a list of injected dependencies for the previously registered item. - * - * This method takes an array of lookup names. - * - * @see addConstructorValue(), addConstructorLookup() - * - * @return $this - */ - public function withDependencies(array $lookups) - { - $endPoint = &$this->getEndPoint(); - $endPoint['args'] = []; - foreach ($lookups as $lookup) { - $this->addConstructorLookup($lookup); - } - - return $this; - } - - /** - * Specify a literal (non looked up) value for the constructor of the - * previously registered item. - * - * @see withDependencies(), addConstructorLookup() - * - * @param mixed $value - * - * @return $this - */ - public function addConstructorValue($value) - { - $endPoint = &$this->getEndPoint(); - if (!isset($endPoint['args'])) { - $endPoint['args'] = []; - } - $endPoint['args'][] = ['type' => 'value', 'item' => $value]; - - return $this; - } - - /** - * Specify a dependency lookup for the constructor of the previously - * registered item. - * - * @see withDependencies(), addConstructorValue() - * - * @param string $lookup - * - * @return $this - */ - public function addConstructorLookup($lookup) - { - $endPoint = &$this->getEndPoint(); - if (!isset($this->endPoint['args'])) { - $endPoint['args'] = []; - } - $endPoint['args'][] = ['type' => 'lookup', 'item' => $lookup]; - - return $this; - } - - /** Get the literal value with $itemName */ - private function getValue($itemName) - { - return $this->store[$itemName]['value']; - } - - /** Resolve an alias to another item */ - private function createAlias($itemName) - { - return $this->lookup($this->store[$itemName]['ref']); - } - - /** Create a fresh instance of $itemName */ - private function createNewInstance($itemName) - { - $reflector = new ReflectionClass($this->store[$itemName]['className']); - if ($reflector->getConstructor()) { - return $reflector->newInstanceArgs( - $this->createDependenciesFor($itemName) - ); - } - - return $reflector->newInstance(); - } - - /** Create and register a shared instance of $itemName */ - private function createSharedInstance($itemName) - { - if (!isset($this->store[$itemName]['instance'])) { - $this->store[$itemName]['instance'] = $this->createNewInstance($itemName); - } - - return $this->store[$itemName]['instance']; - } - - /** Get the current endpoint in the store */ - private function &getEndPoint() - { - if (!isset($this->endPoint)) { - throw new BadMethodCallException( - 'Component must first be registered by calling register()' - ); - } - - return $this->endPoint; - } - - /** Get an argument list with dependencies resolved */ - private function resolveArgs(array $args) - { - $resolved = []; - foreach ($args as $argDefinition) { - switch ($argDefinition['type']) { - case 'lookup': - $resolved[] = $this->lookupRecursive($argDefinition['item']); - break; - case 'value': - $resolved[] = $argDefinition['item']; - break; - } - } - - return $resolved; - } - - /** Resolve a single dependency with an collections */ - private function lookupRecursive($item) - { - if (is_array($item)) { - $collection = []; - foreach ($item as $k => $v) { - $collection[$k] = $this->lookupRecursive($v); - } - - return $collection; - } - - return $this->lookup($item); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyException.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyException.php deleted file mode 100644 index 799d38d..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyException.php +++ /dev/null @@ -1,27 +0,0 @@ -createDependenciesFor('mime.embeddedfile') - ); - - $this->setBody($data); - $this->setFilename($filename); - if ($contentType) { - $this->setContentType($contentType); - } - } - - /** - * Create a new EmbeddedFile from a filesystem path. - * - * @param string $path - * - * @return Swift_Mime_EmbeddedFile - */ - public static function fromPath($path) - { - return (new self())->setFile(new Swift_ByteStream_FileByteStream($path)); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder.php deleted file mode 100644 index 2073abc..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder.php +++ /dev/null @@ -1,28 +0,0 @@ -= $maxLineLength || 76 < $maxLineLength) { - $maxLineLength = 76; - } - - $encodedString = base64_encode($string); - $firstLine = ''; - - if (0 != $firstLineOffset) { - $firstLine = substr( - $encodedString, 0, $maxLineLength - $firstLineOffset - )."\r\n"; - $encodedString = substr( - $encodedString, $maxLineLength - $firstLineOffset - ); - } - - return $firstLine.trim(chunk_split($encodedString, $maxLineLength, "\r\n")); - } - - /** - * Does nothing. - */ - public function charsetChanged($charset) - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php deleted file mode 100644 index 95b4ae9..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php +++ /dev/null @@ -1,300 +0,0 @@ - '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04', - 5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09', - 10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E', - 15 => '=0F', 16 => '=10', 17 => '=11', 18 => '=12', 19 => '=13', - 20 => '=14', 21 => '=15', 22 => '=16', 23 => '=17', 24 => '=18', - 25 => '=19', 26 => '=1A', 27 => '=1B', 28 => '=1C', 29 => '=1D', - 30 => '=1E', 31 => '=1F', 32 => '=20', 33 => '=21', 34 => '=22', - 35 => '=23', 36 => '=24', 37 => '=25', 38 => '=26', 39 => '=27', - 40 => '=28', 41 => '=29', 42 => '=2A', 43 => '=2B', 44 => '=2C', - 45 => '=2D', 46 => '=2E', 47 => '=2F', 48 => '=30', 49 => '=31', - 50 => '=32', 51 => '=33', 52 => '=34', 53 => '=35', 54 => '=36', - 55 => '=37', 56 => '=38', 57 => '=39', 58 => '=3A', 59 => '=3B', - 60 => '=3C', 61 => '=3D', 62 => '=3E', 63 => '=3F', 64 => '=40', - 65 => '=41', 66 => '=42', 67 => '=43', 68 => '=44', 69 => '=45', - 70 => '=46', 71 => '=47', 72 => '=48', 73 => '=49', 74 => '=4A', - 75 => '=4B', 76 => '=4C', 77 => '=4D', 78 => '=4E', 79 => '=4F', - 80 => '=50', 81 => '=51', 82 => '=52', 83 => '=53', 84 => '=54', - 85 => '=55', 86 => '=56', 87 => '=57', 88 => '=58', 89 => '=59', - 90 => '=5A', 91 => '=5B', 92 => '=5C', 93 => '=5D', 94 => '=5E', - 95 => '=5F', 96 => '=60', 97 => '=61', 98 => '=62', 99 => '=63', - 100 => '=64', 101 => '=65', 102 => '=66', 103 => '=67', 104 => '=68', - 105 => '=69', 106 => '=6A', 107 => '=6B', 108 => '=6C', 109 => '=6D', - 110 => '=6E', 111 => '=6F', 112 => '=70', 113 => '=71', 114 => '=72', - 115 => '=73', 116 => '=74', 117 => '=75', 118 => '=76', 119 => '=77', - 120 => '=78', 121 => '=79', 122 => '=7A', 123 => '=7B', 124 => '=7C', - 125 => '=7D', 126 => '=7E', 127 => '=7F', 128 => '=80', 129 => '=81', - 130 => '=82', 131 => '=83', 132 => '=84', 133 => '=85', 134 => '=86', - 135 => '=87', 136 => '=88', 137 => '=89', 138 => '=8A', 139 => '=8B', - 140 => '=8C', 141 => '=8D', 142 => '=8E', 143 => '=8F', 144 => '=90', - 145 => '=91', 146 => '=92', 147 => '=93', 148 => '=94', 149 => '=95', - 150 => '=96', 151 => '=97', 152 => '=98', 153 => '=99', 154 => '=9A', - 155 => '=9B', 156 => '=9C', 157 => '=9D', 158 => '=9E', 159 => '=9F', - 160 => '=A0', 161 => '=A1', 162 => '=A2', 163 => '=A3', 164 => '=A4', - 165 => '=A5', 166 => '=A6', 167 => '=A7', 168 => '=A8', 169 => '=A9', - 170 => '=AA', 171 => '=AB', 172 => '=AC', 173 => '=AD', 174 => '=AE', - 175 => '=AF', 176 => '=B0', 177 => '=B1', 178 => '=B2', 179 => '=B3', - 180 => '=B4', 181 => '=B5', 182 => '=B6', 183 => '=B7', 184 => '=B8', - 185 => '=B9', 186 => '=BA', 187 => '=BB', 188 => '=BC', 189 => '=BD', - 190 => '=BE', 191 => '=BF', 192 => '=C0', 193 => '=C1', 194 => '=C2', - 195 => '=C3', 196 => '=C4', 197 => '=C5', 198 => '=C6', 199 => '=C7', - 200 => '=C8', 201 => '=C9', 202 => '=CA', 203 => '=CB', 204 => '=CC', - 205 => '=CD', 206 => '=CE', 207 => '=CF', 208 => '=D0', 209 => '=D1', - 210 => '=D2', 211 => '=D3', 212 => '=D4', 213 => '=D5', 214 => '=D6', - 215 => '=D7', 216 => '=D8', 217 => '=D9', 218 => '=DA', 219 => '=DB', - 220 => '=DC', 221 => '=DD', 222 => '=DE', 223 => '=DF', 224 => '=E0', - 225 => '=E1', 226 => '=E2', 227 => '=E3', 228 => '=E4', 229 => '=E5', - 230 => '=E6', 231 => '=E7', 232 => '=E8', 233 => '=E9', 234 => '=EA', - 235 => '=EB', 236 => '=EC', 237 => '=ED', 238 => '=EE', 239 => '=EF', - 240 => '=F0', 241 => '=F1', 242 => '=F2', 243 => '=F3', 244 => '=F4', - 245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9', - 250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE', - 255 => '=FF', - ]; - - protected static $safeMapShare = []; - - /** - * A map of non-encoded ascii characters. - * - * @var string[] - */ - protected $safeMap = []; - - /** - * Creates a new QpEncoder for the given CharacterStream. - * - * @param Swift_CharacterStream $charStream to use for reading characters - * @param Swift_StreamFilter $filter if input should be canonicalized - */ - public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null) - { - $this->charStream = $charStream; - if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { - $this->initSafeMap(); - self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; - } else { - $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; - } - $this->filter = $filter; - } - - public function __sleep() - { - return ['charStream', 'filter']; - } - - public function __wakeup() - { - if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { - $this->initSafeMap(); - self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; - } else { - $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; - } - } - - protected function getSafeMapShareId() - { - return get_class($this); - } - - protected function initSafeMap() - { - foreach (array_merge( - [0x09, 0x20], range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) { - $this->safeMap[$byte] = chr($byte); - } - } - - /** - * Takes an unencoded string and produces a QP encoded string from it. - * - * QP encoded strings have a maximum line length of 76 characters. - * If the first line needs to be shorter, indicate the difference with - * $firstLineOffset. - * - * @param string $string to encode - * @param int $firstLineOffset optional - * @param int $maxLineLength optional 0 indicates the default of 76 chars - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if ($maxLineLength > 76 || $maxLineLength <= 0) { - $maxLineLength = 76; - } - - $thisLineLength = $maxLineLength - $firstLineOffset; - - $lines = []; - $lNo = 0; - $lines[$lNo] = ''; - $currentLine = &$lines[$lNo++]; - $size = $lineLen = 0; - - $this->charStream->flushContents(); - $this->charStream->importString($string); - - // Fetching more than 4 chars at one is slower, as is fetching fewer bytes - // Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6 - // bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes - while (false !== $bytes = $this->nextSequence()) { - // If we're filtering the input - if (isset($this->filter)) { - // If we can't filter because we need more bytes - while ($this->filter->shouldBuffer($bytes)) { - // Then collect bytes into the buffer - if (false === $moreBytes = $this->nextSequence(1)) { - break; - } - - foreach ($moreBytes as $b) { - $bytes[] = $b; - } - } - // And filter them - $bytes = $this->filter->filter($bytes); - } - - $enc = $this->encodeByteSequence($bytes, $size); - - $i = strpos($enc, '=0D=0A'); - $newLineLength = $lineLen + (false === $i ? $size : $i); - - if ($currentLine && $newLineLength >= $thisLineLength) { - $lines[$lNo] = ''; - $currentLine = &$lines[$lNo++]; - $thisLineLength = $maxLineLength; - $lineLen = 0; - } - - $currentLine .= $enc; - - if (false === $i) { - $lineLen += $size; - } else { - // 6 is the length of '=0D=0A'. - $lineLen = $size - strrpos($enc, '=0D=0A') - 6; - } - } - - return $this->standardize(implode("=\r\n", $lines)); - } - - /** - * Updates the charset used. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charStream->setCharacterSet($charset); - } - - /** - * Encode the given byte array into a verbatim QP form. - * - * @param int[] $bytes - * @param int $size - * - * @return string - */ - protected function encodeByteSequence(array $bytes, &$size) - { - $ret = ''; - $size = 0; - foreach ($bytes as $b) { - if (isset($this->safeMap[$b])) { - $ret .= $this->safeMap[$b]; - ++$size; - } else { - $ret .= self::$qpMap[$b]; - $size += 3; - } - } - - return $ret; - } - - /** - * Get the next sequence of bytes to read from the char stream. - * - * @param int $size number of bytes to read - * - * @return int[] - */ - protected function nextSequence($size = 4) - { - return $this->charStream->readBytes($size); - } - - /** - * Make sure CRLF is correct and HT/SPACE are in valid places. - * - * @param string $string - * - * @return string - */ - protected function standardize($string) - { - $string = str_replace(["\t=0D=0A", ' =0D=0A', '=0D=0A'], - ["=09\r\n", "=20\r\n", "\r\n"], $string - ); - switch ($end = ord(substr($string, -1))) { - case 0x09: - case 0x20: - $string = substr_replace($string, self::$qpMap[$end], -1); - } - - return $string; - } - - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->charStream = clone $this->charStream; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php deleted file mode 100644 index 2458515..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php +++ /dev/null @@ -1,90 +0,0 @@ -charStream = $charStream; - } - - /** - * Takes an unencoded string and produces a string encoded according to - * RFC 2231 from it. - * - * @param string $string - * @param int $firstLineOffset - * @param int $maxLineLength optional, 0 indicates the default of 75 bytes - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - $lines = []; - $lineCount = 0; - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; - - if (0 >= $maxLineLength) { - $maxLineLength = 75; - } - - $this->charStream->flushContents(); - $this->charStream->importString($string); - - $thisLineLength = $maxLineLength - $firstLineOffset; - - while (false !== $char = $this->charStream->read(4)) { - $encodedChar = rawurlencode($char); - if (0 != strlen($currentLine) - && strlen($currentLine.$encodedChar) > $thisLineLength) { - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; - $thisLineLength = $maxLineLength; - } - $currentLine .= $encodedChar; - } - - return implode("\r\n", $lines); - } - - /** - * Updates the charset used. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charStream->setCharacterSet($charset); - } - - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->charStream = clone $this->charStream; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandEvent.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandEvent.php deleted file mode 100644 index 18994c1..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandEvent.php +++ /dev/null @@ -1,64 +0,0 @@ -command = $command; - $this->successCodes = $successCodes; - } - - /** - * Get the command which was sent to the server. - * - * @return string - */ - public function getCommand() - { - return $this->command; - } - - /** - * Get the numeric response codes which indicate success for this command. - * - * @return int[] - */ - public function getSuccessCodes() - { - return $this->successCodes; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandListener.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandListener.php deleted file mode 100644 index 7545404..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandListener.php +++ /dev/null @@ -1,24 +0,0 @@ -source = $source; - } - - /** - * Get the source object of this event. - * - * @return object - */ - public function getSource() - { - return $this->source; - } - - /** - * Prevent this Event from bubbling any further up the stack. - */ - public function cancelBubble($cancel = true) - { - $this->bubbleCancelled = $cancel; - } - - /** - * Returns true if this Event will not bubble any further up the stack. - * - * @return bool - */ - public function bubbleCancelled() - { - return $this->bubbleCancelled; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php deleted file mode 100644 index ff7c371..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php +++ /dev/null @@ -1,64 +0,0 @@ -response = $response; - $this->valid = $valid; - } - - /** - * Get the response which was received from the server. - * - * @return string - */ - public function getResponse() - { - return $this->response; - } - - /** - * Get the success status of this Event. - * - * @return bool - */ - public function isValid() - { - return $this->valid; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseListener.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseListener.php deleted file mode 100644 index c40919d..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseListener.php +++ /dev/null @@ -1,24 +0,0 @@ -message = $message; - $this->result = self::RESULT_PENDING; - } - - /** - * Get the Transport used to send the Message. - * - * @return Swift_Transport - */ - public function getTransport() - { - return $this->getSource(); - } - - /** - * Get the Message being sent. - * - * @return Swift_Mime_SimpleMessage - */ - public function getMessage() - { - return $this->message; - } - - /** - * Set the array of addresses that failed in sending. - * - * @param array $recipients - */ - public function setFailedRecipients($recipients) - { - $this->failedRecipients = $recipients; - } - - /** - * Get an recipient addresses which were not accepted for delivery. - * - * @return string[] - */ - public function getFailedRecipients() - { - return $this->failedRecipients; - } - - /** - * Set the result of sending. - * - * @param int $result - */ - public function setResult($result) - { - $this->result = $result; - } - - /** - * Get the result of this Event. - * - * The return value is a bitmask from - * {@see RESULT_PENDING, RESULT_SUCCESS, RESULT_TENTATIVE, RESULT_FAILED} - * - * @return int - */ - public function getResult() - { - return $this->result; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendListener.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendListener.php deleted file mode 100644 index d922e1b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendListener.php +++ /dev/null @@ -1,31 +0,0 @@ -eventMap = [ - 'Swift_Events_CommandEvent' => 'Swift_Events_CommandListener', - 'Swift_Events_ResponseEvent' => 'Swift_Events_ResponseListener', - 'Swift_Events_SendEvent' => 'Swift_Events_SendListener', - 'Swift_Events_TransportChangeEvent' => 'Swift_Events_TransportChangeListener', - 'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener', - ]; - } - - /** - * Create a new SendEvent for $source and $message. - * - * @return Swift_Events_SendEvent - */ - public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message) - { - return new Swift_Events_SendEvent($source, $message); - } - - /** - * Create a new CommandEvent for $source and $command. - * - * @param string $command That will be executed - * @param array $successCodes That are needed - * - * @return Swift_Events_CommandEvent - */ - public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []) - { - return new Swift_Events_CommandEvent($source, $command, $successCodes); - } - - /** - * Create a new ResponseEvent for $source and $response. - * - * @param string $response - * @param bool $valid If the response is valid - * - * @return Swift_Events_ResponseEvent - */ - public function createResponseEvent(Swift_Transport $source, $response, $valid) - { - return new Swift_Events_ResponseEvent($source, $response, $valid); - } - - /** - * Create a new TransportChangeEvent for $source. - * - * @return Swift_Events_TransportChangeEvent - */ - public function createTransportChangeEvent(Swift_Transport $source) - { - return new Swift_Events_TransportChangeEvent($source); - } - - /** - * Create a new TransportExceptionEvent for $source. - * - * @return Swift_Events_TransportExceptionEvent - */ - public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex) - { - return new Swift_Events_TransportExceptionEvent($source, $ex); - } - - /** - * Bind an event listener to this dispatcher. - */ - public function bindEventListener(Swift_Events_EventListener $listener) - { - foreach ($this->listeners as $l) { - // Already loaded - if ($l === $listener) { - return; - } - } - $this->listeners[] = $listener; - } - - /** - * Dispatch the given Event to all suitable listeners. - * - * @param string $target method - */ - public function dispatchEvent(Swift_Events_EventObject $evt, $target) - { - $this->prepareBubbleQueue($evt); - $this->bubble($evt, $target); - } - - /** Queue listeners on a stack ready for $evt to be bubbled up it */ - private function prepareBubbleQueue(Swift_Events_EventObject $evt) - { - $this->bubbleQueue = []; - $evtClass = get_class($evt); - foreach ($this->listeners as $listener) { - if (array_key_exists($evtClass, $this->eventMap) - && ($listener instanceof $this->eventMap[$evtClass])) { - $this->bubbleQueue[] = $listener; - } - } - } - - /** Bubble $evt up the stack calling $target() on each listener */ - private function bubble(Swift_Events_EventObject $evt, $target) - { - if (!$evt->bubbleCancelled() && $listener = array_shift($this->bubbleQueue)) { - $listener->$target($evt); - $this->bubble($evt, $target); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php deleted file mode 100644 index a8972fd..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php +++ /dev/null @@ -1,27 +0,0 @@ -getSource(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php deleted file mode 100644 index 253165d..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php +++ /dev/null @@ -1,45 +0,0 @@ -exception = $ex; - } - - /** - * Get the TransportException thrown. - * - * @return Swift_TransportException - */ - public function getException() - { - return $this->exception; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php deleted file mode 100644 index cc3c099..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php +++ /dev/null @@ -1,24 +0,0 @@ -createDependenciesFor('transport.failover') - ); - - $this->setTransports($transports); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileSpool.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileSpool.php deleted file mode 100644 index d16c47c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileSpool.php +++ /dev/null @@ -1,208 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Stores Messages on the filesystem. - * - * @author Fabien Potencier - * @author Xavier De Cock - */ -class Swift_FileSpool extends Swift_ConfigurableSpool -{ - /** The spool directory */ - private $path; - - /** - * File WriteRetry Limit. - * - * @var int - */ - private $retryLimit = 10; - - /** - * Create a new FileSpool. - * - * @param string $path - * - * @throws Swift_IoException - */ - public function __construct($path) - { - $this->path = $path; - - if (!file_exists($this->path)) { - if (!mkdir($this->path, 0777, true)) { - throw new Swift_IoException(sprintf('Unable to create path "%s".', $this->path)); - } - } - } - - /** - * Tests if this Spool mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } - - /** - * Starts this Spool mechanism. - */ - public function start() - { - } - - /** - * Stops this Spool mechanism. - */ - public function stop() - { - } - - /** - * Allow to manage the enqueuing retry limit. - * - * Default, is ten and allows over 64^20 different fileNames - * - * @param int $limit - */ - public function setRetryLimit($limit) - { - $this->retryLimit = $limit; - } - - /** - * Queues a message. - * - * @param Swift_Mime_SimpleMessage $message The message to store - * - * @throws Swift_IoException - * - * @return bool - */ - public function queueMessage(Swift_Mime_SimpleMessage $message) - { - $ser = serialize($message); - $fileName = $this->path.'/'.$this->getRandomString(10); - for ($i = 0; $i < $this->retryLimit; ++$i) { - /* We try an exclusive creation of the file. This is an atomic operation, it avoid locking mechanism */ - $fp = @fopen($fileName.'.message', 'xb'); - if (false !== $fp) { - if (false === fwrite($fp, $ser)) { - return false; - } - - return fclose($fp); - } else { - /* The file already exists, we try a longer fileName */ - $fileName .= $this->getRandomString(1); - } - } - - throw new Swift_IoException(sprintf('Unable to create a file for enqueuing Message in "%s".', $this->path)); - } - - /** - * Execute a recovery if for any reason a process is sending for too long. - * - * @param int $timeout in second Defaults is for very slow smtp responses - */ - public function recover($timeout = 900) - { - foreach (new DirectoryIterator($this->path) as $file) { - $file = $file->getRealPath(); - - if ('.message.sending' == substr($file, -16)) { - $lockedtime = filectime($file); - if ((time() - $lockedtime) > $timeout) { - rename($file, substr($file, 0, -8)); - } - } - } - } - - /** - * Sends messages using the given transport instance. - * - * @param Swift_Transport $transport A transport instance - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent e-mail's - */ - public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) - { - $directoryIterator = new DirectoryIterator($this->path); - - /* Start the transport only if there are queued files to send */ - if (!$transport->isStarted()) { - foreach ($directoryIterator as $file) { - if ('.message' == substr($file->getRealPath(), -8)) { - $transport->start(); - break; - } - } - } - - $failedRecipients = (array) $failedRecipients; - $count = 0; - $time = time(); - foreach ($directoryIterator as $file) { - $file = $file->getRealPath(); - - if ('.message' != substr($file, -8)) { - continue; - } - - /* We try a rename, it's an atomic operation, and avoid locking the file */ - if (rename($file, $file.'.sending')) { - $message = unserialize(file_get_contents($file.'.sending')); - - $count += $transport->send($message, $failedRecipients); - - unlink($file.'.sending'); - } else { - /* This message has just been catched by another process */ - continue; - } - - if ($this->getMessageLimit() && $count >= $this->getMessageLimit()) { - break; - } - - if ($this->getTimeLimit() && (time() - $time) >= $this->getTimeLimit()) { - break; - } - } - - return $count; - } - - /** - * Returns a random string needed to generate a fileName for the queue. - * - * @param int $count - * - * @return string - */ - protected function getRandomString($count) - { - // This string MUST stay FS safe, avoid special chars - $base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'; - $ret = ''; - $strlen = strlen($base); - for ($i = 0; $i < $count; ++$i) { - $ret .= $base[random_int(0, $strlen - 1)]; - } - - return $ret; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileStream.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileStream.php deleted file mode 100644 index 0b24db1..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileStream.php +++ /dev/null @@ -1,24 +0,0 @@ -setFile(new Swift_ByteStream_FileByteStream($path)); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/InputByteStream.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/InputByteStream.php deleted file mode 100644 index 379a5a1..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/InputByteStream.php +++ /dev/null @@ -1,75 +0,0 @@ -stream = $stream; - } - - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - */ - public function setString($nsKey, $itemKey, $string, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $this->contents[$nsKey][$itemKey] = $string; - break; - case self::MODE_APPEND: - if (!$this->hasKey($nsKey, $itemKey)) { - $this->contents[$nsKey][$itemKey] = ''; - } - $this->contents[$nsKey][$itemKey] .= $string; - break; - default: - throw new Swift_SwiftException( - 'Invalid mode ['.$mode.'] used to set nsKey='. - $nsKey.', itemKey='.$itemKey - ); - } - } - - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param int $mode - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $this->clearKey($nsKey, $itemKey); - // no break - case self::MODE_APPEND: - if (!$this->hasKey($nsKey, $itemKey)) { - $this->contents[$nsKey][$itemKey] = ''; - } - while (false !== $bytes = $os->read(8192)) { - $this->contents[$nsKey][$itemKey] .= $bytes; - } - break; - default: - throw new Swift_SwiftException( - 'Invalid mode ['.$mode.'] used to set nsKey='. - $nsKey.', itemKey='.$itemKey - ); - } - } - - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * - * NOTE: The stream will always write in append mode. - * - * @param string $nsKey - * @param string $itemKey - * - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) - { - $is = clone $this->stream; - $is->setKeyCache($this); - $is->setNsKey($nsKey); - $is->setItemKey($itemKey); - if (isset($writeThrough)) { - $is->setWriteThroughStream($writeThrough); - } - - return $is; - } - - /** - * Get data back out of the cache as a string. - * - * @param string $nsKey - * @param string $itemKey - * - * @return string - */ - public function getString($nsKey, $itemKey) - { - $this->prepareCache($nsKey); - if ($this->hasKey($nsKey, $itemKey)) { - return $this->contents[$nsKey][$itemKey]; - } - } - - /** - * Get data back out of the cache as a ByteStream. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) - { - $this->prepareCache($nsKey); - $is->write($this->getString($nsKey, $itemKey)); - } - - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * - * @param string $nsKey - * @param string $itemKey - * - * @return bool - */ - public function hasKey($nsKey, $itemKey) - { - $this->prepareCache($nsKey); - - return array_key_exists($itemKey, $this->contents[$nsKey]); - } - - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey) - { - unset($this->contents[$nsKey][$itemKey]); - } - - /** - * Clear all data in the namespace $nsKey if it exists. - * - * @param string $nsKey - */ - public function clearAll($nsKey) - { - unset($this->contents[$nsKey]); - } - - /** - * Initialize the namespace of $nsKey if needed. - * - * @param string $nsKey - */ - private function prepareCache($nsKey) - { - if (!array_key_exists($nsKey, $this->contents)) { - $this->contents[$nsKey] = []; - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php deleted file mode 100644 index 7dc2886..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php +++ /dev/null @@ -1,295 +0,0 @@ -stream = $stream; - $this->path = $path; - } - - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - * - * @throws Swift_IoException - */ - public function setString($nsKey, $itemKey, $string, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - break; - case self::MODE_APPEND: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); - break; - default: - throw new Swift_SwiftException( - 'Invalid mode ['.$mode.'] used to set nsKey='. - $nsKey.', itemKey='.$itemKey - ); - break; - } - fwrite($fp, $string); - $this->freeHandle($nsKey, $itemKey); - } - - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * - * @see MODE_WRITE, MODE_APPEND - * - * @param string $nsKey - * @param string $itemKey - * @param int $mode - * - * @throws Swift_IoException - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) - { - $this->prepareCache($nsKey); - switch ($mode) { - case self::MODE_WRITE: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - break; - case self::MODE_APPEND: - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); - break; - default: - throw new Swift_SwiftException( - 'Invalid mode ['.$mode.'] used to set nsKey='. - $nsKey.', itemKey='.$itemKey - ); - break; - } - while (false !== $bytes = $os->read(8192)) { - fwrite($fp, $bytes); - } - $this->freeHandle($nsKey, $itemKey); - } - - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * - * NOTE: The stream will always write in append mode. - * - * @param string $nsKey - * @param string $itemKey - * - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) - { - $is = clone $this->stream; - $is->setKeyCache($this); - $is->setNsKey($nsKey); - $is->setItemKey($itemKey); - if (isset($writeThrough)) { - $is->setWriteThroughStream($writeThrough); - } - - return $is; - } - - /** - * Get data back out of the cache as a string. - * - * @param string $nsKey - * @param string $itemKey - * - * @throws Swift_IoException - * - * @return string - */ - public function getString($nsKey, $itemKey) - { - $this->prepareCache($nsKey); - if ($this->hasKey($nsKey, $itemKey)) { - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - $str = ''; - while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { - $str .= $bytes; - } - $this->freeHandle($nsKey, $itemKey); - - return $str; - } - } - - /** - * Get data back out of the cache as a ByteStream. - * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) - { - if ($this->hasKey($nsKey, $itemKey)) { - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); - while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { - $is->write($bytes); - } - $this->freeHandle($nsKey, $itemKey); - } - } - - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * - * @param string $nsKey - * @param string $itemKey - * - * @return bool - */ - public function hasKey($nsKey, $itemKey) - { - return is_file($this->path.'/'.$nsKey.'/'.$itemKey); - } - - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey) - { - if ($this->hasKey($nsKey, $itemKey)) { - $this->freeHandle($nsKey, $itemKey); - unlink($this->path.'/'.$nsKey.'/'.$itemKey); - } - } - - /** - * Clear all data in the namespace $nsKey if it exists. - * - * @param string $nsKey - */ - public function clearAll($nsKey) - { - if (array_key_exists($nsKey, $this->keys)) { - foreach ($this->keys[$nsKey] as $itemKey => $null) { - $this->clearKey($nsKey, $itemKey); - } - if (is_dir($this->path.'/'.$nsKey)) { - rmdir($this->path.'/'.$nsKey); - } - unset($this->keys[$nsKey]); - } - } - - /** - * Initialize the namespace of $nsKey if needed. - * - * @param string $nsKey - */ - private function prepareCache($nsKey) - { - $cacheDir = $this->path.'/'.$nsKey; - if (!is_dir($cacheDir)) { - if (!mkdir($cacheDir)) { - throw new Swift_IoException('Failed to create cache directory '.$cacheDir); - } - $this->keys[$nsKey] = []; - } - } - - /** - * Get a file handle on the cache item. - * - * @param string $nsKey - * @param string $itemKey - * @param int $position - * - * @return resource - */ - private function getHandle($nsKey, $itemKey, $position) - { - if (!isset($this->keys[$nsKey][$itemKey])) { - $openMode = $this->hasKey($nsKey, $itemKey) ? 'r+b' : 'w+b'; - $fp = fopen($this->path.'/'.$nsKey.'/'.$itemKey, $openMode); - $this->keys[$nsKey][$itemKey] = $fp; - } - if (self::POSITION_START == $position) { - fseek($this->keys[$nsKey][$itemKey], 0, SEEK_SET); - } elseif (self::POSITION_END == $position) { - fseek($this->keys[$nsKey][$itemKey], 0, SEEK_END); - } - - return $this->keys[$nsKey][$itemKey]; - } - - private function freeHandle($nsKey, $itemKey) - { - $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_CURRENT); - fclose($fp); - $this->keys[$nsKey][$itemKey] = null; - } - - /** - * Destructor. - */ - public function __destruct() - { - foreach ($this->keys as $nsKey => $null) { - $this->clearAll($nsKey); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php deleted file mode 100644 index af80bdc..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php +++ /dev/null @@ -1,51 +0,0 @@ -keyCache = $keyCache; - } - - /** - * Specify a stream to write through for each write(). - */ - public function setWriteThroughStream(Swift_InputByteStream $is) - { - $this->writeThrough = $is; - } - - /** - * Writes $bytes to the end of the stream. - * - * @param string $bytes - * @param Swift_InputByteStream $is optional - */ - public function write($bytes, Swift_InputByteStream $is = null) - { - $this->keyCache->setString( - $this->nsKey, $this->itemKey, $bytes, Swift_KeyCache::MODE_APPEND - ); - if (isset($is)) { - $is->write($bytes); - } - if (isset($this->writeThrough)) { - $this->writeThrough->write($bytes); - } - } - - /** - * Not used. - */ - public function commit() - { - } - - /** - * Not used. - */ - public function bind(Swift_InputByteStream $is) - { - } - - /** - * Not used. - */ - public function unbind(Swift_InputByteStream $is) - { - } - - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - */ - public function flushBuffers() - { - $this->keyCache->clearKey($this->nsKey, $this->itemKey); - } - - /** - * Set the nsKey which will be written to. - * - * @param string $nsKey - */ - public function setNsKey($nsKey) - { - $this->nsKey = $nsKey; - } - - /** - * Set the itemKey which will be written to. - * - * @param string $itemKey - */ - public function setItemKey($itemKey) - { - $this->itemKey = $itemKey; - } - - /** - * Any implementation should be cloneable, allowing the clone to access a - * separate $nsKey and $itemKey. - */ - public function __clone() - { - $this->writeThrough = null; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php deleted file mode 100644 index ce732af..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php +++ /dev/null @@ -1,33 +0,0 @@ -createDependenciesFor('transport.loadbalanced') - ); - - $this->setTransports($transports); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php deleted file mode 100644 index 5763007..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php +++ /dev/null @@ -1,98 +0,0 @@ -transport = $transport; - } - - /** - * Create a new class instance of one of the message services. - * - * For example 'mimepart' would create a 'message.mimepart' instance - * - * @param string $service - * - * @return object - */ - public function createMessage($service = 'message') - { - return Swift_DependencyContainer::getInstance() - ->lookup('message.'.$service); - } - - /** - * Send the given Message like it would be sent in a mail client. - * - * All recipients (with the exception of Bcc) will be able to see the other - * recipients this message was sent to. - * - * Recipient/sender data will be retrieved from the Message object. - * - * The return value is the number of recipients who were accepted for - * delivery. - * - * @param array $failedRecipients An array of failures by-reference - * - * @return int The number of successful recipients. Can be 0 which indicates failure - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $failedRecipients = (array) $failedRecipients; - - // FIXME: to be removed in 7.0 (as transport must now start itself on send) - if (!$this->transport->isStarted()) { - $this->transport->start(); - } - - $sent = 0; - - try { - $sent = $this->transport->send($message, $failedRecipients); - } catch (Swift_RfcComplianceException $e) { - foreach ($message->getTo() as $address => $name) { - $failedRecipients[] = $address; - } - } - - return $sent; - } - - /** - * Register a plugin using a known unique key (e.g. myPlugin). - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->transport->registerPlugin($plugin); - } - - /** - * The Transport used to send messages. - * - * @return Swift_Transport - */ - public function getTransport() - { - return $this->transport; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php deleted file mode 100644 index 19aa82a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php +++ /dev/null @@ -1,53 +0,0 @@ -recipients = $recipients; - } - - /** - * Returns true only if there are more recipients to send to. - * - * @return bool - */ - public function hasNext() - { - return !empty($this->recipients); - } - - /** - * Returns an array where the keys are the addresses of recipients and the - * values are the names. e.g. ('foo@bar' => 'Foo') or ('foo@bar' => NULL). - * - * @return array - */ - public function nextRecipient() - { - return array_splice($this->recipients, 0, 1); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php deleted file mode 100644 index 650f3ec..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php +++ /dev/null @@ -1,32 +0,0 @@ - 'Foo') or ('foo@bar' => NULL). - * - * @return array - */ - public function nextRecipient(); -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MemorySpool.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MemorySpool.php deleted file mode 100644 index e3b0894..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MemorySpool.php +++ /dev/null @@ -1,110 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Stores Messages in memory. - * - * @author Fabien Potencier - */ -class Swift_MemorySpool implements Swift_Spool -{ - protected $messages = []; - private $flushRetries = 3; - - /** - * Tests if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } - - /** - * Starts this Transport mechanism. - */ - public function start() - { - } - - /** - * Stops this Transport mechanism. - */ - public function stop() - { - } - - /** - * @param int $retries - */ - public function setFlushRetries($retries) - { - $this->flushRetries = $retries; - } - - /** - * Stores a message in the queue. - * - * @param Swift_Mime_SimpleMessage $message The message to store - * - * @return bool Whether the operation has succeeded - */ - public function queueMessage(Swift_Mime_SimpleMessage $message) - { - //clone the message to make sure it is not changed while in the queue - $this->messages[] = clone $message; - - return true; - } - - /** - * Sends messages using the given transport instance. - * - * @param Swift_Transport $transport A transport instance - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent emails - */ - public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) - { - if (!$this->messages) { - return 0; - } - - if (!$transport->isStarted()) { - $transport->start(); - } - - $count = 0; - $retries = $this->flushRetries; - while ($retries--) { - try { - while ($message = array_pop($this->messages)) { - $count += $transport->send($message, $failedRecipients); - } - } catch (Swift_TransportException $exception) { - if ($retries) { - // re-queue the message at the end of the queue to give a chance - // to the other messages to be sent, in case the failure was due to - // this message and not just the transport failing - array_unshift($this->messages, $message); - - // wait half a second before we try again - usleep(500000); - } else { - throw $exception; - } - } - } - - return $count; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php deleted file mode 100644 index 42b861f..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php +++ /dev/null @@ -1,279 +0,0 @@ -createDependenciesFor('mime.message') - ); - - if (!isset($charset)) { - $charset = Swift_DependencyContainer::getInstance() - ->lookup('properties.charset'); - } - $this->setSubject($subject); - $this->setBody($body); - $this->setCharset($charset); - if ($contentType) { - $this->setContentType($contentType); - } - } - - /** - * Add a MimePart to this Message. - * - * @param string|Swift_OutputByteStream $body - * @param string $contentType - * @param string $charset - * - * @return $this - */ - public function addPart($body, $contentType = null, $charset = null) - { - return $this->attach((new Swift_MimePart($body, $contentType, $charset))->setEncoder($this->getEncoder())); - } - - /** - * Attach a new signature handler to the message. - * - * @return $this - */ - public function attachSigner(Swift_Signer $signer) - { - if ($signer instanceof Swift_Signers_HeaderSigner) { - $this->headerSigners[] = $signer; - } elseif ($signer instanceof Swift_Signers_BodySigner) { - $this->bodySigners[] = $signer; - } - - return $this; - } - - /** - * Detach a signature handler from a message. - * - * @return $this - */ - public function detachSigner(Swift_Signer $signer) - { - if ($signer instanceof Swift_Signers_HeaderSigner) { - foreach ($this->headerSigners as $k => $headerSigner) { - if ($headerSigner === $signer) { - unset($this->headerSigners[$k]); - - return $this; - } - } - } elseif ($signer instanceof Swift_Signers_BodySigner) { - foreach ($this->bodySigners as $k => $bodySigner) { - if ($bodySigner === $signer) { - unset($this->bodySigners[$k]); - - return $this; - } - } - } - - return $this; - } - - /** - * Clear all signature handlers attached to the message. - * - * @return $this - */ - public function clearSigners() - { - $this->headerSigners = []; - $this->bodySigners = []; - - return $this; - } - - /** - * Get this message as a complete string. - * - * @return string - */ - public function toString() - { - if (empty($this->headerSigners) && empty($this->bodySigners)) { - return parent::toString(); - } - - $this->saveMessage(); - - $this->doSign(); - - $string = parent::toString(); - - $this->restoreMessage(); - - return $string; - } - - /** - * Write this message to a {@link Swift_InputByteStream}. - */ - public function toByteStream(Swift_InputByteStream $is) - { - if (empty($this->headerSigners) && empty($this->bodySigners)) { - parent::toByteStream($is); - - return; - } - - $this->saveMessage(); - - $this->doSign(); - - parent::toByteStream($is); - - $this->restoreMessage(); - } - - public function __wakeup() - { - Swift_DependencyContainer::getInstance()->createDependenciesFor('mime.message'); - } - - /** - * loops through signers and apply the signatures. - */ - protected function doSign() - { - foreach ($this->bodySigners as $signer) { - $altered = $signer->getAlteredHeaders(); - $this->saveHeaders($altered); - $signer->signMessage($this); - } - - foreach ($this->headerSigners as $signer) { - $altered = $signer->getAlteredHeaders(); - $this->saveHeaders($altered); - $signer->reset(); - - $signer->setHeaders($this->getHeaders()); - - $signer->startBody(); - $this->bodyToByteStream($signer); - $signer->endBody(); - - $signer->addSignature($this->getHeaders()); - } - } - - /** - * save the message before any signature is applied. - */ - protected function saveMessage() - { - $this->savedMessage = ['headers' => []]; - $this->savedMessage['body'] = $this->getBody(); - $this->savedMessage['children'] = $this->getChildren(); - if (count($this->savedMessage['children']) > 0 && '' != $this->getBody()) { - $this->setChildren(array_merge([$this->becomeMimePart()], $this->savedMessage['children'])); - $this->setBody(''); - } - } - - /** - * save the original headers. - */ - protected function saveHeaders(array $altered) - { - foreach ($altered as $head) { - $lc = strtolower($head); - - if (!isset($this->savedMessage['headers'][$lc])) { - $this->savedMessage['headers'][$lc] = $this->getHeaders()->getAll($head); - } - } - } - - /** - * Remove or restore altered headers. - */ - protected function restoreHeaders() - { - foreach ($this->savedMessage['headers'] as $name => $savedValue) { - $headers = $this->getHeaders()->getAll($name); - - foreach ($headers as $key => $value) { - if (!isset($savedValue[$key])) { - $this->getHeaders()->remove($name, $key); - } - } - } - } - - /** - * Restore message body. - */ - protected function restoreMessage() - { - $this->setBody($this->savedMessage['body']); - $this->setChildren($this->savedMessage['children']); - - $this->restoreHeaders(); - $this->savedMessage = []; - } - - /** - * Clone Message Signers. - * - * @see Swift_Mime_SimpleMimeEntity::__clone() - */ - public function __clone() - { - parent::__clone(); - foreach ($this->bodySigners as $key => $bodySigner) { - $this->bodySigners[$key] = clone $bodySigner; - } - - foreach ($this->headerSigners as $key => $headerSigner) { - $this->headerSigners[$key] = clone $headerSigner; - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Attachment.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Attachment.php deleted file mode 100644 index 917007e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Attachment.php +++ /dev/null @@ -1,144 +0,0 @@ -setDisposition('attachment'); - $this->setContentType('application/octet-stream'); - $this->mimeTypes = $mimeTypes; - } - - /** - * Get the nesting level used for this attachment. - * - * Always returns {@link LEVEL_MIXED}. - * - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_MIXED; - } - - /** - * Get the Content-Disposition of this attachment. - * - * By default attachments have a disposition of "attachment". - * - * @return string - */ - public function getDisposition() - { - return $this->getHeaderFieldModel('Content-Disposition'); - } - - /** - * Set the Content-Disposition of this attachment. - * - * @param string $disposition - * - * @return $this - */ - public function setDisposition($disposition) - { - if (!$this->setHeaderFieldModel('Content-Disposition', $disposition)) { - $this->getHeaders()->addParameterizedHeader('Content-Disposition', $disposition); - } - - return $this; - } - - /** - * Get the filename of this attachment when downloaded. - * - * @return string - */ - public function getFilename() - { - return $this->getHeaderParameter('Content-Disposition', 'filename'); - } - - /** - * Set the filename of this attachment. - * - * @param string $filename - * - * @return $this - */ - public function setFilename($filename) - { - $this->setHeaderParameter('Content-Disposition', 'filename', $filename); - $this->setHeaderParameter('Content-Type', 'name', $filename); - - return $this; - } - - /** - * Get the file size of this attachment. - * - * @return int - */ - public function getSize() - { - return $this->getHeaderParameter('Content-Disposition', 'size'); - } - - /** - * Set the file size of this attachment. - * - * @param int $size - * - * @return $this - */ - public function setSize($size) - { - $this->setHeaderParameter('Content-Disposition', 'size', $size); - - return $this; - } - - /** - * Set the file that this attachment is for. - * - * @param string $contentType optional - * - * @return $this - */ - public function setFile(Swift_FileStream $file, $contentType = null) - { - $this->setFilename(basename($file->getPath())); - $this->setBody($file, $contentType); - if (!isset($contentType)) { - $extension = strtolower(substr($file->getPath(), strrpos($file->getPath(), '.') + 1)); - - if (array_key_exists($extension, $this->mimeTypes)) { - $this->setContentType($this->mimeTypes[$extension]); - } - } - - return $this; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php deleted file mode 100644 index b49c3a8..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php +++ /dev/null @@ -1,24 +0,0 @@ -= $maxLineLength || 76 < $maxLineLength) { - $maxLineLength = 76; - } - - $remainder = 0; - $base64ReadBufferRemainderBytes = null; - - // To reduce memory usage, the output buffer is streamed to the input buffer like so: - // Output Stream => base64encode => wrap line length => Input Stream - // HOWEVER it's important to note that base64_encode() should only be passed whole triplets of data (except for the final chunk of data) - // otherwise it will assume the input data has *ended* and it will incorrectly pad/terminate the base64 data mid-stream. - // We use $base64ReadBufferRemainderBytes to carry over 1-2 "remainder" bytes from the each chunk from OutputStream and pre-pend those onto the - // chunk of bytes read in the next iteration. - // When the OutputStream is empty, we must flush any remainder bytes. - while (true) { - $readBytes = $os->read(8192); - $atEOF = (false === $readBytes); - - if ($atEOF) { - $streamTheseBytes = $base64ReadBufferRemainderBytes; - } else { - $streamTheseBytes = $base64ReadBufferRemainderBytes.$readBytes; - } - $base64ReadBufferRemainderBytes = null; - $bytesLength = strlen($streamTheseBytes); - - if (0 === $bytesLength) { // no data left to encode - break; - } - - // if we're not on the last block of the ouput stream, make sure $streamTheseBytes ends with a complete triplet of data - // and carry over remainder 1-2 bytes to the next loop iteration - if (!$atEOF) { - $excessBytes = $bytesLength % 3; - if (0 !== $excessBytes) { - $base64ReadBufferRemainderBytes = substr($streamTheseBytes, -$excessBytes); - $streamTheseBytes = substr($streamTheseBytes, 0, $bytesLength - $excessBytes); - } - } - - $encoded = base64_encode($streamTheseBytes); - $encodedTransformed = ''; - $thisMaxLineLength = $maxLineLength - $remainder - $firstLineOffset; - - while ($thisMaxLineLength < strlen($encoded)) { - $encodedTransformed .= substr($encoded, 0, $thisMaxLineLength)."\r\n"; - $firstLineOffset = 0; - $encoded = substr($encoded, $thisMaxLineLength); - $thisMaxLineLength = $maxLineLength; - $remainder = 0; - } - - if (0 < $remainingLength = strlen($encoded)) { - $remainder += $remainingLength; - $encodedTransformed .= $encoded; - $encoded = null; - } - - $is->write($encodedTransformed); - - if ($atEOF) { - break; - } - } - } - - /** - * Get the name of this encoding scheme. - * Returns the string 'base64'. - * - * @return string - */ - public function getName() - { - return 'base64'; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php deleted file mode 100644 index 9aae487..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php +++ /dev/null @@ -1,123 +0,0 @@ -charset = $charset ? $charset : 'utf-8'; - } - - /** - * Notify this observer that the entity's charset has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charset = $charset; - } - - /** - * Encode $in to $out. - * - * @param Swift_OutputByteStream $os to read from - * @param Swift_InputByteStream $is to write to - * @param int $firstLineOffset - * @param int $maxLineLength 0 indicates the default length for this encoding - * - * @throws RuntimeException - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - if ('utf-8' !== $this->charset) { - throw new RuntimeException( - sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); - } - - $string = ''; - - while (false !== $bytes = $os->read(8192)) { - $string .= $bytes; - } - - $is->write($this->encodeString($string)); - } - - /** - * Get the MIME name of this content encoding scheme. - * - * @return string - */ - public function getName() - { - return 'quoted-printable'; - } - - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset if first line needs to be shorter - * @param int $maxLineLength 0 indicates the default length for this encoding - * - * @throws RuntimeException - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if ('utf-8' !== $this->charset) { - throw new RuntimeException( - sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); - } - - return $this->standardize(quoted_printable_encode($string)); - } - - /** - * Make sure CRLF is correct and HT/SPACE are in valid places. - * - * @param string $string - * - * @return string - */ - protected function standardize($string) - { - // transform CR or LF to CRLF - $string = preg_replace('~=0D(?!=0A)|(? - */ -class Swift_Mime_ContentEncoder_NullContentEncoder implements Swift_Mime_ContentEncoder -{ - /** - * The name of this encoding scheme (probably 7bit or 8bit). - * - * @var string - */ - private $_name; - - /** - * Creates a new NullContentEncoder with $name (probably 7bit or 8bit). - * - * @param string $name - */ - public function __construct($name) - { - $this->_name = $name; - } - - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return $string; - } - - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - while (false !== ($bytes = $os->read(8192))) { - $is->write($bytes); - } - } - - /** - * Get the name of this encoding scheme. - * - * @return string - */ - public function getName() - { - return $this->_name; - } - - /** - * Not used. - */ - public function charsetChanged($charset) - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php deleted file mode 100644 index aa634f5..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php +++ /dev/null @@ -1,164 +0,0 @@ -name = $name; - $this->canonical = $canonical; - } - - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset ignored - * @param int $maxLineLength - 0 means no wrapping will occur - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - if ($this->canonical) { - $string = $this->canonicalize($string); - } - - return $this->safeWordwrap($string, $maxLineLength, "\r\n"); - } - - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset ignored - * @param int $maxLineLength optional, 0 means no wrapping will occur - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - $leftOver = ''; - while (false !== $bytes = $os->read(8192)) { - $toencode = $leftOver.$bytes; - if ($this->canonical) { - $toencode = $this->canonicalize($toencode); - } - $wrapped = $this->safeWordwrap($toencode, $maxLineLength, "\r\n"); - $lastLinePos = strrpos($wrapped, "\r\n"); - $leftOver = substr($wrapped, $lastLinePos); - $wrapped = substr($wrapped, 0, $lastLinePos); - - $is->write($wrapped); - } - if (strlen($leftOver)) { - $is->write($leftOver); - } - } - - /** - * Get the name of this encoding scheme. - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Not used. - */ - public function charsetChanged($charset) - { - } - - /** - * A safer (but weaker) wordwrap for unicode. - * - * @param string $string - * @param int $length - * @param string $le - * - * @return string - */ - private function safeWordwrap($string, $length = 75, $le = "\r\n") - { - if (0 >= $length) { - return $string; - } - - $originalLines = explode($le, $string); - - $lines = []; - $lineCount = 0; - - foreach ($originalLines as $originalLine) { - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; - - //$chunks = preg_split('/(?<=[\ \t,\.!\?\-&\+\/])/', $originalLine); - $chunks = preg_split('/(?<=\s)/', $originalLine); - - foreach ($chunks as $chunk) { - if (0 != strlen($currentLine) - && strlen($currentLine.$chunk) > $length) { - $lines[] = ''; - $currentLine = &$lines[$lineCount++]; - } - $currentLine .= $chunk; - } - } - - return implode("\r\n", $lines); - } - - /** - * Canonicalize string input (fix CRLF). - * - * @param string $string - * - * @return string - */ - private function canonicalize($string) - { - return str_replace( - ["\r\n", "\r", "\n"], - ["\n", "\n", "\r\n"], - $string - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php deleted file mode 100644 index 84e3d24..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php +++ /dev/null @@ -1,134 +0,0 @@ -dotEscape = $dotEscape; - parent::__construct($charStream, $filter); - } - - public function __sleep() - { - return ['charStream', 'filter', 'dotEscape']; - } - - protected function getSafeMapShareId() - { - return get_class($this).($this->dotEscape ? '.dotEscape' : ''); - } - - protected function initSafeMap() - { - parent::initSafeMap(); - if ($this->dotEscape) { - /* Encode . as =2e for buggy remote servers */ - unset($this->safeMap[0x2e]); - } - } - - /** - * Encode stream $in to stream $out. - * - * QP encoded strings have a maximum line length of 76 characters. - * If the first line needs to be shorter, indicate the difference with - * $firstLineOffset. - * - * @param Swift_OutputByteStream $os output stream - * @param Swift_InputByteStream $is input stream - * @param int $firstLineOffset - * @param int $maxLineLength - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - if ($maxLineLength > 76 || $maxLineLength <= 0) { - $maxLineLength = 76; - } - - $thisLineLength = $maxLineLength - $firstLineOffset; - - $this->charStream->flushContents(); - $this->charStream->importByteStream($os); - - $currentLine = ''; - $prepend = ''; - $size = $lineLen = 0; - - while (false !== $bytes = $this->nextSequence()) { - // If we're filtering the input - if (isset($this->filter)) { - // If we can't filter because we need more bytes - while ($this->filter->shouldBuffer($bytes)) { - // Then collect bytes into the buffer - if (false === $moreBytes = $this->nextSequence(1)) { - break; - } - - foreach ($moreBytes as $b) { - $bytes[] = $b; - } - } - // And filter them - $bytes = $this->filter->filter($bytes); - } - - $enc = $this->encodeByteSequence($bytes, $size); - - $i = strpos($enc, '=0D=0A'); - $newLineLength = $lineLen + (false === $i ? $size : $i); - - if ($currentLine && $newLineLength >= $thisLineLength) { - $is->write($prepend.$this->standardize($currentLine)); - $currentLine = ''; - $prepend = "=\r\n"; - $thisLineLength = $maxLineLength; - $lineLen = 0; - } - - $currentLine .= $enc; - - if (false === $i) { - $lineLen += $size; - } else { - // 6 is the length of '=0D=0A'. - $lineLen = $size - strrpos($enc, '=0D=0A') - 6; - } - } - if (strlen($currentLine)) { - $is->write($prepend.$this->standardize($currentLine)); - } - } - - /** - * Get the name of this encoding scheme. - * Returns the string 'quoted-printable'. - * - * @return string - */ - public function getName() - { - return 'quoted-printable'; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php deleted file mode 100644 index 1b06da8..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php +++ /dev/null @@ -1,96 +0,0 @@ - - */ -class Swift_Mime_ContentEncoder_QpContentEncoderProxy implements Swift_Mime_ContentEncoder -{ - /** - * @var Swift_Mime_ContentEncoder_QpContentEncoder - */ - private $safeEncoder; - - /** - * @var Swift_Mime_ContentEncoder_NativeQpContentEncoder - */ - private $nativeEncoder; - - /** - * @var null|string - */ - private $charset; - - /** - * Constructor. - * - * @param string|null $charset - */ - public function __construct(Swift_Mime_ContentEncoder_QpContentEncoder $safeEncoder, Swift_Mime_ContentEncoder_NativeQpContentEncoder $nativeEncoder, $charset) - { - $this->safeEncoder = $safeEncoder; - $this->nativeEncoder = $nativeEncoder; - $this->charset = $charset; - } - - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->safeEncoder = clone $this->safeEncoder; - $this->nativeEncoder = clone $this->nativeEncoder; - } - - /** - * {@inheritdoc} - */ - public function charsetChanged($charset) - { - $this->charset = $charset; - $this->safeEncoder->charsetChanged($charset); - } - - /** - * {@inheritdoc} - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - $this->getEncoder()->encodeByteStream($os, $is, $firstLineOffset, $maxLineLength); - } - - /** - * {@inheritdoc} - */ - public function getName() - { - return 'quoted-printable'; - } - - /** - * {@inheritdoc} - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return $this->getEncoder()->encodeString($string, $firstLineOffset, $maxLineLength); - } - - /** - * @return Swift_Mime_ContentEncoder - */ - private function getEncoder() - { - return 'utf-8' === $this->charset ? $this->nativeEncoder : $this->safeEncoder; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php deleted file mode 100644 index 870e7f4..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php +++ /dev/null @@ -1,65 +0,0 @@ - - */ -class Swift_Mime_ContentEncoder_RawContentEncoder implements Swift_Mime_ContentEncoder -{ - /** - * Encode a given string to produce an encoded string. - * - * @param string $string - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return $string; - } - - /** - * Encode stream $in to stream $out. - * - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored - */ - public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) - { - while (false !== ($bytes = $os->read(8192))) { - $is->write($bytes); - } - } - - /** - * Get the name of this encoding scheme. - * - * @return string - */ - public function getName() - { - return 'raw'; - } - - /** - * Not used. - */ - public function charsetChanged($charset) - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php deleted file mode 100644 index 42a5177..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php +++ /dev/null @@ -1,41 +0,0 @@ -setDisposition('inline'); - $this->setId($this->getId()); - } - - /** - * Get the nesting level of this EmbeddedFile. - * - * Returns {@see LEVEL_RELATED}. - * - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_RELATED; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php deleted file mode 100644 index cc44a6e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php +++ /dev/null @@ -1,24 +0,0 @@ -getName(), "\r\n"); - mb_internal_encoding($old); - - return $newstring; - } - - return parent::encodeString($string, $firstLineOffset, $maxLineLength); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php deleted file mode 100644 index 0eef3e1..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php +++ /dev/null @@ -1,65 +0,0 @@ -safeMap[$byte] = chr($byte); - } - } - - /** - * Get the name of this encoding scheme. - * - * Returns the string 'Q'. - * - * @return string - */ - public function getName() - { - return 'Q'; - } - - /** - * Takes an unencoded string and produces a QP encoded string from it. - * - * @param string $string string to encode - * @param int $firstLineOffset optional - * @param int $maxLineLength optional, 0 indicates the default of 76 chars - * - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) - { - return str_replace([' ', '=20', "=\r\n"], ['_', '_', "\r\n"], - parent::encodeString($string, $firstLineOffset, $maxLineLength) - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php deleted file mode 100644 index 3a19404..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php +++ /dev/null @@ -1,476 +0,0 @@ -clearCachedValueIf($charset != $this->charset); - $this->charset = $charset; - if (isset($this->encoder)) { - $this->encoder->charsetChanged($charset); - } - } - - /** - * Get the character set used in this Header. - * - * @return string - */ - public function getCharset() - { - return $this->charset; - } - - /** - * Set the language used in this Header. - * - * For example, for US English, 'en-us'. - * This can be unspecified. - * - * @param string $lang - */ - public function setLanguage($lang) - { - $this->clearCachedValueIf($this->lang != $lang); - $this->lang = $lang; - } - - /** - * Get the language used in this Header. - * - * @return string - */ - public function getLanguage() - { - return $this->lang; - } - - /** - * Set the encoder used for encoding the header. - */ - public function setEncoder(Swift_Mime_HeaderEncoder $encoder) - { - $this->encoder = $encoder; - $this->setCachedValue(null); - } - - /** - * Get the encoder used for encoding this Header. - * - * @return Swift_Mime_HeaderEncoder - */ - public function getEncoder() - { - return $this->encoder; - } - - /** - * Get the name of this header (e.g. charset). - * - * @return string - */ - public function getFieldName() - { - return $this->name; - } - - /** - * Set the maximum length of lines in the header (excluding EOL). - * - * @param int $lineLength - */ - public function setMaxLineLength($lineLength) - { - $this->clearCachedValueIf($this->lineLength != $lineLength); - $this->lineLength = $lineLength; - } - - /** - * Get the maximum permitted length of lines in this Header. - * - * @return int - */ - public function getMaxLineLength() - { - return $this->lineLength; - } - - /** - * Get this Header rendered as a RFC 2822 compliant string. - * - * @return string - * - * @throws Swift_RfcComplianceException - */ - public function toString() - { - return $this->tokensToString($this->toTokens()); - } - - /** - * Returns a string representation of this object. - * - * @return string - * - * @see toString() - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Set the name of this Header field. - * - * @param string $name - */ - protected function setFieldName($name) - { - $this->name = $name; - } - - /** - * Produces a compliant, formatted RFC 2822 'phrase' based on the string given. - * - * @param string $string as displayed - * @param string $charset of the text - * @param bool $shorten the first line to make remove for header name - * - * @return string - */ - protected function createPhrase(Swift_Mime_Header $header, $string, $charset, Swift_Mime_HeaderEncoder $encoder = null, $shorten = false) - { - // Treat token as exactly what was given - $phraseStr = $string; - // If it's not valid - - if (!preg_match('/^'.self::PHRASE_PATTERN.'$/D', $phraseStr)) { - // .. but it is just ascii text, try escaping some characters - // and make it a quoted-string - if (preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $phraseStr)) { - $phraseStr = $this->escapeSpecials($phraseStr, ['"']); - $phraseStr = '"'.$phraseStr.'"'; - } else { - // ... otherwise it needs encoding - // Determine space remaining on line if first line - if ($shorten) { - $usedLength = strlen($header->getFieldName().': '); - } else { - $usedLength = 0; - } - $phraseStr = $this->encodeWords($header, $string, $usedLength); - } - } - - return $phraseStr; - } - - /** - * Escape special characters in a string (convert to quoted-pairs). - * - * @param string $token - * @param string[] $include additional chars to escape - * - * @return string - */ - private function escapeSpecials($token, $include = []) - { - foreach (array_merge(['\\'], $include) as $char) { - $token = str_replace($char, '\\'.$char, $token); - } - - return $token; - } - - /** - * Encode needed word tokens within a string of input. - * - * @param string $input - * @param string $usedLength optional - * - * @return string - */ - protected function encodeWords(Swift_Mime_Header $header, $input, $usedLength = -1) - { - $value = ''; - - $tokens = $this->getEncodableWordTokens($input); - - foreach ($tokens as $token) { - // See RFC 2822, Sect 2.2 (really 2.2 ??) - if ($this->tokenNeedsEncoding($token)) { - // Don't encode starting WSP - $firstChar = substr($token, 0, 1); - switch ($firstChar) { - case ' ': - case "\t": - $value .= $firstChar; - $token = substr($token, 1); - } - - if (-1 == $usedLength) { - $usedLength = strlen($header->getFieldName().': ') + strlen($value); - } - $value .= $this->getTokenAsEncodedWord($token, $usedLength); - - $header->setMaxLineLength(76); // Forcefully override - } else { - $value .= $token; - } - } - - return $value; - } - - /** - * Test if a token needs to be encoded or not. - * - * @param string $token - * - * @return bool - */ - protected function tokenNeedsEncoding($token) - { - return preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $token); - } - - /** - * Splits a string into tokens in blocks of words which can be encoded quickly. - * - * @param string $string - * - * @return string[] - */ - protected function getEncodableWordTokens($string) - { - $tokens = []; - - $encodedToken = ''; - // Split at all whitespace boundaries - foreach (preg_split('~(?=[\t ])~', $string) as $token) { - if ($this->tokenNeedsEncoding($token)) { - $encodedToken .= $token; - } else { - if (strlen($encodedToken) > 0) { - $tokens[] = $encodedToken; - $encodedToken = ''; - } - $tokens[] = $token; - } - } - if (strlen($encodedToken)) { - $tokens[] = $encodedToken; - } - - return $tokens; - } - - /** - * Get a token as an encoded word for safe insertion into headers. - * - * @param string $token token to encode - * @param int $firstLineOffset optional - * - * @return string - */ - protected function getTokenAsEncodedWord($token, $firstLineOffset = 0) - { - // Adjust $firstLineOffset to account for space needed for syntax - $charsetDecl = $this->charset; - if (isset($this->lang)) { - $charsetDecl .= '*'.$this->lang; - } - $encodingWrapperLength = strlen( - '=?'.$charsetDecl.'?'.$this->encoder->getName().'??=' - ); - - if ($firstLineOffset >= 75) { - //Does this logic need to be here? - $firstLineOffset = 0; - } - - $encodedTextLines = explode("\r\n", - $this->encoder->encodeString( - $token, $firstLineOffset, 75 - $encodingWrapperLength, $this->charset - ) - ); - - if ('iso-2022-jp' !== strtolower($this->charset)) { - // special encoding for iso-2022-jp using mb_encode_mimeheader - foreach ($encodedTextLines as $lineNum => $line) { - $encodedTextLines[$lineNum] = '=?'.$charsetDecl. - '?'.$this->encoder->getName(). - '?'.$line.'?='; - } - } - - return implode("\r\n ", $encodedTextLines); - } - - /** - * Generates tokens from the given string which include CRLF as individual tokens. - * - * @param string $token - * - * @return string[] - */ - protected function generateTokenLines($token) - { - return preg_split('~(\r\n)~', $token, -1, PREG_SPLIT_DELIM_CAPTURE); - } - - /** - * Set a value into the cache. - * - * @param string $value - */ - protected function setCachedValue($value) - { - $this->cachedValue = $value; - } - - /** - * Get the value in the cache. - * - * @return string - */ - protected function getCachedValue() - { - return $this->cachedValue; - } - - /** - * Clear the cached value if $condition is met. - * - * @param bool $condition - */ - protected function clearCachedValueIf($condition) - { - if ($condition) { - $this->setCachedValue(null); - } - } - - /** - * Generate a list of all tokens in the final header. - * - * @param string $string The string to tokenize - * - * @return array An array of tokens as strings - */ - protected function toTokens($string = null) - { - if (null === $string) { - $string = $this->getFieldBody(); - } - - $tokens = []; - - // Generate atoms; split at all invisible boundaries followed by WSP - foreach (preg_split('~(?=[ \t])~', $string) as $token) { - $newTokens = $this->generateTokenLines($token); - foreach ($newTokens as $newToken) { - $tokens[] = $newToken; - } - } - - return $tokens; - } - - /** - * Takes an array of tokens which appear in the header and turns them into - * an RFC 2822 compliant string, adding FWSP where needed. - * - * @param string[] $tokens - * - * @return string - */ - private function tokensToString(array $tokens) - { - $lineCount = 0; - $headerLines = []; - $headerLines[] = $this->name.': '; - $currentLine = &$headerLines[$lineCount++]; - - // Build all tokens back into compliant header - foreach ($tokens as $i => $token) { - // Line longer than specified maximum or token was just a new line - if (("\r\n" == $token) || - ($i > 0 && strlen($currentLine.$token) > $this->lineLength) - && 0 < strlen($currentLine)) { - $headerLines[] = ''; - $currentLine = &$headerLines[$lineCount++]; - } - - // Append token to the line - if ("\r\n" != $token) { - $currentLine .= $token; - } - } - - // Implode with FWS (RFC 2822, 2.2.3) - return implode("\r\n", $headerLines)."\r\n"; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php deleted file mode 100644 index efe1dad..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php +++ /dev/null @@ -1,113 +0,0 @@ -setFieldName($name); - } - - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_DATE; - } - - /** - * Set the model for the field body. - * - * @param DateTimeInterface $model - */ - public function setFieldBodyModel($model) - { - $this->setDateTime($model); - } - - /** - * Get the model for the field body. - * - * @return DateTimeImmutable - */ - public function getFieldBodyModel() - { - return $this->getDateTime(); - } - - /** - * Get the date-time representing the Date in this Header. - * - * @return DateTimeImmutable - */ - public function getDateTime() - { - return $this->dateTime; - } - - /** - * Set the date-time of the Date in this Header. - * - * If a DateTime instance is provided, it is converted to DateTimeImmutable. - */ - public function setDateTime(DateTimeInterface $dateTime) - { - $this->clearCachedValueIf($this->getCachedValue() != $dateTime->format(DateTime::RFC2822)); - if ($dateTime instanceof DateTime) { - $immutable = new DateTimeImmutable('@'.$dateTime->getTimestamp()); - $dateTime = $immutable->setTimezone($dateTime->getTimezone()); - } - $this->dateTime = $dateTime; - } - - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * - * @see toString() - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - if (isset($this->dateTime)) { - $this->setCachedValue($this->dateTime->format(DateTime::RFC2822)); - } - } - - return $this->getCachedValue(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php deleted file mode 100644 index cadc63f..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php +++ /dev/null @@ -1,186 +0,0 @@ -setFieldName($name); - $this->emailValidator = $emailValidator; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } - - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_ID; - } - - /** - * Set the model for the field body. - * - * This method takes a string ID, or an array of IDs. - * - * @param mixed $model - * - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setId($model); - } - - /** - * Get the model for the field body. - * - * This method returns an array of IDs - * - * @return array - */ - public function getFieldBodyModel() - { - return $this->getIds(); - } - - /** - * Set the ID used in the value of this header. - * - * @param string|array $id - * - * @throws Swift_RfcComplianceException - */ - public function setId($id) - { - $this->setIds(is_array($id) ? $id : [$id]); - } - - /** - * Get the ID used in the value of this Header. - * - * If multiple IDs are set only the first is returned. - * - * @return string - */ - public function getId() - { - if (count($this->ids) > 0) { - return $this->ids[0]; - } - } - - /** - * Set a collection of IDs to use in the value of this Header. - * - * @param string[] $ids - * - * @throws Swift_RfcComplianceException - */ - public function setIds(array $ids) - { - $actualIds = []; - - foreach ($ids as $id) { - $this->assertValidId($id); - $actualIds[] = $id; - } - - $this->clearCachedValueIf($this->ids != $actualIds); - $this->ids = $actualIds; - } - - /** - * Get the list of IDs used in this Header. - * - * @return string[] - */ - public function getIds() - { - return $this->ids; - } - - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@see toString()} for that). - * - * @see toString() - * - * @throws Swift_RfcComplianceException - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - $angleAddrs = []; - - foreach ($this->ids as $id) { - $angleAddrs[] = '<'.$this->addressEncoder->encodeString($id).'>'; - } - - $this->setCachedValue(implode(' ', $angleAddrs)); - } - - return $this->getCachedValue(); - } - - /** - * Throws an Exception if the id passed does not comply with RFC 2822. - * - * @param string $id - * - * @throws Swift_RfcComplianceException - */ - private function assertValidId($id) - { - if (!$this->emailValidator->isValid($id, new RFCValidation())) { - throw new Swift_RfcComplianceException('Invalid ID given <'.$id.'>'); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php deleted file mode 100644 index 9f1fe17..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php +++ /dev/null @@ -1,360 +0,0 @@ -setFieldName($name); - $this->setEncoder($encoder); - $this->emailValidator = $emailValidator; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } - - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_MAILBOX; - } - - /** - * Set the model for the field body. - * - * This method takes a string, or an array of addresses. - * - * @param mixed $model - * - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setNameAddresses($model); - } - - /** - * Get the model for the field body. - * - * This method returns an associative array like {@link getNameAddresses()} - * - * @throws Swift_RfcComplianceException - * - * @return array - */ - public function getFieldBodyModel() - { - return $this->getNameAddresses(); - } - - /** - * Set a list of mailboxes to be shown in this Header. - * - * The mailboxes can be a simple array of addresses, or an array of - * key=>value pairs where (email => personalName). - * Example: - * - * setNameAddresses(array( - * 'chris@swiftmailer.org' => 'Chris Corbyn', - * 'mark@swiftmailer.org' //No associated personal name - * )); - * ?> - * - * - * @see __construct() - * @see setAddresses() - * @see setValue() - * - * @param string|string[] $mailboxes - * - * @throws Swift_RfcComplianceException - */ - public function setNameAddresses($mailboxes) - { - $this->mailboxes = $this->normalizeMailboxes((array) $mailboxes); - $this->setCachedValue(null); //Clear any cached value - } - - /** - * Get the full mailbox list of this Header as an array of valid RFC 2822 strings. - * - * Example: - * - * 'Chris Corbyn', - * 'mark@swiftmailer.org' => 'Mark Corbyn') - * ); - * print_r($header->getNameAddressStrings()); - * // array ( - * // 0 => Chris Corbyn , - * // 1 => Mark Corbyn - * // ) - * ?> - * - * - * @see getNameAddresses() - * @see toString() - * - * @throws Swift_RfcComplianceException - * - * @return string[] - */ - public function getNameAddressStrings() - { - return $this->createNameAddressStrings($this->getNameAddresses()); - } - - /** - * Get all mailboxes in this Header as key=>value pairs. - * - * The key is the address and the value is the name (or null if none set). - * Example: - * - * 'Chris Corbyn', - * 'mark@swiftmailer.org' => 'Mark Corbyn') - * ); - * print_r($header->getNameAddresses()); - * // array ( - * // chris@swiftmailer.org => Chris Corbyn, - * // mark@swiftmailer.org => Mark Corbyn - * // ) - * ?> - * - * - * @see getAddresses() - * @see getNameAddressStrings() - * - * @return string[] - */ - public function getNameAddresses() - { - return $this->mailboxes; - } - - /** - * Makes this Header represent a list of plain email addresses with no names. - * - * Example: - * - * setAddresses( - * array('one@domain.tld', 'two@domain.tld', 'three@domain.tld') - * ); - * ?> - * - * - * @see setNameAddresses() - * @see setValue() - * - * @param string[] $addresses - * - * @throws Swift_RfcComplianceException - */ - public function setAddresses($addresses) - { - $this->setNameAddresses(array_values((array) $addresses)); - } - - /** - * Get all email addresses in this Header. - * - * @see getNameAddresses() - * - * @return string[] - */ - public function getAddresses() - { - return array_keys($this->mailboxes); - } - - /** - * Remove one or more addresses from this Header. - * - * @param string|string[] $addresses - */ - public function removeAddresses($addresses) - { - $this->setCachedValue(null); - foreach ((array) $addresses as $address) { - unset($this->mailboxes[$address]); - } - } - - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * - * @see toString() - * - * @throws Swift_RfcComplianceException - * - * @return string - */ - public function getFieldBody() - { - // Compute the string value of the header only if needed - if (null === $this->getCachedValue()) { - $this->setCachedValue($this->createMailboxListString($this->mailboxes)); - } - - return $this->getCachedValue(); - } - - /** - * Normalizes a user-input list of mailboxes into consistent key=>value pairs. - * - * @param string[] $mailboxes - * - * @return string[] - */ - protected function normalizeMailboxes(array $mailboxes) - { - $actualMailboxes = []; - - foreach ($mailboxes as $key => $value) { - if (is_string($key)) { - //key is email addr - $address = $key; - $name = $value; - } else { - $address = $value; - $name = null; - } - $this->assertValidAddress($address); - $actualMailboxes[$address] = $name; - } - - return $actualMailboxes; - } - - /** - * Produces a compliant, formatted display-name based on the string given. - * - * @param string $displayName as displayed - * @param bool $shorten the first line to make remove for header name - * - * @return string - */ - protected function createDisplayNameString($displayName, $shorten = false) - { - return $this->createPhrase($this, $displayName, $this->getCharset(), $this->getEncoder(), $shorten); - } - - /** - * Creates a string form of all the mailboxes in the passed array. - * - * @param string[] $mailboxes - * - * @throws Swift_RfcComplianceException - * - * @return string - */ - protected function createMailboxListString(array $mailboxes) - { - return implode(', ', $this->createNameAddressStrings($mailboxes)); - } - - /** - * Redefine the encoding requirements for mailboxes. - * - * All "specials" must be encoded as the full header value will not be quoted - * - * @see RFC 2822 3.2.1 - * - * @param string $token - * - * @return bool - */ - protected function tokenNeedsEncoding($token) - { - return preg_match('/[()<>\[\]:;@\,."]/', $token) || parent::tokenNeedsEncoding($token); - } - - /** - * Return an array of strings conforming the the name-addr spec of RFC 2822. - * - * @param string[] $mailboxes - * - * @return string[] - */ - private function createNameAddressStrings(array $mailboxes) - { - $strings = []; - - foreach ($mailboxes as $email => $name) { - $mailboxStr = $this->addressEncoder->encodeString($email); - if (null !== $name) { - $nameStr = $this->createDisplayNameString($name, empty($strings)); - $mailboxStr = $nameStr.' <'.$mailboxStr.'>'; - } - $strings[] = $mailboxStr; - } - - return $strings; - } - - /** - * Throws an Exception if the address passed does not comply with RFC 2822. - * - * @param string $address - * - * @throws Swift_RfcComplianceException If invalid. - */ - private function assertValidAddress($address) - { - if (!$this->emailValidator->isValid($address, new RFCValidation())) { - throw new Swift_RfcComplianceException( - 'Address in mailbox given ['.$address.'] does not comply with RFC 2822, 3.6.2.' - ); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php deleted file mode 100644 index fafb5ba..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php +++ /dev/null @@ -1,135 +0,0 @@ - - * - * @deprecated since SwiftMailer 6.1.0; use Swift_Signers_DKIMSigner instead. - */ -class Swift_Mime_Headers_OpenDKIMHeader implements Swift_Mime_Header -{ - /** - * The value of this Header. - * - * @var string - */ - private $value; - - /** - * The name of this Header. - * - * @var string - */ - private $fieldName; - - /** - * @param string $name - */ - public function __construct($name) - { - $this->fieldName = $name; - } - - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_TEXT; - } - - /** - * Set the model for the field body. - * - * This method takes a string for the field value. - * - * @param string $model - */ - public function setFieldBodyModel($model) - { - $this->setValue($model); - } - - /** - * Get the model for the field body. - * - * This method returns a string. - * - * @return string - */ - public function getFieldBodyModel() - { - return $this->getValue(); - } - - /** - * Get the (unencoded) value of this header. - * - * @return string - */ - public function getValue() - { - return $this->value; - } - - /** - * Set the (unencoded) value of this header. - * - * @param string $value - */ - public function setValue($value) - { - $this->value = $value; - } - - /** - * Get the value of this header prepared for rendering. - * - * @return string - */ - public function getFieldBody() - { - return $this->value; - } - - /** - * Get this Header rendered as a RFC 2822 compliant string. - * - * @return string - */ - public function toString() - { - return $this->fieldName.': '.$this->value."\r\n"; - } - - /** - * Set the Header FieldName. - * - * @see Swift_Mime_Header::getFieldName() - */ - public function getFieldName() - { - return $this->fieldName; - } - - /** - * Ignored. - */ - public function setCharset($charset) - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php deleted file mode 100644 index 02933c4..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php +++ /dev/null @@ -1,255 +0,0 @@ -paramEncoder = $paramEncoder; - } - - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_PARAMETERIZED; - } - - /** - * Set the character set used in this Header. - * - * @param string $charset - */ - public function setCharset($charset) - { - parent::setCharset($charset); - if (isset($this->paramEncoder)) { - $this->paramEncoder->charsetChanged($charset); - } - } - - /** - * Set the value of $parameter. - * - * @param string $parameter - * @param string $value - */ - public function setParameter($parameter, $value) - { - $this->setParameters(array_merge($this->getParameters(), [$parameter => $value])); - } - - /** - * Get the value of $parameter. - * - * @param string $parameter - * - * @return string - */ - public function getParameter($parameter) - { - $params = $this->getParameters(); - - return $params[$parameter] ?? null; - } - - /** - * Set an associative array of parameter names mapped to values. - * - * @param string[] $parameters - */ - public function setParameters(array $parameters) - { - $this->clearCachedValueIf($this->params != $parameters); - $this->params = $parameters; - } - - /** - * Returns an associative array of parameter names mapped to values. - * - * @return string[] - */ - public function getParameters() - { - return $this->params; - } - - /** - * Get the value of this header prepared for rendering. - * - * @return string - */ - public function getFieldBody() //TODO: Check caching here - { - $body = parent::getFieldBody(); - foreach ($this->params as $name => $value) { - if (null !== $value) { - // Add the parameter - $body .= '; '.$this->createParameter($name, $value); - } - } - - return $body; - } - - /** - * Generate a list of all tokens in the final header. - * - * This doesn't need to be overridden in theory, but it is for implementation - * reasons to prevent potential breakage of attributes. - * - * @param string $string The string to tokenize - * - * @return array An array of tokens as strings - */ - protected function toTokens($string = null) - { - $tokens = parent::toTokens(parent::getFieldBody()); - - // Try creating any parameters - foreach ($this->params as $name => $value) { - if (null !== $value) { - // Add the semi-colon separator - $tokens[count($tokens) - 1] .= ';'; - $tokens = array_merge($tokens, $this->generateTokenLines( - ' '.$this->createParameter($name, $value) - )); - } - } - - return $tokens; - } - - /** - * Render a RFC 2047 compliant header parameter from the $name and $value. - * - * @param string $name - * @param string $value - * - * @return string - */ - private function createParameter($name, $value) - { - $origValue = $value; - - $encoded = false; - // Allow room for parameter name, indices, "=" and DQUOTEs - $maxValueLength = $this->getMaxLineLength() - strlen($name.'=*N"";') - 1; - $firstLineOffset = 0; - - // If it's not already a valid parameter value... - if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { - // TODO: text, or something else?? - // ... and it's not ascii - if (!preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $value)) { - $encoded = true; - // Allow space for the indices, charset and language - $maxValueLength = $this->getMaxLineLength() - strlen($name.'*N*="";') - 1; - $firstLineOffset = strlen( - $this->getCharset()."'".$this->getLanguage()."'" - ); - } - } - - // Encode if we need to - if ($encoded || strlen($value) > $maxValueLength) { - if (isset($this->paramEncoder)) { - $value = $this->paramEncoder->encodeString( - $origValue, $firstLineOffset, $maxValueLength, $this->getCharset() - ); - } else { - // We have to go against RFC 2183/2231 in some areas for interoperability - $value = $this->getTokenAsEncodedWord($origValue); - $encoded = false; - } - } - - $valueLines = isset($this->paramEncoder) ? explode("\r\n", $value) : [$value]; - - // Need to add indices - if (count($valueLines) > 1) { - $paramLines = []; - foreach ($valueLines as $i => $line) { - $paramLines[] = $name.'*'.$i. - $this->getEndOfParameterValue($line, true, 0 == $i); - } - - return implode(";\r\n ", $paramLines); - } else { - return $name.$this->getEndOfParameterValue( - $valueLines[0], $encoded, true - ); - } - } - - /** - * Returns the parameter value from the "=" and beyond. - * - * @param string $value to append - * @param bool $encoded - * @param bool $firstLine - * - * @return string - */ - private function getEndOfParameterValue($value, $encoded = false, $firstLine = false) - { - if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { - $value = '"'.$value.'"'; - } - $prepend = '='; - if ($encoded) { - $prepend = '*='; - if ($firstLine) { - $prepend = '*='.$this->getCharset()."'".$this->getLanguage(). - "'"; - } - } - - return $prepend.$value; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php deleted file mode 100644 index d22afbf..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php +++ /dev/null @@ -1,155 +0,0 @@ -setFieldName($name); - $this->emailValidator = $emailValidator; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } - - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_PATH; - } - - /** - * Set the model for the field body. - * This method takes a string for an address. - * - * @param string $model - * - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setAddress($model); - } - - /** - * Get the model for the field body. - * This method returns a string email address. - * - * @return mixed - */ - public function getFieldBodyModel() - { - return $this->getAddress(); - } - - /** - * Set the Address which should appear in this Header. - * - * @param string $address - * - * @throws Swift_RfcComplianceException - */ - public function setAddress($address) - { - if (null === $address) { - $this->address = null; - } elseif ('' == $address) { - $this->address = ''; - } else { - $this->assertValidAddress($address); - $this->address = $address; - } - $this->setCachedValue(null); - } - - /** - * Get the address which is used in this Header (if any). - * - * Null is returned if no address is set. - * - * @return string - */ - public function getAddress() - { - return $this->address; - } - - /** - * Get the string value of the body in this Header. - * - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * - * @see toString() - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - if (isset($this->address)) { - $address = $this->addressEncoder->encodeString($this->address); - $this->setCachedValue('<'.$address.'>'); - } - } - - return $this->getCachedValue(); - } - - /** - * Throws an Exception if the address passed does not comply with RFC 2822. - * - * @param string $address - * - * @throws Swift_RfcComplianceException If address is invalid - */ - private function assertValidAddress($address) - { - if (!$this->emailValidator->isValid($address, new RFCValidation())) { - throw new Swift_RfcComplianceException( - 'Address set in PathHeader does not comply with addr-spec of RFC 2822.' - ); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php deleted file mode 100644 index 64f160d..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php +++ /dev/null @@ -1,109 +0,0 @@ -setFieldName($name); - $this->setEncoder($encoder); - } - - /** - * Get the type of Header that this instance represents. - * - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - * - * @return int - */ - public function getFieldType() - { - return self::TYPE_TEXT; - } - - /** - * Set the model for the field body. - * - * This method takes a string for the field value. - * - * @param string $model - */ - public function setFieldBodyModel($model) - { - $this->setValue($model); - } - - /** - * Get the model for the field body. - * - * This method returns a string. - * - * @return string - */ - public function getFieldBodyModel() - { - return $this->getValue(); - } - - /** - * Get the (unencoded) value of this header. - * - * @return string - */ - public function getValue() - { - return $this->value; - } - - /** - * Set the (unencoded) value of this header. - * - * @param string $value - */ - public function setValue($value) - { - $this->clearCachedValueIf($this->value != $value); - $this->value = $value; - } - - /** - * Get the value of this header prepared for rendering. - * - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) { - $this->setCachedValue( - $this->encodeWords($this, $this->value) - ); - } - - return $this->getCachedValue(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php deleted file mode 100644 index 3ce35f2..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php +++ /dev/null @@ -1,54 +0,0 @@ -idRight = $idRight; - } - - /** - * Returns the right-hand side of the "@" used in all generated IDs. - * - * @return string - */ - public function getIdRight() - { - return $this->idRight; - } - - /** - * Sets the right-hand side of the "@" to use in all generated IDs. - * - * @param string $idRight - */ - public function setIdRight($idRight) - { - $this->idRight = $idRight; - } - - /** - * @return string - */ - public function generateId() - { - // 32 hex values for the left part - return bin2hex(random_bytes(16)).'@'.$this->idRight; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimePart.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimePart.php deleted file mode 100644 index 0acfd4e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimePart.php +++ /dev/null @@ -1,199 +0,0 @@ -setContentType('text/plain'); - if (null !== $charset) { - $this->setCharset($charset); - } - } - - /** - * Set the body of this entity, either as a string, or as an instance of - * {@link Swift_OutputByteStream}. - * - * @param mixed $body - * @param string $contentType optional - * @param string $charset optional - * - * @return $this - */ - public function setBody($body, $contentType = null, $charset = null) - { - if (isset($charset)) { - $this->setCharset($charset); - } - $body = $this->convertString($body); - - parent::setBody($body, $contentType); - - return $this; - } - - /** - * Get the character set of this entity. - * - * @return string - */ - public function getCharset() - { - return $this->getHeaderParameter('Content-Type', 'charset'); - } - - /** - * Set the character set of this entity. - * - * @param string $charset - * - * @return $this - */ - public function setCharset($charset) - { - $this->setHeaderParameter('Content-Type', 'charset', $charset); - if ($charset !== $this->userCharset) { - $this->clearCache(); - } - $this->userCharset = $charset; - parent::charsetChanged($charset); - - return $this; - } - - /** - * Get the format of this entity (i.e. flowed or fixed). - * - * @return string - */ - public function getFormat() - { - return $this->getHeaderParameter('Content-Type', 'format'); - } - - /** - * Set the format of this entity (flowed or fixed). - * - * @param string $format - * - * @return $this - */ - public function setFormat($format) - { - $this->setHeaderParameter('Content-Type', 'format', $format); - $this->userFormat = $format; - - return $this; - } - - /** - * Test if delsp is being used for this entity. - * - * @return bool - */ - public function getDelSp() - { - return 'yes' === $this->getHeaderParameter('Content-Type', 'delsp'); - } - - /** - * Turn delsp on or off for this entity. - * - * @param bool $delsp - * - * @return $this - */ - public function setDelSp($delsp = true) - { - $this->setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null); - $this->userDelSp = $delsp; - - return $this; - } - - /** - * Get the nesting level of this entity. - * - * @see LEVEL_TOP, LEVEL_ALTERNATIVE, LEVEL_MIXED, LEVEL_RELATED - * - * @return int - */ - public function getNestingLevel() - { - return $this->nestingLevel; - } - - /** - * Receive notification that the charset has changed on this document, or a - * parent document. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->setCharset($charset); - } - - /** Fix the content-type and encoding of this entity */ - protected function fixHeaders() - { - parent::fixHeaders(); - if (count($this->getChildren())) { - $this->setHeaderParameter('Content-Type', 'charset', null); - $this->setHeaderParameter('Content-Type', 'format', null); - $this->setHeaderParameter('Content-Type', 'delsp', null); - } else { - $this->setCharset($this->userCharset); - $this->setFormat($this->userFormat); - $this->setDelSp($this->userDelSp); - } - } - - /** Set the nesting level of this entity */ - protected function setNestingLevel($level) - { - $this->nestingLevel = $level; - } - - /** Encode charset when charset is not utf-8 */ - protected function convertString($string) - { - $charset = strtolower($this->getCharset()); - if (!in_array($charset, ['utf-8', 'iso-8859-1', 'iso-8859-15', ''])) { - return mb_convert_encoding($string, $charset, 'utf-8'); - } - - return $string; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php deleted file mode 100644 index 93af996..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php +++ /dev/null @@ -1,195 +0,0 @@ -encoder = $encoder; - $this->paramEncoder = $paramEncoder; - $this->emailValidator = $emailValidator; - $this->charset = $charset; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - } - - /** - * Create a new Mailbox Header with a list of $addresses. - * - * @param string $name - * @param array|string|null $addresses - * - * @return Swift_Mime_Header - */ - public function createMailboxHeader($name, $addresses = null) - { - $header = new Swift_Mime_Headers_MailboxHeader($name, $this->encoder, $this->emailValidator, $this->addressEncoder); - if (isset($addresses)) { - $header->setFieldBodyModel($addresses); - } - $this->setHeaderCharset($header); - - return $header; - } - - /** - * Create a new Date header using $dateTime. - * - * @param string $name - * @param DateTimeInterface|null $dateTime - * - * @return Swift_Mime_Header - */ - public function createDateHeader($name, DateTimeInterface $dateTime = null) - { - $header = new Swift_Mime_Headers_DateHeader($name); - if (isset($dateTime)) { - $header->setFieldBodyModel($dateTime); - } - $this->setHeaderCharset($header); - - return $header; - } - - /** - * Create a new basic text header with $name and $value. - * - * @param string $name - * @param string $value - * - * @return Swift_Mime_Header - */ - public function createTextHeader($name, $value = null) - { - $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->encoder); - if (isset($value)) { - $header->setFieldBodyModel($value); - } - $this->setHeaderCharset($header); - - return $header; - } - - /** - * Create a new ParameterizedHeader with $name, $value and $params. - * - * @param string $name - * @param string $value - * @param array $params - * - * @return Swift_Mime_Headers_ParameterizedHeader - */ - public function createParameterizedHeader($name, $value = null, $params = []) - { - $header = new Swift_Mime_Headers_ParameterizedHeader($name, $this->encoder, ('content-disposition' == strtolower($name)) ? $this->paramEncoder : null); - if (isset($value)) { - $header->setFieldBodyModel($value); - } - foreach ($params as $k => $v) { - $header->setParameter($k, $v); - } - $this->setHeaderCharset($header); - - return $header; - } - - /** - * Create a new ID header for Message-ID or Content-ID. - * - * @param string $name - * @param string|array $ids - * - * @return Swift_Mime_Header - */ - public function createIdHeader($name, $ids = null) - { - $header = new Swift_Mime_Headers_IdentificationHeader($name, $this->emailValidator); - if (isset($ids)) { - $header->setFieldBodyModel($ids); - } - $this->setHeaderCharset($header); - - return $header; - } - - /** - * Create a new Path header with an address (path) in it. - * - * @param string $name - * @param string $path - * - * @return Swift_Mime_Header - */ - public function createPathHeader($name, $path = null) - { - $header = new Swift_Mime_Headers_PathHeader($name, $this->emailValidator); - if (isset($path)) { - $header->setFieldBodyModel($path); - } - $this->setHeaderCharset($header); - - return $header; - } - - /** - * Notify this observer that the entity's charset has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->charset = $charset; - $this->encoder->charsetChanged($charset); - $this->paramEncoder->charsetChanged($charset); - } - - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->encoder = clone $this->encoder; - $this->paramEncoder = clone $this->paramEncoder; - } - - /** Apply the charset to the Header */ - private function setHeaderCharset(Swift_Mime_Header $header) - { - if (isset($this->charset)) { - $header->setCharset($this->charset); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php deleted file mode 100644 index a2c3191..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php +++ /dev/null @@ -1,399 +0,0 @@ -factory = $factory; - if (isset($charset)) { - $this->setCharset($charset); - } - } - - public function newInstance() - { - return new self($this->factory); - } - - /** - * Set the charset used by these headers. - * - * @param string $charset - */ - public function setCharset($charset) - { - $this->charset = $charset; - $this->factory->charsetChanged($charset); - $this->notifyHeadersOfCharset($charset); - } - - /** - * Add a new Mailbox Header with a list of $addresses. - * - * @param string $name - * @param array|string $addresses - */ - public function addMailboxHeader($name, $addresses = null) - { - $this->storeHeader($name, $this->factory->createMailboxHeader($name, $addresses)); - } - - /** - * Add a new Date header using $dateTime. - * - * @param string $name - */ - public function addDateHeader($name, DateTimeInterface $dateTime = null) - { - $this->storeHeader($name, $this->factory->createDateHeader($name, $dateTime)); - } - - /** - * Add a new basic text header with $name and $value. - * - * @param string $name - * @param string $value - */ - public function addTextHeader($name, $value = null) - { - $this->storeHeader($name, $this->factory->createTextHeader($name, $value)); - } - - /** - * Add a new ParameterizedHeader with $name, $value and $params. - * - * @param string $name - * @param string $value - * @param array $params - */ - public function addParameterizedHeader($name, $value = null, $params = []) - { - $this->storeHeader($name, $this->factory->createParameterizedHeader($name, $value, $params)); - } - - /** - * Add a new ID header for Message-ID or Content-ID. - * - * @param string $name - * @param string|array $ids - */ - public function addIdHeader($name, $ids = null) - { - $this->storeHeader($name, $this->factory->createIdHeader($name, $ids)); - } - - /** - * Add a new Path header with an address (path) in it. - * - * @param string $name - * @param string $path - */ - public function addPathHeader($name, $path = null) - { - $this->storeHeader($name, $this->factory->createPathHeader($name, $path)); - } - - /** - * Returns true if at least one header with the given $name exists. - * - * If multiple headers match, the actual one may be specified by $index. - * - * @param string $name - * @param int $index - * - * @return bool - */ - public function has($name, $index = 0) - { - $lowerName = strtolower($name); - - if (!array_key_exists($lowerName, $this->headers)) { - return false; - } - - if (func_num_args() < 2) { - // index was not specified, so we only need to check that there is at least one header value set - return (bool) count($this->headers[$lowerName]); - } - - return array_key_exists($index, $this->headers[$lowerName]); - } - - /** - * Set a header in the HeaderSet. - * - * The header may be a previously fetched header via {@link get()} or it may - * be one that has been created separately. - * - * If $index is specified, the header will be inserted into the set at this - * offset. - * - * @param int $index - */ - public function set(Swift_Mime_Header $header, $index = 0) - { - $this->storeHeader($header->getFieldName(), $header, $index); - } - - /** - * Get the header with the given $name. - * - * If multiple headers match, the actual one may be specified by $index. - * Returns NULL if none present. - * - * @param string $name - * @param int $index - * - * @return Swift_Mime_Header - */ - public function get($name, $index = 0) - { - $name = strtolower($name); - - if (func_num_args() < 2) { - if ($this->has($name)) { - $values = array_values($this->headers[$name]); - - return array_shift($values); - } - } else { - if ($this->has($name, $index)) { - return $this->headers[$name][$index]; - } - } - } - - /** - * Get all headers with the given $name. - * - * @param string $name - * - * @return array - */ - public function getAll($name = null) - { - if (!isset($name)) { - $headers = []; - foreach ($this->headers as $collection) { - $headers = array_merge($headers, $collection); - } - - return $headers; - } - - $lowerName = strtolower($name); - if (!array_key_exists($lowerName, $this->headers)) { - return []; - } - - return $this->headers[$lowerName]; - } - - /** - * Return the name of all Headers. - * - * @return array - */ - public function listAll() - { - $headers = $this->headers; - if ($this->canSort()) { - uksort($headers, [$this, 'sortHeaders']); - } - - return array_keys($headers); - } - - /** - * Remove the header with the given $name if it's set. - * - * If multiple headers match, the actual one may be specified by $index. - * - * @param string $name - * @param int $index - */ - public function remove($name, $index = 0) - { - $lowerName = strtolower($name); - unset($this->headers[$lowerName][$index]); - } - - /** - * Remove all headers with the given $name. - * - * @param string $name - */ - public function removeAll($name) - { - $lowerName = strtolower($name); - unset($this->headers[$lowerName]); - } - - /** - * Define a list of Header names as an array in the correct order. - * - * These Headers will be output in the given order where present. - */ - public function defineOrdering(array $sequence) - { - $this->order = array_flip(array_map('strtolower', $sequence)); - } - - /** - * Set a list of header names which must always be displayed when set. - * - * Usually headers without a field value won't be output unless set here. - */ - public function setAlwaysDisplayed(array $names) - { - $this->required = array_flip(array_map('strtolower', $names)); - } - - /** - * Notify this observer that the entity's charset has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->setCharset($charset); - } - - /** - * Returns a string with a representation of all headers. - * - * @return string - */ - public function toString() - { - $string = ''; - $headers = $this->headers; - if ($this->canSort()) { - uksort($headers, [$this, 'sortHeaders']); - } - foreach ($headers as $collection) { - foreach ($collection as $header) { - if ($this->isDisplayed($header) || '' != $header->getFieldBody()) { - $string .= $header->toString(); - } - } - } - - return $string; - } - - /** - * Returns a string representation of this object. - * - * @return string - * - * @see toString() - */ - public function __toString() - { - return $this->toString(); - } - - /** Save a Header to the internal collection */ - private function storeHeader($name, Swift_Mime_Header $header, $offset = null) - { - if (!isset($this->headers[strtolower($name)])) { - $this->headers[strtolower($name)] = []; - } - if (!isset($offset)) { - $this->headers[strtolower($name)][] = $header; - } else { - $this->headers[strtolower($name)][$offset] = $header; - } - } - - /** Test if the headers can be sorted */ - private function canSort() - { - return count($this->order) > 0; - } - - /** uksort() algorithm for Header ordering */ - private function sortHeaders($a, $b) - { - $lowerA = strtolower($a); - $lowerB = strtolower($b); - $aPos = array_key_exists($lowerA, $this->order) ? $this->order[$lowerA] : -1; - $bPos = array_key_exists($lowerB, $this->order) ? $this->order[$lowerB] : -1; - - if (-1 === $aPos && -1 === $bPos) { - // just be sure to be determinist here - return $a > $b ? -1 : 1; - } - - if (-1 == $aPos) { - return 1; - } elseif (-1 == $bPos) { - return -1; - } - - return $aPos < $bPos ? -1 : 1; - } - - /** Test if the given Header is always displayed */ - private function isDisplayed(Swift_Mime_Header $header) - { - return array_key_exists(strtolower($header->getFieldName()), $this->required); - } - - /** Notify all Headers of the new charset */ - private function notifyHeadersOfCharset($charset) - { - foreach ($this->headers as $headerGroup) { - foreach ($headerGroup as $header) { - $header->setCharset($charset); - } - } - } - - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->factory = clone $this->factory; - foreach ($this->headers as $groupKey => $headerGroup) { - foreach ($headerGroup as $key => $header) { - $this->headers[$groupKey][$key] = clone $header; - } - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php deleted file mode 100644 index ab32f63..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php +++ /dev/null @@ -1,642 +0,0 @@ -getHeaders()->defineOrdering([ - 'Return-Path', - 'Received', - 'DKIM-Signature', - 'DomainKey-Signature', - 'Sender', - 'Message-ID', - 'Date', - 'Subject', - 'From', - 'Reply-To', - 'To', - 'Cc', - 'Bcc', - 'MIME-Version', - 'Content-Type', - 'Content-Transfer-Encoding', - ]); - $this->getHeaders()->setAlwaysDisplayed(['Date', 'Message-ID', 'From']); - $this->getHeaders()->addTextHeader('MIME-Version', '1.0'); - $this->setDate(new DateTimeImmutable()); - $this->setId($this->getId()); - $this->getHeaders()->addMailboxHeader('From'); - } - - /** - * Always returns {@link LEVEL_TOP} for a message instance. - * - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_TOP; - } - - /** - * Set the subject of this message. - * - * @param string $subject - * - * @return $this - */ - public function setSubject($subject) - { - if (!$this->setHeaderFieldModel('Subject', $subject)) { - $this->getHeaders()->addTextHeader('Subject', $subject); - } - - return $this; - } - - /** - * Get the subject of this message. - * - * @return string - */ - public function getSubject() - { - return $this->getHeaderFieldModel('Subject'); - } - - /** - * Set the date at which this message was created. - * - * @return $this - */ - public function setDate(DateTimeInterface $dateTime) - { - if (!$this->setHeaderFieldModel('Date', $dateTime)) { - $this->getHeaders()->addDateHeader('Date', $dateTime); - } - - return $this; - } - - /** - * Get the date at which this message was created. - * - * @return DateTimeInterface - */ - public function getDate() - { - return $this->getHeaderFieldModel('Date'); - } - - /** - * Set the return-path (the bounce address) of this message. - * - * @param string $address - * - * @return $this - */ - public function setReturnPath($address) - { - if (!$this->setHeaderFieldModel('Return-Path', $address)) { - $this->getHeaders()->addPathHeader('Return-Path', $address); - } - - return $this; - } - - /** - * Get the return-path (bounce address) of this message. - * - * @return string - */ - public function getReturnPath() - { - return $this->getHeaderFieldModel('Return-Path'); - } - - /** - * Set the sender of this message. - * - * This does not override the From field, but it has a higher significance. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function setSender($address, $name = null) - { - if (!is_array($address) && isset($name)) { - $address = [$address => $name]; - } - - if (!$this->setHeaderFieldModel('Sender', (array) $address)) { - $this->getHeaders()->addMailboxHeader('Sender', (array) $address); - } - - return $this; - } - - /** - * Get the sender of this message. - * - * @return string - */ - public function getSender() - { - return $this->getHeaderFieldModel('Sender'); - } - - /** - * Add a From: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addFrom($address, $name = null) - { - $current = $this->getFrom(); - $current[$address] = $name; - - return $this->setFrom($current); - } - - /** - * Set the from address of this message. - * - * You may pass an array of addresses if this message is from multiple people. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param string|array $addresses - * @param string $name optional - * - * @return $this - */ - public function setFrom($addresses, $name = null) - { - if (!is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('From', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('From', (array) $addresses); - } - - return $this; - } - - /** - * Get the from address of this message. - * - * @return mixed - */ - public function getFrom() - { - return $this->getHeaderFieldModel('From'); - } - - /** - * Add a Reply-To: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addReplyTo($address, $name = null) - { - $current = $this->getReplyTo(); - $current[$address] = $name; - - return $this->setReplyTo($current); - } - - /** - * Set the reply-to address of this message. - * - * You may pass an array of addresses if replies will go to multiple people. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setReplyTo($addresses, $name = null) - { - if (!is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('Reply-To', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses); - } - - return $this; - } - - /** - * Get the reply-to address of this message. - * - * @return string - */ - public function getReplyTo() - { - return $this->getHeaderFieldModel('Reply-To'); - } - - /** - * Add a To: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addTo($address, $name = null) - { - $current = $this->getTo(); - $current[$address] = $name; - - return $this->setTo($current); - } - - /** - * Set the to addresses of this message. - * - * If multiple recipients will receive the message an array should be used. - * Example: array('receiver@domain.org', 'other@domain.org' => 'A name') - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setTo($addresses, $name = null) - { - if (!is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('To', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('To', (array) $addresses); - } - - return $this; - } - - /** - * Get the To addresses of this message. - * - * @return array - */ - public function getTo() - { - return $this->getHeaderFieldModel('To'); - } - - /** - * Add a Cc: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addCc($address, $name = null) - { - $current = $this->getCc(); - $current[$address] = $name; - - return $this->setCc($current); - } - - /** - * Set the Cc addresses of this message. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setCc($addresses, $name = null) - { - if (!is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('Cc', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('Cc', (array) $addresses); - } - - return $this; - } - - /** - * Get the Cc address of this message. - * - * @return array - */ - public function getCc() - { - return $this->getHeaderFieldModel('Cc'); - } - - /** - * Add a Bcc: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - * - * @return $this - */ - public function addBcc($address, $name = null) - { - $current = $this->getBcc(); - $current[$address] = $name; - - return $this->setBcc($current); - } - - /** - * Set the Bcc addresses of this message. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param mixed $addresses - * @param string $name optional - * - * @return $this - */ - public function setBcc($addresses, $name = null) - { - if (!is_array($addresses) && isset($name)) { - $addresses = [$addresses => $name]; - } - - if (!$this->setHeaderFieldModel('Bcc', (array) $addresses)) { - $this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses); - } - - return $this; - } - - /** - * Get the Bcc addresses of this message. - * - * @return array - */ - public function getBcc() - { - return $this->getHeaderFieldModel('Bcc'); - } - - /** - * Set the priority of this message. - * - * The value is an integer where 1 is the highest priority and 5 is the lowest. - * - * @param int $priority - * - * @return $this - */ - public function setPriority($priority) - { - $priorityMap = [ - self::PRIORITY_HIGHEST => 'Highest', - self::PRIORITY_HIGH => 'High', - self::PRIORITY_NORMAL => 'Normal', - self::PRIORITY_LOW => 'Low', - self::PRIORITY_LOWEST => 'Lowest', - ]; - $pMapKeys = array_keys($priorityMap); - if ($priority > max($pMapKeys)) { - $priority = max($pMapKeys); - } elseif ($priority < min($pMapKeys)) { - $priority = min($pMapKeys); - } - if (!$this->setHeaderFieldModel('X-Priority', - sprintf('%d (%s)', $priority, $priorityMap[$priority]))) { - $this->getHeaders()->addTextHeader('X-Priority', - sprintf('%d (%s)', $priority, $priorityMap[$priority])); - } - - return $this; - } - - /** - * Get the priority of this message. - * - * The returned value is an integer where 1 is the highest priority and 5 - * is the lowest. - * - * @return int - */ - public function getPriority() - { - list($priority) = sscanf($this->getHeaderFieldModel('X-Priority'), - '%[1-5]' - ); - - return $priority ?? 3; - } - - /** - * Ask for a delivery receipt from the recipient to be sent to $addresses. - * - * @param array $addresses - * - * @return $this - */ - public function setReadReceiptTo($addresses) - { - if (!$this->setHeaderFieldModel('Disposition-Notification-To', $addresses)) { - $this->getHeaders() - ->addMailboxHeader('Disposition-Notification-To', $addresses); - } - - return $this; - } - - /** - * Get the addresses to which a read-receipt will be sent. - * - * @return string - */ - public function getReadReceiptTo() - { - return $this->getHeaderFieldModel('Disposition-Notification-To'); - } - - /** - * Attach a {@link Swift_Mime_SimpleMimeEntity} such as an Attachment or MimePart. - * - * @return $this - */ - public function attach(Swift_Mime_SimpleMimeEntity $entity) - { - $this->setChildren(array_merge($this->getChildren(), [$entity])); - - return $this; - } - - /** - * Remove an already attached entity. - * - * @return $this - */ - public function detach(Swift_Mime_SimpleMimeEntity $entity) - { - $newChildren = []; - foreach ($this->getChildren() as $child) { - if ($entity !== $child) { - $newChildren[] = $child; - } - } - $this->setChildren($newChildren); - - return $this; - } - - /** - * Attach a {@link Swift_Mime_SimpleMimeEntity} and return it's CID source. - * - * This method should be used when embedding images or other data in a message. - * - * @return string - */ - public function embed(Swift_Mime_SimpleMimeEntity $entity) - { - $this->attach($entity); - - return 'cid:'.$entity->getId(); - } - - /** - * Get this message as a complete string. - * - * @return string - */ - public function toString() - { - if (count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { - $this->setChildren(array_merge([$this->becomeMimePart()], $children)); - $string = parent::toString(); - $this->setChildren($children); - } else { - $string = parent::toString(); - } - - return $string; - } - - /** - * Returns a string representation of this object. - * - * @see toString() - * - * @return string - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Write this message to a {@link Swift_InputByteStream}. - */ - public function toByteStream(Swift_InputByteStream $is) - { - if (count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { - $this->setChildren(array_merge([$this->becomeMimePart()], $children)); - parent::toByteStream($is); - $this->setChildren($children); - } else { - parent::toByteStream($is); - } - } - - /** @see Swift_Mime_SimpleMimeEntity::getIdField() */ - protected function getIdField() - { - return 'Message-ID'; - } - - /** Turn the body of this message into a child of itself if needed */ - protected function becomeMimePart() - { - $part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(), - $this->getCache(), $this->getIdGenerator(), $this->userCharset - ); - $part->setContentType($this->userContentType); - $part->setBody($this->getBody()); - $part->setFormat($this->userFormat); - $part->setDelSp($this->userDelSp); - $part->setNestingLevel($this->getTopNestingLevel()); - - return $part; - } - - /** Get the highest nesting level nested inside this message */ - private function getTopNestingLevel() - { - $highestLevel = $this->getNestingLevel(); - foreach ($this->getChildren() as $child) { - $childLevel = $child->getNestingLevel(); - if ($highestLevel < $childLevel) { - $highestLevel = $childLevel; - } - } - - return $highestLevel; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php deleted file mode 100644 index 63dda3d..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php +++ /dev/null @@ -1,820 +0,0 @@ - [self::LEVEL_TOP, self::LEVEL_MIXED], - 'multipart/alternative' => [self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE], - 'multipart/related' => [self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED], - ]; - - /** A set of filter rules to define what level an entity should be nested at */ - private $compoundLevelFilters = []; - - /** The nesting level of this entity */ - private $nestingLevel = self::LEVEL_ALTERNATIVE; - - /** A KeyCache instance used during encoding and streaming */ - private $cache; - - /** Direct descendants of this entity */ - private $immediateChildren = []; - - /** All descendants of this entity */ - private $children = []; - - /** The maximum line length of the body of this entity */ - private $maxLineLength = 78; - - /** The order in which alternative mime types should appear */ - private $alternativePartOrder = [ - 'text/plain' => 1, - 'text/html' => 2, - 'multipart/related' => 3, - ]; - - /** The CID of this entity */ - private $id; - - /** The key used for accessing the cache */ - private $cacheKey; - - protected $userContentType; - - /** - * Create a new SimpleMimeEntity with $headers, $encoder and $cache. - */ - public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator) - { - $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values - $this->cache = $cache; - $this->headers = $headers; - $this->idGenerator = $idGenerator; - $this->setEncoder($encoder); - $this->headers->defineOrdering(['Content-Type', 'Content-Transfer-Encoding']); - - // This array specifies that, when the entire MIME document contains - // $compoundLevel, then for each child within $level, if its Content-Type - // is $contentType then it should be treated as if it's level is - // $neededLevel instead. I tried to write that unambiguously! :-\ - // Data Structure: - // array ( - // $compoundLevel => array( - // $level => array( - // $contentType => $neededLevel - // ) - // ) - // ) - - $this->compoundLevelFilters = [ - (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => [ - self::LEVEL_ALTERNATIVE => [ - 'text/plain' => self::LEVEL_ALTERNATIVE, - 'text/html' => self::LEVEL_RELATED, - ], - ], - ]; - - $this->id = $this->idGenerator->generateId(); - } - - /** - * Generate a new Content-ID or Message-ID for this MIME entity. - * - * @return string - */ - public function generateId() - { - $this->setId($this->idGenerator->generateId()); - - return $this->id; - } - - /** - * Get the {@link Swift_Mime_SimpleHeaderSet} for this entity. - * - * @return Swift_Mime_SimpleHeaderSet - */ - public function getHeaders() - { - return $this->headers; - } - - /** - * Get the nesting level of this entity. - * - * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE - * - * @return int - */ - public function getNestingLevel() - { - return $this->nestingLevel; - } - - /** - * Get the Content-type of this entity. - * - * @return string - */ - public function getContentType() - { - return $this->getHeaderFieldModel('Content-Type'); - } - - /** - * Get the Body Content-type of this entity. - * - * @return string - */ - public function getBodyContentType() - { - return $this->userContentType; - } - - /** - * Set the Content-type of this entity. - * - * @param string $type - * - * @return $this - */ - public function setContentType($type) - { - $this->setContentTypeInHeaders($type); - // Keep track of the value so that if the content-type changes automatically - // due to added child entities, it can be restored if they are later removed - $this->userContentType = $type; - - return $this; - } - - /** - * Get the CID of this entity. - * - * The CID will only be present in headers if a Content-ID header is present. - * - * @return string - */ - public function getId() - { - $tmp = (array) $this->getHeaderFieldModel($this->getIdField()); - - return $this->headers->has($this->getIdField()) ? current($tmp) : $this->id; - } - - /** - * Set the CID of this entity. - * - * @param string $id - * - * @return $this - */ - public function setId($id) - { - if (!$this->setHeaderFieldModel($this->getIdField(), $id)) { - $this->headers->addIdHeader($this->getIdField(), $id); - } - $this->id = $id; - - return $this; - } - - /** - * Get the description of this entity. - * - * This value comes from the Content-Description header if set. - * - * @return string - */ - public function getDescription() - { - return $this->getHeaderFieldModel('Content-Description'); - } - - /** - * Set the description of this entity. - * - * This method sets a value in the Content-ID header. - * - * @param string $description - * - * @return $this - */ - public function setDescription($description) - { - if (!$this->setHeaderFieldModel('Content-Description', $description)) { - $this->headers->addTextHeader('Content-Description', $description); - } - - return $this; - } - - /** - * Get the maximum line length of the body of this entity. - * - * @return int - */ - public function getMaxLineLength() - { - return $this->maxLineLength; - } - - /** - * Set the maximum line length of lines in this body. - * - * Though not enforced by the library, lines should not exceed 1000 chars. - * - * @param int $length - * - * @return $this - */ - public function setMaxLineLength($length) - { - $this->maxLineLength = $length; - - return $this; - } - - /** - * Get all children added to this entity. - * - * @return Swift_Mime_SimpleMimeEntity[] - */ - public function getChildren() - { - return $this->children; - } - - /** - * Set all children of this entity. - * - * @param Swift_Mime_SimpleMimeEntity[] $children - * @param int $compoundLevel For internal use only - * - * @return $this - */ - public function setChildren(array $children, $compoundLevel = null) - { - // TODO: Try to refactor this logic - $compoundLevel = $compoundLevel ?? $this->getCompoundLevel($children); - $immediateChildren = []; - $grandchildren = []; - $newContentType = $this->userContentType; - - foreach ($children as $child) { - $level = $this->getNeededChildLevel($child, $compoundLevel); - if (empty($immediateChildren)) { - //first iteration - $immediateChildren = [$child]; - } else { - $nextLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); - if ($nextLevel == $level) { - $immediateChildren[] = $child; - } elseif ($level < $nextLevel) { - // Re-assign immediateChildren to grandchildren - $grandchildren = array_merge($grandchildren, $immediateChildren); - // Set new children - $immediateChildren = [$child]; - } else { - $grandchildren[] = $child; - } - } - } - - if ($immediateChildren) { - $lowestLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); - - // Determine which composite media type is needed to accommodate the - // immediate children - foreach ($this->compositeRanges as $mediaType => $range) { - if ($lowestLevel > $range[0] && $lowestLevel <= $range[1]) { - $newContentType = $mediaType; - - break; - } - } - - // Put any grandchildren in a subpart - if (!empty($grandchildren)) { - $subentity = $this->createChild(); - $subentity->setNestingLevel($lowestLevel); - $subentity->setChildren($grandchildren, $compoundLevel); - array_unshift($immediateChildren, $subentity); - } - } - - $this->immediateChildren = $immediateChildren; - $this->children = $children; - $this->setContentTypeInHeaders($newContentType); - $this->fixHeaders(); - $this->sortChildren(); - - return $this; - } - - /** - * Get the body of this entity as a string. - * - * @return string - */ - public function getBody() - { - return $this->body instanceof Swift_OutputByteStream ? $this->readStream($this->body) : $this->body; - } - - /** - * Set the body of this entity, either as a string, or as an instance of - * {@link Swift_OutputByteStream}. - * - * @param mixed $body - * @param string $contentType optional - * - * @return $this - */ - public function setBody($body, $contentType = null) - { - if ($body !== $this->body) { - $this->clearCache(); - } - - $this->body = $body; - if (null !== $contentType) { - $this->setContentType($contentType); - } - - return $this; - } - - /** - * Get the encoder used for the body of this entity. - * - * @return Swift_Mime_ContentEncoder - */ - public function getEncoder() - { - return $this->encoder; - } - - /** - * Set the encoder used for the body of this entity. - * - * @return $this - */ - public function setEncoder(Swift_Mime_ContentEncoder $encoder) - { - if ($encoder !== $this->encoder) { - $this->clearCache(); - } - - $this->encoder = $encoder; - $this->setEncoding($encoder->getName()); - $this->notifyEncoderChanged($encoder); - - return $this; - } - - /** - * Get the boundary used to separate children in this entity. - * - * @return string - */ - public function getBoundary() - { - if (!isset($this->boundary)) { - $this->boundary = '_=_swift_'.time().'_'.bin2hex(random_bytes(16)).'_=_'; - } - - return $this->boundary; - } - - /** - * Set the boundary used to separate children in this entity. - * - * @param string $boundary - * - * @throws Swift_RfcComplianceException - * - * @return $this - */ - public function setBoundary($boundary) - { - $this->assertValidBoundary($boundary); - $this->boundary = $boundary; - - return $this; - } - - /** - * Receive notification that the charset of this entity, or a parent entity - * has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->notifyCharsetChanged($charset); - } - - /** - * Receive notification that the encoder of this entity or a parent entity - * has changed. - */ - public function encoderChanged(Swift_Mime_ContentEncoder $encoder) - { - $this->notifyEncoderChanged($encoder); - } - - /** - * Get this entire entity as a string. - * - * @return string - */ - public function toString() - { - $string = $this->headers->toString(); - $string .= $this->bodyToString(); - - return $string; - } - - /** - * Get this entire entity as a string. - * - * @return string - */ - protected function bodyToString() - { - $string = ''; - - if (isset($this->body) && empty($this->immediateChildren)) { - if ($this->cache->hasKey($this->cacheKey, 'body')) { - $body = $this->cache->getString($this->cacheKey, 'body'); - } else { - $body = "\r\n".$this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength()); - $this->cache->setString($this->cacheKey, 'body', $body, Swift_KeyCache::MODE_WRITE); - } - $string .= $body; - } - - if (!empty($this->immediateChildren)) { - foreach ($this->immediateChildren as $child) { - $string .= "\r\n\r\n--".$this->getBoundary()."\r\n"; - $string .= $child->toString(); - } - $string .= "\r\n\r\n--".$this->getBoundary()."--\r\n"; - } - - return $string; - } - - /** - * Returns a string representation of this object. - * - * @see toString() - * - * @return string - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Write this entire entity to a {@see Swift_InputByteStream}. - */ - public function toByteStream(Swift_InputByteStream $is) - { - $is->write($this->headers->toString()); - $is->commit(); - - $this->bodyToByteStream($is); - } - - /** - * Write this entire entity to a {@link Swift_InputByteStream}. - */ - protected function bodyToByteStream(Swift_InputByteStream $is) - { - if (empty($this->immediateChildren)) { - if (isset($this->body)) { - if ($this->cache->hasKey($this->cacheKey, 'body')) { - $this->cache->exportToByteStream($this->cacheKey, 'body', $is); - } else { - $cacheIs = $this->cache->getInputByteStream($this->cacheKey, 'body'); - if ($cacheIs) { - $is->bind($cacheIs); - } - - $is->write("\r\n"); - - if ($this->body instanceof Swift_OutputByteStream) { - $this->body->setReadPointer(0); - - $this->encoder->encodeByteStream($this->body, $is, 0, $this->getMaxLineLength()); - } else { - $is->write($this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength())); - } - - if ($cacheIs) { - $is->unbind($cacheIs); - } - } - } - } - - if (!empty($this->immediateChildren)) { - foreach ($this->immediateChildren as $child) { - $is->write("\r\n\r\n--".$this->getBoundary()."\r\n"); - $child->toByteStream($is); - } - $is->write("\r\n\r\n--".$this->getBoundary()."--\r\n"); - } - } - - /** - * Get the name of the header that provides the ID of this entity. - */ - protected function getIdField() - { - return 'Content-ID'; - } - - /** - * Get the model data (usually an array or a string) for $field. - */ - protected function getHeaderFieldModel($field) - { - if ($this->headers->has($field)) { - return $this->headers->get($field)->getFieldBodyModel(); - } - } - - /** - * Set the model data for $field. - */ - protected function setHeaderFieldModel($field, $model) - { - if ($this->headers->has($field)) { - $this->headers->get($field)->setFieldBodyModel($model); - - return true; - } - - return false; - } - - /** - * Get the parameter value of $parameter on $field header. - */ - protected function getHeaderParameter($field, $parameter) - { - if ($this->headers->has($field)) { - return $this->headers->get($field)->getParameter($parameter); - } - } - - /** - * Set the parameter value of $parameter on $field header. - */ - protected function setHeaderParameter($field, $parameter, $value) - { - if ($this->headers->has($field)) { - $this->headers->get($field)->setParameter($parameter, $value); - - return true; - } - - return false; - } - - /** - * Re-evaluate what content type and encoding should be used on this entity. - */ - protected function fixHeaders() - { - if (count($this->immediateChildren)) { - $this->setHeaderParameter('Content-Type', 'boundary', - $this->getBoundary() - ); - $this->headers->remove('Content-Transfer-Encoding'); - } else { - $this->setHeaderParameter('Content-Type', 'boundary', null); - $this->setEncoding($this->encoder->getName()); - } - } - - /** - * Get the KeyCache used in this entity. - * - * @return Swift_KeyCache - */ - protected function getCache() - { - return $this->cache; - } - - /** - * Get the ID generator. - * - * @return Swift_IdGenerator - */ - protected function getIdGenerator() - { - return $this->idGenerator; - } - - /** - * Empty the KeyCache for this entity. - */ - protected function clearCache() - { - $this->cache->clearKey($this->cacheKey, 'body'); - } - - private function readStream(Swift_OutputByteStream $os) - { - $string = ''; - while (false !== $bytes = $os->read(8192)) { - $string .= $bytes; - } - - $os->setReadPointer(0); - - return $string; - } - - private function setEncoding($encoding) - { - if (!$this->setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) { - $this->headers->addTextHeader('Content-Transfer-Encoding', $encoding); - } - } - - private function assertValidBoundary($boundary) - { - if (!preg_match('/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di', $boundary)) { - throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.'); - } - } - - private function setContentTypeInHeaders($type) - { - if (!$this->setHeaderFieldModel('Content-Type', $type)) { - $this->headers->addParameterizedHeader('Content-Type', $type); - } - } - - private function setNestingLevel($level) - { - $this->nestingLevel = $level; - } - - private function getCompoundLevel($children) - { - $level = 0; - foreach ($children as $child) { - $level |= $child->getNestingLevel(); - } - - return $level; - } - - private function getNeededChildLevel($child, $compoundLevel) - { - $filter = []; - foreach ($this->compoundLevelFilters as $bitmask => $rules) { - if (($compoundLevel & $bitmask) === $bitmask) { - $filter = $rules + $filter; - } - } - - $realLevel = $child->getNestingLevel(); - $lowercaseType = strtolower($child->getContentType()); - - if (isset($filter[$realLevel]) && isset($filter[$realLevel][$lowercaseType])) { - return $filter[$realLevel][$lowercaseType]; - } - - return $realLevel; - } - - private function createChild() - { - return new self($this->headers->newInstance(), $this->encoder, $this->cache, $this->idGenerator); - } - - private function notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder) - { - foreach ($this->immediateChildren as $child) { - $child->encoderChanged($encoder); - } - } - - private function notifyCharsetChanged($charset) - { - $this->encoder->charsetChanged($charset); - $this->headers->charsetChanged($charset); - foreach ($this->immediateChildren as $child) { - $child->charsetChanged($charset); - } - } - - private function sortChildren() - { - $shouldSort = false; - foreach ($this->immediateChildren as $child) { - // NOTE: This include alternative parts moved into a related part - if (self::LEVEL_ALTERNATIVE == $child->getNestingLevel()) { - $shouldSort = true; - break; - } - } - - // Sort in order of preference, if there is one - if ($shouldSort) { - // Group the messages by order of preference - $sorted = []; - foreach ($this->immediateChildren as $child) { - $type = $child->getContentType(); - $level = array_key_exists($type, $this->alternativePartOrder) ? $this->alternativePartOrder[$type] : max($this->alternativePartOrder) + 1; - - if (empty($sorted[$level])) { - $sorted[$level] = []; - } - - $sorted[$level][] = $child; - } - - ksort($sorted); - - $this->immediateChildren = array_reduce($sorted, 'array_merge', []); - } - } - - /** - * Empties it's own contents from the cache. - */ - public function __destruct() - { - if ($this->cache instanceof Swift_KeyCache) { - $this->cache->clearAll($this->cacheKey); - } - } - - /** - * Make a deep copy of object. - */ - public function __clone() - { - $this->headers = clone $this->headers; - $this->encoder = clone $this->encoder; - $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values - $children = []; - foreach ($this->children as $pos => $child) { - $children[$pos] = clone $child; - } - $this->setChildren($children); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php deleted file mode 100644 index 14f8432..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php +++ /dev/null @@ -1,45 +0,0 @@ -createDependenciesFor('mime.part') - ); - - if (!isset($charset)) { - $charset = Swift_DependencyContainer::getInstance() - ->lookup('properties.charset'); - } - $this->setBody($body); - $this->setCharset($charset); - if ($contentType) { - $this->setContentType($contentType); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php deleted file mode 100644 index eefb9a6..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php +++ /dev/null @@ -1,26 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Pretends messages have been sent, but just ignores them. - * - * @author Fabien Potencier - */ -class Swift_NullTransport extends Swift_Transport_NullTransport -{ - public function __construct() - { - call_user_func_array( - [$this, 'Swift_Transport_NullTransport::__construct'], - Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.null') - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/OutputByteStream.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/OutputByteStream.php deleted file mode 100644 index 1f26f9b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/OutputByteStream.php +++ /dev/null @@ -1,46 +0,0 @@ -setThreshold($threshold); - $this->setSleepTime($sleep); - $this->sleeper = $sleeper; - } - - /** - * Set the number of emails to send before restarting. - * - * @param int $threshold - */ - public function setThreshold($threshold) - { - $this->threshold = $threshold; - } - - /** - * Get the number of emails to send before restarting. - * - * @return int - */ - public function getThreshold() - { - return $this->threshold; - } - - /** - * Set the number of seconds to sleep for during a restart. - * - * @param int $sleep time - */ - public function setSleepTime($sleep) - { - $this->sleep = $sleep; - } - - /** - * Get the number of seconds to sleep for during a restart. - * - * @return int - */ - public function getSleepTime() - { - return $this->sleep; - } - - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - } - - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - ++$this->counter; - if ($this->counter >= $this->threshold) { - $transport = $evt->getTransport(); - $transport->stop(); - if ($this->sleep) { - $this->sleep($this->sleep); - } - $transport->start(); - $this->counter = 0; - } - } - - /** - * Sleep for $seconds. - * - * @param int $seconds - */ - public function sleep($seconds) - { - if (isset($this->sleeper)) { - $this->sleeper->sleep($seconds); - } else { - sleep($seconds); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php deleted file mode 100644 index f7a24dd..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php +++ /dev/null @@ -1,154 +0,0 @@ -getMessage(); - $message->toByteStream($this); - } - - /** - * Invoked immediately following a command being sent. - */ - public function commandSent(Swift_Events_CommandEvent $evt) - { - $command = $evt->getCommand(); - $this->out += strlen($command); - } - - /** - * Invoked immediately following a response coming back. - */ - public function responseReceived(Swift_Events_ResponseEvent $evt) - { - $response = $evt->getResponse(); - $this->in += strlen($response); - } - - /** - * Called when a message is sent so that the outgoing counter can be increased. - * - * @param string $bytes - */ - public function write($bytes) - { - $this->out += strlen($bytes); - foreach ($this->mirrors as $stream) { - $stream->write($bytes); - } - } - - /** - * Not used. - */ - public function commit() - { - } - - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - $this->mirrors[] = $is; - } - - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->mirrors as $k => $stream) { - if ($is === $stream) { - unset($this->mirrors[$k]); - } - } - } - - /** - * Not used. - */ - public function flushBuffers() - { - foreach ($this->mirrors as $stream) { - $stream->flushBuffers(); - } - } - - /** - * Get the total number of bytes sent to the server. - * - * @return int - */ - public function getBytesOut() - { - return $this->out; - } - - /** - * Get the total number of bytes received from the server. - * - * @return int - */ - public function getBytesIn() - { - return $this->in; - } - - /** - * Reset the internal counters to zero. - */ - public function reset() - { - $this->out = 0; - $this->in = 0; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php deleted file mode 100644 index 9f9f08b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php +++ /dev/null @@ -1,31 +0,0 @@ - - * $replacements = array( - * "address1@domain.tld" => array("{a}" => "b", "{c}" => "d"), - * "address2@domain.tld" => array("{a}" => "x", "{c}" => "y") - * ) - * - * - * When using an instance of {@link Swift_Plugins_Decorator_Replacements}, - * the object should return just the array of replacements for the address - * given to {@link Swift_Plugins_Decorator_Replacements::getReplacementsFor()}. - * - * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements - */ - public function __construct($replacements) - { - $this->setReplacements($replacements); - } - - /** - * Sets replacements. - * - * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements - * - * @see __construct() - */ - public function setReplacements($replacements) - { - if (!($replacements instanceof Swift_Plugins_Decorator_Replacements)) { - $this->replacements = (array) $replacements; - } else { - $this->replacements = $replacements; - } - } - - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $this->restoreMessage($message); - $to = array_keys($message->getTo()); - $address = array_shift($to); - if ($replacements = $this->getReplacementsFor($address)) { - $body = $message->getBody(); - $search = array_keys($replacements); - $replace = array_values($replacements); - $bodyReplaced = str_replace( - $search, $replace, $body - ); - if ($body != $bodyReplaced) { - $this->originalBody = $body; - $message->setBody($bodyReplaced); - } - - foreach ($message->getHeaders()->getAll() as $header) { - $body = $header->getFieldBodyModel(); - $count = 0; - if (is_array($body)) { - $bodyReplaced = []; - foreach ($body as $key => $value) { - $count1 = 0; - $count2 = 0; - $key = is_string($key) ? str_replace($search, $replace, $key, $count1) : $key; - $value = is_string($value) ? str_replace($search, $replace, $value, $count2) : $value; - $bodyReplaced[$key] = $value; - - if (!$count && ($count1 || $count2)) { - $count = 1; - } - } - } elseif (is_string($body)) { - $bodyReplaced = str_replace($search, $replace, $body, $count); - } - - if ($count) { - $this->originalHeaders[$header->getFieldName()] = $body; - $header->setFieldBodyModel($bodyReplaced); - } - } - - $children = (array) $message->getChildren(); - foreach ($children as $child) { - list($type) = sscanf($child->getContentType(), '%[^/]/%s'); - if ('text' == $type) { - $body = $child->getBody(); - $bodyReplaced = str_replace( - $search, $replace, $body - ); - if ($body != $bodyReplaced) { - $child->setBody($bodyReplaced); - $this->originalChildBodies[$child->getId()] = $body; - } - } - } - $this->lastMessage = $message; - } - } - - /** - * Find a map of replacements for the address. - * - * If this plugin was provided with a delegate instance of - * {@link Swift_Plugins_Decorator_Replacements} then the call will be - * delegated to it. Otherwise, it will attempt to find the replacements - * from the array provided in the constructor. - * - * If no replacements can be found, an empty value (NULL) is returned. - * - * @param string $address - * - * @return array - */ - public function getReplacementsFor($address) - { - if ($this->replacements instanceof Swift_Plugins_Decorator_Replacements) { - return $this->replacements->getReplacementsFor($address); - } - - return $this->replacements[$address] ?? null; - } - - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $this->restoreMessage($evt->getMessage()); - } - - /** Restore a changed message back to its original state */ - private function restoreMessage(Swift_Mime_SimpleMessage $message) - { - if ($this->lastMessage === $message) { - if (isset($this->originalBody)) { - $message->setBody($this->originalBody); - $this->originalBody = null; - } - if (!empty($this->originalHeaders)) { - foreach ($message->getHeaders()->getAll() as $header) { - if (array_key_exists($header->getFieldName(), $this->originalHeaders)) { - $header->setFieldBodyModel($this->originalHeaders[$header->getFieldName()]); - } - } - $this->originalHeaders = []; - } - if (!empty($this->originalChildBodies)) { - $children = (array) $message->getChildren(); - foreach ($children as $child) { - $id = $child->getId(); - if (array_key_exists($id, $this->originalChildBodies)) { - $child->setBody($this->originalChildBodies[$id]); - } - } - $this->originalChildBodies = []; - } - $this->lastMessage = null; - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php deleted file mode 100644 index 3f4dbbf..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php +++ /dev/null @@ -1,65 +0,0 @@ -sender = $sender; - } - - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $headers = $message->getHeaders(); - - // save current recipients - $headers->addPathHeader('X-Swift-Return-Path', $message->getReturnPath()); - - // replace them with the one to send to - $message->setReturnPath($this->sender); - } - - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - - // restore original headers - $headers = $message->getHeaders(); - - if ($headers->has('X-Swift-Return-Path')) { - $message->setReturnPath($headers->get('X-Swift-Return-Path')->getAddress()); - $headers->removeAll('X-Swift-Return-Path'); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Logger.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Logger.php deleted file mode 100644 index d9bce89..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Logger.php +++ /dev/null @@ -1,36 +0,0 @@ -logger = $logger; - } - - /** - * Add a log entry. - * - * @param string $entry - */ - public function add($entry) - { - $this->logger->add($entry); - } - - /** - * Clear the log contents. - */ - public function clear() - { - $this->logger->clear(); - } - - /** - * Get this log as a string. - * - * @return string - */ - public function dump() - { - return $this->logger->dump(); - } - - /** - * Invoked immediately following a command being sent. - */ - public function commandSent(Swift_Events_CommandEvent $evt) - { - $command = $evt->getCommand(); - $this->logger->add(sprintf('>> %s', $command)); - } - - /** - * Invoked immediately following a response coming back. - */ - public function responseReceived(Swift_Events_ResponseEvent $evt) - { - $response = $evt->getResponse(); - $this->logger->add(sprintf('<< %s', $response)); - } - - /** - * Invoked just before a Transport is started. - */ - public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) - { - $transportName = get_class($evt->getSource()); - $this->logger->add(sprintf('++ Starting %s', $transportName)); - } - - /** - * Invoked immediately after the Transport is started. - */ - public function transportStarted(Swift_Events_TransportChangeEvent $evt) - { - $transportName = get_class($evt->getSource()); - $this->logger->add(sprintf('++ %s started', $transportName)); - } - - /** - * Invoked just before a Transport is stopped. - */ - public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) - { - $transportName = get_class($evt->getSource()); - $this->logger->add(sprintf('++ Stopping %s', $transportName)); - } - - /** - * Invoked immediately after the Transport is stopped. - */ - public function transportStopped(Swift_Events_TransportChangeEvent $evt) - { - $transportName = get_class($evt->getSource()); - $this->logger->add(sprintf('++ %s stopped', $transportName)); - } - - /** - * Invoked as a TransportException is thrown in the Transport system. - */ - public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt) - { - $e = $evt->getException(); - $message = $e->getMessage(); - $code = $e->getCode(); - $this->logger->add(sprintf('!! %s (code: %s)', $message, $code)); - $message .= PHP_EOL; - $message .= 'Log data:'.PHP_EOL; - $message .= $this->logger->dump(); - $evt->cancelBubble(); - throw new Swift_TransportException($message, $code, $e->getPrevious()); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php deleted file mode 100644 index b00bcaa..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php +++ /dev/null @@ -1,72 +0,0 @@ -size = $size; - } - - /** - * Add a log entry. - * - * @param string $entry - */ - public function add($entry) - { - $this->log[] = $entry; - while (count($this->log) > $this->size) { - array_shift($this->log); - } - } - - /** - * Clear the log contents. - */ - public function clear() - { - $this->log = []; - } - - /** - * Get this log as a string. - * - * @return string - */ - public function dump() - { - return implode(PHP_EOL, $this->log); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php deleted file mode 100644 index 40a53d2..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php +++ /dev/null @@ -1,58 +0,0 @@ -isHtml = $isHtml; - } - - /** - * Add a log entry. - * - * @param string $entry - */ - public function add($entry) - { - if ($this->isHtml) { - printf('%s%s%s', htmlspecialchars($entry, ENT_QUOTES), '
', PHP_EOL); - } else { - printf('%s%s', $entry, PHP_EOL); - } - } - - /** - * Not implemented. - */ - public function clear() - { - } - - /** - * Not implemented. - */ - public function dump() - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php deleted file mode 100644 index 3b4de80..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php +++ /dev/null @@ -1,70 +0,0 @@ -messages = []; - } - - /** - * Get the message list. - * - * @return Swift_Mime_SimpleMessage[] - */ - public function getMessages() - { - return $this->messages; - } - - /** - * Get the message count. - * - * @return int count - */ - public function countMessages() - { - return count($this->messages); - } - - /** - * Empty the message list. - */ - public function clear() - { - $this->messages = []; - } - - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $this->messages[] = clone $evt->getMessage(); - } - - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php deleted file mode 100644 index fb99e4c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php +++ /dev/null @@ -1,31 +0,0 @@ -host = $host; - $this->port = $port; - $this->crypto = $crypto; - } - - /** - * Set a Pop3Connection to delegate to instead of connecting directly. - * - * @return $this - */ - public function setConnection(Swift_Plugins_Pop_Pop3Connection $connection) - { - $this->connection = $connection; - - return $this; - } - - /** - * Bind this plugin to a specific SMTP transport instance. - */ - public function bindSmtp(Swift_Transport $smtp) - { - $this->transport = $smtp; - } - - /** - * Set the connection timeout in seconds (default 10). - * - * @param int $timeout - * - * @return $this - */ - public function setTimeout($timeout) - { - $this->timeout = (int) $timeout; - - return $this; - } - - /** - * Set the username to use when connecting (if needed). - * - * @param string $username - * - * @return $this - */ - public function setUsername($username) - { - $this->username = $username; - - return $this; - } - - /** - * Set the password to use when connecting (if needed). - * - * @param string $password - * - * @return $this - */ - public function setPassword($password) - { - $this->password = $password; - - return $this; - } - - /** - * Connect to the POP3 host and authenticate. - * - * @throws Swift_Plugins_Pop_Pop3Exception if connection fails - */ - public function connect() - { - if (isset($this->connection)) { - $this->connection->connect(); - } else { - if (!isset($this->socket)) { - if (!$socket = fsockopen( - $this->getHostString(), $this->port, $errno, $errstr, $this->timeout)) { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('Failed to connect to POP3 host [%s]: %s', $this->host, $errstr) - ); - } - $this->socket = $socket; - - if (false === $greeting = fgets($this->socket)) { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('Failed to connect to POP3 host [%s]', trim($greeting)) - ); - } - - $this->assertOk($greeting); - - if ($this->username) { - $this->command(sprintf("USER %s\r\n", $this->username)); - $this->command(sprintf("PASS %s\r\n", $this->password)); - } - } - } - } - - /** - * Disconnect from the POP3 host. - */ - public function disconnect() - { - if (isset($this->connection)) { - $this->connection->disconnect(); - } else { - $this->command("QUIT\r\n"); - if (!fclose($this->socket)) { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('POP3 host [%s] connection could not be stopped', $this->host) - ); - } - $this->socket = null; - } - } - - /** - * Invoked just before a Transport is started. - */ - public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) - { - if (isset($this->transport)) { - if ($this->transport !== $evt->getTransport()) { - return; - } - } - - $this->connect(); - $this->disconnect(); - } - - /** - * Not used. - */ - public function transportStarted(Swift_Events_TransportChangeEvent $evt) - { - } - - /** - * Not used. - */ - public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) - { - } - - /** - * Not used. - */ - public function transportStopped(Swift_Events_TransportChangeEvent $evt) - { - } - - private function command($command) - { - if (!fwrite($this->socket, $command)) { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('Failed to write command [%s] to POP3 host', trim($command)) - ); - } - - if (false === $response = fgets($this->socket)) { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('Failed to read from POP3 host after command [%s]', trim($command)) - ); - } - - $this->assertOk($response); - - return $response; - } - - private function assertOk($response) - { - if ('+OK' != substr($response, 0, 3)) { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('POP3 command failed [%s]', trim($response)) - ); - } - } - - private function getHostString() - { - $host = $this->host; - switch (strtolower($this->crypto)) { - case 'ssl': - $host = 'ssl://'.$host; - break; - - case 'tls': - $host = 'tls://'.$host; - break; - } - - return $host; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php deleted file mode 100644 index b0cb519..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php +++ /dev/null @@ -1,201 +0,0 @@ -recipient = $recipient; - $this->whitelist = $whitelist; - } - - /** - * Set the recipient of all messages. - * - * @param mixed $recipient - */ - public function setRecipient($recipient) - { - $this->recipient = $recipient; - } - - /** - * Get the recipient of all messages. - * - * @return mixed - */ - public function getRecipient() - { - return $this->recipient; - } - - /** - * Set a list of regular expressions to whitelist certain recipients. - */ - public function setWhitelist(array $whitelist) - { - $this->whitelist = $whitelist; - } - - /** - * Get the whitelist. - * - * @return array - */ - public function getWhitelist() - { - return $this->whitelist; - } - - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $headers = $message->getHeaders(); - - // conditionally save current recipients - - if ($headers->has('to')) { - $headers->addMailboxHeader('X-Swift-To', $message->getTo()); - } - - if ($headers->has('cc')) { - $headers->addMailboxHeader('X-Swift-Cc', $message->getCc()); - } - - if ($headers->has('bcc')) { - $headers->addMailboxHeader('X-Swift-Bcc', $message->getBcc()); - } - - // Filter remaining headers against whitelist - $this->filterHeaderSet($headers, 'To'); - $this->filterHeaderSet($headers, 'Cc'); - $this->filterHeaderSet($headers, 'Bcc'); - - // Add each hard coded recipient - $to = $message->getTo(); - if (null === $to) { - $to = []; - } - - foreach ((array) $this->recipient as $recipient) { - if (!array_key_exists($recipient, $to)) { - $message->addTo($recipient); - } - } - } - - /** - * Filter header set against a whitelist of regular expressions. - * - * @param string $type - */ - private function filterHeaderSet(Swift_Mime_SimpleHeaderSet $headerSet, $type) - { - foreach ($headerSet->getAll($type) as $headers) { - $headers->setNameAddresses($this->filterNameAddresses($headers->getNameAddresses())); - } - } - - /** - * Filtered list of addresses => name pairs. - * - * @return array - */ - private function filterNameAddresses(array $recipients) - { - $filtered = []; - - foreach ($recipients as $address => $name) { - if ($this->isWhitelisted($address)) { - $filtered[$address] = $name; - } - } - - return $filtered; - } - - /** - * Matches address against whitelist of regular expressions. - * - * @return bool - */ - protected function isWhitelisted($recipient) - { - if (in_array($recipient, (array) $this->recipient)) { - return true; - } - - foreach ($this->whitelist as $pattern) { - if (preg_match($pattern, $recipient)) { - return true; - } - } - - return false; - } - - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $this->restoreMessage($evt->getMessage()); - } - - private function restoreMessage(Swift_Mime_SimpleMessage $message) - { - // restore original headers - $headers = $message->getHeaders(); - - if ($headers->has('X-Swift-To')) { - $message->setTo($headers->get('X-Swift-To')->getNameAddresses()); - $headers->removeAll('X-Swift-To'); - } else { - $message->setTo(null); - } - - if ($headers->has('X-Swift-Cc')) { - $message->setCc($headers->get('X-Swift-Cc')->getNameAddresses()); - $headers->removeAll('X-Swift-Cc'); - } - - if ($headers->has('X-Swift-Bcc')) { - $message->setBcc($headers->get('X-Swift-Bcc')->getNameAddresses()); - $headers->removeAll('X-Swift-Bcc'); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporter.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporter.php deleted file mode 100644 index 3a2b665..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporter.php +++ /dev/null @@ -1,32 +0,0 @@ -reporter = $reporter; - } - - /** - * Not used. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - } - - /** - * Invoked immediately after the Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $failures = array_flip($evt->getFailedRecipients()); - foreach ((array) $message->getTo() as $address => $null) { - $this->reporter->notify($message, $address, (array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); - } - foreach ((array) $message->getCc() as $address => $null) { - $this->reporter->notify($message, $address, (array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); - } - foreach ((array) $message->getBcc() as $address => $null) { - $this->reporter->notify($message, $address, (array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php deleted file mode 100644 index 249cffb..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php +++ /dev/null @@ -1,58 +0,0 @@ -failures_cache[$address])) { - $this->failures[] = $address; - $this->failures_cache[$address] = true; - } - } - - /** - * Get an array of addresses for which delivery failed. - * - * @return array - */ - public function getFailedRecipients() - { - return $this->failures; - } - - /** - * Clear the buffer (empty the list). - */ - public function clear() - { - $this->failures = $this->failures_cache = []; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php deleted file mode 100644 index 1cfc3f9..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php +++ /dev/null @@ -1,38 +0,0 @@ -'.PHP_EOL; - echo 'PASS '.$address.PHP_EOL; - echo ''.PHP_EOL; - flush(); - } else { - echo '
'.PHP_EOL; - echo 'FAIL '.$address.PHP_EOL; - echo '
'.PHP_EOL; - flush(); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php deleted file mode 100644 index 595c0f6..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php +++ /dev/null @@ -1,24 +0,0 @@ -rate = $rate; - $this->mode = $mode; - $this->sleeper = $sleeper; - $this->timer = $timer; - } - - /** - * Invoked immediately before the Message is sent. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $time = $this->getTimestamp(); - if (!isset($this->start)) { - $this->start = $time; - } - $duration = $time - $this->start; - - switch ($this->mode) { - case self::BYTES_PER_MINUTE: - $sleep = $this->throttleBytesPerMinute($duration); - break; - case self::MESSAGES_PER_SECOND: - $sleep = $this->throttleMessagesPerSecond($duration); - break; - case self::MESSAGES_PER_MINUTE: - $sleep = $this->throttleMessagesPerMinute($duration); - break; - default: - $sleep = 0; - break; - } - - if ($sleep > 0) { - $this->sleep($sleep); - } - } - - /** - * Invoked when a Message is sent. - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - parent::sendPerformed($evt); - ++$this->messages; - } - - /** - * Sleep for $seconds. - * - * @param int $seconds - */ - public function sleep($seconds) - { - if (isset($this->sleeper)) { - $this->sleeper->sleep($seconds); - } else { - sleep($seconds); - } - } - - /** - * Get the current UNIX timestamp. - * - * @return int - */ - public function getTimestamp() - { - if (isset($this->timer)) { - return $this->timer->getTimestamp(); - } - - return time(); - } - - /** - * Get a number of seconds to sleep for. - * - * @param int $timePassed - * - * @return int - */ - private function throttleBytesPerMinute($timePassed) - { - $expectedDuration = $this->getBytesOut() / ($this->rate / 60); - - return (int) ceil($expectedDuration - $timePassed); - } - - /** - * Get a number of seconds to sleep for. - * - * @param int $timePassed - * - * @return int - */ - private function throttleMessagesPerSecond($timePassed) - { - $expectedDuration = $this->messages / $this->rate; - - return (int) ceil($expectedDuration - $timePassed); - } - - /** - * Get a number of seconds to sleep for. - * - * @param int $timePassed - * - * @return int - */ - private function throttleMessagesPerMinute($timePassed) - { - $expectedDuration = $this->messages / ($this->rate / 60); - - return (int) ceil($expectedDuration - $timePassed); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Timer.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Timer.php deleted file mode 100644 index 9c8deb3..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Timer.php +++ /dev/null @@ -1,24 +0,0 @@ -register('properties.charset')->asValue($charset); - - return $this; - } - - /** - * Set the directory where temporary files can be saved. - * - * @param string $dir - * - * @return $this - */ - public function setTempDir($dir) - { - Swift_DependencyContainer::getInstance()->register('tempdir')->asValue($dir); - - return $this; - } - - /** - * Set the type of cache to use (i.e. "disk" or "array"). - * - * @param string $type - * - * @return $this - */ - public function setCacheType($type) - { - Swift_DependencyContainer::getInstance()->register('cache')->asAliasOf(sprintf('cache.%s', $type)); - - return $this; - } - - /** - * Set the QuotedPrintable dot escaper preference. - * - * @param bool $dotEscape - * - * @return $this - */ - public function setQPDotEscape($dotEscape) - { - $dotEscape = !empty($dotEscape); - Swift_DependencyContainer::getInstance() - ->register('mime.qpcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') - ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) - ->addConstructorValue($dotEscape); - - return $this; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php deleted file mode 100644 index 2897474..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php +++ /dev/null @@ -1,27 +0,0 @@ -createDependenciesFor('transport.sendmail') - ); - - $this->setCommand($command); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signer.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signer.php deleted file mode 100644 index 26c5e28..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signer.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ -interface Swift_Signer -{ - public function reset(); -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/BodySigner.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/BodySigner.php deleted file mode 100644 index 8e66e18..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/BodySigner.php +++ /dev/null @@ -1,33 +0,0 @@ - - */ -interface Swift_Signers_BodySigner extends Swift_Signer -{ - /** - * Change the Swift_Signed_Message to apply the singing. - * - * @param Swift_Message $message - * - * @return self - */ - public function signMessage(Swift_Message $message); - - /** - * Return the list of header a signer might tamper. - * - * @return array - */ - public function getAlteredHeaders(); -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php deleted file mode 100644 index 7f1bf4a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php +++ /dev/null @@ -1,682 +0,0 @@ - - */ -class Swift_Signers_DKIMSigner implements Swift_Signers_HeaderSigner -{ - /** - * PrivateKey. - * - * @var string - */ - protected $privateKey; - - /** - * DomainName. - * - * @var string - */ - protected $domainName; - - /** - * Selector. - * - * @var string - */ - protected $selector; - - private $passphrase = ''; - - /** - * Hash algorithm used. - * - * @see RFC6376 3.3: Signers MUST implement and SHOULD sign using rsa-sha256. - * - * @var string - */ - protected $hashAlgorithm = 'rsa-sha256'; - - /** - * Body canon method. - * - * @var string - */ - protected $bodyCanon = 'simple'; - - /** - * Header canon method. - * - * @var string - */ - protected $headerCanon = 'simple'; - - /** - * Headers not being signed. - * - * @var array - */ - protected $ignoredHeaders = ['return-path' => true]; - - /** - * Signer identity. - * - * @var string - */ - protected $signerIdentity; - - /** - * BodyLength. - * - * @var int - */ - protected $bodyLen = 0; - - /** - * Maximum signedLen. - * - * @var int - */ - protected $maxLen = PHP_INT_MAX; - - /** - * Embbed bodyLen in signature. - * - * @var bool - */ - protected $showLen = false; - - /** - * When the signature has been applied (true means time()), false means not embedded. - * - * @var mixed - */ - protected $signatureTimestamp = true; - - /** - * When will the signature expires false means not embedded, if sigTimestamp is auto - * Expiration is relative, otherwise it's absolute. - * - * @var int - */ - protected $signatureExpiration = false; - - /** - * Must we embed signed headers? - * - * @var bool - */ - protected $debugHeaders = false; - - // work variables - /** - * Headers used to generate hash. - * - * @var array - */ - protected $signedHeaders = []; - - /** - * If debugHeaders is set store debugData here. - * - * @var string[] - */ - private $debugHeadersData = []; - - /** - * Stores the bodyHash. - * - * @var string - */ - private $bodyHash = ''; - - /** - * Stores the signature header. - * - * @var Swift_Mime_Headers_ParameterizedHeader - */ - protected $dkimHeader; - - private $bodyHashHandler; - - private $headerHash; - - private $headerCanonData = ''; - - private $bodyCanonEmptyCounter = 0; - - private $bodyCanonIgnoreStart = 2; - - private $bodyCanonSpace = false; - - private $bodyCanonLastChar = null; - - private $bodyCanonLine = ''; - - private $bound = []; - - /** - * Constructor. - * - * @param string $privateKey - * @param string $domainName - * @param string $selector - * @param string $passphrase - */ - public function __construct($privateKey, $domainName, $selector, $passphrase = '') - { - $this->privateKey = $privateKey; - $this->domainName = $domainName; - $this->signerIdentity = '@'.$domainName; - $this->selector = $selector; - $this->passphrase = $passphrase; - } - - /** - * Reset the Signer. - * - * @see Swift_Signer::reset() - */ - public function reset() - { - $this->headerHash = null; - $this->signedHeaders = []; - $this->bodyHash = null; - $this->bodyHashHandler = null; - $this->bodyCanonIgnoreStart = 2; - $this->bodyCanonEmptyCounter = 0; - $this->bodyCanonLastChar = null; - $this->bodyCanonSpace = false; - } - - /** - * Writes $bytes to the end of the stream. - * - * Writing may not happen immediately if the stream chooses to buffer. If - * you want to write these bytes with immediate effect, call {@link commit()} - * after calling write(). - * - * This method returns the sequence ID of the write (i.e. 1 for first, 2 for - * second, etc etc). - * - * @param string $bytes - * - * @return int - * - * @throws Swift_IoException - */ - // TODO fix return - public function write($bytes) - { - $this->canonicalizeBody($bytes); - foreach ($this->bound as $is) { - $is->write($bytes); - } - } - - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - */ - public function commit() - { - // Nothing to do - return; - } - - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - */ - public function bind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - $this->bound[] = $is; - - return; - } - - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - */ - public function unbind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - foreach ($this->bound as $k => $stream) { - if ($stream === $is) { - unset($this->bound[$k]); - - return; - } - } - } - - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - */ - public function flushBuffers() - { - $this->reset(); - } - - /** - * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1. - * - * @param string $hash 'rsa-sha1' or 'rsa-sha256' - * - * @throws Swift_SwiftException - * - * @return $this - */ - public function setHashAlgorithm($hash) - { - switch ($hash) { - case 'rsa-sha1': - $this->hashAlgorithm = 'rsa-sha1'; - break; - case 'rsa-sha256': - $this->hashAlgorithm = 'rsa-sha256'; - if (!defined('OPENSSL_ALGO_SHA256')) { - throw new Swift_SwiftException('Unable to set sha256 as it is not supported by OpenSSL.'); - } - break; - default: - throw new Swift_SwiftException('Unable to set the hash algorithm, must be one of rsa-sha1 or rsa-sha256 (%s given).', $hash); - } - - return $this; - } - - /** - * Set the body canonicalization algorithm. - * - * @param string $canon - * - * @return $this - */ - public function setBodyCanon($canon) - { - if ('relaxed' == $canon) { - $this->bodyCanon = 'relaxed'; - } else { - $this->bodyCanon = 'simple'; - } - - return $this; - } - - /** - * Set the header canonicalization algorithm. - * - * @param string $canon - * - * @return $this - */ - public function setHeaderCanon($canon) - { - if ('relaxed' == $canon) { - $this->headerCanon = 'relaxed'; - } else { - $this->headerCanon = 'simple'; - } - - return $this; - } - - /** - * Set the signer identity. - * - * @param string $identity - * - * @return $this - */ - public function setSignerIdentity($identity) - { - $this->signerIdentity = $identity; - - return $this; - } - - /** - * Set the length of the body to sign. - * - * @param mixed $len (bool or int) - * - * @return $this - */ - public function setBodySignedLen($len) - { - if (true === $len) { - $this->showLen = true; - $this->maxLen = PHP_INT_MAX; - } elseif (false === $len) { - $this->showLen = false; - $this->maxLen = PHP_INT_MAX; - } else { - $this->showLen = true; - $this->maxLen = (int) $len; - } - - return $this; - } - - /** - * Set the signature timestamp. - * - * @param int $time A timestamp - * - * @return $this - */ - public function setSignatureTimestamp($time) - { - $this->signatureTimestamp = $time; - - return $this; - } - - /** - * Set the signature expiration timestamp. - * - * @param int $time A timestamp - * - * @return $this - */ - public function setSignatureExpiration($time) - { - $this->signatureExpiration = $time; - - return $this; - } - - /** - * Enable / disable the DebugHeaders. - * - * @param bool $debug - * - * @return Swift_Signers_DKIMSigner - */ - public function setDebugHeaders($debug) - { - $this->debugHeaders = (bool) $debug; - - return $this; - } - - /** - * Start Body. - */ - public function startBody() - { - // Init - switch ($this->hashAlgorithm) { - case 'rsa-sha256': - $this->bodyHashHandler = hash_init('sha256'); - break; - case 'rsa-sha1': - $this->bodyHashHandler = hash_init('sha1'); - break; - } - $this->bodyCanonLine = ''; - } - - /** - * End Body. - */ - public function endBody() - { - $this->endOfBody(); - } - - /** - * Returns the list of Headers Tampered by this plugin. - * - * @return array - */ - public function getAlteredHeaders() - { - if ($this->debugHeaders) { - return ['DKIM-Signature', 'X-DebugHash']; - } else { - return ['DKIM-Signature']; - } - } - - /** - * Adds an ignored Header. - * - * @param string $header_name - * - * @return Swift_Signers_DKIMSigner - */ - public function ignoreHeader($header_name) - { - $this->ignoredHeaders[strtolower($header_name)] = true; - - return $this; - } - - /** - * Set the headers to sign. - * - * @return Swift_Signers_DKIMSigner - */ - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) - { - $this->headerCanonData = ''; - // Loop through Headers - $listHeaders = $headers->listAll(); - foreach ($listHeaders as $hName) { - // Check if we need to ignore Header - if (!isset($this->ignoredHeaders[strtolower($hName)])) { - if ($headers->has($hName)) { - $tmp = $headers->getAll($hName); - foreach ($tmp as $header) { - if ('' != $header->getFieldBody()) { - $this->addHeader($header->toString()); - $this->signedHeaders[] = $header->getFieldName(); - } - } - } - } - } - - return $this; - } - - /** - * Add the signature to the given Headers. - * - * @return Swift_Signers_DKIMSigner - */ - public function addSignature(Swift_Mime_SimpleHeaderSet $headers) - { - // Prepare the DKIM-Signature - $params = ['v' => '1', 'a' => $this->hashAlgorithm, 'bh' => base64_encode($this->bodyHash), 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'i' => $this->signerIdentity, 's' => $this->selector]; - if ('simple' != $this->bodyCanon) { - $params['c'] = $this->headerCanon.'/'.$this->bodyCanon; - } elseif ('simple' != $this->headerCanon) { - $params['c'] = $this->headerCanon; - } - if ($this->showLen) { - $params['l'] = $this->bodyLen; - } - if (true === $this->signatureTimestamp) { - $params['t'] = time(); - if (false !== $this->signatureExpiration) { - $params['x'] = $params['t'] + $this->signatureExpiration; - } - } else { - if (false !== $this->signatureTimestamp) { - $params['t'] = $this->signatureTimestamp; - } - if (false !== $this->signatureExpiration) { - $params['x'] = $this->signatureExpiration; - } - } - if ($this->debugHeaders) { - $params['z'] = implode('|', $this->debugHeadersData); - } - $string = ''; - foreach ($params as $k => $v) { - $string .= $k.'='.$v.'; '; - } - $string = trim($string); - $headers->addTextHeader('DKIM-Signature', $string); - // Add the last DKIM-Signature - $tmp = $headers->getAll('DKIM-Signature'); - $this->dkimHeader = end($tmp); - $this->addHeader(trim($this->dkimHeader->toString())."\r\n b=", true); - if ($this->debugHeaders) { - $headers->addTextHeader('X-DebugHash', base64_encode($this->headerHash)); - } - $this->dkimHeader->setValue($string.' b='.trim(chunk_split(base64_encode($this->getEncryptedHash()), 73, ' '))); - - return $this; - } - - /* Private helpers */ - - protected function addHeader($header, $is_sig = false) - { - switch ($this->headerCanon) { - case 'relaxed': - // Prepare Header and cascade - $exploded = explode(':', $header, 2); - $name = strtolower(trim($exploded[0])); - $value = str_replace("\r\n", '', $exploded[1]); - $value = preg_replace("/[ \t][ \t]+/", ' ', $value); - $header = $name.':'.trim($value).($is_sig ? '' : "\r\n"); - // no break - case 'simple': - // Nothing to do - } - $this->addToHeaderHash($header); - } - - protected function canonicalizeBody($string) - { - $len = strlen($string); - $canon = ''; - $method = ('relaxed' == $this->bodyCanon); - for ($i = 0; $i < $len; ++$i) { - if ($this->bodyCanonIgnoreStart > 0) { - --$this->bodyCanonIgnoreStart; - continue; - } - switch ($string[$i]) { - case "\r": - $this->bodyCanonLastChar = "\r"; - break; - case "\n": - if ("\r" == $this->bodyCanonLastChar) { - if ($method) { - $this->bodyCanonSpace = false; - } - if ('' == $this->bodyCanonLine) { - ++$this->bodyCanonEmptyCounter; - } else { - $this->bodyCanonLine = ''; - $canon .= "\r\n"; - } - } else { - // Wooops Error - // todo handle it but should never happen - } - break; - case ' ': - case "\t": - if ($method) { - $this->bodyCanonSpace = true; - break; - } - // no break - default: - if ($this->bodyCanonEmptyCounter > 0) { - $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); - $this->bodyCanonEmptyCounter = 0; - } - if ($this->bodyCanonSpace) { - $this->bodyCanonLine .= ' '; - $canon .= ' '; - $this->bodyCanonSpace = false; - } - $this->bodyCanonLine .= $string[$i]; - $canon .= $string[$i]; - } - } - $this->addToBodyHash($canon); - } - - protected function endOfBody() - { - // Add trailing Line return if last line is non empty - if (strlen($this->bodyCanonLine) > 0) { - $this->addToBodyHash("\r\n"); - } - $this->bodyHash = hash_final($this->bodyHashHandler, true); - } - - private function addToBodyHash($string) - { - $len = strlen($string); - if ($len > ($new_len = ($this->maxLen - $this->bodyLen))) { - $string = substr($string, 0, $new_len); - $len = $new_len; - } - hash_update($this->bodyHashHandler, $string); - $this->bodyLen += $len; - } - - private function addToHeaderHash($header) - { - if ($this->debugHeaders) { - $this->debugHeadersData[] = trim($header); - } - $this->headerCanonData .= $header; - } - - /** - * @throws Swift_SwiftException - * - * @return string - */ - private function getEncryptedHash() - { - $signature = ''; - switch ($this->hashAlgorithm) { - case 'rsa-sha1': - $algorithm = OPENSSL_ALGO_SHA1; - break; - case 'rsa-sha256': - $algorithm = OPENSSL_ALGO_SHA256; - break; - } - $pkeyId = openssl_get_privatekey($this->privateKey, $this->passphrase); - if (!$pkeyId) { - throw new Swift_SwiftException('Unable to load DKIM Private Key ['.openssl_error_string().']'); - } - if (openssl_sign($this->headerCanonData, $signature, $pkeyId, $algorithm)) { - return $signature; - } - throw new Swift_SwiftException('Unable to sign DKIM Hash ['.openssl_error_string().']'); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php deleted file mode 100644 index a24d203..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php +++ /dev/null @@ -1,504 +0,0 @@ - - */ -class Swift_Signers_DomainKeySigner implements Swift_Signers_HeaderSigner -{ - /** - * PrivateKey. - * - * @var string - */ - protected $privateKey; - - /** - * DomainName. - * - * @var string - */ - protected $domainName; - - /** - * Selector. - * - * @var string - */ - protected $selector; - - /** - * Hash algorithm used. - * - * @var string - */ - protected $hashAlgorithm = 'rsa-sha1'; - - /** - * Canonisation method. - * - * @var string - */ - protected $canon = 'simple'; - - /** - * Headers not being signed. - * - * @var array - */ - protected $ignoredHeaders = []; - - /** - * Signer identity. - * - * @var string - */ - protected $signerIdentity; - - /** - * Must we embed signed headers? - * - * @var bool - */ - protected $debugHeaders = false; - - // work variables - /** - * Headers used to generate hash. - * - * @var array - */ - private $signedHeaders = []; - - /** - * Stores the signature header. - * - * @var Swift_Mime_Headers_ParameterizedHeader - */ - protected $domainKeyHeader; - - /** - * Hash Handler. - * - * @var resource|null - */ - private $hashHandler; - - private $canonData = ''; - - private $bodyCanonEmptyCounter = 0; - - private $bodyCanonIgnoreStart = 2; - - private $bodyCanonSpace = false; - - private $bodyCanonLastChar = null; - - private $bodyCanonLine = ''; - - private $bound = []; - - /** - * Constructor. - * - * @param string $privateKey - * @param string $domainName - * @param string $selector - */ - public function __construct($privateKey, $domainName, $selector) - { - $this->privateKey = $privateKey; - $this->domainName = $domainName; - $this->signerIdentity = '@'.$domainName; - $this->selector = $selector; - } - - /** - * Resets internal states. - * - * @return $this - */ - public function reset() - { - $this->hashHandler = null; - $this->bodyCanonIgnoreStart = 2; - $this->bodyCanonEmptyCounter = 0; - $this->bodyCanonLastChar = null; - $this->bodyCanonSpace = false; - - return $this; - } - - /** - * Writes $bytes to the end of the stream. - * - * Writing may not happen immediately if the stream chooses to buffer. If - * you want to write these bytes with immediate effect, call {@link commit()} - * after calling write(). - * - * This method returns the sequence ID of the write (i.e. 1 for first, 2 for - * second, etc etc). - * - * @param string $bytes - * - * @return int - * - * @throws Swift_IoException - * - * @return $this - */ - public function write($bytes) - { - $this->canonicalizeBody($bytes); - foreach ($this->bound as $is) { - $is->write($bytes); - } - - return $this; - } - - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - * - * @throws Swift_IoException - * - * @return $this - */ - public function commit() - { - // Nothing to do - return $this; - } - - /** - * Attach $is to this stream. - * - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @return $this - */ - public function bind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - $this->bound[] = $is; - - return $this; - } - - /** - * Remove an already bound stream. - * - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - * - * @return $this - */ - public function unbind(Swift_InputByteStream $is) - { - // Don't have to mirror anything - foreach ($this->bound as $k => $stream) { - if ($stream === $is) { - unset($this->bound[$k]); - - break; - } - } - - return $this; - } - - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * - * @throws Swift_IoException - * - * @return $this - */ - public function flushBuffers() - { - $this->reset(); - - return $this; - } - - /** - * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1 defaults to rsa-sha256. - * - * @param string $hash - * - * @return $this - */ - public function setHashAlgorithm($hash) - { - $this->hashAlgorithm = 'rsa-sha1'; - - return $this; - } - - /** - * Set the canonicalization algorithm. - * - * @param string $canon simple | nofws defaults to simple - * - * @return $this - */ - public function setCanon($canon) - { - if ('nofws' == $canon) { - $this->canon = 'nofws'; - } else { - $this->canon = 'simple'; - } - - return $this; - } - - /** - * Set the signer identity. - * - * @param string $identity - * - * @return $this - */ - public function setSignerIdentity($identity) - { - $this->signerIdentity = $identity; - - return $this; - } - - /** - * Enable / disable the DebugHeaders. - * - * @param bool $debug - * - * @return $this - */ - public function setDebugHeaders($debug) - { - $this->debugHeaders = (bool) $debug; - - return $this; - } - - /** - * Start Body. - */ - public function startBody() - { - } - - /** - * End Body. - */ - public function endBody() - { - $this->endOfBody(); - } - - /** - * Returns the list of Headers Tampered by this plugin. - * - * @return array - */ - public function getAlteredHeaders() - { - if ($this->debugHeaders) { - return ['DomainKey-Signature', 'X-DebugHash']; - } - - return ['DomainKey-Signature']; - } - - /** - * Adds an ignored Header. - * - * @param string $header_name - * - * @return $this - */ - public function ignoreHeader($header_name) - { - $this->ignoredHeaders[strtolower($header_name)] = true; - - return $this; - } - - /** - * Set the headers to sign. - * - * @return $this - */ - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) - { - $this->startHash(); - $this->canonData = ''; - // Loop through Headers - $listHeaders = $headers->listAll(); - foreach ($listHeaders as $hName) { - // Check if we need to ignore Header - if (!isset($this->ignoredHeaders[strtolower($hName)])) { - if ($headers->has($hName)) { - $tmp = $headers->getAll($hName); - foreach ($tmp as $header) { - if ('' != $header->getFieldBody()) { - $this->addHeader($header->toString()); - $this->signedHeaders[] = $header->getFieldName(); - } - } - } - } - } - $this->endOfHeaders(); - - return $this; - } - - /** - * Add the signature to the given Headers. - * - * @return $this - */ - public function addSignature(Swift_Mime_SimpleHeaderSet $headers) - { - // Prepare the DomainKey-Signature Header - $params = ['a' => $this->hashAlgorithm, 'b' => chunk_split(base64_encode($this->getEncryptedHash()), 73, ' '), 'c' => $this->canon, 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'q' => 'dns', 's' => $this->selector]; - $string = ''; - foreach ($params as $k => $v) { - $string .= $k.'='.$v.'; '; - } - $string = trim($string); - $headers->addTextHeader('DomainKey-Signature', $string); - - return $this; - } - - /* Private helpers */ - - protected function addHeader($header) - { - switch ($this->canon) { - case 'nofws': - // Prepare Header and cascade - $exploded = explode(':', $header, 2); - $name = strtolower(trim($exploded[0])); - $value = str_replace("\r\n", '', $exploded[1]); - $value = preg_replace("/[ \t][ \t]+/", ' ', $value); - $header = $name.':'.trim($value)."\r\n"; - // no break - case 'simple': - // Nothing to do - } - $this->addToHash($header); - } - - protected function endOfHeaders() - { - $this->bodyCanonEmptyCounter = 1; - } - - protected function canonicalizeBody($string) - { - $len = strlen($string); - $canon = ''; - $nofws = ('nofws' == $this->canon); - for ($i = 0; $i < $len; ++$i) { - if ($this->bodyCanonIgnoreStart > 0) { - --$this->bodyCanonIgnoreStart; - continue; - } - switch ($string[$i]) { - case "\r": - $this->bodyCanonLastChar = "\r"; - break; - case "\n": - if ("\r" == $this->bodyCanonLastChar) { - if ($nofws) { - $this->bodyCanonSpace = false; - } - if ('' == $this->bodyCanonLine) { - ++$this->bodyCanonEmptyCounter; - } else { - $this->bodyCanonLine = ''; - $canon .= "\r\n"; - } - } else { - // Wooops Error - throw new Swift_SwiftException('Invalid new line sequence in mail found \n without preceding \r'); - } - break; - case ' ': - case "\t": - case "\x09": //HTAB - if ($nofws) { - $this->bodyCanonSpace = true; - break; - } - // no break - default: - if ($this->bodyCanonEmptyCounter > 0) { - $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); - $this->bodyCanonEmptyCounter = 0; - } - $this->bodyCanonLine .= $string[$i]; - $canon .= $string[$i]; - } - } - $this->addToHash($canon); - } - - protected function endOfBody() - { - if (strlen($this->bodyCanonLine) > 0) { - $this->addToHash("\r\n"); - } - } - - private function addToHash($string) - { - $this->canonData .= $string; - hash_update($this->hashHandler, $string); - } - - private function startHash() - { - // Init - switch ($this->hashAlgorithm) { - case 'rsa-sha1': - $this->hashHandler = hash_init('sha1'); - break; - } - $this->bodyCanonLine = ''; - } - - /** - * @throws Swift_SwiftException - * - * @return string - */ - private function getEncryptedHash() - { - $signature = ''; - $pkeyId = openssl_get_privatekey($this->privateKey); - if (!$pkeyId) { - throw new Swift_SwiftException('Unable to load DomainKey Private Key ['.openssl_error_string().']'); - } - if (openssl_sign($this->canonData, $signature, $pkeyId, OPENSSL_ALGO_SHA1)) { - return $signature; - } - throw new Swift_SwiftException('Unable to sign DomainKey Hash ['.openssl_error_string().']'); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php deleted file mode 100644 index 6104e34..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php +++ /dev/null @@ -1,65 +0,0 @@ - - */ -interface Swift_Signers_HeaderSigner extends Swift_Signer, Swift_InputByteStream -{ - /** - * Exclude an header from the signed headers. - * - * @param string $header_name - * - * @return self - */ - public function ignoreHeader($header_name); - - /** - * Prepare the Signer to get a new Body. - * - * @return self - */ - public function startBody(); - - /** - * Give the signal that the body has finished streaming. - * - * @return self - */ - public function endBody(); - - /** - * Give the headers already given. - * - * @param Swift_Mime_SimpleHeaderSet $headers - * - * @return self - */ - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers); - - /** - * Add the header(s) to the headerSet. - * - * @param Swift_Mime_SimpleHeaderSet $headers - * - * @return self - */ - public function addSignature(Swift_Mime_SimpleHeaderSet $headers); - - /** - * Return the list of header a signer might tamper. - * - * @return array - */ - public function getAlteredHeaders(); -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php deleted file mode 100644 index 7b50c51..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php +++ /dev/null @@ -1,183 +0,0 @@ - - * - * @deprecated since SwiftMailer 6.1.0; use Swift_Signers_DKIMSigner instead. - */ -class Swift_Signers_OpenDKIMSigner extends Swift_Signers_DKIMSigner -{ - private $peclLoaded = false; - - private $dkimHandler = null; - - private $dropFirstLF = true; - - const CANON_RELAXED = 1; - const CANON_SIMPLE = 2; - const SIG_RSA_SHA1 = 3; - const SIG_RSA_SHA256 = 4; - - public function __construct($privateKey, $domainName, $selector) - { - if (!extension_loaded('opendkim')) { - throw new Swift_SwiftException('php-opendkim extension not found'); - } - - $this->peclLoaded = true; - - parent::__construct($privateKey, $domainName, $selector); - } - - public function addSignature(Swift_Mime_SimpleHeaderSet $headers) - { - $header = new Swift_Mime_Headers_OpenDKIMHeader('DKIM-Signature'); - $headerVal = $this->dkimHandler->getSignatureHeader(); - if (false === $headerVal || is_int($headerVal)) { - throw new Swift_SwiftException('OpenDKIM Error: '.$this->dkimHandler->getError()); - } - $header->setValue($headerVal); - $headers->set($header); - - return $this; - } - - public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) - { - $hash = 'rsa-sha1' == $this->hashAlgorithm ? OpenDKIMSign::ALG_RSASHA1 : OpenDKIMSign::ALG_RSASHA256; - $bodyCanon = 'simple' == $this->bodyCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; - $headerCanon = 'simple' == $this->headerCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; - $this->dkimHandler = new OpenDKIMSign($this->privateKey, $this->selector, $this->domainName, $headerCanon, $bodyCanon, $hash, -1); - // Hardcode signature Margin for now - $this->dkimHandler->setMargin(78); - - if (!is_numeric($this->signatureTimestamp)) { - OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, time()); - } else { - if (!OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, $this->signatureTimestamp)) { - throw new Swift_SwiftException('Unable to force signature timestamp ['.openssl_error_string().']'); - } - } - if (isset($this->signerIdentity)) { - $this->dkimHandler->setSigner($this->signerIdentity); - } - $listHeaders = $headers->listAll(); - foreach ($listHeaders as $hName) { - // Check if we need to ignore Header - if (!isset($this->ignoredHeaders[strtolower($hName)])) { - $tmp = $headers->getAll($hName); - if ($headers->has($hName)) { - foreach ($tmp as $header) { - if ('' != $header->getFieldBody()) { - $htosign = $header->toString(); - $this->dkimHandler->header($htosign); - $this->signedHeaders[] = $header->getFieldName(); - } - } - } - } - } - - return $this; - } - - public function startBody() - { - if (!$this->peclLoaded) { - return parent::startBody(); - } - $this->dropFirstLF = true; - $this->dkimHandler->eoh(); - - return $this; - } - - public function endBody() - { - if (!$this->peclLoaded) { - return parent::endBody(); - } - $this->dkimHandler->eom(); - - return $this; - } - - public function reset() - { - $this->dkimHandler = null; - parent::reset(); - - return $this; - } - - /** - * Set the signature timestamp. - * - * @param int $time - * - * @return $this - */ - public function setSignatureTimestamp($time) - { - $this->signatureTimestamp = $time; - - return $this; - } - - /** - * Set the signature expiration timestamp. - * - * @param int $time - * - * @return $this - */ - public function setSignatureExpiration($time) - { - $this->signatureExpiration = $time; - - return $this; - } - - /** - * Enable / disable the DebugHeaders. - * - * @param bool $debug - * - * @return $this - */ - public function setDebugHeaders($debug) - { - $this->debugHeaders = (bool) $debug; - - return $this; - } - - // Protected - - protected function canonicalizeBody($string) - { - if (!$this->peclLoaded) { - return parent::canonicalizeBody($string); - } - if (true === $this->dropFirstLF) { - if ("\r" == $string[0] && "\n" == $string[1]) { - $string = substr($string, 2); - } - } - $this->dropFirstLF = false; - if (strlen($string)) { - $this->dkimHandler->body($string); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php deleted file mode 100644 index 84c53ed..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php +++ /dev/null @@ -1,542 +0,0 @@ - - * @author Jan Flora - */ -class Swift_Signers_SMimeSigner implements Swift_Signers_BodySigner -{ - protected $signCertificate; - protected $signPrivateKey; - protected $encryptCert; - protected $signThenEncrypt = true; - protected $signLevel; - protected $encryptLevel; - protected $signOptions; - protected $encryptOptions; - protected $encryptCipher; - protected $extraCerts = null; - protected $wrapFullMessage = false; - - /** - * @var Swift_StreamFilters_StringReplacementFilterFactory - */ - protected $replacementFactory; - - /** - * @var Swift_Mime_SimpleHeaderFactory - */ - protected $headerFactory; - - /** - * Constructor. - * - * @param string|null $signCertificate - * @param string|null $signPrivateKey - * @param string|null $encryptCertificate - */ - public function __construct($signCertificate = null, $signPrivateKey = null, $encryptCertificate = null) - { - if (null !== $signPrivateKey) { - $this->setSignCertificate($signCertificate, $signPrivateKey); - } - - if (null !== $encryptCertificate) { - $this->setEncryptCertificate($encryptCertificate); - } - - $this->replacementFactory = Swift_DependencyContainer::getInstance() - ->lookup('transport.replacementfactory'); - - $this->signOptions = PKCS7_DETACHED; - $this->encryptCipher = OPENSSL_CIPHER_AES_128_CBC; - } - - /** - * Set the certificate location to use for signing. - * - * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php - * - * @param string $certificate - * @param string|array $privateKey If the key needs an passphrase use array('file-location', 'passphrase') instead - * @param int $signOptions Bitwise operator options for openssl_pkcs7_sign() - * @param string $extraCerts A file containing intermediate certificates needed by the signing certificate - * - * @return $this - */ - public function setSignCertificate($certificate, $privateKey = null, $signOptions = PKCS7_DETACHED, $extraCerts = null) - { - $this->signCertificate = 'file://'.str_replace('\\', '/', realpath($certificate)); - - if (null !== $privateKey) { - if (is_array($privateKey)) { - $this->signPrivateKey = $privateKey; - $this->signPrivateKey[0] = 'file://'.str_replace('\\', '/', realpath($privateKey[0])); - } else { - $this->signPrivateKey = 'file://'.str_replace('\\', '/', realpath($privateKey)); - } - } - - $this->signOptions = $signOptions; - $this->extraCerts = $extraCerts ? realpath($extraCerts) : null; - - return $this; - } - - /** - * Set the certificate location to use for encryption. - * - * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php - * @see https://secure.php.net/manual/en/openssl.ciphers.php - * - * @param string|array $recipientCerts Either an single X.509 certificate, or an assoc array of X.509 certificates. - * @param int $cipher - * - * @return $this - */ - public function setEncryptCertificate($recipientCerts, $cipher = null) - { - if (is_array($recipientCerts)) { - $this->encryptCert = []; - - foreach ($recipientCerts as $cert) { - $this->encryptCert[] = 'file://'.str_replace('\\', '/', realpath($cert)); - } - } else { - $this->encryptCert = 'file://'.str_replace('\\', '/', realpath($recipientCerts)); - } - - if (null !== $cipher) { - $this->encryptCipher = $cipher; - } - - return $this; - } - - /** - * @return string - */ - public function getSignCertificate() - { - return $this->signCertificate; - } - - /** - * @return string - */ - public function getSignPrivateKey() - { - return $this->signPrivateKey; - } - - /** - * Set perform signing before encryption. - * - * The default is to first sign the message and then encrypt. - * But some older mail clients, namely Microsoft Outlook 2000 will work when the message first encrypted. - * As this goes against the official specs, its recommended to only use 'encryption -> signing' when specifically targeting these 'broken' clients. - * - * @param bool $signThenEncrypt - * - * @return $this - */ - public function setSignThenEncrypt($signThenEncrypt = true) - { - $this->signThenEncrypt = $signThenEncrypt; - - return $this; - } - - /** - * @return bool - */ - public function isSignThenEncrypt() - { - return $this->signThenEncrypt; - } - - /** - * Resets internal states. - * - * @return $this - */ - public function reset() - { - return $this; - } - - /** - * Specify whether to wrap the entire MIME message in the S/MIME message. - * - * According to RFC5751 section 3.1: - * In order to protect outer, non-content-related message header fields - * (for instance, the "Subject", "To", "From", and "Cc" fields), the - * sending client MAY wrap a full MIME message in a message/rfc822 - * wrapper in order to apply S/MIME security services to these header - * fields. It is up to the receiving client to decide how to present - * this "inner" header along with the unprotected "outer" header. - * - * @param bool $wrap - * - * @return $this - */ - public function setWrapFullMessage($wrap) - { - $this->wrapFullMessage = $wrap; - } - - /** - * Change the Swift_Message to apply the signing. - * - * @return $this - */ - public function signMessage(Swift_Message $message) - { - if (null === $this->signCertificate && null === $this->encryptCert) { - return $this; - } - - if ($this->signThenEncrypt) { - $this->smimeSignMessage($message); - $this->smimeEncryptMessage($message); - } else { - $this->smimeEncryptMessage($message); - $this->smimeSignMessage($message); - } - } - - /** - * Return the list of header a signer might tamper. - * - * @return array - */ - public function getAlteredHeaders() - { - return ['Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition']; - } - - /** - * Sign a Swift message. - */ - protected function smimeSignMessage(Swift_Message $message) - { - // If we don't have a certificate we can't sign the message - if (null === $this->signCertificate) { - return; - } - - // Work on a clone of the original message - $signMessage = clone $message; - $signMessage->clearSigners(); - - if ($this->wrapFullMessage) { - // The original message essentially becomes the body of the new - // wrapped message - $signMessage = $this->wrapMimeMessage($signMessage); - } else { - // Only keep header needed to parse the body correctly - $this->clearAllHeaders($signMessage); - $this->copyHeaders( - $message, - $signMessage, - [ - 'Content-Type', - 'Content-Transfer-Encoding', - 'Content-Disposition', - ] - ); - } - - // Copy the cloned message into a temporary file stream - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $signMessage->toByteStream($messageStream); - $messageStream->commit(); - $signedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - // Sign the message using openssl - if (!openssl_pkcs7_sign( - $messageStream->getPath(), - $signedMessageStream->getPath(), - $this->signCertificate, - $this->signPrivateKey, - [], - $this->signOptions, - $this->extraCerts - ) - ) { - throw new Swift_IoException(sprintf('Failed to sign S/Mime message. Error: "%s".', openssl_error_string())); - } - - // Parse the resulting signed message content back into the Swift message - // preserving the original headers - $this->parseSSLOutput($signedMessageStream, $message); - } - - /** - * Encrypt a Swift message. - */ - protected function smimeEncryptMessage(Swift_Message $message) - { - // If we don't have a certificate we can't encrypt the message - if (null === $this->encryptCert) { - return; - } - - // Work on a clone of the original message - $encryptMessage = clone $message; - $encryptMessage->clearSigners(); - - if ($this->wrapFullMessage) { - // The original message essentially becomes the body of the new - // wrapped message - $encryptMessage = $this->wrapMimeMessage($encryptMessage); - } else { - // Only keep header needed to parse the body correctly - $this->clearAllHeaders($encryptMessage); - $this->copyHeaders( - $message, - $encryptMessage, - [ - 'Content-Type', - 'Content-Transfer-Encoding', - 'Content-Disposition', - ] - ); - } - - // Convert the message content (including headers) to a string - // and place it in a temporary file - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $encryptMessage->toByteStream($messageStream); - $messageStream->commit(); - $encryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - // Encrypt the message - if (!openssl_pkcs7_encrypt( - $messageStream->getPath(), - $encryptedMessageStream->getPath(), - $this->encryptCert, - [], - 0, - $this->encryptCipher - ) - ) { - throw new Swift_IoException(sprintf('Failed to encrypt S/Mime message. Error: "%s".', openssl_error_string())); - } - - // Parse the resulting signed message content back into the Swift message - // preserving the original headers - $this->parseSSLOutput($encryptedMessageStream, $message); - } - - /** - * Copy named headers from one Swift message to another. - */ - protected function copyHeaders( - Swift_Message $fromMessage, - Swift_Message $toMessage, - array $headers = [] - ) { - foreach ($headers as $header) { - $this->copyHeader($fromMessage, $toMessage, $header); - } - } - - /** - * Copy a single header from one Swift message to another. - * - * @param string $headerName - */ - protected function copyHeader(Swift_Message $fromMessage, Swift_Message $toMessage, $headerName) - { - $header = $fromMessage->getHeaders()->get($headerName); - if (!$header) { - return; - } - $headers = $toMessage->getHeaders(); - switch ($header->getFieldType()) { - case Swift_Mime_Header::TYPE_TEXT: - $headers->addTextHeader($header->getFieldName(), $header->getValue()); - break; - case Swift_Mime_Header::TYPE_PARAMETERIZED: - $headers->addParameterizedHeader( - $header->getFieldName(), - $header->getValue(), - $header->getParameters() - ); - break; - } - } - - /** - * Remove all headers from a Swift message. - */ - protected function clearAllHeaders(Swift_Message $message) - { - $headers = $message->getHeaders(); - foreach ($headers->listAll() as $header) { - $headers->removeAll($header); - } - } - - /** - * Wraps a Swift_Message in a message/rfc822 MIME part. - * - * @return Swift_MimePart - */ - protected function wrapMimeMessage(Swift_Message $message) - { - // Start by copying the original message into a message stream - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - // Create a new MIME part that wraps the original stream - $wrappedMessage = new Swift_MimePart($messageStream, 'message/rfc822'); - $wrappedMessage->setEncoder(new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit')); - - return $wrappedMessage; - } - - protected function parseSSLOutput(Swift_InputByteStream $inputStream, Swift_Message $message) - { - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $this->copyFromOpenSSLOutput($inputStream, $messageStream); - - $this->streamToMime($messageStream, $message); - } - - /** - * Merges an OutputByteStream from OpenSSL to a Swift_Message. - */ - protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Message $message) - { - // Parse the stream into headers and body - list($headers, $messageStream) = $this->parseStream($fromStream); - - // Get the original message headers - $messageHeaders = $message->getHeaders(); - - // Let the stream determine the headers describing the body content, - // since the body of the original message is overwritten by the body - // coming from the stream. - // These are all content-* headers. - - // Default transfer encoding is 7bit if not set - $encoding = ''; - // Remove all existing transfer encoding headers - $messageHeaders->removeAll('Content-Transfer-Encoding'); - // See whether the stream sets the transfer encoding - if (isset($headers['content-transfer-encoding'])) { - $encoding = $headers['content-transfer-encoding']; - } - - // We use the null content encoder, since the body is already encoded - // according to the transfer encoding specified in the stream - $message->setEncoder(new Swift_Mime_ContentEncoder_NullContentEncoder($encoding)); - - // Set the disposition, if present - if (isset($headers['content-disposition'])) { - $messageHeaders->addTextHeader('Content-Disposition', $headers['content-disposition']); - } - - // Copy over the body from the stream using the content type dictated - // by the stream content - $message->setChildren([]); - $message->setBody($messageStream, $headers['content-type']); - } - - /** - * This message will parse the headers of a MIME email byte stream - * and return an array that contains the headers as an associative - * array and the email body as a string. - * - * @return array - */ - protected function parseStream(Swift_OutputByteStream $emailStream) - { - $bufferLength = 78; - $headerData = ''; - $headerBodySeparator = "\r\n\r\n"; - - $emailStream->setReadPointer(0); - - // Read out the headers section from the stream to a string - while (false !== ($buffer = $emailStream->read($bufferLength))) { - $headerData .= $buffer; - - $headersPosEnd = strpos($headerData, $headerBodySeparator); - - // Stop reading if we found the end of the headers - if (false !== $headersPosEnd) { - break; - } - } - - // Split the header data into lines - $headerData = trim(substr($headerData, 0, $headersPosEnd)); - $headerLines = explode("\r\n", $headerData); - unset($headerData); - - $headers = []; - $currentHeaderName = ''; - - // Transform header lines into an associative array - foreach ($headerLines as $headerLine) { - // Handle headers that span multiple lines - if (false === strpos($headerLine, ':')) { - $headers[$currentHeaderName] .= ' '.trim($headerLine); - continue; - } - - $header = explode(':', $headerLine, 2); - $currentHeaderName = strtolower($header[0]); - $headers[$currentHeaderName] = trim($header[1]); - } - - // Read the entire email body into a byte stream - $bodyStream = new Swift_ByteStream_TemporaryFileByteStream(); - - // Skip the header and separator and point to the body - $emailStream->setReadPointer($headersPosEnd + strlen($headerBodySeparator)); - - while (false !== ($buffer = $emailStream->read($bufferLength))) { - $bodyStream->write($buffer); - } - - $bodyStream->commit(); - - return [$headers, $bodyStream]; - } - - protected function copyFromOpenSSLOutput(Swift_OutputByteStream $fromStream, Swift_InputByteStream $toStream) - { - $bufferLength = 4096; - $filteredStream = new Swift_ByteStream_TemporaryFileByteStream(); - $filteredStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); - $filteredStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); - - while (false !== ($buffer = $fromStream->read($bufferLength))) { - $filteredStream->write($buffer); - } - - $filteredStream->flushBuffers(); - - while (false !== ($buffer = $filteredStream->read($bufferLength))) { - $toStream->write($buffer); - } - - $toStream->commit(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php deleted file mode 100644 index e241e67..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php +++ /dev/null @@ -1,42 +0,0 @@ -createDependenciesFor('transport.smtp') - ); - - $this->setHost($host); - $this->setPort($port); - $this->setEncryption($encryption); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Spool.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Spool.php deleted file mode 100644 index 9d0e8fe..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Spool.php +++ /dev/null @@ -1,53 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Interface for spools. - * - * @author Fabien Potencier - */ -interface Swift_Spool -{ - /** - * Starts this Spool mechanism. - */ - public function start(); - - /** - * Stops this Spool mechanism. - */ - public function stop(); - - /** - * Tests if this Spool mechanism has started. - * - * @return bool - */ - public function isStarted(); - - /** - * Queues a message. - * - * @param Swift_Mime_SimpleMessage $message The message to store - * - * @return bool Whether the operation has succeeded - */ - public function queueMessage(Swift_Mime_SimpleMessage $message); - - /** - * Sends messages using the given transport instance. - * - * @param Swift_Transport $transport A transport instance - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent emails - */ - public function flushQueue(Swift_Transport $transport, &$failedRecipients = null); -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SpoolTransport.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SpoolTransport.php deleted file mode 100644 index 4b30f04..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SpoolTransport.php +++ /dev/null @@ -1,33 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Stores Messages in a queue. - * - * @author Fabien Potencier - */ -class Swift_SpoolTransport extends Swift_Transport_SpoolTransport -{ - /** - * Create a new SpoolTransport. - */ - public function __construct(Swift_Spool $spool) - { - $arguments = Swift_DependencyContainer::getInstance() - ->createDependenciesFor('transport.spool'); - - $arguments[] = $spool; - - call_user_func_array( - [$this, 'Swift_Transport_SpoolTransport::__construct'], - $arguments - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilter.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilter.php deleted file mode 100644 index 362be2e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilter.php +++ /dev/null @@ -1,35 +0,0 @@ -index = []; - $this->tree = []; - $this->replace = []; - $this->repSize = []; - - $tree = null; - $i = null; - $last_size = $size = 0; - foreach ($search as $i => $search_element) { - if (null !== $tree) { - $tree[-1] = min(count($replace) - 1, $i - 1); - $tree[-2] = $last_size; - } - $tree = &$this->tree; - if (is_array($search_element)) { - foreach ($search_element as $k => $char) { - $this->index[$char] = true; - if (!isset($tree[$char])) { - $tree[$char] = []; - } - $tree = &$tree[$char]; - } - $last_size = $k + 1; - $size = max($size, $last_size); - } else { - $last_size = 1; - if (!isset($tree[$search_element])) { - $tree[$search_element] = []; - } - $tree = &$tree[$search_element]; - $size = max($last_size, $size); - $this->index[$search_element] = true; - } - } - if (null !== $i) { - $tree[-1] = min(count($replace) - 1, $i); - $tree[-2] = $last_size; - $this->treeMaxLen = $size; - } - foreach ($replace as $rep) { - if (!is_array($rep)) { - $rep = [$rep]; - } - $this->replace[] = $rep; - } - for ($i = count($this->replace) - 1; $i >= 0; --$i) { - $this->replace[$i] = $rep = $this->filter($this->replace[$i], $i); - $this->repSize[$i] = count($rep); - } - } - - /** - * Returns true if based on the buffer passed more bytes should be buffered. - * - * @param array $buffer - * - * @return bool - */ - public function shouldBuffer($buffer) - { - $endOfBuffer = end($buffer); - - return isset($this->index[$endOfBuffer]); - } - - /** - * Perform the actual replacements on $buffer and return the result. - * - * @param array $buffer - * @param int $minReplaces - * - * @return array - */ - public function filter($buffer, $minReplaces = -1) - { - if (0 == $this->treeMaxLen) { - return $buffer; - } - - $newBuffer = []; - $buf_size = count($buffer); - $last_size = 0; - for ($i = 0; $i < $buf_size; ++$i) { - $search_pos = $this->tree; - $last_found = PHP_INT_MAX; - // We try to find if the next byte is part of a search pattern - for ($j = 0; $j <= $this->treeMaxLen; ++$j) { - // We have a new byte for a search pattern - if (isset($buffer[$p = $i + $j]) && isset($search_pos[$buffer[$p]])) { - $search_pos = $search_pos[$buffer[$p]]; - // We have a complete pattern, save, in case we don't find a better match later - if (isset($search_pos[-1]) && $search_pos[-1] < $last_found - && $search_pos[-1] > $minReplaces) { - $last_found = $search_pos[-1]; - $last_size = $search_pos[-2]; - } - } - // We got a complete pattern - elseif (PHP_INT_MAX !== $last_found) { - // Adding replacement datas to output buffer - $rep_size = $this->repSize[$last_found]; - for ($j = 0; $j < $rep_size; ++$j) { - $newBuffer[] = $this->replace[$last_found][$j]; - } - // We Move cursor forward - $i += $last_size - 1; - // Edge Case, last position in buffer - if ($i >= $buf_size) { - $newBuffer[] = $buffer[$i]; - } - - // We start the next loop - continue 2; - } else { - // this byte is not in a pattern and we haven't found another pattern - break; - } - } - // Normal byte, move it to output buffer - $newBuffer[] = $buffer[$i]; - } - - return $newBuffer; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php deleted file mode 100644 index 50a63f1..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php +++ /dev/null @@ -1,70 +0,0 @@ -search = $search; - $this->replace = $replace; - } - - /** - * Returns true if based on the buffer passed more bytes should be buffered. - * - * @param string $buffer - * - * @return bool - */ - public function shouldBuffer($buffer) - { - if ('' === $buffer) { - return false; - } - - $endOfBuffer = substr($buffer, -1); - foreach ((array) $this->search as $needle) { - if (false !== strpos($needle, $endOfBuffer)) { - return true; - } - } - - return false; - } - - /** - * Perform the actual replacements on $buffer and return the result. - * - * @param string $buffer - * - * @return string - */ - public function filter($buffer) - { - return str_replace($this->search, $this->replace, $buffer); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php deleted file mode 100644 index 783b889..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php +++ /dev/null @@ -1,45 +0,0 @@ -filters[$search][$replace])) { - if (!isset($this->filters[$search])) { - $this->filters[$search] = []; - } - - if (!isset($this->filters[$search][$replace])) { - $this->filters[$search][$replace] = []; - } - - $this->filters[$search][$replace] = new Swift_StreamFilters_StringReplacementFilter($search, $replace); - } - - return $this->filters[$search][$replace]; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SwiftException.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SwiftException.php deleted file mode 100644 index 15e68b1..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SwiftException.php +++ /dev/null @@ -1,28 +0,0 @@ -ping()) { - * $transport->stop(); - * $transport->start(); - * } - * - * The Transport mechanism will be started, if it is not already. - * - * It is undefined if the Transport mechanism attempts to restart as long as - * the return value reflects whether the mechanism is now functional. - * - * @return bool TRUE if the transport is alive - */ - public function ping(); - - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * This is the responsibility of the send method to start the transport if needed. - * - * @param Swift_Mime_SimpleMessage $message - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null); - - /** - * Register a plugin in the Transport. - * - * @param Swift_Events_EventListener $plugin - */ - public function registerPlugin(Swift_Events_EventListener $plugin); -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php deleted file mode 100644 index 18c8d9b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php +++ /dev/null @@ -1,543 +0,0 @@ -buffer = $buf; - $this->eventDispatcher = $dispatcher; - $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - $this->setLocalDomain($localDomain); - } - - /** - * Set the name of the local domain which Swift will identify itself as. - * - * This should be a fully-qualified domain name and should be truly the domain - * you're using. - * - * If your server does not have a domain name, use the IP address. This will - * automatically be wrapped in square brackets as described in RFC 5321, - * section 4.1.3. - * - * @param string $domain - * - * @return $this - */ - public function setLocalDomain($domain) - { - if ('[' !== substr($domain, 0, 1)) { - if (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { - $domain = '['.$domain.']'; - } elseif (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { - $domain = '[IPv6:'.$domain.']'; - } - } - - $this->domain = $domain; - - return $this; - } - - /** - * Get the name of the domain Swift will identify as. - * - * If an IP address was specified, this will be returned wrapped in square - * brackets as described in RFC 5321, section 4.1.3. - * - * @return string - */ - public function getLocalDomain() - { - return $this->domain; - } - - /** - * Sets the source IP. - * - * @param string $source - */ - public function setSourceIp($source) - { - $this->sourceIp = $source; - } - - /** - * Returns the IP used to connect to the destination. - * - * @return string - */ - public function getSourceIp() - { - return $this->sourceIp; - } - - public function setAddressEncoder(Swift_AddressEncoder $addressEncoder) - { - $this->addressEncoder = $addressEncoder; - } - - public function getAddressEncoder() - { - return $this->addressEncoder; - } - - /** - * Start the SMTP connection. - */ - public function start() - { - if (!$this->started) { - if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStarted'); - if ($evt->bubbleCancelled()) { - return; - } - } - - try { - $this->buffer->initialize($this->getBufferParams()); - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - $this->readGreeting(); - $this->doHeloCommand(); - - if ($evt) { - $this->eventDispatcher->dispatchEvent($evt, 'transportStarted'); - } - - $this->started = true; - } - } - - /** - * Test if an SMTP connection has been established. - * - * @return bool - */ - public function isStarted() - { - return $this->started; - } - - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - if (!$this->isStarted()) { - $this->start(); - } - - $sent = 0; - $failedRecipients = (array) $failedRecipients; - - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } - - if (!$reversePath = $this->getReversePath($message)) { - $this->throwException(new Swift_TransportException('Cannot send message without a sender address')); - } - - $to = (array) $message->getTo(); - $cc = (array) $message->getCc(); - $tos = array_merge($to, $cc); - $bcc = (array) $message->getBcc(); - - $message->setBcc([]); - - try { - $sent += $this->sendTo($message, $reversePath, $tos, $failedRecipients); - $sent += $this->sendBcc($message, $reversePath, $bcc, $failedRecipients); - } finally { - $message->setBcc($bcc); - } - - if ($evt) { - if ($sent == count($to) + count($cc) + count($bcc)) { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - } elseif ($sent > 0) { - $evt->setResult(Swift_Events_SendEvent::RESULT_TENTATIVE); - } else { - $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); - } - $evt->setFailedRecipients($failedRecipients); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - $message->generateId(); //Make sure a new Message ID is used - - return $sent; - } - - /** - * Stop the SMTP connection. - */ - public function stop() - { - if ($this->started) { - if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStopped'); - if ($evt->bubbleCancelled()) { - return; - } - } - - try { - $this->executeCommand("QUIT\r\n", [221]); - } catch (Swift_TransportException $e) { - } - - try { - $this->buffer->terminate(); - - if ($evt) { - $this->eventDispatcher->dispatchEvent($evt, 'transportStopped'); - } - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - } - $this->started = false; - } - - /** - * {@inheritdoc} - */ - public function ping() - { - try { - if (!$this->isStarted()) { - $this->start(); - } - - $this->executeCommand("NOOP\r\n", [250]); - } catch (Swift_TransportException $e) { - try { - $this->stop(); - } catch (Swift_TransportException $e) { - } - - return false; - } - - return true; - } - - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->eventDispatcher->bindEventListener($plugin); - } - - /** - * Reset the current mail transaction. - */ - public function reset() - { - $this->executeCommand("RSET\r\n", [250], $failures, true); - } - - /** - * Get the IoBuffer where read/writes are occurring. - * - * @return Swift_Transport_IoBuffer - */ - public function getBuffer() - { - return $this->buffer; - } - - /** - * Run a command against the buffer, expecting the given response codes. - * - * If no response codes are given, the response will not be validated. - * If codes are given, an exception will be thrown on an invalid response. - * If the command is RCPT TO, and the pipeline is non-empty, no exception - * will be thrown; instead the failing address is added to $failures. - * - * @param string $command - * @param int[] $codes - * @param string[] $failures An array of failures by-reference - * @param bool $pipeline Do not wait for response - * @param string $address The address, if command is RCPT TO. - * - * @return string|null The server response, or null if pipelining is enabled - */ - public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) - { - $failures = (array) $failures; - $seq = $this->buffer->write($command); - if ($evt = $this->eventDispatcher->createCommandEvent($this, $command, $codes)) { - $this->eventDispatcher->dispatchEvent($evt, 'commandSent'); - } - - $this->pipeline[] = [$command, $seq, $codes, $address]; - if ($pipeline && $this->pipelining) { - $response = null; - } else { - while ($this->pipeline) { - list($command, $seq, $codes, $address) = array_shift($this->pipeline); - $response = $this->getFullResponse($seq); - try { - $this->assertResponseCode($response, $codes); - } catch (Swift_TransportException $e) { - if ($this->pipeline && $address) { - $failures[] = $address; - } else { - $this->throwException($e); - } - } - } - } - - return $response; - } - - /** Read the opening SMTP greeting */ - protected function readGreeting() - { - $this->assertResponseCode($this->getFullResponse(0), [220]); - } - - /** Send the HELO welcome */ - protected function doHeloCommand() - { - $this->executeCommand( - sprintf("HELO %s\r\n", $this->domain), [250] - ); - } - - /** Send the MAIL FROM command */ - protected function doMailFromCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $this->executeCommand( - sprintf("MAIL FROM:<%s>\r\n", $address), [250], $failures, true - ); - } - - /** Send the RCPT TO command */ - protected function doRcptToCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $this->executeCommand( - sprintf("RCPT TO:<%s>\r\n", $address), [250, 251, 252], $failures, true, $address - ); - } - - /** Send the DATA command */ - protected function doDataCommand(&$failedRecipients) - { - $this->executeCommand("DATA\r\n", [354], $failedRecipients); - } - - /** Stream the contents of the message over the buffer */ - protected function streamMessage(Swift_Mime_SimpleMessage $message) - { - $this->buffer->setWriteTranslations(["\r\n." => "\r\n.."]); - try { - $message->toByteStream($this->buffer); - $this->buffer->flushBuffers(); - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - $this->buffer->setWriteTranslations([]); - $this->executeCommand("\r\n.\r\n", [250]); - } - - /** Determine the best-use reverse path for this message */ - protected function getReversePath(Swift_Mime_SimpleMessage $message) - { - $return = $message->getReturnPath(); - $sender = $message->getSender(); - $from = $message->getFrom(); - $path = null; - if (!empty($return)) { - $path = $return; - } elseif (!empty($sender)) { - // Don't use array_keys - reset($sender); // Reset Pointer to first pos - $path = key($sender); // Get key - } elseif (!empty($from)) { - reset($from); // Reset Pointer to first pos - $path = key($from); // Get key - } - - return $path; - } - - /** Throw a TransportException, first sending it to any listeners */ - protected function throwException(Swift_TransportException $e) - { - if ($evt = $this->eventDispatcher->createTransportExceptionEvent($this, $e)) { - $this->eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); - if (!$evt->bubbleCancelled()) { - throw $e; - } - } else { - throw $e; - } - } - - /** Throws an Exception if a response code is incorrect */ - protected function assertResponseCode($response, $wanted) - { - if (!$response) { - $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got an empty response')); - } - - list($code) = sscanf($response, '%3d'); - $valid = (empty($wanted) || in_array($code, $wanted)); - - if ($evt = $this->eventDispatcher->createResponseEvent($this, $response, - $valid)) { - $this->eventDispatcher->dispatchEvent($evt, 'responseReceived'); - } - - if (!$valid) { - $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got code "'.$code.'", with message "'.$response.'"', $code)); - } - } - - /** Get an entire multi-line response using its sequence number */ - protected function getFullResponse($seq) - { - $response = ''; - try { - do { - $line = $this->buffer->readLine($seq); - $response .= $line; - } while (null !== $line && false !== $line && ' ' != $line[3]); - } catch (Swift_TransportException $e) { - $this->throwException($e); - } catch (Swift_IoException $e) { - $this->throwException(new Swift_TransportException($e->getMessage(), 0, $e)); - } - - return $response; - } - - /** Send an email to the given recipients from the given reverse path */ - private function doMailTransaction($message, $reversePath, array $recipients, array &$failedRecipients) - { - $sent = 0; - $this->doMailFromCommand($reversePath); - foreach ($recipients as $forwardPath) { - try { - $this->doRcptToCommand($forwardPath); - ++$sent; - } catch (Swift_TransportException $e) { - $failedRecipients[] = $forwardPath; - } catch (Swift_AddressEncoderException $e) { - $failedRecipients[] = $forwardPath; - } - } - - if (0 != $sent) { - $sent += count($failedRecipients); - $this->doDataCommand($failedRecipients); - $sent -= count($failedRecipients); - - $this->streamMessage($message); - } else { - $this->reset(); - } - - return $sent; - } - - /** Send a message to the given To: recipients */ - private function sendTo(Swift_Mime_SimpleMessage $message, $reversePath, array $to, array &$failedRecipients) - { - if (empty($to)) { - return 0; - } - - return $this->doMailTransaction($message, $reversePath, array_keys($to), - $failedRecipients); - } - - /** Send a message to all Bcc: recipients */ - private function sendBcc(Swift_Mime_SimpleMessage $message, $reversePath, array $bcc, array &$failedRecipients) - { - $sent = 0; - foreach ($bcc as $forwardPath => $name) { - $message->setBcc([$forwardPath => $name]); - $sent += $this->doMailTransaction( - $message, $reversePath, [$forwardPath], $failedRecipients - ); - } - - return $sent; - } - - /** - * Destructor. - */ - public function __destruct() - { - try { - $this->stop(); - } catch (Exception $e) { - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php deleted file mode 100644 index 51dc7f5..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php +++ /dev/null @@ -1,75 +0,0 @@ -executeCommand("AUTH CRAM-MD5\r\n", [334]); - $challenge = base64_decode(substr($challenge, 4)); - $message = base64_encode( - $username.' '.$this->getResponse($password, $challenge) - ); - $agent->executeCommand(sprintf("%s\r\n", $message), [235]); - - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); - - throw $e; - } - } - - /** - * Generate a CRAM-MD5 response from a server challenge. - * - * @param string $secret - * @param string $challenge - * - * @return string - */ - private function getResponse($secret, $challenge) - { - if (strlen($secret) > 64) { - $secret = pack('H32', md5($secret)); - } - - if (strlen($secret) < 64) { - $secret = str_pad($secret, 64, chr(0)); - } - - $k_ipad = substr($secret, 0, 64) ^ str_repeat(chr(0x36), 64); - $k_opad = substr($secret, 0, 64) ^ str_repeat(chr(0x5C), 64); - - $inner = pack('H32', md5($k_ipad.$challenge)); - $digest = md5($k_opad.$inner); - - return $digest; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php deleted file mode 100644 index 458c038..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php +++ /dev/null @@ -1,45 +0,0 @@ -executeCommand("AUTH LOGIN\r\n", [334]); - $agent->executeCommand(sprintf("%s\r\n", base64_encode($username)), [334]); - $agent->executeCommand(sprintf("%s\r\n", base64_encode($password)), [235]); - - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); - - throw $e; - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php deleted file mode 100644 index 90081f8..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php +++ /dev/null @@ -1,681 +0,0 @@ - - */ -class Swift_Transport_Esmtp_Auth_NTLMAuthenticator implements Swift_Transport_Esmtp_Authenticator -{ - const NTLMSIG = "NTLMSSP\x00"; - const DESCONST = 'KGS!@#$%'; - - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'NTLM'; - } - - /** - * {@inheritdoc} - * - * @throws \LogicException - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) - { - if (!function_exists('openssl_encrypt')) { - throw new LogicException('The OpenSSL extension must be enabled to use the NTLM authenticator.'); - } - - if (!function_exists('bcmul')) { - throw new LogicException('The BCMath functions must be enabled to use the NTLM authenticator.'); - } - - try { - // execute AUTH command and filter out the code at the beginning - // AUTH NTLM xxxx - $response = base64_decode(substr(trim($this->sendMessage1($agent)), 4)); - - // extra parameters for our unit cases - $timestamp = func_num_args() > 3 ? func_get_arg(3) : $this->getCorrectTimestamp(bcmul(microtime(true), '1000')); - $client = func_num_args() > 4 ? func_get_arg(4) : random_bytes(8); - - // Message 3 response - $this->sendMessage3($response, $username, $password, $timestamp, $client, $agent); - - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); - - throw $e; - } - } - - protected function si2bin($si, $bits = 32) - { - $bin = null; - if ($si >= -pow(2, $bits - 1) && ($si <= pow(2, $bits - 1))) { - // positive or zero - if ($si >= 0) { - $bin = base_convert($si, 10, 2); - // pad to $bits bit - $bin_length = strlen($bin); - if ($bin_length < $bits) { - $bin = str_repeat('0', $bits - $bin_length).$bin; - } - } else { - // negative - $si = -$si - pow(2, $bits); - $bin = base_convert($si, 10, 2); - $bin_length = strlen($bin); - if ($bin_length > $bits) { - $bin = str_repeat('1', $bits - $bin_length).$bin; - } - } - } - - return $bin; - } - - /** - * Send our auth message and returns the response. - * - * @return string SMTP Response - */ - protected function sendMessage1(Swift_Transport_SmtpAgent $agent) - { - $message = $this->createMessage1(); - - return $agent->executeCommand(sprintf("AUTH %s %s\r\n", $this->getAuthKeyword(), base64_encode($message)), [334]); - } - - /** - * Fetch all details of our response (message 2). - * - * @param string $response - * - * @return array our response parsed - */ - protected function parseMessage2($response) - { - $responseHex = bin2hex($response); - $length = floor(hexdec(substr($responseHex, 28, 4)) / 256) * 2; - $offset = floor(hexdec(substr($responseHex, 32, 4)) / 256) * 2; - $challenge = hex2bin(substr($responseHex, 48, 16)); - $context = hex2bin(substr($responseHex, 64, 16)); - $targetInfoH = hex2bin(substr($responseHex, 80, 16)); - $targetName = hex2bin(substr($responseHex, $offset, $length)); - $offset = floor(hexdec(substr($responseHex, 88, 4)) / 256) * 2; - $targetInfoBlock = substr($responseHex, $offset); - list($domainName, $serverName, $DNSDomainName, $DNSServerName, $terminatorByte) = $this->readSubBlock($targetInfoBlock); - - return [ - $challenge, - $context, - $targetInfoH, - $targetName, - $domainName, - $serverName, - $DNSDomainName, - $DNSServerName, - hex2bin($targetInfoBlock), - $terminatorByte, - ]; - } - - /** - * Read the blob information in from message2. - * - * @return array - */ - protected function readSubBlock($block) - { - // remove terminatorByte cause it's always the same - $block = substr($block, 0, -8); - - $length = strlen($block); - $offset = 0; - $data = []; - while ($offset < $length) { - $blockLength = hexdec(substr(substr($block, $offset, 8), -4)) / 256; - $offset += 8; - $data[] = hex2bin(substr($block, $offset, $blockLength * 2)); - $offset += $blockLength * 2; - } - - if (3 == count($data)) { - $data[] = $data[2]; - $data[2] = ''; - } - - $data[] = $this->createByte('00'); - - return $data; - } - - /** - * Send our final message with all our data. - * - * @param string $response Message 1 response (message 2) - * @param string $username - * @param string $password - * @param string $timestamp - * @param string $client - * @param bool $v2 Use version2 of the protocol - * - * @return string - */ - protected function sendMessage3($response, $username, $password, $timestamp, $client, Swift_Transport_SmtpAgent $agent, $v2 = true) - { - list($domain, $username) = $this->getDomainAndUsername($username); - //$challenge, $context, $targetInfoH, $targetName, $domainName, $workstation, $DNSDomainName, $DNSServerName, $blob, $ter - list($challenge, , , , , $workstation, , , $blob) = $this->parseMessage2($response); - - if (!$v2) { - // LMv1 - $lmResponse = $this->createLMPassword($password, $challenge); - // NTLMv1 - $ntlmResponse = $this->createNTLMPassword($password, $challenge); - } else { - // LMv2 - $lmResponse = $this->createLMv2Password($password, $username, $domain, $challenge, $client); - // NTLMv2 - $ntlmResponse = $this->createNTLMv2Hash($password, $username, $domain, $challenge, $blob, $timestamp, $client); - } - - $message = $this->createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse); - - return $agent->executeCommand(sprintf("%s\r\n", base64_encode($message)), [235]); - } - - /** - * Create our message 1. - * - * @return string - */ - protected function createMessage1() - { - return self::NTLMSIG - .$this->createByte('01') // Message 1 -.$this->createByte('0702'); // Flags - } - - /** - * Create our message 3. - * - * @param string $domain - * @param string $username - * @param string $workstation - * @param string $lmResponse - * @param string $ntlmResponse - * - * @return string - */ - protected function createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse) - { - // Create security buffers - $domainSec = $this->createSecurityBuffer($domain, 64); - $domainInfo = $this->readSecurityBuffer(bin2hex($domainSec)); - $userSec = $this->createSecurityBuffer($username, ($domainInfo[0] + $domainInfo[1]) / 2); - $userInfo = $this->readSecurityBuffer(bin2hex($userSec)); - $workSec = $this->createSecurityBuffer($workstation, ($userInfo[0] + $userInfo[1]) / 2); - $workInfo = $this->readSecurityBuffer(bin2hex($workSec)); - $lmSec = $this->createSecurityBuffer($lmResponse, ($workInfo[0] + $workInfo[1]) / 2, true); - $lmInfo = $this->readSecurityBuffer(bin2hex($lmSec)); - $ntlmSec = $this->createSecurityBuffer($ntlmResponse, ($lmInfo[0] + $lmInfo[1]) / 2, true); - - return self::NTLMSIG - .$this->createByte('03') // TYPE 3 message -.$lmSec // LM response header -.$ntlmSec // NTLM response header -.$domainSec // Domain header -.$userSec // User header -.$workSec // Workstation header -.$this->createByte('000000009a', 8) // session key header (empty) -.$this->createByte('01020000') // FLAGS -.$this->convertTo16bit($domain) // domain name -.$this->convertTo16bit($username) // username -.$this->convertTo16bit($workstation) // workstation -.$lmResponse - .$ntlmResponse; - } - - /** - * @param string $timestamp Epoch timestamp in microseconds - * @param string $client Random bytes - * @param string $targetInfo - * - * @return string - */ - protected function createBlob($timestamp, $client, $targetInfo) - { - return $this->createByte('0101') - .$this->createByte('00') - .$timestamp - .$client - .$this->createByte('00') - .$targetInfo - .$this->createByte('00'); - } - - /** - * Get domain and username from our username. - * - * @example DOMAIN\username - * - * @param string $name - * - * @return array - */ - protected function getDomainAndUsername($name) - { - if (false !== strpos($name, '\\')) { - return explode('\\', $name); - } - - if (false !== strpos($name, '@')) { - list($user, $domain) = explode('@', $name); - - return [$domain, $user]; - } - - // no domain passed - return ['', $name]; - } - - /** - * Create LMv1 response. - * - * @param string $password - * @param string $challenge - * - * @return string - */ - protected function createLMPassword($password, $challenge) - { - // FIRST PART - $password = $this->createByte(strtoupper($password), 14, false); - list($key1, $key2) = str_split($password, 7); - - $desKey1 = $this->createDesKey($key1); - $desKey2 = $this->createDesKey($key2); - - $constantDecrypt = $this->createByte($this->desEncrypt(self::DESCONST, $desKey1).$this->desEncrypt(self::DESCONST, $desKey2), 21, false); - - // SECOND PART - list($key1, $key2, $key3) = str_split($constantDecrypt, 7); - - $desKey1 = $this->createDesKey($key1); - $desKey2 = $this->createDesKey($key2); - $desKey3 = $this->createDesKey($key3); - - return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); - } - - /** - * Create NTLMv1 response. - * - * @param string $password - * @param string $challenge - * - * @return string - */ - protected function createNTLMPassword($password, $challenge) - { - // FIRST PART - $ntlmHash = $this->createByte($this->md4Encrypt($password), 21, false); - list($key1, $key2, $key3) = str_split($ntlmHash, 7); - - $desKey1 = $this->createDesKey($key1); - $desKey2 = $this->createDesKey($key2); - $desKey3 = $this->createDesKey($key3); - - return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); - } - - /** - * Convert a normal timestamp to a tenth of a microtime epoch time. - * - * @param string $time - * - * @return string - */ - protected function getCorrectTimestamp($time) - { - // Get our timestamp (tricky!) - $time = number_format($time, 0, '.', ''); // save microtime to string - $time = bcadd($time, '11644473600000', 0); // add epoch time - $time = bcmul($time, 10000, 0); // tenths of a microsecond. - - $binary = $this->si2bin($time, 64); // create 64 bit binary string - $timestamp = ''; - for ($i = 0; $i < 8; ++$i) { - $timestamp .= chr(bindec(substr($binary, -(($i + 1) * 8), 8))); - } - - return $timestamp; - } - - /** - * Create LMv2 response. - * - * @param string $password - * @param string $username - * @param string $domain - * @param string $challenge NTLM Challenge - * @param string $client Random string - * - * @return string - */ - protected function createLMv2Password($password, $username, $domain, $challenge, $client) - { - $lmPass = '00'; // by default 00 - // if $password > 15 than we can't use this method - if (strlen($password) <= 15) { - $ntlmHash = $this->md4Encrypt($password); - $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); - - $lmPass = bin2hex($this->md5Encrypt($ntml2Hash, $challenge.$client).$client); - } - - return $this->createByte($lmPass, 24); - } - - /** - * Create NTLMv2 response. - * - * @param string $password - * @param string $username - * @param string $domain - * @param string $challenge Hex values - * @param string $targetInfo Hex values - * @param string $timestamp - * @param string $client Random bytes - * - * @return string - * - * @see http://davenport.sourceforge.net/ntlm.html#theNtlmResponse - */ - protected function createNTLMv2Hash($password, $username, $domain, $challenge, $targetInfo, $timestamp, $client) - { - $ntlmHash = $this->md4Encrypt($password); - $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); - - // create blob - $blob = $this->createBlob($timestamp, $client, $targetInfo); - - $ntlmv2Response = $this->md5Encrypt($ntml2Hash, $challenge.$blob); - - return $ntlmv2Response.$blob; - } - - protected function createDesKey($key) - { - $material = [bin2hex($key[0])]; - $len = strlen($key); - for ($i = 1; $i < $len; ++$i) { - list($high, $low) = str_split(bin2hex($key[$i])); - $v = $this->castToByte(ord($key[$i - 1]) << (7 + 1 - $i) | $this->uRShift(hexdec(dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xf)), $i)); - $material[] = str_pad(substr(dechex($v), -2), 2, '0', STR_PAD_LEFT); // cast to byte - } - $material[] = str_pad(substr(dechex($this->castToByte(ord($key[6]) << 1)), -2), 2, '0'); - - // odd parity - foreach ($material as $k => $v) { - $b = $this->castToByte(hexdec($v)); - $needsParity = 0 == (($this->uRShift($b, 7) ^ $this->uRShift($b, 6) ^ $this->uRShift($b, 5) - ^ $this->uRShift($b, 4) ^ $this->uRShift($b, 3) ^ $this->uRShift($b, 2) - ^ $this->uRShift($b, 1)) & 0x01); - - list($high, $low) = str_split($v); - if ($needsParity) { - $material[$k] = dechex(hexdec($high) | 0x0).dechex(hexdec($low) | 0x1); - } else { - $material[$k] = dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xe); - } - } - - return hex2bin(implode('', $material)); - } - - /** HELPER FUNCTIONS */ - - /** - * Create our security buffer depending on length and offset. - * - * @param string $value Value we want to put in - * @param int $offset start of value - * @param bool $is16 Do we 16bit string or not? - * - * @return string - */ - protected function createSecurityBuffer($value, $offset, $is16 = false) - { - $length = strlen(bin2hex($value)); - $length = $is16 ? $length / 2 : $length; - $length = $this->createByte(str_pad(dechex($length), 2, '0', STR_PAD_LEFT), 2); - - return $length.$length.$this->createByte(dechex($offset), 4); - } - - /** - * Read our security buffer to fetch length and offset of our value. - * - * @param string $value Securitybuffer in hex - * - * @return array array with length and offset - */ - protected function readSecurityBuffer($value) - { - $length = floor(hexdec(substr($value, 0, 4)) / 256) * 2; - $offset = floor(hexdec(substr($value, 8, 4)) / 256) * 2; - - return [$length, $offset]; - } - - /** - * Cast to byte java equivalent to (byte). - * - * @param int $v - * - * @return int - */ - protected function castToByte($v) - { - return (($v + 128) % 256) - 128; - } - - /** - * Java unsigned right bitwise - * $a >>> $b. - * - * @param int $a - * @param int $b - * - * @return int - */ - protected function uRShift($a, $b) - { - if (0 == $b) { - return $a; - } - - return ($a >> $b) & ~(1 << (8 * PHP_INT_SIZE - 1) >> ($b - 1)); - } - - /** - * Right padding with 0 to certain length. - * - * @param string $input - * @param int $bytes Length of bytes - * @param bool $isHex Did we provided hex value - * - * @return string - */ - protected function createByte($input, $bytes = 4, $isHex = true) - { - if ($isHex) { - $byte = hex2bin(str_pad($input, $bytes * 2, '00')); - } else { - $byte = str_pad($input, $bytes, "\x00"); - } - - return $byte; - } - - /** ENCRYPTION ALGORITHMS */ - - /** - * DES Encryption. - * - * @param string $value An 8-byte string - * @param string $key - * - * @return string - */ - protected function desEncrypt($value, $key) - { - return substr(openssl_encrypt($value, 'DES-ECB', $key, \OPENSSL_RAW_DATA), 0, 8); - } - - /** - * MD5 Encryption. - * - * @param string $key Encryption key - * @param string $msg Message to encrypt - * - * @return string - */ - protected function md5Encrypt($key, $msg) - { - $blocksize = 64; - if (strlen($key) > $blocksize) { - $key = pack('H*', md5($key)); - } - - $key = str_pad($key, $blocksize, "\0"); - $ipadk = $key ^ str_repeat("\x36", $blocksize); - $opadk = $key ^ str_repeat("\x5c", $blocksize); - - return pack('H*', md5($opadk.pack('H*', md5($ipadk.$msg)))); - } - - /** - * MD4 Encryption. - * - * @param string $input - * - * @return string - * - * @see https://secure.php.net/manual/en/ref.hash.php - */ - protected function md4Encrypt($input) - { - $input = $this->convertTo16bit($input); - - return function_exists('hash') ? hex2bin(hash('md4', $input)) : mhash(MHASH_MD4, $input); - } - - /** - * Convert UTF-8 to UTF-16. - * - * @param string $input - * - * @return string - */ - protected function convertTo16bit($input) - { - return iconv('UTF-8', 'UTF-16LE', $input); - } - - /** - * @param string $message - */ - protected function debug($message) - { - $message = bin2hex($message); - $messageId = substr($message, 16, 8); - echo substr($message, 0, 16)." NTLMSSP Signature
\n"; - echo $messageId." Type Indicator
\n"; - - if ('02000000' == $messageId) { - $map = [ - 'Challenge', - 'Context', - 'Target Information Security Buffer', - 'Target Name Data', - 'NetBIOS Domain Name', - 'NetBIOS Server Name', - 'DNS Domain Name', - 'DNS Server Name', - 'BLOB', - 'Target Information Terminator', - ]; - - $data = $this->parseMessage2(hex2bin($message)); - - foreach ($map as $key => $value) { - echo bin2hex($data[$key]).' - '.$data[$key].' ||| '.$value."
\n"; - } - } elseif ('03000000' == $messageId) { - $i = 0; - $data[$i++] = substr($message, 24, 16); - list($lmLength, $lmOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 40, 16); - list($ntmlLength, $ntmlOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 56, 16); - list($targetLength, $targetOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 72, 16); - list($userLength, $userOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 88, 16); - list($workLength, $workOffset) = $this->readSecurityBuffer($data[$i - 1]); - - $data[$i++] = substr($message, 104, 16); - $data[$i++] = substr($message, 120, 8); - $data[$i++] = substr($message, $targetOffset, $targetLength); - $data[$i++] = substr($message, $userOffset, $userLength); - $data[$i++] = substr($message, $workOffset, $workLength); - $data[$i++] = substr($message, $lmOffset, $lmLength); - $data[$i] = substr($message, $ntmlOffset, $ntmlLength); - - $map = [ - 'LM Response Security Buffer', - 'NTLM Response Security Buffer', - 'Target Name Security Buffer', - 'User Name Security Buffer', - 'Workstation Name Security Buffer', - 'Session Key Security Buffer', - 'Flags', - 'Target Name Data', - 'User Name Data', - 'Workstation Name Data', - 'LM Response Data', - 'NTLM Response Data', - ]; - - foreach ($map as $key => $value) { - echo $data[$key].' - '.hex2bin($data[$key]).' ||| '.$value."
\n"; - } - } - - echo '

'; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php deleted file mode 100644 index 1ff961c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php +++ /dev/null @@ -1,44 +0,0 @@ -executeCommand(sprintf("AUTH PLAIN %s\r\n", $message), [235]); - - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); - - throw $e; - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php deleted file mode 100644 index 859f22f..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php +++ /dev/null @@ -1,64 +0,0 @@ - - * $transport = (new Swift_SmtpTransport('smtp.gmail.com', 587, 'tls')) - * ->setAuthMode('XOAUTH2') - * ->setUsername('YOUR_EMAIL_ADDRESS') - * ->setPassword('YOUR_ACCESS_TOKEN'); - * - * - * @author xu.li - * - * @see https://developers.google.com/google-apps/gmail/xoauth2_protocol - */ -class Swift_Transport_Esmtp_Auth_XOAuth2Authenticator implements Swift_Transport_Esmtp_Authenticator -{ - /** - * Get the name of the AUTH mechanism this Authenticator handles. - * - * @return string - */ - public function getAuthKeyword() - { - return 'XOAUTH2'; - } - - /** - * {@inheritdoc} - */ - public function authenticate(Swift_Transport_SmtpAgent $agent, $email, $token) - { - try { - $param = $this->constructXOAuth2Params($email, $token); - $agent->executeCommand('AUTH XOAUTH2 '.$param."\r\n", [235]); - - return true; - } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", [250]); - - throw $e; - } - } - - /** - * Construct the auth parameter. - * - * @see https://developers.google.com/google-apps/gmail/xoauth2_protocol#the_sasl_xoauth2_mechanism - */ - protected function constructXOAuth2Params($email, $token) - { - return base64_encode("user=$email\1auth=Bearer $token\1\1"); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php deleted file mode 100644 index 3733420..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php +++ /dev/null @@ -1,268 +0,0 @@ -setAuthenticators($authenticators); - } - - /** - * Set the Authenticators which can process a login request. - * - * @param Swift_Transport_Esmtp_Authenticator[] $authenticators - */ - public function setAuthenticators(array $authenticators) - { - $this->authenticators = $authenticators; - } - - /** - * Get the Authenticators which can process a login request. - * - * @return Swift_Transport_Esmtp_Authenticator[] - */ - public function getAuthenticators() - { - return $this->authenticators; - } - - /** - * Set the username to authenticate with. - * - * @param string $username - */ - public function setUsername($username) - { - $this->username = $username; - } - - /** - * Get the username to authenticate with. - * - * @return string - */ - public function getUsername() - { - return $this->username; - } - - /** - * Set the password to authenticate with. - * - * @param string $password - */ - public function setPassword($password) - { - $this->password = $password; - } - - /** - * Get the password to authenticate with. - * - * @return string - */ - public function getPassword() - { - return $this->password; - } - - /** - * Set the auth mode to use to authenticate. - * - * @param string $mode - */ - public function setAuthMode($mode) - { - $this->auth_mode = $mode; - } - - /** - * Get the auth mode to use to authenticate. - * - * @return string - */ - public function getAuthMode() - { - return $this->auth_mode; - } - - /** - * Get the name of the ESMTP extension this handles. - * - * @return string - */ - public function getHandledKeyword() - { - return 'AUTH'; - } - - /** - * Set the parameters which the EHLO greeting indicated. - * - * @param string[] $parameters - */ - public function setKeywordParams(array $parameters) - { - $this->esmtpParams = $parameters; - } - - /** - * Runs immediately after a EHLO has been issued. - * - * @param Swift_Transport_SmtpAgent $agent to read/write - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent) - { - if ($this->username) { - $count = 0; - $errors = []; - foreach ($this->getAuthenticatorsForAgent() as $authenticator) { - if (in_array(strtolower($authenticator->getAuthKeyword()), array_map('strtolower', $this->esmtpParams))) { - ++$count; - try { - if ($authenticator->authenticate($agent, $this->username, $this->password)) { - return; - } - } catch (Swift_TransportException $e) { - // keep the error message, but tries the other authenticators - $errors[] = [$authenticator->getAuthKeyword(), $e->getMessage()]; - } - } - } - - $message = 'Failed to authenticate on SMTP server with username "'.$this->username.'" using '.$count.' possible authenticators.'; - foreach ($errors as $error) { - $message .= ' Authenticator '.$error[0].' returned '.$error[1].'.'; - } - throw new Swift_TransportException($message); - } - } - - /** - * Not used. - */ - public function getMailParams() - { - return []; - } - - /** - * Not used. - */ - public function getRcptParams() - { - return []; - } - - /** - * Not used. - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) - { - } - - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword) - { - return 0; - } - - /** - * Returns an array of method names which are exposed to the Esmtp class. - * - * @return string[] - */ - public function exposeMixinMethods() - { - return ['setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode']; - } - - /** - * Not used. - */ - public function resetState() - { - } - - /** - * Returns the authenticator list for the given agent. - * - * @return array - */ - protected function getAuthenticatorsForAgent() - { - if (!$mode = strtolower($this->auth_mode)) { - return $this->authenticators; - } - - foreach ($this->authenticators as $authenticator) { - if (strtolower($authenticator->getAuthKeyword()) == $mode) { - return [$authenticator]; - } - } - - throw new Swift_TransportException('Auth mode '.$mode.' is invalid'); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php deleted file mode 100644 index cadfdc6..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php +++ /dev/null @@ -1,37 +0,0 @@ -encoding = $encoding; - } - - /** - * Get the name of the ESMTP extension this handles. - * - * @return string - */ - public function getHandledKeyword() - { - return '8BITMIME'; - } - - /** - * Not used. - */ - public function setKeywordParams(array $parameters) - { - } - - /** - * Not used. - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent) - { - } - - /** - * Get params which are appended to MAIL FROM:<>. - * - * @return string[] - */ - public function getMailParams() - { - return ['BODY='.$this->encoding]; - } - - /** - * Not used. - */ - public function getRcptParams() - { - return []; - } - - /** - * Not used. - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) - { - } - - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword) - { - return 0; - } - - /** - * Not used. - */ - public function exposeMixinMethods() - { - return []; - } - - /** - * Not used. - */ - public function resetState() - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php deleted file mode 100644 index 7d0252a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php +++ /dev/null @@ -1,107 +0,0 @@ -. - * - * @return string[] - */ - public function getMailParams() - { - return ['SMTPUTF8']; - } - - /** - * Not used. - */ - public function getRcptParams() - { - return []; - } - - /** - * Not used. - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) - { - } - - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword) - { - return 0; - } - - /** - * Not used. - */ - public function exposeMixinMethods() - { - return []; - } - - /** - * Not used. - */ - public function resetState() - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php deleted file mode 100644 index b8ea36e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php +++ /dev/null @@ -1,86 +0,0 @@ -. - * - * @return string[] - */ - public function getMailParams(); - - /** - * Get params which are appended to RCPT TO:<>. - * - * @return string[] - */ - public function getRcptParams(); - - /** - * Runs when a command is due to be sent. - * - * @param Swift_Transport_SmtpAgent $agent to read/write - * @param string $command to send - * @param int[] $codes expected in response - * @param string[] $failedRecipients to collect failures - * @param bool $stop to be set true by-reference if the command is now sent - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false); - - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * - * This method is called to ensure extensions can be execute in an appropriate order. - * - * @param string $esmtpKeyword to compare with - * - * @return int - */ - public function getPriorityOver($esmtpKeyword); - - /** - * Returns an array of method names which are exposed to the Esmtp class. - * - * @return string[] - */ - public function exposeMixinMethods(); - - /** - * Tells this handler to clear any buffers and reset its state. - */ - public function resetState(); -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php deleted file mode 100644 index d1f1c2c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php +++ /dev/null @@ -1,446 +0,0 @@ - 'tcp', - 'host' => 'localhost', - 'port' => 25, - 'timeout' => 30, - 'blocking' => 1, - 'tls' => false, - 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, - 'stream_context_options' => [], - ]; - - /** - * Creates a new EsmtpTransport using the given I/O buffer. - * - * @param Swift_Transport_EsmtpHandler[] $extensionHandlers - * @param string $localDomain - */ - public function __construct(Swift_Transport_IoBuffer $buf, array $extensionHandlers, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) - { - parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); - $this->setExtensionHandlers($extensionHandlers); - } - - /** - * Set the host to connect to. - * - * Literal IPv6 addresses should be wrapped in square brackets. - * - * @param string $host - * - * @return $this - */ - public function setHost($host) - { - $this->params['host'] = $host; - - return $this; - } - - /** - * Get the host to connect to. - * - * @return string - */ - public function getHost() - { - return $this->params['host']; - } - - /** - * Set the port to connect to. - * - * @param int $port - * - * @return $this - */ - public function setPort($port) - { - $this->params['port'] = (int) $port; - - return $this; - } - - /** - * Get the port to connect to. - * - * @return int - */ - public function getPort() - { - return $this->params['port']; - } - - /** - * Set the connection timeout. - * - * @param int $timeout seconds - * - * @return $this - */ - public function setTimeout($timeout) - { - $this->params['timeout'] = (int) $timeout; - $this->buffer->setParam('timeout', (int) $timeout); - - return $this; - } - - /** - * Get the connection timeout. - * - * @return int - */ - public function getTimeout() - { - return $this->params['timeout']; - } - - /** - * Set the encryption type (tls or ssl). - * - * @param string $encryption - * - * @return $this - */ - public function setEncryption($encryption) - { - $encryption = strtolower($encryption); - if ('tls' == $encryption) { - $this->params['protocol'] = 'tcp'; - $this->params['tls'] = true; - } else { - $this->params['protocol'] = $encryption; - $this->params['tls'] = false; - } - - return $this; - } - - /** - * Get the encryption type. - * - * @return string - */ - public function getEncryption() - { - return $this->params['tls'] ? 'tls' : $this->params['protocol']; - } - - /** - * Sets the stream context options. - * - * @param array $options - * - * @return $this - */ - public function setStreamOptions($options) - { - $this->params['stream_context_options'] = $options; - - return $this; - } - - /** - * Returns the stream context options. - * - * @return array - */ - public function getStreamOptions() - { - return $this->params['stream_context_options']; - } - - /** - * Sets the source IP. - * - * IPv6 addresses should be wrapped in square brackets. - * - * @param string $source - * - * @return $this - */ - public function setSourceIp($source) - { - $this->params['sourceIp'] = $source; - - return $this; - } - - /** - * Returns the IP used to connect to the destination. - * - * @return string - */ - public function getSourceIp() - { - return $this->params['sourceIp'] ?? null; - } - - /** - * Sets whether SMTP pipelining is enabled. - * - * By default, support is auto-detected using the PIPELINING SMTP extension. - * Use this function to override that in the unlikely event of compatibility - * issues. - * - * @param bool $enabled - * - * @return $this - */ - public function setPipelining($enabled) - { - $this->pipelining = $enabled; - - return $this; - } - - /** - * Returns whether SMTP pipelining is enabled. - * - * @return bool|null a boolean if pipelining is explicitly enabled or disabled, - * or null if support is auto-detected. - */ - public function getPipelining() - { - return $this->pipelining; - } - - /** - * Set ESMTP extension handlers. - * - * @param Swift_Transport_EsmtpHandler[] $handlers - * - * @return $this - */ - public function setExtensionHandlers(array $handlers) - { - $assoc = []; - foreach ($handlers as $handler) { - $assoc[$handler->getHandledKeyword()] = $handler; - } - uasort($assoc, function ($a, $b) { - return $a->getPriorityOver($b->getHandledKeyword()); - }); - $this->handlers = $assoc; - $this->setHandlerParams(); - - return $this; - } - - /** - * Get ESMTP extension handlers. - * - * @return Swift_Transport_EsmtpHandler[] - */ - public function getExtensionHandlers() - { - return array_values($this->handlers); - } - - /** - * Run a command against the buffer, expecting the given response codes. - * - * If no response codes are given, the response will not be validated. - * If codes are given, an exception will be thrown on an invalid response. - * - * @param string $command - * @param int[] $codes - * @param string[] $failures An array of failures by-reference - * @param bool $pipeline Do not wait for response - * @param string $address The address, if command is RCPT TO. - * - * @return string|null The server response, or null if pipelining is enabled - */ - public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) - { - $failures = (array) $failures; - $stopSignal = false; - $response = null; - foreach ($this->getActiveHandlers() as $handler) { - $response = $handler->onCommand( - $this, $command, $codes, $failures, $stopSignal - ); - if ($stopSignal) { - return $response; - } - } - - return parent::executeCommand($command, $codes, $failures, $pipeline, $address); - } - - /** Mixin handling method for ESMTP handlers */ - public function __call($method, $args) - { - foreach ($this->handlers as $handler) { - if (in_array(strtolower($method), - array_map('strtolower', (array) $handler->exposeMixinMethods()) - )) { - $return = call_user_func_array([$handler, $method], $args); - // Allow fluid method calls - if (null === $return && 'set' == substr($method, 0, 3)) { - return $this; - } else { - return $return; - } - } - } - trigger_error('Call to undefined method '.$method, E_USER_ERROR); - } - - /** Get the params to initialize the buffer */ - protected function getBufferParams() - { - return $this->params; - } - - /** Overridden to perform EHLO instead */ - protected function doHeloCommand() - { - try { - $response = $this->executeCommand( - sprintf("EHLO %s\r\n", $this->domain), [250] - ); - } catch (Swift_TransportException $e) { - return parent::doHeloCommand(); - } - - if ($this->params['tls']) { - try { - $this->executeCommand("STARTTLS\r\n", [220]); - - if (!$this->buffer->startTLS()) { - throw new Swift_TransportException('Unable to connect with TLS encryption'); - } - - try { - $response = $this->executeCommand( - sprintf("EHLO %s\r\n", $this->domain), [250] - ); - } catch (Swift_TransportException $e) { - return parent::doHeloCommand(); - } - } catch (Swift_TransportException $e) { - $this->throwException($e); - } - } - - $this->capabilities = $this->getCapabilities($response); - if (!isset($this->pipelining)) { - $this->pipelining = isset($this->capabilities['PIPELINING']); - } - - $this->setHandlerParams(); - foreach ($this->getActiveHandlers() as $handler) { - $handler->afterEhlo($this); - } - } - - /** Overridden to add Extension support */ - protected function doMailFromCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $handlers = $this->getActiveHandlers(); - $params = []; - foreach ($handlers as $handler) { - $params = array_merge($params, (array) $handler->getMailParams()); - } - $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; - $this->executeCommand( - sprintf("MAIL FROM:<%s>%s\r\n", $address, $paramStr), [250], $failures, true - ); - } - - /** Overridden to add Extension support */ - protected function doRcptToCommand($address) - { - $address = $this->addressEncoder->encodeString($address); - $handlers = $this->getActiveHandlers(); - $params = []; - foreach ($handlers as $handler) { - $params = array_merge($params, (array) $handler->getRcptParams()); - } - $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; - $this->executeCommand( - sprintf("RCPT TO:<%s>%s\r\n", $address, $paramStr), [250, 251, 252], $failures, true, $address - ); - } - - /** Determine ESMTP capabilities by function group */ - private function getCapabilities($ehloResponse) - { - $capabilities = []; - $ehloResponse = trim($ehloResponse); - $lines = explode("\r\n", $ehloResponse); - array_shift($lines); - foreach ($lines as $line) { - if (preg_match('/^[0-9]{3}[ -]([A-Z0-9-]+)((?:[ =].*)?)$/Di', $line, $matches)) { - $keyword = strtoupper($matches[1]); - $paramStr = strtoupper(ltrim($matches[2], ' =')); - $params = !empty($paramStr) ? explode(' ', $paramStr) : []; - $capabilities[$keyword] = $params; - } - } - - return $capabilities; - } - - /** Set parameters which are used by each extension handler */ - private function setHandlerParams() - { - foreach ($this->handlers as $keyword => $handler) { - if (array_key_exists($keyword, $this->capabilities)) { - $handler->setKeywordParams($this->capabilities[$keyword]); - } - } - } - - /** Get ESMTP handlers which are currently ok to use */ - private function getActiveHandlers() - { - $handlers = []; - foreach ($this->handlers as $keyword => $handler) { - if (array_key_exists($keyword, $this->capabilities)) { - $handlers[] = $handler; - } - } - - return $handlers; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php deleted file mode 100644 index 21bce4b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php +++ /dev/null @@ -1,105 +0,0 @@ -transports); - for ($i = 0; $i < $maxTransports - && $transport = $this->getNextTransport(); ++$i) { - if ($transport->ping()) { - return true; - } else { - $this->killCurrentTransport(); - } - } - - return count($this->transports) > 0; - } - - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $maxTransports = count($this->transports); - $sent = 0; - $this->lastUsedTransport = null; - - for ($i = 0; $i < $maxTransports - && $transport = $this->getNextTransport(); ++$i) { - try { - if (!$transport->isStarted()) { - $transport->start(); - } - - if ($sent = $transport->send($message, $failedRecipients)) { - $this->lastUsedTransport = $transport; - - return $sent; - } - } catch (Swift_TransportException $e) { - $this->killCurrentTransport(); - } - } - - if (0 == count($this->transports)) { - throw new Swift_TransportException( - 'All Transports in FailoverTransport failed, or no Transports available' - ); - } - - return $sent; - } - - protected function getNextTransport() - { - if (!isset($this->currentTransport)) { - $this->currentTransport = parent::getNextTransport(); - } - - return $this->currentTransport; - } - - protected function killCurrentTransport() - { - $this->currentTransport = null; - parent::killCurrentTransport(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php deleted file mode 100644 index af97adf..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php +++ /dev/null @@ -1,67 +0,0 @@ -transports = $transports; - $this->deadTransports = []; - } - - /** - * Get $transports to delegate to. - * - * @return Swift_Transport[] - */ - public function getTransports() - { - return array_merge($this->transports, $this->deadTransports); - } - - /** - * Get the Transport used in the last successful send operation. - * - * @return Swift_Transport - */ - public function getLastUsedTransport() - { - return $this->lastUsedTransport; - } - - /** - * Test if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return count($this->transports) > 0; - } - - /** - * Start this Transport mechanism. - */ - public function start() - { - $this->transports = array_merge($this->transports, $this->deadTransports); - } - - /** - * Stop this Transport mechanism. - */ - public function stop() - { - foreach ($this->transports as $transport) { - $transport->stop(); - } - } - - /** - * {@inheritdoc} - */ - public function ping() - { - foreach ($this->transports as $transport) { - if (!$transport->ping()) { - $this->killCurrentTransport(); - } - } - - return count($this->transports) > 0; - } - - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $maxTransports = count($this->transports); - $sent = 0; - $this->lastUsedTransport = null; - - for ($i = 0; $i < $maxTransports - && $transport = $this->getNextTransport(); ++$i) { - try { - if (!$transport->isStarted()) { - $transport->start(); - } - if ($sent = $transport->send($message, $failedRecipients)) { - $this->lastUsedTransport = $transport; - break; - } - } catch (Swift_TransportException $e) { - $this->killCurrentTransport(); - } - } - - if (0 == count($this->transports)) { - throw new Swift_TransportException( - 'All Transports in LoadBalancedTransport failed, or no Transports available' - ); - } - - return $sent; - } - - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - foreach ($this->transports as $transport) { - $transport->registerPlugin($plugin); - } - } - - /** - * Rotates the transport list around and returns the first instance. - * - * @return Swift_Transport - */ - protected function getNextTransport() - { - if ($next = array_shift($this->transports)) { - $this->transports[] = $next; - } - - return $next; - } - - /** - * Tag the currently used (top of stack) transport as dead/useless. - */ - protected function killCurrentTransport() - { - if ($transport = array_pop($this->transports)) { - try { - $transport->stop(); - } catch (Exception $e) { - } - $this->deadTransports[] = $transport; - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/NullTransport.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/NullTransport.php deleted file mode 100644 index 5934ca9..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/NullTransport.php +++ /dev/null @@ -1,98 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Pretends messages have been sent, but just ignores them. - * - * @author Fabien Potencier - */ -class Swift_Transport_NullTransport implements Swift_Transport -{ - /** The event dispatcher from the plugin API */ - private $eventDispatcher; - - /** - * Constructor. - */ - public function __construct(Swift_Events_EventDispatcher $eventDispatcher) - { - $this->eventDispatcher = $eventDispatcher; - } - - /** - * Tests if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } - - /** - * Starts this Transport mechanism. - */ - public function start() - { - } - - /** - * Stops this Transport mechanism. - */ - public function stop() - { - } - - /** - * {@inheritdoc} - */ - public function ping() - { - return true; - } - - /** - * Sends the given message. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent emails - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } - - if ($evt) { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - $count = ( - count((array) $message->getTo()) - + count((array) $message->getCc()) - + count((array) $message->getBcc()) - ); - - return $count; - } - - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->eventDispatcher->bindEventListener($plugin); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php deleted file mode 100644 index 7f0476a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php +++ /dev/null @@ -1,158 +0,0 @@ - 30, - 'blocking' => 1, - 'command' => '/usr/sbin/sendmail -bs', - 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS, - ]; - - /** - * Create a new SendmailTransport with $buf for I/O. - * - * @param string $localDomain - */ - public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) - { - parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); - } - - /** - * Start the standalone SMTP session if running in -bs mode. - */ - public function start() - { - if (false !== strpos($this->getCommand(), ' -bs')) { - parent::start(); - } - } - - /** - * Set the command to invoke. - * - * If using -t mode you are strongly advised to include -oi or -i in the flags. - * For example: /usr/sbin/sendmail -oi -t - * Swift will append a -f flag if one is not present. - * - * The recommended mode is "-bs" since it is interactive and failure notifications - * are hence possible. - * - * @param string $command - * - * @return $this - */ - public function setCommand($command) - { - $this->params['command'] = $command; - - return $this; - } - - /** - * Get the sendmail command which will be invoked. - * - * @return string - */ - public function getCommand() - { - return $this->params['command']; - } - - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * - * The return value is the number of recipients who were accepted for delivery. - * NOTE: If using 'sendmail -t' you will not be aware of any failures until - * they bounce (i.e. send() will always return 100% success). - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $failedRecipients = (array) $failedRecipients; - $command = $this->getCommand(); - $buffer = $this->getBuffer(); - $count = 0; - - if (false !== strpos($command, ' -t')) { - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } - - if (false === strpos($command, ' -f')) { - $command .= ' -f'.escapeshellarg($this->getReversePath($message)); - } - - $buffer->initialize(array_merge($this->params, ['command' => $command])); - - if (false === strpos($command, ' -i') && false === strpos($command, ' -oi')) { - $buffer->setWriteTranslations(["\r\n" => "\n", "\n." => "\n.."]); - } else { - $buffer->setWriteTranslations(["\r\n" => "\n"]); - } - - $count = count((array) $message->getTo()) - + count((array) $message->getCc()) - + count((array) $message->getBcc()) - ; - $message->toByteStream($buffer); - $buffer->flushBuffers(); - $buffer->setWriteTranslations([]); - $buffer->terminate(); - - if ($evt) { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - $evt->setFailedRecipients($failedRecipients); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - $message->generateId(); - } elseif (false !== strpos($command, ' -bs')) { - $count = parent::send($message, $failedRecipients); - } else { - $this->throwException(new Swift_TransportException( - 'Unsupported sendmail command flags ['.$command.']. '. - 'Must be one of "-bs" or "-t" but can include additional flags.' - )); - } - - return $count; - } - - /** Get the params to initialize the buffer */ - protected function getBufferParams() - { - return $this->params; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php deleted file mode 100644 index e8ce65c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Stores Messages in a queue. - * - * @author Fabien Potencier - */ -class Swift_Transport_SpoolTransport implements Swift_Transport -{ - /** The spool instance */ - private $spool; - - /** The event dispatcher from the plugin API */ - private $eventDispatcher; - - /** - * Constructor. - */ - public function __construct(Swift_Events_EventDispatcher $eventDispatcher, Swift_Spool $spool = null) - { - $this->eventDispatcher = $eventDispatcher; - $this->spool = $spool; - } - - /** - * Sets the spool object. - * - * @return $this - */ - public function setSpool(Swift_Spool $spool) - { - $this->spool = $spool; - - return $this; - } - - /** - * Get the spool object. - * - * @return Swift_Spool - */ - public function getSpool() - { - return $this->spool; - } - - /** - * Tests if this Transport mechanism has started. - * - * @return bool - */ - public function isStarted() - { - return true; - } - - /** - * Starts this Transport mechanism. - */ - public function start() - { - } - - /** - * Stops this Transport mechanism. - */ - public function stop() - { - } - - /** - * {@inheritdoc} - */ - public function ping() - { - return true; - } - - /** - * Sends the given message. - * - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int The number of sent e-mail's - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { - $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } - - $success = $this->spool->queueMessage($message); - - if ($evt) { - $evt->setResult($success ? Swift_Events_SendEvent::RESULT_SPOOLED : Swift_Events_SendEvent::RESULT_FAILED); - $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - return 1; - } - - /** - * Register a plugin. - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->eventDispatcher->bindEventListener($plugin); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php deleted file mode 100644 index 5f7b8ac..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php +++ /dev/null @@ -1,329 +0,0 @@ -replacementFactory = $replacementFactory; - } - - /** - * Perform any initialization needed, using the given $params. - * - * Parameters will vary depending upon the type of IoBuffer used. - */ - public function initialize(array $params) - { - $this->params = $params; - switch ($params['type']) { - case self::TYPE_PROCESS: - $this->establishProcessConnection(); - break; - case self::TYPE_SOCKET: - default: - $this->establishSocketConnection(); - break; - } - } - - /** - * Set an individual param on the buffer (e.g. switching to SSL). - * - * @param string $param - * @param mixed $value - */ - public function setParam($param, $value) - { - if (isset($this->stream)) { - switch ($param) { - case 'timeout': - if ($this->stream) { - stream_set_timeout($this->stream, $value); - } - break; - - case 'blocking': - if ($this->stream) { - stream_set_blocking($this->stream, 1); - } - } - } - $this->params[$param] = $value; - } - - public function startTLS() - { - // STREAM_CRYPTO_METHOD_TLS_CLIENT only allow tls1.0 connections (some php versions) - // To support modern tls we allow explicit tls1.0, tls1.1, tls1.2 - // Ssl3 and older are not allowed because they are vulnerable - // @TODO make tls arguments configurable - return stream_socket_enable_crypto($this->stream, true, STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT); - } - - /** - * Perform any shutdown logic needed. - */ - public function terminate() - { - if (isset($this->stream)) { - switch ($this->params['type']) { - case self::TYPE_PROCESS: - fclose($this->in); - fclose($this->out); - proc_close($this->stream); - break; - case self::TYPE_SOCKET: - default: - fclose($this->stream); - break; - } - } - $this->stream = null; - $this->out = null; - $this->in = null; - } - - /** - * Set an array of string replacements which should be made on data written - * to the buffer. - * - * This could replace LF with CRLF for example. - * - * @param string[] $replacements - */ - public function setWriteTranslations(array $replacements) - { - foreach ($this->translations as $search => $replace) { - if (!isset($replacements[$search])) { - $this->removeFilter($search); - unset($this->translations[$search]); - } - } - - foreach ($replacements as $search => $replace) { - if (!isset($this->translations[$search])) { - $this->addFilter( - $this->replacementFactory->createFilter($search, $replace), $search - ); - $this->translations[$search] = true; - } - } - } - - /** - * Get a line of output (including any CRLF). - * - * The $sequence number comes from any writes and may or may not be used - * depending upon the implementation. - * - * @param int $sequence of last write to scan from - * - * @return string - * - * @throws Swift_IoException - */ - public function readLine($sequence) - { - if (isset($this->out) && !feof($this->out)) { - $line = fgets($this->out); - if (0 == strlen($line)) { - $metas = stream_get_meta_data($this->out); - if ($metas['timed_out']) { - throw new Swift_IoException( - 'Connection to '. - $this->getReadConnectionDescription(). - ' Timed Out' - ); - } - } - - return $line; - } - } - - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. - * - * If less bytes exist than are requested the remaining bytes are given instead. - * If no bytes are remaining at all, boolean false is returned. - * - * @param int $length - * - * @return string|bool - * - * @throws Swift_IoException - */ - public function read($length) - { - if (isset($this->out) && !feof($this->out)) { - $ret = fread($this->out, $length); - if (0 == strlen($ret)) { - $metas = stream_get_meta_data($this->out); - if ($metas['timed_out']) { - throw new Swift_IoException( - 'Connection to '. - $this->getReadConnectionDescription(). - ' Timed Out' - ); - } - } - - return $ret; - } - } - - /** Not implemented */ - public function setReadPointer($byteOffset) - { - } - - /** Flush the stream contents */ - protected function flush() - { - if (isset($this->in)) { - fflush($this->in); - } - } - - /** Write this bytes to the stream */ - protected function doCommit($bytes) - { - if (isset($this->in)) { - $bytesToWrite = strlen($bytes); - $totalBytesWritten = 0; - - while ($totalBytesWritten < $bytesToWrite) { - $bytesWritten = fwrite($this->in, substr($bytes, $totalBytesWritten)); - if (false === $bytesWritten || 0 === $bytesWritten) { - break; - } - - $totalBytesWritten += $bytesWritten; - } - - if ($totalBytesWritten > 0) { - return ++$this->sequence; - } - } - } - - /** - * Establishes a connection to a remote server. - */ - private function establishSocketConnection() - { - $host = $this->params['host']; - if (!empty($this->params['protocol'])) { - $host = $this->params['protocol'].'://'.$host; - } - $timeout = 15; - if (!empty($this->params['timeout'])) { - $timeout = $this->params['timeout']; - } - $options = []; - if (!empty($this->params['sourceIp'])) { - $options['socket']['bindto'] = $this->params['sourceIp'].':0'; - } - - if (isset($this->params['stream_context_options'])) { - $options = array_merge($options, $this->params['stream_context_options']); - } - $streamContext = stream_context_create($options); - - set_error_handler(function ($type, $msg) { - throw new Swift_TransportException('Connection could not be established with host '.$this->params['host'].' :'.$msg); - }); - try { - $this->stream = stream_socket_client($host.':'.$this->params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext); - } finally { - restore_error_handler(); - } - - if (!empty($this->params['blocking'])) { - stream_set_blocking($this->stream, 1); - } else { - stream_set_blocking($this->stream, 0); - } - stream_set_timeout($this->stream, $timeout); - $this->in = &$this->stream; - $this->out = &$this->stream; - } - - /** - * Opens a process for input/output. - */ - private function establishProcessConnection() - { - $command = $this->params['command']; - $descriptorSpec = [ - 0 => ['pipe', 'r'], - 1 => ['pipe', 'w'], - 2 => ['pipe', 'w'], - ]; - $pipes = []; - $this->stream = proc_open($command, $descriptorSpec, $pipes); - stream_set_blocking($pipes[2], 0); - if ($err = stream_get_contents($pipes[2])) { - throw new Swift_TransportException( - 'Process could not be started ['.$err.']' - ); - } - $this->in = &$pipes[0]; - $this->out = &$pipes[1]; - } - - private function getReadConnectionDescription() - { - switch ($this->params['type']) { - case self::TYPE_PROCESS: - return 'Process '.$this->params['command']; - break; - - case self::TYPE_SOCKET: - default: - $host = $this->params['host']; - if (!empty($this->params['protocol'])) { - $host = $this->params['protocol'].'://'.$host; - } - $host .= ':'.$this->params['port']; - - return $host; - break; - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/TransportException.php b/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/TransportException.php deleted file mode 100644 index c741745..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/TransportException.php +++ /dev/null @@ -1,28 +0,0 @@ -register('cache') - ->asAliasOf('cache.array') - - ->register('tempdir') - ->asValue('/tmp') - - ->register('cache.null') - ->asSharedInstanceOf('Swift_KeyCache_NullKeyCache') - - ->register('cache.array') - ->asSharedInstanceOf('Swift_KeyCache_ArrayKeyCache') - ->withDependencies(['cache.inputstream']) - - ->register('cache.disk') - ->asSharedInstanceOf('Swift_KeyCache_DiskKeyCache') - ->withDependencies(['cache.inputstream', 'tempdir']) - - ->register('cache.inputstream') - ->asNewInstanceOf('Swift_KeyCache_SimpleKeyCacheInputStream') -; diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/message_deps.php b/lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/message_deps.php deleted file mode 100644 index 64d69d2..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/message_deps.php +++ /dev/null @@ -1,9 +0,0 @@ -register('message.message') - ->asNewInstanceOf('Swift_Message') - - ->register('message.mimepart') - ->asNewInstanceOf('Swift_MimePart') -; diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/mime_deps.php b/lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/mime_deps.php deleted file mode 100644 index 307756c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/mime_deps.php +++ /dev/null @@ -1,134 +0,0 @@ -register('properties.charset') - ->asValue('utf-8') - - ->register('email.validator') - ->asSharedInstanceOf('Egulias\EmailValidator\EmailValidator') - - ->register('mime.idgenerator.idright') - // As SERVER_NAME can come from the user in certain configurations, check that - // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use - // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. - ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'swift.generated') - - ->register('mime.idgenerator') - ->asSharedInstanceOf('Swift_Mime_IdGenerator') - ->withDependencies([ - 'mime.idgenerator.idright', - ]) - - ->register('mime.message') - ->asNewInstanceOf('Swift_Mime_SimpleMessage') - ->withDependencies([ - 'mime.headerset', - 'mime.textcontentencoder', - 'cache', - 'mime.idgenerator', - 'properties.charset', - ]) - - ->register('mime.part') - ->asNewInstanceOf('Swift_Mime_MimePart') - ->withDependencies([ - 'mime.headerset', - 'mime.textcontentencoder', - 'cache', - 'mime.idgenerator', - 'properties.charset', - ]) - - ->register('mime.attachment') - ->asNewInstanceOf('Swift_Mime_Attachment') - ->withDependencies([ - 'mime.headerset', - 'mime.base64contentencoder', - 'cache', - 'mime.idgenerator', - ]) - ->addConstructorValue($swift_mime_types) - - ->register('mime.embeddedfile') - ->asNewInstanceOf('Swift_Mime_EmbeddedFile') - ->withDependencies([ - 'mime.headerset', - 'mime.base64contentencoder', - 'cache', - 'mime.idgenerator', - ]) - ->addConstructorValue($swift_mime_types) - - ->register('mime.headerfactory') - ->asNewInstanceOf('Swift_Mime_SimpleHeaderFactory') - ->withDependencies([ - 'mime.qpheaderencoder', - 'mime.rfc2231encoder', - 'email.validator', - 'properties.charset', - 'address.idnaddressencoder', - ]) - - ->register('mime.headerset') - ->asNewInstanceOf('Swift_Mime_SimpleHeaderSet') - ->withDependencies(['mime.headerfactory', 'properties.charset']) - - ->register('mime.qpheaderencoder') - ->asNewInstanceOf('Swift_Mime_HeaderEncoder_QpHeaderEncoder') - ->withDependencies(['mime.charstream']) - - ->register('mime.base64headerencoder') - ->asNewInstanceOf('Swift_Mime_HeaderEncoder_Base64HeaderEncoder') - ->withDependencies(['mime.charstream']) - - ->register('mime.charstream') - ->asNewInstanceOf('Swift_CharacterStream_NgCharacterStream') - ->withDependencies(['mime.characterreaderfactory', 'properties.charset']) - - ->register('mime.bytecanonicalizer') - ->asSharedInstanceOf('Swift_StreamFilters_ByteArrayReplacementFilter') - ->addConstructorValue([[0x0D, 0x0A], [0x0D], [0x0A]]) - ->addConstructorValue([[0x0A], [0x0A], [0x0D, 0x0A]]) - - ->register('mime.characterreaderfactory') - ->asSharedInstanceOf('Swift_CharacterReaderFactory_SimpleCharacterReaderFactory') - - ->register('mime.textcontentencoder') - ->asAliasOf('mime.qpcontentencoder') - - ->register('mime.safeqpcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') - ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) - - ->register('mime.rawcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_RawContentEncoder') - - ->register('mime.nativeqpcontentencoder') - ->withDependencies(['properties.charset']) - ->asNewInstanceOf('Swift_Mime_ContentEncoder_NativeQpContentEncoder') - - ->register('mime.qpcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoderProxy') - ->withDependencies(['mime.safeqpcontentencoder', 'mime.nativeqpcontentencoder', 'properties.charset']) - - ->register('mime.7bitcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') - ->addConstructorValue('7bit') - ->addConstructorValue(true) - - ->register('mime.8bitcontentencoder') - ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') - ->addConstructorValue('8bit') - ->addConstructorValue(true) - - ->register('mime.base64contentencoder') - ->asSharedInstanceOf('Swift_Mime_ContentEncoder_Base64ContentEncoder') - - ->register('mime.rfc2231encoder') - ->asNewInstanceOf('Swift_Encoder_Rfc2231Encoder') - ->withDependencies(['mime.charstream']) -; - -unset($swift_mime_types); diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/transport_deps.php b/lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/transport_deps.php deleted file mode 100644 index 34a63c7..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/dependency_maps/transport_deps.php +++ /dev/null @@ -1,97 +0,0 @@ -register('transport.localdomain') - // As SERVER_NAME can come from the user in certain configurations, check that - // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use - // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. - ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? trim($_SERVER['SERVER_NAME'], '[]') : '127.0.0.1') - - ->register('transport.smtp') - ->asNewInstanceOf('Swift_Transport_EsmtpTransport') - ->withDependencies([ - 'transport.buffer', - 'transport.smtphandlers', - 'transport.eventdispatcher', - 'transport.localdomain', - 'address.idnaddressencoder', - ]) - - ->register('transport.sendmail') - ->asNewInstanceOf('Swift_Transport_SendmailTransport') - ->withDependencies([ - 'transport.buffer', - 'transport.eventdispatcher', - 'transport.localdomain', - ]) - - ->register('transport.loadbalanced') - ->asNewInstanceOf('Swift_Transport_LoadBalancedTransport') - - ->register('transport.failover') - ->asNewInstanceOf('Swift_Transport_FailoverTransport') - - ->register('transport.spool') - ->asNewInstanceOf('Swift_Transport_SpoolTransport') - ->withDependencies(['transport.eventdispatcher']) - - ->register('transport.null') - ->asNewInstanceOf('Swift_Transport_NullTransport') - ->withDependencies(['transport.eventdispatcher']) - - ->register('transport.buffer') - ->asNewInstanceOf('Swift_Transport_StreamBuffer') - ->withDependencies(['transport.replacementfactory']) - - ->register('transport.smtphandlers') - ->asArray() - ->withDependencies(['transport.authhandler']) - - ->register('transport.authhandler') - ->asNewInstanceOf('Swift_Transport_Esmtp_AuthHandler') - ->withDependencies(['transport.authhandlers']) - - ->register('transport.authhandlers') - ->asArray() - ->withDependencies([ - 'transport.crammd5auth', - 'transport.loginauth', - 'transport.plainauth', - 'transport.ntlmauth', - 'transport.xoauth2auth', - ]) - - ->register('transport.smtputf8handler') - ->asNewInstanceOf('Swift_Transport_Esmtp_SmtpUtf8Handler') - - ->register('transport.8bitmimehandler') - ->asNewInstanceOf('Swift_Transport_Esmtp_EightBitMimeHandler') - ->addConstructorValue('8BITMIME') - - ->register('transport.crammd5auth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_CramMd5Authenticator') - - ->register('transport.loginauth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_LoginAuthenticator') - - ->register('transport.plainauth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_PlainAuthenticator') - - ->register('transport.xoauth2auth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_XOAuth2Authenticator') - - ->register('transport.ntlmauth') - ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_NTLMAuthenticator') - - ->register('transport.eventdispatcher') - ->asNewInstanceOf('Swift_Events_SimpleEventDispatcher') - - ->register('transport.replacementfactory') - ->asSharedInstanceOf('Swift_StreamFilters_StringReplacementFilterFactory') - - ->register('address.idnaddressencoder') - ->asNewInstanceOf('Swift_AddressEncoder_IdnAddressEncoder') - - ->register('address.utf8addressencoder') - ->asNewInstanceOf('Swift_AddressEncoder_Utf8AddressEncoder') -; diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/mime_types.php b/lib/vendor/swiftmailer/swiftmailer/lib/mime_types.php deleted file mode 100644 index 72c6fd2..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/mime_types.php +++ /dev/null @@ -1,1007 +0,0 @@ - 'text/vnd.in3d.3dml', - '3ds' => 'image/x-3ds', - '3g2' => 'video/3gpp2', - '3gp' => 'video/3gpp', - '7z' => 'application/x-7z-compressed', - 'aab' => 'application/x-authorware-bin', - 'aac' => 'audio/x-aac', - 'aam' => 'application/x-authorware-map', - 'aas' => 'application/x-authorware-seg', - 'abw' => 'application/x-abiword', - 'ac' => 'application/pkix-attr-cert', - 'acc' => 'application/vnd.americandynamics.acc', - 'ace' => 'application/x-ace-compressed', - 'acu' => 'application/vnd.acucobol', - 'acutc' => 'application/vnd.acucorp', - 'adp' => 'audio/adpcm', - 'aep' => 'application/vnd.audiograph', - 'afm' => 'application/x-font-type1', - 'afp' => 'application/vnd.ibm.modcap', - 'ahead' => 'application/vnd.ahead.space', - 'ai' => 'application/postscript', - 'aif' => 'audio/x-aiff', - 'aifc' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'air' => 'application/vnd.adobe.air-application-installer-package+zip', - 'ait' => 'application/vnd.dvb.ait', - 'ami' => 'application/vnd.amiga.ami', - 'apk' => 'application/vnd.android.package-archive', - 'appcache' => 'text/cache-manifest', - 'apr' => 'application/vnd.lotus-approach', - 'aps' => 'application/postscript', - 'arc' => 'application/x-freearc', - 'asc' => 'application/pgp-signature', - 'asf' => 'video/x-ms-asf', - 'asm' => 'text/x-asm', - 'aso' => 'application/vnd.accpac.simply.aso', - 'asx' => 'video/x-ms-asf', - 'atc' => 'application/vnd.acucorp', - 'atom' => 'application/atom+xml', - 'atomcat' => 'application/atomcat+xml', - 'atomsvc' => 'application/atomsvc+xml', - 'atx' => 'application/vnd.antix.game-component', - 'au' => 'audio/basic', - 'avi' => 'video/x-msvideo', - 'aw' => 'application/applixware', - 'azf' => 'application/vnd.airzip.filesecure.azf', - 'azs' => 'application/vnd.airzip.filesecure.azs', - 'azw' => 'application/vnd.amazon.ebook', - 'bat' => 'application/x-msdownload', - 'bcpio' => 'application/x-bcpio', - 'bdf' => 'application/x-font-bdf', - 'bdm' => 'application/vnd.syncml.dm+wbxml', - 'bed' => 'application/vnd.realvnc.bed', - 'bh2' => 'application/vnd.fujitsu.oasysprs', - 'bin' => 'application/octet-stream', - 'blb' => 'application/x-blorb', - 'blorb' => 'application/x-blorb', - 'bmi' => 'application/vnd.bmi', - 'bmp' => 'image/bmp', - 'book' => 'application/vnd.framemaker', - 'box' => 'application/vnd.previewsystems.box', - 'boz' => 'application/x-bzip2', - 'bpk' => 'application/octet-stream', - 'btif' => 'image/prs.btif', - 'bz' => 'application/x-bzip', - 'bz2' => 'application/x-bzip2', - 'c' => 'text/x-c', - 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', - 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', - 'c4d' => 'application/vnd.clonk.c4group', - 'c4f' => 'application/vnd.clonk.c4group', - 'c4g' => 'application/vnd.clonk.c4group', - 'c4p' => 'application/vnd.clonk.c4group', - 'c4u' => 'application/vnd.clonk.c4group', - 'cab' => 'application/vnd.ms-cab-compressed', - 'caf' => 'audio/x-caf', - 'cap' => 'application/vnd.tcpdump.pcap', - 'car' => 'application/vnd.curl.car', - 'cat' => 'application/vnd.ms-pki.seccat', - 'cb7' => 'application/x-cbr', - 'cba' => 'application/x-cbr', - 'cbr' => 'application/x-cbr', - 'cbt' => 'application/x-cbr', - 'cbz' => 'application/x-cbr', - 'cc' => 'text/x-c', - 'cct' => 'application/x-director', - 'ccxml' => 'application/ccxml+xml', - 'cdbcmsg' => 'application/vnd.contact.cmsg', - 'cdf' => 'application/x-netcdf', - 'cdkey' => 'application/vnd.mediastation.cdkey', - 'cdmia' => 'application/cdmi-capability', - 'cdmic' => 'application/cdmi-container', - 'cdmid' => 'application/cdmi-domain', - 'cdmio' => 'application/cdmi-object', - 'cdmiq' => 'application/cdmi-queue', - 'cdx' => 'chemical/x-cdx', - 'cdxml' => 'application/vnd.chemdraw+xml', - 'cdy' => 'application/vnd.cinderella', - 'cer' => 'application/pkix-cert', - 'cfs' => 'application/x-cfs-compressed', - 'cgm' => 'image/cgm', - 'chat' => 'application/x-chat', - 'chm' => 'application/vnd.ms-htmlhelp', - 'chrt' => 'application/vnd.kde.kchart', - 'cif' => 'chemical/x-cif', - 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', - 'cil' => 'application/vnd.ms-artgalry', - 'cla' => 'application/vnd.claymore', - 'class' => 'application/java-vm', - 'clkk' => 'application/vnd.crick.clicker.keyboard', - 'clkp' => 'application/vnd.crick.clicker.palette', - 'clkt' => 'application/vnd.crick.clicker.template', - 'clkw' => 'application/vnd.crick.clicker.wordbank', - 'clkx' => 'application/vnd.crick.clicker', - 'clp' => 'application/x-msclip', - 'cmc' => 'application/vnd.cosmocaller', - 'cmdf' => 'chemical/x-cmdf', - 'cml' => 'chemical/x-cml', - 'cmp' => 'application/vnd.yellowriver-custom-menu', - 'cmx' => 'image/x-cmx', - 'cod' => 'application/vnd.rim.cod', - 'com' => 'application/x-msdownload', - 'conf' => 'text/plain', - 'cpio' => 'application/x-cpio', - 'cpp' => 'text/x-c', - 'cpt' => 'application/mac-compactpro', - 'crd' => 'application/x-mscardfile', - 'crl' => 'application/pkix-crl', - 'crt' => 'application/x-x509-ca-cert', - 'csh' => 'application/x-csh', - 'csml' => 'chemical/x-csml', - 'csp' => 'application/vnd.commonspace', - 'css' => 'text/css', - 'cst' => 'application/x-director', - 'csv' => 'text/csv', - 'cu' => 'application/cu-seeme', - 'curl' => 'text/vnd.curl', - 'cww' => 'application/prs.cww', - 'cxt' => 'application/x-director', - 'cxx' => 'text/x-c', - 'dae' => 'model/vnd.collada+xml', - 'daf' => 'application/vnd.mobius.daf', - 'dart' => 'application/vnd.dart', - 'dataless' => 'application/vnd.fdsn.seed', - 'davmount' => 'application/davmount+xml', - 'dbk' => 'application/docbook+xml', - 'dcr' => 'application/x-director', - 'dcurl' => 'text/vnd.curl.dcurl', - 'dd2' => 'application/vnd.oma.dd2+xml', - 'ddd' => 'application/vnd.fujixerox.ddd', - 'deb' => 'application/x-debian-package', - 'def' => 'text/plain', - 'deploy' => 'application/octet-stream', - 'der' => 'application/x-x509-ca-cert', - 'dfac' => 'application/vnd.dreamfactory', - 'dgc' => 'application/x-dgc-compressed', - 'dic' => 'text/x-c', - 'dir' => 'application/x-director', - 'dis' => 'application/vnd.mobius.dis', - 'dist' => 'application/octet-stream', - 'distz' => 'application/octet-stream', - 'djv' => 'image/vnd.djvu', - 'djvu' => 'image/vnd.djvu', - 'dll' => 'application/x-msdownload', - 'dmg' => 'application/x-apple-diskimage', - 'dmp' => 'application/vnd.tcpdump.pcap', - 'dms' => 'application/octet-stream', - 'dna' => 'application/vnd.dna', - 'doc' => 'application/msword', - 'docm' => 'application/vnd.ms-word.document.macroenabled.12', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'dot' => 'application/msword', - 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', - 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', - 'dp' => 'application/vnd.osgi.dp', - 'dpg' => 'application/vnd.dpgraph', - 'dra' => 'audio/vnd.dra', - 'dsc' => 'text/prs.lines.tag', - 'dssc' => 'application/dssc+der', - 'dtb' => 'application/x-dtbook+xml', - 'dtd' => 'application/xml-dtd', - 'dts' => 'audio/vnd.dts', - 'dtshd' => 'audio/vnd.dts.hd', - 'dump' => 'application/octet-stream', - 'dvb' => 'video/vnd.dvb.file', - 'dvi' => 'application/x-dvi', - 'dwf' => 'model/vnd.dwf', - 'dwg' => 'image/vnd.dwg', - 'dxf' => 'image/vnd.dxf', - 'dxp' => 'application/vnd.spotfire.dxp', - 'dxr' => 'application/x-director', - 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', - 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', - 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', - 'ecma' => 'application/ecmascript', - 'edm' => 'application/vnd.novadigm.edm', - 'edx' => 'application/vnd.novadigm.edx', - 'efif' => 'application/vnd.picsel', - 'ei6' => 'application/vnd.pg.osasli', - 'elc' => 'application/octet-stream', - 'emf' => 'application/x-msmetafile', - 'eml' => 'message/rfc822', - 'emma' => 'application/emma+xml', - 'emz' => 'application/x-msmetafile', - 'eol' => 'audio/vnd.digital-winds', - 'eot' => 'application/vnd.ms-fontobject', - 'eps' => 'application/postscript', - 'epub' => 'application/epub+zip', - 'es3' => 'application/vnd.eszigno3+xml', - 'esa' => 'application/vnd.osgi.subsystem', - 'esf' => 'application/vnd.epson.esf', - 'et3' => 'application/vnd.eszigno3+xml', - 'etx' => 'text/x-setext', - 'eva' => 'application/x-eva', - 'evy' => 'application/x-envoy', - 'exe' => 'application/x-msdownload', - 'exi' => 'application/exi', - 'ext' => 'application/vnd.novadigm.ext', - 'ez' => 'application/andrew-inset', - 'ez2' => 'application/vnd.ezpix-album', - 'ez3' => 'application/vnd.ezpix-package', - 'f' => 'text/x-fortran', - 'f4v' => 'video/x-f4v', - 'f77' => 'text/x-fortran', - 'f90' => 'text/x-fortran', - 'fbs' => 'image/vnd.fastbidsheet', - 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', - 'fcs' => 'application/vnd.isac.fcs', - 'fdf' => 'application/vnd.fdf', - 'fe_launch' => 'application/vnd.denovo.fcselayout-link', - 'fg5' => 'application/vnd.fujitsu.oasysgp', - 'fgd' => 'application/x-director', - 'fh' => 'image/x-freehand', - 'fh4' => 'image/x-freehand', - 'fh5' => 'image/x-freehand', - 'fh7' => 'image/x-freehand', - 'fhc' => 'image/x-freehand', - 'fig' => 'application/x-xfig', - 'flac' => 'audio/x-flac', - 'fli' => 'video/x-fli', - 'flo' => 'application/vnd.micrografx.flo', - 'flv' => 'video/x-flv', - 'flw' => 'application/vnd.kde.kivio', - 'flx' => 'text/vnd.fmi.flexstor', - 'fly' => 'text/vnd.fly', - 'fm' => 'application/vnd.framemaker', - 'fnc' => 'application/vnd.frogans.fnc', - 'for' => 'text/x-fortran', - 'fpx' => 'image/vnd.fpx', - 'frame' => 'application/vnd.framemaker', - 'fsc' => 'application/vnd.fsc.weblaunch', - 'fst' => 'image/vnd.fst', - 'ftc' => 'application/vnd.fluxtime.clip', - 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', - 'fvt' => 'video/vnd.fvt', - 'fxp' => 'application/vnd.adobe.fxp', - 'fxpl' => 'application/vnd.adobe.fxp', - 'fzs' => 'application/vnd.fuzzysheet', - 'g2w' => 'application/vnd.geoplan', - 'g3' => 'image/g3fax', - 'g3w' => 'application/vnd.geospace', - 'gac' => 'application/vnd.groove-account', - 'gam' => 'application/x-tads', - 'gbr' => 'application/rpki-ghostbusters', - 'gca' => 'application/x-gca-compressed', - 'gdl' => 'model/vnd.gdl', - 'geo' => 'application/vnd.dynageo', - 'gex' => 'application/vnd.geometry-explorer', - 'ggb' => 'application/vnd.geogebra.file', - 'ggt' => 'application/vnd.geogebra.tool', - 'ghf' => 'application/vnd.groove-help', - 'gif' => 'image/gif', - 'gim' => 'application/vnd.groove-identity-message', - 'gml' => 'application/gml+xml', - 'gmx' => 'application/vnd.gmx', - 'gnumeric' => 'application/x-gnumeric', - 'gph' => 'application/vnd.flographit', - 'gpx' => 'application/gpx+xml', - 'gqf' => 'application/vnd.grafeq', - 'gqs' => 'application/vnd.grafeq', - 'gram' => 'application/srgs', - 'gramps' => 'application/x-gramps-xml', - 'gre' => 'application/vnd.geometry-explorer', - 'grv' => 'application/vnd.groove-injector', - 'grxml' => 'application/srgs+xml', - 'gsf' => 'application/x-font-ghostscript', - 'gtar' => 'application/x-gtar', - 'gtm' => 'application/vnd.groove-tool-message', - 'gtw' => 'model/vnd.gtw', - 'gv' => 'text/vnd.graphviz', - 'gxf' => 'application/gxf', - 'gxt' => 'application/vnd.geonext', - 'gz' => 'application/x-gzip', - 'h' => 'text/x-c', - 'h261' => 'video/h261', - 'h263' => 'video/h263', - 'h264' => 'video/h264', - 'hal' => 'application/vnd.hal+xml', - 'hbci' => 'application/vnd.hbci', - 'hdf' => 'application/x-hdf', - 'hh' => 'text/x-c', - 'hlp' => 'application/winhlp', - 'hpgl' => 'application/vnd.hp-hpgl', - 'hpid' => 'application/vnd.hp-hpid', - 'hps' => 'application/vnd.hp-hps', - 'hqx' => 'application/mac-binhex40', - 'htke' => 'application/vnd.kenameaapp', - 'htm' => 'text/html', - 'html' => 'text/html', - 'hvd' => 'application/vnd.yamaha.hv-dic', - 'hvp' => 'application/vnd.yamaha.hv-voice', - 'hvs' => 'application/vnd.yamaha.hv-script', - 'i2g' => 'application/vnd.intergeo', - 'icc' => 'application/vnd.iccprofile', - 'ice' => 'x-conference/x-cooltalk', - 'icm' => 'application/vnd.iccprofile', - 'ico' => 'image/x-icon', - 'ics' => 'text/calendar', - 'ief' => 'image/ief', - 'ifb' => 'text/calendar', - 'ifm' => 'application/vnd.shana.informed.formdata', - 'iges' => 'model/iges', - 'igl' => 'application/vnd.igloader', - 'igm' => 'application/vnd.insors.igm', - 'igs' => 'model/iges', - 'igx' => 'application/vnd.micrografx.igx', - 'iif' => 'application/vnd.shana.informed.interchange', - 'imp' => 'application/vnd.accpac.simply.imp', - 'ims' => 'application/vnd.ms-ims', - 'in' => 'text/plain', - 'ink' => 'application/inkml+xml', - 'inkml' => 'application/inkml+xml', - 'install' => 'application/x-install-instructions', - 'iota' => 'application/vnd.astraea-software.iota', - 'ipfix' => 'application/ipfix', - 'ipk' => 'application/vnd.shana.informed.package', - 'irm' => 'application/vnd.ibm.rights-management', - 'irp' => 'application/vnd.irepository.package+xml', - 'iso' => 'application/x-iso9660-image', - 'itp' => 'application/vnd.shana.informed.formtemplate', - 'ivp' => 'application/vnd.immervision-ivp', - 'ivu' => 'application/vnd.immervision-ivu', - 'jad' => 'text/vnd.sun.j2me.app-descriptor', - 'jam' => 'application/vnd.jam', - 'jar' => 'application/java-archive', - 'java' => 'text/x-java-source', - 'jisp' => 'application/vnd.jisp', - 'jlt' => 'application/vnd.hp-jlyt', - 'jnlp' => 'application/x-java-jnlp-file', - 'joda' => 'application/vnd.joost.joda-archive', - 'jpe' => 'image/jpeg', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'jpgm' => 'video/jpm', - 'jpgv' => 'video/jpeg', - 'jpm' => 'video/jpm', - 'js' => 'application/javascript', - 'json' => 'application/json', - 'jsonml' => 'application/jsonml+json', - 'kar' => 'audio/midi', - 'karbon' => 'application/vnd.kde.karbon', - 'kfo' => 'application/vnd.kde.kformula', - 'kia' => 'application/vnd.kidspiration', - 'kml' => 'application/vnd.google-earth.kml+xml', - 'kmz' => 'application/vnd.google-earth.kmz', - 'kne' => 'application/vnd.kinar', - 'knp' => 'application/vnd.kinar', - 'kon' => 'application/vnd.kde.kontour', - 'kpr' => 'application/vnd.kde.kpresenter', - 'kpt' => 'application/vnd.kde.kpresenter', - 'kpxx' => 'application/vnd.ds-keypoint', - 'ksp' => 'application/vnd.kde.kspread', - 'ktr' => 'application/vnd.kahootz', - 'ktx' => 'image/ktx', - 'ktz' => 'application/vnd.kahootz', - 'kwd' => 'application/vnd.kde.kword', - 'kwt' => 'application/vnd.kde.kword', - 'lasxml' => 'application/vnd.las.las+xml', - 'latex' => 'application/x-latex', - 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', - 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', - 'les' => 'application/vnd.hhe.lesson-player', - 'lha' => 'application/x-lzh-compressed', - 'link66' => 'application/vnd.route66.link66+xml', - 'list' => 'text/plain', - 'list3820' => 'application/vnd.ibm.modcap', - 'listafp' => 'application/vnd.ibm.modcap', - 'lnk' => 'application/x-ms-shortcut', - 'log' => 'text/plain', - 'lostxml' => 'application/lost+xml', - 'lrf' => 'application/octet-stream', - 'lrm' => 'application/vnd.ms-lrm', - 'ltf' => 'application/vnd.frogans.ltf', - 'lvp' => 'audio/vnd.lucent.voice', - 'lwp' => 'application/vnd.lotus-wordpro', - 'lzh' => 'application/x-lzh-compressed', - 'm13' => 'application/x-msmediaview', - 'm14' => 'application/x-msmediaview', - 'm1v' => 'video/mpeg', - 'm21' => 'application/mp21', - 'm2a' => 'audio/mpeg', - 'm2v' => 'video/mpeg', - 'm3a' => 'audio/mpeg', - 'm3u' => 'audio/x-mpegurl', - 'm3u8' => 'application/vnd.apple.mpegurl', - 'm4a' => 'audio/mp4', - 'm4u' => 'video/vnd.mpegurl', - 'm4v' => 'video/x-m4v', - 'ma' => 'application/mathematica', - 'mads' => 'application/mads+xml', - 'mag' => 'application/vnd.ecowin.chart', - 'maker' => 'application/vnd.framemaker', - 'man' => 'text/troff', - 'mar' => 'application/octet-stream', - 'mathml' => 'application/mathml+xml', - 'mb' => 'application/mathematica', - 'mbk' => 'application/vnd.mobius.mbk', - 'mbox' => 'application/mbox', - 'mc1' => 'application/vnd.medcalcdata', - 'mcd' => 'application/vnd.mcd', - 'mcurl' => 'text/vnd.curl.mcurl', - 'mdb' => 'application/x-msaccess', - 'mdi' => 'image/vnd.ms-modi', - 'me' => 'text/troff', - 'mesh' => 'model/mesh', - 'meta4' => 'application/metalink4+xml', - 'metalink' => 'application/metalink+xml', - 'mets' => 'application/mets+xml', - 'mfm' => 'application/vnd.mfmp', - 'mft' => 'application/rpki-manifest', - 'mgp' => 'application/vnd.osgeo.mapguide.package', - 'mgz' => 'application/vnd.proteus.magazine', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mie' => 'application/x-mie', - 'mif' => 'application/vnd.mif', - 'mime' => 'message/rfc822', - 'mj2' => 'video/mj2', - 'mjp2' => 'video/mj2', - 'mk3d' => 'video/x-matroska', - 'mka' => 'audio/x-matroska', - 'mks' => 'video/x-matroska', - 'mkv' => 'video/x-matroska', - 'mlp' => 'application/vnd.dolby.mlp', - 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', - 'mmf' => 'application/vnd.smaf', - 'mmr' => 'image/vnd.fujixerox.edmics-mmr', - 'mng' => 'video/x-mng', - 'mny' => 'application/x-msmoney', - 'mobi' => 'application/x-mobipocket-ebook', - 'mods' => 'application/mods+xml', - 'mov' => 'video/quicktime', - 'movie' => 'video/x-sgi-movie', - 'mp2' => 'audio/mpeg', - 'mp21' => 'application/mp21', - 'mp2a' => 'audio/mpeg', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'mp4a' => 'audio/mp4', - 'mp4s' => 'application/mp4', - 'mp4v' => 'video/mp4', - 'mpc' => 'application/vnd.mophun.certificate', - 'mpe' => 'video/mpeg', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mpg4' => 'video/mp4', - 'mpga' => 'audio/mpeg', - 'mpkg' => 'application/vnd.apple.installer+xml', - 'mpm' => 'application/vnd.blueice.multipass', - 'mpn' => 'application/vnd.mophun.application', - 'mpp' => 'application/vnd.ms-project', - 'mpt' => 'application/vnd.ms-project', - 'mpy' => 'application/vnd.ibm.minipay', - 'mqy' => 'application/vnd.mobius.mqy', - 'mrc' => 'application/marc', - 'mrcx' => 'application/marcxml+xml', - 'ms' => 'text/troff', - 'mscml' => 'application/mediaservercontrol+xml', - 'mseed' => 'application/vnd.fdsn.mseed', - 'mseq' => 'application/vnd.mseq', - 'msf' => 'application/vnd.epson.msf', - 'msh' => 'model/mesh', - 'msi' => 'application/x-msdownload', - 'msl' => 'application/vnd.mobius.msl', - 'msty' => 'application/vnd.muvee.style', - 'mts' => 'model/vnd.mts', - 'mus' => 'application/vnd.musician', - 'musicxml' => 'application/vnd.recordare.musicxml+xml', - 'mvb' => 'application/x-msmediaview', - 'mwf' => 'application/vnd.mfer', - 'mxf' => 'application/mxf', - 'mxl' => 'application/vnd.recordare.musicxml', - 'mxml' => 'application/xv+xml', - 'mxs' => 'application/vnd.triscape.mxs', - 'mxu' => 'video/vnd.mpegurl', - 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', - 'n3' => 'text/n3', - 'nb' => 'application/mathematica', - 'nbp' => 'application/vnd.wolfram.player', - 'nc' => 'application/x-netcdf', - 'ncx' => 'application/x-dtbncx+xml', - 'nfo' => 'text/x-nfo', - 'ngdat' => 'application/vnd.nokia.n-gage.data', - 'nitf' => 'application/vnd.nitf', - 'nlu' => 'application/vnd.neurolanguage.nlu', - 'nml' => 'application/vnd.enliven', - 'nnd' => 'application/vnd.noblenet-directory', - 'nns' => 'application/vnd.noblenet-sealer', - 'nnw' => 'application/vnd.noblenet-web', - 'npx' => 'image/vnd.net-fpx', - 'nsc' => 'application/x-conference', - 'nsf' => 'application/vnd.lotus-notes', - 'ntf' => 'application/vnd.nitf', - 'nzb' => 'application/x-nzb', - 'oa2' => 'application/vnd.fujitsu.oasys2', - 'oa3' => 'application/vnd.fujitsu.oasys3', - 'oas' => 'application/vnd.fujitsu.oasys', - 'obd' => 'application/x-msbinder', - 'obj' => 'application/x-tgif', - 'oda' => 'application/oda', - 'odb' => 'application/vnd.oasis.opendocument.database', - 'odc' => 'application/vnd.oasis.opendocument.chart', - 'odf' => 'application/vnd.oasis.opendocument.formula', - 'odft' => 'application/vnd.oasis.opendocument.formula-template', - 'odg' => 'application/vnd.oasis.opendocument.graphics', - 'odi' => 'application/vnd.oasis.opendocument.image', - 'odm' => 'application/vnd.oasis.opendocument.text-master', - 'odp' => 'application/vnd.oasis.opendocument.presentation', - 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', - 'odt' => 'application/vnd.oasis.opendocument.text', - 'oga' => 'audio/ogg', - 'ogg' => 'audio/ogg', - 'ogv' => 'video/ogg', - 'ogx' => 'application/ogg', - 'omdoc' => 'application/omdoc+xml', - 'onepkg' => 'application/onenote', - 'onetmp' => 'application/onenote', - 'onetoc' => 'application/onenote', - 'onetoc2' => 'application/onenote', - 'opf' => 'application/oebps-package+xml', - 'opml' => 'text/x-opml', - 'oprc' => 'application/vnd.palm', - 'org' => 'application/vnd.lotus-organizer', - 'osf' => 'application/vnd.yamaha.openscoreformat', - 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', - 'otc' => 'application/vnd.oasis.opendocument.chart-template', - 'otf' => 'application/x-font-otf', - 'otg' => 'application/vnd.oasis.opendocument.graphics-template', - 'oth' => 'application/vnd.oasis.opendocument.text-web', - 'oti' => 'application/vnd.oasis.opendocument.image-template', - 'otp' => 'application/vnd.oasis.opendocument.presentation-template', - 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', - 'ott' => 'application/vnd.oasis.opendocument.text-template', - 'oxps' => 'application/oxps', - 'oxt' => 'application/vnd.openofficeorg.extension', - 'p' => 'text/x-pascal', - 'p10' => 'application/pkcs10', - 'p12' => 'application/x-pkcs12', - 'p7b' => 'application/x-pkcs7-certificates', - 'p7c' => 'application/pkcs7-mime', - 'p7m' => 'application/pkcs7-mime', - 'p7r' => 'application/x-pkcs7-certreqresp', - 'p7s' => 'application/pkcs7-signature', - 'p8' => 'application/pkcs8', - 'pas' => 'text/x-pascal', - 'paw' => 'application/vnd.pawaafile', - 'pbd' => 'application/vnd.powerbuilder6', - 'pbm' => 'image/x-portable-bitmap', - 'pcap' => 'application/vnd.tcpdump.pcap', - 'pcf' => 'application/x-font-pcf', - 'pcl' => 'application/vnd.hp-pcl', - 'pclxl' => 'application/vnd.hp-pclxl', - 'pct' => 'image/x-pict', - 'pcurl' => 'application/vnd.curl.pcurl', - 'pcx' => 'image/x-pcx', - 'pdb' => 'application/vnd.palm', - 'pdf' => 'application/pdf', - 'pfa' => 'application/x-font-type1', - 'pfb' => 'application/x-font-type1', - 'pfm' => 'application/x-font-type1', - 'pfr' => 'application/font-tdpfr', - 'pfx' => 'application/x-pkcs12', - 'pgm' => 'image/x-portable-graymap', - 'pgn' => 'application/x-chess-pgn', - 'pgp' => 'application/pgp-encrypted', - 'php' => 'application/x-php', - 'php3' => 'application/x-php', - 'php4' => 'application/x-php', - 'php5' => 'application/x-php', - 'pic' => 'image/x-pict', - 'pkg' => 'application/octet-stream', - 'pki' => 'application/pkixcmp', - 'pkipath' => 'application/pkix-pkipath', - 'plb' => 'application/vnd.3gpp.pic-bw-large', - 'plc' => 'application/vnd.mobius.plc', - 'plf' => 'application/vnd.pocketlearn', - 'pls' => 'application/pls+xml', - 'pml' => 'application/vnd.ctc-posml', - 'png' => 'image/png', - 'pnm' => 'image/x-portable-anymap', - 'portpkg' => 'application/vnd.macports.portpkg', - 'pot' => 'application/vnd.ms-powerpoint', - 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', - 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', - 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', - 'ppd' => 'application/vnd.cups-ppd', - 'ppm' => 'image/x-portable-pixmap', - 'pps' => 'application/vnd.ms-powerpoint', - 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', - 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'pqa' => 'application/vnd.palm', - 'prc' => 'application/x-mobipocket-ebook', - 'pre' => 'application/vnd.lotus-freelance', - 'prf' => 'application/pics-rules', - 'ps' => 'application/postscript', - 'psb' => 'application/vnd.3gpp.pic-bw-small', - 'psd' => 'image/vnd.adobe.photoshop', - 'psf' => 'application/x-font-linux-psf', - 'pskcxml' => 'application/pskc+xml', - 'ptid' => 'application/vnd.pvi.ptid1', - 'pub' => 'application/x-mspublisher', - 'pvb' => 'application/vnd.3gpp.pic-bw-var', - 'pwn' => 'application/vnd.3m.post-it-notes', - 'pya' => 'audio/vnd.ms-playready.media.pya', - 'pyv' => 'video/vnd.ms-playready.media.pyv', - 'qam' => 'application/vnd.epson.quickanime', - 'qbo' => 'application/vnd.intu.qbo', - 'qfx' => 'application/vnd.intu.qfx', - 'qps' => 'application/vnd.publishare-delta-tree', - 'qt' => 'video/quicktime', - 'qwd' => 'application/vnd.quark.quarkxpress', - 'qwt' => 'application/vnd.quark.quarkxpress', - 'qxb' => 'application/vnd.quark.quarkxpress', - 'qxd' => 'application/vnd.quark.quarkxpress', - 'qxl' => 'application/vnd.quark.quarkxpress', - 'qxt' => 'application/vnd.quark.quarkxpress', - 'ra' => 'audio/x-pn-realaudio', - 'ram' => 'audio/x-pn-realaudio', - 'rar' => 'application/x-rar-compressed', - 'ras' => 'image/x-cmu-raster', - 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', - 'rdf' => 'application/rdf+xml', - 'rdz' => 'application/vnd.data-vision.rdz', - 'rep' => 'application/vnd.businessobjects', - 'res' => 'application/x-dtbresource+xml', - 'rgb' => 'image/x-rgb', - 'rif' => 'application/reginfo+xml', - 'rip' => 'audio/vnd.rip', - 'ris' => 'application/x-research-info-systems', - 'rl' => 'application/resource-lists+xml', - 'rlc' => 'image/vnd.fujixerox.edmics-rlc', - 'rld' => 'application/resource-lists-diff+xml', - 'rm' => 'application/vnd.rn-realmedia', - 'rmi' => 'audio/midi', - 'rmp' => 'audio/x-pn-realaudio-plugin', - 'rms' => 'application/vnd.jcp.javame.midlet-rms', - 'rmvb' => 'application/vnd.rn-realmedia-vbr', - 'rnc' => 'application/relax-ng-compact-syntax', - 'roa' => 'application/rpki-roa', - 'roff' => 'text/troff', - 'rp9' => 'application/vnd.cloanto.rp9', - 'rpss' => 'application/vnd.nokia.radio-presets', - 'rpst' => 'application/vnd.nokia.radio-preset', - 'rq' => 'application/sparql-query', - 'rs' => 'application/rls-services+xml', - 'rsd' => 'application/rsd+xml', - 'rss' => 'application/rss+xml', - 'rtf' => 'application/rtf', - 'rtx' => 'text/richtext', - 's' => 'text/x-asm', - 's3m' => 'audio/s3m', - 'saf' => 'application/vnd.yamaha.smaf-audio', - 'sbml' => 'application/sbml+xml', - 'sc' => 'application/vnd.ibm.secure-container', - 'scd' => 'application/x-msschedule', - 'scm' => 'application/vnd.lotus-screencam', - 'scq' => 'application/scvp-cv-request', - 'scs' => 'application/scvp-cv-response', - 'scurl' => 'text/vnd.curl.scurl', - 'sda' => 'application/vnd.stardivision.draw', - 'sdc' => 'application/vnd.stardivision.calc', - 'sdd' => 'application/vnd.stardivision.impress', - 'sdkd' => 'application/vnd.solent.sdkm+xml', - 'sdkm' => 'application/vnd.solent.sdkm+xml', - 'sdp' => 'application/sdp', - 'sdw' => 'application/vnd.stardivision.writer', - 'see' => 'application/vnd.seemail', - 'seed' => 'application/vnd.fdsn.seed', - 'sema' => 'application/vnd.sema', - 'semd' => 'application/vnd.semd', - 'semf' => 'application/vnd.semf', - 'ser' => 'application/java-serialized-object', - 'setpay' => 'application/set-payment-initiation', - 'setreg' => 'application/set-registration-initiation', - 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', - 'sfs' => 'application/vnd.spotfire.sfs', - 'sfv' => 'text/x-sfv', - 'sgi' => 'image/sgi', - 'sgl' => 'application/vnd.stardivision.writer-global', - 'sgm' => 'text/sgml', - 'sgml' => 'text/sgml', - 'sh' => 'application/x-sh', - 'shar' => 'application/x-shar', - 'shf' => 'application/shf+xml', - 'sid' => 'image/x-mrsid-image', - 'sig' => 'application/pgp-signature', - 'sil' => 'audio/silk', - 'silo' => 'model/mesh', - 'sis' => 'application/vnd.symbian.install', - 'sisx' => 'application/vnd.symbian.install', - 'sit' => 'application/x-stuffit', - 'sitx' => 'application/x-stuffitx', - 'skd' => 'application/vnd.koan', - 'skm' => 'application/vnd.koan', - 'skp' => 'application/vnd.koan', - 'skt' => 'application/vnd.koan', - 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', - 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', - 'slt' => 'application/vnd.epson.salt', - 'sm' => 'application/vnd.stepmania.stepchart', - 'smf' => 'application/vnd.stardivision.math', - 'smi' => 'application/smil+xml', - 'smil' => 'application/smil+xml', - 'smv' => 'video/x-smv', - 'smzip' => 'application/vnd.stepmania.package', - 'snd' => 'audio/basic', - 'snf' => 'application/x-font-snf', - 'so' => 'application/octet-stream', - 'spc' => 'application/x-pkcs7-certificates', - 'spf' => 'application/vnd.yamaha.smaf-phrase', - 'spl' => 'application/x-futuresplash', - 'spot' => 'text/vnd.in3d.spot', - 'spp' => 'application/scvp-vp-response', - 'spq' => 'application/scvp-vp-request', - 'spx' => 'audio/ogg', - 'sql' => 'application/x-sql', - 'src' => 'application/x-wais-source', - 'srt' => 'application/x-subrip', - 'sru' => 'application/sru+xml', - 'srx' => 'application/sparql-results+xml', - 'ssdl' => 'application/ssdl+xml', - 'sse' => 'application/vnd.kodak-descriptor', - 'ssf' => 'application/vnd.epson.ssf', - 'ssml' => 'application/ssml+xml', - 'st' => 'application/vnd.sailingtracker.track', - 'stc' => 'application/vnd.sun.xml.calc.template', - 'std' => 'application/vnd.sun.xml.draw.template', - 'stf' => 'application/vnd.wt.stf', - 'sti' => 'application/vnd.sun.xml.impress.template', - 'stk' => 'application/hyperstudio', - 'stl' => 'application/vnd.ms-pki.stl', - 'str' => 'application/vnd.pg.format', - 'stw' => 'application/vnd.sun.xml.writer.template', - 'sub' => 'text/vnd.dvb.subtitle', - 'sus' => 'application/vnd.sus-calendar', - 'susp' => 'application/vnd.sus-calendar', - 'sv4cpio' => 'application/x-sv4cpio', - 'sv4crc' => 'application/x-sv4crc', - 'svc' => 'application/vnd.dvb.service', - 'svd' => 'application/vnd.svd', - 'svg' => 'image/svg+xml', - 'svgz' => 'image/svg+xml', - 'swa' => 'application/x-director', - 'swf' => 'application/x-shockwave-flash', - 'swi' => 'application/vnd.aristanetworks.swi', - 'sxc' => 'application/vnd.sun.xml.calc', - 'sxd' => 'application/vnd.sun.xml.draw', - 'sxg' => 'application/vnd.sun.xml.writer.global', - 'sxi' => 'application/vnd.sun.xml.impress', - 'sxm' => 'application/vnd.sun.xml.math', - 'sxw' => 'application/vnd.sun.xml.writer', - 't' => 'text/troff', - 't3' => 'application/x-t3vm-image', - 'taglet' => 'application/vnd.mynfc', - 'tao' => 'application/vnd.tao.intent-module-archive', - 'tar' => 'application/x-tar', - 'tcap' => 'application/vnd.3gpp2.tcap', - 'tcl' => 'application/x-tcl', - 'teacher' => 'application/vnd.smart.teacher', - 'tei' => 'application/tei+xml', - 'teicorpus' => 'application/tei+xml', - 'tex' => 'application/x-tex', - 'texi' => 'application/x-texinfo', - 'texinfo' => 'application/x-texinfo', - 'text' => 'text/plain', - 'tfi' => 'application/thraud+xml', - 'tfm' => 'application/x-tex-tfm', - 'tga' => 'image/x-tga', - 'thmx' => 'application/vnd.ms-officetheme', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'tmo' => 'application/vnd.tmobile-livetv', - 'torrent' => 'application/x-bittorrent', - 'tpl' => 'application/vnd.groove-tool-template', - 'tpt' => 'application/vnd.trid.tpt', - 'tr' => 'text/troff', - 'tra' => 'application/vnd.trueapp', - 'trm' => 'application/x-msterminal', - 'tsd' => 'application/timestamped-data', - 'tsv' => 'text/tab-separated-values', - 'ttc' => 'application/x-font-ttf', - 'ttf' => 'application/x-font-ttf', - 'ttl' => 'text/turtle', - 'twd' => 'application/vnd.simtech-mindmapper', - 'twds' => 'application/vnd.simtech-mindmapper', - 'txd' => 'application/vnd.genomatix.tuxedo', - 'txf' => 'application/vnd.mobius.txf', - 'txt' => 'text/plain', - 'u32' => 'application/x-authorware-bin', - 'udeb' => 'application/x-debian-package', - 'ufd' => 'application/vnd.ufdl', - 'ufdl' => 'application/vnd.ufdl', - 'ulx' => 'application/x-glulx', - 'umj' => 'application/vnd.umajin', - 'unityweb' => 'application/vnd.unity', - 'uoml' => 'application/vnd.uoml+xml', - 'uri' => 'text/uri-list', - 'uris' => 'text/uri-list', - 'urls' => 'text/uri-list', - 'ustar' => 'application/x-ustar', - 'utz' => 'application/vnd.uiq.theme', - 'uu' => 'text/x-uuencode', - 'uva' => 'audio/vnd.dece.audio', - 'uvd' => 'application/vnd.dece.data', - 'uvf' => 'application/vnd.dece.data', - 'uvg' => 'image/vnd.dece.graphic', - 'uvh' => 'video/vnd.dece.hd', - 'uvi' => 'image/vnd.dece.graphic', - 'uvm' => 'video/vnd.dece.mobile', - 'uvp' => 'video/vnd.dece.pd', - 'uvs' => 'video/vnd.dece.sd', - 'uvt' => 'application/vnd.dece.ttml+xml', - 'uvu' => 'video/vnd.uvvu.mp4', - 'uvv' => 'video/vnd.dece.video', - 'uvva' => 'audio/vnd.dece.audio', - 'uvvd' => 'application/vnd.dece.data', - 'uvvf' => 'application/vnd.dece.data', - 'uvvg' => 'image/vnd.dece.graphic', - 'uvvh' => 'video/vnd.dece.hd', - 'uvvi' => 'image/vnd.dece.graphic', - 'uvvm' => 'video/vnd.dece.mobile', - 'uvvp' => 'video/vnd.dece.pd', - 'uvvs' => 'video/vnd.dece.sd', - 'uvvt' => 'application/vnd.dece.ttml+xml', - 'uvvu' => 'video/vnd.uvvu.mp4', - 'uvvv' => 'video/vnd.dece.video', - 'uvvx' => 'application/vnd.dece.unspecified', - 'uvvz' => 'application/vnd.dece.zip', - 'uvx' => 'application/vnd.dece.unspecified', - 'uvz' => 'application/vnd.dece.zip', - 'vcard' => 'text/vcard', - 'vcd' => 'application/x-cdlink', - 'vcf' => 'text/x-vcard', - 'vcg' => 'application/vnd.groove-vcard', - 'vcs' => 'text/x-vcalendar', - 'vcx' => 'application/vnd.vcx', - 'vis' => 'application/vnd.visionary', - 'viv' => 'video/vnd.vivo', - 'vob' => 'video/x-ms-vob', - 'vor' => 'application/vnd.stardivision.writer', - 'vox' => 'application/x-authorware-bin', - 'vrml' => 'model/vrml', - 'vsd' => 'application/vnd.visio', - 'vsf' => 'application/vnd.vsf', - 'vss' => 'application/vnd.visio', - 'vst' => 'application/vnd.visio', - 'vsw' => 'application/vnd.visio', - 'vtu' => 'model/vnd.vtu', - 'vxml' => 'application/voicexml+xml', - 'w3d' => 'application/x-director', - 'wad' => 'application/x-doom', - 'wav' => 'audio/x-wav', - 'wax' => 'audio/x-ms-wax', - 'wbmp' => 'image/vnd.wap.wbmp', - 'wbs' => 'application/vnd.criticaltools.wbs+xml', - 'wbxml' => 'application/vnd.wap.wbxml', - 'wcm' => 'application/vnd.ms-works', - 'wdb' => 'application/vnd.ms-works', - 'wdp' => 'image/vnd.ms-photo', - 'weba' => 'audio/webm', - 'webm' => 'video/webm', - 'webp' => 'image/webp', - 'wg' => 'application/vnd.pmi.widget', - 'wgt' => 'application/widget', - 'wks' => 'application/vnd.ms-works', - 'wm' => 'video/x-ms-wm', - 'wma' => 'audio/x-ms-wma', - 'wmd' => 'application/x-ms-wmd', - 'wmf' => 'application/x-msmetafile', - 'wml' => 'text/vnd.wap.wml', - 'wmlc' => 'application/vnd.wap.wmlc', - 'wmls' => 'text/vnd.wap.wmlscript', - 'wmlsc' => 'application/vnd.wap.wmlscriptc', - 'wmv' => 'video/x-ms-wmv', - 'wmx' => 'video/x-ms-wmx', - 'wmz' => 'application/x-msmetafile', - 'woff' => 'application/font-woff', - 'wpd' => 'application/vnd.wordperfect', - 'wpl' => 'application/vnd.ms-wpl', - 'wps' => 'application/vnd.ms-works', - 'wqd' => 'application/vnd.wqd', - 'wri' => 'application/x-mswrite', - 'wrl' => 'model/vrml', - 'wsdl' => 'application/wsdl+xml', - 'wspolicy' => 'application/wspolicy+xml', - 'wtb' => 'application/vnd.webturbo', - 'wvx' => 'video/x-ms-wvx', - 'x32' => 'application/x-authorware-bin', - 'x3d' => 'model/x3d+xml', - 'x3db' => 'model/x3d+binary', - 'x3dbz' => 'model/x3d+binary', - 'x3dv' => 'model/x3d+vrml', - 'x3dvz' => 'model/x3d+vrml', - 'x3dz' => 'model/x3d+xml', - 'xaml' => 'application/xaml+xml', - 'xap' => 'application/x-silverlight-app', - 'xar' => 'application/vnd.xara', - 'xbap' => 'application/x-ms-xbap', - 'xbd' => 'application/vnd.fujixerox.docuworks.binder', - 'xbm' => 'image/x-xbitmap', - 'xdf' => 'application/xcap-diff+xml', - 'xdm' => 'application/vnd.syncml.dm+xml', - 'xdp' => 'application/vnd.adobe.xdp+xml', - 'xdssc' => 'application/dssc+xml', - 'xdw' => 'application/vnd.fujixerox.docuworks', - 'xenc' => 'application/xenc+xml', - 'xer' => 'application/patch-ops-error+xml', - 'xfdf' => 'application/vnd.adobe.xfdf', - 'xfdl' => 'application/vnd.xfdl', - 'xht' => 'application/xhtml+xml', - 'xhtml' => 'application/xhtml+xml', - 'xhvml' => 'application/xv+xml', - 'xif' => 'image/vnd.xiff', - 'xla' => 'application/vnd.ms-excel', - 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', - 'xlc' => 'application/vnd.ms-excel', - 'xlf' => 'application/x-xliff+xml', - 'xlm' => 'application/vnd.ms-excel', - 'xls' => 'application/vnd.ms-excel', - 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', - 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xlt' => 'application/vnd.ms-excel', - 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', - 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', - 'xlw' => 'application/vnd.ms-excel', - 'xm' => 'audio/xm', - 'xml' => 'application/xml', - 'xo' => 'application/vnd.olpc-sugar', - 'xop' => 'application/xop+xml', - 'xpi' => 'application/x-xpinstall', - 'xpl' => 'application/xproc+xml', - 'xpm' => 'image/x-xpixmap', - 'xpr' => 'application/vnd.is-xpr', - 'xps' => 'application/vnd.ms-xpsdocument', - 'xpw' => 'application/vnd.intercon.formnet', - 'xpx' => 'application/vnd.intercon.formnet', - 'xsl' => 'application/xml', - 'xslt' => 'application/xslt+xml', - 'xsm' => 'application/vnd.syncml+xml', - 'xspf' => 'application/xspf+xml', - 'xul' => 'application/vnd.mozilla.xul+xml', - 'xvm' => 'application/xv+xml', - 'xvml' => 'application/xv+xml', - 'xwd' => 'image/x-xwindowdump', - 'xyz' => 'chemical/x-xyz', - 'xz' => 'application/x-xz', - 'yang' => 'application/yang', - 'yin' => 'application/yin+xml', - 'z1' => 'application/x-zmachine', - 'z2' => 'application/x-zmachine', - 'z3' => 'application/x-zmachine', - 'z4' => 'application/x-zmachine', - 'z5' => 'application/x-zmachine', - 'z6' => 'application/x-zmachine', - 'z7' => 'application/x-zmachine', - 'z8' => 'application/x-zmachine', - 'zaz' => 'application/vnd.zzazz.deck+xml', - 'zip' => 'application/zip', - 'zir' => 'application/vnd.zul', - 'zirz' => 'application/vnd.zul', - 'zmm' => 'application/vnd.handheld-entertainment+xml', - '123' => 'application/vnd.lotus-1-2-3', -]; diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/preferences.php b/lib/vendor/swiftmailer/swiftmailer/lib/preferences.php deleted file mode 100644 index 27b7065..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/preferences.php +++ /dev/null @@ -1,19 +0,0 @@ -setCharset('utf-8'); - -// Without these lines the default caching mechanism is "array" but this uses a lot of memory. -// If possible, use a disk cache to enable attaching large attachments etc. -// You can override the default temporary directory by setting the TMPDIR environment variable. -if (@is_writable($tmpDir = sys_get_temp_dir())) { - $preferences->setTempDir($tmpDir)->setCacheType('disk'); -} diff --git a/lib/vendor/swiftmailer/swiftmailer/lib/swift_required.php b/lib/vendor/swiftmailer/swiftmailer/lib/swift_required.php deleted file mode 100644 index d696056..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/lib/swift_required.php +++ /dev/null @@ -1,22 +0,0 @@ - 'application/x-php', - 'php3' => 'application/x-php', - 'php4' => 'application/x-php', - 'php5' => 'application/x-php', - 'zip' => 'application/zip', - 'gif' => 'image/gif', - 'png' => 'image/png', - 'css' => 'text/css', - 'js' => 'text/javascript', - 'txt' => 'text/plain', - 'aif' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'avi' => 'video/avi', - 'bmp' => 'image/bmp', - 'bz2' => 'application/x-bz2', - 'csv' => 'text/csv', - 'dmg' => 'application/x-apple-diskimage', - 'doc' => 'application/msword', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'eml' => 'message/rfc822', - 'aps' => 'application/postscript', - 'exe' => 'application/x-ms-dos-executable', - 'flv' => 'video/x-flv', - 'gz' => 'application/x-gzip', - 'hqx' => 'application/stuffit', - 'htm' => 'text/html', - 'html' => 'text/html', - 'jar' => 'application/x-java-archive', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'm3u' => 'audio/x-mpegurl', - 'm4a' => 'audio/mp4', - 'mdb' => 'application/x-msaccess', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mov' => 'video/quicktime', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'odg' => 'vnd.oasis.opendocument.graphics', - 'odp' => 'vnd.oasis.opendocument.presentation', - 'odt' => 'vnd.oasis.opendocument.text', - 'ods' => 'vnd.oasis.opendocument.spreadsheet', - 'ogg' => 'audio/ogg', - 'pdf' => 'application/pdf', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'ps' => 'application/postscript', - 'rar' => 'application/x-rar-compressed', - 'rtf' => 'application/rtf', - 'tar' => 'application/x-tar', - 'sit' => 'application/x-stuffit', - 'svg' => 'image/svg+xml', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'ttf' => 'application/x-font-truetype', - 'vcf' => 'text/x-vcard', - 'wav' => 'audio/wav', - 'wma' => 'audio/x-ms-wma', - 'wmv' => 'audio/x-ms-wmv', - 'xls' => 'application/vnd.ms-excel', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xml' => 'application/xml', - ]; - - // wrap array for generating file - foreach ($valid_mime_types_preset as $extension => $mime_type) { - // generate array for mimetype to extension resolver (only first match) - $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; - } - - // all extensions from second match - foreach ($matches[2] as $i => $extensions) { - // explode multiple extensions from string - $extensions = explode(' ', strtolower($extensions)); - - // force array for foreach - if (!is_array($extensions)) { - $extensions = [$extensions]; - } - - foreach ($extensions as $extension) { - // get mime type - $mime_type = $matches[1][$i]; - - // check if string length lower than 10 - if (strlen($extension) < 10) { - if (!isset($valid_mime_types[$mime_type])) { - // generate array for mimetype to extension resolver (only first match) - $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; - } - } - } - } - } - - $xml = simplexml_load_string($mime_xml); - - foreach ($xml as $node) { - // check if there is no pattern - if (!isset($node->glob['pattern'])) { - continue; - } - - // get all matching extensions from match - foreach ((array) $node->glob['pattern'] as $extension) { - // skip none glob extensions - if (false === strpos($extension, '.')) { - continue; - } - - // remove get only last part - $extension = explode('.', strtolower($extension)); - $extension = end($extension); - } - - if (isset($node->glob['pattern'][0])) { - // mime type - $mime_type = strtolower((string) $node['type']); - - // get first extension - $extension = strtolower(trim($node->glob['ddpattern'][0], '*.')); - - // skip none glob extensions and check if string length between 1 and 10 - if (false !== strpos($extension, '.') || strlen($extension) < 1 || strlen($extension) > 9) { - continue; - } - - // check if string length lower than 10 - if (!isset($valid_mime_types[$mime_type])) { - // generate array for mimetype to extension resolver (only first match) - $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; - } - } - } - - // full list of valid extensions only - $valid_mime_types = array_unique($valid_mime_types); - ksort($valid_mime_types); - - // combine mime types and extensions array - $output = "$preamble\$swift_mime_types = array(\n ".implode(",\n ", $valid_mime_types)."\n);"; - - // write mime_types.php config file - @file_put_contents('./mime_types.php', $output); -} - -generateUpToDateMimeArray(); diff --git a/lib/vendor/swiftmailer/swiftmailer/phpunit.xml.dist b/lib/vendor/swiftmailer/swiftmailer/phpunit.xml.dist deleted file mode 100644 index 9ec0c49..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/phpunit.xml.dist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - tests/unit - - - tests/acceptance - - - tests/bug - - - tests/smoke - - - - - - - diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/IdenticalBinaryConstraint.php b/lib/vendor/swiftmailer/swiftmailer/tests/IdenticalBinaryConstraint.php deleted file mode 100644 index 0a4a6da..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/IdenticalBinaryConstraint.php +++ /dev/null @@ -1,62 +0,0 @@ -value = $value; - } - - /** - * Evaluates the constraint for parameter $other. Returns TRUE if the - * constraint is met, FALSE otherwise. - * - * @param mixed $other Value or object to evaluate. - * - * @return bool - */ - public function matches($other) - { - $aHex = $this->asHexString($this->value); - $bHex = $this->asHexString($other); - - return $aHex === $bHex; - } - - /** - * Returns a string representation of the constraint. - * - * @return string - */ - public function toString() - { - return 'identical binary'; - } - - /** - * Get the given string of bytes as a stirng of Hexadecimal sequences. - * - * @param string $binary - * - * @return string - */ - private function asHexString($binary) - { - $hex = ''; - - $bytes = unpack('H*', $binary); - - foreach ($bytes as &$byte) { - $byte = strtoupper($byte); - } - - return implode('', $bytes); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/StreamCollector.php b/lib/vendor/swiftmailer/swiftmailer/tests/StreamCollector.php deleted file mode 100644 index 7f079d9..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/StreamCollector.php +++ /dev/null @@ -1,11 +0,0 @@ -content .= $arg; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/SwiftMailerSmokeTestCase.php b/lib/vendor/swiftmailer/swiftmailer/tests/SwiftMailerSmokeTestCase.php deleted file mode 100644 index 13bd240..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/SwiftMailerSmokeTestCase.php +++ /dev/null @@ -1,46 +0,0 @@ -markTestSkipped( - 'Smoke tests are skipped if tests/smoke.conf.php is not edited' - ); - } - } - - protected function getMailer() - { - switch (SWIFT_SMOKE_TRANSPORT_TYPE) { - case 'smtp': - $transport = Swift_DependencyContainer::getInstance()->lookup('transport.smtp') - ->setHost(SWIFT_SMOKE_SMTP_HOST) - ->setPort(SWIFT_SMOKE_SMTP_PORT) - ->setUsername(SWIFT_SMOKE_SMTP_USER) - ->setPassword(SWIFT_SMOKE_SMTP_PASS) - ->setEncryption(SWIFT_SMOKE_SMTP_ENCRYPTION) - ; - break; - case 'sendmail': - $transport = Swift_DependencyContainer::getInstance()->lookup('transport.sendmail') - ->setCommand(SWIFT_SMOKE_SENDMAIL_COMMAND) - ; - break; - case 'mail': - case 'nativemail': - $transport = Swift_DependencyContainer::getInstance()->lookup('transport.mail'); - break; - default: - throw new Exception('Undefined transport ['.SWIFT_SMOKE_TRANSPORT_TYPE.']'); - } - - return new Swift_Mailer($transport); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/SwiftMailerTestCase.php b/lib/vendor/swiftmailer/swiftmailer/tests/SwiftMailerTestCase.php deleted file mode 100644 index fe2c62b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/SwiftMailerTestCase.php +++ /dev/null @@ -1,38 +0,0 @@ - \ No newline at end of file diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/_samples/files/swiftmailer.png b/lib/vendor/swiftmailer/swiftmailer/tests/_samples/files/swiftmailer.png deleted file mode 100644 index 1b95f619af1fcbed1fca382d22022bdf329849cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3194 zcmV-=42AQFP)MSx|GoLxC1$NK z_Ph69ufRtQ76+DFuvF-8orSRY^mzh{hyTC*`g`GJF2^N{QXxQY!g418;53Gy4`6Wt z@W4WCEiaf6;7tNLOGCi-2=LHCZ7mC!tMIWuL$7RVA;G=7=x|%8^OYGLShnYUDhm&{ zg*qRgG59-xrCOlVLap5bussX4wX{GtNp2L?&||kP)YeRa-p?TroQ0vc-dGelVxhJ` zbHgmj`XYe6V)0vOpab&4Cj>2rw?=>CC(n=L-$$^lSx;?E2D-=Qo8dr^dBcluc+ORJ zo@Ok)#uf8ieAG%L42Q#c`YOud`3-#p& zx0pwR}3v$0N&KqF{v0Ir|mG1_!JrIaAnQ_n_r40Af1%SNq$VGh?- zDXXWpP)~pJk68AdlR|>owIyz$&Kl?@%RbwIX}OKd*e}{@>J;|jNB^t|SqlG$KX_@< zYPOT{srCWpmc{fEdFtc$hkWQ00_xRYTk~Q-#%(ZN)nMakx2TCY4cs|+=~l+UpzgXH z3KFBCVsZn{{@|S|8)bT`V)?Z;Zx^N|a=FAncPT*Yk;goObw@Ek5$~cJb)e&uswQUhp?_8ZB}LDU1)1XVxzQBgVh!5bYS*aa$n|JikshH+4PM@px5US z5KI1hj^xpt1p^u_NV(oZoq@I4d3Q?gY1@Xf0y7?wX2swT7EcHglRVbe z0s_q_WwNWG>Pu4vf1~O-k3Mg0@!VhV^|zdz4O~YIj}5@ z)|!D$l=1lH%JrgXWP>a>qy`4 zfd_Xf*yB0msv=VnO421sgGW<)JvhBrJALv+<+Cq+cK6}C5v;E~_vYC~kG{Uo{Le>+ zz5eve?B>-s*bC2G&c>a(FWeJ{VvUPW=jQFDIEYEMIT|^L*`CApFW>5Gpxq`exeb89 zK7rhmuDQL!NoS)W{BchYPx)ZMZO}SZReVg^Oa`>3+8)*qpg=su`iAD=;tzrDdzX&m zBt-gYJVkUPuC3gN{#jlARs{76&#bZQS6)8f>I#dXe&yLW+0E5AlsiJm3G|b<*-N~2 zQ#XAApDW}JY&X_81Ta_V;cXaP170tBZ-i?d;8r~(n~HKdiE#iXUU^&Ld}NF6C2Whw z-vGGfa~qqI4Vd+ry8rqeEX!*GX zPzuPkInk36ZVgpFze_+8TWRTeWKV;P8V#8kOEY&5b$_oN=C zfVZ9!c1KeSWEKdT+UKXAXurGQxsz=>%?&57Zc?TJIUHR%WUjYKGjD6|O`mFWU-Qsy z8$ex&%YLW|W*0O|TXOeRszyS|bM{oy0VIWM2yYGh6Now-{;$MnFB9tv7p>Bn0mTPK z!QiJ~e83)pUOtEVUq&Z^zk2`=z%|g`FMi`kNt*|xpDPM&E!L90^pHD3t%<+)L}>x= zHZ-2OF^#M+sfjfAr7g+}fWNCK^DS7vtB@f&qSp+K@c*Z;;KpqHsmIns`02nB4 zKwSio^mHYm+UaW~&e@6U0#MmVdv+-Z>#CrJZMv%8!uDfOe*$nqU}t{`TMB zU-0PvdvY3n|LTu*WzdK7X$j|mWieEgSzQ4MV=|V}Au&KJv7|%P<1?LGi1~iu+Cz>4&0c?*B=<+n4#;eO3s47W{ zB(KnrY5~Xa!V72jAAhXU+^x4>?YbX+^mElu_Obwx(tOI-?@m=iD#6~&JN?i2qW>RG*IxzvC z%KL6Ag*@E5P1w+3EWTGe$UjqK^=XXgpk4UJ66dz_(44`X-J*wOdY zC3PE?sU85{Opeu46To)qgaW}McTAwBbX>sVJLeoLAdicbjaw0CU|8T4Yz>qR`*Zx{ z+j~*|8UM!5zy9YpMF>P?YXZdggn*yNM!9B0Ks$Q?rb>=BDOWvU=S|x+dKevHdv6+N zwxXyaOr8>5gMrK9JEM4tCpyjcS$XLuzi#aBtm>469-6Pme$)jpWxpG8LPf}kplnsm zF<8y|{FYhzd|-=GfF_<;r>D7h_Y#gj$N}i82*;<7K8QN|$63<%c^Ed4vvfnRa+O8k zt$hMJcR7Yox0kQ|+vLDli0e4wKui0mXP$0f{gmtdgjU3G+I6I(FJyO6e*FExA7i_h ze)i??Y}=IZgekTUlC}k~cMZTn$FZiU&cg{G2IFg>kt}O0x&1?~f!b4)+h{l!M*UB| zTCG3+$Ip%xItYL4#dzm&aXQ|L7~9OP>cyuT4WkKyD#A@x{zjTR4?7HbbltHp9Ks=4 zvJ^p}1>jph{m!3#)xI_7A$O?_sPhstId7(!_m4)vIEs7c(g0t@$jUKGD|Z1+@@7 z?vvLG$!qTxG$6#j9L))L;gN?9EglOFwWc~p0NO?IXhII!W;iU=sXd`Qp=6(c2<8Mc zA2&H^qfx*Vb46RbBv1<=b=i2o*xcbJ?VM(2P1$mL-?z1bLrp+Aq_e9ExCdEzKJv^6 z^VSqn!+K{6^+Z*FK%Q_g3*Ak@Du2_#q@MX~c7E%fEz~AnyTkNT_J$N#p3r9yCsXKQ z;jeeQ#bz`6&|I~@wUR+CY1~dqSs+S)Earl*U32337r@fWm`K g-$HCnw*Lz-0AR%yng8k!ga7~l07*qoM6N<$f>^s2o&W#< diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/_samples/files/textfile.zip b/lib/vendor/swiftmailer/swiftmailer/tests/_samples/files/textfile.zip deleted file mode 100644 index 5a580ecbf81ff98445bc5c6d0fce7a9a301f0e39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmWIWW@h1HU}9ikII%0tqR&rhgC39#!aNM33?-=*C25&Csd^<9C7~gl49w;G_PK*_ zXax(ySH`c5AsLy)3P4nlSX82rpQezg5L}*_R-)jW2-H=iP-db~oSUDWs!)testFile = sys_get_temp_dir().'/swift-test-file'.__CLASS__; - file_put_contents($this->testFile, 'abcdefghijklm'); - } - - protected function tearDown() - { - unlink($this->testFile); - } - - public function testFileDataCanBeRead() - { - $file = $this->createFileStream($this->testFile); - $str = ''; - while (false !== $bytes = $file->read(8192)) { - $str .= $bytes; - } - $this->assertEquals('abcdefghijklm', $str); - } - - public function testFileDataCanBeReadSequentially() - { - $file = $this->createFileStream($this->testFile); - $this->assertEquals('abcde', $file->read(5)); - $this->assertEquals('fghijklm', $file->read(8)); - $this->assertFalse($file->read(1)); - } - - public function testFilenameIsReturned() - { - $file = $this->createFileStream($this->testFile); - $this->assertEquals($this->testFile, $file->getPath()); - } - - public function testFileCanBeWrittenTo() - { - $file = $this->createFileStream($this->testFile, true); - $file->write('foobar'); - $this->assertEquals('foobar', $file->read(8192)); - } - - public function testReadingFromThenWritingToFile() - { - $file = $this->createFileStream($this->testFile, true); - $file->write('foobar'); - $this->assertEquals('foobar', $file->read(8192)); - $file->write('zipbutton'); - $this->assertEquals('zipbutton', $file->read(8192)); - } - - public function testWritingToFileWithCanonicalization() - { - $file = $this->createFileStream($this->testFile, true); - $file->addFilter($this->createFilter(["\r\n", "\r"], "\n"), 'allToLF'); - $file->write("foo\r\nbar\r"); - $file->write("\nzip\r\ntest\r"); - $file->flushBuffers(); - $this->assertEquals("foo\nbar\nzip\ntest\n", file_get_contents($this->testFile)); - } - - public function testWritingWithFulleMessageLengthOfAMultipleOf8192() - { - $file = $this->createFileStream($this->testFile, true); - $file->addFilter($this->createFilter(["\r\n", "\r"], "\n"), 'allToLF'); - $file->write(''); - $file->flushBuffers(); - $this->assertEquals('', file_get_contents($this->testFile)); - } - - public function testBindingOtherStreamsMirrorsWriteOperations() - { - $file = $this->createFileStream($this->testFile, true); - $is1 = $this->createMockInputStream(); - $is2 = $this->createMockInputStream(); - - $is1->expects($this->at(0)) - ->method('write') - ->with('x'); - $is1->expects($this->at(1)) - ->method('write') - ->with('y'); - $is2->expects($this->at(0)) - ->method('write') - ->with('x'); - $is2->expects($this->at(1)) - ->method('write') - ->with('y'); - - $file->bind($is1); - $file->bind($is2); - - $file->write('x'); - $file->write('y'); - } - - public function testBindingOtherStreamsMirrorsFlushOperations() - { - $file = $this->createFileStream( - $this->testFile, true - ); - $is1 = $this->createMockInputStream(); - $is2 = $this->createMockInputStream(); - - $is1->expects($this->once()) - ->method('flushBuffers'); - $is2->expects($this->once()) - ->method('flushBuffers'); - - $file->bind($is1); - $file->bind($is2); - - $file->flushBuffers(); - } - - public function testUnbindingStreamPreventsFurtherWrites() - { - $file = $this->createFileStream($this->testFile, true); - $is1 = $this->createMockInputStream(); - $is2 = $this->createMockInputStream(); - - $is1->expects($this->at(0)) - ->method('write') - ->with('x'); - $is1->expects($this->at(1)) - ->method('write') - ->with('y'); - $is2->expects($this->once()) - ->method('write') - ->with('x'); - - $file->bind($is1); - $file->bind($is2); - - $file->write('x'); - - $file->unbind($is2); - - $file->write('y'); - } - - private function createFilter($search, $replace) - { - return new Swift_StreamFilters_StringReplacementFilter($search, $replace); - } - - private function createMockInputStream() - { - return $this->getMockBuilder('Swift_InputByteStream')->getMock(); - } - - private function createFileStream($file, $writable = false) - { - return new Swift_ByteStream_FileByteStream($file, $writable); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/CharacterReaderFactory/SimpleCharacterReaderFactoryAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/CharacterReaderFactory/SimpleCharacterReaderFactoryAcceptanceTest.php deleted file mode 100644 index fcc7ad4..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/CharacterReaderFactory/SimpleCharacterReaderFactoryAcceptanceTest.php +++ /dev/null @@ -1,179 +0,0 @@ -factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - } - - public function testCreatingUtf8Reader() - { - foreach (['utf8', 'utf-8', 'UTF-8', 'UTF8'] as $utf8) { - $reader = $this->factory->getReaderFor($utf8); - $this->assertInstanceOf($this->prefix.'Utf8Reader', $reader); - } - } - - public function testCreatingIso8859XReaders() - { - $charsets = []; - foreach (range(1, 16) as $number) { - foreach (['iso', 'iec'] as $body) { - $charsets[] = $body.'-8859-'.$number; - $charsets[] = $body.'8859-'.$number; - $charsets[] = strtoupper($body).'-8859-'.$number; - $charsets[] = strtoupper($body).'8859-'.$number; - } - } - - foreach ($charsets as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(1, $reader->getInitialByteSize()); - } - } - - public function testCreatingWindows125XReaders() - { - $charsets = []; - foreach (range(0, 8) as $number) { - $charsets[] = 'windows-125'.$number; - $charsets[] = 'windows125'.$number; - $charsets[] = 'WINDOWS-125'.$number; - $charsets[] = 'WINDOWS125'.$number; - } - - foreach ($charsets as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(1, $reader->getInitialByteSize()); - } - } - - public function testCreatingCodePageReaders() - { - $charsets = []; - foreach (range(0, 8) as $number) { - $charsets[] = 'cp-125'.$number; - $charsets[] = 'cp125'.$number; - $charsets[] = 'CP-125'.$number; - $charsets[] = 'CP125'.$number; - } - - foreach ([437, 737, 850, 855, 857, 858, 860, - 861, 863, 865, 866, 869, ] as $number) { - $charsets[] = 'cp-'.$number; - $charsets[] = 'cp'.$number; - $charsets[] = 'CP-'.$number; - $charsets[] = 'CP'.$number; - } - - foreach ($charsets as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(1, $reader->getInitialByteSize()); - } - } - - public function testCreatingAnsiReader() - { - foreach (['ansi', 'ANSI'] as $ansi) { - $reader = $this->factory->getReaderFor($ansi); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(1, $reader->getInitialByteSize()); - } - } - - public function testCreatingMacintoshReader() - { - foreach (['macintosh', 'MACINTOSH'] as $mac) { - $reader = $this->factory->getReaderFor($mac); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(1, $reader->getInitialByteSize()); - } - } - - public function testCreatingKOIReaders() - { - $charsets = []; - foreach (['7', '8-r', '8-u', '8u', '8r'] as $end) { - $charsets[] = 'koi-'.$end; - $charsets[] = 'koi'.$end; - $charsets[] = 'KOI-'.$end; - $charsets[] = 'KOI'.$end; - } - - foreach ($charsets as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(1, $reader->getInitialByteSize()); - } - } - - public function testCreatingIsciiReaders() - { - foreach (['iscii', 'ISCII', 'viscii', 'VISCII'] as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(1, $reader->getInitialByteSize()); - } - } - - public function testCreatingMIKReader() - { - foreach (['mik', 'MIK'] as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(1, $reader->getInitialByteSize()); - } - } - - public function testCreatingCorkReader() - { - foreach (['cork', 'CORK', 't1', 'T1'] as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(1, $reader->getInitialByteSize()); - } - } - - public function testCreatingUcs2Reader() - { - foreach (['ucs-2', 'UCS-2', 'ucs2', 'UCS2'] as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(2, $reader->getInitialByteSize()); - } - } - - public function testCreatingUtf16Reader() - { - foreach (['utf-16', 'UTF-16', 'utf16', 'UTF16'] as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(2, $reader->getInitialByteSize()); - } - } - - public function testCreatingUcs4Reader() - { - foreach (['ucs-4', 'UCS-4', 'ucs4', 'UCS4'] as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(4, $reader->getInitialByteSize()); - } - } - - public function testCreatingUtf32Reader() - { - foreach (['utf-32', 'UTF-32', 'utf32', 'UTF32'] as $charset) { - $reader = $this->factory->getReaderFor($charset); - $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); - $this->assertEquals(4, $reader->getInitialByteSize()); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/DependencyContainerAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/DependencyContainerAcceptanceTest.php deleted file mode 100644 index 3c1b515..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/DependencyContainerAcceptanceTest.php +++ /dev/null @@ -1,22 +0,0 @@ -listItems() as $itemName) { - try { - $di->lookup($itemName); - } catch (Swift_DependencyException $e) { - $this->fail($e->getMessage()); - } - } - // previous loop would fail if there is an issue - $this->addToAssertionCount(1); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EmbeddedFileAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EmbeddedFileAcceptanceTest.php deleted file mode 100644 index a172e97..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EmbeddedFileAcceptanceTest.php +++ /dev/null @@ -1,12 +0,0 @@ -samplesDir = realpath(__DIR__.'/../../../_samples/charsets'); - $this->encoder = new Swift_Encoder_Base64Encoder(); - } - - public function testEncodingAndDecodingSamples() - { - $sampleFp = opendir($this->samplesDir); - while (false !== $encodingDir = readdir($sampleFp)) { - if ('.' == substr($encodingDir, 0, 1)) { - continue; - } - - $sampleDir = $this->samplesDir.'/'.$encodingDir; - - if (is_dir($sampleDir)) { - $fileFp = opendir($sampleDir); - while (false !== $sampleFile = readdir($fileFp)) { - if ('.' == substr($sampleFile, 0, 1)) { - continue; - } - - $text = file_get_contents($sampleDir.'/'.$sampleFile); - $encodedText = $this->encoder->encodeString($text); - - $this->assertEquals( - base64_decode($encodedText), $text, - '%s: Encoded string should decode back to original string for sample '. - $sampleDir.'/'.$sampleFile - ); - } - closedir($fileFp); - } - } - closedir($sampleFp); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/QpEncoderAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/QpEncoderAcceptanceTest.php deleted file mode 100644 index 5bbf067..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/QpEncoderAcceptanceTest.php +++ /dev/null @@ -1,54 +0,0 @@ -samplesDir = realpath(__DIR__.'/../../../_samples/charsets'); - $this->factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - } - - public function testEncodingAndDecodingSamples() - { - $sampleFp = opendir($this->samplesDir); - while (false !== $encodingDir = readdir($sampleFp)) { - if ('.' == substr($encodingDir, 0, 1)) { - continue; - } - - $encoding = $encodingDir; - $charStream = new Swift_CharacterStream_ArrayCharacterStream( - $this->factory, $encoding); - $encoder = new Swift_Encoder_QpEncoder($charStream); - - $sampleDir = $this->samplesDir.'/'.$encodingDir; - - if (is_dir($sampleDir)) { - $fileFp = opendir($sampleDir); - while (false !== $sampleFile = readdir($fileFp)) { - if ('.' == substr($sampleFile, 0, 1)) { - continue; - } - - $text = file_get_contents($sampleDir.'/'.$sampleFile); - $encodedText = $encoder->encodeString($text); - - foreach (explode("\r\n", $encodedText) as $line) { - $this->assertLessThanOrEqual(76, strlen($line)); - } - - $this->assertEquals( - quoted_printable_decode($encodedText), $text, - '%s: Encoded string should decode back to original string for sample '. - $sampleDir.'/'.$sampleFile - ); - } - closedir($fileFp); - } - } - closedir($sampleFp); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Rfc2231EncoderAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Rfc2231EncoderAcceptanceTest.php deleted file mode 100644 index 20c68d5..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Rfc2231EncoderAcceptanceTest.php +++ /dev/null @@ -1,50 +0,0 @@ -samplesDir = realpath(__DIR__.'/../../../_samples/charsets'); - $this->factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - } - - public function testEncodingAndDecodingSamples() - { - $sampleFp = opendir($this->samplesDir); - while (false !== $encodingDir = readdir($sampleFp)) { - if ('.' == substr($encodingDir, 0, 1)) { - continue; - } - - $encoding = $encodingDir; - $charStream = new Swift_CharacterStream_ArrayCharacterStream( - $this->factory, $encoding); - $encoder = new Swift_Encoder_Rfc2231Encoder($charStream); - - $sampleDir = $this->samplesDir.'/'.$encodingDir; - - if (is_dir($sampleDir)) { - $fileFp = opendir($sampleDir); - while (false !== $sampleFile = readdir($fileFp)) { - if ('.' == substr($sampleFile, 0, 1)) { - continue; - } - - $text = file_get_contents($sampleDir.'/'.$sampleFile); - $encodedText = $encoder->encodeString($text); - - $this->assertEquals( - urldecode(implode('', explode("\r\n", $encodedText))), $text, - '%s: Encoded string should decode back to original string for sample '. - $sampleDir.'/'.$sampleFile - ); - } - closedir($fileFp); - } - } - closedir($sampleFp); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/ArrayKeyCacheAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/ArrayKeyCacheAcceptanceTest.php deleted file mode 100644 index c54986b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/ArrayKeyCacheAcceptanceTest.php +++ /dev/null @@ -1,173 +0,0 @@ -cache = new Swift_KeyCache_ArrayKeyCache( - new Swift_KeyCache_SimpleKeyCacheInputStream() - ); - } - - public function testStringDataCanBeSetAndFetched() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); - } - - public function testStringDataCanBeOverwritten() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->cache->setString( - $this->key1, 'foo', 'whatever', Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('whatever', $this->cache->getString($this->key1, 'foo')); - } - - public function testStringDataCanBeAppended() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->cache->setString( - $this->key1, 'foo', 'ing', Swift_KeyCache::MODE_APPEND - ); - $this->assertEquals('testing', $this->cache->getString($this->key1, 'foo')); - } - - public function testHasKeyReturnValue() - { - $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); - } - - public function testNsKeyIsWellPartitioned() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->cache->setString( - $this->key2, 'foo', 'ing', Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); - $this->assertEquals('ing', $this->cache->getString($this->key2, 'foo')); - } - - public function testItemKeyIsWellPartitioned() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->cache->setString( - $this->key1, 'bar', 'ing', Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); - $this->assertEquals('ing', $this->cache->getString($this->key1, 'bar')); - } - - public function testByteStreamCanBeImported() - { - $os = new Swift_ByteStream_ArrayByteStream(); - $os->write('abcdef'); - - $this->cache->importFromByteStream( - $this->key1, 'foo', $os, Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('abcdef', $this->cache->getString($this->key1, 'foo')); - } - - public function testByteStreamCanBeAppended() - { - $os1 = new Swift_ByteStream_ArrayByteStream(); - $os1->write('abcdef'); - - $os2 = new Swift_ByteStream_ArrayByteStream(); - $os2->write('xyzuvw'); - - $this->cache->importFromByteStream( - $this->key1, 'foo', $os1, Swift_KeyCache::MODE_APPEND - ); - $this->cache->importFromByteStream( - $this->key1, 'foo', $os2, Swift_KeyCache::MODE_APPEND - ); - - $this->assertEquals('abcdefxyzuvw', $this->cache->getString($this->key1, 'foo')); - } - - public function testByteStreamAndStringCanBeAppended() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_APPEND - ); - - $os = new Swift_ByteStream_ArrayByteStream(); - $os->write('abcdef'); - - $this->cache->importFromByteStream( - $this->key1, 'foo', $os, Swift_KeyCache::MODE_APPEND - ); - $this->assertEquals('testabcdef', $this->cache->getString($this->key1, 'foo')); - } - - public function testDataCanBeExportedToByteStream() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - - $is = new Swift_ByteStream_ArrayByteStream(); - - $this->cache->exportToByteStream($this->key1, 'foo', $is); - - $string = ''; - while (false !== $bytes = $is->read(8192)) { - $string .= $bytes; - } - - $this->assertEquals('test', $string); - } - - public function testKeyCanBeCleared() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); - $this->cache->clearKey($this->key1, 'foo'); - $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); - } - - public function testNsKeyCanBeCleared() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->cache->setString( - $this->key1, 'bar', 'xyz', Swift_KeyCache::MODE_WRITE - ); - $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); - $this->assertTrue($this->cache->hasKey($this->key1, 'bar')); - $this->cache->clearAll($this->key1); - $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); - $this->assertFalse($this->cache->hasKey($this->key1, 'bar')); - } - - public function testKeyCacheInputStream() - { - $is = $this->cache->getInputByteStream($this->key1, 'foo'); - $is->write('abc'); - $is->write('xyz'); - $this->assertEquals('abcxyz', $this->cache->getString($this->key1, 'foo')); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/DiskKeyCacheAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/DiskKeyCacheAcceptanceTest.php deleted file mode 100644 index 9764742..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/DiskKeyCacheAcceptanceTest.php +++ /dev/null @@ -1,173 +0,0 @@ -key1 = uniqid(microtime(true), true); - $this->key2 = uniqid(microtime(true), true); - $this->cache = new Swift_KeyCache_DiskKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream(), sys_get_temp_dir()); - } - - public function testStringDataCanBeSetAndFetched() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); - } - - public function testStringDataCanBeOverwritten() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->cache->setString( - $this->key1, 'foo', 'whatever', Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('whatever', $this->cache->getString($this->key1, 'foo')); - } - - public function testStringDataCanBeAppended() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->cache->setString( - $this->key1, 'foo', 'ing', Swift_KeyCache::MODE_APPEND - ); - $this->assertEquals('testing', $this->cache->getString($this->key1, 'foo')); - } - - public function testHasKeyReturnValue() - { - $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); - } - - public function testNsKeyIsWellPartitioned() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->cache->setString( - $this->key2, 'foo', 'ing', Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); - $this->assertEquals('ing', $this->cache->getString($this->key2, 'foo')); - } - - public function testItemKeyIsWellPartitioned() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->cache->setString( - $this->key1, 'bar', 'ing', Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); - $this->assertEquals('ing', $this->cache->getString($this->key1, 'bar')); - } - - public function testByteStreamCanBeImported() - { - $os = new Swift_ByteStream_ArrayByteStream(); - $os->write('abcdef'); - - $this->cache->importFromByteStream( - $this->key1, 'foo', $os, Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('abcdef', $this->cache->getString($this->key1, 'foo')); - } - - public function testByteStreamCanBeAppended() - { - $os1 = new Swift_ByteStream_ArrayByteStream(); - $os1->write('abcdef'); - - $os2 = new Swift_ByteStream_ArrayByteStream(); - $os2->write('xyzuvw'); - - $this->cache->importFromByteStream( - $this->key1, 'foo', $os1, Swift_KeyCache::MODE_APPEND - ); - $this->cache->importFromByteStream( - $this->key1, 'foo', $os2, Swift_KeyCache::MODE_APPEND - ); - - $this->assertEquals('abcdefxyzuvw', $this->cache->getString($this->key1, 'foo')); - } - - public function testByteStreamAndStringCanBeAppended() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_APPEND - ); - - $os = new Swift_ByteStream_ArrayByteStream(); - $os->write('abcdef'); - - $this->cache->importFromByteStream( - $this->key1, 'foo', $os, Swift_KeyCache::MODE_APPEND - ); - $this->assertEquals('testabcdef', $this->cache->getString($this->key1, 'foo')); - } - - public function testDataCanBeExportedToByteStream() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - - $is = new Swift_ByteStream_ArrayByteStream(); - - $this->cache->exportToByteStream($this->key1, 'foo', $is); - - $string = ''; - while (false !== $bytes = $is->read(8192)) { - $string .= $bytes; - } - - $this->assertEquals('test', $string); - } - - public function testKeyCanBeCleared() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); - $this->cache->clearKey($this->key1, 'foo'); - $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); - } - - public function testNsKeyCanBeCleared() - { - $this->cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->cache->setString( - $this->key1, 'bar', 'xyz', Swift_KeyCache::MODE_WRITE - ); - $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); - $this->assertTrue($this->cache->hasKey($this->key1, 'bar')); - $this->cache->clearAll($this->key1); - $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); - $this->assertFalse($this->cache->hasKey($this->key1, 'bar')); - } - - public function testKeyCacheInputStream() - { - $is = $this->cache->getInputByteStream($this->key1, 'foo'); - $is->write('abc'); - $is->write('xyz'); - $this->assertEquals('abcxyz', $this->cache->getString($this->key1, 'foo')); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MessageAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MessageAcceptanceTest.php deleted file mode 100644 index 16adb23..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MessageAcceptanceTest.php +++ /dev/null @@ -1,55 +0,0 @@ -createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - - $id = $message->getId(); - $date = $message->getDate(); - $boundary = $message->getBoundary(); - - $message->addPart('foo', 'text/plain', 'iso-8859-1'); - $message->addPart('test foo', 'text/html', 'iso-8859-1'); - - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/alternative;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/plain; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foo'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/html; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'test foo'. - "\r\n\r\n". - '--'.$boundary.'--'."\r\n", - $message->toString() - ); - } - - protected function createMessage() - { - Swift_DependencyContainer::getInstance() - ->register('properties.charset')->asValue(null); - - return new Swift_Message(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/AttachmentAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/AttachmentAcceptanceTest.php deleted file mode 100644 index 920faed..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/AttachmentAcceptanceTest.php +++ /dev/null @@ -1,126 +0,0 @@ -cache = new Swift_KeyCache_ArrayKeyCache( - new Swift_KeyCache_SimpleKeyCacheInputStream() - ); - $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $this->contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); - - $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') - ); - $paramEncoder = new Swift_Encoder_Rfc2231Encoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') - ); - $this->emailValidator = new EmailValidator(); - $this->idGenerator = new Swift_Mime_IdGenerator('example.com'); - $this->headers = new Swift_Mime_SimpleHeaderSet( - new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $this->emailValidator) - ); - } - - public function testDispositionIsSetInHeader() - { - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $attachment->setDisposition('inline'); - $this->assertEquals( - 'Content-Type: application/pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: inline'."\r\n", - $attachment->toString() - ); - } - - public function testDispositionIsAttachmentByDefault() - { - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $this->assertEquals( - 'Content-Type: application/pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment'."\r\n", - $attachment->toString() - ); - } - - public function testFilenameIsSetInHeader() - { - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $attachment->setFilename('foo.pdf'); - $this->assertEquals( - 'Content-Type: application/pdf; name=foo.pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; filename=foo.pdf'."\r\n", - $attachment->toString() - ); - } - - public function testSizeIsSetInHeader() - { - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $attachment->setSize(12340); - $this->assertEquals( - 'Content-Type: application/pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; size=12340'."\r\n", - $attachment->toString() - ); - } - - public function testMultipleParametersInHeader() - { - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $attachment->setFilename('foo.pdf'); - $attachment->setSize(12340); - $this->assertEquals( - 'Content-Type: application/pdf; name=foo.pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; filename=foo.pdf; size=12340'."\r\n", - $attachment->toString() - ); - } - - public function testEndToEnd() - { - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $attachment->setFilename('foo.pdf'); - $attachment->setSize(12340); - $attachment->setBody('abcd'); - $this->assertEquals( - 'Content-Type: application/pdf; name=foo.pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; filename=foo.pdf; size=12340'."\r\n". - "\r\n". - base64_encode('abcd'), - $attachment->toString() - ); - } - - protected function createAttachment() - { - $entity = new Swift_Mime_Attachment( - $this->headers, - $this->contentEncoder, - $this->cache, - $this->idGenerator - ); - - return $entity; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/Base64ContentEncoderAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/Base64ContentEncoderAcceptanceTest.php deleted file mode 100644 index a87b30e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/Base64ContentEncoderAcceptanceTest.php +++ /dev/null @@ -1,56 +0,0 @@ -samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); - $this->encoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); - } - - public function testEncodingAndDecodingSamples() - { - $sampleFp = opendir($this->samplesDir); - while (false !== $encodingDir = readdir($sampleFp)) { - if ('.' == substr($encodingDir, 0, 1)) { - continue; - } - - $sampleDir = $this->samplesDir.'/'.$encodingDir; - - if (is_dir($sampleDir)) { - $fileFp = opendir($sampleDir); - while (false !== $sampleFile = readdir($fileFp)) { - if ('.' == substr($sampleFile, 0, 1)) { - continue; - } - - $text = file_get_contents($sampleDir.'/'.$sampleFile); - - $os = new Swift_ByteStream_ArrayByteStream(); - $os->write($text); - - $is = new Swift_ByteStream_ArrayByteStream(); - - $this->encoder->encodeByteStream($os, $is); - - $encoded = ''; - while (false !== $bytes = $is->read(8192)) { - $encoded .= $bytes; - } - - $this->assertEquals( - base64_decode($encoded), $text, - '%s: Encoded string should decode back to original string for sample '. - $sampleDir.'/'.$sampleFile - ); - } - closedir($fileFp); - } - } - closedir($sampleFp); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/NativeQpContentEncoderAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/NativeQpContentEncoderAcceptanceTest.php deleted file mode 100644 index bf0a04e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/NativeQpContentEncoderAcceptanceTest.php +++ /dev/null @@ -1,88 +0,0 @@ -samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); - $this->encoder = new Swift_Mime_ContentEncoder_NativeQpContentEncoder(); - } - - public function testEncodingAndDecodingSamples() - { - $sampleFp = opendir($this->samplesDir); - while (false !== $encodingDir = readdir($sampleFp)) { - if ('.' == substr($encodingDir, 0, 1)) { - continue; - } - - $sampleDir = $this->samplesDir.'/'.$encodingDir; - - if (is_dir($sampleDir)) { - $fileFp = opendir($sampleDir); - while (false !== $sampleFile = readdir($fileFp)) { - if ('.' == substr($sampleFile, 0, 1)) { - continue; - } - - $text = file_get_contents($sampleDir.'/'.$sampleFile); - - $os = new Swift_ByteStream_ArrayByteStream(); - $os->write($text); - - $is = new Swift_ByteStream_ArrayByteStream(); - $this->encoder->encodeByteStream($os, $is); - - $encoded = ''; - while (false !== $bytes = $is->read(8192)) { - $encoded .= $bytes; - } - - $this->assertEquals( - quoted_printable_decode($encoded), - // CR and LF are converted to CRLF - preg_replace('~\r(?!\n)|(?createEncoderFromContainer(); - $this->assertSame('=C3=A4=C3=B6=C3=BC=C3=9F', $encoder->encodeString('äöüß')); - } - - /** - * @expectedException \RuntimeException - */ - public function testCharsetChangeNotImplemented() - { - $this->encoder->charsetChanged('utf-8'); - $this->encoder->charsetChanged('charset'); - $this->encoder->encodeString('foo'); - } - - public function testGetName() - { - $this->assertSame('quoted-printable', $this->encoder->getName()); - } - - private function createEncoderFromContainer() - { - return Swift_DependencyContainer::getInstance() - ->lookup('mime.nativeqpcontentencoder') - ; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/PlainContentEncoderAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/PlainContentEncoderAcceptanceTest.php deleted file mode 100644 index 544873a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/PlainContentEncoderAcceptanceTest.php +++ /dev/null @@ -1,88 +0,0 @@ -samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); - $this->encoder = new Swift_Mime_ContentEncoder_PlainContentEncoder('8bit'); - } - - public function testEncodingAndDecodingSamplesString() - { - $sampleFp = opendir($this->samplesDir); - while (false !== $encodingDir = readdir($sampleFp)) { - if ('.' == substr($encodingDir, 0, 1)) { - continue; - } - - $sampleDir = $this->samplesDir.'/'.$encodingDir; - - if (is_dir($sampleDir)) { - $fileFp = opendir($sampleDir); - while (false !== $sampleFile = readdir($fileFp)) { - if ('.' == substr($sampleFile, 0, 1)) { - continue; - } - - $text = file_get_contents($sampleDir.'/'.$sampleFile); - $encodedText = $this->encoder->encodeString($text); - - $this->assertEquals( - $encodedText, $text, - '%s: Encoded string should be identical to original string for sample '. - $sampleDir.'/'.$sampleFile - ); - } - closedir($fileFp); - } - } - closedir($sampleFp); - } - - public function testEncodingAndDecodingSamplesByteStream() - { - $sampleFp = opendir($this->samplesDir); - while (false !== $encodingDir = readdir($sampleFp)) { - if ('.' == substr($encodingDir, 0, 1)) { - continue; - } - - $sampleDir = $this->samplesDir.'/'.$encodingDir; - - if (is_dir($sampleDir)) { - $fileFp = opendir($sampleDir); - while (false !== $sampleFile = readdir($fileFp)) { - if ('.' == substr($sampleFile, 0, 1)) { - continue; - } - - $text = file_get_contents($sampleDir.'/'.$sampleFile); - - $os = new Swift_ByteStream_ArrayByteStream(); - $os->write($text); - - $is = new Swift_ByteStream_ArrayByteStream(); - - $this->encoder->encodeByteStream($os, $is); - - $encoded = ''; - while (false !== $bytes = $is->read(8192)) { - $encoded .= $bytes; - } - - $this->assertEquals( - $encoded, $text, - '%s: Encoded string should be identical to original string for sample '. - $sampleDir.'/'.$sampleFile - ); - } - closedir($fileFp); - } - } - closedir($sampleFp); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/QpContentEncoderAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/QpContentEncoderAcceptanceTest.php deleted file mode 100644 index 26d1a9b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/QpContentEncoderAcceptanceTest.php +++ /dev/null @@ -1,160 +0,0 @@ -samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); - $this->factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - } - - protected function tearDown() - { - Swift_Preferences::getInstance()->setQPDotEscape(false); - } - - public function testEncodingAndDecodingSamples() - { - $sampleFp = opendir($this->samplesDir); - while (false !== $encodingDir = readdir($sampleFp)) { - if ('.' == substr($encodingDir, 0, 1)) { - continue; - } - - $encoding = $encodingDir; - $charStream = new Swift_CharacterStream_NgCharacterStream( - $this->factory, $encoding); - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - - $sampleDir = $this->samplesDir.'/'.$encodingDir; - - if (is_dir($sampleDir)) { - $fileFp = opendir($sampleDir); - while (false !== $sampleFile = readdir($fileFp)) { - if ('.' == substr($sampleFile, 0, 1)) { - continue; - } - - $text = file_get_contents($sampleDir.'/'.$sampleFile); - - $os = new Swift_ByteStream_ArrayByteStream(); - $os->write($text); - - $is = new Swift_ByteStream_ArrayByteStream(); - $encoder->encodeByteStream($os, $is); - - $encoded = ''; - while (false !== $bytes = $is->read(8192)) { - $encoded .= $bytes; - } - - $this->assertEquals( - quoted_printable_decode($encoded), $text, - '%s: Encoded string should decode back to original string for sample '. - $sampleDir.'/'.$sampleFile - ); - } - closedir($fileFp); - } - } - closedir($sampleFp); - } - - public function testEncodingAndDecodingSamplesFromDiConfiguredInstance() - { - $sampleFp = opendir($this->samplesDir); - while (false !== $encodingDir = readdir($sampleFp)) { - if ('.' == substr($encodingDir, 0, 1)) { - continue; - } - - $encoding = $encodingDir; - $encoder = $this->createEncoderFromContainer(); - - $sampleDir = $this->samplesDir.'/'.$encodingDir; - - if (is_dir($sampleDir)) { - $fileFp = opendir($sampleDir); - while (false !== $sampleFile = readdir($fileFp)) { - if ('.' == substr($sampleFile, 0, 1)) { - continue; - } - - $text = file_get_contents($sampleDir.'/'.$sampleFile); - - $os = new Swift_ByteStream_ArrayByteStream(); - $os->write($text); - - $is = new Swift_ByteStream_ArrayByteStream(); - $encoder->encodeByteStream($os, $is); - - $encoded = ''; - while (false !== $bytes = $is->read(8192)) { - $encoded .= $bytes; - } - - $this->assertEquals( - str_replace("\r\n", "\n", quoted_printable_decode($encoded)), str_replace("\r\n", "\n", $text), - '%s: Encoded string should decode back to original string for sample '. - $sampleDir.'/'.$sampleFile - ); - } - closedir($fileFp); - } - } - closedir($sampleFp); - } - - public function testEncodingLFTextWithDiConfiguredInstance() - { - $encoder = $this->createEncoderFromContainer(); - $this->assertEquals("a\r\nb\r\nc", $encoder->encodeString("a\nb\nc")); - } - - public function testEncodingCRTextWithDiConfiguredInstance() - { - $encoder = $this->createEncoderFromContainer(); - $this->assertEquals("a\r\nb\r\nc", $encoder->encodeString("a\rb\rc")); - } - - public function testEncodingLFCRTextWithDiConfiguredInstance() - { - $encoder = $this->createEncoderFromContainer(); - $this->assertEquals("a\r\n\r\nb\r\n\r\nc", $encoder->encodeString("a\n\rb\n\rc")); - } - - public function testEncodingCRLFTextWithDiConfiguredInstance() - { - $encoder = $this->createEncoderFromContainer(); - $this->assertEquals("a\r\nb\r\nc", $encoder->encodeString("a\r\nb\r\nc")); - } - - public function testEncodingDotStuffingWithDiConfiguredInstance() - { - // Enable DotEscaping - Swift_Preferences::getInstance()->setQPDotEscape(true); - $encoder = $this->createEncoderFromContainer(); - $this->assertEquals("a=2E\r\n=2E\r\n=2Eb\r\nc", $encoder->encodeString("a.\r\n.\r\n.b\r\nc")); - // Return to default - Swift_Preferences::getInstance()->setQPDotEscape(false); - $encoder = $this->createEncoderFromContainer(); - $this->assertEquals("a.\r\n.\r\n.b\r\nc", $encoder->encodeString("a.\r\n.\r\n.b\r\nc")); - } - - public function testDotStuffingEncodingAndDecodingSamplesFromDiConfiguredInstance() - { - // Enable DotEscaping - Swift_Preferences::getInstance()->setQPDotEscape(true); - $this->testEncodingAndDecodingSamplesFromDiConfiguredInstance(); - } - - private function createEncoderFromContainer() - { - return Swift_DependencyContainer::getInstance() - ->lookup('mime.qpcontentencoder') - ; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/EmbeddedFileAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/EmbeddedFileAcceptanceTest.php deleted file mode 100644 index 5603a67..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/EmbeddedFileAcceptanceTest.php +++ /dev/null @@ -1,139 +0,0 @@ -cache = new Swift_KeyCache_ArrayKeyCache( - new Swift_KeyCache_SimpleKeyCacheInputStream() - ); - $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $this->contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); - - $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') - ); - $paramEncoder = new Swift_Encoder_Rfc2231Encoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') - ); - $this->emailValidator = new EmailValidator(); - $this->idGenerator = new Swift_Mime_IdGenerator('example.com'); - $this->headers = new Swift_Mime_SimpleHeaderSet( - new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $this->emailValidator) - ); - } - - public function testContentIdIsSetInHeader() - { - $file = $this->createEmbeddedFile(); - $file->setContentType('application/pdf'); - $file->setId('foo@bar'); - $this->assertEquals( - 'Content-Type: application/pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: '."\r\n". - 'Content-Disposition: inline'."\r\n", - $file->toString() - ); - } - - public function testDispositionIsSetInHeader() - { - $file = $this->createEmbeddedFile(); - $id = $file->getId(); - $file->setContentType('application/pdf'); - $file->setDisposition('attachment'); - $this->assertEquals( - 'Content-Type: application/pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.$id.'>'."\r\n". - 'Content-Disposition: attachment'."\r\n", - $file->toString() - ); - } - - public function testFilenameIsSetInHeader() - { - $file = $this->createEmbeddedFile(); - $id = $file->getId(); - $file->setContentType('application/pdf'); - $file->setFilename('foo.pdf'); - $this->assertEquals( - 'Content-Type: application/pdf; name=foo.pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.$id.'>'."\r\n". - 'Content-Disposition: inline; filename=foo.pdf'."\r\n", - $file->toString() - ); - } - - public function testSizeIsSetInHeader() - { - $file = $this->createEmbeddedFile(); - $id = $file->getId(); - $file->setContentType('application/pdf'); - $file->setSize(12340); - $this->assertEquals( - 'Content-Type: application/pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.$id.'>'."\r\n". - 'Content-Disposition: inline; size=12340'."\r\n", - $file->toString() - ); - } - - public function testMultipleParametersInHeader() - { - $file = $this->createEmbeddedFile(); - $id = $file->getId(); - $file->setContentType('application/pdf'); - $file->setFilename('foo.pdf'); - $file->setSize(12340); - - $this->assertEquals( - 'Content-Type: application/pdf; name=foo.pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.$id.'>'."\r\n". - 'Content-Disposition: inline; filename=foo.pdf; size=12340'."\r\n", - $file->toString() - ); - } - - public function testEndToEnd() - { - $file = $this->createEmbeddedFile(); - $id = $file->getId(); - $file->setContentType('application/pdf'); - $file->setFilename('foo.pdf'); - $file->setSize(12340); - $file->setBody('abcd'); - $this->assertEquals( - 'Content-Type: application/pdf; name=foo.pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.$id.'>'."\r\n". - 'Content-Disposition: inline; filename=foo.pdf; size=12340'."\r\n". - "\r\n". - base64_encode('abcd'), - $file->toString() - ); - } - - protected function createEmbeddedFile() - { - $entity = new Swift_Mime_EmbeddedFile( - $this->headers, - $this->contentEncoder, - $this->cache, - $this->idGenerator - ); - - return $entity; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/HeaderEncoder/Base64HeaderEncoderAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/HeaderEncoder/Base64HeaderEncoderAcceptanceTest.php deleted file mode 100644 index 1379513..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/HeaderEncoder/Base64HeaderEncoderAcceptanceTest.php +++ /dev/null @@ -1,32 +0,0 @@ -encoder = new Swift_Mime_HeaderEncoder_Base64HeaderEncoder(); - } - - public function testEncodingJIS() - { - if (function_exists('mb_convert_encoding')) { - // base64_encode and split cannot handle long JIS text to fold - $subject = '長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い件名'; - - $encodedWrapperLength = strlen('=?iso-2022-jp?'.$this->encoder->getName().'??='); - - $old = mb_internal_encoding(); - mb_internal_encoding('utf-8'); - $newstring = mb_encode_mimeheader($subject, 'iso-2022-jp', 'B', "\r\n"); - mb_internal_encoding($old); - - $encoded = $this->encoder->encodeString($subject, 0, 75 - $encodedWrapperLength, 'iso-2022-jp'); - $this->assertEquals( - $encoded, $newstring, - 'Encoded string should decode back to original string for sample ' - ); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/MimePartAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/MimePartAcceptanceTest.php deleted file mode 100644 index 5a12daa..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/MimePartAcceptanceTest.php +++ /dev/null @@ -1,130 +0,0 @@ -cache = new Swift_KeyCache_ArrayKeyCache( - new Swift_KeyCache_SimpleKeyCacheInputStream() - ); - $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $this->contentEncoder = new Swift_Mime_ContentEncoder_QpContentEncoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'), - new Swift_StreamFilters_ByteArrayReplacementFilter( - [[0x0D, 0x0A], [0x0D], [0x0A]], - [[0x0A], [0x0A], [0x0D, 0x0A]] - ) - ); - - $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') - ); - $paramEncoder = new Swift_Encoder_Rfc2231Encoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') - ); - $this->emailValidator = new EmailValidator(); - $this->idGenerator = new Swift_Mime_IdGenerator('example.com'); - $this->headers = new Swift_Mime_SimpleHeaderSet( - new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $this->emailValidator) - ); - } - - public function testCharsetIsSetInHeader() - { - $part = $this->createMimePart(); - $part->setContentType('text/plain'); - $part->setCharset('utf-8'); - $part->setBody('foobar'); - $this->assertEquals( - 'Content-Type: text/plain; charset=utf-8'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foobar', - $part->toString() - ); - } - - public function testFormatIsSetInHeaders() - { - $part = $this->createMimePart(); - $part->setContentType('text/plain'); - $part->setFormat('flowed'); - $part->setBody('> foobar'); - $this->assertEquals( - 'Content-Type: text/plain; format=flowed'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - '> foobar', - $part->toString() - ); - } - - public function testDelSpIsSetInHeaders() - { - $part = $this->createMimePart(); - $part->setContentType('text/plain'); - $part->setDelSp(true); - $part->setBody('foobar'); - $this->assertEquals( - 'Content-Type: text/plain; delsp=yes'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foobar', - $part->toString() - ); - } - - public function testAll3ParamsInHeaders() - { - $part = $this->createMimePart(); - $part->setContentType('text/plain'); - $part->setCharset('utf-8'); - $part->setFormat('fixed'); - $part->setDelSp(true); - $part->setBody('foobar'); - $this->assertEquals( - 'Content-Type: text/plain; charset=utf-8; format=fixed; delsp=yes'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foobar', - $part->toString() - ); - } - - public function testBodyIsCanonicalized() - { - $part = $this->createMimePart(); - $part->setContentType('text/plain'); - $part->setCharset('utf-8'); - $part->setBody("foobar\r\rtest\ning\r"); - $this->assertEquals( - 'Content-Type: text/plain; charset=utf-8'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - "foobar\r\n". - "\r\n". - "test\r\n". - "ing\r\n", - $part->toString() - ); - } - - protected function createMimePart() - { - $entity = new Swift_Mime_MimePart( - $this->headers, - $this->contentEncoder, - $this->cache, - $this->idGenerator - ); - - return $entity; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/SimpleMessageAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/SimpleMessageAcceptanceTest.php deleted file mode 100644 index 1d981e7..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/SimpleMessageAcceptanceTest.php +++ /dev/null @@ -1,1250 +0,0 @@ -setCharset(null); //TODO: Test with the charset defined - } - - public function testBasicHeaders() - { - /* -- RFC 2822, 3.6. - */ - - $message = $this->createMessage(); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'From: '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString(), - '%s: Only required headers, and non-empty headers should be displayed' - ); - } - - public function testSubjectIsDisplayedIfSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testDateCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $id = $message->getId(); - $date = new DateTimeImmutable(); - $message->setDate($date); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testMessageIdCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setId('foo@bar'); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: '."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testContentTypeCanBeChanged() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setContentType('text/html'); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/html'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testCharsetCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setContentType('text/html'); - $message->setCharset('iso-8859-1'); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/html; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testFormatCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFormat('flowed'); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain; format=flowed'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testEncoderCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setContentType('text/html'); - $message->setEncoder( - new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit') - ); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/html'."\r\n". - 'Content-Transfer-Encoding: 7bit'."\r\n", - $message->toString() - ); - } - - public function testFromAddressCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom('chris.corbyn@swiftmailer.org'); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: chris.corbyn@swiftmailer.org'."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testFromAddressCanBeSetWithName() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris Corbyn']); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testMultipleFromAddressesCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org', - ]); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn , mark@swiftmailer.org'."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testReturnPathAddressCanBeSet() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testEmptyReturnPathHeaderCanBeUsed() - { - $message = $this->createMessage(); - $message->setReturnPath(''); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Return-Path: <>'."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testSenderCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setSender('chris.corbyn@swiftmailer.org'); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Sender: chris.corbyn@swiftmailer.org'."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testSenderCanBeSetWithName() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setSender(['chris.corbyn@swiftmailer.org' => 'Chris']); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Sender: Chris '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testReplyToCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); - $message->setReplyTo(['chris@w3style.co.uk' => 'Myself']); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris '."\r\n". - 'Reply-To: Myself '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testMultipleReplyAddressCanBeUsed() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); - $message->setReplyTo([ - 'chris@w3style.co.uk' => 'Myself', - 'my.other@address.com' => 'Me', - ]); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris '."\r\n". - 'Reply-To: Myself , Me '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testToAddressCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); - $message->setReplyTo([ - 'chris@w3style.co.uk' => 'Myself', - 'my.other@address.com' => 'Me', - ]); - $message->setTo('mark@swiftmailer.org'); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris '."\r\n". - 'Reply-To: Myself , Me '."\r\n". - 'To: mark@swiftmailer.org'."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testMultipleToAddressesCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); - $message->setReplyTo([ - 'chris@w3style.co.uk' => 'Myself', - 'my.other@address.com' => 'Me', - ]); - $message->setTo([ - 'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn', - ]); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris '."\r\n". - 'Reply-To: Myself , Me '."\r\n". - 'To: mark@swiftmailer.org, Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testCcAddressCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); - $message->setReplyTo([ - 'chris@w3style.co.uk' => 'Myself', - 'my.other@address.com' => 'Me', - ]); - $message->setTo([ - 'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn', - ]); - $message->setCc('john@some-site.com'); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris '."\r\n". - 'Reply-To: Myself , Me '."\r\n". - 'To: mark@swiftmailer.org, Chris Corbyn '."\r\n". - 'Cc: john@some-site.com'."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testMultipleCcAddressesCanBeSet() - { - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); - $message->setReplyTo([ - 'chris@w3style.co.uk' => 'Myself', - 'my.other@address.com' => 'Me', - ]); - $message->setTo([ - 'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn', - ]); - $message->setCc([ - 'john@some-site.com' => 'John West', - 'fred@another-site.co.uk' => 'Big Fred', - ]); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris '."\r\n". - 'Reply-To: Myself , Me '."\r\n". - 'To: mark@swiftmailer.org, Chris Corbyn '."\r\n". - 'Cc: John West , Big Fred '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testBccAddressCanBeSet() - { - //Obviously Transports need to setBcc(array()) and send to each Bcc recipient - // separately in accordance with RFC 2822/2821 - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); - $message->setReplyTo([ - 'chris@w3style.co.uk' => 'Myself', - 'my.other@address.com' => 'Me', - ]); - $message->setTo([ - 'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn', - ]); - $message->setCc([ - 'john@some-site.com' => 'John West', - 'fred@another-site.co.uk' => 'Big Fred', - ]); - $message->setBcc('x@alphabet.tld'); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris '."\r\n". - 'Reply-To: Myself , Me '."\r\n". - 'To: mark@swiftmailer.org, Chris Corbyn '."\r\n". - 'Cc: John West , Big Fred '."\r\n". - 'Bcc: x@alphabet.tld'."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testMultipleBccAddressesCanBeSet() - { - //Obviously Transports need to setBcc(array()) and send to each Bcc recipient - // separately in accordance with RFC 2822/2821 - $message = $this->createMessage(); - $message->setSubject('just a test subject'); - $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); - $message->setReplyTo([ - 'chris@w3style.co.uk' => 'Myself', - 'my.other@address.com' => 'Me', - ]); - $message->setTo([ - 'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn', - ]); - $message->setCc([ - 'john@some-site.com' => 'John West', - 'fred@another-site.co.uk' => 'Big Fred', - ]); - $message->setBcc(['x@alphabet.tld', 'a@alphabet.tld' => 'A']); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris '."\r\n". - 'Reply-To: Myself , Me '."\r\n". - 'To: mark@swiftmailer.org, Chris Corbyn '."\r\n". - 'Cc: John West , Big Fred '."\r\n". - 'Bcc: x@alphabet.tld, A '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString() - ); - } - - public function testStringBodyIsAppended() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - $message->setBody( - 'just a test body'."\r\n". - 'with a new line' - ); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'just a test body'."\r\n". - 'with a new line', - $message->toString() - ); - } - - public function testStringBodyIsEncoded() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - $message->setBody( - 'Just s'.pack('C*', 0xC2, 0x01, 0x01).'me multi-'."\r\n". - 'line message!' - ); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'Just s=C2=01=01me multi-'."\r\n". - 'line message!', - $message->toString() - ); - } - - public function testChildrenCanBeAttached() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - - $id = $message->getId(); - $date = $message->getDate(); - $boundary = $message->getBoundary(); - - $part1 = $this->createMimePart(); - $part1->setContentType('text/plain'); - $part1->setCharset('iso-8859-1'); - $part1->setBody('foo'); - - $message->attach($part1); - - $part2 = $this->createMimePart(); - $part2->setContentType('text/html'); - $part2->setCharset('iso-8859-1'); - $part2->setBody('test foo'); - - $message->attach($part2); - - $this->assertEquals( - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/alternative;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/plain; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foo'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/html; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'test foo'. - "\r\n\r\n". - '--'.$boundary.'--'."\r\n", - $message->toString() - ); - } - - public function testAttachmentsBeingAttached() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - - $id = $message->getId(); - $date = preg_quote($message->getDate()->format('r'), '~'); - $boundary = $message->getBoundary(); - - $part = $this->createMimePart(); - $part->setContentType('text/plain'); - $part->setCharset('iso-8859-1'); - $part->setBody('foo'); - - $message->attach($part); - - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $attachment->setFilename('foo.pdf'); - $attachment->setBody(''); - - $message->attach($attachment); - - $this->assertRegExp( - '~^'. - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/mixed;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: multipart/alternative;'."\r\n". - ' boundary="(.*?)"'."\r\n". - "\r\n\r\n". - '--\\1'."\r\n". - 'Content-Type: text/plain; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foo'. - "\r\n\r\n". - '--\\1--'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: application/pdf; name=foo.pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; filename=foo.pdf'."\r\n". - "\r\n". - preg_quote(base64_encode(''), '~'). - "\r\n\r\n". - '--'.$boundary.'--'."\r\n". - '$~D', - $message->toString() - ); - } - - public function testAttachmentsAndEmbeddedFilesBeingAttached() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - - $id = $message->getId(); - $date = preg_quote($message->getDate()->format('r'), '~'); - $boundary = $message->getBoundary(); - - $part = $this->createMimePart(); - $part->setContentType('text/plain'); - $part->setCharset('iso-8859-1'); - $part->setBody('foo'); - - $message->attach($part); - - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $attachment->setFilename('foo.pdf'); - $attachment->setBody(''); - - $message->attach($attachment); - - $file = $this->createEmbeddedFile(); - $file->setContentType('image/jpeg'); - $file->setFilename('myimage.jpg'); - $file->setBody(''); - - $message->attach($file); - - $cid = $file->getId(); - - $this->assertRegExp( - '~^'. - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/mixed;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: multipart/alternative;'."\r\n". - ' boundary="(.*?)"'."\r\n". - "\r\n\r\n". - '--\\1'."\r\n". - 'Content-Type: text/plain; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foo'. - - "\r\n\r\n". - '--\\1'."\r\n". - 'Content-Type: multipart/related;'."\r\n". - ' boundary="(.*?)"'."\r\n". - "\r\n\r\n". - '--\\2'."\r\n". - 'Content-Type: image/jpeg; name=myimage.jpg'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.$cid.'>'."\r\n". - 'Content-Disposition: inline; filename=myimage.jpg'."\r\n". - "\r\n". - preg_quote(base64_encode(''), '~'). - "\r\n\r\n". - '--\\2--'."\r\n". - "\r\n\r\n". - '--\\1--'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: application/pdf; name=foo.pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; filename=foo.pdf'."\r\n". - "\r\n". - preg_quote(base64_encode(''), '~'). - "\r\n\r\n". - '--'.$boundary.'--'."\r\n". - '$~D', - $message->toString() - ); - } - - public function testComplexEmbeddingOfContent() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - - $id = $message->getId(); - $date = preg_quote($message->getDate()->format('r'), '~'); - $boundary = $message->getBoundary(); - - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $attachment->setFilename('foo.pdf'); - $attachment->setBody(''); - - $message->attach($attachment); - - $file = $this->createEmbeddedFile(); - $file->setContentType('image/jpeg'); - $file->setFilename('myimage.jpg'); - $file->setBody(''); - - $part = $this->createMimePart(); - $part->setContentType('text/html'); - $part->setCharset('iso-8859-1'); - $part->setBody('foo '); - - $message->attach($part); - - $cid = $file->getId(); - - $this->assertRegExp( - '~^'. - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/mixed;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: multipart/related;'."\r\n". - ' boundary="(.*?)"'."\r\n". - "\r\n\r\n". - '--\\1'."\r\n". - 'Content-Type: text/html; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foo './/=3D is just = in QP - "\r\n\r\n". - '--\\1'."\r\n". - 'Content-Type: image/jpeg; name=myimage.jpg'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.$cid.'>'."\r\n". - 'Content-Disposition: inline; filename=myimage.jpg'."\r\n". - "\r\n". - preg_quote(base64_encode(''), '~'). - "\r\n\r\n". - '--\\1--'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: application/pdf; name=foo.pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; filename=foo.pdf'."\r\n". - "\r\n". - preg_quote(base64_encode(''), '~'). - "\r\n\r\n". - '--'.$boundary.'--'."\r\n". - '$~D', - $message->toString() - ); - } - - public function testAttachingAndDetachingContent() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - - $id = $message->getId(); - $date = preg_quote($message->getDate()->format('r'), '~'); - $boundary = $message->getBoundary(); - - $part = $this->createMimePart(); - $part->setContentType('text/plain'); - $part->setCharset('iso-8859-1'); - $part->setBody('foo'); - - $message->attach($part); - - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $attachment->setFilename('foo.pdf'); - $attachment->setBody(''); - - $message->attach($attachment); - - $file = $this->createEmbeddedFile(); - $file->setContentType('image/jpeg'); - $file->setFilename('myimage.jpg'); - $file->setBody(''); - - $message->attach($file); - - $cid = $file->getId(); - - $message->detach($attachment); - - $this->assertRegExp( - '~^'. - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/alternative;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/plain; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foo'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: multipart/related;'."\r\n". - ' boundary="(.*?)"'."\r\n". - "\r\n\r\n". - '--\\1'."\r\n". - 'Content-Type: image/jpeg; name=myimage.jpg'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.$cid.'>'."\r\n". - 'Content-Disposition: inline; filename=myimage.jpg'."\r\n". - "\r\n". - preg_quote(base64_encode(''), '~'). - "\r\n\r\n". - '--\\1--'."\r\n". - "\r\n\r\n". - '--'.$boundary.'--'."\r\n". - '$~D', - $message->toString(), - '%s: Attachment should have been detached' - ); - } - - public function testBoundaryDoesNotAppearAfterAllPartsAreDetached() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - - $id = $message->getId(); - $date = $message->getDate(); - $boundary = $message->getBoundary(); - - $part1 = $this->createMimePart(); - $part1->setContentType('text/plain'); - $part1->setCharset('iso-8859-1'); - $part1->setBody('foo'); - - $message->attach($part1); - - $part2 = $this->createMimePart(); - $part2->setContentType('text/html'); - $part2->setCharset('iso-8859-1'); - $part2->setBody('test foo'); - - $message->attach($part2); - - $message->detach($part1); - $message->detach($part2); - - $this->assertEquals( - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n", - $message->toString(), - '%s: Message should be restored to orignal state after parts are detached' - ); - } - - public function testCharsetFormatOrDelSpAreNotShownWhenBoundaryIsSet() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - $message->setCharset('utf-8'); - $message->setFormat('flowed'); - $message->setDelSp(true); - - $id = $message->getId(); - $date = $message->getDate(); - $boundary = $message->getBoundary(); - - $part1 = $this->createMimePart(); - $part1->setContentType('text/plain'); - $part1->setCharset('iso-8859-1'); - $part1->setBody('foo'); - - $message->attach($part1); - - $part2 = $this->createMimePart(); - $part2->setContentType('text/html'); - $part2->setCharset('iso-8859-1'); - $part2->setBody('test foo'); - - $message->attach($part2); - - $this->assertEquals( - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/alternative;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/plain; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foo'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/html; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'test foo'. - "\r\n\r\n". - '--'.$boundary.'--'."\r\n", - $message->toString() - ); - } - - public function testBodyCanBeSetWithAttachments() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - $message->setContentType('text/html'); - $message->setCharset('iso-8859-1'); - $message->setBody('foo'); - - $id = $message->getId(); - $date = $message->getDate()->format('r'); - $boundary = $message->getBoundary(); - - $attachment = $this->createAttachment(); - $attachment->setContentType('application/pdf'); - $attachment->setFilename('foo.pdf'); - $attachment->setBody(''); - - $message->attach($attachment); - - $this->assertEquals( - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/mixed;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/html; charset=iso-8859-1'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foo'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: application/pdf; name=foo.pdf'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; filename=foo.pdf'."\r\n". - "\r\n". - base64_encode(''). - "\r\n\r\n". - '--'.$boundary.'--'."\r\n", - $message->toString() - ); - } - - public function testHtmlPartAlwaysAppearsLast() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - - $id = $message->getId(); - $date = $message->getDate()->format('r'); - $boundary = $message->getBoundary(); - - $part1 = $this->createMimePart(); - $part1->setContentType('text/html'); - $part1->setBody('foo'); - - $part2 = $this->createMimePart(); - $part2->setContentType('text/plain'); - $part2->setBody('bar'); - - $message->attach($part1); - $message->attach($part2); - - $this->assertEquals( - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/alternative;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'bar'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/html'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foo'. - "\r\n\r\n". - '--'.$boundary.'--'."\r\n", - $message->toString() - ); - } - - public function testBodyBecomesPartIfOtherPartsAttached() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - $message->setContentType('text/html'); - $message->setBody('foo'); - - $id = $message->getId(); - $date = $message->getDate()->format('r'); - $boundary = $message->getBoundary(); - - $part2 = $this->createMimePart(); - $part2->setContentType('text/plain'); - $part2->setBody('bar'); - - $message->attach($part2); - - $this->assertEquals( - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/alternative;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'bar'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/html'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'foo'. - "\r\n\r\n". - '--'.$boundary.'--'."\r\n", - $message->toString() - ); - } - - public function testBodyIsCanonicalized() - { - $message = $this->createMessage(); - $message->setReturnPath('chris@w3style.co.uk'); - $message->setSubject('just a test subject'); - $message->setFrom([ - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); - $message->setBody( - 'just a test body'."\n". - 'with a new line' - ); - $id = $message->getId(); - $date = $message->getDate(); - $this->assertEquals( - 'Return-Path: '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date->format('r')."\r\n". - 'Subject: just a test subject'."\r\n". - 'From: Chris Corbyn '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: text/plain'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'just a test body'."\r\n". - 'with a new line', - $message->toString() - ); - } - - protected function createMessage() - { - return new Swift_Message(); - } - - protected function createMimePart() - { - return new Swift_MimePart(); - } - - protected function createAttachment() - { - return new Swift_Attachment(); - } - - protected function createEmbeddedFile() - { - return new Swift_EmbeddedFile(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MimePartAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MimePartAcceptanceTest.php deleted file mode 100644 index 581afc7..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MimePartAcceptanceTest.php +++ /dev/null @@ -1,15 +0,0 @@ -register('properties.charset')->asValue(null); - - return new Swift_MimePart(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/AbstractStreamBufferAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/AbstractStreamBufferAcceptanceTest.php deleted file mode 100644 index 9bc09f8..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/AbstractStreamBufferAcceptanceTest.php +++ /dev/null @@ -1,131 +0,0 @@ -markTestSkipped( - 'Will fail on travis-ci if not skipped due to travis blocking '. - 'socket mailing tcp connections.' - ); - } - - $this->buffer = new Swift_Transport_StreamBuffer( - $this->getMockBuilder('Swift_ReplacementFilterFactory')->getMock() - ); - } - - public function testReadLine() - { - $this->initializeBuffer(); - - $line = $this->buffer->readLine(0); - $this->assertRegExp('/^[0-9]{3}.*?\r\n$/D', $line); - $seq = $this->buffer->write("QUIT\r\n"); - $this->assertTrue((bool) $seq); - $line = $this->buffer->readLine($seq); - $this->assertRegExp('/^[0-9]{3}.*?\r\n$/D', $line); - $this->buffer->terminate(); - } - - public function testWrite() - { - $this->initializeBuffer(); - - $line = $this->buffer->readLine(0); - $this->assertRegExp('/^[0-9]{3}.*?\r\n$/D', $line); - - $seq = $this->buffer->write("HELO foo\r\n"); - $this->assertTrue((bool) $seq); - $line = $this->buffer->readLine($seq); - $this->assertRegExp('/^[0-9]{3}.*?\r\n$/D', $line); - - $seq = $this->buffer->write("QUIT\r\n"); - $this->assertTrue((bool) $seq); - $line = $this->buffer->readLine($seq); - $this->assertRegExp('/^[0-9]{3}.*?\r\n$/D', $line); - $this->buffer->terminate(); - } - - public function testBindingOtherStreamsMirrorsWriteOperations() - { - $this->initializeBuffer(); - - $is1 = $this->createMockInputStream(); - $is2 = $this->createMockInputStream(); - - $is1->expects($this->at(0)) - ->method('write') - ->with('x'); - $is1->expects($this->at(1)) - ->method('write') - ->with('y'); - $is2->expects($this->at(0)) - ->method('write') - ->with('x'); - $is2->expects($this->at(1)) - ->method('write') - ->with('y'); - - $this->buffer->bind($is1); - $this->buffer->bind($is2); - - $this->buffer->write('x'); - $this->buffer->write('y'); - } - - public function testBindingOtherStreamsMirrorsFlushOperations() - { - $this->initializeBuffer(); - - $is1 = $this->createMockInputStream(); - $is2 = $this->createMockInputStream(); - - $is1->expects($this->once()) - ->method('flushBuffers'); - $is2->expects($this->once()) - ->method('flushBuffers'); - - $this->buffer->bind($is1); - $this->buffer->bind($is2); - - $this->buffer->flushBuffers(); - } - - public function testUnbindingStreamPreventsFurtherWrites() - { - $this->initializeBuffer(); - - $is1 = $this->createMockInputStream(); - $is2 = $this->createMockInputStream(); - - $is1->expects($this->at(0)) - ->method('write') - ->with('x'); - $is1->expects($this->at(1)) - ->method('write') - ->with('y'); - $is2->expects($this->once()) - ->method('write') - ->with('x'); - - $this->buffer->bind($is1); - $this->buffer->bind($is2); - - $this->buffer->write('x'); - - $this->buffer->unbind($is2); - - $this->buffer->write('y'); - } - - private function createMockInputStream() - { - return $this->getMockBuilder('Swift_InputByteStream')->getMock(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/BasicSocketAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/BasicSocketAcceptanceTest.php deleted file mode 100644 index 739a7ec..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/BasicSocketAcceptanceTest.php +++ /dev/null @@ -1,33 +0,0 @@ -markTestSkipped( - 'Cannot run test without an SMTP host to connect to (define '. - 'SWIFT_SMTP_HOST in tests/acceptance.conf.php if you wish to run this test)' - ); - } - parent::setUp(); - } - - protected function initializeBuffer() - { - $parts = explode(':', SWIFT_SMTP_HOST); - $host = $parts[0]; - $port = $parts[1] ?? 25; - - $this->buffer->initialize([ - 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, - 'host' => $host, - 'port' => $port, - 'protocol' => 'tcp', - 'blocking' => 1, - 'timeout' => 15, - ]); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/ProcessAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/ProcessAcceptanceTest.php deleted file mode 100644 index 34ef3cb..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/ProcessAcceptanceTest.php +++ /dev/null @@ -1,26 +0,0 @@ -markTestSkipped( - 'Cannot run test without a path to sendmail (define '. - 'SWIFT_SENDMAIL_PATH in tests/acceptance.conf.php if you wish to run this test)' - ); - } - - parent::setUp(); - } - - protected function initializeBuffer() - { - $this->buffer->initialize([ - 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS, - 'command' => SWIFT_SENDMAIL_PATH.' -bs', - ]); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SocketTimeoutTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SocketTimeoutTest.php deleted file mode 100644 index 67073f8..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SocketTimeoutTest.php +++ /dev/null @@ -1,65 +0,0 @@ -markTestSkipped( - 'Cannot run test without an SMTP host to connect to (define '. - 'SWIFT_SMTP_HOST in tests/acceptance.conf.php if you wish to run this test)' - ); - } - - $serverStarted = false; - for ($i = 0; $i < 5; ++$i) { - $this->randomHighPort = random_int(50000, 65000); - $this->server = stream_socket_server('tcp://127.0.0.1:'.$this->randomHighPort); - if ($this->server) { - $serverStarted = true; - } - } - - $this->buffer = new Swift_Transport_StreamBuffer( - $this->getMockBuilder('Swift_ReplacementFilterFactory')->getMock() - ); - } - - protected function initializeBuffer() - { - $host = '127.0.0.1'; - $port = $this->randomHighPort; - - $this->buffer->initialize([ - 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, - 'host' => $host, - 'port' => $port, - 'protocol' => 'tcp', - 'blocking' => 1, - 'timeout' => 1, - ]); - } - - public function testTimeoutException() - { - $this->initializeBuffer(); - $e = null; - try { - $line = $this->buffer->readLine(0); - } catch (Exception $e) { - } - $this->assertInstanceOf('Swift_IoException', $e, 'IO Exception Not Thrown On Connection Timeout'); - $this->assertRegExp('/Connection to .* Timed Out/', $e->getMessage()); - } - - protected function tearDown() - { - if ($this->server) { - stream_socket_shutdown($this->server, STREAM_SHUT_RDWR); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SslSocketAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SslSocketAcceptanceTest.php deleted file mode 100644 index e3bee2c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SslSocketAcceptanceTest.php +++ /dev/null @@ -1,40 +0,0 @@ -markTestSkipped( - 'SSL is not configured for your system. It is not possible to run this test' - ); - } - if (!defined('SWIFT_SSL_HOST')) { - $this->markTestSkipped( - 'Cannot run test without an SSL enabled SMTP host to connect to (define '. - 'SWIFT_SSL_HOST in tests/acceptance.conf.php if you wish to run this test)' - ); - } - - parent::setUp(); - } - - protected function initializeBuffer() - { - $parts = explode(':', SWIFT_SSL_HOST); - $host = $parts[0]; - $port = $parts[1] ?? 25; - - $this->buffer->initialize([ - 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, - 'host' => $host, - 'port' => $port, - 'protocol' => 'ssl', - 'blocking' => 1, - 'timeout' => 15, - ]); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/TlsSocketAcceptanceTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/TlsSocketAcceptanceTest.php deleted file mode 100644 index a5092a2..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/TlsSocketAcceptanceTest.php +++ /dev/null @@ -1,39 +0,0 @@ -markTestSkipped( - 'TLS is not configured for your system. It is not possible to run this test' - ); - } - if (!defined('SWIFT_TLS_HOST')) { - $this->markTestSkipped( - 'Cannot run test without a TLS enabled SMTP host to connect to (define '. - 'SWIFT_TLS_HOST in tests/acceptance.conf.php if you wish to run this test)' - ); - } - parent::setUp(); - } - - protected function initializeBuffer() - { - $parts = explode(':', SWIFT_TLS_HOST); - $host = $parts[0]; - $port = $parts[1] ?? 25; - - $this->buffer->initialize([ - 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, - 'host' => $host, - 'port' => $port, - 'protocol' => 'tls', - 'blocking' => 1, - 'timeout' => 15, - ]); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bootstrap.php b/lib/vendor/swiftmailer/swiftmailer/tests/bootstrap.php deleted file mode 100644 index 27091a2..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bootstrap.php +++ /dev/null @@ -1,21 +0,0 @@ -allowMockingNonExistentMethods(true); - -if (is_file(__DIR__.'/acceptance.conf.php')) { - require_once __DIR__.'/acceptance.conf.php'; -} -if (is_file(__DIR__.'/smoke.conf.php')) { - require_once __DIR__.'/smoke.conf.php'; -} -require_once __DIR__.'/StreamCollector.php'; -require_once __DIR__.'/IdenticalBinaryConstraint.php'; -require_once __DIR__.'/SwiftMailerTestCase.php'; -require_once __DIR__.'/SwiftMailerSmokeTestCase.php'; diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug111Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug111Test.php deleted file mode 100644 index e9085a9..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug111Test.php +++ /dev/null @@ -1,42 +0,0 @@ - [ - 'email1@example.com', - 'email2@example.com', - 'email3@example.com', - 'email4@example.com', - 'email5@example.com', - ], - 'sub' => [ - '-name-' => [ - 'email1', - '"email2"', - 'email3\\', - 'email4', - 'email5', - ], - '-url-' => [ - 'http://google.com', - 'http://yahoo.com', - 'http://hotmail.com', - 'http://aol.com', - 'http://facebook.com', - ], - ], - ]; - $json = json_encode($complicated_header); - - $message = new Swift_Message(); - $headers = $message->getHeaders(); - $headers->addTextHeader('X-SMTPAPI', $json); - $header = $headers->get('X-SMTPAPI'); - - $this->assertEquals('Swift_Mime_Headers_UnstructuredHeader', get_class($header)); - $this->assertEquals($json, $header->getFieldBody()); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug118Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug118Test.php deleted file mode 100644 index 34aa136..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug118Test.php +++ /dev/null @@ -1,20 +0,0 @@ -message = new Swift_Message(); - } - - public function testCallingGenerateIdChangesTheMessageId() - { - $currentId = $this->message->getId(); - $this->message->generateId(); - $newId = $this->message->getId(); - - $this->assertNotEquals($currentId, $newId); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug206Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug206Test.php deleted file mode 100644 index 67c9551..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug206Test.php +++ /dev/null @@ -1,40 +0,0 @@ -factory = new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $emailValidator); - } - - public function testMailboxHeaderEncoding() - { - $this->doTestHeaderIsFullyEncoded('email@example.org', 'Family Name, Name', ' "Family Name, Name" '); - $this->doTestHeaderIsFullyEncoded('email@example.org', 'Family Namé, Name', ' Family =?utf-8?Q?Nam=C3=A9=2C?= Name'); - $this->doTestHeaderIsFullyEncoded('email@example.org', 'Family Namé , Name', ' Family =?utf-8?Q?Nam=C3=A9_=2C?= Name'); - $this->doTestHeaderIsFullyEncoded('email@example.org', 'Family Namé ;Name', ' Family =?utf-8?Q?Nam=C3=A9_=3BName?= '); - } - - private function doTestHeaderIsFullyEncoded($email, $name, $expected) - { - $mailboxHeader = $this->factory->createMailboxHeader('To', [ - $email => $name, - ]); - - $headerBody = substr($mailboxHeader->toString(), 3, strlen($expected)); - - $this->assertEquals($expected, $headerBody); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug274Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug274Test.php deleted file mode 100644 index ddf6ca1..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug274Test.php +++ /dev/null @@ -1,25 +0,0 @@ -attach(Swift_Attachment::fromPath('')); - } - - public function testNonEmptyFileNameAsAttachment() - { - $message = new Swift_Message(); - try { - $message->attach(Swift_Attachment::fromPath(__FILE__)); - } catch (Exception $e) { - $this->fail('Path should not be empty'); - } - $this->addToAssertionCount(1); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug34Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug34Test.php deleted file mode 100644 index 0c8dd17..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug34Test.php +++ /dev/null @@ -1,75 +0,0 @@ -setCharset('utf-8'); - } - - public function testEmbeddedFilesWithMultipartDataCreateMultipartRelatedContentAsAnAlternative() - { - $message = new Swift_Message(); - $message->setCharset('utf-8'); - $message->setSubject('test subject'); - $message->addPart('plain part', 'text/plain'); - - $image = new Swift_Image('', 'image.gif', 'image/gif'); - $cid = $message->embed($image); - - $message->setBody('', 'text/html'); - - $message->setTo(['user@domain.tld' => 'User']); - - $message->setFrom(['other@domain.tld' => 'Other']); - $message->setSender(['other@domain.tld' => 'Other']); - - $id = $message->getId(); - $date = preg_quote($message->getDate()->format('r'), '~'); - $boundary = $message->getBoundary(); - $cidVal = $image->getId(); - - $this->assertRegExp( - '~^'. - 'Sender: Other '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: test subject'."\r\n". - 'From: Other '."\r\n". - 'To: User '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/alternative;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/plain; charset=utf-8'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'plain part'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: multipart/related;'."\r\n". - ' boundary="(.*?)"'."\r\n". - "\r\n\r\n". - '--\\1'."\r\n". - 'Content-Type: text/html; charset=utf-8'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - ''. - "\r\n\r\n". - '--\\1'."\r\n". - 'Content-Type: image/gif; name=image.gif'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.$cidVal.'>'."\r\n". - 'Content-Disposition: inline; filename=image.gif'."\r\n". - "\r\n". - preg_quote(base64_encode(''), '~'). - "\r\n\r\n". - '--\\1--'."\r\n". - "\r\n\r\n". - '--'.$boundary.'--'."\r\n". - '$~D', - $message->toString() - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug35Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug35Test.php deleted file mode 100644 index 66644e9..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug35Test.php +++ /dev/null @@ -1,73 +0,0 @@ -setCharset('utf-8'); - } - - public function testHTMLPartAppearsLastEvenWhenAttachmentsAdded() - { - $message = new Swift_Message(); - $message->setCharset('utf-8'); - $message->setSubject('test subject'); - $message->addPart('plain part', 'text/plain'); - - $attachment = new Swift_Attachment('', 'image.gif', 'image/gif'); - $message->attach($attachment); - - $message->setBody('HTML part', 'text/html'); - - $message->setTo(['user@domain.tld' => 'User']); - - $message->setFrom(['other@domain.tld' => 'Other']); - $message->setSender(['other@domain.tld' => 'Other']); - - $id = $message->getId(); - $date = preg_quote($message->getDate()->format('r'), '~'); - $boundary = $message->getBoundary(); - - $this->assertRegExp( - '~^'. - 'Sender: Other '."\r\n". - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: test subject'."\r\n". - 'From: Other '."\r\n". - 'To: User '."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/mixed;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: multipart/alternative;'."\r\n". - ' boundary="(.*?)"'."\r\n". - "\r\n\r\n". - '--\\1'."\r\n". - 'Content-Type: text/plain; charset=utf-8'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'plain part'. - "\r\n\r\n". - '--\\1'."\r\n". - 'Content-Type: text/html; charset=utf-8'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'HTML part'. - "\r\n\r\n". - '--\\1--'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: image/gif; name=image.gif'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; filename=image.gif'."\r\n". - "\r\n". - preg_quote(base64_encode(''), '~'). - "\r\n\r\n". - '--'.$boundary.'--'."\r\n". - '$~D', - $message->toString() - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug38Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug38Test.php deleted file mode 100644 index 472c805..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug38Test.php +++ /dev/null @@ -1,192 +0,0 @@ -attFileName = 'data.txt'; - $this->attFileType = 'text/plain'; - $this->attFile = __DIR__.'/../../_samples/files/data.txt'; - Swift_Preferences::getInstance()->setCharset('utf-8'); - } - - public function testWritingMessageToByteStreamProducesCorrectStructure() - { - $message = new Swift_Message(); - $message->setSubject('test subject'); - $message->setTo('user@domain.tld'); - $message->setCc('other@domain.tld'); - $message->setFrom('user@domain.tld'); - - $image = new Swift_Image('', 'image.gif', 'image/gif'); - - $cid = $message->embed($image); - $message->setBody('HTML part', 'text/html'); - - $id = $message->getId(); - $date = preg_quote($message->getDate()->format('r'), '~'); - $boundary = $message->getBoundary(); - $imgId = $image->getId(); - - $stream = new Swift_ByteStream_ArrayByteStream(); - - $message->toByteStream($stream); - - $this->assertPatternInStream( - '~^'. - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: test subject'."\r\n". - 'From: user@domain.tld'."\r\n". - 'To: user@domain.tld'."\r\n". - 'Cc: other@domain.tld'."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/related;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/html; charset=utf-8'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'HTML part'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: image/gif; name=image.gif'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.preg_quote($imgId, '~').'>'."\r\n". - 'Content-Disposition: inline; filename=image.gif'."\r\n". - "\r\n". - preg_quote(base64_encode(''), '~'). - "\r\n\r\n". - '--'.$boundary.'--'."\r\n". - '$~D', - $stream - ); - } - - public function testWritingMessageToByteStreamTwiceProducesCorrectStructure() - { - $message = new Swift_Message(); - $message->setSubject('test subject'); - $message->setTo('user@domain.tld'); - $message->setCc('other@domain.tld'); - $message->setFrom('user@domain.tld'); - - $image = new Swift_Image('', 'image.gif', 'image/gif'); - - $cid = $message->embed($image); - $message->setBody('HTML part', 'text/html'); - - $id = $message->getId(); - $date = preg_quote($message->getDate()->format('r'), '~'); - $boundary = $message->getBoundary(); - $imgId = $image->getId(); - - $pattern = '~^'. - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: test subject'."\r\n". - 'From: user@domain.tld'."\r\n". - 'To: user@domain.tld'."\r\n". - 'Cc: other@domain.tld'."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/related;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/html; charset=utf-8'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'HTML part'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: image/gif; name=image.gif'."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-ID: <'.preg_quote($imgId, '~').'>'."\r\n". - 'Content-Disposition: inline; filename=image.gif'."\r\n". - "\r\n". - preg_quote(base64_encode(''), '~'). - "\r\n\r\n". - '--'.$boundary.'--'."\r\n". - '$~D' - ; - - $streamA = new Swift_ByteStream_ArrayByteStream(); - $streamB = new Swift_ByteStream_ArrayByteStream(); - - $message->toByteStream($streamA); - $message->toByteStream($streamB); - - $this->assertPatternInStream($pattern, $streamA); - $this->assertPatternInStream($pattern, $streamB); - } - - public function testWritingMessageToByteStreamTwiceUsingAFileAttachment() - { - $message = new Swift_Message(); - $message->setSubject('test subject'); - $message->setTo('user@domain.tld'); - $message->setCc('other@domain.tld'); - $message->setFrom('user@domain.tld'); - - $attachment = Swift_Attachment::fromPath($this->attFile); - - $message->attach($attachment); - - $message->setBody('HTML part', 'text/html'); - - $id = $message->getId(); - $date = preg_quote($message->getDate()->format('r'), '~'); - $boundary = $message->getBoundary(); - - $streamA = new Swift_ByteStream_ArrayByteStream(); - $streamB = new Swift_ByteStream_ArrayByteStream(); - - $pattern = '~^'. - 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.$date."\r\n". - 'Subject: test subject'."\r\n". - 'From: user@domain.tld'."\r\n". - 'To: user@domain.tld'."\r\n". - 'Cc: other@domain.tld'."\r\n". - 'MIME-Version: 1.0'."\r\n". - 'Content-Type: multipart/mixed;'."\r\n". - ' boundary="'.$boundary.'"'."\r\n". - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: text/html; charset=utf-8'."\r\n". - 'Content-Transfer-Encoding: quoted-printable'."\r\n". - "\r\n". - 'HTML part'. - "\r\n\r\n". - '--'.$boundary."\r\n". - 'Content-Type: '.$this->attFileType.'; name='.$this->attFileName."\r\n". - 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; filename='.$this->attFileName."\r\n". - "\r\n". - preg_quote(base64_encode(file_get_contents($this->attFile)), '~'). - "\r\n\r\n". - '--'.$boundary.'--'."\r\n". - '$~D' - ; - - $message->toByteStream($streamA); - $message->toByteStream($streamB); - - $this->assertPatternInStream($pattern, $streamA); - $this->assertPatternInStream($pattern, $streamB); - } - - public function assertPatternInStream($pattern, $stream, $message = '%s') - { - $string = ''; - while (false !== $bytes = $stream->read(8192)) { - $string .= $bytes; - } - $this->assertRegExp($pattern, $string, $message); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug518Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug518Test.php deleted file mode 100644 index e4d1d7c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug518Test.php +++ /dev/null @@ -1,38 +0,0 @@ -setTo('foo@bar.com'); - - $that = $this; - $messageValidation = function ($m) use ($that) { - //the getTo should return the same value as we put in - $that->assertEquals('foo@bar.com', key($m->getTo()), 'The message has changed after it was put to the memory queue'); - - return true; - }; - - $transport = m::mock('Swift_Transport'); - $transport->shouldReceive('isStarted')->andReturn(true); - $transport->shouldReceive('send') - ->with(m::on($messageValidation), $failedRecipients) - ->andReturn(1); - - $memorySpool = new Swift_MemorySpool(); - $memorySpool->queueMessage($message); - - /* - * The message is queued in memory. - * Lets change the message - */ - $message->setTo('other@value.com'); - - $memorySpool->flushQueue($transport, $failedRecipients); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php deleted file mode 100644 index fdeb89b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php +++ /dev/null @@ -1,110 +0,0 @@ -attachmentFile = sys_get_temp_dir().'/attach.rand.bin'; - file_put_contents($this->attachmentFile, ''); - - $this->outputFile = sys_get_temp_dir().'/attach.out.bin'; - file_put_contents($this->outputFile, ''); - } - - protected function tearDown() - { - unlink($this->attachmentFile); - unlink($this->outputFile); - } - - public function testAttachmentsDoNotGetTruncatedUsingToByteStream() - { - //Run 100 times with 10KB attachments - for ($i = 0; $i < 10; ++$i) { - $message = $this->createMessageWithRandomAttachment( - 10000, $this->attachmentFile - ); - - file_put_contents($this->outputFile, ''); - $message->toByteStream( - new Swift_ByteStream_FileByteStream($this->outputFile, true) - ); - - $emailSource = file_get_contents($this->outputFile); - - $this->assertAttachmentFromSourceMatches( - file_get_contents($this->attachmentFile), - $emailSource - ); - } - } - - public function testAttachmentsDoNotGetTruncatedUsingToString() - { - //Run 100 times with 10KB attachments - for ($i = 0; $i < 10; ++$i) { - $message = $this->createMessageWithRandomAttachment( - 10000, $this->attachmentFile - ); - - $emailSource = $message->toString(); - - $this->assertAttachmentFromSourceMatches( - file_get_contents($this->attachmentFile), - $emailSource - ); - } - } - - public function assertAttachmentFromSourceMatches($attachmentData, $source) - { - $encHeader = 'Content-Transfer-Encoding: base64'; - $base64declaration = strpos($source, $encHeader); - - $attachmentDataStart = strpos($source, "\r\n\r\n", $base64declaration); - $attachmentDataEnd = strpos($source, "\r\n--", $attachmentDataStart); - - if (false === $attachmentDataEnd) { - $attachmentBase64 = trim(substr($source, $attachmentDataStart)); - } else { - $attachmentBase64 = trim(substr( - $source, $attachmentDataStart, - $attachmentDataEnd - $attachmentDataStart - )); - } - - $this->assertIdenticalBinary($attachmentData, base64_decode($attachmentBase64)); - } - - private function fillFileWithRandomBytes($byteCount, $file) - { - // I was going to use dd with if=/dev/random but this way seems more - // cross platform even if a hella expensive!! - - file_put_contents($file, ''); - $fp = fopen($file, 'wb'); - for ($i = 0; $i < $byteCount; ++$i) { - $byteVal = random_int(0, 255); - fwrite($fp, pack('i', $byteVal)); - } - fclose($fp); - } - - private function createMessageWithRandomAttachment($size, $attachmentPath) - { - $this->fillFileWithRandomBytes($size, $attachmentPath); - - $message = (new Swift_Message()) - ->setSubject('test') - ->setBody('test') - ->setFrom('a@b.c') - ->setTo('d@e.f') - ->attach(Swift_Attachment::fromPath($attachmentPath)) - ; - - return $message; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug534Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug534Test.php deleted file mode 100644 index 6b224f1..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug534Test.php +++ /dev/null @@ -1,38 +0,0 @@ -setFrom('from@example.com') - ->setTo('to@example.com') - ->setSubject('test') - ; - $cid = $message->embed(Swift_Image::fromPath(__DIR__.'/../../_samples/files/swiftmailer.png')); - $message->setBody('', 'text/html'); - - $that = $this; - $messageValidation = function (Swift_Mime_SimpleMessage $message) use ($that) { - preg_match('/cid:(.*)"/', $message->toString(), $matches); - $cid = $matches[1]; - preg_match('/Content-ID: <(.*)>/', $message->toString(), $matches); - $contentId = $matches[1]; - $that->assertEquals($cid, $contentId, 'cid in body and mime part Content-ID differ'); - - return true; - }; - - $failedRecipients = []; - - $transport = m::mock('Swift_Transport'); - $transport->shouldReceive('isStarted')->andReturn(true); - $transport->shouldReceive('send')->with(m::on($messageValidation), $failedRecipients)->andReturn(1); - - $memorySpool = new Swift_MemorySpool(); - $memorySpool->queueMessage($message); - $memorySpool->flushQueue($transport, $failedRecipients); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug650Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug650Test.php deleted file mode 100644 index 31036c6..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug650Test.php +++ /dev/null @@ -1,38 +0,0 @@ -setCharset('utf-8'); - - $header->setNameAddresses([ - 'test@example.com' => $name, - ]); - - $this->assertSame('To: '.$expectedEncodedName." \r\n", $header->toString()); - } - - public function encodingDataProvider() - { - return [ - ['this is " a test ö', 'this is =?utf-8?Q?=22?= a test =?utf-8?Q?=C3=B6?='], - [': this is a test ö', '=?utf-8?Q?=3A?= this is a test =?utf-8?Q?=C3=B6?='], - ['( test ö', '=?utf-8?Q?=28?= test =?utf-8?Q?=C3=B6?='], - ['[ test ö', '=?utf-8?Q?=5B?= test =?utf-8?Q?=C3=B6?='], - ['@ test ö)', '=?utf-8?Q?=40?= test =?utf-8?Q?=C3=B6=29?='], - ]; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug71Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug71Test.php deleted file mode 100644 index 3075f67..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug71Test.php +++ /dev/null @@ -1,20 +0,0 @@ -message = new Swift_Message('test'); - } - - public function testCallingToStringAfterSettingNewBodyReflectsChanges() - { - $this->message->setBody('BODY1'); - $this->assertRegExp('/BODY1/', $this->message->toString()); - - $this->message->setBody('BODY2'); - $this->assertRegExp('/BODY2/', $this->message->toString()); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug76Test.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug76Test.php deleted file mode 100644 index 1db2035..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug76Test.php +++ /dev/null @@ -1,71 +0,0 @@ -inputFile = sys_get_temp_dir().'/in.bin'; - file_put_contents($this->inputFile, ''); - - $this->outputFile = sys_get_temp_dir().'/out.bin'; - file_put_contents($this->outputFile, ''); - - $this->encoder = $this->createEncoder(); - } - - protected function tearDown() - { - unlink($this->inputFile); - unlink($this->outputFile); - } - - public function testBase64EncodedLineLengthNeverExceeds76CharactersEvenIfArgsDo() - { - $this->fillFileWithRandomBytes(1000, $this->inputFile); - - $os = $this->createStream($this->inputFile); - $is = $this->createStream($this->outputFile); - - $this->encoder->encodeByteStream($os, $is, 0, 80); //Exceeds 76 - - $this->assertMaxLineLength(76, $this->outputFile, - '%s: Line length should not exceed 76 characters' - ); - } - - public function assertMaxLineLength($length, $filePath, $message = '%s') - { - $lines = file($filePath); - foreach ($lines as $line) { - $this->assertTrue((strlen(trim($line)) <= 76), $message); - } - } - - private function fillFileWithRandomBytes($byteCount, $file) - { - // I was going to use dd with if=/dev/random but this way seems more - // cross platform even if a hella expensive!! - - file_put_contents($file, ''); - $fp = fopen($file, 'wb'); - for ($i = 0; $i < $byteCount; ++$i) { - $byteVal = random_int(0, 255); - fwrite($fp, pack('i', $byteVal)); - } - fclose($fp); - } - - private function createEncoder() - { - return new Swift_Mime_ContentEncoder_Base64ContentEncoder(); - } - - private function createStream($file) - { - return new Swift_ByteStream_FileByteStream($file, true); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/BugFileByteStreamConsecutiveReadCallsTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/BugFileByteStreamConsecutiveReadCallsTest.php deleted file mode 100644 index eb58071..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/bug/Swift/BugFileByteStreamConsecutiveReadCallsTest.php +++ /dev/null @@ -1,18 +0,0 @@ -read(100); - } catch (\Swift_IoException $exc) { - $fbs->read(100); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/fixtures/MimeEntityFixture.php b/lib/vendor/swiftmailer/swiftmailer/tests/fixtures/MimeEntityFixture.php deleted file mode 100644 index 8a66039..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/fixtures/MimeEntityFixture.php +++ /dev/null @@ -1,67 +0,0 @@ -level = $level; - $this->string = $string; - $this->contentType = $contentType; - } - - public function getNestingLevel() - { - return $this->level; - } - - public function toString() - { - return $this->string; - } - - public function getContentType() - { - return $this->contentType; - } - - // These methods are here to account for the implemented interfaces - public function getId() - { - } - - public function getHeaders() - { - } - - public function getBody() - { - } - - public function setBody($body, $contentType = null) - { - } - - public function toByteStream(Swift_InputByteStream $is) - { - } - - public function charsetChanged($charset) - { - } - - public function encoderChanged(Swift_Mime_ContentEncoder $encoder) - { - } - - public function getChildren() - { - } - - public function setChildren(array $children, $compoundLevel = null) - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/smoke.conf.php.default b/lib/vendor/swiftmailer/swiftmailer/tests/smoke.conf.php.default deleted file mode 100644 index 604d6de..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/smoke.conf.php.default +++ /dev/null @@ -1,63 +0,0 @@ -attFile = __DIR__.'/../../../_samples/files/textfile.zip'; - } - - public function testAttachmentSending() - { - $mailer = $this->getMailer(); - $message = (new Swift_Message()) - ->setSubject('[Swift Mailer] AttachmentSmokeTest') - ->setFrom([SWIFT_SMOKE_EMAIL_ADDRESS => 'Swift Mailer']) - ->setTo(SWIFT_SMOKE_EMAIL_ADDRESS) - ->setBody('This message should contain an attached ZIP file (named "textfile.zip").'.PHP_EOL. - 'When unzipped, the archive should produce a text file which reads:'.PHP_EOL. - '"This is part of a Swift Mailer smoke test."' - ) - ->attach(Swift_Attachment::fromPath($this->attFile)) - ; - $this->assertEquals(1, $mailer->send($message), - '%s: The smoke test should send a single message' - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/BasicSmokeTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/BasicSmokeTest.php deleted file mode 100644 index 79915b3..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/BasicSmokeTest.php +++ /dev/null @@ -1,23 +0,0 @@ -getMailer(); - $message = (new Swift_Message()) - ->setSubject('[Swift Mailer] BasicSmokeTest') - ->setFrom([SWIFT_SMOKE_EMAIL_ADDRESS => 'Swift Mailer']) - ->setTo(SWIFT_SMOKE_EMAIL_ADDRESS) - ->setBody('One, two, three, four, five...'.PHP_EOL. - 'six, seven, eight...' - ) - ; - $this->assertEquals(1, $mailer->send($message), - '%s: The smoke test should send a single message' - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/HtmlWithAttachmentSmokeTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/HtmlWithAttachmentSmokeTest.php deleted file mode 100644 index 5ed6c33..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/HtmlWithAttachmentSmokeTest.php +++ /dev/null @@ -1,33 +0,0 @@ -attFile = __DIR__.'/../../../_samples/files/textfile.zip'; - } - - public function testAttachmentSending() - { - $mailer = $this->getMailer(); - $message = (new Swift_Message('[Swift Mailer] HtmlWithAttachmentSmokeTest')) - ->setFrom([SWIFT_SMOKE_EMAIL_ADDRESS => 'Swift Mailer']) - ->setTo(SWIFT_SMOKE_EMAIL_ADDRESS) - ->attach(Swift_Attachment::fromPath($this->attFile)) - ->setBody('

This HTML-formatted message should contain an attached ZIP file (named "textfile.zip").'.PHP_EOL. - 'When unzipped, the archive should produce a text file which reads:

'.PHP_EOL. - '

This is part of a Swift Mailer smoke test.

', 'text/html' - ) - ; - $this->assertEquals(1, $mailer->send($message), - '%s: The smoke test should send a single message' - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/InternationalSmokeTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/InternationalSmokeTest.php deleted file mode 100644 index 6dc715e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/InternationalSmokeTest.php +++ /dev/null @@ -1,40 +0,0 @@ -attFile = __DIR__.'/../../../_samples/files/textfile.zip'; - } - - public function testAttachmentSending() - { - $mailer = $this->getMailer(); - $message = (new Swift_Message()) - ->setCharset('utf-8') - ->setSubject('[Swift Mailer] InternationalSmokeTest (διεθνής)') - ->setFrom([SWIFT_SMOKE_EMAIL_ADDRESS => 'Χριστοφορου (Swift Mailer)']) - ->setTo(SWIFT_SMOKE_EMAIL_ADDRESS) - ->setBody('This message should contain an attached ZIP file (named "κείμενο, εδάφιο, θέμα.zip").'.PHP_EOL. - 'When unzipped, the archive should produce a text file which reads:'.PHP_EOL. - '"This is part of a Swift Mailer smoke test."'.PHP_EOL. - PHP_EOL. - 'Following is some arbitrary Greek text:'.PHP_EOL. - 'Δεν βρέθηκαν λέξεις.' - ) - ->attach(Swift_Attachment::fromPath($this->attFile) - ->setContentType('application/zip') - ->setFilename('κείμενο, εδάφιο, θέμα.zip') - ) - ; - $this->assertEquals(1, $mailer->send($message), - '%s: The smoke test should send a single message' - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/ByteStream/ArrayByteStreamTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/ByteStream/ArrayByteStreamTest.php deleted file mode 100644 index 29fe390..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/ByteStream/ArrayByteStreamTest.php +++ /dev/null @@ -1,202 +0,0 @@ -createArrayStream($input); - $output = []; - while (false !== $bytes = $bs->read(1)) { - $output[] = $bytes; - } - $this->assertEquals($input, $output, - '%s: Bytes read from stream should be the same as bytes in constructor' - ); - } - - public function testReadingMultipleBytesFromBaseInput() - { - $input = ['a', 'b', 'c', 'd']; - $bs = $this->createArrayStream($input); - $output = []; - while (false !== $bytes = $bs->read(2)) { - $output[] = $bytes; - } - $this->assertEquals(['ab', 'cd'], $output, - '%s: Bytes read from stream should be in pairs' - ); - } - - public function testReadingOddOffsetOnLastByte() - { - $input = ['a', 'b', 'c', 'd', 'e']; - $bs = $this->createArrayStream($input); - $output = []; - while (false !== $bytes = $bs->read(2)) { - $output[] = $bytes; - } - $this->assertEquals(['ab', 'cd', 'e'], $output, - '%s: Bytes read from stream should be in pairs except final read' - ); - } - - public function testSettingPointerPartway() - { - $input = ['a', 'b', 'c']; - $bs = $this->createArrayStream($input); - $bs->setReadPointer(1); - $this->assertEquals('b', $bs->read(1), - '%s: Byte should be second byte since pointer as at offset 1' - ); - } - - public function testResettingPointerAfterExhaustion() - { - $input = ['a', 'b', 'c']; - - $bs = $this->createArrayStream($input); - while (false !== $bs->read(1)); - - $bs->setReadPointer(0); - $this->assertEquals('a', $bs->read(1), - '%s: Byte should be first byte since pointer as at offset 0' - ); - } - - public function testPointerNeverSetsBelowZero() - { - $input = ['a', 'b', 'c']; - $bs = $this->createArrayStream($input); - - $bs->setReadPointer(-1); - $this->assertEquals('a', $bs->read(1), - '%s: Byte should be first byte since pointer should be at offset 0' - ); - } - - public function testPointerNeverSetsAboveStackSize() - { - $input = ['a', 'b', 'c']; - $bs = $this->createArrayStream($input); - - $bs->setReadPointer(3); - $this->assertFalse($bs->read(1), - '%s: Stream should be at end and thus return false' - ); - } - - public function testBytesCanBeWrittenToStream() - { - $input = ['a', 'b', 'c']; - $bs = $this->createArrayStream($input); - - $bs->write('de'); - - $output = []; - while (false !== $bytes = $bs->read(1)) { - $output[] = $bytes; - } - $this->assertEquals(['a', 'b', 'c', 'd', 'e'], $output, - '%s: Bytes read from stream should be from initial stack + written' - ); - } - - public function testContentsCanBeFlushed() - { - $input = ['a', 'b', 'c']; - $bs = $this->createArrayStream($input); - - $bs->flushBuffers(); - - $this->assertFalse($bs->read(1), - '%s: Contents have been flushed so read() should return false' - ); - } - - public function testConstructorCanTakeStringArgument() - { - $bs = $this->createArrayStream('abc'); - $output = []; - while (false !== $bytes = $bs->read(1)) { - $output[] = $bytes; - } - $this->assertEquals(['a', 'b', 'c'], $output, - '%s: Bytes read from stream should be the same as bytes in constructor' - ); - } - - public function testBindingOtherStreamsMirrorsWriteOperations() - { - $bs = $this->createArrayStream(''); - $is1 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); - $is2 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); - - $is1->expects($this->at(0)) - ->method('write') - ->with('x'); - $is1->expects($this->at(1)) - ->method('write') - ->with('y'); - $is2->expects($this->at(0)) - ->method('write') - ->with('x'); - $is2->expects($this->at(1)) - ->method('write') - ->with('y'); - - $bs->bind($is1); - $bs->bind($is2); - - $bs->write('x'); - $bs->write('y'); - } - - public function testBindingOtherStreamsMirrorsFlushOperations() - { - $bs = $this->createArrayStream(''); - $is1 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); - $is2 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); - - $is1->expects($this->once()) - ->method('flushBuffers'); - $is2->expects($this->once()) - ->method('flushBuffers'); - - $bs->bind($is1); - $bs->bind($is2); - - $bs->flushBuffers(); - } - - public function testUnbindingStreamPreventsFurtherWrites() - { - $bs = $this->createArrayStream(''); - $is1 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); - $is2 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); - - $is1->expects($this->at(0)) - ->method('write') - ->with('x'); - $is1->expects($this->at(1)) - ->method('write') - ->with('y'); - $is2->expects($this->once()) - ->method('write') - ->with('x'); - - $bs->bind($is1); - $bs->bind($is2); - - $bs->write('x'); - - $bs->unbind($is2); - - $bs->write('y'); - } - - private function createArrayStream($input) - { - return new Swift_ByteStream_ArrayByteStream($input); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/GenericFixedWidthReaderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/GenericFixedWidthReaderTest.php deleted file mode 100644 index 1ba5e78..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/GenericFixedWidthReaderTest.php +++ /dev/null @@ -1,43 +0,0 @@ -assertSame(1, $reader->getInitialByteSize()); - - $reader = new Swift_CharacterReader_GenericFixedWidthReader(4); - $this->assertSame(4, $reader->getInitialByteSize()); - } - - public function testValidationValueIsBasedOnOctetCount() - { - $reader = new Swift_CharacterReader_GenericFixedWidthReader(4); - - $this->assertSame( - 1, $reader->validateByteSequence([0x01, 0x02, 0x03], 3) - ); //3 octets - - $this->assertSame( - 2, $reader->validateByteSequence([0x01, 0x0A], 2) - ); //2 octets - - $this->assertSame( - 3, $reader->validateByteSequence([0xFE], 1) - ); //1 octet - - $this->assertSame( - 0, $reader->validateByteSequence([0xFE, 0x03, 0x67, 0x9A], 4) - ); //All 4 octets - } - - public function testValidationFailsIfTooManyOctets() - { - $reader = new Swift_CharacterReader_GenericFixedWidthReader(6); - - $this->assertSame(-1, $reader->validateByteSequence( - [0xFE, 0x03, 0x67, 0x9A, 0x10, 0x09, 0x85], 7 - )); //7 octets - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/UsAsciiReaderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/UsAsciiReaderTest.php deleted file mode 100644 index b85b0ab..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/UsAsciiReaderTest.php +++ /dev/null @@ -1,52 +0,0 @@ -read($size); ) { - $c .= $bytes; - $size = $v->validateCharacter($c); - if (-1 == $size) { - throw new Exception( ... invalid char .. ); - } elseif (0 == $size) { - return $c; //next character in $os - } - } - - */ - - private $reader; - - protected function setUp() - { - $this->reader = new Swift_CharacterReader_UsAsciiReader(); - } - - public function testAllValidAsciiCharactersReturnZero() - { - for ($ordinal = 0x00; $ordinal <= 0x7F; ++$ordinal) { - $this->assertSame( - 0, $this->reader->validateByteSequence([$ordinal], 1) - ); - } - } - - public function testMultipleBytesAreInvalid() - { - for ($ordinal = 0x00; $ordinal <= 0x7F; $ordinal += 2) { - $this->assertSame( - -1, $this->reader->validateByteSequence([$ordinal, $ordinal + 1], 2) - ); - } - } - - public function testBytesAboveAsciiRangeAreInvalid() - { - for ($ordinal = 0x80; $ordinal <= 0xFF; ++$ordinal) { - $this->assertSame( - -1, $this->reader->validateByteSequence([$ordinal], 1) - ); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/Utf8ReaderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/Utf8ReaderTest.php deleted file mode 100644 index 0637911..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/Utf8ReaderTest.php +++ /dev/null @@ -1,65 +0,0 @@ -reader = new Swift_CharacterReader_Utf8Reader(); - } - - public function testLeading7BitOctetCausesReturnZero() - { - for ($ordinal = 0x00; $ordinal <= 0x7F; ++$ordinal) { - $this->assertSame( - 0, $this->reader->validateByteSequence([$ordinal], 1) - ); - } - } - - public function testLeadingByteOf2OctetCharCausesReturn1() - { - for ($octet = 0xC0; $octet <= 0xDF; ++$octet) { - $this->assertSame( - 1, $this->reader->validateByteSequence([$octet], 1) - ); - } - } - - public function testLeadingByteOf3OctetCharCausesReturn2() - { - for ($octet = 0xE0; $octet <= 0xEF; ++$octet) { - $this->assertSame( - 2, $this->reader->validateByteSequence([$octet], 1) - ); - } - } - - public function testLeadingByteOf4OctetCharCausesReturn3() - { - for ($octet = 0xF0; $octet <= 0xF7; ++$octet) { - $this->assertSame( - 3, $this->reader->validateByteSequence([$octet], 1) - ); - } - } - - public function testLeadingByteOf5OctetCharCausesReturn4() - { - for ($octet = 0xF8; $octet <= 0xFB; ++$octet) { - $this->assertSame( - 4, $this->reader->validateByteSequence([$octet], 1) - ); - } - } - - public function testLeadingByteOf6OctetCharCausesReturn5() - { - for ($octet = 0xFC; $octet <= 0xFD; ++$octet) { - $this->assertSame( - 5, $this->reader->validateByteSequence([$octet], 1) - ); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterStream/ArrayCharacterStreamTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterStream/ArrayCharacterStreamTest.php deleted file mode 100644 index d0158a2..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterStream/ArrayCharacterStreamTest.php +++ /dev/null @@ -1,358 +0,0 @@ -getReader(); - $factory = $this->getFactory($reader); - - $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - - $stream->importString(pack('C*', - 0xD0, 0x94, - 0xD0, 0xB6, - 0xD0, 0xBE, - 0xD1, 0x8D, - 0xD0, 0xBB, - 0xD0, 0xB0 - ) - ); - } - - public function testCharactersWrittenUseValidator() - { - $reader = $this->getReader(); - $factory = $this->getFactory($reader); - - $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); - - $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); - - $stream->write(pack('C*', - 0xD0, 0xBB, - 0xD1, 0x8E, - 0xD0, 0xB1, - 0xD1, 0x8B, - 0xD1, 0x85 - ) - ); - } - - public function testReadCharactersAreInTact() - { - $reader = $this->getReader(); - $factory = $this->getFactory($reader); - - $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(1); - //String - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - //Stream - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); - - $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); - - $stream->write(pack('C*', - 0xD0, 0xBB, - 0xD1, 0x8E, - 0xD0, 0xB1, - 0xD1, 0x8B, - 0xD1, 0x85 - ) - ); - - $this->assertIdenticalBinary(pack('C*', 0xD0, 0x94), $stream->read(1)); - $this->assertIdenticalBinary( - pack('C*', 0xD0, 0xB6, 0xD0, 0xBE), $stream->read(2) - ); - $this->assertIdenticalBinary(pack('C*', 0xD0, 0xBB), $stream->read(1)); - $this->assertIdenticalBinary( - pack('C*', 0xD1, 0x8E, 0xD0, 0xB1, 0xD1, 0x8B), $stream->read(3) - ); - $this->assertIdenticalBinary(pack('C*', 0xD1, 0x85), $stream->read(1)); - - $this->assertFalse($stream->read(1)); - } - - public function testCharactersCanBeReadAsByteArrays() - { - $reader = $this->getReader(); - $factory = $this->getFactory($reader); - - $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(1); - //String - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - //Stream - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); - - $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); - - $stream->write(pack('C*', - 0xD0, 0xBB, - 0xD1, 0x8E, - 0xD0, 0xB1, - 0xD1, 0x8B, - 0xD1, 0x85 - ) - ); - - $this->assertEquals([0xD0, 0x94], $stream->readBytes(1)); - $this->assertEquals([0xD0, 0xB6, 0xD0, 0xBE], $stream->readBytes(2)); - $this->assertEquals([0xD0, 0xBB], $stream->readBytes(1)); - $this->assertEquals( - [0xD1, 0x8E, 0xD0, 0xB1, 0xD1, 0x8B], $stream->readBytes(3) - ); - $this->assertEquals([0xD1, 0x85], $stream->readBytes(1)); - - $this->assertFalse($stream->readBytes(1)); - } - - public function testRequestingLargeCharCountPastEndOfStream() - { - $reader = $this->getReader(); - $factory = $this->getFactory($reader); - - $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - - $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); - - $this->assertIdenticalBinary(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE), - $stream->read(100) - ); - - $this->assertFalse($stream->read(1)); - } - - public function testRequestingByteArrayCountPastEndOfStream() - { - $reader = $this->getReader(); - $factory = $this->getFactory($reader); - - $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - - $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); - - $this->assertEquals([0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE], - $stream->readBytes(100) - ); - - $this->assertFalse($stream->readBytes(1)); - } - - public function testPointerOffsetCanBeSet() - { - $reader = $this->getReader(); - $factory = $this->getFactory($reader); - - $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - - $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); - - $this->assertIdenticalBinary(pack('C*', 0xD0, 0x94), $stream->read(1)); - - $stream->setPointer(0); - - $this->assertIdenticalBinary(pack('C*', 0xD0, 0x94), $stream->read(1)); - - $stream->setPointer(2); - - $this->assertIdenticalBinary(pack('C*', 0xD0, 0xBE), $stream->read(1)); - } - - public function testContentsCanBeFlushed() - { - $reader = $this->getReader(); - $factory = $this->getFactory($reader); - - $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - - $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); - - $stream->flushContents(); - - $this->assertFalse($stream->read(1)); - } - - public function testByteStreamCanBeImportingUsesValidator() - { - $reader = $this->getReader(); - $factory = $this->getFactory($reader); - $os = $this->getByteStream(); - - $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); - - $os->shouldReceive('setReadPointer') - ->between(0, 1) - ->with(0); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0xD0)); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0x94)); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0xD0)); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0xB6)); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0xD0)); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0xBE)); - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - - $stream->importByteStream($os); - } - - public function testImportingStreamProducesCorrectCharArray() - { - $reader = $this->getReader(); - $factory = $this->getFactory($reader); - $os = $this->getByteStream(); - - $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); - - $os->shouldReceive('setReadPointer') - ->between(0, 1) - ->with(0); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0xD0)); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0x94)); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0xD0)); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0xB6)); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0xD0)); - $os->shouldReceive('read')->once()->andReturn(pack('C*', 0xBE)); - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); - - $stream->importByteStream($os); - - $this->assertIdenticalBinary(pack('C*', 0xD0, 0x94), $stream->read(1)); - $this->assertIdenticalBinary(pack('C*', 0xD0, 0xB6), $stream->read(1)); - $this->assertIdenticalBinary(pack('C*', 0xD0, 0xBE), $stream->read(1)); - - $this->assertFalse($stream->read(1)); - } - - public function testAlgorithmWithFixedWidthCharsets() - { - $reader = $this->getReader(); - $factory = $this->getFactory($reader); - - $reader->shouldReceive('getInitialByteSize') - ->zeroOrMoreTimes() - ->andReturn(2); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD1, 0x8D], 2); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0, 0xBB], 2); - $reader->shouldReceive('validateByteSequence')->once()->with([0xD0, 0xB0], 2); - - $stream = new Swift_CharacterStream_ArrayCharacterStream( - $factory, 'utf-8' - ); - $stream->importString(pack('C*', 0xD1, 0x8D, 0xD0, 0xBB, 0xD0, 0xB0)); - - $this->assertIdenticalBinary(pack('C*', 0xD1, 0x8D), $stream->read(1)); - $this->assertIdenticalBinary(pack('C*', 0xD0, 0xBB), $stream->read(1)); - $this->assertIdenticalBinary(pack('C*', 0xD0, 0xB0), $stream->read(1)); - - $this->assertFalse($stream->read(1)); - } - - private function getReader() - { - return $this->getMockery('Swift_CharacterReader'); - } - - private function getFactory($reader) - { - $factory = $this->getMockery('Swift_CharacterReaderFactory'); - $factory->shouldReceive('getReaderFor') - ->zeroOrMoreTimes() - ->with('utf-8') - ->andReturn($reader); - - return $factory; - } - - private function getByteStream() - { - return $this->getMockery('Swift_OutputByteStream'); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/DependencyContainerTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/DependencyContainerTest.php deleted file mode 100644 index 286f832..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/DependencyContainerTest.php +++ /dev/null @@ -1,191 +0,0 @@ -arg1 = $arg1; - $this->arg2 = $arg2; - } -} - -class Swift_DependencyContainerTest extends \PHPUnit\Framework\TestCase -{ - private $container; - - protected function setUp() - { - $this->container = new Swift_DependencyContainer(); - } - - public function testRegisterAndLookupValue() - { - $this->container->register('foo')->asValue('bar'); - $this->assertEquals('bar', $this->container->lookup('foo')); - } - - public function testHasReturnsTrueForRegisteredValue() - { - $this->container->register('foo')->asValue('bar'); - $this->assertTrue($this->container->has('foo')); - } - - public function testHasReturnsFalseForUnregisteredValue() - { - $this->assertFalse($this->container->has('foo')); - } - - public function testRegisterAndLookupNewInstance() - { - $this->container->register('one')->asNewInstanceOf('One'); - $this->assertInstanceOf('One', $this->container->lookup('one')); - } - - public function testHasReturnsTrueForRegisteredInstance() - { - $this->container->register('one')->asNewInstanceOf('One'); - $this->assertTrue($this->container->has('one')); - } - - public function testNewInstanceIsAlwaysNew() - { - $this->container->register('one')->asNewInstanceOf('One'); - $a = $this->container->lookup('one'); - $b = $this->container->lookup('one'); - $this->assertEquals($a, $b); - } - - public function testRegisterAndLookupSharedInstance() - { - $this->container->register('one')->asSharedInstanceOf('One'); - $this->assertInstanceOf('One', $this->container->lookup('one')); - } - - public function testHasReturnsTrueForSharedInstance() - { - $this->container->register('one')->asSharedInstanceOf('One'); - $this->assertTrue($this->container->has('one')); - } - - public function testMultipleSharedInstancesAreSameInstance() - { - $this->container->register('one')->asSharedInstanceOf('One'); - $a = $this->container->lookup('one'); - $b = $this->container->lookup('one'); - $this->assertEquals($a, $b); - } - - public function testRegisterAndLookupArray() - { - $this->container->register('One')->asArray(); - $this->assertSame([], $this->container->lookup('One')); - } - - public function testNewInstanceWithDependencies() - { - $this->container->register('foo')->asValue('FOO'); - $this->container->register('one')->asNewInstanceOf('One') - ->withDependencies(['foo']); - $obj = $this->container->lookup('one'); - $this->assertSame('FOO', $obj->arg1); - } - - public function testNewInstanceWithMultipleDependencies() - { - $this->container->register('foo')->asValue('FOO'); - $this->container->register('bar')->asValue(42); - $this->container->register('one')->asNewInstanceOf('One') - ->withDependencies(['foo', 'bar']); - $obj = $this->container->lookup('one'); - $this->assertSame('FOO', $obj->arg1); - $this->assertSame(42, $obj->arg2); - } - - public function testNewInstanceWithInjectedObjects() - { - $this->container->register('foo')->asValue('FOO'); - $this->container->register('one')->asNewInstanceOf('One'); - $this->container->register('two')->asNewInstanceOf('One') - ->withDependencies(['one', 'foo']); - $obj = $this->container->lookup('two'); - $this->assertEquals($this->container->lookup('one'), $obj->arg1); - $this->assertSame('FOO', $obj->arg2); - } - - public function testNewInstanceWithAddConstructorValue() - { - $this->container->register('one')->asNewInstanceOf('One') - ->addConstructorValue('x') - ->addConstructorValue(99); - $obj = $this->container->lookup('one'); - $this->assertSame('x', $obj->arg1); - $this->assertSame(99, $obj->arg2); - } - - public function testNewInstanceWithAddConstructorLookup() - { - $this->container->register('foo')->asValue('FOO'); - $this->container->register('bar')->asValue(42); - $this->container->register('one')->asNewInstanceOf('One') - ->addConstructorLookup('foo') - ->addConstructorLookup('bar'); - - $obj = $this->container->lookup('one'); - $this->assertSame('FOO', $obj->arg1); - $this->assertSame(42, $obj->arg2); - } - - public function testResolvedDependenciesCanBeLookedUp() - { - $this->container->register('foo')->asValue('FOO'); - $this->container->register('one')->asNewInstanceOf('One'); - $this->container->register('two')->asNewInstanceOf('One') - ->withDependencies(['one', 'foo']); - $deps = $this->container->createDependenciesFor('two'); - $this->assertEquals( - [$this->container->lookup('one'), 'FOO'], $deps - ); - } - - public function testArrayOfDependenciesCanBeSpecified() - { - $this->container->register('foo')->asValue('FOO'); - $this->container->register('one')->asNewInstanceOf('One'); - $this->container->register('two')->asNewInstanceOf('One') - ->withDependencies([['one', 'foo'], 'foo']); - - $obj = $this->container->lookup('two'); - $this->assertEquals([$this->container->lookup('one'), 'FOO'], $obj->arg1); - $this->assertSame('FOO', $obj->arg2); - } - - public function testArrayWithDependencies() - { - $this->container->register('foo')->asValue('FOO'); - $this->container->register('bar')->asValue(42); - $this->container->register('one')->asArray('One') - ->withDependencies(['foo', 'bar']); - $this->assertSame(['FOO', 42], $this->container->lookup('one')); - } - - public function testAliasCanBeSet() - { - $this->container->register('foo')->asValue('FOO'); - $this->container->register('bar')->asAliasOf('foo'); - - $this->assertSame('FOO', $this->container->lookup('bar')); - } - - public function testAliasOfAliasCanBeSet() - { - $this->container->register('foo')->asValue('FOO'); - $this->container->register('bar')->asAliasOf('foo'); - $this->container->register('zip')->asAliasOf('bar'); - $this->container->register('button')->asAliasOf('zip'); - - $this->assertSame('FOO', $this->container->lookup('button')); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Base64EncoderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Base64EncoderTest.php deleted file mode 100644 index 6387bad..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Base64EncoderTest.php +++ /dev/null @@ -1,173 +0,0 @@ -encoder = new Swift_Encoder_Base64Encoder(); - } - - /* - There's really no point in testing the entire base64 encoding to the - level QP encoding has been tested. base64_encode() has been in PHP for - years. - */ - - public function testInputOutputRatioIs3to4Bytes() - { - /* - RFC 2045, 6.8 - - The encoding process represents 24-bit groups of input bits as output - strings of 4 encoded characters. Proceeding from left to right, a - 24-bit input group is formed by concatenating 3 8bit input groups. - These 24 bits are then treated as 4 concatenated 6-bit groups, each - of which is translated into a single digit in the base64 alphabet. - */ - - $this->assertEquals( - 'MTIz', $this->encoder->encodeString('123'), - '%s: 3 bytes of input should yield 4 bytes of output' - ); - $this->assertEquals( - 'MTIzNDU2', $this->encoder->encodeString('123456'), - '%s: 6 bytes in input should yield 8 bytes of output' - ); - $this->assertEquals( - 'MTIzNDU2Nzg5', $this->encoder->encodeString('123456789'), - '%s: 9 bytes in input should yield 12 bytes of output' - ); - } - - public function testPadLength() - { - /* - RFC 2045, 6.8 - - Special processing is performed if fewer than 24 bits are available - at the end of the data being encoded. A full encoding quantum is - always completed at the end of a body. When fewer than 24 input bits - are available in an input group, zero bits are added (on the right) - to form an integral number of 6-bit groups. Padding at the end of - the data is performed using the "=" character. Since all base64 - input is an integral number of octets, only the following cases can - arise: (1) the final quantum of encoding input is an integral - multiple of 24 bits; here, the final unit of encoded output will be - an integral multiple of 4 characters with no "=" padding, (2) the - final quantum of encoding input is exactly 8 bits; here, the final - unit of encoded output will be two characters followed by two "=" - padding characters, or (3) the final quantum of encoding input is - exactly 16 bits; here, the final unit of encoded output will be three - characters followed by one "=" padding character. - */ - - for ($i = 0; $i < 30; ++$i) { - $input = pack('C', random_int(0, 255)); - $this->assertRegExp( - '~^[a-zA-Z0-9/\+]{2}==$~', $this->encoder->encodeString($input), - '%s: A single byte should have 2 bytes of padding' - ); - } - - for ($i = 0; $i < 30; ++$i) { - $input = pack('C*', random_int(0, 255), random_int(0, 255)); - $this->assertRegExp( - '~^[a-zA-Z0-9/\+]{3}=$~', $this->encoder->encodeString($input), - '%s: Two bytes should have 1 byte of padding' - ); - } - - for ($i = 0; $i < 30; ++$i) { - $input = pack('C*', random_int(0, 255), random_int(0, 255), random_int(0, 255)); - $this->assertRegExp( - '~^[a-zA-Z0-9/\+]{4}$~', $this->encoder->encodeString($input), - '%s: Three bytes should have no padding' - ); - } - } - - public function testMaximumLineLengthIs76Characters() - { - /* - The encoded output stream must be represented in lines of no more - than 76 characters each. All line breaks or other characters not - found in Table 1 must be ignored by decoding software. - */ - - $input = - 'abcdefghijklmnopqrstuvwxyz'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. - '1234567890'. - 'abcdefghijklmnopqrstuvwxyz'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. - '1234567890'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - - $output = - 'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQk'.//38 - 'NERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1'."\r\n".//76 * - 'Njc4OTBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3'.//38 - 'h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla'."\r\n".//76 * - 'MTIzNDU2Nzg5MEFCQ0RFRkdISUpLTE1OT1BRUl'.//38 - 'NUVVZXWFla'; //48 - - $this->assertEquals( - $output, $this->encoder->encodeString($input), - '%s: Lines should be no more than 76 characters' - ); - } - - public function testMaximumLineLengthCanBeSpecified() - { - $input = - 'abcdefghijklmnopqrstuvwxyz'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. - '1234567890'. - 'abcdefghijklmnopqrstuvwxyz'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. - '1234567890'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - - $output = - 'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQk'.//38 - 'NERUZHSElKS0'."\r\n".//50 * - 'xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTBhYmNk'.//38 - 'ZWZnaGlqa2xt'."\r\n".//50 * - 'bm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1'.//38 - 'BRUlNUVVZXWF'."\r\n".//50 * - 'laMTIzNDU2Nzg5MEFCQ0RFRkdISUpLTE1OT1BR'.//38 - 'UlNUVVZXWFla'; //50 * - - $this->assertEquals( - $output, $this->encoder->encodeString($input, 0, 50), - '%s: Lines should be no more than 100 characters' - ); - } - - public function testFirstLineLengthCanBeDifferent() - { - $input = - 'abcdefghijklmnopqrstuvwxyz'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. - '1234567890'. - 'abcdefghijklmnopqrstuvwxyz'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. - '1234567890'. - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - - $output = - 'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQk'.//38 - 'NERUZHSElKS0xNTk9QU'."\r\n".//57 * - 'VJTVFVWV1hZWjEyMzQ1Njc4OTBhYmNkZWZnaGl'.//38 - 'qa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLT'."\r\n".//76 * - 'E1OT1BRUlNUVVZXWFlaMTIzNDU2Nzg5MEFCQ0R'.//38 - 'FRkdISUpLTE1OT1BRUlNUVVZXWFla'; //67 - - $this->assertEquals( - $output, $this->encoder->encodeString($input, 19), - '%s: First line offset is 19 so first line should be 57 chars long' - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/QpEncoderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/QpEncoderTest.php deleted file mode 100644 index 10e5e1d..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/QpEncoderTest.php +++ /dev/null @@ -1,400 +0,0 @@ -createCharStream(); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($char); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([$ordinal]); - $charStream->shouldReceive('readBytes') - ->atLeast()->times(1) - ->andReturn(false); - - $encoder = new Swift_Encoder_QpEncoder($charStream); - - $this->assertIdenticalBinary($char, $encoder->encodeString($char)); - } - } - - public function testWhiteSpaceAtLineEndingIsEncoded() - { - /* -- RFC 2045, 6.7 -- - (3) (White Space) Octets with values of 9 and 32 MAY be - represented as US-ASCII TAB (HT) and SPACE characters, - respectively, but MUST NOT be so represented at the end - of an encoded line. Any TAB (HT) or SPACE characters - on an encoded line MUST thus be followed on that line - by a printable character. In particular, an "=" at the - end of an encoded line, indicating a soft line break - (see rule #5) may follow one or more TAB (HT) or SPACE - characters. It follows that an octet with decimal - value 9 or 32 appearing at the end of an encoded line - must be represented according to Rule #1. This rule is - necessary because some MTAs (Message Transport Agents, - programs which transport messages from one user to - another, or perform a portion of such transfers) are - known to pad lines of text with SPACEs, and others are - known to remove "white space" characters from the end - of a line. Therefore, when decoding a Quoted-Printable - body, any trailing white space on a line must be - deleted, as it will necessarily have been added by - intermediate transport agents. - */ - - $HT = chr(0x09); //9 - $SPACE = chr(0x20); //32 - - //HT - $string = 'a'.$HT.$HT."\r\n".'b'; - - $charStream = $this->createCharStream(); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($string); - - $charStream->shouldReceive('readBytes')->once()->andReturn([ord('a')]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x09]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x09]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x0D]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x0A]); - $charStream->shouldReceive('readBytes')->once()->andReturn([ord('b')]); - $charStream->shouldReceive('readBytes')->once()->andReturn(false); - - $encoder = new Swift_Encoder_QpEncoder($charStream); - $this->assertEquals( - 'a'.$HT.'=09'."\r\n".'b', - $encoder->encodeString($string) - ); - - //SPACE - $string = 'a'.$SPACE.$SPACE."\r\n".'b'; - - $charStream = $this->createCharStream(); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($string); - - $charStream->shouldReceive('readBytes')->once()->andReturn([ord('a')]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x20]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x20]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x0D]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x0A]); - $charStream->shouldReceive('readBytes')->once()->andReturn([ord('b')]); - $charStream->shouldReceive('readBytes')->once()->andReturn(false); - - $encoder = new Swift_Encoder_QpEncoder($charStream); - $this->assertEquals( - 'a'.$SPACE.'=20'."\r\n".'b', - $encoder->encodeString($string) - ); - } - - public function testCRLFIsLeftAlone() - { - /* - (4) (Line Breaks) A line break in a text body, represented - as a CRLF sequence in the text canonical form, must be - represented by a (RFC 822) line break, which is also a - CRLF sequence, in the Quoted-Printable encoding. Since - the canonical representation of media types other than - text do not generally include the representation of - line breaks as CRLF sequences, no hard line breaks - (i.e. line breaks that are intended to be meaningful - and to be displayed to the user) can occur in the - quoted-printable encoding of such types. Sequences - like "=0D", "=0A", "=0A=0D" and "=0D=0A" will routinely - appear in non-text data represented in quoted- - printable, of course. - - Note that many implementations may elect to encode the - local representation of various content types directly - rather than converting to canonical form first, - encoding, and then converting back to local - representation. In particular, this may apply to plain - text material on systems that use newline conventions - other than a CRLF terminator sequence. Such an - implementation optimization is permissible, but only - when the combined canonicalization-encoding step is - equivalent to performing the three steps separately. - */ - - $string = 'a'."\r\n".'b'."\r\n".'c'."\r\n"; - - $charStream = $this->createCharStream(); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($string); - - $charStream->shouldReceive('readBytes')->once()->andReturn([ord('a')]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x0D]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x0A]); - $charStream->shouldReceive('readBytes')->once()->andReturn([ord('b')]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x0D]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x0A]); - $charStream->shouldReceive('readBytes')->once()->andReturn([ord('c')]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x0D]); - $charStream->shouldReceive('readBytes')->once()->andReturn([0x0A]); - $charStream->shouldReceive('readBytes')->once()->andReturn(false); - - $encoder = new Swift_Encoder_QpEncoder($charStream); - $this->assertEquals($string, $encoder->encodeString($string)); - } - - public function testLinesLongerThan76CharactersAreSoftBroken() - { - /* - (5) (Soft Line Breaks) The Quoted-Printable encoding - REQUIRES that encoded lines be no more than 76 - characters long. If longer lines are to be encoded - with the Quoted-Printable encoding, "soft" line breaks - must be used. An equal sign as the last character on a - encoded line indicates such a non-significant ("soft") - line break in the encoded text. - */ - - $input = str_repeat('a', 140); - - $charStream = $this->createCharStream(); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($input); - - $output = ''; - for ($i = 0; $i < 140; ++$i) { - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - - if (75 == $i) { - $output .= "=\r\n"; - } - $output .= 'a'; - } - - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn(false); - - $encoder = new Swift_Encoder_QpEncoder($charStream); - $this->assertEquals($output, $encoder->encodeString($input)); - } - - public function testMaxLineLengthCanBeSpecified() - { - $input = str_repeat('a', 100); - - $charStream = $this->createCharStream(); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($input); - - $output = ''; - for ($i = 0; $i < 100; ++$i) { - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - - if (53 == $i) { - $output .= "=\r\n"; - } - $output .= 'a'; - } - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn(false); - - $encoder = new Swift_Encoder_QpEncoder($charStream); - $this->assertEquals($output, $encoder->encodeString($input, 0, 54)); - } - - public function testBytesBelowPermittedRangeAreEncoded() - { - /* - According to Rule (1 & 2) - */ - - foreach (range(0, 32) as $ordinal) { - $char = chr($ordinal); - - $charStream = $this->createCharStream(); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($char); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([$ordinal]); - $charStream->shouldReceive('readBytes') - ->atLeast()->times(1) - ->andReturn(false); - - $encoder = new Swift_Encoder_QpEncoder($charStream); - - $this->assertEquals( - sprintf('=%02X', $ordinal), $encoder->encodeString($char) - ); - } - } - - public function testDecimalByte61IsEncoded() - { - /* - According to Rule (1 & 2) - */ - - $char = '='; - - $charStream = $this->createCharStream(); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($char); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([61]); - $charStream->shouldReceive('readBytes') - ->atLeast()->times(1) - ->andReturn(false); - - $encoder = new Swift_Encoder_QpEncoder($charStream); - - $this->assertEquals('=3D', $encoder->encodeString('=')); - } - - public function testBytesAbovePermittedRangeAreEncoded() - { - /* - According to Rule (1 & 2) - */ - - foreach (range(127, 255) as $ordinal) { - $char = chr($ordinal); - - $charStream = $this->createCharStream(); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($char); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([$ordinal]); - $charStream->shouldReceive('readBytes') - ->atLeast()->times(1) - ->andReturn(false); - - $encoder = new Swift_Encoder_QpEncoder($charStream); - - $this->assertEquals( - sprintf('=%02X', $ordinal), $encoder->encodeString($char) - ); - } - } - - public function testFirstLineLengthCanBeDifferent() - { - $input = str_repeat('a', 140); - - $charStream = $this->createCharStream(); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($input); - - $output = ''; - for ($i = 0; $i < 140; ++$i) { - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - - if (53 == $i || 53 + 75 == $i) { - $output .= "=\r\n"; - } - $output .= 'a'; - } - - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn(false); - - $encoder = new Swift_Encoder_QpEncoder($charStream); - $this->assertEquals( - $output, $encoder->encodeString($input, 22), - '%s: First line should start at offset 22 so can only have max length 54' - ); - } - - public function testTextIsPreWrapped() - { - $encoder = $this->createEncoder(); - - $input = str_repeat('a', 70)."\r\n". - str_repeat('a', 70)."\r\n". - str_repeat('a', 70); - - $this->assertEquals( - $input, $encoder->encodeString($input) - ); - } - - private function createCharStream() - { - return $this->getMockery('Swift_CharacterStream')->shouldIgnoreMissing(); - } - - private function createEncoder() - { - $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $charStream = new Swift_CharacterStream_NgCharacterStream($factory, 'utf-8'); - - return new Swift_Encoder_QpEncoder($charStream); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Rfc2231EncoderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Rfc2231EncoderTest.php deleted file mode 100644 index 0ab8aa4..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Rfc2231EncoderTest.php +++ /dev/null @@ -1,141 +0,0 @@ -getMockery('Swift_CharacterStream'); - - $string = ''; - foreach (range(0x00, 0x7F) as $octet) { - $char = pack('C', $octet); - $string .= $char; - $charStream->shouldReceive('read') - ->once() - ->andReturn($char); - } - - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($string); - $charStream->shouldReceive('read') - ->atLeast()->times(1) - ->andReturn(false); - - $encoder = new Swift_Encoder_Rfc2231Encoder($charStream); - $encoded = $encoder->encodeString($string); - - foreach (explode("\r\n", $encoded) as $line) { - $this->assertRegExp($this->rfc2045Token, $line, - '%s: Encoder should always return a valid RFC 2045 token.'); - } - } - - public function testEncodingNonAsciiCharactersProducesValidToken() - { - $charStream = $this->getMockery('Swift_CharacterStream'); - - $string = ''; - foreach (range(0x80, 0xFF) as $octet) { - $char = pack('C', $octet); - $string .= $char; - $charStream->shouldReceive('read') - ->once() - ->andReturn($char); - } - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($string); - $charStream->shouldReceive('read') - ->atLeast()->times(1) - ->andReturn(false); - $encoder = new Swift_Encoder_Rfc2231Encoder($charStream); - - $encoded = $encoder->encodeString($string); - - foreach (explode("\r\n", $encoded) as $line) { - $this->assertRegExp($this->rfc2045Token, $line, - '%s: Encoder should always return a valid RFC 2045 token.'); - } - } - - public function testMaximumLineLengthCanBeSet() - { - $charStream = $this->getMockery('Swift_CharacterStream'); - - $string = ''; - for ($x = 0; $x < 200; ++$x) { - $char = 'a'; - $string .= $char; - $charStream->shouldReceive('read') - ->once() - ->andReturn($char); - } - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($string); - $charStream->shouldReceive('read') - ->atLeast()->times(1) - ->andReturn(false); - $encoder = new Swift_Encoder_Rfc2231Encoder($charStream); - - $encoded = $encoder->encodeString($string, 0, 75); - - $this->assertEquals( - str_repeat('a', 75)."\r\n". - str_repeat('a', 75)."\r\n". - str_repeat('a', 50), - $encoded, - '%s: Lines should be wrapped at each 75 characters' - ); - } - - public function testFirstLineCanHaveShorterLength() - { - $charStream = $this->getMockery('Swift_CharacterStream'); - - $string = ''; - for ($x = 0; $x < 200; ++$x) { - $char = 'a'; - $string .= $char; - $charStream->shouldReceive('read') - ->once() - ->andReturn($char); - } - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importString') - ->once() - ->with($string); - $charStream->shouldReceive('read') - ->atLeast()->times(1) - ->andReturn(false); - $encoder = new Swift_Encoder_Rfc2231Encoder($charStream); - $encoded = $encoder->encodeString($string, 25, 75); - - $this->assertEquals( - str_repeat('a', 50)."\r\n". - str_repeat('a', 75)."\r\n". - str_repeat('a', 75), - $encoded, - '%s: First line should be 25 bytes shorter than the others.' - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/CommandEventTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/CommandEventTest.php deleted file mode 100644 index 2915870..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/CommandEventTest.php +++ /dev/null @@ -1,34 +0,0 @@ -createEvent($this->createTransport(), "FOO\r\n"); - $this->assertEquals("FOO\r\n", $evt->getCommand()); - } - - public function testSuccessCodesCanBeFetchedViaGetter() - { - $evt = $this->createEvent($this->createTransport(), "FOO\r\n", [250]); - $this->assertEquals([250], $evt->getSuccessCodes()); - } - - public function testSourceIsBuffer() - { - $transport = $this->createTransport(); - $evt = $this->createEvent($transport, "FOO\r\n"); - $ref = $evt->getSource(); - $this->assertEquals($transport, $ref); - } - - private function createEvent(Swift_Transport $source, $command, $successCodes = []) - { - return new Swift_Events_CommandEvent($source, $command, $successCodes); - } - - private function createTransport() - { - return $this->getMockBuilder('Swift_Transport')->getMock(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/EventObjectTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/EventObjectTest.php deleted file mode 100644 index b67461f..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/EventObjectTest.php +++ /dev/null @@ -1,32 +0,0 @@ -createEvent($source); - $ref = $evt->getSource(); - $this->assertEquals($source, $ref); - } - - public function testEventDoesNotHaveCancelledBubbleWhenNew() - { - $source = new stdClass(); - $evt = $this->createEvent($source); - $this->assertFalse($evt->bubbleCancelled()); - } - - public function testBubbleCanBeCancelledInEvent() - { - $source = new stdClass(); - $evt = $this->createEvent($source); - $evt->cancelBubble(); - $this->assertTrue($evt->bubbleCancelled()); - } - - private function createEvent($source) - { - return new Swift_Events_EventObject($source); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/ResponseEventTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/ResponseEventTest.php deleted file mode 100644 index ba5c191..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/ResponseEventTest.php +++ /dev/null @@ -1,38 +0,0 @@ -createEvent($this->createTransport(), "250 Ok\r\n", true); - $this->assertEquals("250 Ok\r\n", $evt->getResponse(), - '%s: Response should be available via getResponse()' - ); - } - - public function testResultCanBeFetchedViaGetter() - { - $evt = $this->createEvent($this->createTransport(), "250 Ok\r\n", false); - $this->assertFalse($evt->isValid(), - '%s: Result should be checkable via isValid()' - ); - } - - public function testSourceIsBuffer() - { - $transport = $this->createTransport(); - $evt = $this->createEvent($transport, "250 Ok\r\n", true); - $ref = $evt->getSource(); - $this->assertEquals($transport, $ref); - } - - private function createEvent(Swift_Transport $source, $response, $result) - { - return new Swift_Events_ResponseEvent($source, $response, $result); - } - - private function createTransport() - { - return $this->getMockBuilder('Swift_Transport')->getMock(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SendEventTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SendEventTest.php deleted file mode 100644 index 9f55589..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SendEventTest.php +++ /dev/null @@ -1,96 +0,0 @@ -createMessage(); - $transport = $this->createTransport(); - - $evt = $this->createEvent($transport, $message); - - $ref = $evt->getMessage(); - $this->assertEquals($message, $ref, - '%s: Message should be returned from getMessage()' - ); - } - - public function testTransportCanBeFetchViaGetter() - { - $message = $this->createMessage(); - $transport = $this->createTransport(); - - $evt = $this->createEvent($transport, $message); - - $ref = $evt->getTransport(); - $this->assertEquals($transport, $ref, - '%s: Transport should be returned from getTransport()' - ); - } - - public function testTransportCanBeFetchViaGetSource() - { - $message = $this->createMessage(); - $transport = $this->createTransport(); - - $evt = $this->createEvent($transport, $message); - - $ref = $evt->getSource(); - $this->assertEquals($transport, $ref, - '%s: Transport should be returned from getSource()' - ); - } - - public function testResultCanBeSetAndGet() - { - $message = $this->createMessage(); - $transport = $this->createTransport(); - - $evt = $this->createEvent($transport, $message); - - $evt->setResult( - Swift_Events_SendEvent::RESULT_SUCCESS | Swift_Events_SendEvent::RESULT_TENTATIVE - ); - - $this->assertTrue((bool) ($evt->getResult() & Swift_Events_SendEvent::RESULT_SUCCESS)); - $this->assertTrue((bool) ($evt->getResult() & Swift_Events_SendEvent::RESULT_TENTATIVE)); - } - - public function testFailedRecipientsCanBeSetAndGet() - { - $message = $this->createMessage(); - $transport = $this->createTransport(); - - $evt = $this->createEvent($transport, $message); - - $evt->setFailedRecipients(['foo@bar', 'zip@button']); - - $this->assertEquals(['foo@bar', 'zip@button'], $evt->getFailedRecipients(), - '%s: FailedRecipients should be returned from getter' - ); - } - - public function testFailedRecipientsGetsPickedUpCorrectly() - { - $message = $this->createMessage(); - $transport = $this->createTransport(); - - $evt = $this->createEvent($transport, $message); - $this->assertEquals([], $evt->getFailedRecipients()); - } - - private function createEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message) - { - return new Swift_Events_SendEvent($source, $message); - } - - private function createTransport() - { - return $this->getMockBuilder('Swift_Transport')->getMock(); - } - - private function createMessage() - { - return $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SimpleEventDispatcherTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SimpleEventDispatcherTest.php deleted file mode 100644 index d5dce2b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SimpleEventDispatcherTest.php +++ /dev/null @@ -1,142 +0,0 @@ -dispatcher = new Swift_Events_SimpleEventDispatcher(); - } - - public function testSendEventCanBeCreated() - { - $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - $message = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); - $evt = $this->dispatcher->createSendEvent($transport, $message); - $this->assertInstanceOf('Swift_Events_SendEvent', $evt); - $this->assertSame($message, $evt->getMessage()); - $this->assertSame($transport, $evt->getTransport()); - } - - public function testCommandEventCanBeCreated() - { - $buf = $this->getMockBuilder('Swift_Transport')->getMock(); - $evt = $this->dispatcher->createCommandEvent($buf, "FOO\r\n", [250]); - $this->assertInstanceOf('Swift_Events_CommandEvent', $evt); - $this->assertSame($buf, $evt->getSource()); - $this->assertEquals("FOO\r\n", $evt->getCommand()); - $this->assertEquals([250], $evt->getSuccessCodes()); - } - - public function testResponseEventCanBeCreated() - { - $buf = $this->getMockBuilder('Swift_Transport')->getMock(); - $evt = $this->dispatcher->createResponseEvent($buf, "250 Ok\r\n", true); - $this->assertInstanceOf('Swift_Events_ResponseEvent', $evt); - $this->assertSame($buf, $evt->getSource()); - $this->assertEquals("250 Ok\r\n", $evt->getResponse()); - $this->assertTrue($evt->isValid()); - } - - public function testTransportChangeEventCanBeCreated() - { - $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - $evt = $this->dispatcher->createTransportChangeEvent($transport); - $this->assertInstanceOf('Swift_Events_TransportChangeEvent', $evt); - $this->assertSame($transport, $evt->getSource()); - } - - public function testTransportExceptionEventCanBeCreated() - { - $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - $ex = new Swift_TransportException(''); - $evt = $this->dispatcher->createTransportExceptionEvent($transport, $ex); - $this->assertInstanceOf('Swift_Events_TransportExceptionEvent', $evt); - $this->assertSame($transport, $evt->getSource()); - $this->assertSame($ex, $evt->getException()); - } - - public function testListenersAreNotifiedOfDispatchedEvent() - { - $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - - $evt = $this->dispatcher->createTransportChangeEvent($transport); - - $listenerA = $this->getMockBuilder('Swift_Events_TransportChangeListener')->getMock(); - $listenerB = $this->getMockBuilder('Swift_Events_TransportChangeListener')->getMock(); - - $this->dispatcher->bindEventListener($listenerA); - $this->dispatcher->bindEventListener($listenerB); - - $listenerA->expects($this->once()) - ->method('transportStarted') - ->with($evt); - $listenerB->expects($this->once()) - ->method('transportStarted') - ->with($evt); - - $this->dispatcher->dispatchEvent($evt, 'transportStarted'); - } - - public function testListenersAreOnlyCalledIfImplementingCorrectInterface() - { - $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - $message = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); - - $evt = $this->dispatcher->createSendEvent($transport, $message); - - $targetListener = $this->getMockBuilder('Swift_Events_SendListener')->getMock(); - $otherListener = $this->getMockBuilder('DummyListener')->getMock(); - - $this->dispatcher->bindEventListener($targetListener); - $this->dispatcher->bindEventListener($otherListener); - - $targetListener->expects($this->once()) - ->method('sendPerformed') - ->with($evt); - $otherListener->expects($this->never()) - ->method('sendPerformed'); - - $this->dispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - public function testListenersCanCancelBubblingOfEvent() - { - $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - $message = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); - - $evt = $this->dispatcher->createSendEvent($transport, $message); - - $listenerA = $this->getMockBuilder('Swift_Events_SendListener')->getMock(); - $listenerB = $this->getMockBuilder('Swift_Events_SendListener')->getMock(); - - $this->dispatcher->bindEventListener($listenerA); - $this->dispatcher->bindEventListener($listenerB); - - $listenerA->expects($this->once()) - ->method('sendPerformed') - ->with($evt) - ->will($this->returnCallback(function ($object) { - $object->cancelBubble(true); - })); - $listenerB->expects($this->never()) - ->method('sendPerformed'); - - $this->dispatcher->dispatchEvent($evt, 'sendPerformed'); - - $this->assertTrue($evt->bubbleCancelled()); - } - - private function createDispatcher(array $map) - { - return new Swift_Events_SimpleEventDispatcher($map); - } -} - -class DummyListener implements Swift_Events_EventListener -{ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportChangeEventTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportChangeEventTest.php deleted file mode 100644 index 625b96c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportChangeEventTest.php +++ /dev/null @@ -1,30 +0,0 @@ -createTransport(); - $evt = $this->createEvent($transport); - $ref = $evt->getTransport(); - $this->assertEquals($transport, $ref); - } - - public function testSourceIsTransport() - { - $transport = $this->createTransport(); - $evt = $this->createEvent($transport); - $ref = $evt->getSource(); - $this->assertEquals($transport, $ref); - } - - private function createEvent(Swift_Transport $source) - { - return new Swift_Events_TransportChangeEvent($source); - } - - private function createTransport() - { - return $this->getMockBuilder('Swift_Transport')->getMock(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportExceptionEventTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportExceptionEventTest.php deleted file mode 100644 index 033b0e5..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportExceptionEventTest.php +++ /dev/null @@ -1,41 +0,0 @@ -createException(); - $transport = $this->createTransport(); - $evt = $this->createEvent($transport, $ex); - $ref = $evt->getException(); - $this->assertEquals($ex, $ref, - '%s: Exception should be available via getException()' - ); - } - - public function testSourceIsTransport() - { - $ex = $this->createException(); - $transport = $this->createTransport(); - $evt = $this->createEvent($transport, $ex); - $ref = $evt->getSource(); - $this->assertEquals($transport, $ref, - '%s: Transport should be available via getSource()' - ); - } - - private function createEvent(Swift_Transport $transport, Swift_TransportException $ex) - { - return new Swift_Events_TransportExceptionEvent($transport, $ex); - } - - private function createTransport() - { - return $this->getMockBuilder('Swift_Transport')->getMock(); - } - - private function createException() - { - return new Swift_TransportException(''); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/ArrayKeyCacheTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/ArrayKeyCacheTest.php deleted file mode 100644 index 129c99e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/ArrayKeyCacheTest.php +++ /dev/null @@ -1,240 +0,0 @@ -createKeyCacheInputStream(); - $cache = $this->createCache($is); - $cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('test', $cache->getString($this->key1, 'foo')); - } - - public function testStringDataCanBeOverwritten() - { - $is = $this->createKeyCacheInputStream(); - $cache = $this->createCache($is); - $cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $cache->setString( - $this->key1, 'foo', 'whatever', Swift_KeyCache::MODE_WRITE - ); - - $this->assertEquals('whatever', $cache->getString($this->key1, 'foo')); - } - - public function testStringDataCanBeAppended() - { - $is = $this->createKeyCacheInputStream(); - $cache = $this->createCache($is); - $cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $cache->setString( - $this->key1, 'foo', 'ing', Swift_KeyCache::MODE_APPEND - ); - - $this->assertEquals('testing', $cache->getString($this->key1, 'foo')); - } - - public function testHasKeyReturnValue() - { - $is = $this->createKeyCacheInputStream(); - $cache = $this->createCache($is); - $cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - - $this->assertTrue($cache->hasKey($this->key1, 'foo')); - } - - public function testNsKeyIsWellPartitioned() - { - $is = $this->createKeyCacheInputStream(); - $cache = $this->createCache($is); - $cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $cache->setString( - $this->key2, 'foo', 'ing', Swift_KeyCache::MODE_WRITE - ); - - $this->assertEquals('test', $cache->getString($this->key1, 'foo')); - $this->assertEquals('ing', $cache->getString($this->key2, 'foo')); - } - - public function testItemKeyIsWellPartitioned() - { - $is = $this->createKeyCacheInputStream(); - $cache = $this->createCache($is); - $cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $cache->setString( - $this->key1, 'bar', 'ing', Swift_KeyCache::MODE_WRITE - ); - - $this->assertEquals('test', $cache->getString($this->key1, 'foo')); - $this->assertEquals('ing', $cache->getString($this->key1, 'bar')); - } - - public function testByteStreamCanBeImported() - { - $os = $this->createOutputStream(); - $os->expects($this->at(0)) - ->method('read') - ->will($this->returnValue('abc')); - $os->expects($this->at(1)) - ->method('read') - ->will($this->returnValue('def')); - $os->expects($this->at(2)) - ->method('read') - ->will($this->returnValue(false)); - - $is = $this->createKeyCacheInputStream(); - $cache = $this->createCache($is); - $cache->importFromByteStream( - $this->key1, 'foo', $os, Swift_KeyCache::MODE_WRITE - ); - $this->assertEquals('abcdef', $cache->getString($this->key1, 'foo')); - } - - public function testByteStreamCanBeAppended() - { - $os1 = $this->createOutputStream(); - $os1->expects($this->at(0)) - ->method('read') - ->will($this->returnValue('abc')); - $os1->expects($this->at(1)) - ->method('read') - ->will($this->returnValue('def')); - $os1->expects($this->at(2)) - ->method('read') - ->will($this->returnValue(false)); - - $os2 = $this->createOutputStream(); - $os2->expects($this->at(0)) - ->method('read') - ->will($this->returnValue('xyz')); - $os2->expects($this->at(1)) - ->method('read') - ->will($this->returnValue('uvw')); - $os2->expects($this->at(2)) - ->method('read') - ->will($this->returnValue(false)); - - $is = $this->createKeyCacheInputStream(true); - - $cache = $this->createCache($is); - - $cache->importFromByteStream( - $this->key1, 'foo', $os1, Swift_KeyCache::MODE_APPEND - ); - $cache->importFromByteStream( - $this->key1, 'foo', $os2, Swift_KeyCache::MODE_APPEND - ); - - $this->assertEquals('abcdefxyzuvw', $cache->getString($this->key1, 'foo')); - } - - public function testByteStreamAndStringCanBeAppended() - { - $os = $this->createOutputStream(); - $os->expects($this->at(0)) - ->method('read') - ->will($this->returnValue('abc')); - $os->expects($this->at(1)) - ->method('read') - ->will($this->returnValue('def')); - $os->expects($this->at(2)) - ->method('read') - ->will($this->returnValue(false)); - - $is = $this->createKeyCacheInputStream(true); - - $cache = $this->createCache($is); - - $cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_APPEND - ); - $cache->importFromByteStream( - $this->key1, 'foo', $os, Swift_KeyCache::MODE_APPEND - ); - $this->assertEquals('testabcdef', $cache->getString($this->key1, 'foo')); - } - - public function testDataCanBeExportedToByteStream() - { - //See acceptance test for more detail - $is = $this->createInputStream(); - $is->expects($this->atLeastOnce()) - ->method('write'); - - $kcis = $this->createKeyCacheInputStream(true); - - $cache = $this->createCache($kcis); - - $cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - - $cache->exportToByteStream($this->key1, 'foo', $is); - } - - public function testKeyCanBeCleared() - { - $is = $this->createKeyCacheInputStream(); - $cache = $this->createCache($is); - - $cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $this->assertTrue($cache->hasKey($this->key1, 'foo')); - $cache->clearKey($this->key1, 'foo'); - $this->assertFalse($cache->hasKey($this->key1, 'foo')); - } - - public function testNsKeyCanBeCleared() - { - $is = $this->createKeyCacheInputStream(); - $cache = $this->createCache($is); - - $cache->setString( - $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE - ); - $cache->setString( - $this->key1, 'bar', 'xyz', Swift_KeyCache::MODE_WRITE - ); - $this->assertTrue($cache->hasKey($this->key1, 'foo')); - $this->assertTrue($cache->hasKey($this->key1, 'bar')); - $cache->clearAll($this->key1); - $this->assertFalse($cache->hasKey($this->key1, 'foo')); - $this->assertFalse($cache->hasKey($this->key1, 'bar')); - } - - private function createCache($is) - { - return new Swift_KeyCache_ArrayKeyCache($is); - } - - private function createKeyCacheInputStream() - { - return $this->getMockBuilder('Swift_KeyCache_KeyCacheInputStream')->getMock(); - } - - private function createOutputStream() - { - return $this->getMockBuilder('Swift_OutputByteStream')->getMock(); - } - - private function createInputStream() - { - return $this->getMockBuilder('Swift_InputByteStream')->getMock(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/SimpleKeyCacheInputStreamTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/SimpleKeyCacheInputStreamTest.php deleted file mode 100644 index 4274aaf..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/SimpleKeyCacheInputStreamTest.php +++ /dev/null @@ -1,73 +0,0 @@ -getMockBuilder('Swift_KeyCache')->getMock(); - $cache->expects($this->at(0)) - ->method('setString') - ->with($this->nsKey, 'foo', 'a', Swift_KeyCache::MODE_APPEND); - $cache->expects($this->at(1)) - ->method('setString') - ->with($this->nsKey, 'foo', 'b', Swift_KeyCache::MODE_APPEND); - $cache->expects($this->at(2)) - ->method('setString') - ->with($this->nsKey, 'foo', 'c', Swift_KeyCache::MODE_APPEND); - - $stream = new Swift_KeyCache_SimpleKeyCacheInputStream(); - $stream->setKeyCache($cache); - $stream->setNsKey($this->nsKey); - $stream->setItemKey('foo'); - - $stream->write('a'); - $stream->write('b'); - $stream->write('c'); - } - - public function testFlushContentClearsKey() - { - $cache = $this->getMockBuilder('Swift_KeyCache')->getMock(); - $cache->expects($this->once()) - ->method('clearKey') - ->with($this->nsKey, 'foo'); - - $stream = new Swift_KeyCache_SimpleKeyCacheInputStream(); - $stream->setKeyCache($cache); - $stream->setNsKey($this->nsKey); - $stream->setItemKey('foo'); - - $stream->flushBuffers(); - } - - public function testClonedStreamStillReferencesSameCache() - { - $cache = $this->getMockBuilder('Swift_KeyCache')->getMock(); - $cache->expects($this->at(0)) - ->method('setString') - ->with($this->nsKey, 'foo', 'a', Swift_KeyCache::MODE_APPEND); - $cache->expects($this->at(1)) - ->method('setString') - ->with($this->nsKey, 'foo', 'b', Swift_KeyCache::MODE_APPEND); - $cache->expects($this->at(2)) - ->method('setString') - ->with('test', 'bar', 'x', Swift_KeyCache::MODE_APPEND); - - $stream = new Swift_KeyCache_SimpleKeyCacheInputStream(); - $stream->setKeyCache($cache); - $stream->setNsKey($this->nsKey); - $stream->setItemKey('foo'); - - $stream->write('a'); - $stream->write('b'); - - $newStream = clone $stream; - $newStream->setKeyCache($cache); - $newStream->setNsKey('test'); - $newStream->setItemKey('bar'); - - $newStream->write('x'); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mailer/ArrayRecipientIteratorTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mailer/ArrayRecipientIteratorTest.php deleted file mode 100644 index 12506dd..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mailer/ArrayRecipientIteratorTest.php +++ /dev/null @@ -1,42 +0,0 @@ -assertFalse($it->hasNext()); - } - - public function testHasNextReturnsTrueIfItemsLeft() - { - $it = new Swift_Mailer_ArrayRecipientIterator(['foo@bar' => 'Foo']); - $this->assertTrue($it->hasNext()); - } - - public function testReadingToEndOfListCausesHasNextToReturnFalse() - { - $it = new Swift_Mailer_ArrayRecipientIterator(['foo@bar' => 'Foo']); - $this->assertTrue($it->hasNext()); - $it->nextRecipient(); - $this->assertFalse($it->hasNext()); - } - - public function testReturnedValueHasPreservedKeyValuePair() - { - $it = new Swift_Mailer_ArrayRecipientIterator(['foo@bar' => 'Foo']); - $this->assertEquals(['foo@bar' => 'Foo'], $it->nextRecipient()); - } - - public function testIteratorMovesNextAfterEachIteration() - { - $it = new Swift_Mailer_ArrayRecipientIterator([ - 'foo@bar' => 'Foo', - 'zip@button' => 'Zip thing', - 'test@test' => null, - ]); - $this->assertEquals(['foo@bar' => 'Foo'], $it->nextRecipient()); - $this->assertEquals(['zip@button' => 'Zip thing'], $it->nextRecipient()); - $this->assertEquals(['test@test' => null], $it->nextRecipient()); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MailerTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MailerTest.php deleted file mode 100644 index a2a96d0..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MailerTest.php +++ /dev/null @@ -1,145 +0,0 @@ -createTransport(); - $message = $this->createMessage(); - - $started = false; - $transport->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$started) { - return $started; - }); - $transport->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$started) { - $started = true; - - return; - }); - - $mailer = $this->createMailer($transport); - $mailer->send($message); - } - - public function testTransportIsOnlyStartedOnce() - { - $transport = $this->createTransport(); - $message = $this->createMessage(); - - $started = false; - $transport->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$started) { - return $started; - }); - $transport->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$started) { - $started = true; - - return; - }); - - $mailer = $this->createMailer($transport); - for ($i = 0; $i < 10; ++$i) { - $mailer->send($message); - } - } - - public function testMessageIsPassedToTransport() - { - $transport = $this->createTransport(); - $message = $this->createMessage(); - $transport->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()); - - $mailer = $this->createMailer($transport); - $mailer->send($message); - } - - public function testSendReturnsCountFromTransport() - { - $transport = $this->createTransport(); - $message = $this->createMessage(); - $transport->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturn(57); - - $mailer = $this->createMailer($transport); - $this->assertEquals(57, $mailer->send($message)); - } - - public function testFailedRecipientReferenceIsPassedToTransport() - { - $failures = []; - - $transport = $this->createTransport(); - $message = $this->createMessage(); - $transport->shouldReceive('send') - ->once() - ->with($message, $failures) - ->andReturn(57); - - $mailer = $this->createMailer($transport); - $mailer->send($message, $failures); - } - - public function testSendRecordsRfcComplianceExceptionAsEntireSendFailure() - { - $failures = []; - - $rfcException = new Swift_RfcComplianceException('test'); - $transport = $this->createTransport(); - $message = $this->createMessage(); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo&invalid' => 'Foo', 'bar@valid.tld' => 'Bar']); - $transport->shouldReceive('send') - ->once() - ->with($message, $failures) - ->andThrow($rfcException); - - $mailer = $this->createMailer($transport); - $this->assertEquals(0, $mailer->send($message, $failures), '%s: Should return 0'); - $this->assertEquals(['foo&invalid', 'bar@valid.tld'], $failures, '%s: Failures should contain all addresses since the entire message failed to compile'); - } - - public function testRegisterPluginDelegatesToTransport() - { - $plugin = $this->createPlugin(); - $transport = $this->createTransport(); - $mailer = $this->createMailer($transport); - - $transport->shouldReceive('registerPlugin') - ->once() - ->with($plugin); - - $mailer->registerPlugin($plugin); - } - - private function createPlugin() - { - return $this->getMockery('Swift_Events_EventListener')->shouldIgnoreMissing(); - } - - private function createTransport() - { - return $this->getMockery('Swift_Transport')->shouldIgnoreMissing(); - } - - private function createMessage() - { - return $this->getMockery('Swift_Mime_SimpleMessage')->shouldIgnoreMissing(); - } - - private function createMailer(Swift_Transport $transport) - { - return new Swift_Mailer($transport); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MessageTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MessageTest.php deleted file mode 100644 index 3ebbd7e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MessageTest.php +++ /dev/null @@ -1,133 +0,0 @@ -recursiveObjectCloningCheck($message1, $message2, $message1_clone); - // the test above will fail if the two messages are not identical - $this->addToAssertionCount(1); - } - - public function testCloningWithSigners() - { - $message1 = new Swift_Message('subj', 'body', 'ctype'); - $signer = new Swift_Signers_DKIMSigner(dirname(dirname(__DIR__)).'/_samples/dkim/dkim.test.priv', 'test.example', 'example'); - $message1->attachSigner($signer); - $message2 = new Swift_Message('subj', 'body', 'ctype'); - $signer = new Swift_Signers_DKIMSigner(dirname(dirname(__DIR__)).'/_samples/dkim/dkim.test.priv', 'test.example', 'example'); - $message2->attachSigner($signer); - $message1_clone = clone $message1; - - $this->recursiveObjectCloningCheck($message1, $message2, $message1_clone); - // the test above will fail if the two messages are not identical - $this->addToAssertionCount(1); - } - - public function testBodySwap() - { - $message1 = new Swift_Message('Test'); - $html = new Swift_MimePart('', 'text/html'); - $html->getHeaders()->addTextHeader('X-Test-Remove', 'Test-Value'); - $html->getHeaders()->addTextHeader('X-Test-Alter', 'Test-Value'); - $message1->attach($html); - $source = $message1->toString(); - $message2 = clone $message1; - $message2->setSubject('Message2'); - foreach ($message2->getChildren() as $child) { - $child->setBody('Test'); - $child->getHeaders()->removeAll('X-Test-Remove'); - $child->getHeaders()->get('X-Test-Alter')->setValue('Altered'); - } - $final = $message1->toString(); - if ($source != $final) { - $this->fail("Difference although object cloned \n [".$source."]\n[".$final."]\n"); - } - $final = $message2->toString(); - if ($final == $source) { - $this->fail('Two body matches although they should differ'."\n [".$source."]\n[".$final."]\n"); - } - $id_1 = $message1->getId(); - $id_2 = $message2->getId(); - $this->assertEquals($id_1, $id_2, 'Message Ids differ'); - $id_2 = $message2->generateId(); - $this->assertNotEquals($id_1, $id_2, 'Message Ids are the same'); - } - - protected function recursiveObjectCloningCheck($obj1, $obj2, $obj1_clone) - { - $obj1_properties = (array) $obj1; - $obj2_properties = (array) $obj2; - $obj1_clone_properties = (array) $obj1_clone; - - foreach ($obj1_properties as $property => $value) { - if (is_object($value)) { - $obj1_value = $obj1_properties[$property]; - $obj2_value = $obj2_properties[$property]; - $obj1_clone_value = $obj1_clone_properties[$property]; - - if ($obj1_value !== $obj2_value) { - // two separetely instanciated objects property not referencing same object - $this->assertFalse( - // but object's clone does - not everything copied - $obj1_value === $obj1_clone_value, - "Property `$property` cloning error: source and cloned objects property is referencing same object" - ); - } else { - // two separetely instanciated objects have same reference - $this->assertFalse( - // but object's clone doesn't - overdone making copies - $obj1_value !== $obj1_clone_value, - "Property `$property` not properly cloned: it should reference same object as cloning source (overdone copping)" - ); - } - // recurse - $this->recursiveObjectCloningCheck($obj1_value, $obj2_value, $obj1_clone_value); - } elseif (is_array($value)) { - $obj1_value = $obj1_properties[$property]; - $obj2_value = $obj2_properties[$property]; - $obj1_clone_value = $obj1_clone_properties[$property]; - - return $this->recursiveArrayCloningCheck($obj1_value, $obj2_value, $obj1_clone_value); - } - } - } - - protected function recursiveArrayCloningCheck($array1, $array2, $array1_clone) - { - foreach ($array1 as $key => $value) { - if (is_object($value)) { - $arr1_value = $array1[$key]; - $arr2_value = $array2[$key]; - $arr1_clone_value = $array1_clone[$key]; - if ($arr1_value !== $arr2_value) { - // two separetely instanciated objects property not referencing same object - $this->assertFalse( - // but object's clone does - not everything copied - $arr1_value === $arr1_clone_value, - "Key `$key` cloning error: source and cloned objects property is referencing same object" - ); - } else { - // two separetely instanciated objects have same reference - $this->assertFalse( - // but object's clone doesn't - overdone making copies - $arr1_value !== $arr1_clone_value, - "Key `$key` not properly cloned: it should reference same object as cloning source (overdone copping)" - ); - } - // recurse - $this->recursiveObjectCloningCheck($arr1_value, $arr2_value, $arr1_clone_value); - } elseif (is_array($value)) { - $arr1_value = $array1[$key]; - $arr2_value = $array2[$key]; - $arr1_clone_value = $array1_clone[$key]; - - return $this->recursiveArrayCloningCheck($arr1_value, $arr2_value, $arr1_clone_value); - } - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AbstractMimeEntityTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AbstractMimeEntityTest.php deleted file mode 100644 index c7c2c03..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AbstractMimeEntityTest.php +++ /dev/null @@ -1,1092 +0,0 @@ -createHeaderSet(); - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $this->assertSame($headers, $entity->getHeaders()); - } - - public function testContentTypeIsReturnedFromHeader() - { - $ctype = $this->createHeader('Content-Type', 'image/jpeg-test'); - $headers = $this->createHeaderSet(['Content-Type' => $ctype]); - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $this->assertEquals('image/jpeg-test', $entity->getContentType()); - } - - public function testContentTypeIsSetInHeader() - { - $ctype = $this->createHeader('Content-Type', 'text/plain', [], false); - $headers = $this->createHeaderSet(['Content-Type' => $ctype]); - - $ctype->shouldReceive('setFieldBodyModel') - ->once() - ->with('image/jpeg'); - $ctype->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes() - ->with(\Mockery::not('image/jpeg')); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setContentType('image/jpeg'); - } - - public function testContentTypeHeaderIsAddedIfNoneSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addParameterizedHeader') - ->once() - ->with('Content-Type', 'image/jpeg'); - $headers->shouldReceive('addParameterizedHeader') - ->zeroOrMoreTimes(); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setContentType('image/jpeg'); - } - - public function testContentTypeCanBeSetViaSetBody() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addParameterizedHeader') - ->once() - ->with('Content-Type', 'text/html'); - $headers->shouldReceive('addParameterizedHeader') - ->zeroOrMoreTimes(); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setBody('foo', 'text/html'); - } - - public function testGetEncoderFromConstructor() - { - $encoder = $this->createEncoder('base64'); - $entity = $this->createEntity($this->createHeaderSet(), $encoder, - $this->createCache() - ); - $this->assertSame($encoder, $entity->getEncoder()); - } - - public function testSetAndGetEncoder() - { - $encoder = $this->createEncoder('base64'); - $headers = $this->createHeaderSet(); - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setEncoder($encoder); - $this->assertSame($encoder, $entity->getEncoder()); - } - - public function testSettingEncoderUpdatesTransferEncoding() - { - $encoder = $this->createEncoder('base64'); - $encoding = $this->createHeader( - 'Content-Transfer-Encoding', '8bit', [], false - ); - $headers = $this->createHeaderSet([ - 'Content-Transfer-Encoding' => $encoding, - ]); - $encoding->shouldReceive('setFieldBodyModel') - ->once() - ->with('base64'); - $encoding->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setEncoder($encoder); - } - - public function testSettingEncoderAddsEncodingHeaderIfNonePresent() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addTextHeader') - ->once() - ->with('Content-Transfer-Encoding', 'something'); - $headers->shouldReceive('addTextHeader') - ->zeroOrMoreTimes(); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setEncoder($this->createEncoder('something')); - } - - public function testIdIsReturnedFromHeader() - { - /* -- RFC 2045, 7. - In constructing a high-level user agent, it may be desirable to allow - one body to make reference to another. Accordingly, bodies may be - labelled using the "Content-ID" header field, which is syntactically - identical to the "Message-ID" header field - */ - - $cid = $this->createHeader('Content-ID', 'zip@button'); - $headers = $this->createHeaderSet(['Content-ID' => $cid]); - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $this->assertEquals('zip@button', $entity->getId()); - } - - public function testIdIsSetInHeader() - { - $cid = $this->createHeader('Content-ID', 'zip@button', [], false); - $headers = $this->createHeaderSet(['Content-ID' => $cid]); - - $cid->shouldReceive('setFieldBodyModel') - ->once() - ->with('foo@bar'); - $cid->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setId('foo@bar'); - } - - public function testIdIsAutoGenerated() - { - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $this->assertRegExp('/^.*?@.*?$/D', $entity->getId()); - } - - public function testGenerateIdCreatesNewId() - { - $headers = $this->createHeaderSet(); - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $id1 = $entity->generateId(); - $id2 = $entity->generateId(); - $this->assertNotEquals($id1, $id2); - } - - public function testGenerateIdSetsNewId() - { - $headers = $this->createHeaderSet(); - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $id = $entity->generateId(); - $this->assertEquals($id, $entity->getId()); - } - - public function testDescriptionIsReadFromHeader() - { - /* -- RFC 2045, 8. - The ability to associate some descriptive information with a given - body is often desirable. For example, it may be useful to mark an - "image" body as "a picture of the Space Shuttle Endeavor." Such text - may be placed in the Content-Description header field. This header - field is always optional. - */ - - $desc = $this->createHeader('Content-Description', 'something'); - $headers = $this->createHeaderSet(['Content-Description' => $desc]); - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $this->assertEquals('something', $entity->getDescription()); - } - - public function testDescriptionIsSetInHeader() - { - $desc = $this->createHeader('Content-Description', '', [], false); - $desc->shouldReceive('setFieldBodyModel')->once()->with('whatever'); - - $headers = $this->createHeaderSet(['Content-Description' => $desc]); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setDescription('whatever'); - } - - public function testDescriptionHeaderIsAddedIfNotPresent() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addTextHeader') - ->once() - ->with('Content-Description', 'whatever'); - $headers->shouldReceive('addTextHeader') - ->zeroOrMoreTimes(); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setDescription('whatever'); - } - - public function testSetAndGetMaxLineLength() - { - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $entity->setMaxLineLength(60); - $this->assertEquals(60, $entity->getMaxLineLength()); - } - - public function testEncoderIsUsedForStringGeneration() - { - $encoder = $this->createEncoder('base64', false); - $encoder->expects($this->once()) - ->method('encodeString') - ->with('blah'); - - $entity = $this->createEntity($this->createHeaderSet(), - $encoder, $this->createCache() - ); - $entity->setBody('blah'); - $entity->toString(); - } - - public function testMaxLineLengthIsProvidedWhenEncoding() - { - $encoder = $this->createEncoder('base64', false); - $encoder->expects($this->once()) - ->method('encodeString') - ->with('blah', 0, 65); - - $entity = $this->createEntity($this->createHeaderSet(), - $encoder, $this->createCache() - ); - $entity->setBody('blah'); - $entity->setMaxLineLength(65); - $entity->toString(); - } - - public function testHeadersAppearInString() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('toString') - ->once() - ->andReturn( - "Content-Type: text/plain; charset=utf-8\r\n". - "X-MyHeader: foobar\r\n" - ); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $this->assertEquals( - "Content-Type: text/plain; charset=utf-8\r\n". - "X-MyHeader: foobar\r\n", - $entity->toString() - ); - } - - public function testSetAndGetBody() - { - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $entity->setBody("blah\r\nblah!"); - $this->assertEquals("blah\r\nblah!", $entity->getBody()); - } - - public function testBodyIsAppended() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('toString') - ->once() - ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setBody("blah\r\nblah!"); - $this->assertEquals( - "Content-Type: text/plain; charset=utf-8\r\n". - "\r\n". - "blah\r\nblah!", - $entity->toString() - ); - } - - public function testGetBodyReturnsStringFromByteStream() - { - $os = $this->createOutputStream('byte stream string'); - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $entity->setBody($os); - $this->assertEquals('byte stream string', $entity->getBody()); - } - - public function testByteStreamBodyIsAppended() - { - $headers = $this->createHeaderSet([], false); - $os = $this->createOutputStream('streamed'); - $headers->shouldReceive('toString') - ->once() - ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setBody($os); - $this->assertEquals( - "Content-Type: text/plain; charset=utf-8\r\n". - "\r\n". - 'streamed', - $entity->toString() - ); - } - - public function testBoundaryCanBeRetrieved() - { - /* -- RFC 2046, 5.1.1. - boundary := 0*69 bcharsnospace - - bchars := bcharsnospace / " " - - bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" / - "+" / "_" / "," / "-" / "." / - "/" / ":" / "=" / "?" - */ - - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $this->assertRegExp( - '/^[a-zA-Z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-zA-Z0-9\'\(\)\+_\-,\.\/:=\?]$/D', - $entity->getBoundary() - ); - } - - public function testBoundaryNeverChanges() - { - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $firstBoundary = $entity->getBoundary(); - for ($i = 0; $i < 10; ++$i) { - $this->assertEquals($firstBoundary, $entity->getBoundary()); - } - } - - public function testBoundaryCanBeSet() - { - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $entity->setBoundary('foobar'); - $this->assertEquals('foobar', $entity->getBoundary()); - } - - public function testAddingChildrenGeneratesBoundaryInHeaders() - { - $child = $this->createChild(); - $cType = $this->createHeader('Content-Type', 'text/plain', [], false); - $cType->shouldReceive('setParameter') - ->once() - ->with('boundary', \Mockery::any()); - $cType->shouldReceive('setParameter') - ->zeroOrMoreTimes(); - - $entity = $this->createEntity($this->createHeaderSet([ - 'Content-Type' => $cType, - ]), - $this->createEncoder(), $this->createCache() - ); - $entity->setChildren([$child]); - } - - public function testChildrenOfLevelAttachmentAndLessCauseMultipartMixed() - { - for ($level = Swift_Mime_SimpleMimeEntity::LEVEL_MIXED; - $level > Swift_Mime_SimpleMimeEntity::LEVEL_TOP; $level /= 2) { - $child = $this->createChild($level); - $cType = $this->createHeader( - 'Content-Type', 'text/plain', [], false - ); - $cType->shouldReceive('setFieldBodyModel') - ->once() - ->with('multipart/mixed'); - $cType->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $entity = $this->createEntity($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $entity->setChildren([$child]); - } - } - - public function testChildrenOfLevelAlternativeAndLessCauseMultipartAlternative() - { - for ($level = Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE; - $level > Swift_Mime_SimpleMimeEntity::LEVEL_MIXED; $level /= 2) { - $child = $this->createChild($level); - $cType = $this->createHeader( - 'Content-Type', 'text/plain', [], false - ); - $cType->shouldReceive('setFieldBodyModel') - ->once() - ->with('multipart/alternative'); - $cType->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $entity = $this->createEntity($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $entity->setChildren([$child]); - } - } - - public function testChildrenOfLevelRelatedAndLessCauseMultipartRelated() - { - for ($level = Swift_Mime_SimpleMimeEntity::LEVEL_RELATED; - $level > Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE; $level /= 2) { - $child = $this->createChild($level); - $cType = $this->createHeader( - 'Content-Type', 'text/plain', [], false - ); - $cType->shouldReceive('setFieldBodyModel') - ->once() - ->with('multipart/related'); - $cType->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $entity = $this->createEntity($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $entity->setChildren([$child]); - } - } - - public function testHighestLevelChildDeterminesContentType() - { - $combinations = [ - ['levels' => [Swift_Mime_SimpleMimeEntity::LEVEL_MIXED, - Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, - Swift_Mime_SimpleMimeEntity::LEVEL_RELATED, - ], - 'type' => 'multipart/mixed', - ], - ['levels' => [Swift_Mime_SimpleMimeEntity::LEVEL_MIXED, - Swift_Mime_SimpleMimeEntity::LEVEL_RELATED, - ], - 'type' => 'multipart/mixed', - ], - ['levels' => [Swift_Mime_SimpleMimeEntity::LEVEL_MIXED, - Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, - ], - 'type' => 'multipart/mixed', - ], - ['levels' => [Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, - Swift_Mime_SimpleMimeEntity::LEVEL_RELATED, - ], - 'type' => 'multipart/alternative', - ], - ]; - - foreach ($combinations as $combination) { - $children = []; - foreach ($combination['levels'] as $level) { - $children[] = $this->createChild($level); - } - - $cType = $this->createHeader( - 'Content-Type', 'text/plain', [], false - ); - $cType->shouldReceive('setFieldBodyModel') - ->once() - ->with($combination['type']); - - $headerSet = $this->createHeaderSet(['Content-Type' => $cType]); - $headerSet->shouldReceive('newInstance') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use ($headerSet) { - return $headerSet; - }); - $entity = $this->createEntity($headerSet, - $this->createEncoder(), $this->createCache() - ); - $entity->setChildren($children); - } - } - - public function testChildrenAppearNestedInString() - { - /* -- RFC 2046, 5.1.1. - (excerpt too verbose to paste here) - */ - - $headers = $this->createHeaderSet([], false); - - $child1 = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, - "Content-Type: text/plain\r\n". - "\r\n". - 'foobar', 'text/plain' - ); - - $child2 = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, - "Content-Type: text/html\r\n". - "\r\n". - 'foobar', 'text/html' - ); - - $headers->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: multipart/alternative; boundary=\"xxx\"\r\n"); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setBoundary('xxx'); - $entity->setChildren([$child1, $child2]); - - $this->assertEquals( - "Content-Type: multipart/alternative; boundary=\"xxx\"\r\n". - "\r\n". - "\r\n--xxx\r\n". - "Content-Type: text/plain\r\n". - "\r\n". - "foobar\r\n". - "\r\n--xxx\r\n". - "Content-Type: text/html\r\n". - "\r\n". - "foobar\r\n". - "\r\n--xxx--\r\n", - $entity->toString() - ); - } - - public function testMixingLevelsIsHierarchical() - { - $headers = $this->createHeaderSet([], false); - $newHeaders = $this->createHeaderSet([], false); - - $part = $this->createChild(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, - "Content-Type: text/plain\r\n". - "\r\n". - 'foobar' - ); - - $attachment = $this->createChild(Swift_Mime_SimpleMimeEntity::LEVEL_MIXED, - "Content-Type: application/octet-stream\r\n". - "\r\n". - 'data' - ); - - $headers->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: multipart/mixed; boundary=\"xxx\"\r\n"); - $headers->shouldReceive('newInstance') - ->zeroOrMoreTimes() - ->andReturn($newHeaders); - $newHeaders->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: multipart/alternative; boundary=\"yyy\"\r\n"); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setBoundary('xxx'); - $entity->setChildren([$part, $attachment]); - - $this->assertRegExp( - '~^'. - "Content-Type: multipart/mixed; boundary=\"xxx\"\r\n". - "\r\n\r\n--xxx\r\n". - "Content-Type: multipart/alternative; boundary=\"yyy\"\r\n". - "\r\n\r\n--(.*?)\r\n". - "Content-Type: text/plain\r\n". - "\r\n". - 'foobar'. - "\r\n\r\n--\\1--\r\n". - "\r\n\r\n--xxx\r\n". - "Content-Type: application/octet-stream\r\n". - "\r\n". - 'data'. - "\r\n\r\n--xxx--\r\n". - '$~', - $entity->toString() - ); - } - - public function testSettingEncoderNotifiesChildren() - { - $child = $this->createChild(0, '', false); - $encoder = $this->createEncoder('base64'); - - $child->shouldReceive('encoderChanged') - ->once() - ->with($encoder); - - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $entity->setChildren([$child]); - $entity->setEncoder($encoder); - } - - public function testReceiptOfEncoderChangeNotifiesChildren() - { - $child = $this->createChild(0, '', false); - $encoder = $this->createEncoder('base64'); - - $child->shouldReceive('encoderChanged') - ->once() - ->with($encoder); - - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $entity->setChildren([$child]); - $entity->encoderChanged($encoder); - } - - public function testReceiptOfCharsetChangeNotifiesChildren() - { - $child = $this->createChild(0, '', false); - $child->shouldReceive('charsetChanged') - ->once() - ->with('windows-874'); - - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $entity->setChildren([$child]); - $entity->charsetChanged('windows-874'); - } - - public function testEntityIsWrittenToByteStream() - { - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $is = $this->createInputStream(false); - $is->expects($this->atLeastOnce()) - ->method('write'); - - $entity->toByteStream($is); - } - - public function testEntityHeadersAreComittedToByteStream() - { - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $is = $this->createInputStream(false); - $is->expects($this->atLeastOnce()) - ->method('write'); - $is->expects($this->atLeastOnce()) - ->method('commit'); - - $entity->toByteStream($is); - } - - public function testOrderingTextBeforeHtml() - { - $htmlChild = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, - "Content-Type: text/html\r\n". - "\r\n". - 'HTML PART', - 'text/html' - ); - $textChild = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, - "Content-Type: text/plain\r\n". - "\r\n". - 'TEXT PART', - 'text/plain' - ); - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: multipart/alternative; boundary=\"xxx\"\r\n"); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setBoundary('xxx'); - $entity->setChildren([$htmlChild, $textChild]); - - $this->assertEquals( - "Content-Type: multipart/alternative; boundary=\"xxx\"\r\n". - "\r\n\r\n--xxx\r\n". - "Content-Type: text/plain\r\n". - "\r\n". - 'TEXT PART'. - "\r\n\r\n--xxx\r\n". - "Content-Type: text/html\r\n". - "\r\n". - 'HTML PART'. - "\r\n\r\n--xxx--\r\n", - $entity->toString() - ); - } - - public function testOrderingEqualContentTypesMaintainsOriginalOrdering() - { - $firstChild = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, - "Content-Type: text/plain\r\n". - "\r\n". - 'PART 1', - 'text/plain' - ); - $secondChild = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, - "Content-Type: text/plain\r\n". - "\r\n". - 'PART 2', - 'text/plain' - ); - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: multipart/alternative; boundary=\"xxx\"\r\n"); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $this->createCache() - ); - $entity->setBoundary('xxx'); - $entity->setChildren([$firstChild, $secondChild]); - - $this->assertEquals( - "Content-Type: multipart/alternative; boundary=\"xxx\"\r\n". - "\r\n\r\n--xxx\r\n". - "Content-Type: text/plain\r\n". - "\r\n". - 'PART 1'. - "\r\n\r\n--xxx\r\n". - "Content-Type: text/plain\r\n". - "\r\n". - 'PART 2'. - "\r\n\r\n--xxx--\r\n", - $entity->toString() - ); - } - - public function testUnsettingChildrenRestoresContentType() - { - $cType = $this->createHeader('Content-Type', 'text/plain', [], false); - $child = $this->createChild(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE); - - $cType->shouldReceive('setFieldBodyModel') - ->twice() - ->with('image/jpeg'); - $cType->shouldReceive('setFieldBodyModel') - ->once() - ->with('multipart/alternative'); - $cType->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes() - ->with(\Mockery::not('multipart/alternative', 'image/jpeg')); - - $entity = $this->createEntity($this->createHeaderSet([ - 'Content-Type' => $cType, - ]), - $this->createEncoder(), $this->createCache() - ); - - $entity->setContentType('image/jpeg'); - $entity->setChildren([$child]); - $entity->setChildren([]); - } - - public function testBodyIsReadFromCacheWhenUsingToStringIfPresent() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - - $cache = $this->createCache(false); - $cache->shouldReceive('hasKey') - ->once() - ->with(\Mockery::any(), 'body') - ->andReturn(true); - $cache->shouldReceive('getString') - ->once() - ->with(\Mockery::any(), 'body') - ->andReturn("\r\ncache\r\ncache!"); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $cache - ); - - $entity->setBody("blah\r\nblah!"); - $this->assertEquals( - "Content-Type: text/plain; charset=utf-8\r\n". - "\r\n". - "cache\r\ncache!", - $entity->toString() - ); - } - - public function testBodyIsAddedToCacheWhenUsingToString() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - - $cache = $this->createCache(false); - $cache->shouldReceive('hasKey') - ->once() - ->with(\Mockery::any(), 'body') - ->andReturn(false); - $cache->shouldReceive('setString') - ->once() - ->with(\Mockery::any(), 'body', "\r\nblah\r\nblah!", Swift_KeyCache::MODE_WRITE); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $cache - ); - - $entity->setBody("blah\r\nblah!"); - $entity->toString(); - } - - public function testBodyIsClearedFromCacheIfNewBodySet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - - $cache = $this->createCache(false); - $entity = $this->createEntity($headers, $this->createEncoder(), - $cache - ); - - $entity->setBody("blah\r\nblah!"); - $entity->toString(); - - // We set the expectation at this point because we only care what happens when calling setBody() - $cache->shouldReceive('clearKey') - ->once() - ->with(\Mockery::any(), 'body'); - - $entity->setBody("new\r\nnew!"); - } - - public function testBodyIsNotClearedFromCacheIfSameBodySet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - - $cache = $this->createCache(false); - $entity = $this->createEntity($headers, $this->createEncoder(), - $cache - ); - - $entity->setBody("blah\r\nblah!"); - $entity->toString(); - - // We set the expectation at this point because we only care what happens when calling setBody() - $cache->shouldReceive('clearKey') - ->never(); - - $entity->setBody("blah\r\nblah!"); - } - - public function testBodyIsClearedFromCacheIfNewEncoderSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - - $cache = $this->createCache(false); - $otherEncoder = $this->createEncoder(); - $entity = $this->createEntity($headers, $this->createEncoder(), - $cache - ); - - $entity->setBody("blah\r\nblah!"); - $entity->toString(); - - // We set the expectation at this point because we only care what happens when calling setEncoder() - $cache->shouldReceive('clearKey') - ->once() - ->with(\Mockery::any(), 'body'); - - $entity->setEncoder($otherEncoder); - } - - public function testBodyIsReadFromCacheWhenUsingToByteStreamIfPresent() - { - $is = $this->createInputStream(); - $cache = $this->createCache(false); - $cache->shouldReceive('hasKey') - ->once() - ->with(\Mockery::any(), 'body') - ->andReturn(true); - $cache->shouldReceive('exportToByteStream') - ->once() - ->with(\Mockery::any(), 'body', $is); - - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $cache - ); - $entity->setBody('foo'); - - $entity->toByteStream($is); - } - - public function testBodyIsAddedToCacheWhenUsingToByteStream() - { - $is = $this->createInputStream(); - $cache = $this->createCache(false); - $cache->shouldReceive('hasKey') - ->once() - ->with(\Mockery::any(), 'body') - ->andReturn(false); - $cache->shouldReceive('getInputByteStream') - ->once() - ->with(\Mockery::any(), 'body'); - - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $cache - ); - $entity->setBody('foo'); - - $entity->toByteStream($is); - } - - public function testFluidInterface() - { - $entity = $this->createEntity($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - - $this->assertSame($entity, - $entity - ->setContentType('text/plain') - ->setEncoder($this->createEncoder()) - ->setId('foo@bar') - ->setDescription('my description') - ->setMaxLineLength(998) - ->setBody('xx') - ->setBoundary('xyz') - ->setChildren([]) - ); - } - - abstract protected function createEntity($headers, $encoder, $cache); - - protected function createChild($level = null, $string = '', $stub = true) - { - $child = $this->getMockery('Swift_Mime_SimpleMimeEntity')->shouldIgnoreMissing(); - if (isset($level)) { - $child->shouldReceive('getNestingLevel') - ->zeroOrMoreTimes() - ->andReturn($level); - } - $child->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn($string); - - return $child; - } - - protected function createEncoder($name = 'quoted-printable', $stub = true) - { - $encoder = $this->getMockBuilder('Swift_Mime_ContentEncoder')->getMock(); - $encoder->expects($this->any()) - ->method('getName') - ->will($this->returnValue($name)); - $encoder->expects($this->any()) - ->method('encodeString') - ->will($this->returnCallback(function () { - $args = func_get_args(); - - return array_shift($args); - })); - - return $encoder; - } - - protected function createCache($stub = true) - { - return $this->getMockery('Swift_KeyCache')->shouldIgnoreMissing(); - } - - protected function createHeaderSet($headers = [], $stub = true) - { - $set = $this->getMockery('Swift_Mime_SimpleHeaderSet')->shouldIgnoreMissing(); - $set->shouldReceive('get') - ->zeroOrMoreTimes() - ->andReturnUsing(function ($key) use ($headers) { - return $headers[$key]; - }); - $set->shouldReceive('has') - ->zeroOrMoreTimes() - ->andReturnUsing(function ($key) use ($headers) { - return array_key_exists($key, $headers); - }); - - return $set; - } - - protected function createHeader($name, $model = null, $params = [], $stub = true) - { - $header = $this->getMockery('Swift_Mime_Headers_ParameterizedHeader')->shouldIgnoreMissing(); - $header->shouldReceive('getFieldName') - ->zeroOrMoreTimes() - ->andReturn($name); - $header->shouldReceive('getFieldBodyModel') - ->zeroOrMoreTimes() - ->andReturn($model); - $header->shouldReceive('getParameter') - ->zeroOrMoreTimes() - ->andReturnUsing(function ($key) use ($params) { - return $params[$key]; - }); - - return $header; - } - - protected function createOutputStream($data = null, $stub = true) - { - $os = $this->getMockery('Swift_OutputByteStream'); - if (isset($data)) { - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use ($data) { - static $first = true; - if (!$first) { - return false; - } - - $first = false; - - return $data; - }); - $os->shouldReceive('setReadPointer') - ->zeroOrMoreTimes(); - } - - return $os; - } - - protected function createInputStream($stub = true) - { - return $this->getMockBuilder('Swift_InputByteStream')->getMock(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AttachmentTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AttachmentTest.php deleted file mode 100644 index 912d529..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AttachmentTest.php +++ /dev/null @@ -1,321 +0,0 @@ -createAttachment($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals( - Swift_Mime_SimpleMimeEntity::LEVEL_MIXED, $attachment->getNestingLevel() - ); - } - - public function testDispositionIsReturnedFromHeader() - { - /* -- RFC 2183, 2.1, 2.2. - */ - - $disposition = $this->createHeader('Content-Disposition', 'attachment'); - $attachment = $this->createAttachment($this->createHeaderSet([ - 'Content-Disposition' => $disposition, ]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals('attachment', $attachment->getDisposition()); - } - - public function testDispositionIsSetInHeader() - { - $disposition = $this->createHeader('Content-Disposition', 'attachment', - [], false - ); - $disposition->shouldReceive('setFieldBodyModel') - ->once() - ->with('inline'); - $disposition->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $attachment = $this->createAttachment($this->createHeaderSet([ - 'Content-Disposition' => $disposition, ]), - $this->createEncoder(), $this->createCache() - ); - $attachment->setDisposition('inline'); - } - - public function testDispositionIsAddedIfNonePresent() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addParameterizedHeader') - ->once() - ->with('Content-Disposition', 'inline'); - $headers->shouldReceive('addParameterizedHeader') - ->zeroOrMoreTimes(); - - $attachment = $this->createAttachment($headers, $this->createEncoder(), - $this->createCache() - ); - $attachment->setDisposition('inline'); - } - - public function testDispositionIsAutoDefaultedToAttachment() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addParameterizedHeader') - ->once() - ->with('Content-Disposition', 'attachment'); - $headers->shouldReceive('addParameterizedHeader') - ->zeroOrMoreTimes(); - - $attachment = $this->createAttachment($headers, $this->createEncoder(), - $this->createCache() - ); - } - - public function testDefaultContentTypeInitializedToOctetStream() - { - $cType = $this->createHeader('Content-Type', '', - [], false - ); - $cType->shouldReceive('setFieldBodyModel') - ->once() - ->with('application/octet-stream'); - $cType->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $attachment = $this->createAttachment($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - } - - public function testFilenameIsReturnedFromHeader() - { - /* -- RFC 2183, 2.3. - */ - - $disposition = $this->createHeader('Content-Disposition', 'attachment', - ['filename' => 'foo.txt'] - ); - $attachment = $this->createAttachment($this->createHeaderSet([ - 'Content-Disposition' => $disposition, ]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals('foo.txt', $attachment->getFilename()); - } - - public function testFilenameIsSetInHeader() - { - $disposition = $this->createHeader('Content-Disposition', 'attachment', - ['filename' => 'foo.txt'], false - ); - $disposition->shouldReceive('setParameter') - ->once() - ->with('filename', 'bar.txt'); - $disposition->shouldReceive('setParameter') - ->zeroOrMoreTimes(); - - $attachment = $this->createAttachment($this->createHeaderSet([ - 'Content-Disposition' => $disposition, ]), - $this->createEncoder(), $this->createCache() - ); - $attachment->setFilename('bar.txt'); - } - - public function testSettingFilenameSetsNameInContentType() - { - /* - This is a legacy requirement which isn't covered by up-to-date RFCs. - */ - - $cType = $this->createHeader('Content-Type', 'text/plain', - [], false - ); - $cType->shouldReceive('setParameter') - ->once() - ->with('name', 'bar.txt'); - $cType->shouldReceive('setParameter') - ->zeroOrMoreTimes(); - - $attachment = $this->createAttachment($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $attachment->setFilename('bar.txt'); - } - - public function testSizeIsReturnedFromHeader() - { - /* -- RFC 2183, 2.7. - */ - - $disposition = $this->createHeader('Content-Disposition', 'attachment', - ['size' => 1234] - ); - $attachment = $this->createAttachment($this->createHeaderSet([ - 'Content-Disposition' => $disposition, ]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals(1234, $attachment->getSize()); - } - - public function testSizeIsSetInHeader() - { - $disposition = $this->createHeader('Content-Disposition', 'attachment', - [], false - ); - $disposition->shouldReceive('setParameter') - ->once() - ->with('size', 12345); - $disposition->shouldReceive('setParameter') - ->zeroOrMoreTimes(); - - $attachment = $this->createAttachment($this->createHeaderSet([ - 'Content-Disposition' => $disposition, ]), - $this->createEncoder(), $this->createCache() - ); - $attachment->setSize(12345); - } - - public function testFilnameCanBeReadFromFileStream() - { - $file = $this->createFileStream('/bar/file.ext', ''); - $disposition = $this->createHeader('Content-Disposition', 'attachment', - ['filename' => 'foo.txt'], false - ); - $disposition->shouldReceive('setParameter') - ->once() - ->with('filename', 'file.ext'); - - $attachment = $this->createAttachment($this->createHeaderSet([ - 'Content-Disposition' => $disposition, ]), - $this->createEncoder(), $this->createCache() - ); - $attachment->setFile($file); - } - - public function testContentTypeCanBeSetViaSetFile() - { - $file = $this->createFileStream('/bar/file.ext', ''); - $disposition = $this->createHeader('Content-Disposition', 'attachment', - ['filename' => 'foo.txt'], false - ); - $disposition->shouldReceive('setParameter') - ->once() - ->with('filename', 'file.ext'); - - $ctype = $this->createHeader('Content-Type', 'text/plain', [], false); - $ctype->shouldReceive('setFieldBodyModel') - ->once() - ->with('text/html'); - $ctype->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $headers = $this->createHeaderSet([ - 'Content-Disposition' => $disposition, - 'Content-Type' => $ctype, - ]); - - $attachment = $this->createAttachment($headers, $this->createEncoder(), - $this->createCache() - ); - $attachment->setFile($file, 'text/html'); - } - - public function XtestContentTypeCanBeLookedUpFromCommonListIfNotProvided() - { - $file = $this->createFileStream('/bar/file.zip', ''); - $disposition = $this->createHeader('Content-Disposition', 'attachment', - ['filename' => 'foo.zip'], false - ); - $disposition->shouldReceive('setParameter') - ->once() - ->with('filename', 'file.zip'); - - $ctype = $this->createHeader('Content-Type', 'text/plain', [], false); - $ctype->shouldReceive('setFieldBodyModel') - ->once() - ->with('application/zip'); - $ctype->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $headers = $this->createHeaderSet([ - 'Content-Disposition' => $disposition, - 'Content-Type' => $ctype, - ]); - - $attachment = $this->createAttachment($headers, $this->createEncoder(), - $this->createCache(), ['zip' => 'application/zip', 'txt' => 'text/plain'] - ); - $attachment->setFile($file); - } - - public function testDataCanBeReadFromFile() - { - $file = $this->createFileStream('/foo/file.ext', ''); - $attachment = $this->createAttachment($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $attachment->setFile($file); - $this->assertEquals('', $attachment->getBody()); - } - - public function testFluidInterface() - { - $attachment = $this->createAttachment($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $this->assertSame($attachment, - $attachment - ->setContentType('application/pdf') - ->setEncoder($this->createEncoder()) - ->setId('foo@bar') - ->setDescription('my pdf') - ->setMaxLineLength(998) - ->setBody('xx') - ->setBoundary('xyz') - ->setChildren([]) - ->setDisposition('inline') - ->setFilename('afile.txt') - ->setSize(123) - ->setFile($this->createFileStream('foo.txt', '')) - ); - } - - protected function createEntity($headers, $encoder, $cache) - { - return $this->createAttachment($headers, $encoder, $cache); - } - - protected function createAttachment($headers, $encoder, $cache, $mimeTypes = []) - { - $idGenerator = new Swift_Mime_IdGenerator('example.com'); - - return new Swift_Mime_Attachment($headers, $encoder, $cache, $idGenerator, $mimeTypes); - } - - protected function createFileStream($path, $data, $stub = true) - { - $file = $this->getMockery('Swift_FileStream'); - $file->shouldReceive('getPath') - ->zeroOrMoreTimes() - ->andReturn($path); - $file->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use ($data) { - static $first = true; - if (!$first) { - return false; - } - - $first = false; - - return $data; - }); - $file->shouldReceive('setReadPointer') - ->zeroOrMoreTimes(); - - return $file; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/Base64ContentEncoderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/Base64ContentEncoderTest.php deleted file mode 100644 index a05c68a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/Base64ContentEncoderTest.php +++ /dev/null @@ -1,323 +0,0 @@ -encoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); - } - - public function testNameIsBase64() - { - $this->assertEquals('base64', $this->encoder->getName()); - } - - /* - There's really no point in testing the entire base64 encoding to the - level QP encoding has been tested. base64_encode() has been in PHP for - years. - */ - - public function testInputOutputRatioIs3to4Bytes() - { - /* - RFC 2045, 6.8 - - The encoding process represents 24-bit groups of input bits as output - strings of 4 encoded characters. Proceeding from left to right, a - 24-bit input group is formed by concatenating 3 8bit input groups. - These 24 bits are then treated as 4 concatenated 6-bit groups, each - of which is translated into a single digit in the base64 alphabet. - */ - - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $os->shouldReceive('read') - ->once() - ->andReturn('123'); - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $this->encoder->encodeByteStream($os, $is); - $this->assertEquals('MTIz', $collection->content); - } - - public function testPadLength() - { - /* - RFC 2045, 6.8 - - Special processing is performed if fewer than 24 bits are available - at the end of the data being encoded. A full encoding quantum is - always completed at the end of a body. When fewer than 24 input bits - are available in an input group, zero bits are added (on the right) - to form an integral number of 6-bit groups. Padding at the end of - the data is performed using the "=" character. Since all base64 - input is an integral number of octets, only the following cases can - arise: (1) the final quantum of encoding input is an integral - multiple of 24 bits; here, the final unit of encoded output will be - an integral multiple of 4 characters with no "=" padding, (2) the - final quantum of encoding input is exactly 8 bits; here, the final - unit of encoded output will be two characters followed by two "=" - padding characters, or (3) the final quantum of encoding input is - exactly 16 bits; here, the final unit of encoded output will be three - characters followed by one "=" padding character. - */ - - for ($i = 0; $i < 30; ++$i) { - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $os->shouldReceive('read') - ->once() - ->andReturn(pack('C', random_int(0, 255))); - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $this->encoder->encodeByteStream($os, $is); - $this->assertRegExp('~^[a-zA-Z0-9/\+]{2}==$~', $collection->content, - '%s: A single byte should have 2 bytes of padding' - ); - } - - for ($i = 0; $i < 30; ++$i) { - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $os->shouldReceive('read') - ->once() - ->andReturn(pack('C*', random_int(0, 255), random_int(0, 255))); - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $this->encoder->encodeByteStream($os, $is); - $this->assertRegExp('~^[a-zA-Z0-9/\+]{3}=$~', $collection->content, - '%s: Two bytes should have 1 byte of padding' - ); - } - - for ($i = 0; $i < 30; ++$i) { - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $os->shouldReceive('read') - ->once() - ->andReturn(pack('C*', random_int(0, 255), random_int(0, 255), random_int(0, 255))); - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $this->encoder->encodeByteStream($os, $is); - $this->assertRegExp('~^[a-zA-Z0-9/\+]{4}$~', $collection->content, - '%s: Three bytes should have no padding' - ); - } - } - - public function testMaximumLineLengthIs76Characters() - { - /* - The encoded output stream must be represented in lines of no more - than 76 characters each. All line breaks or other characters not - found in Table 1 must be ignored by decoding software. - */ - - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $os->shouldReceive('read') - ->once() - ->andReturn('abcdefghijkl'); //12 - $os->shouldReceive('read') - ->once() - ->andReturn('mnopqrstuvwx'); //24 - $os->shouldReceive('read') - ->once() - ->andReturn('yzabc1234567'); //36 - $os->shouldReceive('read') - ->once() - ->andReturn('890ABCDEFGHI'); //48 - $os->shouldReceive('read') - ->once() - ->andReturn('JKLMNOPQRSTU'); //60 - $os->shouldReceive('read') - ->once() - ->andReturn('VWXYZ1234567'); //72 - $os->shouldReceive('read') - ->once() - ->andReturn('abcdefghijkl'); //84 - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $this->encoder->encodeByteStream($os, $is); - $this->assertEquals( - "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmMxMjM0NTY3ODkwQUJDREVGR0hJSktMTU5PUFFS\r\n". - 'U1RVVldYWVoxMjM0NTY3YWJjZGVmZ2hpamts', - $collection->content - ); - } - - public function testMaximumLineLengthCanBeDifferent() - { - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $os->shouldReceive('read') - ->once() - ->andReturn('abcdefghijkl'); //12 - $os->shouldReceive('read') - ->once() - ->andReturn('mnopqrstuvwx'); //24 - $os->shouldReceive('read') - ->once() - ->andReturn('yzabc1234567'); //36 - $os->shouldReceive('read') - ->once() - ->andReturn('890ABCDEFGHI'); //48 - $os->shouldReceive('read') - ->once() - ->andReturn('JKLMNOPQRSTU'); //60 - $os->shouldReceive('read') - ->once() - ->andReturn('VWXYZ1234567'); //72 - $os->shouldReceive('read') - ->once() - ->andReturn('abcdefghijkl'); //84 - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $this->encoder->encodeByteStream($os, $is, 0, 50); - $this->assertEquals( - "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmMxMjM0NTY3OD\r\n". - "kwQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoxMjM0NTY3YWJj\r\n". - 'ZGVmZ2hpamts', - $collection->content - ); - } - - public function testMaximumLineLengthIsNeverMoreThan76Chars() - { - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $os->shouldReceive('read') - ->once() - ->andReturn('abcdefghijkl'); //12 - $os->shouldReceive('read') - ->once() - ->andReturn('mnopqrstuvwx'); //24 - $os->shouldReceive('read') - ->once() - ->andReturn('yzabc1234567'); //36 - $os->shouldReceive('read') - ->once() - ->andReturn('890ABCDEFGHI'); //48 - $os->shouldReceive('read') - ->once() - ->andReturn('JKLMNOPQRSTU'); //60 - $os->shouldReceive('read') - ->once() - ->andReturn('VWXYZ1234567'); //72 - $os->shouldReceive('read') - ->once() - ->andReturn('abcdefghijkl'); //84 - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $this->encoder->encodeByteStream($os, $is, 0, 100); - $this->assertEquals( - "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmMxMjM0NTY3ODkwQUJDREVGR0hJSktMTU5PUFFS\r\n". - 'U1RVVldYWVoxMjM0NTY3YWJjZGVmZ2hpamts', - $collection->content - ); - } - - public function testFirstLineLengthCanBeDifferent() - { - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $os->shouldReceive('read') - ->once() - ->andReturn('abcdefghijkl'); //12 - $os->shouldReceive('read') - ->once() - ->andReturn('mnopqrstuvwx'); //24 - $os->shouldReceive('read') - ->once() - ->andReturn('yzabc1234567'); //36 - $os->shouldReceive('read') - ->once() - ->andReturn('890ABCDEFGHI'); //48 - $os->shouldReceive('read') - ->once() - ->andReturn('JKLMNOPQRSTU'); //60 - $os->shouldReceive('read') - ->once() - ->andReturn('VWXYZ1234567'); //72 - $os->shouldReceive('read') - ->once() - ->andReturn('abcdefghijkl'); //84 - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $this->encoder->encodeByteStream($os, $is, 19); - $this->assertEquals( - "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmMxMjM0NTY3ODkwQUJDR\r\n". - 'EVGR0hJSktMTU5PUFFSU1RVVldYWVoxMjM0NTY3YWJjZGVmZ2hpamts', - $collection->content - ); - } - - private function createOutputByteStream($stub = false) - { - return $this->getMockery('Swift_OutputByteStream')->shouldIgnoreMissing(); - } - - private function createInputByteStream($stub = false) - { - return $this->getMockery('Swift_InputByteStream')->shouldIgnoreMissing(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/PlainContentEncoderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/PlainContentEncoderTest.php deleted file mode 100644 index 270d02c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/PlainContentEncoderTest.php +++ /dev/null @@ -1,171 +0,0 @@ -getEncoder('7bit'); - $this->assertEquals('7bit', $encoder->getName()); - - $encoder = $this->getEncoder('8bit'); - $this->assertEquals('8bit', $encoder->getName()); - } - - public function testNoOctetsAreModifiedInString() - { - $encoder = $this->getEncoder('7bit'); - foreach (range(0x00, 0xFF) as $octet) { - $byte = pack('C', $octet); - $this->assertIdenticalBinary($byte, $encoder->encodeString($byte)); - } - } - - public function testNoOctetsAreModifiedInByteStream() - { - $encoder = $this->getEncoder('7bit'); - foreach (range(0x00, 0xFF) as $octet) { - $byte = pack('C', $octet); - - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $os->shouldReceive('read') - ->once() - ->andReturn($byte); - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder->encodeByteStream($os, $is); - $this->assertIdenticalBinary($byte, $collection->content); - } - } - - public function testLineLengthCanBeSpecified() - { - $encoder = $this->getEncoder('7bit'); - - $chars = []; - for ($i = 0; $i < 50; ++$i) { - $chars[] = 'a'; - } - $input = implode(' ', $chars); //99 chars long - - $this->assertEquals( - 'a a a a a a a a a a a a a a a a a a a a a a a a a '."\r\n".//50 * - 'a a a a a a a a a a a a a a a a a a a a a a a a a', //99 - $encoder->encodeString($input, 0, 50), - '%s: Lines should be wrapped at 50 chars' - ); - } - - public function testLineLengthCanBeSpecifiedInByteStream() - { - $encoder = $this->getEncoder('7bit'); - - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - - for ($i = 0; $i < 50; ++$i) { - $os->shouldReceive('read') - ->once() - ->andReturn('a '); - } - - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder->encodeByteStream($os, $is, 0, 50); - $this->assertEquals( - str_repeat('a ', 25)."\r\n".str_repeat('a ', 25), - $collection->content - ); - } - - public function testencodeStringGeneratesCorrectCrlf() - { - $encoder = $this->getEncoder('7bit', true); - $this->assertEquals("a\r\nb", $encoder->encodeString("a\rb"), - '%s: Line endings should be standardized' - ); - $this->assertEquals("a\r\nb", $encoder->encodeString("a\nb"), - '%s: Line endings should be standardized' - ); - $this->assertEquals("a\r\n\r\nb", $encoder->encodeString("a\n\rb"), - '%s: Line endings should be standardized' - ); - $this->assertEquals("a\r\n\r\nb", $encoder->encodeString("a\r\rb"), - '%s: Line endings should be standardized' - ); - $this->assertEquals("a\r\n\r\nb", $encoder->encodeString("a\n\nb"), - '%s: Line endings should be standardized' - ); - } - - public function crlfProvider() - { - return [ - ["\r", "a\r\nb"], - ["\n", "a\r\nb"], - ["\n\r", "a\r\n\r\nb"], - ["\n\n", "a\r\n\r\nb"], - ["\r\r", "a\r\n\r\nb"], - ]; - } - - /** - * @dataProvider crlfProvider - */ - public function testCanonicEncodeByteStreamGeneratesCorrectCrlf($test, $expected) - { - $encoder = $this->getEncoder('7bit', true); - - $os = $this->createOutputByteStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $os->shouldReceive('read') - ->once() - ->andReturn('a'); - $os->shouldReceive('read') - ->once() - ->andReturn($test); - $os->shouldReceive('read') - ->once() - ->andReturn('b'); - $os->shouldReceive('read') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder->encodeByteStream($os, $is); - $this->assertEquals($expected, $collection->content); - } - - private function getEncoder($name, $canonical = false) - { - return new Swift_Mime_ContentEncoder_PlainContentEncoder($name, $canonical); - } - - private function createOutputByteStream($stub = false) - { - return $this->getMockery('Swift_OutputByteStream')->shouldIgnoreMissing(); - } - - private function createInputByteStream($stub = false) - { - return $this->getMockery('Swift_InputByteStream')->shouldIgnoreMissing(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/QpContentEncoderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/QpContentEncoderTest.php deleted file mode 100644 index 4e050a1..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/QpContentEncoderTest.php +++ /dev/null @@ -1,516 +0,0 @@ -createCharacterStream(true) - ); - $this->assertEquals('quoted-printable', $encoder->getName()); - } - - /* -- RFC 2045, 6.7 -- - (1) (General 8bit representation) Any octet, except a CR or - LF that is part of a CRLF line break of the canonical - (standard) form of the data being encoded, may be - represented by an "=" followed by a two digit - hexadecimal representation of the octet's value. The - digits of the hexadecimal alphabet, for this purpose, - are "0123456789ABCDEF". Uppercase letters must be - used; lowercase letters are not allowed. Thus, for - example, the decimal value 12 (US-ASCII form feed) can - be represented by "=0C", and the decimal value 61 (US- - ASCII EQUAL SIGN) can be represented by "=3D". This - rule must be followed except when the following rules - allow an alternative encoding. - */ - - public function testPermittedCharactersAreNotEncoded() - { - /* -- RFC 2045, 6.7 -- - (2) (Literal representation) Octets with decimal values of - 33 through 60 inclusive, and 62 through 126, inclusive, - MAY be represented as the US-ASCII characters which - correspond to those octets (EXCLAMATION POINT through - LESS THAN, and GREATER THAN through TILDE, - respectively). - */ - - foreach (array_merge(range(33, 60), range(62, 126)) as $ordinal) { - $char = chr($ordinal); - - $os = $this->createOutputByteStream(true); - $charStream = $this->createCharacterStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importByteStream') - ->once() - ->with($os); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([$ordinal]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $encoder->encodeByteStream($os, $is); - $this->assertIdenticalBinary($char, $collection->content); - } - } - - public function testLinearWhiteSpaceAtLineEndingIsEncoded() - { - /* -- RFC 2045, 6.7 -- - (3) (White Space) Octets with values of 9 and 32 MAY be - represented as US-ASCII TAB (HT) and SPACE characters, - respectively, but MUST NOT be so represented at the end - of an encoded line. Any TAB (HT) or SPACE characters - on an encoded line MUST thus be followed on that line - by a printable character. In particular, an "=" at the - end of an encoded line, indicating a soft line break - (see rule #5) may follow one or more TAB (HT) or SPACE - characters. It follows that an octet with decimal - value 9 or 32 appearing at the end of an encoded line - must be represented according to Rule #1. This rule is - necessary because some MTAs (Message Transport Agents, - programs which transport messages from one user to - another, or perform a portion of such transfers) are - known to pad lines of text with SPACEs, and others are - known to remove "white space" characters from the end - of a line. Therefore, when decoding a Quoted-Printable - body, any trailing white space on a line must be - deleted, as it will necessarily have been added by - intermediate transport agents. - */ - - $HT = chr(0x09); //9 - $SPACE = chr(0x20); //32 - - //HT - $os = $this->createOutputByteStream(true); - $charStream = $this->createCharacterStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importByteStream') - ->once() - ->with($os); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x09]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x09]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x0D]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x0A]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('b')]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $encoder->encodeByteStream($os, $is); - - $this->assertEquals("a\t=09\r\nb", $collection->content); - - //SPACE - $os = $this->createOutputByteStream(true); - $charStream = $this->createCharacterStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importByteStream') - ->once() - ->with($os); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x20]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x20]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x0D]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x0A]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('b')]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $encoder->encodeByteStream($os, $is); - - $this->assertEquals("a =20\r\nb", $collection->content); - } - - public function testCRLFIsLeftAlone() - { - /* - (4) (Line Breaks) A line break in a text body, represented - as a CRLF sequence in the text canonical form, must be - represented by a (RFC 822) line break, which is also a - CRLF sequence, in the Quoted-Printable encoding. Since - the canonical representation of media types other than - text do not generally include the representation of - line breaks as CRLF sequences, no hard line breaks - (i.e. line breaks that are intended to be meaningful - and to be displayed to the user) can occur in the - quoted-printable encoding of such types. Sequences - like "=0D", "=0A", "=0A=0D" and "=0D=0A" will routinely - appear in non-text data represented in quoted- - printable, of course. - - Note that many implementations may elect to encode the - local representation of various content types directly - rather than converting to canonical form first, - encoding, and then converting back to local - representation. In particular, this may apply to plain - text material on systems that use newline conventions - other than a CRLF terminator sequence. Such an - implementation optimization is permissible, but only - when the combined canonicalization-encoding step is - equivalent to performing the three steps separately. - */ - - $os = $this->createOutputByteStream(true); - $charStream = $this->createCharacterStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importByteStream') - ->once() - ->with($os); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x0D]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x0A]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('b')]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x0D]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x0A]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('c')]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x0D]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x0A]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $encoder->encodeByteStream($os, $is); - $this->assertEquals("a\r\nb\r\nc\r\n", $collection->content); - } - - public function testLinesLongerThan76CharactersAreSoftBroken() - { - /* - (5) (Soft Line Breaks) The Quoted-Printable encoding - REQUIRES that encoded lines be no more than 76 - characters long. If longer lines are to be encoded - with the Quoted-Printable encoding, "soft" line breaks - must be used. An equal sign as the last character on a - encoded line indicates such a non-significant ("soft") - line break in the encoded text. - */ - - $os = $this->createOutputByteStream(true); - $charStream = $this->createCharacterStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importByteStream') - ->once() - ->with($os); - - for ($seq = 0; $seq <= 140; ++$seq) { - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - } - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $encoder->encodeByteStream($os, $is); - $this->assertEquals(str_repeat('a', 75)."=\r\n".str_repeat('a', 66), $collection->content); - } - - public function testMaxLineLengthCanBeSpecified() - { - $os = $this->createOutputByteStream(true); - $charStream = $this->createCharacterStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importByteStream') - ->once() - ->with($os); - - for ($seq = 0; $seq <= 100; ++$seq) { - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - } - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $encoder->encodeByteStream($os, $is, 0, 54); - $this->assertEquals(str_repeat('a', 53)."=\r\n".str_repeat('a', 48), $collection->content); - } - - public function testBytesBelowPermittedRangeAreEncoded() - { - /* - According to Rule (1 & 2) - */ - - foreach (range(0, 32) as $ordinal) { - $char = chr($ordinal); - - $os = $this->createOutputByteStream(true); - $charStream = $this->createCharacterStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importByteStream') - ->once() - ->with($os); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([$ordinal]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $encoder->encodeByteStream($os, $is); - $this->assertEquals(sprintf('=%02X', $ordinal), $collection->content); - } - } - - public function testDecimalByte61IsEncoded() - { - /* - According to Rule (1 & 2) - */ - - $char = chr(61); - - $os = $this->createOutputByteStream(true); - $charStream = $this->createCharacterStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importByteStream') - ->once() - ->with($os); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([61]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $encoder->encodeByteStream($os, $is); - $this->assertEquals(sprintf('=%02X', 61), $collection->content); - } - - public function testBytesAbovePermittedRangeAreEncoded() - { - /* - According to Rule (1 & 2) - */ - - foreach (range(127, 255) as $ordinal) { - $char = chr($ordinal); - - $os = $this->createOutputByteStream(true); - $charStream = $this->createCharacterStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importByteStream') - ->once() - ->with($os); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([$ordinal]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $encoder->encodeByteStream($os, $is); - $this->assertEquals(sprintf('=%02X', $ordinal), $collection->content); - } - } - - public function testFirstLineLengthCanBeDifferent() - { - $os = $this->createOutputByteStream(true); - $charStream = $this->createCharacterStream(); - $is = $this->createInputByteStream(); - $collection = new Swift_StreamCollector(); - - $is->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturnUsing($collection); - $charStream->shouldReceive('flushContents') - ->once(); - $charStream->shouldReceive('importByteStream') - ->once() - ->with($os); - - for ($seq = 0; $seq <= 140; ++$seq) { - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - } - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $encoder->encodeByteStream($os, $is, 22); - $this->assertEquals( - str_repeat('a', 53)."=\r\n".str_repeat('a', 75)."=\r\n".str_repeat('a', 13), - $collection->content - ); - } - - public function testObserverInterfaceCanChangeCharset() - { - $stream = $this->createCharacterStream(); - $stream->shouldReceive('setCharacterSet') - ->once() - ->with('windows-1252'); - - $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($stream); - $encoder->charsetChanged('windows-1252'); - } - - public function testTextIsPreWrapped() - { - $encoder = $this->createEncoder(); - - $input = str_repeat('a', 70)."\r\n". - str_repeat('a', 70)."\r\n". - str_repeat('a', 70); - - $os = new Swift_ByteStream_ArrayByteStream(); - $is = new Swift_ByteStream_ArrayByteStream(); - $is->write($input); - - $encoder->encodeByteStream($is, $os); - - $this->assertEquals( - $input, $os->read(PHP_INT_MAX) - ); - } - - private function createCharacterStream($stub = false) - { - return $this->getMockery('Swift_CharacterStream')->shouldIgnoreMissing(); - } - - private function createEncoder() - { - $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $charStream = new Swift_CharacterStream_NgCharacterStream($factory, 'utf-8'); - - return new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - } - - private function createOutputByteStream($stub = false) - { - return $this->getMockery('Swift_OutputByteStream')->shouldIgnoreMissing(); - } - - private function createInputByteStream($stub = false) - { - return $this->getMockery('Swift_InputByteStream')->shouldIgnoreMissing(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/EmbeddedFileTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/EmbeddedFileTest.php deleted file mode 100644 index 74f2acc..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/EmbeddedFileTest.php +++ /dev/null @@ -1,59 +0,0 @@ -addToAssertionCount(1); - } - - public function testNestingLevelIsEmbedded() - { - $file = $this->createEmbeddedFile($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals( - Swift_Mime_SimpleMimeEntity::LEVEL_RELATED, $file->getNestingLevel() - ); - } - - public function testIdIsAutoGenerated() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addIdHeader') - ->once() - ->with('Content-ID', '/^.*?@.*?$/D'); - - $file = $this->createEmbeddedFile($headers, $this->createEncoder(), - $this->createCache() - ); - } - - public function testDefaultDispositionIsInline() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addParameterizedHeader') - ->once() - ->with('Content-Disposition', 'inline'); - $headers->shouldReceive('addParameterizedHeader') - ->zeroOrMoreTimes(); - - $file = $this->createEmbeddedFile($headers, $this->createEncoder(), - $this->createCache() - ); - } - - protected function createAttachment($headers, $encoder, $cache, $mimeTypes = []) - { - return $this->createEmbeddedFile($headers, $encoder, $cache, $mimeTypes); - } - - private function createEmbeddedFile($headers, $encoder, $cache) - { - $idGenerator = new Swift_Mime_IdGenerator('example.com'); - - return new Swift_Mime_EmbeddedFile($headers, $encoder, $cache, $idGenerator); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/Base64HeaderEncoderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/Base64HeaderEncoderTest.php deleted file mode 100644 index 0db5407..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/Base64HeaderEncoderTest.php +++ /dev/null @@ -1,13 +0,0 @@ -assertEquals('B', $encoder->getName()); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/QpHeaderEncoderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/QpHeaderEncoderTest.php deleted file mode 100644 index 1b42300..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/QpHeaderEncoderTest.php +++ /dev/null @@ -1,221 +0,0 @@ -createEncoder( - $this->createCharacterStream(true) - ); - $this->assertEquals('Q', $encoder->getName()); - } - - public function testSpaceAndTabNeverAppear() - { - /* -- RFC 2047, 4. - Only a subset of the printable ASCII characters may be used in - 'encoded-text'. Space and tab characters are not allowed, so that - the beginning and end of an 'encoded-word' are obvious. - */ - - $charStream = $this->createCharacterStream(); - $charStream->shouldReceive('readBytes') - ->atLeast()->times(6) - ->andReturn([ord('a')], [0x20], [0x09], [0x20], [ord('b')], false); - - $encoder = $this->createEncoder($charStream); - $this->assertNotRegExp('~[ \t]~', $encoder->encodeString("a \t b"), - '%s: encoded-words in headers cannot contain LWSP as per RFC 2047.' - ); - } - - public function testSpaceIsRepresentedByUnderscore() - { - /* -- RFC 2047, 4.2. - (2) The 8-bit hexadecimal value 20 (e.g., ISO-8859-1 SPACE) may be - represented as "_" (underscore, ASCII 95.). (This character may - not pass through some internetwork mail gateways, but its use - will greatly enhance readability of "Q" encoded data with mail - readers that do not support this encoding.) Note that the "_" - always represents hexadecimal 20, even if the SPACE character - occupies a different code position in the character set in use. - */ - $charStream = $this->createCharacterStream(); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([0x20]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('b')]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = $this->createEncoder($charStream); - $this->assertEquals('a_b', $encoder->encodeString('a b'), - '%s: Spaces can be represented by more readable underscores as per RFC 2047.' - ); - } - - public function testEqualsAndQuestionAndUnderscoreAreEncoded() - { - /* -- RFC 2047, 4.2. - (3) 8-bit values which correspond to printable ASCII characters other - than "=", "?", and "_" (underscore), MAY be represented as those - characters. (But see section 5 for restrictions.) In - particular, SPACE and TAB MUST NOT be represented as themselves - within encoded words. - */ - $charStream = $this->createCharacterStream(); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('=')]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('?')]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('_')]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = $this->createEncoder($charStream); - $this->assertEquals('=3D=3F=5F', $encoder->encodeString('=?_'), - '%s: Chars =, ? and _ (underscore) may not appear as per RFC 2047.' - ); - } - - public function testParensAndQuotesAreEncoded() - { - /* -- RFC 2047, 5 (2). - A "Q"-encoded 'encoded-word' which appears in a 'comment' MUST NOT - contain the characters "(", ")" or " - */ - - $charStream = $this->createCharacterStream(); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('(')]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('"')]); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord(')')]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = $this->createEncoder($charStream); - $this->assertEquals('=28=22=29', $encoder->encodeString('(")'), - '%s: Chars (, " (DQUOTE) and ) may not appear as per RFC 2047.' - ); - } - - public function testOnlyCharactersAllowedInPhrasesAreUsed() - { - /* -- RFC 2047, 5. - (3) As a replacement for a 'word' entity within a 'phrase', for example, - one that precedes an address in a From, To, or Cc header. The ABNF - definition for 'phrase' from RFC 822 thus becomes: - - phrase = 1*( encoded-word / word ) - - In this case the set of characters that may be used in a "Q"-encoded - 'encoded-word' is restricted to: . An 'encoded-word' that appears within a - 'phrase' MUST be separated from any adjacent 'word', 'text' or - 'special' by 'linear-white-space'. - */ - - $allowedBytes = array_merge( - range(ord('a'), ord('z')), range(ord('A'), ord('Z')), - range(ord('0'), ord('9')), - [ord('!'), ord('*'), ord('+'), ord('-'), ord('/')] - ); - - foreach (range(0x00, 0xFF) as $byte) { - $char = pack('C', $byte); - - $charStream = $this->createCharacterStream(); - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([$byte]); - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = $this->createEncoder($charStream); - $encodedChar = $encoder->encodeString($char); - - if (in_array($byte, $allowedBytes)) { - $this->assertEquals($char, $encodedChar, - '%s: Character '.$char.' should not be encoded.' - ); - } elseif (0x20 == $byte) { - //Special case - $this->assertEquals('_', $encodedChar, - '%s: Space character should be replaced.' - ); - } else { - $this->assertEquals(sprintf('=%02X', $byte), $encodedChar, - '%s: Byte '.$byte.' should be encoded.' - ); - } - } - } - - public function testEqualsNeverAppearsAtEndOfLine() - { - /* -- RFC 2047, 5 (3). - The 'encoded-text' in an 'encoded-word' must be self-contained; - 'encoded-text' MUST NOT be continued from one 'encoded-word' to - another. This implies that the 'encoded-text' portion of a "B" - 'encoded-word' will be a multiple of 4 characters long; for a "Q" - 'encoded-word', any "=" character that appears in the 'encoded-text' - portion will be followed by two hexadecimal characters. - */ - - $input = str_repeat('a', 140); - - $charStream = $this->createCharacterStream(); - - $output = ''; - $seq = 0; - for (; $seq < 140; ++$seq) { - $charStream->shouldReceive('readBytes') - ->once() - ->andReturn([ord('a')]); - - if (75 == $seq) { - $output .= "\r\n"; // =\r\n - } - $output .= 'a'; - } - - $charStream->shouldReceive('readBytes') - ->zeroOrMoreTimes() - ->andReturn(false); - - $encoder = $this->createEncoder($charStream); - $this->assertEquals($output, $encoder->encodeString($input)); - } - - private function createEncoder($charStream) - { - return new Swift_Mime_HeaderEncoder_QpHeaderEncoder($charStream); - } - - private function createCharacterStream($stub = false) - { - return $this->getMockery('Swift_CharacterStream')->shouldIgnoreMissing(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/DateHeaderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/DateHeaderTest.php deleted file mode 100644 index e419306..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/DateHeaderTest.php +++ /dev/null @@ -1,90 +0,0 @@ -getHeader('Date'); - $this->assertEquals(Swift_Mime_Header::TYPE_DATE, $header->getFieldType()); - } - - public function testGetDateTime() - { - $dateTime = new DateTimeImmutable(); - $header = $this->getHeader('Date'); - $header->setDateTime($dateTime); - $this->assertSame($dateTime, $header->getDateTime()); - } - - public function testDateTimeCanBeSetBySetter() - { - $dateTime = new DateTimeImmutable(); - $header = $this->getHeader('Date'); - $header->setDateTime($dateTime); - $this->assertSame($dateTime, $header->getDateTime()); - } - - public function testDateTimeIsConvertedToImmutable() - { - $dateTime = new DateTime(); - $header = $this->getHeader('Date'); - $header->setDateTime($dateTime); - $this->assertInstanceOf('DateTimeImmutable', $header->getDateTime()); - $this->assertEquals($dateTime->getTimestamp(), $header->getDateTime()->getTimestamp()); - $this->assertEquals($dateTime->getTimezone(), $header->getDateTime()->getTimezone()); - } - - public function testDateTimeIsImmutable() - { - $dateTime = new DateTime('2000-01-01 12:00:00 Europe/Berlin'); - $header = $this->getHeader('Date'); - $header->setDateTime($dateTime); - - $dateTime->setDate(2002, 2, 2); - $this->assertEquals('Sat, 01 Jan 2000 12:00:00 +0100', $header->getDateTime()->format('r')); - $this->assertEquals('Sat, 01 Jan 2000 12:00:00 +0100', $header->getFieldBody()); - } - - public function testDateTimeIsConvertedToRfc2822Date() - { - $dateTime = new DateTimeImmutable('2000-01-01 12:00:00 Europe/Berlin'); - $header = $this->getHeader('Date'); - $header->setDateTime($dateTime); - $this->assertEquals('Sat, 01 Jan 2000 12:00:00 +0100', $header->getFieldBody()); - } - - public function testSetBodyModel() - { - $dateTime = new DateTimeImmutable(); - $header = $this->getHeader('Date'); - $header->setFieldBodyModel($dateTime); - $this->assertEquals($dateTime->format('r'), $header->getFieldBody()); - } - - public function testGetBodyModel() - { - $dateTime = new DateTimeImmutable(); - $header = $this->getHeader('Date'); - $header->setDateTime($dateTime); - $this->assertEquals($dateTime, $header->getFieldBodyModel()); - } - - public function testToString() - { - $dateTime = new DateTimeImmutable('2000-01-01 12:00:00 Europe/Berlin'); - $header = $this->getHeader('Date'); - $header->setDateTime($dateTime); - $this->assertEquals("Date: Sat, 01 Jan 2000 12:00:00 +0100\r\n", - $header->toString() - ); - } - - private function getHeader($name) - { - return new Swift_Mime_Headers_DateHeader($name); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/IdentificationHeaderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/IdentificationHeaderTest.php deleted file mode 100644 index 0d2edb7..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/IdentificationHeaderTest.php +++ /dev/null @@ -1,192 +0,0 @@ -getHeader('Message-ID'); - $this->assertEquals(Swift_Mime_Header::TYPE_ID, $header->getFieldType()); - } - - public function testValueMatchesMsgIdSpec() - { - /* -- RFC 2822, 3.6.4. - message-id = "Message-ID:" msg-id CRLF - - in-reply-to = "In-Reply-To:" 1*msg-id CRLF - - references = "References:" 1*msg-id CRLF - - msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS] - - id-left = dot-atom-text / no-fold-quote / obs-id-left - - id-right = dot-atom-text / no-fold-literal / obs-id-right - - no-fold-quote = DQUOTE *(qtext / quoted-pair) DQUOTE - - no-fold-literal = "[" *(dtext / quoted-pair) "]" - */ - - $header = $this->getHeader('Message-ID'); - $header->setId('id-left@id-right'); - $this->assertEquals('', $header->getFieldBody()); - } - - public function testIdCanBeRetrievedVerbatim() - { - $header = $this->getHeader('Message-ID'); - $header->setId('id-left@id-right'); - $this->assertEquals('id-left@id-right', $header->getId()); - } - - public function testMultipleIdsCanBeSet() - { - $header = $this->getHeader('References'); - $header->setIds(['a@b', 'x@y']); - $this->assertEquals(['a@b', 'x@y'], $header->getIds()); - } - - public function testSettingMultipleIdsProducesAListValue() - { - /* -- RFC 2822, 3.6.4. - The "References:" and "In-Reply-To:" field each contain one or more - unique message identifiers, optionally separated by CFWS. - - .. SNIP .. - - in-reply-to = "In-Reply-To:" 1*msg-id CRLF - - references = "References:" 1*msg-id CRLF - */ - - $header = $this->getHeader('References'); - $header->setIds(['a@b', 'x@y']); - $this->assertEquals(' ', $header->getFieldBody()); - } - - public function testIdLeftCanBeQuoted() - { - /* -- RFC 2822, 3.6.4. - id-left = dot-atom-text / no-fold-quote / obs-id-left - */ - - $header = $this->getHeader('References'); - $header->setId('"ab"@c'); - $this->assertEquals('"ab"@c', $header->getId()); - $this->assertEquals('<"ab"@c>', $header->getFieldBody()); - } - - public function testIdLeftCanContainAnglesAsQuotedPairs() - { - /* -- RFC 2822, 3.6.4. - no-fold-quote = DQUOTE *(qtext / quoted-pair) DQUOTE - */ - - $header = $this->getHeader('References'); - $header->setId('"a\\<\\>b"@c'); - $this->assertEquals('"a\\<\\>b"@c', $header->getId()); - $this->assertEquals('<"a\\<\\>b"@c>', $header->getFieldBody()); - } - - public function testIdLeftCanBeDotAtom() - { - $header = $this->getHeader('References'); - $header->setId('a.b+&%$.c@d'); - $this->assertEquals('a.b+&%$.c@d', $header->getId()); - $this->assertEquals('', $header->getFieldBody()); - } - - /** - * @expectedException \Exception - * @expectedMessageException "a b c" is not valid id-left - */ - public function testInvalidIdLeftThrowsException() - { - $header = $this->getHeader('References'); - $header->setId('a b c@d'); - } - - public function testIdRightCanBeDotAtom() - { - /* -- RFC 2822, 3.6.4. - id-right = dot-atom-text / no-fold-literal / obs-id-right - */ - - $header = $this->getHeader('References'); - $header->setId('a@b.c+&%$.d'); - $this->assertEquals('a@b.c+&%$.d', $header->getId()); - $this->assertEquals('', $header->getFieldBody()); - } - - public function testIdRightCanBeLiteral() - { - /* -- RFC 2822, 3.6.4. - no-fold-literal = "[" *(dtext / quoted-pair) "]" - */ - - $header = $this->getHeader('References'); - $header->setId('a@[1.2.3.4]'); - $this->assertEquals('a@[1.2.3.4]', $header->getId()); - $this->assertEquals('', $header->getFieldBody()); - } - - public function testIdRigthIsIdnEncoded() - { - $header = $this->getHeader('References'); - $header->setId('a@ä'); - $this->assertEquals('a@ä', $header->getId()); - $this->assertEquals('', $header->getFieldBody()); - } - - /** - * @expectedException \Exception - * @expectedMessageException "b c d" is not valid id-right - */ - public function testInvalidIdRightThrowsException() - { - $header = $this->getHeader('References'); - $header->setId('a@b c d'); - } - - /** - * @expectedException \Exception - * @expectedMessageException "abc" is does not contain @ - */ - public function testMissingAtSignThrowsException() - { - /* -- RFC 2822, 3.6.4. - msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS] - */ - $header = $this->getHeader('References'); - $header->setId('abc'); - } - - public function testSetBodyModel() - { - $header = $this->getHeader('Message-ID'); - $header->setFieldBodyModel('a@b'); - $this->assertEquals(['a@b'], $header->getIds()); - } - - public function testGetBodyModel() - { - $header = $this->getHeader('Message-ID'); - $header->setId('a@b'); - $this->assertEquals(['a@b'], $header->getFieldBodyModel()); - } - - public function testStringValue() - { - $header = $this->getHeader('References'); - $header->setIds(['a@b', 'x@y']); - $this->assertEquals('References: '."\r\n", $header->toString()); - } - - private function getHeader($name) - { - return new Swift_Mime_Headers_IdentificationHeader($name, new EmailValidator(), new Swift_AddressEncoder_IdnAddressEncoder()); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/MailboxHeaderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/MailboxHeaderTest.php deleted file mode 100644 index f64f5db..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/MailboxHeaderTest.php +++ /dev/null @@ -1,367 +0,0 @@ -getHeader('To'); - $this->assertEquals(Swift_Mime_Header::TYPE_MAILBOX, $header->getFieldType()); - } - - public function testMailboxIsSetForAddress() - { - $header = $this->getHeader('From'); - $header->setAddresses('chris@swiftmailer.org'); - $this->assertEquals(['chris@swiftmailer.org'], - $header->getNameAddressStrings() - ); - } - - public function testMailboxIsRenderedForNameAddress() - { - $header = $this->getHeader('From'); - $header->setNameAddresses(['chris@swiftmailer.org' => 'Chris Corbyn']); - $this->assertEquals( - ['Chris Corbyn '], $header->getNameAddressStrings() - ); - } - - public function testAddressCanBeReturnedForAddress() - { - $header = $this->getHeader('From'); - $header->setAddresses('chris@swiftmailer.org'); - $this->assertEquals(['chris@swiftmailer.org'], $header->getAddresses()); - } - - public function testAddressCanBeReturnedForNameAddress() - { - $header = $this->getHeader('From'); - $header->setNameAddresses(['chris@swiftmailer.org' => 'Chris Corbyn']); - $this->assertEquals(['chris@swiftmailer.org'], $header->getAddresses()); - } - - public function testQuotesInNameAreQuoted() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn, "DHE"', - ]); - $this->assertEquals( - ['"Chris Corbyn, \"DHE\"" '], - $header->getNameAddressStrings() - ); - } - - public function testEscapeCharsInNameAreQuoted() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn, \\escaped\\', - ]); - $this->assertEquals( - ['"Chris Corbyn, \\\\escaped\\\\" '], - $header->getNameAddressStrings() - ); - } - - public function testUtf8CharsInDomainAreIdnEncoded() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swïftmailer.org' => 'Chris Corbyn', - ]); - $this->assertEquals( - ['Chris Corbyn '], - $header->getNameAddressStrings() - ); - } - - /** - * @expectedException \Swift_AddressEncoderException - */ - public function testUtf8CharsInLocalPartThrows() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chrïs@swiftmailer.org' => 'Chris Corbyn', - ]); - $header->getNameAddressStrings(); - } - - public function testUtf8CharsInEmail() - { - $header = $this->getHeader('From', null, new Swift_AddressEncoder_Utf8AddressEncoder()); - $header->setNameAddresses([ - 'chrïs@swïftmailer.org' => 'Chris Corbyn', - ]); - $this->assertEquals( - ['Chris Corbyn '], - $header->getNameAddressStrings() - ); - } - - public function testGetMailboxesReturnsNameValuePairs() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn, DHE', - ]); - $this->assertEquals( - ['chris@swiftmailer.org' => 'Chris Corbyn, DHE'], $header->getNameAddresses() - ); - } - - public function testMultipleAddressesCanBeSetAndFetched() - { - $header = $this->getHeader('From'); - $header->setAddresses([ - 'chris@swiftmailer.org', 'mark@swiftmailer.org', - ]); - $this->assertEquals( - ['chris@swiftmailer.org', 'mark@swiftmailer.org'], - $header->getAddresses() - ); - } - - public function testMultipleAddressesAsMailboxes() - { - $header = $this->getHeader('From'); - $header->setAddresses([ - 'chris@swiftmailer.org', 'mark@swiftmailer.org', - ]); - $this->assertEquals( - ['chris@swiftmailer.org' => null, 'mark@swiftmailer.org' => null], - $header->getNameAddresses() - ); - } - - public function testMultipleAddressesAsMailboxStrings() - { - $header = $this->getHeader('From'); - $header->setAddresses([ - 'chris@swiftmailer.org', 'mark@swiftmailer.org', - ]); - $this->assertEquals( - ['chris@swiftmailer.org', 'mark@swiftmailer.org'], - $header->getNameAddressStrings() - ); - } - - public function testMultipleNamedMailboxesReturnsMultipleAddresses() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', - ]); - $this->assertEquals( - ['chris@swiftmailer.org', 'mark@swiftmailer.org'], - $header->getAddresses() - ); - } - - public function testMultipleNamedMailboxesReturnsMultipleMailboxes() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', - ]); - $this->assertEquals([ - 'chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', - ], - $header->getNameAddresses() - ); - } - - public function testMultipleMailboxesProducesMultipleMailboxStrings() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', - ]); - $this->assertEquals([ - 'Chris Corbyn ', - 'Mark Corbyn ', - ], - $header->getNameAddressStrings() - ); - } - - public function testSetAddressesOverwritesAnyMailboxes() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', - ]); - $this->assertEquals( - ['chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', ], - $header->getNameAddresses() - ); - $this->assertEquals( - ['chris@swiftmailer.org', 'mark@swiftmailer.org'], - $header->getAddresses() - ); - - $header->setAddresses(['chris@swiftmailer.org', 'mark@swiftmailer.org']); - - $this->assertEquals( - ['chris@swiftmailer.org' => null, 'mark@swiftmailer.org' => null], - $header->getNameAddresses() - ); - $this->assertEquals( - ['chris@swiftmailer.org', 'mark@swiftmailer.org'], - $header->getAddresses() - ); - } - - public function testNameIsEncodedIfNonAscii() - { - $name = 'C'.pack('C', 0x8F).'rbyn'; - - $encoder = $this->getEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($name, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('C=8Frbyn'); - - $header = $this->getHeader('From', $encoder); - $header->setNameAddresses(['chris@swiftmailer.org' => 'Chris '.$name]); - - $addresses = $header->getNameAddressStrings(); - $this->assertEquals( - 'Chris =?'.$this->charset.'?Q?C=8Frbyn?= ', - array_shift($addresses) - ); - } - - public function testEncodingLineLengthCalculations() - { - /* -- RFC 2047, 2. - An 'encoded-word' may not be more than 75 characters long, including - 'charset', 'encoding', 'encoded-text', and delimiters. - */ - - $name = 'C'.pack('C', 0x8F).'rbyn'; - - $encoder = $this->getEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($name, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('C=8Frbyn'); - - $header = $this->getHeader('From', $encoder); - $header->setNameAddresses(['chris@swiftmailer.org' => 'Chris '.$name]); - - $header->getNameAddressStrings(); - } - - public function testGetValueReturnsMailboxStringValue() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn', - ]); - $this->assertEquals( - 'Chris Corbyn ', $header->getFieldBody() - ); - } - - public function testGetValueReturnsMailboxStringValueForMultipleMailboxes() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', - ]); - $this->assertEquals( - 'Chris Corbyn , Mark Corbyn ', - $header->getFieldBody() - ); - } - - public function testRemoveAddressesWithSingleValue() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', - ]); - $header->removeAddresses('chris@swiftmailer.org'); - $this->assertEquals(['mark@swiftmailer.org'], - $header->getAddresses() - ); - } - - public function testRemoveAddressesWithList() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', - ]); - $header->removeAddresses( - ['chris@swiftmailer.org', 'mark@swiftmailer.org'] - ); - $this->assertEquals([], $header->getAddresses()); - } - - public function testSetBodyModel() - { - $header = $this->getHeader('From'); - $header->setFieldBodyModel('chris@swiftmailer.org'); - $this->assertEquals(['chris@swiftmailer.org' => null], $header->getNameAddresses()); - } - - public function testGetBodyModel() - { - $header = $this->getHeader('From'); - $header->setAddresses(['chris@swiftmailer.org']); - $this->assertEquals(['chris@swiftmailer.org' => null], $header->getFieldBodyModel()); - } - - public function testToString() - { - $header = $this->getHeader('From'); - $header->setNameAddresses([ - 'chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', - ]); - $this->assertEquals( - 'From: Chris Corbyn , '. - 'Mark Corbyn '."\r\n", - $header->toString() - ); - } - - private function getHeader($name, $encoder = null, $addressEncoder = null) - { - $encoder = $encoder ?? $this->getEncoder('Q', true); - $addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - $header = new Swift_Mime_Headers_MailboxHeader($name, $encoder, new EmailValidator(), $addressEncoder); - $header->setCharset($this->charset); - - return $header; - } - - private function getEncoder($type) - { - $encoder = $this->getMockery('Swift_Mime_HeaderEncoder')->shouldIgnoreMissing(); - $encoder->shouldReceive('getName') - ->zeroOrMoreTimes() - ->andReturn($type); - - return $encoder; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/ParameterizedHeaderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/ParameterizedHeaderTest.php deleted file mode 100644 index c90b05b..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/ParameterizedHeaderTest.php +++ /dev/null @@ -1,396 +0,0 @@ -getHeader('Content-Type', - $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) - ); - $this->assertEquals(Swift_Mime_Header::TYPE_PARAMETERIZED, $header->getFieldType()); - } - - public function testValueIsReturnedVerbatim() - { - $header = $this->getHeader('Content-Type', - $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) - ); - $header->setValue('text/plain'); - $this->assertEquals('text/plain', $header->getValue()); - } - - public function testParametersAreAppended() - { - /* -- RFC 2045, 5.1 - parameter := attribute "=" value - - attribute := token - ; Matching of attributes - ; is ALWAYS case-insensitive. - - value := token / quoted-string - - token := 1* - - tspecials := "(" / ")" / "<" / ">" / "@" / - "," / ";" / ":" / "\" / <"> - "/" / "[" / "]" / "?" / "=" - ; Must be in quoted-string, - ; to use within parameter values - */ - - $header = $this->getHeader('Content-Type', - $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) - ); - $header->setValue('text/plain'); - $header->setParameters(['charset' => 'utf-8']); - $this->assertEquals('text/plain; charset=utf-8', $header->getFieldBody()); - } - - public function testSpaceInParamResultsInQuotedString() - { - $header = $this->getHeader('Content-Disposition', - $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) - ); - $header->setValue('attachment'); - $header->setParameters(['filename' => 'my file.txt']); - $this->assertEquals('attachment; filename="my file.txt"', - $header->getFieldBody() - ); - } - - public function testLongParamsAreBrokenIntoMultipleAttributeStrings() - { - /* -- RFC 2231, 3. - The asterisk character ("*") followed - by a decimal count is employed to indicate that multiple parameters - are being used to encapsulate a single parameter value. The count - starts at 0 and increments by 1 for each subsequent section of the - parameter value. Decimal values are used and neither leading zeroes - nor gaps in the sequence are allowed. - - The original parameter value is recovered by concatenating the - various sections of the parameter, in order. For example, the - content-type field - - Content-Type: message/external-body; access-type=URL; - URL*0="ftp://"; - URL*1="cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar" - - is semantically identical to - - Content-Type: message/external-body; access-type=URL; - URL="ftp://cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar" - - Note that quotes around parameter values are part of the value - syntax; they are NOT part of the value itself. Furthermore, it is - explicitly permitted to have a mixture of quoted and unquoted - continuation fields. - */ - - $value = str_repeat('a', 180); - - $encoder = $this->getParameterEncoder(); - $encoder->shouldReceive('encodeString') - ->once() - ->with($value, \Mockery::any(), 63, \Mockery::any()) - ->andReturn(str_repeat('a', 63)."\r\n". - str_repeat('a', 63)."\r\n".str_repeat('a', 54)); - - $header = $this->getHeader('Content-Disposition', - $this->getHeaderEncoder('Q', true), $encoder - ); - $header->setValue('attachment'); - $header->setParameters(['filename' => $value]); - $header->setMaxLineLength(78); - $this->assertEquals( - 'attachment; '. - 'filename*0*=utf-8\'\''.str_repeat('a', 63).";\r\n ". - 'filename*1*='.str_repeat('a', 63).";\r\n ". - 'filename*2*='.str_repeat('a', 54), - $header->getFieldBody() - ); - } - - public function testEncodedParamDataIncludesCharsetAndLanguage() - { - /* -- RFC 2231, 4. - Asterisks ("*") are reused to provide the indicator that language and - character set information is present and encoding is being used. A - single quote ("'") is used to delimit the character set and language - information at the beginning of the parameter value. Percent signs - ("%") are used as the encoding flag, which agrees with RFC 2047. - - Specifically, an asterisk at the end of a parameter name acts as an - indicator that character set and language information may appear at - the beginning of the parameter value. A single quote is used to - separate the character set, language, and actual value information in - the parameter value string, and an percent sign is used to flag - octets encoded in hexadecimal. For example: - - Content-Type: application/x-stuff; - title*=us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A - - Note that it is perfectly permissible to leave either the character - set or language field blank. Note also that the single quote - delimiters MUST be present even when one of the field values is - omitted. - */ - - $value = str_repeat('a', 20).pack('C', 0x8F).str_repeat('a', 10); - - $encoder = $this->getParameterEncoder(); - $encoder->shouldReceive('encodeString') - ->once() - ->with($value, 12, 62, \Mockery::any()) - ->andReturn(str_repeat('a', 20).'%8F'.str_repeat('a', 10)); - - $header = $this->getHeader('Content-Disposition', - $this->getHeaderEncoder('Q', true), $encoder - ); - $header->setValue('attachment'); - $header->setParameters(['filename' => $value]); - $header->setMaxLineLength(78); - $header->setLanguage($this->lang); - $this->assertEquals( - 'attachment; filename*='.$this->charset."'".$this->lang."'". - str_repeat('a', 20).'%8F'.str_repeat('a', 10), - $header->getFieldBody() - ); - } - - public function testMultipleEncodedParamLinesAreFormattedCorrectly() - { - /* -- RFC 2231, 4.1. - Character set and language information may be combined with the - parameter continuation mechanism. For example: - - Content-Type: application/x-stuff - title*0*=us-ascii'en'This%20is%20even%20more%20 - title*1*=%2A%2A%2Afun%2A%2A%2A%20 - title*2="isn't it!" - - Note that: - - (1) Language and character set information only appear at - the beginning of a given parameter value. - - (2) Continuations do not provide a facility for using more - than one character set or language in the same - parameter value. - - (3) A value presented using multiple continuations may - contain a mixture of encoded and unencoded segments. - - (4) The first segment of a continuation MUST be encoded if - language and character set information are given. - - (5) If the first segment of a continued parameter value is - encoded the language and character set field delimiters - MUST be present even when the fields are left blank. - */ - - $value = str_repeat('a', 20).pack('C', 0x8F).str_repeat('a', 60); - - $encoder = $this->getParameterEncoder(); - $encoder->shouldReceive('encodeString') - ->once() - ->with($value, 12, 62, \Mockery::any()) - ->andReturn(str_repeat('a', 20).'%8F'.str_repeat('a', 28)."\r\n". - str_repeat('a', 32)); - - $header = $this->getHeader('Content-Disposition', - $this->getHeaderEncoder('Q', true), $encoder - ); - $header->setValue('attachment'); - $header->setParameters(['filename' => $value]); - $header->setMaxLineLength(78); - $header->setLanguage($this->lang); - $this->assertEquals( - 'attachment; filename*0*='.$this->charset."'".$this->lang."'". - str_repeat('a', 20).'%8F'.str_repeat('a', 28).";\r\n ". - 'filename*1*='.str_repeat('a', 32), - $header->getFieldBody() - ); - } - - public function testToString() - { - $header = $this->getHeader('Content-Type', - $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) - ); - $header->setValue('text/html'); - $header->setParameters(['charset' => 'utf-8']); - $this->assertEquals('Content-Type: text/html; charset=utf-8'."\r\n", - $header->toString() - ); - } - - public function testValueCanBeEncodedIfNonAscii() - { - $value = 'fo'.pack('C', 0x8F).'bar'; - - $encoder = $this->getHeaderEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('fo=8Fbar'); - - $header = $this->getHeader('X-Foo', $encoder, $this->getParameterEncoder(true)); - $header->setValue($value); - $header->setParameters(['lookslike' => 'foobar']); - $this->assertEquals('X-Foo: =?utf-8?Q?fo=8Fbar?=; lookslike=foobar'."\r\n", - $header->toString() - ); - } - - public function testValueAndParamCanBeEncodedIfNonAscii() - { - $value = 'fo'.pack('C', 0x8F).'bar'; - - $encoder = $this->getHeaderEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('fo=8Fbar'); - - $paramEncoder = $this->getParameterEncoder(); - $paramEncoder->shouldReceive('encodeString') - ->once() - ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('fo%8Fbar'); - - $header = $this->getHeader('X-Foo', $encoder, $paramEncoder); - $header->setValue($value); - $header->setParameters(['says' => $value]); - $this->assertEquals("X-Foo: =?utf-8?Q?fo=8Fbar?=; says*=utf-8''fo%8Fbar\r\n", - $header->toString() - ); - } - - public function testParamsAreEncodedWithEncodedWordsIfNoParamEncoderSet() - { - $value = 'fo'.pack('C', 0x8F).'bar'; - - $encoder = $this->getHeaderEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('fo=8Fbar'); - - $header = $this->getHeader('X-Foo', $encoder, null); - $header->setValue('bar'); - $header->setParameters(['says' => $value]); - $this->assertEquals("X-Foo: bar; says=\"=?utf-8?Q?fo=8Fbar?=\"\r\n", - $header->toString() - ); - } - - public function testLanguageInformationAppearsInEncodedWords() - { - /* -- RFC 2231, 5. - 5. Language specification in Encoded Words - - RFC 2047 provides support for non-US-ASCII character sets in RFC 822 - message header comments, phrases, and any unstructured text field. - This is done by defining an encoded word construct which can appear - in any of these places. Given that these are fields intended for - display, it is sometimes necessary to associate language information - with encoded words as well as just the character set. This - specification extends the definition of an encoded word to allow the - inclusion of such information. This is simply done by suffixing the - character set specification with an asterisk followed by the language - tag. For example: - - From: =?US-ASCII*EN?Q?Keith_Moore?= - */ - - $value = 'fo'.pack('C', 0x8F).'bar'; - - $encoder = $this->getHeaderEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('fo=8Fbar'); - - $paramEncoder = $this->getParameterEncoder(); - $paramEncoder->shouldReceive('encodeString') - ->once() - ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('fo%8Fbar'); - - $header = $this->getHeader('X-Foo', $encoder, $paramEncoder); - $header->setLanguage('en'); - $header->setValue($value); - $header->setParameters(['says' => $value]); - $this->assertEquals("X-Foo: =?utf-8*en?Q?fo=8Fbar?=; says*=utf-8'en'fo%8Fbar\r\n", - $header->toString() - ); - } - - public function testSetBodyModel() - { - $header = $this->getHeader('Content-Type', - $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) - ); - $header->setFieldBodyModel('text/html'); - $this->assertEquals('text/html', $header->getValue()); - } - - public function testGetBodyModel() - { - $header = $this->getHeader('Content-Type', - $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) - ); - $header->setValue('text/plain'); - $this->assertEquals('text/plain', $header->getFieldBodyModel()); - } - - public function testSetParameter() - { - $header = $this->getHeader('Content-Type', - $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) - ); - $header->setParameters(['charset' => 'utf-8', 'delsp' => 'yes']); - $header->setParameter('delsp', 'no'); - $this->assertEquals(['charset' => 'utf-8', 'delsp' => 'no'], - $header->getParameters() - ); - } - - public function testGetParameter() - { - $header = $this->getHeader('Content-Type', - $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) - ); - $header->setParameters(['charset' => 'utf-8', 'delsp' => 'yes']); - $this->assertEquals('utf-8', $header->getParameter('charset')); - } - - private function getHeader($name, $encoder, $paramEncoder) - { - $header = new Swift_Mime_Headers_ParameterizedHeader($name, $encoder, $paramEncoder); - $header->setCharset($this->charset); - - return $header; - } - - private function getHeaderEncoder($type, $stub = false) - { - $encoder = $this->getMockery('Swift_Mime_HeaderEncoder')->shouldIgnoreMissing(); - $encoder->shouldReceive('getName') - ->zeroOrMoreTimes() - ->andReturn($type); - - return $encoder; - } - - private function getParameterEncoder($stub = false) - { - return $this->getMockery('Swift_Encoder')->shouldIgnoreMissing(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/PathHeaderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/PathHeaderTest.php deleted file mode 100644 index 045107e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/PathHeaderTest.php +++ /dev/null @@ -1,95 +0,0 @@ -getHeader('Return-Path'); - $this->assertEquals(Swift_Mime_Header::TYPE_PATH, $header->getFieldType()); - } - - public function testSingleAddressCanBeSetAndFetched() - { - $header = $this->getHeader('Return-Path'); - $header->setAddress('chris@swiftmailer.org'); - $this->assertEquals('chris@swiftmailer.org', $header->getAddress()); - } - - /** - * @expectedException \Exception - */ - public function testAddressMustComplyWithRfc2822() - { - $header = $this->getHeader('Return-Path'); - $header->setAddress('chr is@swiftmailer.org'); - } - - public function testValueIsAngleAddrWithValidAddress() - { - /* -- RFC 2822, 3.6.7. - - return = "Return-Path:" path CRLF - - path = ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) / - obs-path - */ - - $header = $this->getHeader('Return-Path'); - $header->setAddress('chris@swiftmailer.org'); - $this->assertEquals('', $header->getFieldBody()); - } - - public function testAddressIsIdnEncoded() - { - $header = $this->getHeader('Return-Path'); - $header->setAddress('chris@swïftmailer.org'); - $this->assertEquals('', $header->getFieldBody()); - } - - /** - * @expectedException \Swift_AddressEncoderException - */ - public function testAddressMustBeEncodable() - { - $header = $this->getHeader('Return-Path'); - $header->setAddress('chrïs@swiftmailer.org'); - $header->getFieldBody(); - } - - public function testValueIsEmptyAngleBracketsIfEmptyAddressSet() - { - $header = $this->getHeader('Return-Path'); - $header->setAddress(''); - $this->assertEquals('<>', $header->getFieldBody()); - } - - public function testSetBodyModel() - { - $header = $this->getHeader('Return-Path'); - $header->setFieldBodyModel('foo@bar.tld'); - $this->assertEquals('foo@bar.tld', $header->getAddress()); - } - - public function testGetBodyModel() - { - $header = $this->getHeader('Return-Path'); - $header->setAddress('foo@bar.tld'); - $this->assertEquals('foo@bar.tld', $header->getFieldBodyModel()); - } - - public function testToString() - { - $header = $this->getHeader('Return-Path'); - $header->setAddress('chris@swiftmailer.org'); - $this->assertEquals('Return-Path: '."\r\n", - $header->toString() - ); - } - - private function getHeader($name) - { - return new Swift_Mime_Headers_PathHeader($name, new EmailValidator(), new Swift_AddressEncoder_IdnAddressEncoder()); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/UnstructuredHeaderTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/UnstructuredHeaderTest.php deleted file mode 100644 index 30ccb00..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/UnstructuredHeaderTest.php +++ /dev/null @@ -1,353 +0,0 @@ -getHeader('Subject', $this->getEncoder('Q', true)); - $this->assertEquals(Swift_Mime_Header::TYPE_TEXT, $header->getFieldType()); - } - - public function testGetNameReturnsNameVerbatim() - { - $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); - $this->assertEquals('Subject', $header->getFieldName()); - } - - public function testGetValueReturnsValueVerbatim() - { - $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); - $header->setValue('Test'); - $this->assertEquals('Test', $header->getValue()); - } - - public function testBasicStructureIsKeyValuePair() - { - /* -- RFC 2822, 2.2 - Header fields are lines composed of a field name, followed by a colon - (":"), followed by a field body, and terminated by CRLF. - */ - $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); - $header->setValue('Test'); - $this->assertEquals('Subject: Test'."\r\n", $header->toString()); - } - - public function testLongHeadersAreFoldedAtWordBoundary() - { - /* -- RFC 2822, 2.2.3 - Each header field is logically a single line of characters comprising - the field name, the colon, and the field body. For convenience - however, and to deal with the 998/78 character limitations per line, - the field body portion of a header field can be split into a multiple - line representation; this is called "folding". The general rule is - that wherever this standard allows for folding white space (not - simply WSP characters), a CRLF may be inserted before any WSP. - */ - - $value = 'The quick brown fox jumped over the fence, he was a very very '. - 'scary brown fox with a bushy tail'; - $header = $this->getHeader('X-Custom-Header', - $this->getEncoder('Q', true) - ); - $header->setValue($value); - $header->setMaxLineLength(78); //A safe [RFC 2822, 2.2.3] default - /* - X-Custom-Header: The quick brown fox jumped over the fence, he was a very very - scary brown fox with a bushy tail - */ - $this->assertEquals( - 'X-Custom-Header: The quick brown fox jumped over the fence, he was a'. - ' very very'."\r\n".//Folding - ' scary brown fox with a bushy tail'."\r\n", - $header->toString(), '%s: The header should have been folded at 78th char' - ); - } - - public function testPrintableAsciiOnlyAppearsInHeaders() - { - /* -- RFC 2822, 2.2. - A field name MUST be composed of printable US-ASCII characters (i.e., - characters that have values between 33 and 126, inclusive), except - colon. A field body may be composed of any US-ASCII characters, - except for CR and LF. - */ - - $nonAsciiChar = pack('C', 0x8F); - $header = $this->getHeader('X-Test', $this->getEncoder('Q', true)); - $header->setValue($nonAsciiChar); - $this->assertRegExp( - '~^[^:\x00-\x20\x80-\xFF]+: [^\x80-\xFF\r\n]+\r\n$~s', - $header->toString() - ); - } - - public function testEncodedWordsFollowGeneralStructure() - { - /* -- RFC 2047, 1. - Generally, an "encoded-word" is a sequence of printable ASCII - characters that begins with "=?", ends with "?=", and has two "?"s in - between. - */ - - $nonAsciiChar = pack('C', 0x8F); - $header = $this->getHeader('X-Test', $this->getEncoder('Q', true)); - $header->setValue($nonAsciiChar); - $this->assertRegExp( - '~^X-Test: \=?.*?\?.*?\?.*?\?=\r\n$~s', - $header->toString() - ); - } - - public function testEncodedWordIncludesCharsetAndEncodingMethodAndText() - { - /* -- RFC 2047, 2. - An 'encoded-word' is defined by the following ABNF grammar. The - notation of RFC 822 is used, with the exception that white space - characters MUST NOT appear between components of an 'encoded-word'. - - encoded-word = "=?" charset "?" encoding "?" encoded-text "?=" - */ - - $nonAsciiChar = pack('C', 0x8F); - - $encoder = $this->getEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($nonAsciiChar, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('=8F'); - - $header = $this->getHeader('X-Test', $encoder); - $header->setValue($nonAsciiChar); - $this->assertEquals( - 'X-Test: =?'.$this->charset.'?Q?=8F?='."\r\n", - $header->toString() - ); - } - - public function testEncodedWordsAreUsedToEncodedNonPrintableAscii() - { - //SPACE and TAB permitted - $nonPrintableBytes = array_merge( - range(0x00, 0x08), range(0x10, 0x19), [0x7F] - ); - - foreach ($nonPrintableBytes as $byte) { - $char = pack('C', $byte); - $encodedChar = sprintf('=%02X', $byte); - - $encoder = $this->getEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($char, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn($encodedChar); - - $header = $this->getHeader('X-A', $encoder); - $header->setValue($char); - - $this->assertEquals( - 'X-A: =?'.$this->charset.'?Q?'.$encodedChar.'?='."\r\n", - $header->toString(), '%s: Non-printable ascii should be encoded' - ); - } - } - - public function testEncodedWordsAreUsedToEncode8BitOctets() - { - foreach (range(0x80, 0xFF) as $byte) { - $char = pack('C', $byte); - $encodedChar = sprintf('=%02X', $byte); - - $encoder = $this->getEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($char, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn($encodedChar); - - $header = $this->getHeader('X-A', $encoder); - $header->setValue($char); - - $this->assertEquals( - 'X-A: =?'.$this->charset.'?Q?'.$encodedChar.'?='."\r\n", - $header->toString(), '%s: 8-bit octets should be encoded' - ); - } - } - - public function testEncodedWordsAreNoMoreThan75CharsPerLine() - { - /* -- RFC 2047, 2. - An 'encoded-word' may not be more than 75 characters long, including - 'charset', 'encoding', 'encoded-text', and delimiters. - - ... SNIP ... - - While there is no limit to the length of a multiple-line header - field, each line of a header field that contains one or more - 'encoded-word's is limited to 76 characters. - */ - - $nonAsciiChar = pack('C', 0x8F); - - $encoder = $this->getEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($nonAsciiChar, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('=8F'); - //Note that multi-line headers begin with LWSP which makes 75 + 1 = 76 - //Note also that =?utf-8?q??= is 12 chars which makes 75 - 12 = 63 - - //* X-Test: is 8 chars - $header = $this->getHeader('X-Test', $encoder); - $header->setValue($nonAsciiChar); - - $this->assertEquals( - 'X-Test: =?'.$this->charset.'?Q?=8F?='."\r\n", - $header->toString() - ); - } - - public function testFWSPIsUsedWhenEncoderReturnsMultipleLines() - { - /* --RFC 2047, 2. - If it is desirable to encode more text than will fit in an 'encoded-word' of - 75 characters, multiple 'encoded-word's (separated by CRLF SPACE) may - be used. - */ - - //Note the Mock does NOT return 8F encoded, the 8F merely triggers - // encoding for the sake of testing - $nonAsciiChar = pack('C', 0x8F); - - $encoder = $this->getEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($nonAsciiChar, 8, 63, \Mockery::any()) - ->andReturn('line_one_here'."\r\n".'line_two_here'); - - //Note that multi-line headers begin with LWSP which makes 75 + 1 = 76 - //Note also that =?utf-8?q??= is 12 chars which makes 75 - 12 = 63 - - //* X-Test: is 8 chars - $header = $this->getHeader('X-Test', $encoder); - $header->setValue($nonAsciiChar); - - $this->assertEquals( - 'X-Test: =?'.$this->charset.'?Q?line_one_here?='."\r\n". - ' =?'.$this->charset.'?Q?line_two_here?='."\r\n", - $header->toString() - ); - } - - public function testAdjacentWordsAreEncodedTogether() - { - /* -- RFC 2047, 5 (1) - Ordinary ASCII text and 'encoded-word's may appear together in the - same header field. However, an 'encoded-word' that appears in a - header field defined as '*text' MUST be separated from any adjacent - 'encoded-word' or 'text' by 'linear-white-space'. - - -- RFC 2047, 2. - IMPORTANT: 'encoded-word's are designed to be recognized as 'atom's - by an RFC 822 parser. As a consequence, unencoded white space - characters (such as SPACE and HTAB) are FORBIDDEN within an - 'encoded-word'. - */ - - //It would be valid to encode all words needed, however it's probably - // easiest to encode the longest amount required at a time - - $word = 'w'.pack('C', 0x8F).'rd'; - $text = 'start '.$word.' '.$word.' then end '.$word; - // 'start', ' word word', ' and end', ' word' - - $encoder = $this->getEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($word.' '.$word, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('w=8Frd_w=8Frd'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($word, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('w=8Frd'); - - $header = $this->getHeader('X-Test', $encoder); - $header->setValue($text); - - $headerString = $header->toString(); - - $this->assertEquals('X-Test: start =?'.$this->charset.'?Q?'. - 'w=8Frd_w=8Frd?= then end =?'.$this->charset.'?Q?'. - 'w=8Frd?='."\r\n", $headerString, - '%s: Adjacent encoded words should appear grouped with WSP encoded' - ); - } - - public function testLanguageInformationAppearsInEncodedWords() - { - /* -- RFC 2231, 5. - 5. Language specification in Encoded Words - - RFC 2047 provides support for non-US-ASCII character sets in RFC 822 - message header comments, phrases, and any unstructured text field. - This is done by defining an encoded word construct which can appear - in any of these places. Given that these are fields intended for - display, it is sometimes necessary to associate language information - with encoded words as well as just the character set. This - specification extends the definition of an encoded word to allow the - inclusion of such information. This is simply done by suffixing the - character set specification with an asterisk followed by the language - tag. For example: - - From: =?US-ASCII*EN?Q?Keith_Moore?= - */ - - $value = 'fo'.pack('C', 0x8F).'bar'; - - $encoder = $this->getEncoder('Q'); - $encoder->shouldReceive('encodeString') - ->once() - ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn('fo=8Fbar'); - - $header = $this->getHeader('Subject', $encoder); - $header->setLanguage('en'); - $header->setValue($value); - $this->assertEquals("Subject: =?utf-8*en?Q?fo=8Fbar?=\r\n", - $header->toString() - ); - } - - public function testSetBodyModel() - { - $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); - $header->setFieldBodyModel('test'); - $this->assertEquals('test', $header->getValue()); - } - - public function testGetBodyModel() - { - $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); - $header->setValue('test'); - $this->assertEquals('test', $header->getFieldBodyModel()); - } - - private function getHeader($name, $encoder) - { - $header = new Swift_Mime_Headers_UnstructuredHeader($name, $encoder); - $header->setCharset($this->charset); - - return $header; - } - - private function getEncoder($type, $stub = false) - { - $encoder = $this->getMockery('Swift_Mime_HeaderEncoder')->shouldIgnoreMissing(); - $encoder->shouldReceive('getName') - ->zeroOrMoreTimes() - ->andReturn($type); - - return $encoder; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/IdGeneratorTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/IdGeneratorTest.php deleted file mode 100644 index dfea580..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/IdGeneratorTest.php +++ /dev/null @@ -1,32 +0,0 @@ -assertEquals('example.net', $idGenerator->getIdRight()); - - $idGenerator->setIdRight('example.com'); - $this->assertEquals('example.com', $idGenerator->getIdRight()); - } - - public function testIdGenerateId() - { - $idGenerator = new Swift_Mime_IdGenerator('example.net'); - $emailValidator = new EmailValidator(); - - $id = $idGenerator->generateId(); - $this->assertTrue($emailValidator->isValid($id, new RFCValidation())); - $this->assertRegExp('/^.{32}@example.net$/', $id); - - $anotherId = $idGenerator->generateId(); - $this->assertNotEquals($id, $anotherId); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/MimePartTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/MimePartTest.php deleted file mode 100644 index 4575505..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/MimePartTest.php +++ /dev/null @@ -1,234 +0,0 @@ -createMimePart($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals( - Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, $part->getNestingLevel() - ); - } - - public function testCharsetIsReturnedFromHeader() - { - /* -- RFC 2046, 4.1.2. - A critical parameter that may be specified in the Content-Type field - for "text/plain" data is the character set. This is specified with a - "charset" parameter, as in: - - Content-type: text/plain; charset=iso-8859-1 - - Unlike some other parameter values, the values of the charset - parameter are NOT case sensitive. The default character set, which - must be assumed in the absence of a charset parameter, is US-ASCII. - */ - - $cType = $this->createHeader('Content-Type', 'text/plain', - ['charset' => 'iso-8859-1'] - ); - $part = $this->createMimePart($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals('iso-8859-1', $part->getCharset()); - } - - public function testCharsetIsSetInHeader() - { - $cType = $this->createHeader('Content-Type', 'text/plain', - ['charset' => 'iso-8859-1'], false - ); - $cType->shouldReceive('setParameter')->once()->with('charset', 'utf-8'); - - $part = $this->createMimePart($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $part->setCharset('utf-8'); - } - - public function testCharsetIsSetInHeaderIfPassedToSetBody() - { - $cType = $this->createHeader('Content-Type', 'text/plain', - ['charset' => 'iso-8859-1'], false - ); - $cType->shouldReceive('setParameter')->once()->with('charset', 'utf-8'); - - $part = $this->createMimePart($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $part->setBody('', 'text/plian', 'utf-8'); - } - - public function testSettingCharsetNotifiesEncoder() - { - $encoder = $this->createEncoder('quoted-printable', false); - $encoder->expects($this->once()) - ->method('charsetChanged') - ->with('utf-8'); - - $part = $this->createMimePart($this->createHeaderSet(), - $encoder, $this->createCache() - ); - $part->setCharset('utf-8'); - } - - public function testSettingCharsetNotifiesHeaders() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('charsetChanged') - ->zeroOrMoreTimes() - ->with('utf-8'); - - $part = $this->createMimePart($headers, $this->createEncoder(), - $this->createCache() - ); - $part->setCharset('utf-8'); - } - - public function testSettingCharsetNotifiesChildren() - { - $child = $this->createChild(0, '', false); - $child->shouldReceive('charsetChanged') - ->once() - ->with('windows-874'); - - $part = $this->createMimePart($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $part->setChildren([$child]); - $part->setCharset('windows-874'); - } - - public function testCharsetChangeUpdatesCharset() - { - $cType = $this->createHeader('Content-Type', 'text/plain', - ['charset' => 'iso-8859-1'], false - ); - $cType->shouldReceive('setParameter')->once()->with('charset', 'utf-8'); - - $part = $this->createMimePart($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $part->charsetChanged('utf-8'); - } - - public function testSettingCharsetClearsCache() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - - $cache = $this->createCache(false); - - $entity = $this->createEntity($headers, $this->createEncoder(), - $cache - ); - - $entity->setBody("blah\r\nblah!"); - $entity->toString(); - - // Initialize the expectation here because we only care about what happens in setCharset() - $cache->shouldReceive('clearKey') - ->once() - ->with(\Mockery::any(), 'body'); - - $entity->setCharset('iso-2022'); - } - - public function testFormatIsReturnedFromHeader() - { - /* -- RFC 3676. - */ - - $cType = $this->createHeader('Content-Type', 'text/plain', - ['format' => 'flowed'] - ); - $part = $this->createMimePart($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals('flowed', $part->getFormat()); - } - - public function testFormatIsSetInHeader() - { - $cType = $this->createHeader('Content-Type', 'text/plain', [], false); - $cType->shouldReceive('setParameter')->once()->with('format', 'fixed'); - - $part = $this->createMimePart($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $part->setFormat('fixed'); - } - - public function testDelSpIsReturnedFromHeader() - { - /* -- RFC 3676. - */ - - $cType = $this->createHeader('Content-Type', 'text/plain', - ['delsp' => 'no'] - ); - $part = $this->createMimePart($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $this->assertFalse($part->getDelSp()); - } - - public function testDelSpIsSetInHeader() - { - $cType = $this->createHeader('Content-Type', 'text/plain', [], false); - $cType->shouldReceive('setParameter')->once()->with('delsp', 'yes'); - - $part = $this->createMimePart($this->createHeaderSet([ - 'Content-Type' => $cType, ]), - $this->createEncoder(), $this->createCache() - ); - $part->setDelSp(true); - } - - public function testFluidInterface() - { - $part = $this->createMimePart($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - - $this->assertSame($part, - $part - ->setContentType('text/plain') - ->setEncoder($this->createEncoder()) - ->setId('foo@bar') - ->setDescription('my description') - ->setMaxLineLength(998) - ->setBody('xx') - ->setBoundary('xyz') - ->setChildren([]) - ->setCharset('utf-8') - ->setFormat('flowed') - ->setDelSp(true) - ); - } - - //abstract - protected function createEntity($headers, $encoder, $cache) - { - return $this->createMimePart($headers, $encoder, $cache); - } - - protected function createMimePart($headers, $encoder, $cache) - { - $idGenerator = new Swift_Mime_IdGenerator('example.com'); - - return new Swift_Mime_MimePart($headers, $encoder, $cache, $idGenerator); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderFactoryTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderFactoryTest.php deleted file mode 100644 index 6bc825e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderFactoryTest.php +++ /dev/null @@ -1,169 +0,0 @@ -factory = $this->createFactory(); - } - - public function testMailboxHeaderIsCorrectType() - { - $header = $this->factory->createMailboxHeader('X-Foo'); - $this->assertInstanceOf('Swift_Mime_Headers_MailboxHeader', $header); - } - - public function testMailboxHeaderHasCorrectName() - { - $header = $this->factory->createMailboxHeader('X-Foo'); - $this->assertEquals('X-Foo', $header->getFieldName()); - } - - public function testMailboxHeaderHasCorrectModel() - { - $header = $this->factory->createMailboxHeader('X-Foo', - ['foo@bar' => 'FooBar'] - ); - $this->assertEquals(['foo@bar' => 'FooBar'], $header->getFieldBodyModel()); - } - - public function testDateHeaderHasCorrectType() - { - $header = $this->factory->createDateHeader('X-Date'); - $this->assertInstanceOf('Swift_Mime_Headers_DateHeader', $header); - } - - public function testDateHeaderHasCorrectName() - { - $header = $this->factory->createDateHeader('X-Date'); - $this->assertEquals('X-Date', $header->getFieldName()); - } - - public function testDateHeaderHasCorrectModel() - { - $dateTime = new \DateTimeImmutable(); - $header = $this->factory->createDateHeader('X-Date', $dateTime); - $this->assertEquals($dateTime, $header->getFieldBodyModel()); - } - - public function testTextHeaderHasCorrectType() - { - $header = $this->factory->createTextHeader('X-Foo'); - $this->assertInstanceOf('Swift_Mime_Headers_UnstructuredHeader', $header); - } - - public function testTextHeaderHasCorrectName() - { - $header = $this->factory->createTextHeader('X-Foo'); - $this->assertEquals('X-Foo', $header->getFieldName()); - } - - public function testTextHeaderHasCorrectModel() - { - $header = $this->factory->createTextHeader('X-Foo', 'bar'); - $this->assertEquals('bar', $header->getFieldBodyModel()); - } - - public function testParameterizedHeaderHasCorrectType() - { - $header = $this->factory->createParameterizedHeader('X-Foo'); - $this->assertInstanceOf('Swift_Mime_Headers_ParameterizedHeader', $header); - } - - public function testParameterizedHeaderHasCorrectName() - { - $header = $this->factory->createParameterizedHeader('X-Foo'); - $this->assertEquals('X-Foo', $header->getFieldName()); - } - - public function testParameterizedHeaderHasCorrectModel() - { - $header = $this->factory->createParameterizedHeader('X-Foo', 'bar'); - $this->assertEquals('bar', $header->getFieldBodyModel()); - } - - public function testParameterizedHeaderHasCorrectParams() - { - $header = $this->factory->createParameterizedHeader('X-Foo', 'bar', - ['zip' => 'button'] - ); - $this->assertEquals(['zip' => 'button'], $header->getParameters()); - } - - public function testIdHeaderHasCorrectType() - { - $header = $this->factory->createIdHeader('X-ID'); - $this->assertInstanceOf('Swift_Mime_Headers_IdentificationHeader', $header); - } - - public function testIdHeaderHasCorrectName() - { - $header = $this->factory->createIdHeader('X-ID'); - $this->assertEquals('X-ID', $header->getFieldName()); - } - - public function testIdHeaderHasCorrectModel() - { - $header = $this->factory->createIdHeader('X-ID', 'xyz@abc'); - $this->assertEquals(['xyz@abc'], $header->getFieldBodyModel()); - } - - public function testPathHeaderHasCorrectType() - { - $header = $this->factory->createPathHeader('X-Path'); - $this->assertInstanceOf('Swift_Mime_Headers_PathHeader', $header); - } - - public function testPathHeaderHasCorrectName() - { - $header = $this->factory->createPathHeader('X-Path'); - $this->assertEquals('X-Path', $header->getFieldName()); - } - - public function testPathHeaderHasCorrectModel() - { - $header = $this->factory->createPathHeader('X-Path', 'foo@bar'); - $this->assertEquals('foo@bar', $header->getFieldBodyModel()); - } - - public function testCharsetChangeNotificationNotifiesEncoders() - { - $encoder = $this->createHeaderEncoder(); - $encoder->expects($this->once()) - ->method('charsetChanged') - ->with('utf-8'); - $paramEncoder = $this->createParamEncoder(); - $paramEncoder->expects($this->once()) - ->method('charsetChanged') - ->with('utf-8'); - - $factory = $this->createFactory($encoder, $paramEncoder); - - $factory->charsetChanged('utf-8'); - } - - private function createFactory($encoder = null, $paramEncoder = null) - { - return new Swift_Mime_SimpleHeaderFactory( - $encoder - ? $encoder : $this->createHeaderEncoder(), - $paramEncoder - ? $paramEncoder : $this->createParamEncoder(), - new EmailValidator() - ); - } - - private function createHeaderEncoder() - { - return $this->getMockBuilder('Swift_Mime_HeaderEncoder')->getMock(); - } - - private function createParamEncoder() - { - return $this->getMockBuilder('Swift_Encoder')->getMock(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderSetTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderSetTest.php deleted file mode 100644 index 4ddbff7..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderSetTest.php +++ /dev/null @@ -1,734 +0,0 @@ -createFactory(); - $factory->expects($this->once()) - ->method('createMailboxHeader') - ->with('From', ['person@domain' => 'Person']) - ->will($this->returnValue($this->createHeader('From'))); - - $set = $this->createSet($factory); - $set->addMailboxHeader('From', ['person@domain' => 'Person']); - } - - public function testAddDateHeaderDelegatesToFactory() - { - $dateTime = new DateTimeImmutable(); - - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createDateHeader') - ->with('Date', $dateTime) - ->will($this->returnValue($this->createHeader('Date'))); - - $set = $this->createSet($factory); - $set->addDateHeader('Date', $dateTime); - } - - public function testAddTextHeaderDelegatesToFactory() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createTextHeader') - ->with('Subject', 'some text') - ->will($this->returnValue($this->createHeader('Subject'))); - - $set = $this->createSet($factory); - $set->addTextHeader('Subject', 'some text'); - } - - public function testAddParameterizedHeaderDelegatesToFactory() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createParameterizedHeader') - ->with('Content-Type', 'text/plain', ['charset' => 'utf-8']) - ->will($this->returnValue($this->createHeader('Content-Type'))); - - $set = $this->createSet($factory); - $set->addParameterizedHeader('Content-Type', 'text/plain', - ['charset' => 'utf-8'] - ); - } - - public function testAddIdHeaderDelegatesToFactory() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($this->createHeader('Message-ID'))); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - } - - public function testAddPathHeaderDelegatesToFactory() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createPathHeader') - ->with('Return-Path', 'some@path') - ->will($this->returnValue($this->createHeader('Return-Path'))); - - $set = $this->createSet($factory); - $set->addPathHeader('Return-Path', 'some@path'); - } - - public function testHasReturnsFalseWhenNoHeaders() - { - $set = $this->createSet($this->createFactory()); - $this->assertFalse($set->has('Some-Header')); - } - - public function testAddedMailboxHeaderIsSeenByHas() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createMailboxHeader') - ->with('From', ['person@domain' => 'Person']) - ->will($this->returnValue($this->createHeader('From'))); - - $set = $this->createSet($factory); - $set->addMailboxHeader('From', ['person@domain' => 'Person']); - $this->assertTrue($set->has('From')); - } - - public function testAddedDateHeaderIsSeenByHas() - { - $dateTime = new DateTimeImmutable(); - - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createDateHeader') - ->with('Date', $dateTime) - ->will($this->returnValue($this->createHeader('Date'))); - - $set = $this->createSet($factory); - $set->addDateHeader('Date', $dateTime); - $this->assertTrue($set->has('Date')); - } - - public function testAddedTextHeaderIsSeenByHas() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createTextHeader') - ->with('Subject', 'some text') - ->will($this->returnValue($this->createHeader('Subject'))); - - $set = $this->createSet($factory); - $set->addTextHeader('Subject', 'some text'); - $this->assertTrue($set->has('Subject')); - } - - public function testAddedParameterizedHeaderIsSeenByHas() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createParameterizedHeader') - ->with('Content-Type', 'text/plain', ['charset' => 'utf-8']) - ->will($this->returnValue($this->createHeader('Content-Type'))); - - $set = $this->createSet($factory); - $set->addParameterizedHeader('Content-Type', 'text/plain', - ['charset' => 'utf-8'] - ); - $this->assertTrue($set->has('Content-Type')); - } - - public function testAddedIdHeaderIsSeenByHas() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($this->createHeader('Message-ID'))); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $this->assertTrue($set->has('Message-ID')); - } - - public function testAddedPathHeaderIsSeenByHas() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createPathHeader') - ->with('Return-Path', 'some@path') - ->will($this->returnValue($this->createHeader('Return-Path'))); - - $set = $this->createSet($factory); - $set->addPathHeader('Return-Path', 'some@path'); - $this->assertTrue($set->has('Return-Path')); - } - - public function testNewlySetHeaderIsSeenByHas() - { - $factory = $this->createFactory(); - $header = $this->createHeader('X-Foo', 'bar'); - $set = $this->createSet($factory); - $set->set($header); - $this->assertTrue($set->has('X-Foo')); - } - - public function testHasCanAcceptOffset() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($this->createHeader('Message-ID'))); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $this->assertTrue($set->has('Message-ID', 0)); - } - - public function testHasWithIllegalOffsetReturnsFalse() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($this->createHeader('Message-ID'))); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $this->assertFalse($set->has('Message-ID', 1)); - } - - public function testHasCanDistinguishMultipleHeaders() - { - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($this->createHeader('Message-ID'))); - $factory->expects($this->at(1)) - ->method('createIdHeader') - ->with('Message-ID', 'other@id') - ->will($this->returnValue($this->createHeader('Message-ID'))); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->addIdHeader('Message-ID', 'other@id'); - $this->assertTrue($set->has('Message-ID', 1)); - } - - public function testGetWithUnspecifiedOffset() - { - $header = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $this->assertSame($header, $set->get('Message-ID')); - } - - public function testGetWithSpeiciedOffset() - { - $header0 = $this->createHeader('Message-ID'); - $header1 = $this->createHeader('Message-ID'); - $header2 = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header0)); - $factory->expects($this->at(1)) - ->method('createIdHeader') - ->with('Message-ID', 'other@id') - ->will($this->returnValue($header1)); - $factory->expects($this->at(2)) - ->method('createIdHeader') - ->with('Message-ID', 'more@id') - ->will($this->returnValue($header2)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->addIdHeader('Message-ID', 'other@id'); - $set->addIdHeader('Message-ID', 'more@id'); - $this->assertSame($header1, $set->get('Message-ID', 1)); - } - - public function testGetReturnsNullIfHeaderNotSet() - { - $set = $this->createSet($this->createFactory()); - $this->assertNull($set->get('Message-ID', 99)); - } - - public function testGetAllReturnsAllHeadersMatchingName() - { - $header0 = $this->createHeader('Message-ID'); - $header1 = $this->createHeader('Message-ID'); - $header2 = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header0)); - $factory->expects($this->at(1)) - ->method('createIdHeader') - ->with('Message-ID', 'other@id') - ->will($this->returnValue($header1)); - $factory->expects($this->at(2)) - ->method('createIdHeader') - ->with('Message-ID', 'more@id') - ->will($this->returnValue($header2)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->addIdHeader('Message-ID', 'other@id'); - $set->addIdHeader('Message-ID', 'more@id'); - - $this->assertEquals([$header0, $header1, $header2], - $set->getAll('Message-ID') - ); - } - - public function testGetAllReturnsAllHeadersIfNoArguments() - { - $header0 = $this->createHeader('Message-ID'); - $header1 = $this->createHeader('Subject'); - $header2 = $this->createHeader('To'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header0)); - $factory->expects($this->at(1)) - ->method('createIdHeader') - ->with('Subject', 'thing') - ->will($this->returnValue($header1)); - $factory->expects($this->at(2)) - ->method('createIdHeader') - ->with('To', 'person@example.org') - ->will($this->returnValue($header2)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->addIdHeader('Subject', 'thing'); - $set->addIdHeader('To', 'person@example.org'); - - $this->assertEquals([$header0, $header1, $header2], - $set->getAll() - ); - } - - public function testGetAllReturnsEmptyArrayIfNoneSet() - { - $set = $this->createSet($this->createFactory()); - $this->assertEquals([], $set->getAll('Received')); - } - - public function testRemoveWithUnspecifiedOffset() - { - $header = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->remove('Message-ID'); - $this->assertFalse($set->has('Message-ID')); - } - - public function testRemoveWithSpecifiedIndexRemovesHeader() - { - $header0 = $this->createHeader('Message-ID'); - $header1 = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header0)); - $factory->expects($this->at(1)) - ->method('createIdHeader') - ->with('Message-ID', 'other@id') - ->will($this->returnValue($header1)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->addIdHeader('Message-ID', 'other@id'); - $set->remove('Message-ID', 0); - $this->assertFalse($set->has('Message-ID', 0)); - $this->assertTrue($set->has('Message-ID', 1)); - $this->assertTrue($set->has('Message-ID')); - $set->remove('Message-ID', 1); - $this->assertFalse($set->has('Message-ID', 1)); - $this->assertFalse($set->has('Message-ID')); - } - - public function testRemoveWithSpecifiedIndexLeavesOtherHeaders() - { - $header0 = $this->createHeader('Message-ID'); - $header1 = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header0)); - $factory->expects($this->at(1)) - ->method('createIdHeader') - ->with('Message-ID', 'other@id') - ->will($this->returnValue($header1)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->addIdHeader('Message-ID', 'other@id'); - $set->remove('Message-ID', 1); - $this->assertTrue($set->has('Message-ID', 0)); - } - - public function testRemoveWithInvalidOffsetDoesNothing() - { - $header = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->remove('Message-ID', 50); - $this->assertTrue($set->has('Message-ID')); - } - - public function testRemoveAllRemovesAllHeadersWithName() - { - $header0 = $this->createHeader('Message-ID'); - $header1 = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header0)); - $factory->expects($this->at(1)) - ->method('createIdHeader') - ->with('Message-ID', 'other@id') - ->will($this->returnValue($header1)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->addIdHeader('Message-ID', 'other@id'); - $set->removeAll('Message-ID'); - $this->assertFalse($set->has('Message-ID', 0)); - $this->assertFalse($set->has('Message-ID', 1)); - } - - public function testHasIsNotCaseSensitive() - { - $header = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $this->assertTrue($set->has('message-id')); - } - - public function testGetIsNotCaseSensitive() - { - $header = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $this->assertSame($header, $set->get('message-id')); - } - - public function testGetAllIsNotCaseSensitive() - { - $header = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $this->assertEquals([$header], $set->getAll('message-id')); - } - - public function testRemoveIsNotCaseSensitive() - { - $header = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->remove('message-id'); - $this->assertFalse($set->has('Message-ID')); - } - - public function testRemoveAllIsNotCaseSensitive() - { - $header = $this->createHeader('Message-ID'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createIdHeader') - ->with('Message-ID', 'some@id') - ->will($this->returnValue($header)); - - $set = $this->createSet($factory); - $set->addIdHeader('Message-ID', 'some@id'); - $set->removeAll('message-id'); - $this->assertFalse($set->has('Message-ID')); - } - - public function testToStringJoinsHeadersTogether() - { - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createTextHeader') - ->with('Foo', 'bar') - ->will($this->returnValue($this->createHeader('Foo', 'bar'))); - $factory->expects($this->at(1)) - ->method('createTextHeader') - ->with('Zip', 'buttons') - ->will($this->returnValue($this->createHeader('Zip', 'buttons'))); - - $set = $this->createSet($factory); - $set->addTextHeader('Foo', 'bar'); - $set->addTextHeader('Zip', 'buttons'); - $this->assertEquals( - "Foo: bar\r\n". - "Zip: buttons\r\n", - $set->toString() - ); - } - - public function testHeadersWithoutBodiesAreNotDisplayed() - { - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createTextHeader') - ->with('Foo', 'bar') - ->will($this->returnValue($this->createHeader('Foo', 'bar'))); - $factory->expects($this->at(1)) - ->method('createTextHeader') - ->with('Zip', '') - ->will($this->returnValue($this->createHeader('Zip', ''))); - - $set = $this->createSet($factory); - $set->addTextHeader('Foo', 'bar'); - $set->addTextHeader('Zip', ''); - $this->assertEquals( - "Foo: bar\r\n", - $set->toString() - ); - } - - public function testHeadersWithoutBodiesCanBeForcedToDisplay() - { - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createTextHeader') - ->with('Foo', '') - ->will($this->returnValue($this->createHeader('Foo', ''))); - $factory->expects($this->at(1)) - ->method('createTextHeader') - ->with('Zip', '') - ->will($this->returnValue($this->createHeader('Zip', ''))); - - $set = $this->createSet($factory); - $set->addTextHeader('Foo', ''); - $set->addTextHeader('Zip', ''); - $set->setAlwaysDisplayed(['Foo', 'Zip']); - $this->assertEquals( - "Foo: \r\n". - "Zip: \r\n", - $set->toString() - ); - } - - public function testHeaderSequencesCanBeSpecified() - { - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createTextHeader') - ->with('Third', 'three') - ->will($this->returnValue($this->createHeader('Third', 'three'))); - $factory->expects($this->at(1)) - ->method('createTextHeader') - ->with('First', 'one') - ->will($this->returnValue($this->createHeader('First', 'one'))); - $factory->expects($this->at(2)) - ->method('createTextHeader') - ->with('Second', 'two') - ->will($this->returnValue($this->createHeader('Second', 'two'))); - - $set = $this->createSet($factory); - $set->addTextHeader('Third', 'three'); - $set->addTextHeader('First', 'one'); - $set->addTextHeader('Second', 'two'); - - $set->defineOrdering(['First', 'Second', 'Third']); - - $this->assertEquals( - "First: one\r\n". - "Second: two\r\n". - "Third: three\r\n", - $set->toString() - ); - } - - public function testUnsortedHeadersAppearAtEnd() - { - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createTextHeader') - ->with('Fourth', 'four') - ->will($this->returnValue($this->createHeader('Fourth', 'four'))); - $factory->expects($this->at(1)) - ->method('createTextHeader') - ->with('Fifth', 'five') - ->will($this->returnValue($this->createHeader('Fifth', 'five'))); - $factory->expects($this->at(2)) - ->method('createTextHeader') - ->with('Third', 'three') - ->will($this->returnValue($this->createHeader('Third', 'three'))); - $factory->expects($this->at(3)) - ->method('createTextHeader') - ->with('First', 'one') - ->will($this->returnValue($this->createHeader('First', 'one'))); - $factory->expects($this->at(4)) - ->method('createTextHeader') - ->with('Second', 'two') - ->will($this->returnValue($this->createHeader('Second', 'two'))); - - $set = $this->createSet($factory); - $set->addTextHeader('Fourth', 'four'); - $set->addTextHeader('Fifth', 'five'); - $set->addTextHeader('Third', 'three'); - $set->addTextHeader('First', 'one'); - $set->addTextHeader('Second', 'two'); - - $set->defineOrdering(['First', 'Second', 'Third']); - - $this->assertEquals( - "First: one\r\n". - "Second: two\r\n". - "Third: three\r\n". - "Fourth: four\r\n". - "Fifth: five\r\n", - $set->toString() - ); - } - - public function testSettingCharsetNotifiesAlreadyExistingHeaders() - { - $subject = $this->createHeader('Subject', 'some text'); - $xHeader = $this->createHeader('X-Header', 'some text'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createTextHeader') - ->with('Subject', 'some text') - ->will($this->returnValue($subject)); - $factory->expects($this->at(1)) - ->method('createTextHeader') - ->with('X-Header', 'some text') - ->will($this->returnValue($xHeader)); - $subject->expects($this->once()) - ->method('setCharset') - ->with('utf-8'); - $xHeader->expects($this->once()) - ->method('setCharset') - ->with('utf-8'); - - $set = $this->createSet($factory); - $set->addTextHeader('Subject', 'some text'); - $set->addTextHeader('X-Header', 'some text'); - - $set->setCharset('utf-8'); - } - - public function testCharsetChangeNotifiesAlreadyExistingHeaders() - { - $subject = $this->createHeader('Subject', 'some text'); - $xHeader = $this->createHeader('X-Header', 'some text'); - $factory = $this->createFactory(); - $factory->expects($this->at(0)) - ->method('createTextHeader') - ->with('Subject', 'some text') - ->will($this->returnValue($subject)); - $factory->expects($this->at(1)) - ->method('createTextHeader') - ->with('X-Header', 'some text') - ->will($this->returnValue($xHeader)); - $subject->expects($this->once()) - ->method('setCharset') - ->with('utf-8'); - $xHeader->expects($this->once()) - ->method('setCharset') - ->with('utf-8'); - - $set = $this->createSet($factory); - $set->addTextHeader('Subject', 'some text'); - $set->addTextHeader('X-Header', 'some text'); - - $set->charsetChanged('utf-8'); - } - - public function testCharsetChangeNotifiesFactory() - { - $factory = $this->createFactory(); - $factory->expects($this->once()) - ->method('charsetChanged') - ->with('utf-8'); - - $set = $this->createSet($factory); - - $set->setCharset('utf-8'); - } - - private function createSet($factory) - { - return new Swift_Mime_SimpleHeaderSet($factory); - } - - private function createFactory() - { - return $this->getMockBuilder('Swift_Mime_SimpleHeaderFactory')->disableOriginalConstructor()->getMock(); - } - - private function createHeader($name, $body = '') - { - $header = $this->getMockBuilder('Swift_Mime_Header')->getMock(); - $header->expects($this->any()) - ->method('getFieldName') - ->will($this->returnValue($name)); - $header->expects($this->any()) - ->method('toString') - ->will($this->returnValue(sprintf("%s: %s\r\n", $name, $body))); - $header->expects($this->any()) - ->method('getFieldBody') - ->will($this->returnValue($body)); - - return $header; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMessageTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMessageTest.php deleted file mode 100644 index c5662cb..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMessageTest.php +++ /dev/null @@ -1,837 +0,0 @@ -addToAssertionCount(1); - } - - public function testNestingLevelIsTop() - { - $message = $this->createMessage($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals( - Swift_Mime_SimpleMimeEntity::LEVEL_TOP, $message->getNestingLevel() - ); - } - - public function testDateIsReturnedFromHeader() - { - $dateTime = new DateTimeImmutable(); - - $date = $this->createHeader('Date', $dateTime); - $message = $this->createMessage( - $this->createHeaderSet(['Date' => $date]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals($dateTime, $message->getDate()); - } - - public function testDateIsSetInHeader() - { - $dateTime = new DateTimeImmutable(); - - $date = $this->createHeader('Date', new DateTimeImmutable(), [], false); - $date->shouldReceive('setFieldBodyModel') - ->once() - ->with($dateTime); - $date->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $message = $this->createMessage( - $this->createHeaderSet(['Date' => $date]), - $this->createEncoder(), $this->createCache() - ); - $message->setDate($dateTime); - } - - public function testDateHeaderIsCreatedIfNonePresent() - { - $dateTime = new DateTimeImmutable(); - - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addDateHeader') - ->once() - ->with('Date', $dateTime); - $headers->shouldReceive('addDateHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setDate($dateTime); - } - - public function testDateHeaderIsAddedDuringConstruction() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addDateHeader') - ->once() - ->with('Date', Mockery::type('DateTimeImmutable')); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - } - - public function testIdIsReturnedFromHeader() - { - /* -- RFC 2045, 7. - In constructing a high-level user agent, it may be desirable to allow - one body to make reference to another. Accordingly, bodies may be - labelled using the "Content-ID" header field, which is syntactically - identical to the "Message-ID" header field - */ - - $messageId = $this->createHeader('Message-ID', 'a@b'); - $message = $this->createMessage( - $this->createHeaderSet(['Message-ID' => $messageId]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals('a@b', $message->getId()); - } - - public function testIdIsSetInHeader() - { - $messageId = $this->createHeader('Message-ID', 'a@b', [], false); - $messageId->shouldReceive('setFieldBodyModel') - ->once() - ->with('x@y'); - $messageId->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $message = $this->createMessage( - $this->createHeaderSet(['Message-ID' => $messageId]), - $this->createEncoder(), $this->createCache() - ); - $message->setId('x@y'); - } - - public function testIdIsAutoGenerated() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addIdHeader') - ->once() - ->with('Message-ID', '/^.*?@.*?$/D'); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - } - - public function testSubjectIsReturnedFromHeader() - { - /* -- RFC 2822, 3.6.5. - */ - - $subject = $this->createHeader('Subject', 'example subject'); - $message = $this->createMessage( - $this->createHeaderSet(['Subject' => $subject]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals('example subject', $message->getSubject()); - } - - public function testSubjectIsSetInHeader() - { - $subject = $this->createHeader('Subject', '', [], false); - $subject->shouldReceive('setFieldBodyModel') - ->once() - ->with('foo'); - - $message = $this->createMessage( - $this->createHeaderSet(['Subject' => $subject]), - $this->createEncoder(), $this->createCache() - ); - $message->setSubject('foo'); - } - - public function testSubjectHeaderIsCreatedIfNotPresent() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addTextHeader') - ->once() - ->with('Subject', 'example subject'); - $headers->shouldReceive('addTextHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setSubject('example subject'); - } - - public function testReturnPathIsReturnedFromHeader() - { - /* -- RFC 2822, 3.6.7. - */ - - $path = $this->createHeader('Return-Path', 'bounces@domain'); - $message = $this->createMessage( - $this->createHeaderSet(['Return-Path' => $path]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals('bounces@domain', $message->getReturnPath()); - } - - public function testReturnPathIsSetInHeader() - { - $path = $this->createHeader('Return-Path', '', [], false); - $path->shouldReceive('setFieldBodyModel') - ->once() - ->with('bounces@domain'); - - $message = $this->createMessage( - $this->createHeaderSet(['Return-Path' => $path]), - $this->createEncoder(), $this->createCache() - ); - $message->setReturnPath('bounces@domain'); - } - - public function testReturnPathHeaderIsAddedIfNoneSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addPathHeader') - ->once() - ->with('Return-Path', 'bounces@domain'); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setReturnPath('bounces@domain'); - } - - public function testSenderIsReturnedFromHeader() - { - /* -- RFC 2822, 3.6.2. - */ - - $sender = $this->createHeader('Sender', ['sender@domain' => 'Name']); - $message = $this->createMessage( - $this->createHeaderSet(['Sender' => $sender]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals(['sender@domain' => 'Name'], $message->getSender()); - } - - public function testSenderIsSetInHeader() - { - $sender = $this->createHeader('Sender', ['sender@domain' => 'Name'], - [], false - ); - $sender->shouldReceive('setFieldBodyModel') - ->once() - ->with(['other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['Sender' => $sender]), - $this->createEncoder(), $this->createCache() - ); - $message->setSender(['other@domain' => 'Other']); - } - - public function testSenderHeaderIsAddedIfNoneSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('Sender', (array) 'sender@domain'); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setSender('sender@domain'); - } - - public function testNameCanBeUsedInSenderHeader() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('Sender', ['sender@domain' => 'Name']); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setSender('sender@domain', 'Name'); - } - - public function testFromIsReturnedFromHeader() - { - /* -- RFC 2822, 3.6.2. - */ - - $from = $this->createHeader('From', ['from@domain' => 'Name']); - $message = $this->createMessage( - $this->createHeaderSet(['From' => $from]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals(['from@domain' => 'Name'], $message->getFrom()); - } - - public function testFromIsSetInHeader() - { - $from = $this->createHeader('From', ['from@domain' => 'Name'], - [], false - ); - $from->shouldReceive('setFieldBodyModel') - ->once() - ->with(['other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['From' => $from]), - $this->createEncoder(), $this->createCache() - ); - $message->setFrom(['other@domain' => 'Other']); - } - - public function testFromIsAddedToHeadersDuringAddFrom() - { - $from = $this->createHeader('From', ['from@domain' => 'Name'], - [], false - ); - $from->shouldReceive('setFieldBodyModel') - ->once() - ->with(['from@domain' => 'Name', 'other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['From' => $from]), - $this->createEncoder(), $this->createCache() - ); - $message->addFrom('other@domain', 'Other'); - } - - public function testFromHeaderIsAddedIfNoneSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('From', (array) 'from@domain'); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setFrom('from@domain'); - } - - public function testPersonalNameCanBeUsedInFromAddress() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('From', ['from@domain' => 'Name']); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setFrom('from@domain', 'Name'); - } - - public function testReplyToIsReturnedFromHeader() - { - /* -- RFC 2822, 3.6.2. - */ - - $reply = $this->createHeader('Reply-To', ['reply@domain' => 'Name']); - $message = $this->createMessage( - $this->createHeaderSet(['Reply-To' => $reply]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals(['reply@domain' => 'Name'], $message->getReplyTo()); - } - - public function testReplyToIsSetInHeader() - { - $reply = $this->createHeader('Reply-To', ['reply@domain' => 'Name'], - [], false - ); - $reply->shouldReceive('setFieldBodyModel') - ->once() - ->with(['other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['Reply-To' => $reply]), - $this->createEncoder(), $this->createCache() - ); - $message->setReplyTo(['other@domain' => 'Other']); - } - - public function testReplyToIsAddedToHeadersDuringAddReplyTo() - { - $replyTo = $this->createHeader('Reply-To', ['from@domain' => 'Name'], - [], false - ); - $replyTo->shouldReceive('setFieldBodyModel') - ->once() - ->with(['from@domain' => 'Name', 'other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['Reply-To' => $replyTo]), - $this->createEncoder(), $this->createCache() - ); - $message->addReplyTo('other@domain', 'Other'); - } - - public function testReplyToHeaderIsAddedIfNoneSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('Reply-To', (array) 'reply@domain'); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setReplyTo('reply@domain'); - } - - public function testNameCanBeUsedInReplyTo() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('Reply-To', ['reply@domain' => 'Name']); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setReplyTo('reply@domain', 'Name'); - } - - public function testToIsReturnedFromHeader() - { - /* -- RFC 2822, 3.6.3. - */ - - $to = $this->createHeader('To', ['to@domain' => 'Name']); - $message = $this->createMessage( - $this->createHeaderSet(['To' => $to]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals(['to@domain' => 'Name'], $message->getTo()); - } - - public function testToIsSetInHeader() - { - $to = $this->createHeader('To', ['to@domain' => 'Name'], - [], false - ); - $to->shouldReceive('setFieldBodyModel') - ->once() - ->with(['other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['To' => $to]), - $this->createEncoder(), $this->createCache() - ); - $message->setTo(['other@domain' => 'Other']); - } - - public function testToIsAddedToHeadersDuringAddTo() - { - $to = $this->createHeader('To', ['from@domain' => 'Name'], - [], false - ); - $to->shouldReceive('setFieldBodyModel') - ->once() - ->with(['from@domain' => 'Name', 'other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['To' => $to]), - $this->createEncoder(), $this->createCache() - ); - $message->addTo('other@domain', 'Other'); - } - - public function testToHeaderIsAddedIfNoneSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('To', (array) 'to@domain'); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setTo('to@domain'); - } - - public function testNameCanBeUsedInToHeader() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('To', ['to@domain' => 'Name']); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setTo('to@domain', 'Name'); - } - - public function testCcIsReturnedFromHeader() - { - /* -- RFC 2822, 3.6.3. - */ - - $cc = $this->createHeader('Cc', ['cc@domain' => 'Name']); - $message = $this->createMessage( - $this->createHeaderSet(['Cc' => $cc]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals(['cc@domain' => 'Name'], $message->getCc()); - } - - public function testCcIsSetInHeader() - { - $cc = $this->createHeader('Cc', ['cc@domain' => 'Name'], - [], false - ); - $cc->shouldReceive('setFieldBodyModel') - ->once() - ->with(['other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['Cc' => $cc]), - $this->createEncoder(), $this->createCache() - ); - $message->setCc(['other@domain' => 'Other']); - } - - public function testCcIsAddedToHeadersDuringAddCc() - { - $cc = $this->createHeader('Cc', ['from@domain' => 'Name'], - [], false - ); - $cc->shouldReceive('setFieldBodyModel') - ->once() - ->with(['from@domain' => 'Name', 'other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['Cc' => $cc]), - $this->createEncoder(), $this->createCache() - ); - $message->addCc('other@domain', 'Other'); - } - - public function testCcHeaderIsAddedIfNoneSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('Cc', (array) 'cc@domain'); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setCc('cc@domain'); - } - - public function testNameCanBeUsedInCcHeader() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('Cc', ['cc@domain' => 'Name']); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setCc('cc@domain', 'Name'); - } - - public function testBccIsReturnedFromHeader() - { - /* -- RFC 2822, 3.6.3. - */ - - $bcc = $this->createHeader('Bcc', ['bcc@domain' => 'Name']); - $message = $this->createMessage( - $this->createHeaderSet(['Bcc' => $bcc]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals(['bcc@domain' => 'Name'], $message->getBcc()); - } - - public function testBccIsSetInHeader() - { - $bcc = $this->createHeader('Bcc', ['bcc@domain' => 'Name'], - [], false - ); - $bcc->shouldReceive('setFieldBodyModel') - ->once() - ->with(['other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['Bcc' => $bcc]), - $this->createEncoder(), $this->createCache() - ); - $message->setBcc(['other@domain' => 'Other']); - } - - public function testBccIsAddedToHeadersDuringAddBcc() - { - $bcc = $this->createHeader('Bcc', ['from@domain' => 'Name'], - [], false - ); - $bcc->shouldReceive('setFieldBodyModel') - ->once() - ->with(['from@domain' => 'Name', 'other@domain' => 'Other']); - - $message = $this->createMessage( - $this->createHeaderSet(['Bcc' => $bcc]), - $this->createEncoder(), $this->createCache() - ); - $message->addBcc('other@domain', 'Other'); - } - - public function testBccHeaderIsAddedIfNoneSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('Bcc', (array) 'bcc@domain'); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setBcc('bcc@domain'); - } - - public function testNameCanBeUsedInBcc() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('Bcc', ['bcc@domain' => 'Name']); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setBcc('bcc@domain', 'Name'); - } - - public function testPriorityIsReadFromHeader() - { - $prio = $this->createHeader('X-Priority', '2 (High)'); - $message = $this->createMessage( - $this->createHeaderSet(['X-Priority' => $prio]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals(2, $message->getPriority()); - } - - public function testPriorityIsSetInHeader() - { - $prio = $this->createHeader('X-Priority', '2 (High)', [], false); - $prio->shouldReceive('setFieldBodyModel') - ->once() - ->with('5 (Lowest)'); - - $message = $this->createMessage( - $this->createHeaderSet(['X-Priority' => $prio]), - $this->createEncoder(), $this->createCache() - ); - $message->setPriority($message::PRIORITY_LOWEST); - } - - public function testPriorityHeaderIsAddedIfNoneSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addTextHeader') - ->once() - ->with('X-Priority', '4 (Low)'); - $headers->shouldReceive('addTextHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setPriority($message::PRIORITY_LOW); - } - - public function testReadReceiptAddressReadFromHeader() - { - $rcpt = $this->createHeader('Disposition-Notification-To', - ['chris@swiftmailer.org' => 'Chris'] - ); - $message = $this->createMessage( - $this->createHeaderSet(['Disposition-Notification-To' => $rcpt]), - $this->createEncoder(), $this->createCache() - ); - $this->assertEquals(['chris@swiftmailer.org' => 'Chris'], - $message->getReadReceiptTo() - ); - } - - public function testReadReceiptIsSetInHeader() - { - $rcpt = $this->createHeader('Disposition-Notification-To', [], [], false); - $rcpt->shouldReceive('setFieldBodyModel') - ->once() - ->with('mark@swiftmailer.org'); - - $message = $this->createMessage( - $this->createHeaderSet(['Disposition-Notification-To' => $rcpt]), - $this->createEncoder(), $this->createCache() - ); - $message->setReadReceiptTo('mark@swiftmailer.org'); - } - - public function testReadReceiptHeaderIsAddedIfNoneSet() - { - $headers = $this->createHeaderSet([], false); - $headers->shouldReceive('addMailboxHeader') - ->once() - ->with('Disposition-Notification-To', 'mark@swiftmailer.org'); - $headers->shouldReceive('addMailboxHeader') - ->zeroOrMoreTimes(); - - $message = $this->createMessage($headers, $this->createEncoder(), - $this->createCache() - ); - $message->setReadReceiptTo('mark@swiftmailer.org'); - } - - public function testChildrenCanBeAttached() - { - $child1 = $this->createChild(); - $child2 = $this->createChild(); - - $message = $this->createMessage($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - - $message->attach($child1); - $message->attach($child2); - - $this->assertEquals([$child1, $child2], $message->getChildren()); - } - - public function testChildrenCanBeDetached() - { - $child1 = $this->createChild(); - $child2 = $this->createChild(); - - $message = $this->createMessage($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - - $message->attach($child1); - $message->attach($child2); - - $message->detach($child1); - - $this->assertEquals([$child2], $message->getChildren()); - } - - public function testEmbedAttachesChild() - { - $child = $this->createChild(); - - $message = $this->createMessage($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - - $message->embed($child); - - $this->assertEquals([$child], $message->getChildren()); - } - - public function testEmbedReturnsValidCid() - { - $child = $this->createChild(Swift_Mime_SimpleMimeEntity::LEVEL_RELATED, '', - false - ); - $child->shouldReceive('getId') - ->zeroOrMoreTimes() - ->andReturn('foo@bar'); - - $message = $this->createMessage($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - - $this->assertEquals('cid:foo@bar', $message->embed($child)); - } - - public function testFluidInterface() - { - $child = $this->createChild(); - $message = $this->createMessage($this->createHeaderSet(), - $this->createEncoder(), $this->createCache() - ); - $this->assertSame($message, - $message - ->setContentType('text/plain') - ->setEncoder($this->createEncoder()) - ->setId('foo@bar') - ->setDescription('my description') - ->setMaxLineLength(998) - ->setBody('xx') - ->setBoundary('xyz') - ->setChildren([]) - ->setCharset('iso-8859-1') - ->setFormat('flowed') - ->setDelSp(false) - ->setSubject('subj') - ->setDate(new DateTimeImmutable()) - ->setReturnPath('foo@bar') - ->setSender('foo@bar') - ->setFrom(['x@y' => 'XY']) - ->setReplyTo(['ab@cd' => 'ABCD']) - ->setTo(['chris@site.tld', 'mark@site.tld']) - ->setCc('john@somewhere.tld') - ->setBcc(['one@site', 'two@site' => 'Two']) - ->setPriority($message::PRIORITY_LOW) - ->setReadReceiptTo('a@b') - ->attach($child) - ->detach($child) - ); - } - - //abstract - protected function createEntity($headers, $encoder, $cache) - { - return $this->createMessage($headers, $encoder, $cache); - } - - protected function createMimePart($headers, $encoder, $cache) - { - return $this->createMessage($headers, $encoder, $cache); - } - - private function createMessage($headers, $encoder, $cache) - { - $idGenerator = new Swift_Mime_IdGenerator('example.com'); - - return new Swift_Mime_SimpleMessage($headers, $encoder, $cache, $idGenerator); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMimeEntityTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMimeEntityTest.php deleted file mode 100644 index 24578ed..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMimeEntityTest.php +++ /dev/null @@ -1,12 +0,0 @@ -assertEquals(10, $plugin->getThreshold()); - $plugin->setThreshold(100); - $this->assertEquals(100, $plugin->getThreshold()); - } - - public function testSleepTimeCanBeSetAndFetched() - { - $plugin = new Swift_Plugins_AntiFloodPlugin(10, 5); - $this->assertEquals(5, $plugin->getSleepTime()); - $plugin->setSleepTime(1); - $this->assertEquals(1, $plugin->getSleepTime()); - } - - public function testPluginStopsConnectionAfterThreshold() - { - $transport = $this->createTransport(); - $transport->expects($this->once()) - ->method('start'); - $transport->expects($this->once()) - ->method('stop'); - - $evt = $this->createSendEvent($transport); - - $plugin = new Swift_Plugins_AntiFloodPlugin(10); - for ($i = 0; $i < 12; ++$i) { - $plugin->sendPerformed($evt); - } - } - - public function testPluginCanStopAndStartMultipleTimes() - { - $transport = $this->createTransport(); - $transport->expects($this->exactly(5)) - ->method('start'); - $transport->expects($this->exactly(5)) - ->method('stop'); - - $evt = $this->createSendEvent($transport); - - $plugin = new Swift_Plugins_AntiFloodPlugin(2); - for ($i = 0; $i < 11; ++$i) { - $plugin->sendPerformed($evt); - } - } - - public function testPluginCanSleepDuringRestart() - { - $sleeper = $this->getMockBuilder('Swift_Plugins_Sleeper')->getMock(); - $sleeper->expects($this->once()) - ->method('sleep') - ->with(10); - - $transport = $this->createTransport(); - $transport->expects($this->once()) - ->method('start'); - $transport->expects($this->once()) - ->method('stop'); - - $evt = $this->createSendEvent($transport); - - $plugin = new Swift_Plugins_AntiFloodPlugin(99, 10, $sleeper); - for ($i = 0; $i < 101; ++$i) { - $plugin->sendPerformed($evt); - } - } - - private function createTransport() - { - return $this->getMockBuilder('Swift_Transport')->getMock(); - } - - private function createSendEvent($transport) - { - $evt = $this->getMockBuilder('Swift_Events_SendEvent') - ->disableOriginalConstructor() - ->getMock(); - $evt->expects($this->any()) - ->method('getSource') - ->will($this->returnValue($transport)); - $evt->expects($this->any()) - ->method('getTransport') - ->will($this->returnValue($transport)); - - return $evt; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/BandwidthMonitorPluginTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/BandwidthMonitorPluginTest.php deleted file mode 100644 index cbacfe2..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/BandwidthMonitorPluginTest.php +++ /dev/null @@ -1,128 +0,0 @@ -monitor = new Swift_Plugins_BandwidthMonitorPlugin(); - } - - public function testBytesOutIncreasesWhenCommandsSent() - { - $evt = $this->createCommandEvent("RCPT TO:\r\n"); - - $this->assertEquals(0, $this->monitor->getBytesOut()); - $this->monitor->commandSent($evt); - $this->assertEquals(23, $this->monitor->getBytesOut()); - $this->monitor->commandSent($evt); - $this->assertEquals(46, $this->monitor->getBytesOut()); - } - - public function testBytesInIncreasesWhenResponsesReceived() - { - $evt = $this->createResponseEvent("250 Ok\r\n"); - - $this->assertEquals(0, $this->monitor->getBytesIn()); - $this->monitor->responseReceived($evt); - $this->assertEquals(8, $this->monitor->getBytesIn()); - $this->monitor->responseReceived($evt); - $this->assertEquals(16, $this->monitor->getBytesIn()); - } - - public function testCountersCanBeReset() - { - $evt = $this->createResponseEvent("250 Ok\r\n"); - - $this->assertEquals(0, $this->monitor->getBytesIn()); - $this->monitor->responseReceived($evt); - $this->assertEquals(8, $this->monitor->getBytesIn()); - $this->monitor->responseReceived($evt); - $this->assertEquals(16, $this->monitor->getBytesIn()); - - $evt = $this->createCommandEvent("RCPT TO:\r\n"); - - $this->assertEquals(0, $this->monitor->getBytesOut()); - $this->monitor->commandSent($evt); - $this->assertEquals(23, $this->monitor->getBytesOut()); - $this->monitor->commandSent($evt); - $this->assertEquals(46, $this->monitor->getBytesOut()); - - $this->monitor->reset(); - - $this->assertEquals(0, $this->monitor->getBytesOut()); - $this->assertEquals(0, $this->monitor->getBytesIn()); - } - - public function testBytesOutIncreasesAccordingToMessageLength() - { - $message = $this->createMessageWithByteCount(6); - $evt = $this->createSendEvent($message); - - $this->assertEquals(0, $this->monitor->getBytesOut()); - $this->monitor->sendPerformed($evt); - $this->assertEquals(6, $this->monitor->getBytesOut()); - $this->monitor->sendPerformed($evt); - $this->assertEquals(12, $this->monitor->getBytesOut()); - } - - private function createSendEvent($message) - { - $evt = $this->getMockBuilder('Swift_Events_SendEvent') - ->disableOriginalConstructor() - ->getMock(); - $evt->expects($this->any()) - ->method('getMessage') - ->will($this->returnValue($message)); - - return $evt; - } - - private function createCommandEvent($command) - { - $evt = $this->getMockBuilder('Swift_Events_CommandEvent') - ->disableOriginalConstructor() - ->getMock(); - $evt->expects($this->any()) - ->method('getCommand') - ->will($this->returnValue($command)); - - return $evt; - } - - private function createResponseEvent($response) - { - $evt = $this->getMockBuilder('Swift_Events_ResponseEvent') - ->disableOriginalConstructor() - ->getMock(); - $evt->expects($this->any()) - ->method('getResponse') - ->will($this->returnValue($response)); - - return $evt; - } - - private function createMessageWithByteCount($bytes) - { - $this->bytes = $bytes; - $msg = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); - $msg->expects($this->any()) - ->method('toByteStream') - ->will($this->returnCallback([$this, 'write'])); - /* $this->checking(Expectations::create() - -> ignoring($msg)->toByteStream(any()) -> calls(array($this, 'write')) - ); */ - - return $msg; - } - - public function write($is) - { - for ($i = 0; $i < $this->bytes; ++$i) { - $is->write('x'); - } - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/DecoratorPluginTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/DecoratorPluginTest.php deleted file mode 100644 index 97b1d95..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/DecoratorPluginTest.php +++ /dev/null @@ -1,284 +0,0 @@ -createMessage( - $this->createHeaders(), - ['zip@button.tld' => 'Zipathon'], - ['chris.corbyn@swiftmailer.org' => 'Chris'], - 'Subject', - 'Hello {name}, you are customer #{id}' - ); - $message->shouldReceive('setBody') - ->once() - ->with('Hello Zip, you are customer #456'); - $message->shouldReceive('setBody') - ->zeroOrMoreTimes(); - - $plugin = $this->createPlugin( - ['zip@button.tld' => ['{name}' => 'Zip', '{id}' => '456']] - ); - - $evt = $this->createSendEvent($message); - - $plugin->beforeSendPerformed($evt); - $plugin->sendPerformed($evt); - } - - public function testReplacementsCanBeAppliedToSameMessageMultipleTimes() - { - $message = $this->createMessage( - $this->createHeaders(), - ['zip@button.tld' => 'Zipathon', 'foo@bar.tld' => 'Foo'], - ['chris.corbyn@swiftmailer.org' => 'Chris'], - 'Subject', - 'Hello {name}, you are customer #{id}' - ); - $message->shouldReceive('setBody') - ->once() - ->with('Hello Zip, you are customer #456'); - $message->shouldReceive('setBody') - ->once() - ->with('Hello {name}, you are customer #{id}'); - $message->shouldReceive('setBody') - ->once() - ->with('Hello Foo, you are customer #123'); - $message->shouldReceive('setBody') - ->zeroOrMoreTimes(); - - $plugin = $this->createPlugin( - [ - 'foo@bar.tld' => ['{name}' => 'Foo', '{id}' => '123'], - 'zip@button.tld' => ['{name}' => 'Zip', '{id}' => '456'], - ] - ); - - $evt = $this->createSendEvent($message); - - $plugin->beforeSendPerformed($evt); - $plugin->sendPerformed($evt); - $plugin->beforeSendPerformed($evt); - $plugin->sendPerformed($evt); - } - - public function testReplacementsCanBeMadeInHeaders() - { - $headers = $this->createHeaders([ - $returnPathHeader = $this->createHeader('Return-Path', 'foo-{id}@swiftmailer.org'), - $toHeader = $this->createHeader('Subject', 'A message for {name}!'), - ]); - - $message = $this->createMessage( - $headers, - ['zip@button.tld' => 'Zipathon'], - ['chris.corbyn@swiftmailer.org' => 'Chris'], - 'A message for {name}!', - 'Hello {name}, you are customer #{id}' - ); - - $message->shouldReceive('setBody') - ->once() - ->with('Hello Zip, you are customer #456'); - $toHeader->shouldReceive('setFieldBodyModel') - ->once() - ->with('A message for Zip!'); - $returnPathHeader->shouldReceive('setFieldBodyModel') - ->once() - ->with('foo-456@swiftmailer.org'); - $message->shouldReceive('setBody') - ->zeroOrMoreTimes(); - $toHeader->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - $returnPathHeader->shouldReceive('setFieldBodyModel') - ->zeroOrMoreTimes(); - - $plugin = $this->createPlugin( - ['zip@button.tld' => ['{name}' => 'Zip', '{id}' => '456']] - ); - $evt = $this->createSendEvent($message); - - $plugin->beforeSendPerformed($evt); - $plugin->sendPerformed($evt); - } - - public function testReplacementsAreMadeOnSubparts() - { - $part1 = $this->createPart('text/plain', 'Your name is {name}?', '1@x'); - $part2 = $this->createPart('text/html', 'Your name is {name}?', '2@x'); - $message = $this->createMessage( - $this->createHeaders(), - ['zip@button.tld' => 'Zipathon'], - ['chris.corbyn@swiftmailer.org' => 'Chris'], - 'A message for {name}!', - 'Subject' - ); - $message->shouldReceive('getChildren') - ->zeroOrMoreTimes() - ->andReturn([$part1, $part2]); - $part1->shouldReceive('setBody') - ->once() - ->with('Your name is Zip?'); - $part2->shouldReceive('setBody') - ->once() - ->with('Your name is Zip?'); - $part1->shouldReceive('setBody') - ->zeroOrMoreTimes(); - $part2->shouldReceive('setBody') - ->zeroOrMoreTimes(); - - $plugin = $this->createPlugin( - ['zip@button.tld' => ['{name}' => 'Zip', '{id}' => '456']] - ); - - $evt = $this->createSendEvent($message); - - $plugin->beforeSendPerformed($evt); - $plugin->sendPerformed($evt); - } - - public function testReplacementsCanBeTakenFromCustomReplacementsObject() - { - $message = $this->createMessage( - $this->createHeaders(), - ['foo@bar' => 'Foobar', 'zip@zap' => 'Zip zap'], - ['chris.corbyn@swiftmailer.org' => 'Chris'], - 'Subject', - 'Something {a}' - ); - - $replacements = $this->createReplacements(); - - $message->shouldReceive('setBody') - ->once() - ->with('Something b'); - $message->shouldReceive('setBody') - ->once() - ->with('Something c'); - $message->shouldReceive('setBody') - ->zeroOrMoreTimes(); - $replacements->shouldReceive('getReplacementsFor') - ->once() - ->with('foo@bar') - ->andReturn(['{a}' => 'b']); - $replacements->shouldReceive('getReplacementsFor') - ->once() - ->with('zip@zap') - ->andReturn(['{a}' => 'c']); - - $plugin = $this->createPlugin($replacements); - - $evt = $this->createSendEvent($message); - - $plugin->beforeSendPerformed($evt); - $plugin->sendPerformed($evt); - $plugin->beforeSendPerformed($evt); - $plugin->sendPerformed($evt); - } - - public function testReplacementsWithAMessageWithImmutableDate() - { - $message = (new Swift_Message('subject foo')) - ->setBody('body foo') - ->addTo('somebody@hostname.tld') - ->addFrom('somebody@hostname.tld'); - - $evt = $this->createSendEvent($message); - - $plugin = $this->createPlugin(['somebody@hostname.tld' => ['foo' => 'bar']]); - - $plugin->beforeSendPerformed($evt); - - $this->assertEquals('subject bar', $message->getSubject()); - $this->assertEquals('body bar', $message->getBody()); - } - - private function createMessage($headers, $to = [], $from = null, $subject = null, - $body = null) - { - $message = $this->getMockery('Swift_Mime_SimpleMessage')->shouldIgnoreMissing(); - foreach ($to as $addr => $name) { - $message->shouldReceive('getTo') - ->once() - ->andReturn([$addr => $name]); - } - $message->shouldReceive('getHeaders') - ->zeroOrMoreTimes() - ->andReturn($headers); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn($from); - $message->shouldReceive('getSubject') - ->zeroOrMoreTimes() - ->andReturn($subject); - $message->shouldReceive('getBody') - ->zeroOrMoreTimes() - ->andReturn($body); - - return $message; - } - - private function createPlugin($replacements) - { - return new Swift_Plugins_DecoratorPlugin($replacements); - } - - private function createReplacements() - { - return $this->getMockery('Swift_Plugins_Decorator_Replacements')->shouldIgnoreMissing(); - } - - private function createSendEvent(Swift_Mime_SimpleMessage $message) - { - $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $evt->shouldReceive('getMessage') - ->zeroOrMoreTimes() - ->andReturn($message); - - return $evt; - } - - private function createPart($type, $body, $id) - { - $part = $this->getMockery('Swift_Mime_SimpleMimeEntity')->shouldIgnoreMissing(); - $part->shouldReceive('getContentType') - ->zeroOrMoreTimes() - ->andReturn($type); - $part->shouldReceive('getBody') - ->zeroOrMoreTimes() - ->andReturn($body); - $part->shouldReceive('getId') - ->zeroOrMoreTimes() - ->andReturn($id); - - return $part; - } - - private function createHeaders($headers = []) - { - $set = $this->getMockery('Swift_Mime_SimpleHeaderSet')->shouldIgnoreMissing(); - $set->shouldReceive('getAll') - ->zeroOrMoreTimes() - ->andReturn($headers); - - foreach ($headers as $header) { - $set->set($header); - } - - return $set; - } - - private function createHeader($name, $body = '') - { - $header = $this->getMockery('Swift_Mime_Header')->shouldIgnoreMissing(); - $header->shouldReceive('getFieldName') - ->zeroOrMoreTimes() - ->andReturn($name); - $header->shouldReceive('getFieldBodyModel') - ->zeroOrMoreTimes() - ->andReturn($body); - - return $header; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/LoggerPluginTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/LoggerPluginTest.php deleted file mode 100644 index d66021c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/LoggerPluginTest.php +++ /dev/null @@ -1,188 +0,0 @@ -createLogger(); - $logger->expects($this->once()) - ->method('add') - ->with('foo'); - - $plugin = $this->createPlugin($logger); - $plugin->add('foo'); - } - - public function testLoggerDelegatesDumpingEntries() - { - $logger = $this->createLogger(); - $logger->expects($this->once()) - ->method('dump') - ->will($this->returnValue('foobar')); - - $plugin = $this->createPlugin($logger); - $this->assertEquals('foobar', $plugin->dump()); - } - - public function testLoggerDelegatesClearingEntries() - { - $logger = $this->createLogger(); - $logger->expects($this->once()) - ->method('clear'); - - $plugin = $this->createPlugin($logger); - $plugin->clear(); - } - - public function testCommandIsSentToLogger() - { - $evt = $this->createCommandEvent("foo\r\n"); - $logger = $this->createLogger(); - $logger->expects($this->once()) - ->method('add') - ->with(static::regExp('~foo\r\n~')); - - $plugin = $this->createPlugin($logger); - $plugin->commandSent($evt); - } - - public function testResponseIsSentToLogger() - { - $evt = $this->createResponseEvent("354 Go ahead\r\n"); - $logger = $this->createLogger(); - $logger->expects($this->once()) - ->method('add') - ->with(static::regExp('~354 Go ahead\r\n~')); - - $plugin = $this->createPlugin($logger); - $plugin->responseReceived($evt); - } - - public function testTransportBeforeStartChangeIsSentToLogger() - { - $evt = $this->createTransportChangeEvent(); - $logger = $this->createLogger(); - $logger->expects($this->once()) - ->method('add') - ->with($this->anything()); - - $plugin = $this->createPlugin($logger); - $plugin->beforeTransportStarted($evt); - } - - public function testTransportStartChangeIsSentToLogger() - { - $evt = $this->createTransportChangeEvent(); - $logger = $this->createLogger(); - $logger->expects($this->once()) - ->method('add') - ->with($this->anything()); - - $plugin = $this->createPlugin($logger); - $plugin->transportStarted($evt); - } - - public function testTransportStopChangeIsSentToLogger() - { - $evt = $this->createTransportChangeEvent(); - $logger = $this->createLogger(); - $logger->expects($this->once()) - ->method('add') - ->with($this->anything()); - - $plugin = $this->createPlugin($logger); - $plugin->transportStopped($evt); - } - - public function testTransportBeforeStopChangeIsSentToLogger() - { - $evt = $this->createTransportChangeEvent(); - $logger = $this->createLogger(); - $logger->expects($this->once()) - ->method('add') - ->with($this->anything()); - - $plugin = $this->createPlugin($logger); - $plugin->beforeTransportStopped($evt); - } - - public function testExceptionsArePassedToDelegateAndLeftToBubbleUp() - { - $transport = $this->createTransport(); - $evt = $this->createTransportExceptionEvent(); - $logger = $this->createLogger(); - $logger->expects($this->once()) - ->method('add') - ->with($this->anything()); - - $plugin = $this->createPlugin($logger); - try { - $plugin->exceptionThrown($evt); - $this->fail('Exception should bubble up.'); - } catch (Swift_TransportException $ex) { - } - } - - private function createLogger() - { - return $this->getMockBuilder('Swift_Plugins_Logger')->getMock(); - } - - private function createPlugin($logger) - { - return new Swift_Plugins_LoggerPlugin($logger); - } - - private function createCommandEvent($command) - { - $evt = $this->getMockBuilder('Swift_Events_CommandEvent') - ->disableOriginalConstructor() - ->getMock(); - $evt->expects($this->any()) - ->method('getCommand') - ->will($this->returnValue($command)); - - return $evt; - } - - private function createResponseEvent($response) - { - $evt = $this->getMockBuilder('Swift_Events_ResponseEvent') - ->disableOriginalConstructor() - ->getMock(); - $evt->expects($this->any()) - ->method('getResponse') - ->will($this->returnValue($response)); - - return $evt; - } - - private function createTransport() - { - return $this->getMockBuilder('Swift_Transport')->getMock(); - } - - private function createTransportChangeEvent() - { - $evt = $this->getMockBuilder('Swift_Events_TransportChangeEvent') - ->disableOriginalConstructor() - ->getMock(); - $evt->expects($this->any()) - ->method('getSource') - ->will($this->returnValue($this->createTransport())); - - return $evt; - } - - public function createTransportExceptionEvent() - { - $evt = $this->getMockBuilder('Swift_Events_TransportExceptionEvent') - ->disableOriginalConstructor() - ->getMock(); - $evt->expects($this->any()) - ->method('getException') - ->will($this->returnValue(new Swift_TransportException(''))); - - return $evt; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/ArrayLoggerTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/ArrayLoggerTest.php deleted file mode 100644 index 48c1b07..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/ArrayLoggerTest.php +++ /dev/null @@ -1,65 +0,0 @@ -add(">> Foo\r\n"); - $this->assertEquals(">> Foo\r\n", $logger->dump()); - } - - public function testAddingMultipleEntriesDumpsMultipleLines() - { - $logger = new Swift_Plugins_Loggers_ArrayLogger(); - $logger->add(">> FOO\r\n"); - $logger->add("<< 502 That makes no sense\r\n"); - $logger->add(">> RSET\r\n"); - $logger->add("<< 250 OK\r\n"); - - $this->assertEquals( - ">> FOO\r\n".PHP_EOL. - "<< 502 That makes no sense\r\n".PHP_EOL. - ">> RSET\r\n".PHP_EOL. - "<< 250 OK\r\n", - $logger->dump() - ); - } - - public function testLogCanBeCleared() - { - $logger = new Swift_Plugins_Loggers_ArrayLogger(); - $logger->add(">> FOO\r\n"); - $logger->add("<< 502 That makes no sense\r\n"); - $logger->add(">> RSET\r\n"); - $logger->add("<< 250 OK\r\n"); - - $this->assertEquals( - ">> FOO\r\n".PHP_EOL. - "<< 502 That makes no sense\r\n".PHP_EOL. - ">> RSET\r\n".PHP_EOL. - "<< 250 OK\r\n", - $logger->dump() - ); - - $logger->clear(); - - $this->assertEquals('', $logger->dump()); - } - - public function testLengthCanBeTruncated() - { - $logger = new Swift_Plugins_Loggers_ArrayLogger(2); - $logger->add(">> FOO\r\n"); - $logger->add("<< 502 That makes no sense\r\n"); - $logger->add(">> RSET\r\n"); - $logger->add("<< 250 OK\r\n"); - - $this->assertEquals( - ">> RSET\r\n".PHP_EOL. - "<< 250 OK\r\n", - $logger->dump(), - '%s: Log should be truncated to last 2 entries' - ); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/EchoLoggerTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/EchoLoggerTest.php deleted file mode 100644 index c43660d..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/EchoLoggerTest.php +++ /dev/null @@ -1,24 +0,0 @@ -add('>> Foo'); - $data = ob_get_clean(); - - $this->assertEquals('>> Foo'.PHP_EOL, $data); - } - - public function testAddingEntryDumpsEscapedLineWithHtml() - { - $logger = new Swift_Plugins_Loggers_EchoLogger(true); - ob_start(); - $logger->add('>> Foo'); - $data = ob_get_clean(); - - $this->assertEquals('>> Foo
'.PHP_EOL, $data); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/PopBeforeSmtpPluginTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/PopBeforeSmtpPluginTest.php deleted file mode 100644 index cf88a4e..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/PopBeforeSmtpPluginTest.php +++ /dev/null @@ -1,101 +0,0 @@ -createConnection(); - $connection->expects($this->once()) - ->method('connect'); - - $plugin = $this->createPlugin('pop.host.tld', 110); - $plugin->setConnection($connection); - - $transport = $this->createTransport(); - $evt = $this->createTransportChangeEvent($transport); - - $plugin->beforeTransportStarted($evt); - } - - public function testPluginDisconnectsFromPop3HostBeforeTransportStarts() - { - $connection = $this->createConnection(); - $connection->expects($this->once()) - ->method('disconnect'); - - $plugin = $this->createPlugin('pop.host.tld', 110); - $plugin->setConnection($connection); - - $transport = $this->createTransport(); - $evt = $this->createTransportChangeEvent($transport); - - $plugin->beforeTransportStarted($evt); - } - - public function testPluginDoesNotConnectToSmtpIfBoundToDifferentTransport() - { - $connection = $this->createConnection(); - $connection->expects($this->never()) - ->method('disconnect'); - $connection->expects($this->never()) - ->method('connect'); - - $smtp = $this->createTransport(); - - $plugin = $this->createPlugin('pop.host.tld', 110); - $plugin->setConnection($connection); - $plugin->bindSmtp($smtp); - - $transport = $this->createTransport(); - $evt = $this->createTransportChangeEvent($transport); - - $plugin->beforeTransportStarted($evt); - } - - public function testPluginCanBindToSpecificTransport() - { - $connection = $this->createConnection(); - $connection->expects($this->once()) - ->method('connect'); - - $smtp = $this->createTransport(); - - $plugin = $this->createPlugin('pop.host.tld', 110); - $plugin->setConnection($connection); - $plugin->bindSmtp($smtp); - - $evt = $this->createTransportChangeEvent($smtp); - - $plugin->beforeTransportStarted($evt); - } - - private function createTransport() - { - return $this->getMockBuilder('Swift_Transport')->getMock(); - } - - private function createTransportChangeEvent($transport) - { - $evt = $this->getMockBuilder('Swift_Events_TransportChangeEvent') - ->disableOriginalConstructor() - ->getMock(); - $evt->expects($this->any()) - ->method('getSource') - ->will($this->returnValue($transport)); - $evt->expects($this->any()) - ->method('getTransport') - ->will($this->returnValue($transport)); - - return $evt; - } - - public function createConnection() - { - return $this->getMockBuilder('Swift_Plugins_Pop_Pop3Connection')->getMock(); - } - - public function createPlugin($host, $port, $crypto = null) - { - return new Swift_Plugins_PopBeforeSmtpPlugin($host, $port, $crypto); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/RedirectingPluginTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/RedirectingPluginTest.php deleted file mode 100644 index 0ad6386..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/RedirectingPluginTest.php +++ /dev/null @@ -1,183 +0,0 @@ -assertEquals('fabien@example.com', $plugin->getRecipient()); - $plugin->setRecipient('chris@example.com'); - $this->assertEquals('chris@example.com', $plugin->getRecipient()); - } - - public function testPluginChangesRecipients() - { - $message = (new Swift_Message()) - ->setSubject('...') - ->setFrom(['john@example.com' => 'John Doe']) - ->setTo($to = [ - 'fabien-to@example.com' => 'Fabien (To)', - 'chris-to@example.com' => 'Chris (To)', - ]) - ->setCc($cc = [ - 'fabien-cc@example.com' => 'Fabien (Cc)', - 'chris-cc@example.com' => 'Chris (Cc)', - ]) - ->setBcc($bcc = [ - 'fabien-bcc@example.com' => 'Fabien (Bcc)', - 'chris-bcc@example.com' => 'Chris (Bcc)', - ]) - ->setBody('...') - ; - - $plugin = new Swift_Plugins_RedirectingPlugin('god@example.com'); - - $evt = $this->createSendEvent($message); - - $plugin->beforeSendPerformed($evt); - - $this->assertEquals($message->getTo(), ['god@example.com' => '']); - $this->assertEquals($message->getCc(), []); - $this->assertEquals($message->getBcc(), []); - - $plugin->sendPerformed($evt); - - $this->assertEquals($message->getTo(), $to); - $this->assertEquals($message->getCc(), $cc); - $this->assertEquals($message->getBcc(), $bcc); - } - - public function testPluginRespectsUnsetToList() - { - $message = (new Swift_Message()) - ->setSubject('...') - ->setFrom(['john@example.com' => 'John Doe']) - ->setCc($cc = [ - 'fabien-cc@example.com' => 'Fabien (Cc)', - 'chris-cc@example.com' => 'Chris (Cc)', - ]) - ->setBcc($bcc = [ - 'fabien-bcc@example.com' => 'Fabien (Bcc)', - 'chris-bcc@example.com' => 'Chris (Bcc)', - ]) - ->setBody('...') - ; - - $plugin = new Swift_Plugins_RedirectingPlugin('god@example.com'); - - $evt = $this->createSendEvent($message); - - $plugin->beforeSendPerformed($evt); - - $this->assertEquals($message->getTo(), ['god@example.com' => '']); - $this->assertEquals($message->getCc(), []); - $this->assertEquals($message->getBcc(), []); - - $plugin->sendPerformed($evt); - - $this->assertEquals($message->getTo(), []); - $this->assertEquals($message->getCc(), $cc); - $this->assertEquals($message->getBcc(), $bcc); - } - - public function testPluginRespectsAWhitelistOfPatterns() - { - $message = (new Swift_Message()) - ->setSubject('...') - ->setFrom(['john@example.com' => 'John Doe']) - ->setTo($to = [ - 'fabien-to@example.com' => 'Fabien (To)', - 'chris-to@example.com' => 'Chris (To)', - 'lars-to@internal.com' => 'Lars (To)', - ]) - ->setCc($cc = [ - 'fabien-cc@example.com' => 'Fabien (Cc)', - 'chris-cc@example.com' => 'Chris (Cc)', - 'lars-cc@internal.org' => 'Lars (Cc)', - ]) - ->setBcc($bcc = [ - 'fabien-bcc@example.com' => 'Fabien (Bcc)', - 'chris-bcc@example.com' => 'Chris (Bcc)', - 'john-bcc@example.org' => 'John (Bcc)', - ]) - ->setBody('...') - ; - - $recipient = 'god@example.com'; - $patterns = ['/^.*@internal.[a-z]+$/', '/^john-.*$/']; - - $plugin = new Swift_Plugins_RedirectingPlugin($recipient, $patterns); - - $this->assertEquals($recipient, $plugin->getRecipient()); - $this->assertEquals($plugin->getWhitelist(), $patterns); - - $evt = $this->createSendEvent($message); - - $plugin->beforeSendPerformed($evt); - - $this->assertEquals($message->getTo(), ['lars-to@internal.com' => 'Lars (To)', 'god@example.com' => null]); - $this->assertEquals($message->getCc(), ['lars-cc@internal.org' => 'Lars (Cc)']); - $this->assertEquals($message->getBcc(), ['john-bcc@example.org' => 'John (Bcc)']); - - $plugin->sendPerformed($evt); - - $this->assertEquals($message->getTo(), $to); - $this->assertEquals($message->getCc(), $cc); - $this->assertEquals($message->getBcc(), $bcc); - } - - public function testArrayOfRecipientsCanBeExplicitlyDefined() - { - $message = (new Swift_Message()) - ->setSubject('...') - ->setFrom(['john@example.com' => 'John Doe']) - ->setTo([ - 'fabien@example.com' => 'Fabien', - 'chris@example.com' => 'Chris (To)', - 'lars-to@internal.com' => 'Lars (To)', - ]) - ->setCc([ - 'fabien@example.com' => 'Fabien', - 'chris-cc@example.com' => 'Chris (Cc)', - 'lars-cc@internal.org' => 'Lars (Cc)', - ]) - ->setBcc([ - 'fabien@example.com' => 'Fabien', - 'chris-bcc@example.com' => 'Chris (Bcc)', - 'john-bcc@example.org' => 'John (Bcc)', - ]) - ->setBody('...') - ; - - $recipients = ['god@example.com', 'fabien@example.com']; - $patterns = ['/^.*@internal.[a-z]+$/']; - - $plugin = new Swift_Plugins_RedirectingPlugin($recipients, $patterns); - - $evt = $this->createSendEvent($message); - - $plugin->beforeSendPerformed($evt); - - $this->assertEquals( - $message->getTo(), - ['fabien@example.com' => 'Fabien', 'lars-to@internal.com' => 'Lars (To)', 'god@example.com' => null] - ); - $this->assertEquals( - $message->getCc(), - ['fabien@example.com' => 'Fabien', 'lars-cc@internal.org' => 'Lars (Cc)'] - ); - $this->assertEquals($message->getBcc(), ['fabien@example.com' => 'Fabien']); - } - - private function createSendEvent(Swift_Mime_SimpleMessage $message) - { - $evt = $this->getMockBuilder('Swift_Events_SendEvent') - ->disableOriginalConstructor() - ->getMock(); - $evt->expects($this->any()) - ->method('getMessage') - ->will($this->returnValue($message)); - - return $evt; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ReporterPluginTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ReporterPluginTest.php deleted file mode 100644 index 19238f8..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ReporterPluginTest.php +++ /dev/null @@ -1,86 +0,0 @@ -createMessage(); - $evt = $this->createSendEvent(); - $reporter = $this->createReporter(); - - $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(['foo@bar.tld' => 'Foo']); - $evt->shouldReceive('getMessage')->zeroOrMoreTimes()->andReturn($message); - $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn([]); - $reporter->shouldReceive('notify')->once()->with($message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_PASS); - - $plugin = new Swift_Plugins_ReporterPlugin($reporter); - $plugin->sendPerformed($evt); - } - - public function testReportingFailedTo() - { - $message = $this->createMessage(); - $evt = $this->createSendEvent(); - $reporter = $this->createReporter(); - - $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(['foo@bar.tld' => 'Foo', 'zip@button' => 'Zip']); - $evt->shouldReceive('getMessage')->zeroOrMoreTimes()->andReturn($message); - $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn(['zip@button']); - $reporter->shouldReceive('notify')->once()->with($message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_PASS); - $reporter->shouldReceive('notify')->once()->with($message, 'zip@button', Swift_Plugins_Reporter::RESULT_FAIL); - - $plugin = new Swift_Plugins_ReporterPlugin($reporter); - $plugin->sendPerformed($evt); - } - - public function testReportingFailedCc() - { - $message = $this->createMessage(); - $evt = $this->createSendEvent(); - $reporter = $this->createReporter(); - - $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(['foo@bar.tld' => 'Foo']); - $message->shouldReceive('getCc')->zeroOrMoreTimes()->andReturn(['zip@button' => 'Zip', 'test@test.com' => 'Test']); - $evt->shouldReceive('getMessage')->zeroOrMoreTimes()->andReturn($message); - $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn(['zip@button']); - $reporter->shouldReceive('notify')->once()->with($message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_PASS); - $reporter->shouldReceive('notify')->once()->with($message, 'zip@button', Swift_Plugins_Reporter::RESULT_FAIL); - $reporter->shouldReceive('notify')->once()->with($message, 'test@test.com', Swift_Plugins_Reporter::RESULT_PASS); - - $plugin = new Swift_Plugins_ReporterPlugin($reporter); - $plugin->sendPerformed($evt); - } - - public function testReportingFailedBcc() - { - $message = $this->createMessage(); - $evt = $this->createSendEvent(); - $reporter = $this->createReporter(); - - $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(['foo@bar.tld' => 'Foo']); - $message->shouldReceive('getBcc')->zeroOrMoreTimes()->andReturn(['zip@button' => 'Zip', 'test@test.com' => 'Test']); - $evt->shouldReceive('getMessage')->zeroOrMoreTimes()->andReturn($message); - $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn(['zip@button']); - $reporter->shouldReceive('notify')->once()->with($message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_PASS); - $reporter->shouldReceive('notify')->once()->with($message, 'zip@button', Swift_Plugins_Reporter::RESULT_FAIL); - $reporter->shouldReceive('notify')->once()->with($message, 'test@test.com', Swift_Plugins_Reporter::RESULT_PASS); - - $plugin = new Swift_Plugins_ReporterPlugin($reporter); - $plugin->sendPerformed($evt); - } - - private function createMessage() - { - return $this->getMockery('Swift_Mime_SimpleMessage')->shouldIgnoreMissing(); - } - - private function createSendEvent() - { - return $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - } - - private function createReporter() - { - return $this->getMockery('Swift_Plugins_Reporter')->shouldIgnoreMissing(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HitReporterTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HitReporterTest.php deleted file mode 100644 index d5a1c9c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HitReporterTest.php +++ /dev/null @@ -1,64 +0,0 @@ -hitReporter = new Swift_Plugins_Reporters_HitReporter(); - $this->message = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); - } - - public function testReportingFail() - { - $this->hitReporter->notify($this->message, 'foo@bar.tld', - Swift_Plugins_Reporter::RESULT_FAIL - ); - $this->assertEquals(['foo@bar.tld'], - $this->hitReporter->getFailedRecipients() - ); - } - - public function testMultipleReports() - { - $this->hitReporter->notify($this->message, 'foo@bar.tld', - Swift_Plugins_Reporter::RESULT_FAIL - ); - $this->hitReporter->notify($this->message, 'zip@button', - Swift_Plugins_Reporter::RESULT_FAIL - ); - $this->assertEquals(['foo@bar.tld', 'zip@button'], - $this->hitReporter->getFailedRecipients() - ); - } - - public function testReportingPassIsIgnored() - { - $this->hitReporter->notify($this->message, 'foo@bar.tld', - Swift_Plugins_Reporter::RESULT_FAIL - ); - $this->hitReporter->notify($this->message, 'zip@button', - Swift_Plugins_Reporter::RESULT_PASS - ); - $this->assertEquals(['foo@bar.tld'], - $this->hitReporter->getFailedRecipients() - ); - } - - public function testBufferCanBeCleared() - { - $this->hitReporter->notify($this->message, 'foo@bar.tld', - Swift_Plugins_Reporter::RESULT_FAIL - ); - $this->hitReporter->notify($this->message, 'zip@button', - Swift_Plugins_Reporter::RESULT_FAIL - ); - $this->assertEquals(['foo@bar.tld', 'zip@button'], - $this->hitReporter->getFailedRecipients() - ); - $this->hitReporter->clear(); - $this->assertEquals([], $this->hitReporter->getFailedRecipients()); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HtmlReporterTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HtmlReporterTest.php deleted file mode 100644 index 6b86cfe..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HtmlReporterTest.php +++ /dev/null @@ -1,54 +0,0 @@ -html = new Swift_Plugins_Reporters_HtmlReporter(); - $this->message = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); - } - - public function testReportingPass() - { - ob_start(); - $this->html->notify($this->message, 'foo@bar.tld', - Swift_Plugins_Reporter::RESULT_PASS - ); - $html = ob_get_clean(); - - $this->assertRegExp('~ok|pass~i', $html, '%s: Reporter should indicate pass'); - $this->assertRegExp('~foo@bar\.tld~', $html, '%s: Reporter should show address'); - } - - public function testReportingFail() - { - ob_start(); - $this->html->notify($this->message, 'zip@button', - Swift_Plugins_Reporter::RESULT_FAIL - ); - $html = ob_get_clean(); - - $this->assertRegExp('~fail~i', $html, '%s: Reporter should indicate fail'); - $this->assertRegExp('~zip@button~', $html, '%s: Reporter should show address'); - } - - public function testMultipleReports() - { - ob_start(); - $this->html->notify($this->message, 'foo@bar.tld', - Swift_Plugins_Reporter::RESULT_PASS - ); - $this->html->notify($this->message, 'zip@button', - Swift_Plugins_Reporter::RESULT_FAIL - ); - $html = ob_get_clean(); - - $this->assertRegExp('~ok|pass~i', $html, '%s: Reporter should indicate pass'); - $this->assertRegExp('~foo@bar\.tld~', $html, '%s: Reporter should show address'); - $this->assertRegExp('~fail~i', $html, '%s: Reporter should indicate fail'); - $this->assertRegExp('~zip@button~', $html, '%s: Reporter should show address'); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php deleted file mode 100644 index e35dcc8..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php +++ /dev/null @@ -1,102 +0,0 @@ -createSleeper(); - $timer = $this->createTimer(); - - //10MB/min - $plugin = new Swift_Plugins_ThrottlerPlugin( - 10000000, Swift_Plugins_ThrottlerPlugin::BYTES_PER_MINUTE, - $sleeper, $timer - ); - - $timer->shouldReceive('getTimestamp')->once()->andReturn(0); - $timer->shouldReceive('getTimestamp')->once()->andReturn(1); //expected 0.6 - $timer->shouldReceive('getTimestamp')->once()->andReturn(1); //expected 1.2 (sleep 1) - $timer->shouldReceive('getTimestamp')->once()->andReturn(2); //expected 1.8 - $timer->shouldReceive('getTimestamp')->once()->andReturn(2); //expected 2.4 (sleep 1) - $sleeper->shouldReceive('sleep')->twice()->with(1); - - //10,000,000 bytes per minute - //100,000 bytes per email - - // .: (10,000,000/100,000)/60 emails per second = 1.667 emais/sec - - $message = $this->createMessageWithByteCount(100000); //100KB - - $evt = $this->createSendEvent($message); - - for ($i = 0; $i < 5; ++$i) { - $plugin->beforeSendPerformed($evt); - $plugin->sendPerformed($evt); - } - } - - public function testMessagesPerMinuteThrottling() - { - $sleeper = $this->createSleeper(); - $timer = $this->createTimer(); - - //60/min - $plugin = new Swift_Plugins_ThrottlerPlugin( - 60, Swift_Plugins_ThrottlerPlugin::MESSAGES_PER_MINUTE, - $sleeper, $timer - ); - - $timer->shouldReceive('getTimestamp')->once()->andReturn(0); - $timer->shouldReceive('getTimestamp')->once()->andReturn(0); //expected 1 (sleep 1) - $timer->shouldReceive('getTimestamp')->once()->andReturn(2); //expected 2 - $timer->shouldReceive('getTimestamp')->once()->andReturn(2); //expected 3 (sleep 1) - $timer->shouldReceive('getTimestamp')->once()->andReturn(4); //expected 4 - $sleeper->shouldReceive('sleep')->twice()->with(1); - - //60 messages per minute - //1 message per second - - $message = $this->createMessageWithByteCount(10); - - $evt = $this->createSendEvent($message); - - for ($i = 0; $i < 5; ++$i) { - $plugin->beforeSendPerformed($evt); - $plugin->sendPerformed($evt); - } - } - - private function createSleeper() - { - return $this->getMockery('Swift_Plugins_Sleeper'); - } - - private function createTimer() - { - return $this->getMockery('Swift_Plugins_Timer'); - } - - private function createMessageWithByteCount($bytes) - { - $msg = $this->getMockery('Swift_Mime_SimpleMessage'); - $msg->shouldReceive('toByteStream') - ->zeroOrMoreTimes() - ->andReturnUsing(function ($is) use ($bytes) { - for ($i = 0; $i < $bytes; ++$i) { - $is->write('x'); - } - }); - - return $msg; - } - - private function createSendEvent($message) - { - $evt = $this->getMockery('Swift_Events_SendEvent'); - $evt->shouldReceive('getMessage') - ->zeroOrMoreTimes() - ->andReturn($message); - - return $evt; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/DKIMSignerTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/DKIMSignerTest.php deleted file mode 100644 index 1d5f957..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/DKIMSignerTest.php +++ /dev/null @@ -1,220 +0,0 @@ -createHeaders(); - $messageContent = 'Hello World'; - $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); - /* @var $signer Swift_Signers_HeaderSigner */ - $altered = $signer->getAlteredHeaders(); - $signer->reset(); - // Headers - $signer->setHeaders($headers); - // Body - $signer->startBody(); - $signer->write($messageContent); - $signer->endBody(); - // Signing - $signer->addSignature($headers); - } - - // SHA1 Signing - public function testSigningSHA1() - { - $headerSet = $this->createHeaderSet(); - $messageContent = 'Hello World'; - $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); - $signer->setHashAlgorithm('rsa-sha1'); - $signer->setSignatureTimestamp('1299879181'); - $altered = $signer->getAlteredHeaders(); - $this->assertEquals(['DKIM-Signature'], $altered); - $signer->reset(); - $signer->setHeaders($headerSet); - $this->assertFalse($headerSet->has('DKIM-Signature')); - $signer->startBody(); - $signer->write($messageContent); - $signer->endBody(); - $signer->addSignature($headerSet); - $this->assertTrue($headerSet->has('DKIM-Signature')); - $dkim = $headerSet->getAll('DKIM-Signature'); - $sig = reset($dkim); - $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha1; bh=wlbYcY9O9OPInGJ4D0E/rGsvMLE=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; t=1299879181; b=RMSNelzM2O5MAAnMjT3G3/VF36S3DGJXoPCXR001F1WDReu0prGphWjuzK/m6V1pwqQL8cCNg Hi74mTx2bvyAvmkjvQtJf1VMUOCc9WHGcm1Yec66I3ZWoNMGSWZ1EKAm2CtTzyG0IFw4ml9DI wSkyAFxlgicckDD6FibhqwX4w='); - } - - // SHA256 Signing - public function testSigning256() - { - $headerSet = $this->createHeaderSet(); - $messageContent = 'Hello World'; - $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); - $signer->setHashAlgorithm('rsa-sha256'); - $signer->setSignatureTimestamp('1299879181'); - $altered = $signer->getAlteredHeaders(); - $this->assertEquals(['DKIM-Signature'], $altered); - $signer->reset(); - $signer->setHeaders($headerSet); - $this->assertFalse($headerSet->has('DKIM-Signature')); - $signer->startBody(); - $signer->write($messageContent); - $signer->endBody(); - $signer->addSignature($headerSet); - $this->assertTrue($headerSet->has('DKIM-Signature')); - $dkim = $headerSet->getAll('DKIM-Signature'); - $sig = reset($dkim); - $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha256; bh=f+W+hu8dIhf2VAni89o8lF6WKTXi7nViA4RrMdpD5/U=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; t=1299879181; b=jqPmieHzF5vR9F4mXCAkowuphpO4iJ8IAVuioh1BFZ3VITXZj5jlOFxULJMBiiApm2keJirnh u4mzogj444QkpT3lJg8/TBGAYQPdcvkG3KC0jdyN6QpSgpITBJG2BwWa+keXsv2bkQgLRAzNx qRhP45vpHCKun0Tg9LrwW/KCg='); - } - - // Relaxed/Relaxed Hash Signing - public function testSigningRelaxedRelaxed256() - { - $headerSet = $this->createHeaderSet(); - $messageContent = 'Hello World'; - $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); - $signer->setHashAlgorithm('rsa-sha256'); - $signer->setSignatureTimestamp('1299879181'); - $signer->setBodyCanon('relaxed'); - $signer->setHeaderCanon('relaxed'); - $altered = $signer->getAlteredHeaders(); - $this->assertEquals(['DKIM-Signature'], $altered); - $signer->reset(); - $signer->setHeaders($headerSet); - $this->assertFalse($headerSet->has('DKIM-Signature')); - $signer->startBody(); - $signer->write($messageContent); - $signer->endBody(); - $signer->addSignature($headerSet); - $this->assertTrue($headerSet->has('DKIM-Signature')); - $dkim = $headerSet->getAll('DKIM-Signature'); - $sig = reset($dkim); - $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha256; bh=f+W+hu8dIhf2VAni89o8lF6WKTXi7nViA4RrMdpD5/U=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; c=relaxed/relaxed; t=1299879181; b=gzOI+PX6HpZKQFzwwmxzcVJsyirdLXOS+4pgfCpVHQIdqYusKLrhlLeFBTNoz75HrhNvGH6T0 Rt3w5aTqkrWfUuAEYt0Ns14GowLM7JojaFN+pZ4eYnRB3CBBgW6fee4NEMD5WPca3uS09tr1E 10RYh9ILlRtl+84sovhx5id3Y='); - } - - // Relaxed/Simple Hash Signing - public function testSigningRelaxedSimple256() - { - $headerSet = $this->createHeaderSet(); - $messageContent = 'Hello World'; - $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); - $signer->setHashAlgorithm('rsa-sha256'); - $signer->setSignatureTimestamp('1299879181'); - $signer->setHeaderCanon('relaxed'); - $altered = $signer->getAlteredHeaders(); - $this->assertEquals(['DKIM-Signature'], $altered); - $signer->reset(); - $signer->setHeaders($headerSet); - $this->assertFalse($headerSet->has('DKIM-Signature')); - $signer->startBody(); - $signer->write($messageContent); - $signer->endBody(); - $signer->addSignature($headerSet); - $this->assertTrue($headerSet->has('DKIM-Signature')); - $dkim = $headerSet->getAll('DKIM-Signature'); - $sig = reset($dkim); - $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha256; bh=f+W+hu8dIhf2VAni89o8lF6WKTXi7nViA4RrMdpD5/U=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; c=relaxed; t=1299879181; b=dLPJNec5v81oelyzGOY0qPqTlGnQeNfUNBOrV/JKbStr3NqWGI9jH4JAe2YvO2V32lfPNoby1 4MMzZ6EPkaZkZDDSPa+53YbCPQAlqiD9QZZIUe2UNM33HN8yAMgiWEF5aP7MbQnxeVZMfVLEl 9S8qOImu+K5JZqhQQTL0dgLwA='); - } - - // Simple/Relaxed Hash Signing - public function testSigningSimpleRelaxed256() - { - $headerSet = $this->createHeaderSet(); - $messageContent = 'Hello World'; - $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); - $signer->setHashAlgorithm('rsa-sha256'); - $signer->setSignatureTimestamp('1299879181'); - $signer->setBodyCanon('relaxed'); - $altered = $signer->getAlteredHeaders(); - $this->assertEquals(['DKIM-Signature'], $altered); - $signer->reset(); - $signer->setHeaders($headerSet); - $this->assertFalse($headerSet->has('DKIM-Signature')); - $signer->startBody(); - $signer->write($messageContent); - $signer->endBody(); - $signer->addSignature($headerSet); - $this->assertTrue($headerSet->has('DKIM-Signature')); - $dkim = $headerSet->getAll('DKIM-Signature'); - $sig = reset($dkim); - $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha256; bh=f+W+hu8dIhf2VAni89o8lF6WKTXi7nViA4RrMdpD5/U=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; c=simple/relaxed; t=1299879181; b=M5eomH/zamyzix9kOes+6YLzQZxuJdBP4x3nP9zF2N26eMLG2/cBKbnNyqiOTDhJdYfWPbLIa 1CWnjST0j5p4CpeOkGYuiE+M4TWEZwhRmRWootlPO3Ii6XpbBJKFk1o9zviS7OmXblUUE4aqb yRSIMDhtLdCK5GlaCneFLN7RQ='); - } - - private function createHeaderSet() - { - $cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream()); - $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); - - $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8')); - $paramEncoder = new Swift_Encoder_Rfc2231Encoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8')); - $emailValidator = new EmailValidator(); - $headers = new Swift_Mime_SimpleHeaderSet(new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $emailValidator)); - - return $headers; - } - - /** - * @return Swift_Mime_Headers - */ - private function createHeaders() - { - $x = 0; - $cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream()); - $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); - - $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8')); - $paramEncoder = new Swift_Encoder_Rfc2231Encoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8')); - $emailValidator = new EmailValidator(); - $headerFactory = new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $emailValidator); - $headers = $this->getMockery('Swift_Mime_SimpleHeaderSet'); - - $headers->shouldReceive('listAll') - ->zeroOrMoreTimes() - ->andReturn(['From', 'To', 'Date', 'Subject']); - $headers->shouldReceive('has') - ->zeroOrMoreTimes() - ->with('From') - ->andReturn(true); - $headers->shouldReceive('getAll') - ->zeroOrMoreTimes() - ->with('From') - ->andReturn([$headerFactory->createMailboxHeader('From', 'test@test.test')]); - $headers->shouldReceive('has') - ->zeroOrMoreTimes() - ->with('To') - ->andReturn(true); - $headers->shouldReceive('getAll') - ->zeroOrMoreTimes() - ->with('To') - ->andReturn([$headerFactory->createMailboxHeader('To', 'test@test.test')]); - $headers->shouldReceive('has') - ->zeroOrMoreTimes() - ->with('Date') - ->andReturn(true); - $headers->shouldReceive('getAll') - ->zeroOrMoreTimes() - ->with('Date') - ->andReturn([$headerFactory->createTextHeader('Date', 'Fri, 11 Mar 2011 20:56:12 +0000 (GMT)')]); - $headers->shouldReceive('has') - ->zeroOrMoreTimes() - ->with('Subject') - ->andReturn(true); - $headers->shouldReceive('getAll') - ->zeroOrMoreTimes() - ->with('Subject') - ->andReturn([$headerFactory->createTextHeader('Subject', 'Foo Bar Text Message')]); - $headers->shouldReceive('addTextHeader') - ->zeroOrMoreTimes() - ->with('DKIM-Signature', \Mockery::any()) - ->andReturn(true); - $headers->shouldReceive('getAll') - ->zeroOrMoreTimes() - ->with('DKIM-Signature') - ->andReturn([$headerFactory->createTextHeader('DKIM-Signature', 'Foo Bar Text Message')]); - - return $headers; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/OpenDKIMSignerTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/OpenDKIMSignerTest.php deleted file mode 100644 index ce99bc6..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/OpenDKIMSignerTest.php +++ /dev/null @@ -1,45 +0,0 @@ -markTestSkipped( - 'Need OpenDKIM extension run these tests.' - ); - } - } - - public function testBasicSigningHeaderManipulation() - { - } - - // Default Signing - public function testSigningDefaults() - { - } - - // SHA256 Signing - public function testSigning256() - { - } - - // Relaxed/Relaxed Hash Signing - public function testSigningRelaxedRelaxed256() - { - } - - // Relaxed/Simple Hash Signing - public function testSigningRelaxedSimple256() - { - } - - // Simple/Relaxed Hash Signing - public function testSigningSimpleRelaxed256() - { - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/SMimeSignerTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/SMimeSignerTest.php deleted file mode 100644 index 932e486..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/SMimeSignerTest.php +++ /dev/null @@ -1,653 +0,0 @@ -replacementFactory = Swift_DependencyContainer::getInstance() - ->lookup('transport.replacementfactory'); - - $this->samplesDir = str_replace('\\', '/', realpath(__DIR__.'/../../../_samples/')).'/'; - } - - public function testUnSignedMessage() - { - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself'); - - $this->assertEquals('Here is the message itself', $message->getBody()); - } - - public function testSignedMessage() - { - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself'); - - $signer = new Swift_Signers_SMimeSigner(); - $signer->setSignCertificate($this->samplesDir.'smime/sign.crt', $this->samplesDir.'smime/sign.key'); - $message->attachSigner($signer); - - $messageStream = $this->newFilteredStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - $entityString = $messageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!($boundary = $this->getBoundary($headers['content-type']))) { - return false; - } - - $expectedBody = <<assertValidVerify($expectedBody, $messageStream); - unset($messageStream); - } - - public function testSignedMessageWithFullyWrappedMessage() - { - $message = (new Swift_Message('Middle-out compression secrets')) - ->setFrom(['richard@piedpiper.com' => 'Richard Hendricks']) - ->setTo(['jared@piedpiper.com' => 'Jared Dunn']) - ->setBody('Here goes the entire algorithm...'); - - $signer = new Swift_Signers_SMimeSigner(); - $signer->setSignCertificate($this->samplesDir.'smime/sign.crt', $this->samplesDir.'smime/sign.key'); - - // Tell the signer to wrap the full MIME message - $signer->setWrapFullMessage(true); - $message->attachSigner($signer); - - $messageStream = $this->newFilteredStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - $entityString = $messageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!($boundary = $this->getBoundary($headers['content-type']))) { - return false; - } - - $expectedBody = << -Date: .* -Subject: Middle-out compression secrets -From: Richard Hendricks -To: Jared Dunn -MIME-Version: 1.0 -Content-Type: text/plain; charset=utf-8 -Content-Transfer-Encoding: quoted-printable - -Here goes the entire algorithm... ---$boundary -Content-Type: application/(x\-)?pkcs7-signature; name="smime\.p7s" -Content-Transfer-Encoding: base64 -Content-Disposition: attachment; filename="smime\.p7s" - -(?:^[a-zA-Z0-9\/\\r\\n+]*={0,2}) - ---$boundary-- -OEL; - $this->assertValidVerify($expectedBody, $messageStream); - unset($messageStream); - } - - public function testSignedMessageExtraCerts() - { - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself'); - - $signer = new Swift_Signers_SMimeSigner(); - $signer->setSignCertificate($this->samplesDir.'smime/sign2.crt', $this->samplesDir.'smime/sign2.key', PKCS7_DETACHED, $this->samplesDir.'smime/intermediate.crt'); - $message->attachSigner($signer); - - $messageStream = $this->newFilteredStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - $entityString = $messageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!($boundary = $this->getBoundary($headers['content-type']))) { - return false; - } - - $expectedBody = <<assertValidVerify($expectedBody, $messageStream); - unset($messageStream); - } - - public function testSignedMessageBinary() - { - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself'); - - $signer = new Swift_Signers_SMimeSigner(); - $signer->setSignCertificate($this->samplesDir.'smime/sign.crt', $this->samplesDir.'smime/sign.key', PKCS7_BINARY); - $message->attachSigner($signer); - - $messageStream = $this->newFilteredStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - $entityString = $messageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!preg_match('#^application/(x\-)?pkcs7-mime; smime-type=signed\-data;#', $headers['content-type'])) { - $this->fail('Content-type does not match.'); - - return false; - } - - $this->assertEquals($headers['content-transfer-encoding'], 'base64'); - $this->assertEquals($headers['content-disposition'], 'attachment; filename="smime.p7m"'); - - $expectedBody = '(?:^[a-zA-Z0-9\/\\r\\n+]*={0,2})'; - - $messageStreamClean = $this->newFilteredStream(); - - $this->assertValidVerify($expectedBody, $messageStream); - unset($messageStreamClean, $messageStream); - } - - public function testSignedMessageWithAttachments() - { - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself'); - - $message->attach(Swift_Attachment::fromPath($this->samplesDir.'/files/textfile.zip')); - - $signer = new Swift_Signers_SMimeSigner(); - $signer->setSignCertificate($this->samplesDir.'smime/sign.crt', $this->samplesDir.'smime/sign.key'); - $message->attachSigner($signer); - - $messageStream = $this->newFilteredStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - $entityString = $messageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!($boundary = $this->getBoundary($headers['content-type']))) { - return false; - } - - $expectedBody = <<assertValidVerify($expectedBody, $messageStream); - unset($messageStream); - } - - public function testEncryptedMessage() - { - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself'); - - $originalMessage = $this->cleanMessage($message->toString()); - - $signer = new Swift_Signers_SMimeSigner(); - $signer->setEncryptCertificate($this->samplesDir.'smime/encrypt.crt'); - $message->attachSigner($signer); - - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - $entityString = $messageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!preg_match('#^application/(x\-)?pkcs7-mime; smime-type=enveloped\-data;#', $headers['content-type'])) { - $this->fail('Content-type does not match.'); - - return false; - } - - $expectedBody = '(?:^[a-zA-Z0-9\/\\r\\n+]*={0,2})'; - - $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', ['file://'.$this->samplesDir.'smime/encrypt.key', 'swift'])) { - $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); - } - - $this->assertEquals($originalMessage, $decryptedMessageStream->getContent()); - unset($decryptedMessageStream, $messageStream); - } - - public function testEncryptedMessageWithFullyWrappedMessage() - { - $message = (new Swift_Message('Middle-out compression secrets')) - ->setFrom(['richard@piedpiper.com' => 'Richard Hendricks']) - ->setTo(['jared@piedpiper.com' => 'Jared Dunn']) - ->setBody('Here goes the entire algorithm...'); - - $originalMessage = $message->toString(); - - $signer = new Swift_Signers_SMimeSigner(); - $signer->setEncryptCertificate($this->samplesDir.'smime/encrypt.crt'); - $signer->setWrapFullMessage(true); - $message->attachSigner($signer); - - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - $entityString = $messageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!preg_match('#^application/(x\-)?pkcs7-mime; smime-type=enveloped\-data;#', $headers['content-type'])) { - $this->fail('Content-type does not match.'); - - return false; - } - - $expectedBody = '(?:^[a-zA-Z0-9\/\\r\\n+]*={0,2})'; - - $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', ['file://'.$this->samplesDir.'smime/encrypt.key', 'swift'])) { - $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); - } - - $decryptedMessage = $decryptedMessageStream->getContent(); - $decryptedHeaders = self::getHeadersOfMessage($decryptedMessage); - $this->assertEquals('message/rfc822; charset=utf-8', $decryptedHeaders['content-type']); - $this->assertEquals('7bit', $decryptedHeaders['content-transfer-encoding']); - - $decryptedMessageBody = self::getBodyOfMessage($decryptedMessage); - $this->assertEquals($originalMessage, $decryptedMessageBody); - unset($decryptedMessageStream, $messageStream); - } - - public function testEncryptedMessageWithMultipleCerts() - { - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself'); - - $originalMessage = $this->cleanMessage($message->toString()); - - $signer = new Swift_Signers_SMimeSigner(); - $signer->setEncryptCertificate([$this->samplesDir.'smime/encrypt.crt', $this->samplesDir.'smime/encrypt2.crt']); - $message->attachSigner($signer); - - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - $entityString = $messageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!preg_match('#^application/(x\-)?pkcs7-mime; smime-type=enveloped\-data;#', $headers['content-type'])) { - $this->fail('Content-type does not match.'); - - return false; - } - - $expectedBody = '(?:^[a-zA-Z0-9\/\\r\\n+]*={0,2})'; - - $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', ['file://'.$this->samplesDir.'smime/encrypt.key', 'swift'])) { - $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); - } - - $this->assertEquals($originalMessage, $decryptedMessageStream->getContent()); - unset($decryptedMessageStream); - - $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt2.crt', ['file://'.$this->samplesDir.'smime/encrypt2.key', 'swift'])) { - $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); - } - - $this->assertEquals($originalMessage, $decryptedMessageStream->getContent()); - unset($decryptedMessageStream, $messageStream); - } - - public function testSignThenEncryptedMessage() - { - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself'); - - $signer = new Swift_Signers_SMimeSigner(); - $signer->setSignCertificate($this->samplesDir.'smime/sign.crt', $this->samplesDir.'smime/sign.key'); - $signer->setEncryptCertificate($this->samplesDir.'smime/encrypt.crt'); - $message->attachSigner($signer); - - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - $entityString = $messageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!preg_match('#^application/(x\-)?pkcs7-mime; smime-type=enveloped\-data;#', $headers['content-type'])) { - $this->fail('Content-type does not match.'); - - return false; - } - - $expectedBody = '(?:^[a-zA-Z0-9\/\\r\\n+]*={0,2})'; - - $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', ['file://'.$this->samplesDir.'smime/encrypt.key', 'swift'])) { - $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); - } - - $entityString = $decryptedMessageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!($boundary = $this->getBoundary($headers['content-type']))) { - return false; - } - - $expectedBody = <<assertValidVerify($expectedBody, $decryptedMessageStream)) { - return false; - } - - unset($decryptedMessageStream, $messageStream); - } - - public function testEncryptThenSignMessage() - { - $message = (new Swift_Message('Wonderful Subject')) - ->setFrom(['john@doe.com' => 'John Doe']) - ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) - ->setBody('Here is the message itself'); - - $originalMessage = $message->toString(); - - $signer = new Swift_Signers_SMimeSigner(); - $signer->setSignCertificate($this->samplesDir.'smime/sign.crt', $this->samplesDir.'smime/sign.key'); - $signer->setEncryptCertificate($this->samplesDir.'smime/encrypt.crt'); - $signer->setSignThenEncrypt(false); - $message->attachSigner($signer); - - $messageStream = $this->newFilteredStream(); - $message->toByteStream($messageStream); - $messageStream->commit(); - - $entityString = $messageStream->getContent(); - $headers = self::getHeadersOfMessage($entityString); - - if (!($boundary = $this->getBoundary($headers['content-type']))) { - return false; - } - - $expectedBody = <<Content-Type: application/(x\-)?pkcs7-mime; smime-type=enveloped-data; - name="smime\.p7m"; charset=utf-8 -Content-Transfer-Encoding: base64 -Content-Disposition: attachment; filename="smime\.p7m" - -(?:^[a-zA-Z0-9\/\\r\\n+]*={0,2}) - - -)--$boundary -Content-Type: application/(x\-)?pkcs7-signature; name="smime\.p7s" -Content-Transfer-Encoding: base64 -Content-Disposition: attachment; filename="smime\.p7s" - -(?:^[a-zA-Z0-9\/\\r\\n+]*={0,2}) - ---$boundary-- -OEL; - - if (!$this->assertValidVerify($expectedBody, $messageStream)) { - return false; - } - - $expectedBody = str_replace("\n", "\r\n", $expectedBody); - if (!preg_match('%'.$expectedBody.'*%m', $entityString, $entities)) { - $this->fail('Failed regex match.'); - - return false; - } - - $messageStreamClean = new Swift_ByteStream_TemporaryFileByteStream(); - $messageStreamClean->write($entities['encrypted_message']); - - $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - if (!openssl_pkcs7_decrypt($messageStreamClean->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', ['file://'.$this->samplesDir.'smime/encrypt.key', 'swift'])) { - $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); - } - - $this->assertEquals($originalMessage, $decryptedMessageStream->getContent()); - unset($messageStreamClean, $messageStream, $decryptedMessageStream); - } - - protected function assertValidVerify($expected, Swift_ByteStream_TemporaryFileByteStream $messageStream) - { - $actual = $messageStream->getContent(); - - // File is UNIX encoded so convert them to correct line ending - $expected = str_replace("\n", "\r\n", $expected); - - $actual = self::getBodyOfMessage($actual); - if (!$this->assertRegExp('%^'.$expected.'$\s*%m', $actual)) { - return false; - } - - $opensslOutput = new Swift_ByteStream_TemporaryFileByteStream(); - $verify = openssl_pkcs7_verify($messageStream->getPath(), null, $opensslOutput->getPath(), [$this->samplesDir.'smime/ca.crt']); - - if (false === $verify) { - $this->fail('Verification of the message failed.'); - - return false; - } elseif (-1 === $verify) { - $this->fail(sprintf('Verification of the message failed. Internal error "%s".', openssl_error_string())); - - return false; - } - - return true; - } - - protected function getBoundary($contentType) - { - if (!preg_match('/boundary=("[^"]+"|(?:[^\s]+|$))/is', $contentType, $contentTypeData)) { - $this->fail('Failed to find Boundary parameter'); - - return false; - } - - return trim($contentTypeData[1], '"'); - } - - protected function newFilteredStream() - { - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $messageStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); - $messageStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); - - return $messageStream; - } - - protected static function getBodyOfMessage($message) - { - return trim(substr($message, strpos($message, "\r\n\r\n"))); - } - - /** - * Strips of the sender headers and Mime-Version. - */ - protected function cleanMessage($content) - { - $newContent = ''; - - $headers = self::getHeadersOfMessage($content); - foreach ($headers as $headerName => $value) { - if (!in_array($headerName, ['content-type', 'content-transfer-encoding', 'content-disposition'])) { - continue; - } - - $headerName = explode('-', $headerName); - $headerName = array_map('ucfirst', $headerName); - $headerName = implode('-', $headerName); - - if (strlen($value) > 62) { - $value = wordwrap($value, 62, "\n "); - } - - $newContent .= "$headerName: $value\r\n"; - } - - return $newContent."\r\n".self::getBodyOfMessage($content); - } - - /** - * Returns the headers of the message. - * - * Header-names are lowercase. - * - * @param string $message - * - * @return array - */ - protected static function getHeadersOfMessage($message) - { - $headersPosEnd = strpos($message, "\r\n\r\n"); - $headerData = trim(substr($message, 0, $headersPosEnd)); - $headerLines = explode("\r\n", $headerData); - $headers = []; - - if (false === $headerLines) { - return $headers; - } - - // Transform header lines into an associative array - $currentHeaderName = ''; - foreach ($headerLines as $headerLine) { - // Handle headers that span multiple lines - if (false === strpos($headerLine, ':')) { - $headers[$currentHeaderName] .= ' '.trim($headerLine); - continue; - } - - $header = explode(':', $headerLine, 2); - $currentHeaderName = strtolower($header[0]); - $headers[$currentHeaderName] = trim($header[1]); - } - - return $headers; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/ByteArrayReplacementFilterTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/ByteArrayReplacementFilterTest.php deleted file mode 100644 index 3c81224..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/ByteArrayReplacementFilterTest.php +++ /dev/null @@ -1,129 +0,0 @@ -createFilter([0x61, 0x62], [0x63, 0x64]); - $this->assertEquals( - [0x59, 0x60, 0x63, 0x64, 0x65], - $filter->filter([0x59, 0x60, 0x61, 0x62, 0x65]) - ); - } - - public function testShouldBufferReturnsTrueIfPartialMatchAtEndOfBuffer() - { - $filter = $this->createFilter([0x61, 0x62], [0x63, 0x64]); - $this->assertTrue($filter->shouldBuffer([0x59, 0x60, 0x61]), - '%s: Filter should buffer since 0x61 0x62 is the needle and the ending '. - '0x61 could be from 0x61 0x62' - ); - } - - public function testFilterCanMakeMultipleReplacements() - { - $filter = $this->createFilter([[0x61], [0x62]], [0x63]); - $this->assertEquals( - [0x60, 0x63, 0x60, 0x63, 0x60], - $filter->filter([0x60, 0x61, 0x60, 0x62, 0x60]) - ); - } - - public function testMultipleReplacementsCanBeDifferent() - { - $filter = $this->createFilter([[0x61], [0x62]], [[0x63], [0x64]]); - $this->assertEquals( - [0x60, 0x63, 0x60, 0x64, 0x60], - $filter->filter([0x60, 0x61, 0x60, 0x62, 0x60]) - ); - } - - public function testShouldBufferReturnsFalseIfPartialMatchNotAtEndOfString() - { - $filter = $this->createFilter([0x0D, 0x0A], [0x0A]); - $this->assertFalse($filter->shouldBuffer([0x61, 0x62, 0x0D, 0x0A, 0x63]), - '%s: Filter should not buffer since x0Dx0A is the needle and is not at EOF' - ); - } - - public function testShouldBufferReturnsTrueIfAnyOfMultipleMatchesAtEndOfString() - { - $filter = $this->createFilter([[0x61, 0x62], [0x63]], [0x64]); - $this->assertTrue($filter->shouldBuffer([0x59, 0x60, 0x61]), - '%s: Filter should buffer since 0x61 0x62 is a needle and the ending '. - '0x61 could be from 0x61 0x62' - ); - } - - public function testConvertingAllLineEndingsToCRLFWhenInputIsLF() - { - $filter = $this->createFilter( - [[0x0D, 0x0A], [0x0D], [0x0A]], - [[0x0A], [0x0A], [0x0D, 0x0A]] - ); - - $this->assertEquals( - [0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63], - $filter->filter([0x60, 0x0A, 0x61, 0x0A, 0x62, 0x0A, 0x63]) - ); - } - - public function testConvertingAllLineEndingsToCRLFWhenInputIsCR() - { - $filter = $this->createFilter( - [[0x0D, 0x0A], [0x0D], [0x0A]], - [[0x0A], [0x0A], [0x0D, 0x0A]] - ); - - $this->assertEquals( - [0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63], - $filter->filter([0x60, 0x0D, 0x61, 0x0D, 0x62, 0x0D, 0x63]) - ); - } - - public function testConvertingAllLineEndingsToCRLFWhenInputIsCRLF() - { - $filter = $this->createFilter( - [[0x0D, 0x0A], [0x0D], [0x0A]], - [[0x0A], [0x0A], [0x0D, 0x0A]] - ); - - $this->assertEquals( - [0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63], - $filter->filter([0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63]) - ); - } - - public function testConvertingAllLineEndingsToCRLFWhenInputIsLFCR() - { - $filter = $this->createFilter( - [[0x0D, 0x0A], [0x0D], [0x0A]], - [[0x0A], [0x0A], [0x0D, 0x0A]] - ); - - $this->assertEquals( - [0x60, 0x0D, 0x0A, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x0D, 0x0A, 0x63], - $filter->filter([0x60, 0x0A, 0x0D, 0x61, 0x0A, 0x0D, 0x62, 0x0A, 0x0D, 0x63]) - ); - } - - public function testConvertingAllLineEndingsToCRLFWhenInputContainsLFLF() - { - //Lighthouse Bug #23 - - $filter = $this->createFilter( - [[0x0D, 0x0A], [0x0D], [0x0A]], - [[0x0A], [0x0A], [0x0D, 0x0A]] - ); - - $this->assertEquals( - [0x60, 0x0D, 0x0A, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x0D, 0x0A, 0x63], - $filter->filter([0x60, 0x0A, 0x0A, 0x61, 0x0A, 0x0A, 0x62, 0x0A, 0x0A, 0x63]) - ); - } - - private function createFilter($search, $replace) - { - return new Swift_StreamFilters_ByteArrayReplacementFilter($search, $replace); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterFactoryTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterFactoryTest.php deleted file mode 100644 index 514829f..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterFactoryTest.php +++ /dev/null @@ -1,36 +0,0 @@ -createFactory(); - $this->assertInstanceOf( - 'Swift_StreamFilters_StringReplacementFilter', - $factory->createFilter('a', 'b') - ); - } - - public function testSameInstancesAreCached() - { - $factory = $this->createFactory(); - $filter1 = $factory->createFilter('a', 'b'); - $filter2 = $factory->createFilter('a', 'b'); - $this->assertSame($filter1, $filter2, '%s: Instances should be cached'); - } - - public function testDifferingInstancesAreNotCached() - { - $factory = $this->createFactory(); - $filter1 = $factory->createFilter('a', 'b'); - $filter2 = $factory->createFilter('a', 'c'); - $this->assertNotEquals($filter1, $filter2, - '%s: Differing instances should not be cached' - ); - } - - private function createFactory() - { - return new Swift_StreamFilters_StringReplacementFilterFactory(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterTest.php deleted file mode 100644 index 1a5f4dc..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterTest.php +++ /dev/null @@ -1,59 +0,0 @@ -createFilter('foo', 'bar'); - $this->assertEquals('XbarYbarZ', $filter->filter('XfooYfooZ')); - } - - public function testShouldBufferReturnsTrueIfPartialMatchAtEndOfBuffer() - { - $filter = $this->createFilter('foo', 'bar'); - $this->assertTrue($filter->shouldBuffer('XfooYf'), - '%s: Filter should buffer since "foo" is the needle and the ending '. - '"f" could be from "foo"' - ); - } - - public function testFilterCanMakeMultipleReplacements() - { - $filter = $this->createFilter(['a', 'b'], 'foo'); - $this->assertEquals('XfooYfooZ', $filter->filter('XaYbZ')); - } - - public function testMultipleReplacementsCanBeDifferent() - { - $filter = $this->createFilter(['a', 'b'], ['foo', 'zip']); - $this->assertEquals('XfooYzipZ', $filter->filter('XaYbZ')); - } - - public function testShouldBufferReturnsFalseIfPartialMatchNotAtEndOfString() - { - $filter = $this->createFilter("\r\n", "\n"); - $this->assertFalse($filter->shouldBuffer("foo\r\nbar"), - '%s: Filter should not buffer since x0Dx0A is the needle and is not at EOF' - ); - } - - public function testShouldBufferReturnsTrueIfAnyOfMultipleMatchesAtEndOfString() - { - $filter = $this->createFilter(['foo', 'zip'], 'bar'); - $this->assertTrue($filter->shouldBuffer('XfooYzi'), - '%s: Filter should buffer since "zip" is a needle and the ending '. - '"zi" could be from "zip"' - ); - } - - public function testShouldBufferReturnsFalseOnEmptyBuffer() - { - $filter = $this->createFilter("\r\n", "\n"); - $this->assertFalse($filter->shouldBuffer('')); - } - - private function createFilter($search, $replace) - { - return new Swift_StreamFilters_StringReplacementFilter($search, $replace); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpEventSupportTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpEventSupportTest.php deleted file mode 100644 index 896171d..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpEventSupportTest.php +++ /dev/null @@ -1,558 +0,0 @@ -getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $listener = $this->getMockery('Swift_Events_EventListener'); - $smtp = $this->getTransport($buf, $dispatcher); - $dispatcher->shouldReceive('bindEventListener') - ->once() - ->with($listener); - - $smtp->registerPlugin($listener); - } - - public function testSendingDispatchesBeforeSendEvent() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $message = $this->createMessage(); - $smtp = $this->getTransport($buf, $dispatcher); - $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['chris@swiftmailer.org' => null]); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['mark@swiftmailer.org' => 'Mark']); - $dispatcher->shouldReceive('createSendEvent') - ->once() - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'beforeSendPerformed'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->zeroOrMoreTimes() - ->andReturn(false); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(1, $smtp->send($message)); - } - - public function testSendingDispatchesSendEvent() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $message = $this->createMessage(); - $smtp = $this->getTransport($buf, $dispatcher); - $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['chris@swiftmailer.org' => null]); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['mark@swiftmailer.org' => 'Mark']); - $dispatcher->shouldReceive('createSendEvent') - ->once() - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'sendPerformed'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->zeroOrMoreTimes() - ->andReturn(false); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(1, $smtp->send($message)); - } - - public function testSendEventCapturesFailures() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $smtp = $this->getTransport($buf, $dispatcher); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['chris@swiftmailer.org' => null]); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['mark@swiftmailer.org' => 'Mark']); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn("500 Not now\r\n"); - $dispatcher->shouldReceive('createSendEvent') - ->zeroOrMoreTimes() - ->with($smtp, \Mockery::any()) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'sendPerformed'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->zeroOrMoreTimes() - ->andReturn(false); - $evt->shouldReceive('setFailedRecipients') - ->once() - ->with(['mark@swiftmailer.org']); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(0, $smtp->send($message)); - } - - public function testSendEventHasResultFailedIfAllFailures() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $smtp = $this->getTransport($buf, $dispatcher); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['chris@swiftmailer.org' => null]); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['mark@swiftmailer.org' => 'Mark']); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn("500 Not now\r\n"); - $dispatcher->shouldReceive('createSendEvent') - ->zeroOrMoreTimes() - ->with($smtp, \Mockery::any()) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'sendPerformed'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->zeroOrMoreTimes() - ->andReturn(false); - $evt->shouldReceive('setResult') - ->once() - ->with(Swift_Events_SendEvent::RESULT_FAILED); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(0, $smtp->send($message)); - } - - public function testSendEventHasResultTentativeIfSomeFailures() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $smtp = $this->getTransport($buf, $dispatcher); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['chris@swiftmailer.org' => null]); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn([ - 'mark@swiftmailer.org' => 'Mark', - 'chris@site.tld' => 'Chris', - ]); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn("500 Not now\r\n"); - $dispatcher->shouldReceive('createSendEvent') - ->zeroOrMoreTimes() - ->with($smtp, \Mockery::any()) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'sendPerformed'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->zeroOrMoreTimes() - ->andReturn(false); - $evt->shouldReceive('setResult') - ->once() - ->with(Swift_Events_SendEvent::RESULT_TENTATIVE); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(1, $smtp->send($message)); - } - - public function testSendEventHasResultSuccessIfNoFailures() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $smtp = $this->getTransport($buf, $dispatcher); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['chris@swiftmailer.org' => null]); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn([ - 'mark@swiftmailer.org' => 'Mark', - 'chris@site.tld' => 'Chris', - ]); - $dispatcher->shouldReceive('createSendEvent') - ->zeroOrMoreTimes() - ->with($smtp, \Mockery::any()) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'sendPerformed'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->zeroOrMoreTimes() - ->andReturn(false); - $evt->shouldReceive('setResult') - ->once() - ->with(Swift_Events_SendEvent::RESULT_SUCCESS); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(2, $smtp->send($message)); - } - - public function testCancellingEventBubbleBeforeSendStopsEvent() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $smtp = $this->getTransport($buf, $dispatcher); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['chris@swiftmailer.org' => null]); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['mark@swiftmailer.org' => 'Mark']); - $dispatcher->shouldReceive('createSendEvent') - ->zeroOrMoreTimes() - ->with($smtp, \Mockery::any()) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'beforeSendPerformed'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->atLeast()->once() - ->andReturn(true); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(0, $smtp->send($message)); - } - - public function testStartingTransportDispatchesTransportChangeEvent() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_TransportChangeEvent'); - $smtp = $this->getTransport($buf, $dispatcher); - - $dispatcher->shouldReceive('createTransportChangeEvent') - ->atLeast()->once() - ->with($smtp) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'transportStarted'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->atLeast()->once() - ->andReturn(false); - - $this->finishBuffer($buf); - $smtp->start(); - } - - public function testStartingTransportDispatchesBeforeTransportChangeEvent() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_TransportChangeEvent'); - $smtp = $this->getTransport($buf, $dispatcher); - - $dispatcher->shouldReceive('createTransportChangeEvent') - ->atLeast()->once() - ->with($smtp) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'beforeTransportStarted'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->atLeast()->once() - ->andReturn(false); - - $this->finishBuffer($buf); - $smtp->start(); - } - - public function testCancellingBubbleBeforeTransportStartStopsEvent() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_TransportChangeEvent'); - $smtp = $this->getTransport($buf, $dispatcher); - - $dispatcher->shouldReceive('createTransportChangeEvent') - ->atLeast()->once() - ->with($smtp) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'beforeTransportStarted'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->atLeast()->once() - ->andReturn(true); - - $this->finishBuffer($buf); - $smtp->start(); - - $this->assertFalse($smtp->isStarted(), - '%s: Transport should not be started since event bubble was cancelled' - ); - } - - public function testStoppingTransportDispatchesTransportChangeEvent() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_TransportChangeEvent')->shouldIgnoreMissing(); - $smtp = $this->getTransport($buf, $dispatcher); - - $dispatcher->shouldReceive('createTransportChangeEvent') - ->atLeast()->once() - ->with($smtp) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'transportStopped'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->stop(); - } - - public function testStoppingTransportDispatchesBeforeTransportChangeEvent() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_TransportChangeEvent')->shouldIgnoreMissing(); - $smtp = $this->getTransport($buf, $dispatcher); - - $dispatcher->shouldReceive('createTransportChangeEvent') - ->atLeast()->once() - ->with($smtp) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'beforeTransportStopped'); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->stop(); - } - - public function testCancellingBubbleBeforeTransportStoppedStopsEvent() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_TransportChangeEvent'); - $smtp = $this->getTransport($buf, $dispatcher); - - $hasRun = false; - $dispatcher->shouldReceive('createTransportChangeEvent') - ->atLeast()->once() - ->with($smtp) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'beforeTransportStopped') - ->andReturnUsing(function () use (&$hasRun) { - $hasRun = true; - }); - $dispatcher->shouldReceive('dispatchEvent') - ->zeroOrMoreTimes(); - $evt->shouldReceive('bubbleCancelled') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$hasRun) { - return $hasRun; - }); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->stop(); - - $this->assertTrue($smtp->isStarted(), - '%s: Transport should not be stopped since event bubble was cancelled' - ); - } - - public function testResponseEventsAreGenerated() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_ResponseEvent'); - $smtp = $this->getTransport($buf, $dispatcher); - - $dispatcher->shouldReceive('createResponseEvent') - ->atLeast()->once() - ->with($smtp, \Mockery::any(), \Mockery::any()) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->atLeast()->once() - ->with($evt, 'responseReceived'); - - $this->finishBuffer($buf); - $smtp->start(); - } - - public function testCommandEventsAreGenerated() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_CommandEvent'); - $smtp = $this->getTransport($buf, $dispatcher); - - $dispatcher->shouldReceive('createCommandEvent') - ->once() - ->with($smtp, \Mockery::any(), \Mockery::any()) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'commandSent'); - - $this->finishBuffer($buf); - $smtp->start(); - } - - public function testExceptionsCauseExceptionEvents() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_TransportExceptionEvent'); - $smtp = $this->getTransport($buf, $dispatcher); - - $buf->shouldReceive('readLine') - ->atLeast()->once() - ->andReturn("503 I'm sleepy, go away!\r\n"); - $dispatcher->shouldReceive('createTransportExceptionEvent') - ->zeroOrMoreTimes() - ->with($smtp, \Mockery::any()) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->once() - ->with($evt, 'exceptionThrown'); - $evt->shouldReceive('bubbleCancelled') - ->atLeast()->once() - ->andReturn(false); - - try { - $smtp->start(); - $this->fail('TransportException should be thrown on invalid response'); - } catch (Swift_TransportException $e) { - } - } - - public function testExceptionBubblesCanBeCancelled() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(false); - $evt = $this->getMockery('Swift_Events_TransportExceptionEvent'); - $smtp = $this->getTransport($buf, $dispatcher); - - $buf->shouldReceive('readLine') - ->atLeast()->once() - ->andReturn("503 I'm sleepy, go away!\r\n"); - $dispatcher->shouldReceive('createTransportExceptionEvent') - ->twice() - ->with($smtp, \Mockery::any()) - ->andReturn($evt); - $dispatcher->shouldReceive('dispatchEvent') - ->twice() - ->with($evt, 'exceptionThrown'); - $evt->shouldReceive('bubbleCancelled') - ->atLeast()->once() - ->andReturn(true); - - $this->finishBuffer($buf); - $smtp->start(); - } - - protected function createEventDispatcher($stub = true) - { - return $this->getMockery('Swift_Events_EventDispatcher')->shouldIgnoreMissing(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpTest.php deleted file mode 100644 index 4c837fa..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpTest.php +++ /dev/null @@ -1,1400 +0,0 @@ -getBuffer(); - $smtp = $this->getTransport($buf); - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - - $this->finishBuffer($buf); - try { - $this->assertFalse($smtp->isStarted(), '%s: SMTP should begin non-started'); - $smtp->start(); - $this->assertTrue($smtp->isStarted(), '%s: start() should have started connection'); - } catch (Exception $e) { - $this->fail('220 is a valid SMTP greeting and should be accepted'); - } - } - - public function testBadGreetingCausesException() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("554 I'm busy\r\n"); - $this->finishBuffer($buf); - try { - $this->assertFalse($smtp->isStarted(), '%s: SMTP should begin non-started'); - $smtp->start(); - $this->fail('554 greeting indicates an error and should cause an exception'); - } catch (Swift_TransportException $e) { - $this->assertFalse($smtp->isStarted(), '%s: start() should have failed'); - } - } - - public function testStartSendsHeloToInitiate() - { - /* -- RFC 2821, 3.2. - - 3.2 Client Initiation - - Once the server has sent the welcoming message and the client has - received it, the client normally sends the EHLO command to the - server, indicating the client's identity. In addition to opening the - session, use of EHLO indicates that the client is able to process - service extensions and requests that the server provide a list of the - extensions it supports. Older SMTP systems which are unable to - support service extensions and contemporary clients which do not - require service extensions in the mail session being initiated, MAY - use HELO instead of EHLO. Servers MUST NOT return the extended - EHLO-style response to a HELO command. For a particular connection - attempt, if the server returns a "command not recognized" response to - EHLO, the client SHOULD be able to fall back and send HELO. - - In the EHLO command the host sending the command identifies itself; - the command may be interpreted as saying "Hello, I am " (and, - in the case of EHLO, "and I support service extension requests"). - - -- RFC 2281, 4.1.1.1. - - ehlo = "EHLO" SP Domain CRLF - helo = "HELO" SP Domain CRLF - - -- RFC 2821, 4.3.2. - - EHLO or HELO - S: 250 - E: 504, 550 - - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^HELO example.org\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 ServerName'."\r\n"); - - $this->finishBuffer($buf); - try { - $smtp->start(); - } catch (Exception $e) { - $this->fail('Starting SMTP should send HELO and accept 250 response'); - } - } - - public function testInvalidHeloResponseCausesException() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^HELO example.org\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('504 WTF'."\r\n"); - - $this->finishBuffer($buf); - try { - $this->assertFalse($smtp->isStarted(), '%s: SMTP should begin non-started'); - $smtp->start(); - $this->fail('Non 250 HELO response should raise Exception'); - } catch (Swift_TransportException $e) { - $this->assertFalse($smtp->isStarted(), '%s: SMTP start() should have failed'); - } - } - - public function testDomainNameIsPlacedInHelo() - { - /* -- RFC 2821, 4.1.4. - - The SMTP client MUST, if possible, ensure that the domain parameter - to the EHLO command is a valid principal host name (not a CNAME or MX - name) for its host. If this is not possible (e.g., when the client's - address is dynamically assigned and the client does not have an - obvious name), an address literal SHOULD be substituted for the - domain name and supplemental information provided that will assist in - identifying the client. - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("HELO mydomain.com\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 ServerName'."\r\n"); - - $this->finishBuffer($buf); - $smtp->setLocalDomain('mydomain.com'); - $smtp->start(); - } - - public function testSuccessfulMailCommand() - { - /* -- RFC 2821, 3.3. - - There are three steps to SMTP mail transactions. The transaction - starts with a MAIL command which gives the sender identification. - - ..... - - The first step in the procedure is the MAIL command. - - MAIL FROM: [SP ] - - -- RFC 2821, 4.1.1.2. - - Syntax: - - "MAIL FROM:" ("<>" / Reverse-Path) - [SP Mail-parameters] CRLF - -- RFC 2821, 4.1.2. - - Reverse-path = Path - Forward-path = Path - Path = "<" [ A-d-l ":" ] Mailbox ">" - A-d-l = At-domain *( "," A-d-l ) - ; Note that this form, the so-called "source route", - ; MUST BE accepted, SHOULD NOT be generated, and SHOULD be - ; ignored. - At-domain = "@" domain - - -- RFC 2821, 4.3.2. - - MAIL - S: 250 - E: 552, 451, 452, 550, 553, 503 - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 OK\r\n"); - - $this->finishBuffer($buf); - try { - $smtp->start(); - $smtp->send($message); - } catch (Exception $e) { - $this->fail('MAIL FROM should accept a 250 response'); - } - } - - public function testInvalidResponseCodeFromMailCausesException() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('553 Bad'."\r\n"); - - $this->finishBuffer($buf); - try { - $smtp->start(); - $smtp->send($message); - $this->fail('MAIL FROM should accept a 250 response'); - } catch (Swift_TransportException $e) { - } - } - - public function testSenderIsPreferredOverFrom() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getSender') - ->once() - ->andReturn(['another@domain.com' => 'Someone']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - } - - public function testReturnPathIsPreferredOverSender() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getSender') - ->once() - ->andReturn(['another@domain.com' => 'Someone']); - $message->shouldReceive('getReturnPath') - ->once() - ->andReturn('more@domain.com'); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - } - - public function testSuccessfulRcptCommandWith250Response() - { - /* -- RFC 2821, 3.3. - - The second step in the procedure is the RCPT command. - - RCPT TO: [ SP ] - - The first or only argument to this command includes a forward-path - (normally a mailbox and domain, always surrounded by "<" and ">" - brackets) identifying one recipient. If accepted, the SMTP server - returns a 250 OK reply and stores the forward-path. If the recipient - is known not to be a deliverable address, the SMTP server returns a - 550 reply, typically with a string such as "no such user - " and the - mailbox name (other circumstances and reply codes are possible). - This step of the procedure can be repeated any number of times. - - -- RFC 2821, 4.1.1.3. - - This command is used to identify an individual recipient of the mail - data; multiple recipients are specified by multiple use of this - command. The argument field contains a forward-path and may contain - optional parameters. - - The forward-path normally consists of the required destination - mailbox. Sending systems SHOULD not generate the optional list of - hosts known as a source route. - - ....... - - "RCPT TO:" ("" / "" / Forward-Path) - [SP Rcpt-parameters] CRLF - - -- RFC 2821, 4.2.2. - - 250 Requested mail action okay, completed - 251 User not local; will forward to - (See section 3.4) - 252 Cannot VRFY user, but will accept message and attempt - delivery - - -- RFC 2821, 4.3.2. - - RCPT - S: 250, 251 (but see section 3.4 for discussion of 251 and 551) - E: 550, 551, 552, 553, 450, 451, 452, 503, 550 - */ - - //We'll treat 252 as accepted since it isn't really a failure - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 OK'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - try { - $smtp->start(); - $smtp->send($message); - } catch (Exception $e) { - $this->fail('RCPT TO should accept a 250 response'); - } - } - - public function testUtf8AddressWithIdnEncoder() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@dömain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bär' => null]); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - } - - public function testUtf8AddressWithUtf8Encoder() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf, null, new Swift_AddressEncoder_Utf8AddressEncoder()); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['më@dömain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['föö@bär' => null]); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - } - - public function testNonEncodableSenderCausesException() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['më@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - - $this->finishBuffer($buf); - try { - $smtp->start(); - $smtp->send($message); - $this->fail('më@domain.com cannot be encoded (not observed)'); - } catch (Swift_AddressEncoderException $e) { - $this->assertEquals('më@domain.com', $e->getAddress()); - } - } - - public function testMailFromCommandIsOnlySentOncePerMessage() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 OK'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('250 OK'."\r\n"); - $buf->shouldReceive('write') - ->never() - ->with("MAIL FROM:\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - } - - public function testMultipleRecipientsSendsMultipleRcpt() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn([ - 'foo@bar' => null, - 'zip@button' => 'Zip Button', - 'test@domain' => 'Test user', - 'tëst@domain' => 'Test user', - ]); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 OK'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('250 OK'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(3); - $buf->shouldReceive('readLine') - ->once() - ->with(3) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - } - - public function testCcRecipientsSendsMultipleRcpt() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $message->shouldReceive('getCc') - ->once() - ->andReturn([ - 'zip@button' => 'Zip Button', - 'test@domain' => 'Test user', - ]); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 OK'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('250 OK'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(3); - $buf->shouldReceive('readLine') - ->once() - ->with(3) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - } - - public function testSendReturnsNumberOfSuccessfulRecipients() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $message->shouldReceive('getCc') - ->once() - ->andReturn([ - 'zip@button' => 'Zip Button', - 'test@domain' => 'Test user', - ]); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 OK'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('501 Nobody here'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(3); - $buf->shouldReceive('readLine') - ->once() - ->with(3) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(2, $smtp->send($message), - '%s: 1 of 3 recipients failed so 2 should be returned' - ); - } - - public function testRsetIsSentIfNoSuccessfulRecipients() - { - /* --RFC 2821, 4.1.1.5. - - This command specifies that the current mail transaction will be - aborted. Any stored sender, recipients, and mail data MUST be - discarded, and all buffers and state tables cleared. The receiver - MUST send a "250 OK" reply to a RSET command with no arguments. A - reset command may be issued by the client at any time. - - -- RFC 2821, 4.3.2. - - RSET - S: 250 - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('503 Bad'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RSET\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(0, $smtp->send($message), - '%s: 1 of 1 recipients failed so 0 should be returned' - ); - } - - public function testSuccessfulDataCommand() - { - /* -- RFC 2821, 3.3. - - The third step in the procedure is the DATA command (or some - alternative specified in a service extension). - - DATA - - If accepted, the SMTP server returns a 354 Intermediate reply and - considers all succeeding lines up to but not including the end of - mail data indicator to be the message text. - - -- RFC 2821, 4.1.1.4. - - The receiver normally sends a 354 response to DATA, and then treats - the lines (strings ending in sequences, as described in - section 2.3.7) following the command as mail data from the sender. - This command causes the mail data to be appended to the mail data - buffer. The mail data may contain any of the 128 ASCII character - codes, although experience has indicated that use of control - characters other than SP, HT, CR, and LF may cause problems and - SHOULD be avoided when possible. - - -- RFC 2821, 4.3.2. - - DATA - I: 354 -> data -> S: 250 - E: 552, 554, 451, 452 - E: 451, 554, 503 - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('write') - ->once() - ->with("DATA\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('354 Go ahead'."\r\n"); - - $this->finishBuffer($buf); - try { - $smtp->start(); - $smtp->send($message); - } catch (Exception $e) { - $this->fail('354 is the expected response to DATA'); - } - } - - public function testBadDataResponseCausesException() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('write') - ->once() - ->with("DATA\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('451 Bad'."\r\n"); - - $this->finishBuffer($buf); - try { - $smtp->start(); - $smtp->send($message); - $this->fail('354 is the expected response to DATA (not observed)'); - } catch (Swift_TransportException $e) { - } - } - - public function testMessageIsStreamedToBufferForData() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('write') - ->once() - ->with("DATA\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('354 OK'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("\r\n.\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - } - - public function testBadResponseAfterDataTransmissionCausesException() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->once() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->once() - ->andReturn(['foo@bar' => null]); - $buf->shouldReceive('write') - ->once() - ->with("DATA\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('354 OK'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("\r\n.\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('554 Error'."\r\n"); - - $this->finishBuffer($buf); - try { - $smtp->start(); - $smtp->send($message); - $this->fail('250 is the expected response after a DATA transmission (not observed)'); - } catch (Swift_TransportException $e) { - } - } - - public function testBccRecipientsAreRemovedFromHeaders() - { - /* -- RFC 2821, 7.2. - - Addresses that do not appear in the message headers may appear in the - RCPT commands to an SMTP server for a number of reasons. The two - most common involve the use of a mailing address as a "list exploder" - (a single address that resolves into multiple addresses) and the - appearance of "blind copies". Especially when more than one RCPT - command is present, and in order to avoid defeating some of the - purpose of these mechanisms, SMTP clients and servers SHOULD NOT copy - the full set of RCPT command arguments into the headers, either as - part of trace headers or as informational or private-extension - headers. Since this rule is often violated in practice, and cannot - be enforced, sending SMTP systems that are aware of "bcc" use MAY - find it helpful to send each blind copy as a separate message - transaction containing only a single RCPT command. - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => null]); - $message->shouldReceive('getBcc') - ->zeroOrMoreTimes() - ->andReturn([ - 'zip@button' => 'Zip Button', - 'test@domain' => 'Test user', - ]); - $message->shouldReceive('setBcc') - ->once() - ->with([]); - $message->shouldReceive('setBcc') - ->zeroOrMoreTimes(); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - } - - public function testEachBccRecipientIsSentASeparateMessage() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => null]); - $message->shouldReceive('getBcc') - ->zeroOrMoreTimes() - ->andReturn([ - 'zip@button' => 'Zip Button', - 'test@domain' => 'Test user', - ]); - $message->shouldReceive('setBcc') - ->atLeast()->once() - ->with([]); - $message->shouldReceive('setBcc') - ->once() - ->with(['zip@button' => 'Zip Button']); - $message->shouldReceive('setBcc') - ->once() - ->with(['test@domain' => 'Test user']); - $message->shouldReceive('setBcc') - ->atLeast()->once() - ->with([ - 'zip@button' => 'Zip Button', - 'test@domain' => 'Test user', - ]); - - $buf->shouldReceive('write')->once()->with("MAIL FROM:\r\n")->andReturn(1); - $buf->shouldReceive('readLine')->once()->with(1)->andReturn("250 OK\r\n"); - $buf->shouldReceive('write')->once()->with("RCPT TO:\r\n")->andReturn(2); - $buf->shouldReceive('readLine')->once()->with(2)->andReturn("250 OK\r\n"); - $buf->shouldReceive('write')->once()->with("DATA\r\n")->andReturn(3); - $buf->shouldReceive('readLine')->once()->with(3)->andReturn("354 OK\r\n"); - $buf->shouldReceive('write')->once()->with("\r\n.\r\n")->andReturn(4); - $buf->shouldReceive('readLine')->once()->with(4)->andReturn("250 OK\r\n"); - - $buf->shouldReceive('write')->once()->with("MAIL FROM:\r\n")->andReturn(5); - $buf->shouldReceive('readLine')->once()->with(5)->andReturn("250 OK\r\n"); - $buf->shouldReceive('write')->once()->with("RCPT TO:\r\n")->andReturn(6); - $buf->shouldReceive('readLine')->once()->with(6)->andReturn("250 OK\r\n"); - $buf->shouldReceive('write')->once()->with("DATA\r\n")->andReturn(7); - $buf->shouldReceive('readLine')->once()->with(7)->andReturn("354 OK\r\n"); - $buf->shouldReceive('write')->once()->with("\r\n.\r\n")->andReturn(8); - $buf->shouldReceive('readLine')->once()->with(8)->andReturn("250 OK\r\n"); - - $buf->shouldReceive('write')->once()->with("MAIL FROM:\r\n")->andReturn(9); - $buf->shouldReceive('readLine')->once()->with(9)->andReturn("250 OK\r\n"); - $buf->shouldReceive('write')->once()->with("RCPT TO:\r\n")->andReturn(10); - $buf->shouldReceive('readLine')->once()->with(10)->andReturn("250 OK\r\n"); - $buf->shouldReceive('write')->once()->with("DATA\r\n")->andReturn(11); - $buf->shouldReceive('readLine')->once()->with(11)->andReturn("354 OK\r\n"); - $buf->shouldReceive('write')->once()->with("\r\n.\r\n")->andReturn(12); - $buf->shouldReceive('readLine')->once()->with(12)->andReturn("250 OK\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(3, $smtp->send($message)); - } - - public function testMessageStateIsRestoredOnFailure() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => null]); - $message->shouldReceive('getBcc') - ->zeroOrMoreTimes() - ->andReturn([ - 'zip@button' => 'Zip Button', - 'test@domain' => 'Test user', - ]); - $message->shouldReceive('setBcc') - ->once() - ->with([]); - $message->shouldReceive('setBcc') - ->once() - ->with([ - 'zip@button' => 'Zip Button', - 'test@domain' => 'Test user', - ]); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("DATA\r\n") - ->andReturn(3); - $buf->shouldReceive('readLine') - ->once() - ->with(3) - ->andReturn("451 No\r\n"); - - $this->finishBuffer($buf); - - $smtp->start(); - try { - $smtp->send($message); - $this->fail('A bad response was given so exception is expected'); - } catch (Swift_TransportException $e) { - } - } - - public function testStopSendsQuitCommand() - { - /* -- RFC 2821, 4.1.1.10. - - This command specifies that the receiver MUST send an OK reply, and - then close the transmission channel. - - The receiver MUST NOT intentionally close the transmission channel - until it receives and replies to a QUIT command (even if there was an - error). The sender MUST NOT intentionally close the transmission - channel until it sends a QUIT command and SHOULD wait until it - receives the reply (even if there was an error response to a previous - command). If the connection is closed prematurely due to violations - of the above or system or network failure, the server MUST cancel any - pending transaction, but not undo any previously completed - transaction, and generally MUST act as if the command or transaction - in progress had received a temporary error (i.e., a 4yz response). - - The QUIT command may be issued at any time. - - Syntax: - "QUIT" CRLF - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('write') - ->once() - ->with("QUIT\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("221 Bye\r\n"); - $buf->shouldReceive('terminate') - ->once(); - - $this->finishBuffer($buf); - - $this->assertFalse($smtp->isStarted()); - $smtp->start(); - $this->assertTrue($smtp->isStarted()); - $smtp->stop(); - $this->assertFalse($smtp->isStarted()); - } - - public function testBufferCanBeFetched() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $ref = $smtp->getBuffer(); - $this->assertEquals($buf, $ref); - } - - public function testBufferCanBeWrittenToUsingExecuteCommand() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - $buf->shouldReceive('write') - ->zeroOrMoreTimes() - ->with("FOO\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->zeroOrMoreTimes() - ->with(1) - ->andReturn("250 OK\r\n"); - - $res = $smtp->executeCommand("FOO\r\n"); - $this->assertEquals("250 OK\r\n", $res); - } - - public function testResponseCodesAreValidated() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - $buf->shouldReceive('write') - ->zeroOrMoreTimes() - ->with("FOO\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->zeroOrMoreTimes() - ->with(1) - ->andReturn("551 Not ok\r\n"); - - try { - $smtp->executeCommand("FOO\r\n", [250, 251]); - $this->fail('A 250 or 251 response was needed but 551 was returned.'); - } catch (Swift_TransportException $e) { - } - } - - public function testFailedRecipientsCanBeCollectedByReference() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => null]); - $message->shouldReceive('getBcc') - ->zeroOrMoreTimes() - ->andReturn([ - 'zip@button' => 'Zip Button', - 'test@domain' => 'Test user', - ]); - $message->shouldReceive('setBcc') - ->atLeast()->once() - ->with([]); - $message->shouldReceive('setBcc') - ->once() - ->with(['zip@button' => 'Zip Button']); - $message->shouldReceive('setBcc') - ->once() - ->with(['test@domain' => 'Test user']); - $message->shouldReceive('setBcc') - ->atLeast()->once() - ->with([ - 'zip@button' => 'Zip Button', - 'test@domain' => 'Test user', - ]); - - $buf->shouldReceive('write')->once()->with("MAIL FROM:\r\n")->andReturn(1); - $buf->shouldReceive('readLine')->once()->with(1)->andReturn("250 OK\r\n"); - $buf->shouldReceive('write')->once()->with("RCPT TO:\r\n")->andReturn(2); - $buf->shouldReceive('readLine')->once()->with(2)->andReturn("250 OK\r\n"); - $buf->shouldReceive('write')->once()->with("DATA\r\n")->andReturn(3); - $buf->shouldReceive('readLine')->once()->with(3)->andReturn("354 OK\r\n"); - $buf->shouldReceive('write')->once()->with("\r\n.\r\n")->andReturn(4); - $buf->shouldReceive('readLine')->once()->with(4)->andReturn("250 OK\r\n"); - - $buf->shouldReceive('write')->once()->with("MAIL FROM:\r\n")->andReturn(5); - $buf->shouldReceive('readLine')->once()->with(5)->andReturn("250 OK\r\n"); - $buf->shouldReceive('write')->once()->with("RCPT TO:\r\n")->andReturn(6); - $buf->shouldReceive('readLine')->once()->with(6)->andReturn("500 Bad\r\n"); - $buf->shouldReceive('write')->once()->with("RSET\r\n")->andReturn(7); - $buf->shouldReceive('readLine')->once()->with(7)->andReturn("250 OK\r\n"); - - $buf->shouldReceive('write')->once()->with("MAIL FROM:\r\n")->andReturn(9); - $buf->shouldReceive('readLine')->once()->with(9)->andReturn("250 OK\r\n"); - $buf->shouldReceive('write')->once()->with("RCPT TO:\r\n")->andReturn(10); - $buf->shouldReceive('readLine')->once()->with(10)->andReturn("500 Bad\r\n"); - $buf->shouldReceive('write')->once()->with("RSET\r\n")->andReturn(11); - $buf->shouldReceive('readLine')->once()->with(11)->andReturn("250 OK\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertEquals(1, $smtp->send($message, $failures)); - $this->assertEquals(['zip@button', 'test@domain'], $failures, - '%s: Failures should be caught in an array' - ); - } - - public function testSendingRegeneratesMessageId() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $message = $this->createMessage(); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => null]); - $message->shouldReceive('generateId') - ->once(); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - } - - public function testPing() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^NOOP\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 OK'."\r\n"); - - $this->finishBuffer($buf); - $this->assertTrue($smtp->ping()); - } - - public function testPingOnDeadConnection() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^NOOP\r\n$~D') - ->andThrow('Swift_TransportException'); - - $this->finishBuffer($buf); - $smtp->start(); - $this->assertTrue($smtp->isStarted()); - $this->assertFalse($smtp->ping()); - $this->assertFalse($smtp->isStarted()); - } - - public function testSetLocalDomain() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - - $smtp->setLocalDomain('example.com'); - $this->assertEquals('example.com', $smtp->getLocalDomain()); - - $smtp->setLocalDomain('192.168.0.1'); - $this->assertEquals('[192.168.0.1]', $smtp->getLocalDomain()); - - $smtp->setLocalDomain('[192.168.0.1]'); - $this->assertEquals('[192.168.0.1]', $smtp->getLocalDomain()); - - $smtp->setLocalDomain('fd00::'); - $this->assertEquals('[IPv6:fd00::]', $smtp->getLocalDomain()); - - $smtp->setLocalDomain('[IPv6:fd00::]'); - $this->assertEquals('[IPv6:fd00::]', $smtp->getLocalDomain()); - } - - protected function getBuffer() - { - return $this->getMockery('Swift_Transport_IoBuffer')->shouldIgnoreMissing(); - } - - protected function createMessage() - { - return $this->getMockery('Swift_Mime_SimpleMessage')->shouldIgnoreMissing(); - } - - protected function finishBuffer($buf) - { - $buf->shouldReceive('readLine') - ->zeroOrMoreTimes() - ->with(0) - ->andReturn('220 server.com foo'."\r\n"); - $buf->shouldReceive('write') - ->zeroOrMoreTimes() - ->with('~^(EH|HE)LO .*?\r\n$~D') - ->andReturn($x = uniqid('', true)); - $buf->shouldReceive('readLine') - ->zeroOrMoreTimes() - ->with($x) - ->andReturn('250 ServerName'."\r\n"); - $buf->shouldReceive('write') - ->zeroOrMoreTimes() - ->with('~^MAIL FROM:<.*?>\r\n$~D') - ->andReturn($x = uniqid('', true)); - $buf->shouldReceive('readLine') - ->zeroOrMoreTimes() - ->with($x) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('write') - ->zeroOrMoreTimes() - ->with('~^RCPT TO:<.*?>\r\n$~D') - ->andReturn($x = uniqid('', true)); - $buf->shouldReceive('readLine') - ->zeroOrMoreTimes() - ->with($x) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('write') - ->zeroOrMoreTimes() - ->with("DATA\r\n") - ->andReturn($x = uniqid('', true)); - $buf->shouldReceive('readLine') - ->zeroOrMoreTimes() - ->with($x) - ->andReturn("354 OK\r\n"); - $buf->shouldReceive('write') - ->zeroOrMoreTimes() - ->with("\r\n.\r\n") - ->andReturn($x = uniqid('', true)); - $buf->shouldReceive('readLine') - ->zeroOrMoreTimes() - ->with($x) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('write') - ->zeroOrMoreTimes() - ->with("RSET\r\n") - ->andReturn($x = uniqid('', true)); - $buf->shouldReceive('readLine') - ->zeroOrMoreTimes() - ->with($x) - ->andReturn("250 OK\r\n"); - - $buf->shouldReceive('write') - ->zeroOrMoreTimes() - ->andReturn(false); - $buf->shouldReceive('readLine') - ->zeroOrMoreTimes() - ->andReturn(false); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/CramMd5AuthenticatorTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/CramMd5AuthenticatorTest.php deleted file mode 100644 index ba131e8..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/CramMd5AuthenticatorTest.php +++ /dev/null @@ -1,65 +0,0 @@ -agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); - } - - public function testKeywordIsCramMd5() - { - /* -- RFC 2195, 2. - The authentication type associated with CRAM is "CRAM-MD5". - */ - - $cram = $this->getAuthenticator(); - $this->assertEquals('CRAM-MD5', $cram->getAuthKeyword()); - } - - public function testSuccessfulAuthentication() - { - $cram = $this->getAuthenticator(); - - $this->agent->shouldReceive('executeCommand') - ->once() - ->with("AUTH CRAM-MD5\r\n", [334]) - ->andReturn('334 '.base64_encode('')."\r\n"); - $this->agent->shouldReceive('executeCommand') - ->once() - ->with(\Mockery::any(), [235]); - - $this->assertTrue($cram->authenticate($this->agent, 'jack', 'pass'), - '%s: The buffer accepted all commands authentication should succeed' - ); - } - - /** - * @expectedException \Swift_TransportException - */ - public function testAuthenticationFailureSendRset() - { - $cram = $this->getAuthenticator(); - - $this->agent->shouldReceive('executeCommand') - ->once() - ->with("AUTH CRAM-MD5\r\n", [334]) - ->andReturn('334 '.base64_encode('')."\r\n"); - $this->agent->shouldReceive('executeCommand') - ->once() - ->with(\Mockery::any(), [235]) - ->andThrow(new Swift_TransportException('')); - $this->agent->shouldReceive('executeCommand') - ->once() - ->with("RSET\r\n", [250]); - - $cram->authenticate($this->agent, 'jack', 'pass'); - } - - private function getAuthenticator() - { - return new Swift_Transport_Esmtp_Auth_CramMd5Authenticator(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/LoginAuthenticatorTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/LoginAuthenticatorTest.php deleted file mode 100644 index 499ceb7..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/LoginAuthenticatorTest.php +++ /dev/null @@ -1,65 +0,0 @@ -agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); - } - - public function testKeywordIsLogin() - { - $login = $this->getAuthenticator(); - $this->assertEquals('LOGIN', $login->getAuthKeyword()); - } - - public function testSuccessfulAuthentication() - { - $login = $this->getAuthenticator(); - - $this->agent->shouldReceive('executeCommand') - ->once() - ->with("AUTH LOGIN\r\n", [334]); - $this->agent->shouldReceive('executeCommand') - ->once() - ->with(base64_encode('jack')."\r\n", [334]); - $this->agent->shouldReceive('executeCommand') - ->once() - ->with(base64_encode('pass')."\r\n", [235]); - - $this->assertTrue($login->authenticate($this->agent, 'jack', 'pass'), - '%s: The buffer accepted all commands authentication should succeed' - ); - } - - /** - * @expectedException \Swift_TransportException - */ - public function testAuthenticationFailureSendRset() - { - $login = $this->getAuthenticator(); - - $this->agent->shouldReceive('executeCommand') - ->once() - ->with("AUTH LOGIN\r\n", [334]); - $this->agent->shouldReceive('executeCommand') - ->once() - ->with(base64_encode('jack')."\r\n", [334]); - $this->agent->shouldReceive('executeCommand') - ->once() - ->with(base64_encode('pass')."\r\n", [235]) - ->andThrow(new Swift_TransportException('')); - $this->agent->shouldReceive('executeCommand') - ->once() - ->with("RSET\r\n", [250]); - - $login->authenticate($this->agent, 'jack', 'pass'); - } - - private function getAuthenticator() - { - return new Swift_Transport_Esmtp_Auth_LoginAuthenticator(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/NTLMAuthenticatorTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/NTLMAuthenticatorTest.php deleted file mode 100644 index 98e2e25..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/NTLMAuthenticatorTest.php +++ /dev/null @@ -1,204 +0,0 @@ -markTestSkipped('One of the required functions is not available.'); - } - } - - public function testKeywordIsNtlm() - { - $login = $this->getAuthenticator(); - $this->assertEquals('NTLM', $login->getAuthKeyword()); - } - - public function testMessage1Generator() - { - $login = $this->getAuthenticator(); - $message1 = $this->invokePrivateMethod('createMessage1', $login); - - $this->assertEquals($this->message1, bin2hex($message1), '%s: We send the smallest ntlm message which should never fail.'); - } - - public function testLMv1Generator() - { - $password = 'test1234'; - $challenge = 'b019d38bad875c9d'; - $lmv1 = '1879f60127f8a877022132ec221bcbf3ca016a9f76095606'; - - $login = $this->getAuthenticator(); - $lmv1Result = $this->invokePrivateMethod('createLMPassword', $login, [$password, hex2bin($challenge)]); - - $this->assertEquals($lmv1, bin2hex($lmv1Result), '%s: The keys should be the same cause we use the same values to generate them.'); - } - - public function testLMv2Generator() - { - $username = 'user'; - $password = 'SecREt01'; - $domain = 'DOMAIN'; - $challenge = '0123456789abcdef'; - $lmv2 = 'd6e6152ea25d03b7c6ba6629c2d6aaf0ffffff0011223344'; - - $login = $this->getAuthenticator(); - $lmv2Result = $this->invokePrivateMethod('createLMv2Password', $login, [$password, $username, $domain, hex2bin($challenge), hex2bin('ffffff0011223344')]); - - $this->assertEquals($lmv2, bin2hex($lmv2Result), '%s: The keys should be the same cause we use the same values to generate them.'); - } - - public function testMessage3v1Generator() - { - $username = 'test'; - $domain = 'TESTNT'; - $workstation = 'MEMBER'; - $lmResponse = '1879f60127f8a877022132ec221bcbf3ca016a9f76095606'; - $ntlmResponse = 'e6285df3287c5d194f84df1a94817c7282d09754b6f9e02a'; - $message3T = '4e544c4d5353500003000000180018006000000018001800780000000c000c0040000000080008004c0000000c000c0054000000000000009a0000000102000054004500530054004e00540074006500730074004d0045004d004200450052001879f60127f8a877022132ec221bcbf3ca016a9f76095606e6285df3287c5d194f84df1a94817c7282d09754b6f9e02a'; - - $login = $this->getAuthenticator(); - $message3 = $this->invokePrivateMethod('createMessage3', $login, [$domain, $username, $workstation, hex2bin($lmResponse), hex2bin($ntlmResponse)]); - - $this->assertEquals($message3T, bin2hex($message3), '%s: We send the same information as the example is created with so this should be the same'); - } - - public function testMessage3v2Generator() - { - $username = 'test'; - $domain = 'TESTNT'; - $workstation = 'MEMBER'; - $lmResponse = 'bf2e015119f6bdb3f6fdb768aa12d478f5ce3d2401c8f6e9'; - $ntlmResponse = 'caa4da8f25d5e840974ed8976d3ada46010100000000000030fa7e3c677bc301f5ce3d2401c8f6e90000000002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d000000000000000000'; - - $login = $this->getAuthenticator(); - $message3 = $this->invokePrivateMethod('createMessage3', $login, [$domain, $username, $workstation, hex2bin($lmResponse), hex2bin($ntlmResponse)]); - - $this->assertEquals($this->message3, bin2hex($message3), '%s: We send the same information as the example is created with so this should be the same'); - } - - public function testGetDomainAndUsername() - { - $username = "DOMAIN\user"; - - $login = $this->getAuthenticator(); - list($domain, $user) = $this->invokePrivateMethod('getDomainAndUsername', $login, [$username]); - - $this->assertEquals('DOMAIN', $domain, '%s: the fetched domain did not match'); - $this->assertEquals('user', $user, '%s: the fetched user did not match'); - } - - public function testGetDomainAndUsernameWithExtension() - { - $username = "domain.com\user"; - - $login = $this->getAuthenticator(); - list($domain, $user) = $this->invokePrivateMethod('getDomainAndUsername', $login, [$username]); - - $this->assertEquals('domain.com', $domain, '%s: the fetched domain did not match'); - $this->assertEquals('user', $user, '%s: the fetched user did not match'); - } - - public function testGetDomainAndUsernameWithAtSymbol() - { - $username = 'user@DOMAIN'; - - $login = $this->getAuthenticator(); - list($domain, $user) = $this->invokePrivateMethod('getDomainAndUsername', $login, [$username]); - - $this->assertEquals('DOMAIN', $domain, '%s: the fetched domain did not match'); - $this->assertEquals('user', $user, '%s: the fetched user did not match'); - } - - public function testGetDomainAndUsernameWithAtSymbolAndExtension() - { - $username = 'user@domain.com'; - - $login = $this->getAuthenticator(); - list($domain, $user) = $this->invokePrivateMethod('getDomainAndUsername', $login, [$username]); - - $this->assertEquals('domain.com', $domain, '%s: the fetched domain did not match'); - $this->assertEquals('user', $user, '%s: the fetched user did not match'); - } - - public function testGetDomainAndUsernameWithoutDomain() - { - $username = 'user'; - - $login = $this->getAuthenticator(); - list($domain, $user) = $this->invokePrivateMethod('getDomainAndUsername', $login, [$username]); - - $this->assertEquals('', $domain, '%s: the fetched domain did not match'); - $this->assertEquals('user', $user, '%s: the fetched user did not match'); - } - - public function testSuccessfulAuthentication() - { - $domain = 'TESTNT'; - $username = 'test'; - $secret = 'test1234'; - - $ntlm = $this->getAuthenticator(); - $agent = $this->getAgent(); - $agent->shouldReceive('executeCommand') - ->once() - ->with('AUTH NTLM '.base64_encode( - $this->invokePrivateMethod('createMessage1', $ntlm) - )."\r\n", [334]) - ->andReturn('334 '.base64_encode(hex2bin('4e544c4d53535000020000000c000c003000000035828980514246973ea892c10000000000000000460046003c00000054004500530054004e00540002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d0000000000'))); - $agent->shouldReceive('executeCommand') - ->once() - ->with(base64_encode( - $this->invokePrivateMethod('createMessage3', $ntlm, [$domain, $username, hex2bin('4d0045004d00420045005200'), hex2bin('bf2e015119f6bdb3f6fdb768aa12d478f5ce3d2401c8f6e9'), hex2bin('caa4da8f25d5e840974ed8976d3ada46010100000000000030fa7e3c677bc301f5ce3d2401c8f6e90000000002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d000000000000000000')] - ))."\r\n", [235]); - - $this->assertTrue($ntlm->authenticate($agent, $username.'@'.$domain, $secret, hex2bin('30fa7e3c677bc301'), hex2bin('f5ce3d2401c8f6e9')), '%s: The buffer accepted all commands authentication should succeed'); - } - - /** - * @expectedException \Swift_TransportException - */ - public function testAuthenticationFailureSendRset() - { - $domain = 'TESTNT'; - $username = 'test'; - $secret = 'test1234'; - - $ntlm = $this->getAuthenticator(); - $agent = $this->getAgent(); - $agent->shouldReceive('executeCommand') - ->once() - ->with('AUTH NTLM '.base64_encode( - $this->invokePrivateMethod('createMessage1', $ntlm) - )."\r\n", [334]) - ->andThrow(new Swift_TransportException('')); - $agent->shouldReceive('executeCommand') - ->once() - ->with("RSET\r\n", [250]); - - $ntlm->authenticate($agent, $username.'@'.$domain, $secret, hex2bin('30fa7e3c677bc301'), hex2bin('f5ce3d2401c8f6e9')); - } - - private function getAuthenticator() - { - return new Swift_Transport_Esmtp_Auth_NTLMAuthenticator(); - } - - private function getAgent() - { - return $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); - } - - private function invokePrivateMethod($method, $instance, array $args = []) - { - $methodC = new ReflectionMethod($instance, trim($method)); - $methodC->setAccessible(true); - - return $methodC->invokeArgs($instance, $args); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/PlainAuthenticatorTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/PlainAuthenticatorTest.php deleted file mode 100644 index 1bb2c99..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/PlainAuthenticatorTest.php +++ /dev/null @@ -1,68 +0,0 @@ -agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); - } - - public function testKeywordIsPlain() - { - /* -- RFC 4616, 1. - The name associated with this mechanism is "PLAIN". - */ - - $login = $this->getAuthenticator(); - $this->assertEquals('PLAIN', $login->getAuthKeyword()); - } - - public function testSuccessfulAuthentication() - { - /* -- RFC 4616, 2. - The client presents the authorization identity (identity to act as), - followed by a NUL (U+0000) character, followed by the authentication - identity (identity whose password will be used), followed by a NUL - (U+0000) character, followed by the clear-text password. - */ - - $plain = $this->getAuthenticator(); - - $this->agent->shouldReceive('executeCommand') - ->once() - ->with('AUTH PLAIN '.base64_encode( - 'jack'.chr(0).'jack'.chr(0).'pass' - )."\r\n", [235]); - - $this->assertTrue($plain->authenticate($this->agent, 'jack', 'pass'), - '%s: The buffer accepted all commands authentication should succeed' - ); - } - - /** - * @expectedException \Swift_TransportException - */ - public function testAuthenticationFailureSendRset() - { - $plain = $this->getAuthenticator(); - - $this->agent->shouldReceive('executeCommand') - ->once() - ->with('AUTH PLAIN '.base64_encode( - 'jack'.chr(0).'jack'.chr(0).'pass' - )."\r\n", [235]) - ->andThrow(new Swift_TransportException('')); - $this->agent->shouldReceive('executeCommand') - ->once() - ->with("RSET\r\n", [250]); - - $plain->authenticate($this->agent, 'jack', 'pass'); - } - - private function getAuthenticator() - { - return new Swift_Transport_Esmtp_Auth_PlainAuthenticator(); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/AuthHandlerTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/AuthHandlerTest.php deleted file mode 100644 index 36a4cf8..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/AuthHandlerTest.php +++ /dev/null @@ -1,165 +0,0 @@ -agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); - } - - public function testKeywordIsAuth() - { - $auth = $this->createHandler([]); - $this->assertEquals('AUTH', $auth->getHandledKeyword()); - } - - public function testUsernameCanBeSetAndFetched() - { - $auth = $this->createHandler([]); - $auth->setUsername('jack'); - $this->assertEquals('jack', $auth->getUsername()); - } - - public function testPasswordCanBeSetAndFetched() - { - $auth = $this->createHandler([]); - $auth->setPassword('pass'); - $this->assertEquals('pass', $auth->getPassword()); - } - - public function testAuthModeCanBeSetAndFetched() - { - $auth = $this->createHandler([]); - $auth->setAuthMode('PLAIN'); - $this->assertEquals('PLAIN', $auth->getAuthMode()); - } - - public function testMixinMethods() - { - $auth = $this->createHandler([]); - $mixins = $auth->exposeMixinMethods(); - $this->assertTrue(in_array('getUsername', $mixins), - '%s: getUsername() should be accessible via mixin' - ); - $this->assertTrue(in_array('setUsername', $mixins), - '%s: setUsername() should be accessible via mixin' - ); - $this->assertTrue(in_array('getPassword', $mixins), - '%s: getPassword() should be accessible via mixin' - ); - $this->assertTrue(in_array('setPassword', $mixins), - '%s: setPassword() should be accessible via mixin' - ); - $this->assertTrue(in_array('setAuthMode', $mixins), - '%s: setAuthMode() should be accessible via mixin' - ); - $this->assertTrue(in_array('getAuthMode', $mixins), - '%s: getAuthMode() should be accessible via mixin' - ); - } - - public function testAuthenticatorsAreCalledAccordingToParamsAfterEhlo() - { - $a1 = $this->createMockAuthenticator('PLAIN'); - $a2 = $this->createMockAuthenticator('LOGIN'); - - $a1->shouldReceive('authenticate') - ->never() - ->with($this->agent, 'jack', 'pass'); - $a2->shouldReceive('authenticate') - ->once() - ->with($this->agent, 'jack', 'pass') - ->andReturn(true); - - $auth = $this->createHandler([$a1, $a2]); - $auth->setUsername('jack'); - $auth->setPassword('pass'); - - $auth->setKeywordParams(['CRAM-MD5', 'LOGIN']); - $auth->afterEhlo($this->agent); - } - - public function testAuthenticatorsAreNotUsedIfNoUsernameSet() - { - $a1 = $this->createMockAuthenticator('PLAIN'); - $a2 = $this->createMockAuthenticator('LOGIN'); - - $a1->shouldReceive('authenticate') - ->never() - ->with($this->agent, 'jack', 'pass'); - $a2->shouldReceive('authenticate') - ->never() - ->with($this->agent, 'jack', 'pass') - ->andReturn(true); - - $auth = $this->createHandler([$a1, $a2]); - - $auth->setKeywordParams(['CRAM-MD5', 'LOGIN']); - $auth->afterEhlo($this->agent); - } - - public function testSeveralAuthenticatorsAreTriedIfNeeded() - { - $a1 = $this->createMockAuthenticator('PLAIN'); - $a2 = $this->createMockAuthenticator('LOGIN'); - - $a1->shouldReceive('authenticate') - ->once() - ->with($this->agent, 'jack', 'pass') - ->andReturn(false); - $a2->shouldReceive('authenticate') - ->once() - ->with($this->agent, 'jack', 'pass') - ->andReturn(true); - - $auth = $this->createHandler([$a1, $a2]); - $auth->setUsername('jack'); - $auth->setPassword('pass'); - - $auth->setKeywordParams(['PLAIN', 'LOGIN']); - $auth->afterEhlo($this->agent); - } - - public function testFirstAuthenticatorToPassBreaksChain() - { - $a1 = $this->createMockAuthenticator('PLAIN'); - $a2 = $this->createMockAuthenticator('LOGIN'); - $a3 = $this->createMockAuthenticator('CRAM-MD5'); - - $a1->shouldReceive('authenticate') - ->once() - ->with($this->agent, 'jack', 'pass') - ->andReturn(false); - $a2->shouldReceive('authenticate') - ->once() - ->with($this->agent, 'jack', 'pass') - ->andReturn(true); - $a3->shouldReceive('authenticate') - ->never() - ->with($this->agent, 'jack', 'pass'); - - $auth = $this->createHandler([$a1, $a2]); - $auth->setUsername('jack'); - $auth->setPassword('pass'); - - $auth->setKeywordParams(['PLAIN', 'LOGIN', 'CRAM-MD5']); - $auth->afterEhlo($this->agent); - } - - private function createHandler($authenticators) - { - return new Swift_Transport_Esmtp_AuthHandler($authenticators); - } - - private function createMockAuthenticator($type) - { - $authenticator = $this->getMockery('Swift_Transport_Esmtp_Authenticator')->shouldIgnoreMissing(); - $authenticator->shouldReceive('getAuthKeyword') - ->zeroOrMoreTimes() - ->andReturn($type); - - return $authenticator; - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransport/ExtensionSupportTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransport/ExtensionSupportTest.php deleted file mode 100644 index d9e363a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransport/ExtensionSupportTest.php +++ /dev/null @@ -1,561 +0,0 @@ -getBuffer(); - $smtp = $this->getTransport($buf); - $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - - $ext1->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('AUTH'); - $ext1->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('STARTTLS') - ->andReturn(1); - $ext2->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('STARTTLS'); - $ext2->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('AUTH') - ->andReturn(-1); - $this->finishBuffer($buf); - - $smtp->setExtensionHandlers([$ext1, $ext2]); - $this->assertEquals([$ext2, $ext1], $smtp->getExtensionHandlers()); - } - - public function testHandlersAreNotifiedOfParams() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 server.com foo\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .*?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-ServerName.tld\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-AUTH PLAIN LOGIN\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 SIZE=123456\r\n"); - - $ext1->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('AUTH'); - $ext1->shouldReceive('setKeywordParams') - ->once() - ->with(['PLAIN', 'LOGIN']); - $ext2->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('SIZE'); - $ext2->shouldReceive('setKeywordParams') - ->zeroOrMoreTimes() - ->with(['123456']); - $this->finishBuffer($buf); - - $smtp->setExtensionHandlers([$ext1, $ext2]); - $smtp->start(); - } - - public function testSupportedExtensionHandlersAreRunAfterEhlo() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext3 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 server.com foo\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .*?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-ServerName.tld\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-AUTH PLAIN LOGIN\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 SIZE=123456\r\n"); - - $ext1->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('AUTH'); - $ext1->shouldReceive('afterEhlo') - ->once() - ->with($smtp); - $ext2->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('SIZE'); - $ext2->shouldReceive('afterEhlo') - ->zeroOrMoreTimes() - ->with($smtp); - $ext3->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('STARTTLS'); - $ext3->shouldReceive('afterEhlo') - ->never() - ->with($smtp); - $this->finishBuffer($buf); - - $smtp->setExtensionHandlers([$ext1, $ext2, $ext3]); - $smtp->start(); - } - - public function testExtensionsCanModifyMailFromParams() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(); - $smtp = new Swift_Transport_EsmtpTransport($buf, [], $dispatcher, 'example.org'); - $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext3 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => null]); - - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 server.com foo\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .*?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-ServerName.tld\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-AUTH PLAIN LOGIN\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 SIZE=123456\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM: FOO ZIP\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(3); - $buf->shouldReceive('readLine') - ->once() - ->with(3) - ->andReturn("250 OK\r\n"); - $this->finishBuffer($buf); - - $ext1->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('AUTH'); - $ext1->shouldReceive('getMailParams') - ->once() - ->andReturn('FOO'); - $ext1->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('STARTTLS') - ->andReturn(1); - $ext1->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('SIZE') - ->andReturn(-1); - $ext2->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('SIZE'); - $ext2->shouldReceive('getMailParams') - ->once() - ->andReturn('ZIP'); - $ext2->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('AUTH') - ->andReturn(1); - $ext2->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('STARTTLS') - ->andReturn(1); - $ext3->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('STARTTLS'); - $ext3->shouldReceive('getMailParams') - ->never(); - $ext3->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('AUTH') - ->andReturn(-1); - $ext3->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('SIZE') - ->andReturn(-1); - - $smtp->setExtensionHandlers([$ext1, $ext2, $ext3]); - $smtp->start(); - $smtp->send($message); - } - - public function testExtensionsCanModifyRcptParams() - { - $buf = $this->getBuffer(); - $dispatcher = $this->createEventDispatcher(); - $smtp = new Swift_Transport_EsmtpTransport($buf, [], $dispatcher, 'example.org'); - $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext3 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $message = $this->createMessage(); - - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => null]); - - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 server.com foo\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-ServerName.tld\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-AUTH PLAIN LOGIN\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 SIZE=123456\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("RCPT TO: FOO ZIP\r\n") - ->andReturn(3); - $buf->shouldReceive('readLine') - ->once() - ->with(3) - ->andReturn("250 OK\r\n"); - $this->finishBuffer($buf); - - $ext1->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('AUTH'); - $ext1->shouldReceive('getRcptParams') - ->once() - ->andReturn('FOO'); - $ext1->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('STARTTLS') - ->andReturn(1); - $ext1->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('SIZE') - ->andReturn(-1); - $ext2->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('SIZE'); - $ext2->shouldReceive('getRcptParams') - ->once() - ->andReturn('ZIP'); - $ext2->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('STARTTLS') - ->andReturn(1); - $ext2->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('AUTH') - ->andReturn(1); - $ext3->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('STARTTLS'); - $ext3->shouldReceive('getRcptParams') - ->never(); - $ext3->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('AUTH') - ->andReturn(-1); - $ext3->shouldReceive('getPriorityOver') - ->zeroOrMoreTimes() - ->with('SIZE') - ->andReturn(-1); - - $smtp->setExtensionHandlers([$ext1, $ext2, $ext3]); - $smtp->start(); - $smtp->send($message); - } - - public function testExtensionsAreNotifiedOnCommand() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext3 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 server.com foo\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-ServerName.tld\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-AUTH PLAIN LOGIN\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 SIZE=123456\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("FOO\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn("250 Cool\r\n"); - $this->finishBuffer($buf); - - $ext1->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('AUTH'); - $ext1->shouldReceive('onCommand') - ->once() - ->with($smtp, "FOO\r\n", [250, 251], \Mockery::any(), \Mockery::any()); - $ext2->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('SIZE'); - $ext2->shouldReceive('onCommand') - ->once() - ->with($smtp, "FOO\r\n", [250, 251], \Mockery::any(), \Mockery::any()); - $ext3->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('STARTTLS'); - $ext3->shouldReceive('onCommand') - ->never() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()); - - $smtp->setExtensionHandlers([$ext1, $ext2, $ext3]); - $smtp->start(); - $smtp->executeCommand("FOO\r\n", [250, 251]); - } - - public function testChainOfCommandAlgorithmWhenNotifyingExtensions() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $ext3 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 server.com foo\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-ServerName.tld\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250-AUTH PLAIN LOGIN\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn("250 SIZE=123456\r\n"); - $buf->shouldReceive('write') - ->never() - ->with("FOO\r\n"); - $this->finishBuffer($buf); - - $ext1->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('AUTH'); - $ext1->shouldReceive('onCommand') - ->once() - ->with($smtp, "FOO\r\n", [250, 251], \Mockery::any(), \Mockery::any()) - ->andReturnUsing(function ($a, $b, $c, $d, &$e) { - $e = true; - - return '250 ok'; - }); - $ext2->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('SIZE'); - $ext2->shouldReceive('onCommand') - ->never() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()); - - $ext3->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('STARTTLS'); - $ext3->shouldReceive('onCommand') - ->never() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()); - - $smtp->setExtensionHandlers([$ext1, $ext2, $ext3]); - $smtp->start(); - $smtp->executeCommand("FOO\r\n", [250, 251]); - } - - public function testExtensionsCanExposeMixinMethods() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $ext1 = $this->getMockery('Swift_Transport_EsmtpHandlerMixin')->shouldIgnoreMissing(); - $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - - $ext1->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('AUTH'); - $ext1->shouldReceive('exposeMixinMethods') - ->zeroOrMoreTimes() - ->andReturn(['setUsername', 'setPassword']); - $ext1->shouldReceive('setUsername') - ->once() - ->with('mick'); - $ext1->shouldReceive('setPassword') - ->once() - ->with('pass'); - $ext2->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('STARTTLS'); - $this->finishBuffer($buf); - - $smtp->setExtensionHandlers([$ext1, $ext2]); - $smtp->setUsername('mick'); - $smtp->setPassword('pass'); - } - - public function testMixinMethodsBeginningWithSetAndNullReturnAreFluid() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $ext1 = $this->getMockery('Swift_Transport_EsmtpHandlerMixin')->shouldIgnoreMissing(); - $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - - $ext1->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('AUTH'); - $ext1->shouldReceive('exposeMixinMethods') - ->zeroOrMoreTimes() - ->andReturn(['setUsername', 'setPassword']); - $ext1->shouldReceive('setUsername') - ->once() - ->with('mick') - ->andReturn(null); - $ext1->shouldReceive('setPassword') - ->once() - ->with('pass') - ->andReturn(null); - $ext2->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('STARTTLS'); - $this->finishBuffer($buf); - - $smtp->setExtensionHandlers([$ext1, $ext2]); - $ret = $smtp->setUsername('mick'); - $this->assertEquals($smtp, $ret); - $ret = $smtp->setPassword('pass'); - $this->assertEquals($smtp, $ret); - } - - public function testMixinSetterWhichReturnValuesAreNotFluid() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $ext1 = $this->getMockery('Swift_Transport_EsmtpHandlerMixin')->shouldIgnoreMissing(); - $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - - $ext1->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('AUTH'); - $ext1->shouldReceive('exposeMixinMethods') - ->zeroOrMoreTimes() - ->andReturn(['setUsername', 'setPassword']); - $ext1->shouldReceive('setUsername') - ->once() - ->with('mick') - ->andReturn('x'); - $ext1->shouldReceive('setPassword') - ->once() - ->with('pass') - ->andReturn('x'); - $ext2->shouldReceive('getHandledKeyword') - ->zeroOrMoreTimes() - ->andReturn('STARTTLS'); - $this->finishBuffer($buf); - - $smtp->setExtensionHandlers([$ext1, $ext2]); - $this->assertEquals('x', $smtp->setUsername('mick')); - $this->assertEquals('x', $smtp->setPassword('pass')); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransportTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransportTest.php deleted file mode 100644 index db1edce..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransportTest.php +++ /dev/null @@ -1,651 +0,0 @@ -createEventDispatcher(); - $addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - - return new Swift_Transport_EsmtpTransport($buf, [], $dispatcher, 'example.org', $addressEncoder); - } - - public function testHostCanBeSetAndFetched() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $smtp->setHost('foo'); - $this->assertEquals('foo', $smtp->getHost(), '%s: Host should be returned'); - } - - public function testPortCanBeSetAndFetched() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $smtp->setPort(25); - $this->assertEquals(25, $smtp->getPort(), '%s: Port should be returned'); - } - - public function testTimeoutCanBeSetAndFetched() - { - $buf = $this->getBuffer(); - $buf->shouldReceive('setParam') - ->once() - ->with('timeout', 10); - - $smtp = $this->getTransport($buf); - $smtp->setTimeout(10); - $this->assertEquals(10, $smtp->getTimeout(), '%s: Timeout should be returned'); - } - - public function testEncryptionCanBeSetAndFetched() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $smtp->setEncryption('tls'); - $this->assertEquals('tls', $smtp->getEncryption(), '%s: Crypto should be returned'); - } - - public function testStartSendsHeloToInitiate() - { - // previous loop would fail if there is an issue - $this->addToAssertionCount(1); - } - - public function testStartSendsEhloToInitiate() - { - /* -- RFC 2821, 3.2. - - 3.2 Client Initiation - - Once the server has sent the welcoming message and the client has - received it, the client normally sends the EHLO command to the - server, indicating the client's identity. In addition to opening the - session, use of EHLO indicates that the client is able to process - service extensions and requests that the server provide a list of the - extensions it supports. Older SMTP systems which are unable to - support service extensions and contemporary clients which do not - require service extensions in the mail session being initiated, MAY - use HELO instead of EHLO. Servers MUST NOT return the extended - EHLO-style response to a HELO command. For a particular connection - attempt, if the server returns a "command not recognized" response to - EHLO, the client SHOULD be able to fall back and send HELO. - - In the EHLO command the host sending the command identifies itself; - the command may be interpreted as saying "Hello, I am " (and, - in the case of EHLO, "and I support service extension requests"). - - -- RFC 2281, 4.1.1.1. - - ehlo = "EHLO" SP Domain CRLF - helo = "HELO" SP Domain CRLF - - -- RFC 2821, 4.3.2. - - EHLO or HELO - S: 250 - E: 504, 550 - - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 ServerName'."\r\n"); - - $this->finishBuffer($buf); - try { - $smtp->start(); - } catch (Exception $e) { - $this->fail('Starting Esmtp should send EHLO and accept 250 response: '.$e->getMessage()); - } - } - - public function testHeloIsUsedAsFallback() - { - /* -- RFC 2821, 4.1.4. - - If the EHLO command is not acceptable to the SMTP server, 501, 500, - or 502 failure replies MUST be returned as appropriate. The SMTP - server MUST stay in the same state after transmitting these replies - that it was in before the EHLO was received. - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('501 WTF'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^HELO .+?\r\n$~D') - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('250 HELO'."\r\n"); - - $this->finishBuffer($buf); - try { - $smtp->start(); - } catch (Exception $e) { - $this->fail( - 'Starting Esmtp should fallback to HELO if needed and accept 250 response' - ); - } - } - - public function testInvalidHeloResponseCausesException() - { - //Overridden to first try EHLO - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('501 WTF'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^HELO .+?\r\n$~D') - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('504 WTF'."\r\n"); - $this->finishBuffer($buf); - - try { - $this->assertFalse($smtp->isStarted(), '%s: SMTP should begin non-started'); - $smtp->start(); - $this->fail('Non 250 HELO response should raise Exception'); - } catch (Exception $e) { - $this->assertFalse($smtp->isStarted(), '%s: SMTP start() should have failed'); - } - } - - public function testDomainNameIsPlacedInEhlo() - { - /* -- RFC 2821, 4.1.4. - - The SMTP client MUST, if possible, ensure that the domain parameter - to the EHLO command is a valid principal host name (not a CNAME or MX - name) for its host. If this is not possible (e.g., when the client's - address is dynamically assigned and the client does not have an - obvious name), an address literal SHOULD be substituted for the - domain name and supplemental information provided that will assist in - identifying the client. - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("EHLO mydomain.com\r\n") - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 ServerName'."\r\n"); - - $this->finishBuffer($buf); - $smtp->setLocalDomain('mydomain.com'); - $smtp->start(); - } - - public function testDomainNameIsPlacedInHelo() - { - //Overridden to include ESMTP - /* -- RFC 2821, 4.1.4. - - The SMTP client MUST, if possible, ensure that the domain parameter - to the EHLO command is a valid principal host name (not a CNAME or MX - name) for its host. If this is not possible (e.g., when the client's - address is dynamically assigned and the client does not have an - obvious name), an address literal SHOULD be substituted for the - domain name and supplemental information provided that will assist in - identifying the client. - */ - - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('501 WTF'."\r\n"); - $buf->shouldReceive('write') - ->once() - ->with("HELO mydomain.com\r\n") - ->andReturn(2); - $buf->shouldReceive('readLine') - ->once() - ->with(2) - ->andReturn('250 ServerName'."\r\n"); - - $this->finishBuffer($buf); - $smtp->setLocalDomain('mydomain.com'); - $smtp->start(); - } - - public function testPipelining() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $this->assertNull($smtp->getPipelining()); - - $message = $this->createMessage(); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => null]); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250-ServerName'."\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 PIPELINING'."\r\n"); - - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("DATA\r\n")->andReturn(3); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(1)->andReturn("250 OK\r\n"); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(2)->andReturn("250 OK\r\n"); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(3)->andReturn("354 OK\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $sent = $smtp->send($message, $failedRecipients); - - $this->assertEquals(1, $sent); - $this->assertEmpty($failedRecipients); - - $this->assertTrue($smtp->getPipelining()); - } - - public function testPipeliningWithRecipientFailure() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $this->assertNull($smtp->getPipelining()); - - $message = $this->createMessage(); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn([ - 'good@foo' => null, - 'bad@foo' => null, - 'good@bar' => null, - ]); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250-ServerName'."\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 PIPELINING'."\r\n"); - - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(3); - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(4); - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("DATA\r\n") - ->andReturn(5); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(1) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(2) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(3) - ->andReturn("450 Unknown address bad@foo\r\n"); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(4) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(5) - ->andReturn("354 OK\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $sent = $smtp->send($message, $failedRecipients); - - $this->assertEquals(2, $sent); - $this->assertEquals(['bad@foo'], $failedRecipients); - - $this->assertTrue($smtp->getPipelining()); - } - - public function testPipeliningWithSenderFailure() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $this->assertNull($smtp->getPipelining()); - - $message = $this->createMessage(); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => null]); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250-ServerName'."\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 PIPELINING'."\r\n"); - - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("DATA\r\n")->andReturn(3); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(1) - ->andReturn("550 Unknown address me@domain.com\r\n"); - - $smtp->start(); - - $this->expectException('Swift_TransportException'); - $this->expectExceptionMessage('Expected response code 250 but got code "550"'); - $smtp->send($message, $failedRecipients); - } - - public function testPipeliningWithDataFailure() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $this->assertNull($smtp->getPipelining()); - - $message = $this->createMessage(); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain.com' => 'Me']); - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => null]); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250-ServerName'."\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 PIPELINING'."\r\n"); - - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("MAIL FROM:\r\n") - ->andReturn(1); - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("RCPT TO:\r\n") - ->andReturn(2); - $buf->shouldReceive('write') - ->ordered() - ->once() - ->with("DATA\r\n")->andReturn(3); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(1) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(2) - ->andReturn("250 OK\r\n"); - $buf->shouldReceive('readLine') - ->ordered() - ->once() - ->with(3) - ->andReturn("452 Insufficient system storage\r\n"); - - $smtp->start(); - - $this->expectException('Swift_TransportException'); - $this->expectExceptionMessage('Expected response code 354 but got code "452"'); - $smtp->send($message, $failedRecipients); - } - - public function providerPipeliningOverride() - { - return [ - [null, true, true], - [null, false, false], - [true, false, true], - [true, true, true], - [false, false, false], - [false, true, false], - ]; - } - - /** - * @dataProvider providerPipeliningOverride - */ - public function testPipeliningOverride($enabled, bool $supported, bool $expected) - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $this->assertNull($smtp->getPipelining()); - - $smtp->setPipelining($enabled); - $this->assertSame($enabled, $smtp->getPipelining()); - - $message = $this->createMessage(); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(['me@domain.com' => 'Me']); - - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('readLine') - ->once() - ->with(0) - ->andReturn("220 some.server.tld bleh\r\n"); - $buf->shouldReceive('write') - ->once() - ->with('~^EHLO .+?\r\n$~D') - ->andReturn(1); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250-ServerName'."\r\n"); - $buf->shouldReceive('readLine') - ->once() - ->with(1) - ->andReturn('250 '.($supported ? 'PIPELINING' : 'FOOBAR')."\r\n"); - - $this->finishBuffer($buf); - $smtp->start(); - $smtp->send($message); - - $this->assertSame($expected, $smtp->getPipelining()); - } - - public function testFluidInterface() - { - $buf = $this->getBuffer(); - $smtp = $this->getTransport($buf); - $buf->shouldReceive('setParam') - ->once() - ->with('timeout', 30); - - $ref = $smtp - ->setHost('foo') - ->setPort(25) - ->setEncryption('tls') - ->setTimeout(30) - ->setPipelining(false) - ; - $this->assertEquals($ref, $smtp); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/FailoverTransportTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/FailoverTransportTest.php deleted file mode 100644 index deb0617..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/FailoverTransportTest.php +++ /dev/null @@ -1,600 +0,0 @@ -getMockery('Swift_Mime_SimpleMessage'); - $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState) { - return $connectionState; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState) { - if (!$connectionState) { - $connectionState = true; - } - }); - $t1->shouldReceive('send') - ->twice() - ->with(\Mockery::anyOf($message1, $message2), \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState) { - if ($connectionState) { - return 1; - } - }); - $t2->shouldReceive('start')->never(); - $t2->shouldReceive('send')->never(); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertEquals(1, $transport->send($message1)); - $this->assertEquals(1, $transport->send($message2)); - } - - public function testMessageCanBeTriedOnNextTransportIfExceptionThrown() - { - $e = new Swift_TransportException('b0rken'); - - $message = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e) { - if ($connectionState1) { - throw $e; - } - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $e) { - if ($connectionState2) { - return 1; - } - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertEquals(1, $transport->send($message)); - } - - public function testZeroIsReturnedIfTransportReturnsZero() - { - $message = $this->getMockery('Swift_Mime_SimpleMessage')->shouldIgnoreMissing(); - $t1 = $this->getMockery('Swift_Transport')->shouldIgnoreMissing(); - - $connectionState = false; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState) { - return $connectionState; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState) { - if (!$connectionState) { - $connectionState = true; - } - }); - $testCase = $this; - $t1->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState, $testCase) { - if (!$connectionState) { - $testCase->fail(); - } - - return 0; - }); - - $transport = $this->getTransport([$t1]); - $transport->start(); - $this->assertEquals(0, $transport->send($message)); - } - - public function testTransportsWhichThrowExceptionsAreNotRetried() - { - $e = new Swift_TransportException('maur b0rken'); - - $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message3 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message4 = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message1, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e) { - if ($connectionState1) { - throw $e; - } - }); - $t1->shouldReceive('send') - ->never() - ->with($message2, \Mockery::any()); - $t1->shouldReceive('send') - ->never() - ->with($message3, \Mockery::any()); - $t1->shouldReceive('send') - ->never() - ->with($message4, \Mockery::any()); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->times(4) - ->with(\Mockery::anyOf($message1, $message2, $message3, $message4), \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $e) { - if ($connectionState2) { - return 1; - } - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertEquals(1, $transport->send($message1)); - $this->assertEquals(1, $transport->send($message2)); - $this->assertEquals(1, $transport->send($message3)); - $this->assertEquals(1, $transport->send($message4)); - } - - public function testExceptionIsThrownIfAllTransportsDie() - { - $e = new Swift_TransportException('b0rken'); - - $message = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e) { - if ($connectionState1) { - throw $e; - } - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $e) { - if ($connectionState2) { - throw $e; - } - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - try { - $transport->send($message); - $this->fail('All transports failed so Exception should be thrown'); - } catch (Exception $e) { - } - } - - public function testStoppingTransportStopsAllDelegates() - { - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - - $connectionState1 = true; - $connectionState2 = true; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('stop') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if ($connectionState1) { - $connectionState1 = false; - } - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('stop') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if ($connectionState2) { - $connectionState2 = false; - } - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $transport->stop(); - } - - public function testTransportShowsAsNotStartedIfAllDelegatesDead() - { - $e = new Swift_TransportException('b0rken'); - - $message = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - - $connectionState1 = false; - $connectionState2 = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e) { - if ($connectionState1) { - $connectionState1 = false; - throw $e; - } - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $e) { - if ($connectionState2) { - $connectionState2 = false; - throw $e; - } - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertTrue($transport->isStarted()); - try { - $transport->send($message); - $this->fail('All transports failed so Exception should be thrown'); - } catch (Exception $e) { - $this->assertFalse($transport->isStarted()); - } - } - - public function testRestartingTransportRestartsDeadDelegates() - { - $e = new Swift_TransportException('b0rken'); - - $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - - $connectionState1 = false; - $connectionState2 = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->twice() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message1, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e) { - if ($connectionState1) { - $connectionState1 = false; - throw $e; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message2, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1) { - if ($connectionState1) { - return 10; - } - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message1, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $e) { - if ($connectionState2) { - $connectionState2 = false; - throw $e; - } - }); - $t2->shouldReceive('send') - ->never() - ->with($message2, \Mockery::any()); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertTrue($transport->isStarted()); - try { - $transport->send($message1); - $this->fail('All transports failed so Exception should be thrown'); - } catch (Exception $e) { - $this->assertFalse($transport->isStarted()); - } - //Restart and re-try - $transport->start(); - $this->assertTrue($transport->isStarted()); - $this->assertEquals(10, $transport->send($message2)); - } - - public function testFailureReferenceIsPassedToDelegates() - { - $failures = []; - - $message = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - - $connectionState = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use ($connectionState) { - return $connectionState; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use ($connectionState) { - if (!$connectionState) { - $connectionState = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message, $failures) - ->andReturnUsing(function () use ($connectionState) { - if ($connectionState) { - return 1; - } - }); - - $transport = $this->getTransport([$t1]); - $transport->start(); - $transport->send($message, $failures); - } - - public function testRegisterPluginDelegatesToLoadedTransports() - { - $plugin = $this->createPlugin(); - - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $t1->shouldReceive('registerPlugin') - ->once() - ->with($plugin); - $t2->shouldReceive('registerPlugin') - ->once() - ->with($plugin); - - $transport = $this->getTransport([$t1, $t2]); - $transport->registerPlugin($plugin); - } - - public function testEachDelegateIsPinged() - { - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $testCase = $this; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('ping') - ->once() - ->andReturn(true); - - $transport = $this->getTransport([$t1, $t2]); - $this->assertTrue($transport->isStarted()); - $this->assertTrue($transport->ping()); - } - - public function testDelegateIsKilledWhenPingFails() - { - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - - $testCase = $this; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('ping') - ->once() - ->andReturn(false); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('ping') - ->twice() - ->andReturn(true); - - $transport = $this->getTransport([$t1, $t2]); - $this->assertTrue($transport->ping()); - $this->assertTrue($transport->ping()); - $this->assertTrue($transport->isStarted()); - } - - public function XtestTransportShowsAsNotStartedIfAllPingFails() - { - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - - $testCase = $this; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('ping') - ->once() - ->andReturn(false); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('ping') - ->once() - ->andReturn(false); - - $transport = $this->getTransport([$t1, $t2]); - $this->assertFalse($transport->ping()); - $this->assertFalse($transport->isStarted()); - $this->assertFalse($transport->ping()); - } - - private function getTransport(array $transports) - { - $transport = new Swift_Transport_FailoverTransport(); - $transport->setTransports($transports); - - return $transport; - } - - private function createPlugin() - { - return $this->getMockery('Swift_Events_EventListener'); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/LoadBalancedTransportTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/LoadBalancedTransportTest.php deleted file mode 100644 index dbc60af..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/LoadBalancedTransportTest.php +++ /dev/null @@ -1,838 +0,0 @@ -getMockery('Swift_Mime_SimpleMessage'); - $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $testCase = $this; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message1, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $testCase) { - if ($connectionState1) { - return 1; - } - $testCase->fail(); - }); - $t1->shouldReceive('send') - ->never() - ->with($message2, \Mockery::any()); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message2, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $testCase) { - if ($connectionState2) { - return 1; - } - $testCase->fail(); - }); - $t2->shouldReceive('send') - ->never() - ->with($message1, \Mockery::any()); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertEquals(1, $transport->send($message1)); - $this->assertEquals(1, $transport->send($message2)); - } - - public function testTransportsAreReusedInRotatingFashion() - { - $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message3 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message4 = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $testCase = $this; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message1, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $testCase) { - if ($connectionState1) { - return 1; - } - $testCase->fail(); - }); - $t1->shouldReceive('send') - ->never() - ->with($message2, \Mockery::any()); - $t1->shouldReceive('send') - ->once() - ->with($message3, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $testCase) { - if ($connectionState1) { - return 1; - } - $testCase->fail(); - }); - $t1->shouldReceive('send') - ->never() - ->with($message4, \Mockery::any()); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message2, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $testCase) { - if ($connectionState2) { - return 1; - } - $testCase->fail(); - }); - $t2->shouldReceive('send') - ->never() - ->with($message1, \Mockery::any()); - $t2->shouldReceive('send') - ->once() - ->with($message4, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $testCase) { - if ($connectionState2) { - return 1; - } - $testCase->fail(); - }); - $t2->shouldReceive('send') - ->never() - ->with($message3, \Mockery::any()); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - - $this->assertEquals(1, $transport->send($message1)); - $this->assertEquals(1, $transport->send($message2)); - $this->assertEquals(1, $transport->send($message3)); - $this->assertEquals(1, $transport->send($message4)); - } - - public function testMessageCanBeTriedOnNextTransportIfExceptionThrown() - { - $e = new Swift_TransportException('b0rken'); - - $message = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $testCase = $this; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e, $testCase) { - if ($connectionState1) { - throw $e; - } - $testCase->fail(); - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $testCase) { - if ($connectionState2) { - return 1; - } - $testCase->fail(); - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertEquals(1, $transport->send($message)); - } - - public function testMessageIsTriedOnNextTransportIfZeroReturned() - { - $message = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1) { - if ($connectionState1) { - return 0; - } - - return 1; - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2) { - if ($connectionState2) { - return 1; - } - - return 0; - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertEquals(1, $transport->send($message)); - } - - public function testZeroIsReturnedIfAllTransportsReturnZero() - { - $message = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1) { - if ($connectionState1) { - return 0; - } - - return 1; - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2) { - if ($connectionState2) { - return 0; - } - - return 1; - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertEquals(0, $transport->send($message)); - } - - public function testTransportsWhichThrowExceptionsAreNotRetried() - { - $e = new Swift_TransportException('maur b0rken'); - - $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message3 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message4 = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $testCase = $this; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message1, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e, $testCase) { - if ($connectionState1) { - throw $e; - } - $testCase->fail(); - }); - $t1->shouldReceive('send') - ->never() - ->with($message2, \Mockery::any()); - $t1->shouldReceive('send') - ->never() - ->with($message3, \Mockery::any()); - $t1->shouldReceive('send') - ->never() - ->with($message4, \Mockery::any()); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->times(4) - ->with(\Mockery::anyOf($message1, $message3, $message3, $message4), \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $testCase) { - if ($connectionState2) { - return 1; - } - $testCase->fail(); - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertEquals(1, $transport->send($message1)); - $this->assertEquals(1, $transport->send($message2)); - $this->assertEquals(1, $transport->send($message3)); - $this->assertEquals(1, $transport->send($message4)); - } - - public function testExceptionIsThrownIfAllTransportsDie() - { - $e = new Swift_TransportException('b0rken'); - - $message = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e) { - if ($connectionState1) { - throw $e; - } - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $e) { - if ($connectionState2) { - throw $e; - } - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - try { - $transport->send($message); - $this->fail('All transports failed so Exception should be thrown'); - } catch (Exception $e) { - } - } - - public function testStoppingTransportStopsAllDelegates() - { - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = true; - $connectionState2 = true; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('stop') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if ($connectionState1) { - $connectionState1 = false; - } - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('stop') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if ($connectionState2) { - $connectionState2 = false; - } - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $transport->stop(); - } - - public function testTransportShowsAsNotStartedIfAllDelegatesDead() - { - $e = new Swift_TransportException('b0rken'); - - $message = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e) { - if ($connectionState1) { - throw $e; - } - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $e) { - if ($connectionState2) { - throw $e; - } - }); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertTrue($transport->isStarted()); - try { - $transport->send($message); - $this->fail('All transports failed so Exception should be thrown'); - } catch (Exception $e) { - $this->assertFalse($transport->isStarted()); - } - } - - public function testRestartingTransportRestartsDeadDelegates() - { - $e = new Swift_TransportException('b0rken'); - - $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); - $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - $connectionState1 = false; - $connectionState2 = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('start') - ->twice() - ->andReturnUsing(function () use (&$connectionState1) { - if (!$connectionState1) { - $connectionState1 = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message1, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e) { - if ($connectionState1) { - $connectionState1 = false; - throw $e; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message2, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState1, $e) { - if ($connectionState1) { - return 10; - } - }); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState2) { - if (!$connectionState2) { - $connectionState2 = true; - } - }); - $t2->shouldReceive('send') - ->once() - ->with($message1, \Mockery::any()) - ->andReturnUsing(function () use (&$connectionState2, $e) { - if ($connectionState2) { - throw $e; - } - }); - $t2->shouldReceive('send') - ->never() - ->with($message2, \Mockery::any()); - - $transport = $this->getTransport([$t1, $t2]); - $transport->start(); - $this->assertTrue($transport->isStarted()); - try { - $transport->send($message1); - $this->fail('All transports failed so Exception should be thrown'); - } catch (Exception $e) { - $this->assertFalse($transport->isStarted()); - } - //Restart and re-try - $transport->start(); - $this->assertTrue($transport->isStarted()); - $this->assertEquals(10, $transport->send($message2)); - } - - public function testFailureReferenceIsPassedToDelegates() - { - $failures = []; - $testCase = $this; - - $message = $this->getMockery('Swift_Mime_SimpleMessage'); - $t1 = $this->getMockery('Swift_Transport'); - $connectionState = false; - - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState) { - return $connectionState; - }); - $t1->shouldReceive('start') - ->once() - ->andReturnUsing(function () use (&$connectionState) { - if (!$connectionState) { - $connectionState = true; - } - }); - $t1->shouldReceive('send') - ->once() - ->with($message, \Mockery::on(function (&$var) use (&$failures, $testCase) { - return $testCase->varsAreReferences($var, $failures); - })) - ->andReturnUsing(function () use (&$connectionState) { - if ($connectionState) { - return 1; - } - }); - - $transport = $this->getTransport([$t1]); - $transport->start(); - $transport->send($message, $failures); - } - - public function testRegisterPluginDelegatesToLoadedTransports() - { - $plugin = $this->createPlugin(); - - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - - $t1->shouldReceive('registerPlugin') - ->once() - ->with($plugin); - $t2->shouldReceive('registerPlugin') - ->once() - ->with($plugin); - - $transport = $this->getTransport([$t1, $t2]); - $transport->registerPlugin($plugin); - } - - public function testEachDelegateIsPinged() - { - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - - $testCase = $this; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('ping') - ->once() - ->andReturn(true); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('ping') - ->once() - ->andReturn(true); - - $transport = $this->getTransport([$t1, $t2]); - $this->assertTrue($transport->isStarted()); - $this->assertTrue($transport->ping()); - } - - public function testDelegateIsKilledWhenPingFails() - { - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - - $testCase = $this; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('ping') - ->twice() - ->andReturn(true); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('ping') - ->once() - ->andReturn(false); - - $transport = $this->getTransport([$t1, $t2]); - $this->assertTrue($transport->ping()); - $this->assertTrue($transport->ping()); - $this->assertTrue($transport->isStarted()); - } - - public function testTransportShowsAsNotStartedIfAllPingFails() - { - $t1 = $this->getMockery('Swift_Transport'); - $t2 = $this->getMockery('Swift_Transport'); - - $testCase = $this; - $t1->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState1) { - return $connectionState1; - }); - $t1->shouldReceive('ping') - ->once() - ->andReturn(false); - - $t2->shouldReceive('isStarted') - ->zeroOrMoreTimes() - ->andReturnUsing(function () use (&$connectionState2) { - return $connectionState2; - }); - $t2->shouldReceive('ping') - ->once() - ->andReturn(false); - - $transport = $this->getTransport([$t1, $t2]); - $this->assertFalse($transport->ping()); - $this->assertFalse($transport->isStarted()); - $this->assertFalse($transport->ping()); - } - - /** - * Adapted from Yay_Matchers_ReferenceMatcher. - */ - public function varsAreReferences(&$ref1, &$ref2) - { - if (is_object($ref2)) { - return $ref1 === $ref2; - } - if ($ref1 !== $ref2) { - return false; - } - - $copy = $ref2; - $randomString = uniqid('yay', true); - $ref2 = $randomString; - $isRef = ($ref1 === $ref2); - $ref2 = $copy; - - return $isRef; - } - - private function getTransport(array $transports) - { - $transport = new Swift_Transport_LoadBalancedTransport(); - $transport->setTransports($transports); - - return $transport; - } - - private function createPlugin() - { - return $this->getMockery('Swift_Events_EventListener'); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/SendmailTransportTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/SendmailTransportTest.php deleted file mode 100644 index fe40d6c..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/SendmailTransportTest.php +++ /dev/null @@ -1,150 +0,0 @@ -createEventDispatcher(); - } - $transport = new Swift_Transport_SendmailTransport($buf, $dispatcher, 'example.org', $addressEncoder); - $transport->setCommand($command); - - return $transport; - } - - protected function getSendmail($buf, $dispatcher = null) - { - if (!$dispatcher) { - $dispatcher = $this->createEventDispatcher(); - } - - return new Swift_Transport_SendmailTransport($buf, $dispatcher); - } - - public function testCommandCanBeSetAndFetched() - { - $buf = $this->getBuffer(); - $sendmail = $this->getSendmail($buf); - - $sendmail->setCommand('/usr/sbin/sendmail -bs'); - $this->assertEquals('/usr/sbin/sendmail -bs', $sendmail->getCommand()); - $sendmail->setCommand('/usr/sbin/sendmail -oi -t'); - $this->assertEquals('/usr/sbin/sendmail -oi -t', $sendmail->getCommand()); - } - - public function testSendingMessageIn_t_ModeUsesSimplePipe() - { - $buf = $this->getBuffer(); - $sendmail = $this->getSendmail($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => 'Foobar', 'zip@button' => 'Zippy']); - $message->shouldReceive('toByteStream') - ->once() - ->with($buf); - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('terminate') - ->once(); - $buf->shouldReceive('setWriteTranslations') - ->once() - ->with(["\r\n" => "\n", "\n." => "\n.."]); - $buf->shouldReceive('setWriteTranslations') - ->once() - ->with([]); - - $sendmail->setCommand('/usr/sbin/sendmail -t'); - $this->assertEquals(2, $sendmail->send($message)); - } - - public function testSendingIn_t_ModeWith_i_FlagDoesntEscapeDot() - { - $buf = $this->getBuffer(); - $sendmail = $this->getSendmail($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => 'Foobar', 'zip@button' => 'Zippy']); - $message->shouldReceive('toByteStream') - ->once() - ->with($buf); - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('terminate') - ->once(); - $buf->shouldReceive('setWriteTranslations') - ->once() - ->with(["\r\n" => "\n"]); - $buf->shouldReceive('setWriteTranslations') - ->once() - ->with([]); - - $sendmail->setCommand('/usr/sbin/sendmail -i -t'); - $this->assertEquals(2, $sendmail->send($message)); - } - - public function testSendingInTModeWith_oi_FlagDoesntEscapeDot() - { - $buf = $this->getBuffer(); - $sendmail = $this->getSendmail($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => 'Foobar', 'zip@button' => 'Zippy']); - $message->shouldReceive('toByteStream') - ->once() - ->with($buf); - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('terminate') - ->once(); - $buf->shouldReceive('setWriteTranslations') - ->once() - ->with(["\r\n" => "\n"]); - $buf->shouldReceive('setWriteTranslations') - ->once() - ->with([]); - - $sendmail->setCommand('/usr/sbin/sendmail -oi -t'); - $this->assertEquals(2, $sendmail->send($message)); - } - - public function testSendingMessageRegeneratesId() - { - $buf = $this->getBuffer(); - $sendmail = $this->getSendmail($buf); - $message = $this->createMessage(); - - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(['foo@bar' => 'Foobar', 'zip@button' => 'Zippy']); - $message->shouldReceive('generateId'); - $buf->shouldReceive('initialize') - ->once(); - $buf->shouldReceive('terminate') - ->once(); - $buf->shouldReceive('setWriteTranslations') - ->once() - ->with(["\r\n" => "\n", "\n." => "\n.."]); - $buf->shouldReceive('setWriteTranslations') - ->once() - ->with([]); - - $sendmail->setCommand('/usr/sbin/sendmail -t'); - $this->assertEquals(2, $sendmail->send($message)); - } - - public function testFluidInterface() - { - $buf = $this->getBuffer(); - $sendmail = $this->getTransport($buf); - - $ref = $sendmail->setCommand('/foo'); - $this->assertEquals($ref, $sendmail); - } -} diff --git a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/StreamBufferTest.php b/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/StreamBufferTest.php deleted file mode 100644 index 540709a..0000000 --- a/lib/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/StreamBufferTest.php +++ /dev/null @@ -1,43 +0,0 @@ -createFactory(); - $factory->expects($this->once()) - ->method('createFilter') - ->with('a', 'b') - ->will($this->returnCallback([$this, 'createFilter'])); - - $buffer = $this->createBuffer($factory); - $buffer->setWriteTranslations(['a' => 'b']); - } - - public function testOverridingTranslationsOnlyAddsNeededFilters() - { - $factory = $this->createFactory(); - $factory->expects($this->exactly(2)) - ->method('createFilter') - ->will($this->returnCallback([$this, 'createFilter'])); - - $buffer = $this->createBuffer($factory); - $buffer->setWriteTranslations(['a' => 'b']); - $buffer->setWriteTranslations(['x' => 'y', 'a' => 'b']); - } - - private function createBuffer($replacementFactory) - { - return new Swift_Transport_StreamBuffer($replacementFactory); - } - - private function createFactory() - { - return $this->getMockBuilder('Swift_ReplacementFilterFactory')->getMock(); - } - - public function createFilter() - { - return $this->getMockBuilder('Swift_StreamFilter')->getMock(); - } -} diff --git a/lib/vendor/symfony/polyfill-iconv/Iconv.php b/lib/vendor/symfony/polyfill-iconv/Iconv.php deleted file mode 100644 index 77e7ca0..0000000 --- a/lib/vendor/symfony/polyfill-iconv/Iconv.php +++ /dev/null @@ -1,741 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Iconv; - -/** - * iconv implementation in pure PHP, UTF-8 centric. - * - * Implemented: - * - iconv - Convert string to requested character encoding - * - iconv_mime_decode - Decodes a MIME header field - * - iconv_mime_decode_headers - Decodes multiple MIME header fields at once - * - iconv_get_encoding - Retrieve internal configuration variables of iconv extension - * - iconv_set_encoding - Set current setting for character encoding conversion - * - iconv_mime_encode - Composes a MIME header field - * - iconv_strlen - Returns the character count of string - * - iconv_strpos - Finds position of first occurrence of a needle within a haystack - * - iconv_strrpos - Finds the last occurrence of a needle within a haystack - * - iconv_substr - Cut out part of a string - * - * Charsets available for conversion are defined by files - * in the charset/ directory and by Iconv::$alias below. - * You're welcome to send back any addition you make. - * - * @author Nicolas Grekas - * - * @internal - */ -final class Iconv -{ - const ERROR_ILLEGAL_CHARACTER = 'iconv(): Detected an illegal character in input string'; - const ERROR_WRONG_CHARSET = 'iconv(): Wrong charset, conversion from `%s\' to `%s\' is not allowed'; - - public static $inputEncoding = 'utf-8'; - public static $outputEncoding = 'utf-8'; - public static $internalEncoding = 'utf-8'; - - private static $alias = array( - 'utf8' => 'utf-8', - 'ascii' => 'us-ascii', - 'tis-620' => 'iso-8859-11', - 'cp1250' => 'windows-1250', - 'cp1251' => 'windows-1251', - 'cp1252' => 'windows-1252', - 'cp1253' => 'windows-1253', - 'cp1254' => 'windows-1254', - 'cp1255' => 'windows-1255', - 'cp1256' => 'windows-1256', - 'cp1257' => 'windows-1257', - 'cp1258' => 'windows-1258', - 'shift-jis' => 'cp932', - 'shift_jis' => 'cp932', - 'latin1' => 'iso-8859-1', - 'latin2' => 'iso-8859-2', - 'latin3' => 'iso-8859-3', - 'latin4' => 'iso-8859-4', - 'latin5' => 'iso-8859-9', - 'latin6' => 'iso-8859-10', - 'latin7' => 'iso-8859-13', - 'latin8' => 'iso-8859-14', - 'latin9' => 'iso-8859-15', - 'latin10' => 'iso-8859-16', - 'iso8859-1' => 'iso-8859-1', - 'iso8859-2' => 'iso-8859-2', - 'iso8859-3' => 'iso-8859-3', - 'iso8859-4' => 'iso-8859-4', - 'iso8859-5' => 'iso-8859-5', - 'iso8859-6' => 'iso-8859-6', - 'iso8859-7' => 'iso-8859-7', - 'iso8859-8' => 'iso-8859-8', - 'iso8859-9' => 'iso-8859-9', - 'iso8859-10' => 'iso-8859-10', - 'iso8859-11' => 'iso-8859-11', - 'iso8859-12' => 'iso-8859-12', - 'iso8859-13' => 'iso-8859-13', - 'iso8859-14' => 'iso-8859-14', - 'iso8859-15' => 'iso-8859-15', - 'iso8859-16' => 'iso-8859-16', - 'iso_8859-1' => 'iso-8859-1', - 'iso_8859-2' => 'iso-8859-2', - 'iso_8859-3' => 'iso-8859-3', - 'iso_8859-4' => 'iso-8859-4', - 'iso_8859-5' => 'iso-8859-5', - 'iso_8859-6' => 'iso-8859-6', - 'iso_8859-7' => 'iso-8859-7', - 'iso_8859-8' => 'iso-8859-8', - 'iso_8859-9' => 'iso-8859-9', - 'iso_8859-10' => 'iso-8859-10', - 'iso_8859-11' => 'iso-8859-11', - 'iso_8859-12' => 'iso-8859-12', - 'iso_8859-13' => 'iso-8859-13', - 'iso_8859-14' => 'iso-8859-14', - 'iso_8859-15' => 'iso-8859-15', - 'iso_8859-16' => 'iso-8859-16', - 'iso88591' => 'iso-8859-1', - 'iso88592' => 'iso-8859-2', - 'iso88593' => 'iso-8859-3', - 'iso88594' => 'iso-8859-4', - 'iso88595' => 'iso-8859-5', - 'iso88596' => 'iso-8859-6', - 'iso88597' => 'iso-8859-7', - 'iso88598' => 'iso-8859-8', - 'iso88599' => 'iso-8859-9', - 'iso885910' => 'iso-8859-10', - 'iso885911' => 'iso-8859-11', - 'iso885912' => 'iso-8859-12', - 'iso885913' => 'iso-8859-13', - 'iso885914' => 'iso-8859-14', - 'iso885915' => 'iso-8859-15', - 'iso885916' => 'iso-8859-16', - ); - private static $translitMap = array(); - private static $convertMap = array(); - private static $errorHandler; - private static $lastError; - - private static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); - private static $isValidUtf8; - - public static function iconv($inCharset, $outCharset, $str) - { - $str = (string) $str; - if ('' === $str) { - return ''; - } - - // Prepare for //IGNORE and //TRANSLIT - - $translit = $ignore = ''; - - $outCharset = strtolower($outCharset); - $inCharset = strtolower($inCharset); - - if ('' === $outCharset) { - $outCharset = 'iso-8859-1'; - } - if ('' === $inCharset) { - $inCharset = 'iso-8859-1'; - } - - do { - $loop = false; - - if ('//translit' === substr($outCharset, -10)) { - $loop = $translit = true; - $outCharset = substr($outCharset, 0, -10); - } - - if ('//ignore' === substr($outCharset, -8)) { - $loop = $ignore = true; - $outCharset = substr($outCharset, 0, -8); - } - } while ($loop); - - do { - $loop = false; - - if ('//translit' === substr($inCharset, -10)) { - $loop = true; - $inCharset = substr($inCharset, 0, -10); - } - - if ('//ignore' === substr($inCharset, -8)) { - $loop = true; - $inCharset = substr($inCharset, 0, -8); - } - } while ($loop); - - if (isset(self::$alias[$inCharset])) { - $inCharset = self::$alias[$inCharset]; - } - if (isset(self::$alias[$outCharset])) { - $outCharset = self::$alias[$outCharset]; - } - - // Load charset maps - - if (('utf-8' !== $inCharset && !self::loadMap('from.', $inCharset, $inMap)) - || ('utf-8' !== $outCharset && !self::loadMap('to.', $outCharset, $outMap))) { - trigger_error(sprintf(self::ERROR_WRONG_CHARSET, $inCharset, $outCharset)); - - return false; - } - - if ('utf-8' !== $inCharset) { - // Convert input to UTF-8 - $result = ''; - if (self::mapToUtf8($result, $inMap, $str, $ignore)) { - $str = $result; - } else { - $str = false; - } - self::$isValidUtf8 = true; - } else { - self::$isValidUtf8 = preg_match('//u', $str); - - if (!self::$isValidUtf8 && !$ignore) { - trigger_error(self::ERROR_ILLEGAL_CHARACTER); - - return false; - } - - if ('utf-8' === $outCharset) { - // UTF-8 validation - $str = self::utf8ToUtf8($str, $ignore); - } - } - - if ('utf-8' !== $outCharset && false !== $str) { - // Convert output to UTF-8 - $result = ''; - if (self::mapFromUtf8($result, $outMap, $str, $ignore, $translit)) { - return $result; - } - - return false; - } - - return $str; - } - - public static function iconv_mime_decode_headers($str, $mode = 0, $charset = null) - { - if (null === $charset) { - $charset = self::$internalEncoding; - } - - if (false !== strpos($str, "\r")) { - $str = strtr(str_replace("\r\n", "\n", $str), "\r", "\n"); - } - $str = explode("\n\n", $str, 2); - - $headers = array(); - - $str = preg_split('/\n(?![ \t])/', $str[0]); - foreach ($str as $str) { - $str = self::iconv_mime_decode($str, $mode, $charset); - if (false === $str) { - return false; - } - $str = explode(':', $str, 2); - - if (2 === \count($str)) { - if (isset($headers[$str[0]])) { - if (!\is_array($headers[$str[0]])) { - $headers[$str[0]] = array($headers[$str[0]]); - } - $headers[$str[0]][] = ltrim($str[1]); - } else { - $headers[$str[0]] = ltrim($str[1]); - } - } - } - - return $headers; - } - - public static function iconv_mime_decode($str, $mode = 0, $charset = null) - { - if (null === $charset) { - $charset = self::$internalEncoding; - } - if (ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) { - $charset .= '//IGNORE'; - } - - if (false !== strpos($str, "\r")) { - $str = strtr(str_replace("\r\n", "\n", $str), "\r", "\n"); - } - $str = preg_split('/\n(?![ \t])/', rtrim($str), 2); - $str = preg_replace('/[ \t]*\n[ \t]+/', ' ', rtrim($str[0])); - $str = preg_split('/=\?([^?]+)\?([bqBQ])\?(.*?)\?=/', $str, -1, PREG_SPLIT_DELIM_CAPTURE); - - $result = self::iconv('utf-8', $charset, $str[0]); - if (false === $result) { - return false; - } - - $i = 1; - $len = \count($str); - - while ($i < $len) { - $c = strtolower($str[$i]); - if ((ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) - && 'utf-8' !== $c - && !isset(self::$alias[$c]) - && !self::loadMap('from.', $c, $d)) { - $d = false; - } elseif ('B' === strtoupper($str[$i + 1])) { - $d = base64_decode($str[$i + 2]); - } else { - $d = rawurldecode(strtr(str_replace('%', '%25', $str[$i + 2]), '=_', '% ')); - } - - if (false !== $d) { - if ('' !== $d) { - if ('' === $d = self::iconv($c, $charset, $d)) { - $str[$i + 3] = substr($str[$i + 3], 1); - } else { - $result .= $d; - } - } - $d = self::iconv('utf-8', $charset, $str[$i + 3]); - if ('' !== trim($d)) { - $result .= $d; - } - } elseif (ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) { - $result .= "=?{$str[$i]}?{$str[$i + 1]}?{$str[$i + 2]}?={$str[$i + 3]}"; - } else { - $result = false; - break; - } - - $i += 4; - } - - return $result; - } - - public static function iconv_get_encoding($type = 'all') - { - switch ($type) { - case 'input_encoding': return self::$inputEncoding; - case 'output_encoding': return self::$outputEncoding; - case 'internal_encoding': return self::$internalEncoding; - } - - return array( - 'input_encoding' => self::$inputEncoding, - 'output_encoding' => self::$outputEncoding, - 'internal_encoding' => self::$internalEncoding, - ); - } - - public static function iconv_set_encoding($type, $charset) - { - switch ($type) { - case 'input_encoding': self::$inputEncoding = $charset; break; - case 'output_encoding': self::$outputEncoding = $charset; break; - case 'internal_encoding': self::$internalEncoding = $charset; break; - - default: return false; - } - - return true; - } - - public static function iconv_mime_encode($fieldName, $fieldValue, $pref = null) - { - if (!\is_array($pref)) { - $pref = array(); - } - - $pref += array( - 'scheme' => 'B', - 'input-charset' => self::$internalEncoding, - 'output-charset' => self::$internalEncoding, - 'line-length' => 76, - 'line-break-chars' => "\r\n", - ); - - if (preg_match('/[\x80-\xFF]/', $fieldName)) { - $fieldName = ''; - } - - $scheme = strtoupper(substr($pref['scheme'], 0, 1)); - $in = strtolower($pref['input-charset']); - $out = strtolower($pref['output-charset']); - - if ('utf-8' !== $in && false === $fieldValue = self::iconv($in, 'utf-8', $fieldValue)) { - return false; - } - - preg_match_all('/./us', $fieldValue, $chars); - - $chars = isset($chars[0]) ? $chars[0] : array(); - - $lineBreak = (int) $pref['line-length']; - $lineStart = "=?{$pref['output-charset']}?{$scheme}?"; - $lineLength = \strlen($fieldName) + 2 + \strlen($lineStart) + 2; - $lineOffset = \strlen($lineStart) + 3; - $lineData = ''; - - $fieldValue = array(); - - $Q = 'Q' === $scheme; - - foreach ($chars as $c) { - if ('utf-8' !== $out && false === $c = self::iconv('utf-8', $out, $c)) { - return false; - } - - $o = $Q - ? $c = preg_replace_callback( - '/[=_\?\x00-\x1F\x80-\xFF]/', - array(__CLASS__, 'qpByteCallback'), - $c - ) - : base64_encode($lineData.$c); - - if (isset($o[$lineBreak - $lineLength])) { - if (!$Q) { - $lineData = base64_encode($lineData); - } - $fieldValue[] = $lineStart.$lineData.'?='; - $lineLength = $lineOffset; - $lineData = ''; - } - - $lineData .= $c; - $Q && $lineLength += \strlen($c); - } - - if ('' !== $lineData) { - if (!$Q) { - $lineData = base64_encode($lineData); - } - $fieldValue[] = $lineStart.$lineData.'?='; - } - - return $fieldName.': '.implode($pref['line-break-chars'].' ', $fieldValue); - } - - public static function iconv_strlen($s, $encoding = null) - { - static $hasXml = null; - if (null === $hasXml) { - $hasXml = \extension_loaded('xml'); - } - - if ($hasXml) { - return self::strlen1($s, $encoding); - } - - return self::strlen2($s, $encoding); - } - - public static function strlen1($s, $encoding = null) - { - if (null === $encoding) { - $encoding = self::$internalEncoding; - } - if (0 !== stripos($encoding, 'utf-8') && false === $s = self::iconv($encoding, 'utf-8', $s)) { - return false; - } - - return \strlen(utf8_decode($s)); - } - - public static function strlen2($s, $encoding = null) - { - if (null === $encoding) { - $encoding = self::$internalEncoding; - } - if (0 !== stripos($encoding, 'utf-8') && false === $s = self::iconv($encoding, 'utf-8', $s)) { - return false; - } - - $ulenMask = self::$ulenMask; - - $i = 0; - $j = 0; - $len = \strlen($s); - - while ($i < $len) { - $u = $s[$i] & "\xF0"; - $i += isset($ulenMask[$u]) ? $ulenMask[$u] : 1; - ++$j; - } - - return $j; - } - - public static function iconv_strpos($haystack, $needle, $offset = 0, $encoding = null) - { - if (null === $encoding) { - $encoding = self::$internalEncoding; - } - - if (0 !== stripos($encoding, 'utf-8')) { - if (false === $haystack = self::iconv($encoding, 'utf-8', $haystack)) { - return false; - } - if (false === $needle = self::iconv($encoding, 'utf-8', $needle)) { - return false; - } - } - - if ($offset = (int) $offset) { - $haystack = self::iconv_substr($haystack, $offset, 2147483647, 'utf-8'); - } - $pos = strpos($haystack, $needle); - - return false === $pos ? false : ($offset + ($pos ? self::iconv_strlen(substr($haystack, 0, $pos), 'utf-8') : 0)); - } - - public static function iconv_strrpos($haystack, $needle, $encoding = null) - { - if (null === $encoding) { - $encoding = self::$internalEncoding; - } - - if (0 !== stripos($encoding, 'utf-8')) { - if (false === $haystack = self::iconv($encoding, 'utf-8', $haystack)) { - return false; - } - if (false === $needle = self::iconv($encoding, 'utf-8', $needle)) { - return false; - } - } - - $pos = isset($needle[0]) ? strrpos($haystack, $needle) : false; - - return false === $pos ? false : self::iconv_strlen($pos ? substr($haystack, 0, $pos) : $haystack, 'utf-8'); - } - - public static function iconv_substr($s, $start, $length = 2147483647, $encoding = null) - { - if (null === $encoding) { - $encoding = self::$internalEncoding; - } - if (0 !== stripos($encoding, 'utf-8')) { - $encoding = null; - } elseif (false === $s = self::iconv($encoding, 'utf-8', $s)) { - return false; - } - - $s = (string) $s; - $slen = self::iconv_strlen($s, 'utf-8'); - $start = (int) $start; - - if (0 > $start) { - $start += $slen; - } - if (0 > $start) { - return false; - } - if ($start >= $slen) { - return false; - } - - $rx = $slen - $start; - - if (0 > $length) { - $length += $rx; - } - if (0 === $length) { - return ''; - } - if (0 > $length) { - return false; - } - - if ($length > $rx) { - $length = $rx; - } - - $rx = '/^'.($start ? self::pregOffset($start) : '').'('.self::pregOffset($length).')/u'; - - $s = preg_match($rx, $s, $s) ? $s[1] : ''; - - if (null === $encoding) { - return $s; - } - - return self::iconv('utf-8', $encoding, $s); - } - - private static function loadMap($type, $charset, &$map) - { - if (!isset(self::$convertMap[$type.$charset])) { - if (false === $map = self::getData($type.$charset)) { - if ('to.' === $type && self::loadMap('from.', $charset, $map)) { - $map = array_flip($map); - } else { - return false; - } - } - - self::$convertMap[$type.$charset] = $map; - } else { - $map = self::$convertMap[$type.$charset]; - } - - return true; - } - - private static function utf8ToUtf8($str, $ignore) - { - $ulenMask = self::$ulenMask; - $valid = self::$isValidUtf8; - - $u = $str; - $i = $j = 0; - $len = \strlen($str); - - while ($i < $len) { - if ($str[$i] < "\x80") { - $u[$j++] = $str[$i++]; - } else { - $ulen = $str[$i] & "\xF0"; - $ulen = isset($ulenMask[$ulen]) ? $ulenMask[$ulen] : 1; - $uchr = substr($str, $i, $ulen); - - if (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr))) { - if ($ignore) { - ++$i; - continue; - } - - trigger_error(self::ERROR_ILLEGAL_CHARACTER); - - return false; - } else { - $i += $ulen; - } - - $u[$j++] = $uchr[0]; - - isset($uchr[1]) && 0 !== ($u[$j++] = $uchr[1]) - && isset($uchr[2]) && 0 !== ($u[$j++] = $uchr[2]) - && isset($uchr[3]) && 0 !== ($u[$j++] = $uchr[3]); - } - } - - return substr($u, 0, $j); - } - - private static function mapToUtf8(&$result, array $map, $str, $ignore) - { - $len = \strlen($str); - for ($i = 0; $i < $len; ++$i) { - if (isset($str[$i + 1], $map[$str[$i].$str[$i + 1]])) { - $result .= $map[$str[$i].$str[++$i]]; - } elseif (isset($map[$str[$i]])) { - $result .= $map[$str[$i]]; - } elseif (!$ignore) { - trigger_error(self::ERROR_ILLEGAL_CHARACTER); - - return false; - } - } - - return true; - } - - private static function mapFromUtf8(&$result, array $map, $str, $ignore, $translit) - { - $ulenMask = self::$ulenMask; - $valid = self::$isValidUtf8; - - if ($translit && !self::$translitMap) { - self::$translitMap = self::getData('translit'); - } - - $i = 0; - $len = \strlen($str); - - while ($i < $len) { - if ($str[$i] < "\x80") { - $uchr = $str[$i++]; - } else { - $ulen = $str[$i] & "\xF0"; - $ulen = isset($ulenMask[$ulen]) ? $ulenMask[$ulen] : 1; - $uchr = substr($str, $i, $ulen); - - if ($ignore && (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr)))) { - ++$i; - continue; - } else { - $i += $ulen; - } - } - - if (isset($map[$uchr])) { - $result .= $map[$uchr]; - } elseif ($translit) { - if (isset(self::$translitMap[$uchr])) { - $uchr = self::$translitMap[$uchr]; - } elseif ($uchr >= "\xC3\x80") { - $uchr = \Normalizer::normalize($uchr, \Normalizer::NFD); - - if ($uchr[0] < "\x80") { - $uchr = $uchr[0]; - } elseif ($ignore) { - continue; - } else { - return false; - } - } elseif ($ignore) { - continue; - } else { - return false; - } - - $str = $uchr.substr($str, $i); - $len = \strlen($str); - $i = 0; - } elseif (!$ignore) { - return false; - } - } - - return true; - } - - private static function qpByteCallback(array $m) - { - return '='.strtoupper(dechex(\ord($m[0]))); - } - - private static function pregOffset($offset) - { - $rx = array(); - $offset = (int) $offset; - - while ($offset > 65535) { - $rx[] = '.{65535}'; - $offset -= 65535; - } - - return implode('', $rx).'.{'.$offset.'}'; - } - - private static function getData($file) - { - if (file_exists($file = __DIR__.'/Resources/charset/'.$file.'.php')) { - return require $file; - } - - return false; - } -} diff --git a/lib/vendor/symfony/polyfill-iconv/LICENSE b/lib/vendor/symfony/polyfill-iconv/LICENSE deleted file mode 100644 index 4cd8bdd..0000000 --- a/lib/vendor/symfony/polyfill-iconv/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015-2019 Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/vendor/symfony/polyfill-iconv/README.md b/lib/vendor/symfony/polyfill-iconv/README.md deleted file mode 100644 index b0c8984..0000000 --- a/lib/vendor/symfony/polyfill-iconv/README.md +++ /dev/null @@ -1,14 +0,0 @@ -Symfony Polyfill / Iconv -======================== - -This component provides a native PHP implementation of the -[php.net/iconv](https://php.net/iconv) functions -(short of [`ob_iconv_handler`](https://php.net/ob-iconv-handler)). - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php deleted file mode 100644 index b119854..0000000 --- a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php +++ /dev/null @@ -1,13719 +0,0 @@ - ' ', - 'A' => ',', - 'B' => '、', - 'C' => '。', - 'D' => '.', - 'E' => '•', - 'F' => ';', - 'G' => ':', - 'H' => '?', - 'I' => '!', - 'J' => '︰', - 'K' => '…', - 'L' => '‥', - 'M' => '﹐', - 'N' => '、', - 'O' => '﹒', - 'P' => '·', - 'Q' => '﹔', - 'R' => '﹕', - 'S' => '﹖', - 'T' => '﹗', - 'U' => '|', - 'V' => '–', - 'W' => '︱', - 'X' => '—', - 'Y' => '︳', - 'Z' => '�', - '[' => '︴', - '\\' => '﹏', - ']' => '(', - '^' => ')', - '_' => '︵', - '`' => '︶', - 'a' => '{', - 'b' => '}', - 'c' => '︷', - 'd' => '︸', - 'e' => '〔', - 'f' => '〕', - 'g' => '︹', - 'h' => '︺', - 'i' => '【', - 'j' => '】', - 'k' => '︻', - 'l' => '︼', - 'm' => '《', - 'n' => '》', - 'o' => '︽', - 'p' => '︾', - 'q' => '〈', - 'r' => '〉', - 's' => '︿', - 't' => '﹀', - 'u' => '「', - 'v' => '」', - 'w' => '﹁', - 'x' => '﹂', - 'y' => '『', - 'z' => '』', - '{' => '﹃', - '|' => '﹄', - '}' => '﹙', - '~' => '﹚', - '' => '﹛', - '' => '﹜', - '' => '﹝', - '' => '﹞', - '' => '‘', - '' => '’', - '' => '“', - '' => '”', - '' => '〝', - '' => '〞', - '' => '‵', - '' => '′', - '' => '#', - '' => '&', - '' => '*', - '' => '※', - '' => '§', - '' => '〃', - '' => '○', - '' => '●', - '' => '△', - '' => '▲', - '' => '◎', - '' => '☆', - '' => '★', - '' => '◇', - '' => '◆', - '' => '□', - '' => '■', - '' => '▽', - '' => '▼', - '' => '㊣', - '' => '℅', - '' => '‾', - '' => '�', - '' => '_', - '' => '�', - '' => '﹉', - '' => '﹊', - '' => '﹍', - '' => '﹎', - '' => '﹋', - '' => '﹌', - '' => '﹟', - '' => '﹠', - '' => '﹡', - '' => '+', - '' => '-', - '' => '×', - '' => '÷', - '' => '±', - '' => '√', - '' => '<', - '' => '>', - '' => '=', - '' => '≦', - '' => '≧', - '' => '≠', - '' => '∞', - '' => '≒', - '' => '≡', - '' => '﹢', - '' => '﹣', - '' => '﹤', - '' => '﹥', - '' => '﹦', - '' => '∼', - '' => '∩', - '' => '∪', - '' => '⊥', - '' => '∠', - '' => '∟', - '' => '⊿', - '' => '㏒', - '' => '㏑', - '' => '∫', - '' => '∮', - '' => '∵', - '' => '∴', - '' => '♀', - '' => '♂', - '' => '♁', - '' => '☉', - '' => '↑', - '' => '↓', - '' => '←', - '' => '→', - '' => '↖', - '' => '↗', - '' => '↙', - '' => '↘', - '' => '∥', - '' => '∣', - '' => '�', - '@' => '�', - 'A' => '/', - 'B' => '\', - 'C' => '$', - 'D' => '¥', - 'E' => '〒', - 'F' => '¢', - 'G' => '£', - 'H' => '%', - 'I' => '@', - 'J' => '℃', - 'K' => '℉', - 'L' => '﹩', - 'M' => '﹪', - 'N' => '﹫', - 'O' => '㏕', - 'P' => '㎜', - 'Q' => '㎝', - 'R' => '㎞', - 'S' => '㏎', - 'T' => '㎡', - 'U' => '㎎', - 'V' => '㎏', - 'W' => '㏄', - 'X' => '°', - 'Y' => '兙', - 'Z' => '兛', - '[' => '兞', - '\\' => '兝', - ']' => '兡', - '^' => '兣', - '_' => '嗧', - '`' => '瓩', - 'a' => '糎', - 'b' => '▁', - 'c' => '▂', - 'd' => '▃', - 'e' => '▄', - 'f' => '▅', - 'g' => '▆', - 'h' => '▇', - 'i' => '█', - 'j' => '▏', - 'k' => '▎', - 'l' => '▍', - 'm' => '▌', - 'n' => '▋', - 'o' => '▊', - 'p' => '▉', - 'q' => '┼', - 'r' => '┴', - 's' => '┬', - 't' => '┤', - 'u' => '├', - 'v' => '▔', - 'w' => '─', - 'x' => '│', - 'y' => '▕', - 'z' => '┌', - '{' => '┐', - '|' => '└', - '}' => '┘', - '~' => '╭', - '' => '╮', - '' => '╰', - '' => '╯', - '' => '═', - '' => '╞', - '' => '╪', - '' => '╡', - '' => '◢', - '' => '◣', - '' => '◥', - '' => '◤', - '' => '╱', - '' => '╲', - '' => '╳', - '' => '0', - '' => '1', - '' => '2', - '' => '3', - '' => '4', - '' => '5', - '' => '6', - '' => '7', - '' => '8', - '' => '9', - '' => 'Ⅰ', - '' => 'Ⅱ', - '' => 'Ⅲ', - '' => 'Ⅳ', - '' => 'Ⅴ', - '' => 'Ⅵ', - '' => 'Ⅶ', - '' => 'Ⅷ', - '' => 'Ⅸ', - '' => 'Ⅹ', - '' => '〡', - '' => '〢', - '' => '〣', - '' => '〤', - '' => '〥', - '' => '〦', - '' => '〧', - '' => '〨', - '' => '〩', - '' => '�', - '' => '卄', - '' => '�', - '' => 'A', - '' => 'B', - '' => 'C', - '' => 'D', - '' => 'E', - '' => 'F', - '' => 'G', - '' => 'H', - '' => 'I', - '' => 'J', - '' => 'K', - '' => 'L', - '' => 'M', - '' => 'N', - '' => 'O', - '' => 'P', - '' => 'Q', - '' => 'R', - '' => 'S', - '' => 'T', - '' => 'U', - '' => 'V', - '' => 'W', - '' => 'X', - '' => 'Y', - '' => 'Z', - '' => 'a', - '' => 'b', - '' => 'c', - '' => 'd', - '' => 'e', - '' => 'f', - '' => 'g', - '' => 'h', - '' => 'i', - '' => 'j', - '' => 'k', - '' => 'l', - '' => 'm', - '' => 'n', - '' => 'o', - '' => 'p', - '' => 'q', - '' => 'r', - '' => 's', - '' => 't', - '' => 'u', - '' => 'v', - '@' => 'w', - 'A' => 'x', - 'B' => 'y', - 'C' => 'z', - 'D' => 'Α', - 'E' => 'Β', - 'F' => 'Γ', - 'G' => 'Δ', - 'H' => 'Ε', - 'I' => 'Ζ', - 'J' => 'Η', - 'K' => 'Θ', - 'L' => 'Ι', - 'M' => 'Κ', - 'N' => 'Λ', - 'O' => 'Μ', - 'P' => 'Ν', - 'Q' => 'Ξ', - 'R' => 'Ο', - 'S' => 'Π', - 'T' => 'Ρ', - 'U' => 'Σ', - 'V' => 'Τ', - 'W' => 'Υ', - 'X' => 'Φ', - 'Y' => 'Χ', - 'Z' => 'Ψ', - '[' => 'Ω', - '\\' => 'α', - ']' => 'β', - '^' => 'γ', - '_' => 'δ', - '`' => 'ε', - 'a' => 'ζ', - 'b' => 'η', - 'c' => 'θ', - 'd' => 'ι', - 'e' => 'κ', - 'f' => 'λ', - 'g' => 'μ', - 'h' => 'ν', - 'i' => 'ξ', - 'j' => 'ο', - 'k' => 'π', - 'l' => 'ρ', - 'm' => 'σ', - 'n' => 'τ', - 'o' => 'υ', - 'p' => 'φ', - 'q' => 'χ', - 'r' => 'ψ', - 's' => 'ω', - 't' => 'ㄅ', - 'u' => 'ㄆ', - 'v' => 'ㄇ', - 'w' => 'ㄈ', - 'x' => 'ㄉ', - 'y' => 'ㄊ', - 'z' => 'ㄋ', - '{' => 'ㄌ', - '|' => 'ㄍ', - '}' => 'ㄎ', - '~' => 'ㄏ', - '' => 'ㄐ', - '' => 'ㄑ', - '' => 'ㄒ', - '' => 'ㄓ', - '' => 'ㄔ', - '' => 'ㄕ', - '' => 'ㄖ', - '' => 'ㄗ', - '' => 'ㄘ', - '' => 'ㄙ', - '' => 'ㄚ', - '' => 'ㄛ', - '' => 'ㄜ', - '' => 'ㄝ', - '' => 'ㄞ', - '' => 'ㄟ', - '' => 'ㄠ', - '' => 'ㄡ', - '' => 'ㄢ', - '' => 'ㄣ', - '' => 'ㄤ', - '' => 'ㄥ', - '' => 'ㄦ', - '' => 'ㄧ', - '' => 'ㄨ', - '' => 'ㄩ', - '' => '˙', - '' => 'ˉ', - '' => 'ˊ', - '' => 'ˇ', - '' => 'ˋ', - '@' => '一', - 'A' => '乙', - 'B' => '丁', - 'C' => '七', - 'D' => '乃', - 'E' => '九', - 'F' => '了', - 'G' => '二', - 'H' => '人', - 'I' => '儿', - 'J' => '入', - 'K' => '八', - 'L' => '几', - 'M' => '刀', - 'N' => '刁', - 'O' => '力', - 'P' => '匕', - 'Q' => '十', - 'R' => '卜', - 'S' => '又', - 'T' => '三', - 'U' => '下', - 'V' => '丈', - 'W' => '上', - 'X' => '丫', - 'Y' => '丸', - 'Z' => '凡', - '[' => '久', - '\\' => '么', - ']' => '也', - '^' => '乞', - '_' => '于', - '`' => '亡', - 'a' => '兀', - 'b' => '刃', - 'c' => '勺', - 'd' => '千', - 'e' => '叉', - 'f' => '口', - 'g' => '土', - 'h' => '士', - 'i' => '夕', - 'j' => '大', - 'k' => '女', - 'l' => '子', - 'm' => '孑', - 'n' => '孓', - 'o' => '寸', - 'p' => '小', - 'q' => '尢', - 'r' => '尸', - 's' => '山', - 't' => '川', - 'u' => '工', - 'v' => '己', - 'w' => '已', - 'x' => '巳', - 'y' => '巾', - 'z' => '干', - '{' => '廾', - '|' => '弋', - '}' => '弓', - '~' => '才', - '' => '丑', - '' => '丐', - '' => '不', - '' => '中', - '' => '丰', - '' => '丹', - '' => '之', - '' => '尹', - '' => '予', - '' => '云', - '' => '井', - '' => '互', - '' => '五', - '' => '亢', - '' => '仁', - '' => '什', - '' => '仃', - '' => '仆', - '' => '仇', - '' => '仍', - '' => '今', - '' => '介', - '' => '仄', - '' => '元', - '' => '允', - '' => '內', - '' => '六', - '' => '兮', - '' => '公', - '' => '冗', - '' => '凶', - '' => '分', - '' => '切', - '' => '刈', - '' => '勻', - '' => '勾', - '' => '勿', - '' => '化', - '' => '匹', - '' => '午', - '' => '升', - '' => '卅', - '' => '卞', - '' => '厄', - '' => '友', - '' => '及', - '' => '反', - '' => '壬', - '' => '天', - '' => '夫', - '' => '太', - '' => '夭', - '' => '孔', - '' => '少', - '' => '尤', - '' => '尺', - '' => '屯', - '' => '巴', - '' => '幻', - '' => '廿', - '' => '弔', - '' => '引', - '' => '心', - '' => '戈', - '' => '戶', - '' => '手', - '' => '扎', - '' => '支', - '' => '文', - '' => '斗', - '' => '斤', - '' => '方', - '' => '日', - '' => '曰', - '' => '月', - '' => '木', - '' => '欠', - '' => '止', - '' => '歹', - '' => '毋', - '' => '比', - '' => '毛', - '' => '氏', - '' => '水', - '' => '火', - '' => '爪', - '' => '父', - '' => '爻', - '' => '片', - '' => '牙', - '' => '牛', - '' => '犬', - '' => '王', - '' => '丙', - '@' => '世', - 'A' => '丕', - 'B' => '且', - 'C' => '丘', - 'D' => '主', - 'E' => '乍', - 'F' => '乏', - 'G' => '乎', - 'H' => '以', - 'I' => '付', - 'J' => '仔', - 'K' => '仕', - 'L' => '他', - 'M' => '仗', - 'N' => '代', - 'O' => '令', - 'P' => '仙', - 'Q' => '仞', - 'R' => '充', - 'S' => '兄', - 'T' => '冉', - 'U' => '冊', - 'V' => '冬', - 'W' => '凹', - 'X' => '出', - 'Y' => '凸', - 'Z' => '刊', - '[' => '加', - '\\' => '功', - ']' => '包', - '^' => '匆', - '_' => '北', - '`' => '匝', - 'a' => '仟', - 'b' => '半', - 'c' => '卉', - 'd' => '卡', - 'e' => '占', - 'f' => '卯', - 'g' => '卮', - 'h' => '去', - 'i' => '可', - 'j' => '古', - 'k' => '右', - 'l' => '召', - 'm' => '叮', - 'n' => '叩', - 'o' => '叨', - 'p' => '叼', - 'q' => '司', - 'r' => '叵', - 's' => '叫', - 't' => '另', - 'u' => '只', - 'v' => '史', - 'w' => '叱', - 'x' => '台', - 'y' => '句', - 'z' => '叭', - '{' => '叻', - '|' => '四', - '}' => '囚', - '~' => '外', - '' => '央', - '' => '失', - '' => '奴', - '' => '奶', - '' => '孕', - '' => '它', - '' => '尼', - '' => '巨', - '' => '巧', - '' => '左', - '' => '市', - '' => '布', - '' => '平', - '' => '幼', - '' => '弁', - '' => '弘', - '' => '弗', - '' => '必', - '' => '戊', - '' => '打', - '' => '扔', - '' => '扒', - '' => '扑', - '' => '斥', - '' => '旦', - '' => '朮', - '' => '本', - '' => '未', - '' => '末', - '' => '札', - '' => '正', - '' => '母', - '' => '民', - '' => '氐', - '' => '永', - '' => '汁', - '' => '汀', - '' => '氾', - '' => '犯', - '' => '玄', - '' => '玉', - '' => '瓜', - '' => '瓦', - '' => '甘', - '' => '生', - '' => '用', - '' => '甩', - '' => '田', - '' => '由', - '' => '甲', - '' => '申', - '' => '疋', - '' => '白', - '' => '皮', - '' => '皿', - '' => '目', - '' => '矛', - '' => '矢', - '' => '石', - '' => '示', - '' => '禾', - '' => '穴', - '' => '立', - '' => '丞', - '' => '丟', - '' => '乒', - '' => '乓', - '' => '乩', - '' => '亙', - '' => '交', - '' => '亦', - '' => '亥', - '' => '仿', - '' => '伉', - '' => '伙', - '' => '伊', - '' => '伕', - '' => '伍', - '' => '伐', - '' => '休', - '' => '伏', - '' => '仲', - '' => '件', - '' => '任', - '' => '仰', - '' => '仳', - '' => '份', - '' => '企', - '' => '伋', - '' => '光', - '' => '兇', - '' => '兆', - '' => '先', - '' => '全', - '@' => '共', - 'A' => '再', - 'B' => '冰', - 'C' => '列', - 'D' => '刑', - 'E' => '划', - 'F' => '刎', - 'G' => '刖', - 'H' => '劣', - 'I' => '匈', - 'J' => '匡', - 'K' => '匠', - 'L' => '印', - 'M' => '危', - 'N' => '吉', - 'O' => '吏', - 'P' => '同', - 'Q' => '吊', - 'R' => '吐', - 'S' => '吁', - 'T' => '吋', - 'U' => '各', - 'V' => '向', - 'W' => '名', - 'X' => '合', - 'Y' => '吃', - 'Z' => '后', - '[' => '吆', - '\\' => '吒', - ']' => '因', - '^' => '回', - '_' => '囝', - '`' => '圳', - 'a' => '地', - 'b' => '在', - 'c' => '圭', - 'd' => '圬', - 'e' => '圯', - 'f' => '圩', - 'g' => '夙', - 'h' => '多', - 'i' => '夷', - 'j' => '夸', - 'k' => '妄', - 'l' => '奸', - 'm' => '妃', - 'n' => '好', - 'o' => '她', - 'p' => '如', - 'q' => '妁', - 'r' => '字', - 's' => '存', - 't' => '宇', - 'u' => '守', - 'v' => '宅', - 'w' => '安', - 'x' => '寺', - 'y' => '尖', - 'z' => '屹', - '{' => '州', - '|' => '帆', - '}' => '并', - '~' => '年', - '' => '式', - '' => '弛', - '' => '忙', - '' => '忖', - '' => '戎', - '' => '戌', - '' => '戍', - '' => '成', - '' => '扣', - '' => '扛', - '' => '托', - '' => '收', - '' => '早', - '' => '旨', - '' => '旬', - '' => '旭', - '' => '曲', - '' => '曳', - '' => '有', - '' => '朽', - '' => '朴', - '' => '朱', - '' => '朵', - '' => '次', - '' => '此', - '' => '死', - '' => '氖', - '' => '汝', - '' => '汗', - '' => '汙', - '' => '江', - '' => '池', - '' => '汐', - '' => '汕', - '' => '污', - '' => '汛', - '' => '汍', - '' => '汎', - '' => '灰', - '' => '牟', - '' => '牝', - '' => '百', - '' => '竹', - '' => '米', - '' => '糸', - '' => '缶', - '' => '羊', - '' => '羽', - '' => '老', - '' => '考', - '' => '而', - '' => '耒', - '' => '耳', - '' => '聿', - '' => '肉', - '' => '肋', - '' => '肌', - '' => '臣', - '' => '自', - '' => '至', - '' => '臼', - '' => '舌', - '' => '舛', - '' => '舟', - '' => '艮', - '' => '色', - '' => '艾', - '' => '虫', - '' => '血', - '' => '行', - '' => '衣', - '' => '西', - '' => '阡', - '' => '串', - '' => '亨', - '' => '位', - '' => '住', - '' => '佇', - '' => '佗', - '' => '佞', - '' => '伴', - '' => '佛', - '' => '何', - '' => '估', - '' => '佐', - '' => '佑', - '' => '伽', - '' => '伺', - '' => '伸', - '' => '佃', - '' => '佔', - '' => '似', - '' => '但', - '' => '佣', - '@' => '作', - 'A' => '你', - 'B' => '伯', - 'C' => '低', - 'D' => '伶', - 'E' => '余', - 'F' => '佝', - 'G' => '佈', - 'H' => '佚', - 'I' => '兌', - 'J' => '克', - 'K' => '免', - 'L' => '兵', - 'M' => '冶', - 'N' => '冷', - 'O' => '別', - 'P' => '判', - 'Q' => '利', - 'R' => '刪', - 'S' => '刨', - 'T' => '劫', - 'U' => '助', - 'V' => '努', - 'W' => '劬', - 'X' => '匣', - 'Y' => '即', - 'Z' => '卵', - '[' => '吝', - '\\' => '吭', - ']' => '吞', - '^' => '吾', - '_' => '否', - '`' => '呎', - 'a' => '吧', - 'b' => '呆', - 'c' => '呃', - 'd' => '吳', - 'e' => '呈', - 'f' => '呂', - 'g' => '君', - 'h' => '吩', - 'i' => '告', - 'j' => '吹', - 'k' => '吻', - 'l' => '吸', - 'm' => '吮', - 'n' => '吵', - 'o' => '吶', - 'p' => '吠', - 'q' => '吼', - 'r' => '呀', - 's' => '吱', - 't' => '含', - 'u' => '吟', - 'v' => '听', - 'w' => '囪', - 'x' => '困', - 'y' => '囤', - 'z' => '囫', - '{' => '坊', - '|' => '坑', - '}' => '址', - '~' => '坍', - '' => '均', - '' => '坎', - '' => '圾', - '' => '坐', - '' => '坏', - '' => '圻', - '' => '壯', - '' => '夾', - '' => '妝', - '' => '妒', - '' => '妨', - '' => '妞', - '' => '妣', - '' => '妙', - '' => '妖', - '' => '妍', - '' => '妤', - '' => '妓', - '' => '妊', - '' => '妥', - '' => '孝', - '' => '孜', - '' => '孚', - '' => '孛', - '' => '完', - '' => '宋', - '' => '宏', - '' => '尬', - '' => '局', - '' => '屁', - '' => '尿', - '' => '尾', - '' => '岐', - '' => '岑', - '' => '岔', - '' => '岌', - '' => '巫', - '' => '希', - '' => '序', - '' => '庇', - '' => '床', - '' => '廷', - '' => '弄', - '' => '弟', - '' => '彤', - '' => '形', - '' => '彷', - '' => '役', - '' => '忘', - '' => '忌', - '' => '志', - '' => '忍', - '' => '忱', - '' => '快', - '' => '忸', - '' => '忪', - '' => '戒', - '' => '我', - '' => '抄', - '' => '抗', - '' => '抖', - '' => '技', - '' => '扶', - '' => '抉', - '' => '扭', - '' => '把', - '' => '扼', - '' => '找', - '' => '批', - '' => '扳', - '' => '抒', - '' => '扯', - '' => '折', - '' => '扮', - '' => '投', - '' => '抓', - '' => '抑', - '' => '抆', - '' => '改', - '' => '攻', - '' => '攸', - '' => '旱', - '' => '更', - '' => '束', - '' => '李', - '' => '杏', - '' => '材', - '' => '村', - '' => '杜', - '' => '杖', - '' => '杞', - '' => '杉', - '' => '杆', - '' => '杠', - '@' => '杓', - 'A' => '杗', - 'B' => '步', - 'C' => '每', - 'D' => '求', - 'E' => '汞', - 'F' => '沙', - 'G' => '沁', - 'H' => '沈', - 'I' => '沉', - 'J' => '沅', - 'K' => '沛', - 'L' => '汪', - 'M' => '決', - 'N' => '沐', - 'O' => '汰', - 'P' => '沌', - 'Q' => '汨', - 'R' => '沖', - 'S' => '沒', - 'T' => '汽', - 'U' => '沃', - 'V' => '汲', - 'W' => '汾', - 'X' => '汴', - 'Y' => '沆', - 'Z' => '汶', - '[' => '沍', - '\\' => '沔', - ']' => '沘', - '^' => '沂', - '_' => '灶', - '`' => '灼', - 'a' => '災', - 'b' => '灸', - 'c' => '牢', - 'd' => '牡', - 'e' => '牠', - 'f' => '狄', - 'g' => '狂', - 'h' => '玖', - 'i' => '甬', - 'j' => '甫', - 'k' => '男', - 'l' => '甸', - 'm' => '皂', - 'n' => '盯', - 'o' => '矣', - 'p' => '私', - 'q' => '秀', - 'r' => '禿', - 's' => '究', - 't' => '系', - 'u' => '罕', - 'v' => '肖', - 'w' => '肓', - 'x' => '肝', - 'y' => '肘', - 'z' => '肛', - '{' => '肚', - '|' => '育', - '}' => '良', - '~' => '芒', - '' => '芋', - '' => '芍', - '' => '見', - '' => '角', - '' => '言', - '' => '谷', - '' => '豆', - '' => '豕', - '' => '貝', - '' => '赤', - '' => '走', - '' => '足', - '' => '身', - '' => '車', - '' => '辛', - '' => '辰', - '' => '迂', - '' => '迆', - '' => '迅', - '' => '迄', - '' => '巡', - '' => '邑', - '' => '邢', - '' => '邪', - '' => '邦', - '' => '那', - '' => '酉', - '' => '釆', - '' => '里', - '' => '防', - '' => '阮', - '' => '阱', - '' => '阪', - '' => '阬', - '' => '並', - '' => '乖', - '' => '乳', - '' => '事', - '' => '些', - '' => '亞', - '' => '享', - '' => '京', - '' => '佯', - '' => '依', - '' => '侍', - '' => '佳', - '' => '使', - '' => '佬', - '' => '供', - '' => '例', - '' => '來', - '' => '侃', - '' => '佰', - '' => '併', - '' => '侈', - '' => '佩', - '' => '佻', - '' => '侖', - '' => '佾', - '' => '侏', - '' => '侑', - '' => '佺', - '' => '兔', - '' => '兒', - '' => '兕', - '' => '兩', - '' => '具', - '' => '其', - '' => '典', - '' => '冽', - '' => '函', - '' => '刻', - '' => '券', - '' => '刷', - '' => '刺', - '' => '到', - '' => '刮', - '' => '制', - '' => '剁', - '' => '劾', - '' => '劻', - '' => '卒', - '' => '協', - '' => '卓', - '' => '卑', - '' => '卦', - '' => '卷', - '' => '卸', - '' => '卹', - '' => '取', - '' => '叔', - '' => '受', - '' => '味', - '' => '呵', - '@' => '咖', - 'A' => '呸', - 'B' => '咕', - 'C' => '咀', - 'D' => '呻', - 'E' => '呷', - 'F' => '咄', - 'G' => '咒', - 'H' => '咆', - 'I' => '呼', - 'J' => '咐', - 'K' => '呱', - 'L' => '呶', - 'M' => '和', - 'N' => '咚', - 'O' => '呢', - 'P' => '周', - 'Q' => '咋', - 'R' => '命', - 'S' => '咎', - 'T' => '固', - 'U' => '垃', - 'V' => '坷', - 'W' => '坪', - 'X' => '坩', - 'Y' => '坡', - 'Z' => '坦', - '[' => '坤', - '\\' => '坼', - ']' => '夜', - '^' => '奉', - '_' => '奇', - '`' => '奈', - 'a' => '奄', - 'b' => '奔', - 'c' => '妾', - 'd' => '妻', - 'e' => '委', - 'f' => '妹', - 'g' => '妮', - 'h' => '姑', - 'i' => '姆', - 'j' => '姐', - 'k' => '姍', - 'l' => '始', - 'm' => '姓', - 'n' => '姊', - 'o' => '妯', - 'p' => '妳', - 'q' => '姒', - 'r' => '姅', - 's' => '孟', - 't' => '孤', - 'u' => '季', - 'v' => '宗', - 'w' => '定', - 'x' => '官', - 'y' => '宜', - 'z' => '宙', - '{' => '宛', - '|' => '尚', - '}' => '屈', - '~' => '居', - '' => '屆', - '' => '岷', - '' => '岡', - '' => '岸', - '' => '岩', - '' => '岫', - '' => '岱', - '' => '岳', - '' => '帘', - '' => '帚', - '' => '帖', - '' => '帕', - '' => '帛', - '' => '帑', - '' => '幸', - '' => '庚', - '' => '店', - '' => '府', - '' => '底', - '' => '庖', - '' => '延', - '' => '弦', - '' => '弧', - '' => '弩', - '' => '往', - '' => '征', - '' => '彿', - '' => '彼', - '' => '忝', - '' => '忠', - '' => '忽', - '' => '念', - '' => '忿', - '' => '怏', - '' => '怔', - '' => '怯', - '' => '怵', - '' => '怖', - '' => '怪', - '' => '怕', - '' => '怡', - '' => '性', - '' => '怩', - '' => '怫', - '' => '怛', - '' => '或', - '' => '戕', - '' => '房', - '' => '戾', - '' => '所', - '' => '承', - '' => '拉', - '' => '拌', - '' => '拄', - '' => '抿', - '' => '拂', - '' => '抹', - '' => '拒', - '' => '招', - '' => '披', - '' => '拓', - '' => '拔', - '' => '拋', - '' => '拈', - '' => '抨', - '' => '抽', - '' => '押', - '' => '拐', - '' => '拙', - '' => '拇', - '' => '拍', - '' => '抵', - '' => '拚', - '' => '抱', - '' => '拘', - '' => '拖', - '' => '拗', - '' => '拆', - '' => '抬', - '' => '拎', - '' => '放', - '' => '斧', - '' => '於', - '' => '旺', - '' => '昔', - '' => '易', - '' => '昌', - '' => '昆', - '' => '昂', - '' => '明', - '' => '昀', - '' => '昏', - '' => '昕', - '' => '昊', - '@' => '昇', - 'A' => '服', - 'B' => '朋', - 'C' => '杭', - 'D' => '枋', - 'E' => '枕', - 'F' => '東', - 'G' => '果', - 'H' => '杳', - 'I' => '杷', - 'J' => '枇', - 'K' => '枝', - 'L' => '林', - 'M' => '杯', - 'N' => '杰', - 'O' => '板', - 'P' => '枉', - 'Q' => '松', - 'R' => '析', - 'S' => '杵', - 'T' => '枚', - 'U' => '枓', - 'V' => '杼', - 'W' => '杪', - 'X' => '杲', - 'Y' => '欣', - 'Z' => '武', - '[' => '歧', - '\\' => '歿', - ']' => '氓', - '^' => '氛', - '_' => '泣', - '`' => '注', - 'a' => '泳', - 'b' => '沱', - 'c' => '泌', - 'd' => '泥', - 'e' => '河', - 'f' => '沽', - 'g' => '沾', - 'h' => '沼', - 'i' => '波', - 'j' => '沫', - 'k' => '法', - 'l' => '泓', - 'm' => '沸', - 'n' => '泄', - 'o' => '油', - 'p' => '況', - 'q' => '沮', - 'r' => '泗', - 's' => '泅', - 't' => '泱', - 'u' => '沿', - 'v' => '治', - 'w' => '泡', - 'x' => '泛', - 'y' => '泊', - 'z' => '沬', - '{' => '泯', - '|' => '泜', - '}' => '泖', - '~' => '泠', - '' => '炕', - '' => '炎', - '' => '炒', - '' => '炊', - '' => '炙', - '' => '爬', - '' => '爭', - '' => '爸', - '' => '版', - '' => '牧', - '' => '物', - '' => '狀', - '' => '狎', - '' => '狙', - '' => '狗', - '' => '狐', - '' => '玩', - '' => '玨', - '' => '玟', - '' => '玫', - '' => '玥', - '' => '甽', - '' => '疝', - '' => '疙', - '' => '疚', - '' => '的', - '' => '盂', - '' => '盲', - '' => '直', - '' => '知', - '' => '矽', - '' => '社', - '' => '祀', - '' => '祁', - '' => '秉', - '' => '秈', - '' => '空', - '' => '穹', - '' => '竺', - '' => '糾', - '' => '罔', - '' => '羌', - '' => '羋', - '' => '者', - '' => '肺', - '' => '肥', - '' => '肢', - '' => '肱', - '' => '股', - '' => '肫', - '' => '肩', - '' => '肴', - '' => '肪', - '' => '肯', - '' => '臥', - '' => '臾', - '' => '舍', - '' => '芳', - '' => '芝', - '' => '芙', - '' => '芭', - '' => '芽', - '' => '芟', - '' => '芹', - '' => '花', - '' => '芬', - '' => '芥', - '' => '芯', - '' => '芸', - '' => '芣', - '' => '芰', - '' => '芾', - '' => '芷', - '' => '虎', - '' => '虱', - '' => '初', - '' => '表', - '' => '軋', - '' => '迎', - '' => '返', - '' => '近', - '' => '邵', - '' => '邸', - '' => '邱', - '' => '邶', - '' => '采', - '' => '金', - '' => '長', - '' => '門', - '' => '阜', - '' => '陀', - '' => '阿', - '' => '阻', - '' => '附', - '@' => '陂', - 'A' => '隹', - 'B' => '雨', - 'C' => '青', - 'D' => '非', - 'E' => '亟', - 'F' => '亭', - 'G' => '亮', - 'H' => '信', - 'I' => '侵', - 'J' => '侯', - 'K' => '便', - 'L' => '俠', - 'M' => '俑', - 'N' => '俏', - 'O' => '保', - 'P' => '促', - 'Q' => '侶', - 'R' => '俘', - 'S' => '俟', - 'T' => '俊', - 'U' => '俗', - 'V' => '侮', - 'W' => '俐', - 'X' => '俄', - 'Y' => '係', - 'Z' => '俚', - '[' => '俎', - '\\' => '俞', - ']' => '侷', - '^' => '兗', - '_' => '冒', - '`' => '冑', - 'a' => '冠', - 'b' => '剎', - 'c' => '剃', - 'd' => '削', - 'e' => '前', - 'f' => '剌', - 'g' => '剋', - 'h' => '則', - 'i' => '勇', - 'j' => '勉', - 'k' => '勃', - 'l' => '勁', - 'm' => '匍', - 'n' => '南', - 'o' => '卻', - 'p' => '厚', - 'q' => '叛', - 'r' => '咬', - 's' => '哀', - 't' => '咨', - 'u' => '哎', - 'v' => '哉', - 'w' => '咸', - 'x' => '咦', - 'y' => '咳', - 'z' => '哇', - '{' => '哂', - '|' => '咽', - '}' => '咪', - '~' => '品', - '' => '哄', - '' => '哈', - '' => '咯', - '' => '咫', - '' => '咱', - '' => '咻', - '' => '咩', - '' => '咧', - '' => '咿', - '' => '囿', - '' => '垂', - '' => '型', - '' => '垠', - '' => '垣', - '' => '垢', - '' => '城', - '' => '垮', - '' => '垓', - '' => '奕', - '' => '契', - '' => '奏', - '' => '奎', - '' => '奐', - '' => '姜', - '' => '姘', - '' => '姿', - '' => '姣', - '' => '姨', - '' => '娃', - '' => '姥', - '' => '姪', - '' => '姚', - '' => '姦', - '' => '威', - '' => '姻', - '' => '孩', - '' => '宣', - '' => '宦', - '' => '室', - '' => '客', - '' => '宥', - '' => '封', - '' => '屎', - '' => '屏', - '' => '屍', - '' => '屋', - '' => '峙', - '' => '峒', - '' => '巷', - '' => '帝', - '' => '帥', - '' => '帟', - '' => '幽', - '' => '庠', - '' => '度', - '' => '建', - '' => '弈', - '' => '弭', - '' => '彥', - '' => '很', - '' => '待', - '' => '徊', - '' => '律', - '' => '徇', - '' => '後', - '' => '徉', - '' => '怒', - '' => '思', - '' => '怠', - '' => '急', - '' => '怎', - '' => '怨', - '' => '恍', - '' => '恰', - '' => '恨', - '' => '恢', - '' => '恆', - '' => '恃', - '' => '恬', - '' => '恫', - '' => '恪', - '' => '恤', - '' => '扁', - '' => '拜', - '' => '挖', - '' => '按', - '' => '拼', - '' => '拭', - '' => '持', - '' => '拮', - '' => '拽', - '' => '指', - '' => '拱', - '' => '拷', - '@' => '拯', - 'A' => '括', - 'B' => '拾', - 'C' => '拴', - 'D' => '挑', - 'E' => '挂', - 'F' => '政', - 'G' => '故', - 'H' => '斫', - 'I' => '施', - 'J' => '既', - 'K' => '春', - 'L' => '昭', - 'M' => '映', - 'N' => '昧', - 'O' => '是', - 'P' => '星', - 'Q' => '昨', - 'R' => '昱', - 'S' => '昤', - 'T' => '曷', - 'U' => '柿', - 'V' => '染', - 'W' => '柱', - 'X' => '柔', - 'Y' => '某', - 'Z' => '柬', - '[' => '架', - '\\' => '枯', - ']' => '柵', - '^' => '柩', - '_' => '柯', - '`' => '柄', - 'a' => '柑', - 'b' => '枴', - 'c' => '柚', - 'd' => '查', - 'e' => '枸', - 'f' => '柏', - 'g' => '柞', - 'h' => '柳', - 'i' => '枰', - 'j' => '柙', - 'k' => '柢', - 'l' => '柝', - 'm' => '柒', - 'n' => '歪', - 'o' => '殃', - 'p' => '殆', - 'q' => '段', - 'r' => '毒', - 's' => '毗', - 't' => '氟', - 'u' => '泉', - 'v' => '洋', - 'w' => '洲', - 'x' => '洪', - 'y' => '流', - 'z' => '津', - '{' => '洌', - '|' => '洱', - '}' => '洞', - '~' => '洗', - '' => '活', - '' => '洽', - '' => '派', - '' => '洶', - '' => '洛', - '' => '泵', - '' => '洹', - '' => '洧', - '' => '洸', - '' => '洩', - '' => '洮', - '' => '洵', - '' => '洎', - '' => '洫', - '' => '炫', - '' => '為', - '' => '炳', - '' => '炬', - '' => '炯', - '' => '炭', - '' => '炸', - '' => '炮', - '' => '炤', - '' => '爰', - '' => '牲', - '' => '牯', - '' => '牴', - '' => '狩', - '' => '狠', - '' => '狡', - '' => '玷', - '' => '珊', - '' => '玻', - '' => '玲', - '' => '珍', - '' => '珀', - '' => '玳', - '' => '甚', - '' => '甭', - '' => '畏', - '' => '界', - '' => '畎', - '' => '畋', - '' => '疫', - '' => '疤', - '' => '疥', - '' => '疢', - '' => '疣', - '' => '癸', - '' => '皆', - '' => '皇', - '' => '皈', - '' => '盈', - '' => '盆', - '' => '盃', - '' => '盅', - '' => '省', - '' => '盹', - '' => '相', - '' => '眉', - '' => '看', - '' => '盾', - '' => '盼', - '' => '眇', - '' => '矜', - '' => '砂', - '' => '研', - '' => '砌', - '' => '砍', - '' => '祆', - '' => '祉', - '' => '祈', - '' => '祇', - '' => '禹', - '' => '禺', - '' => '科', - '' => '秒', - '' => '秋', - '' => '穿', - '' => '突', - '' => '竿', - '' => '竽', - '' => '籽', - '' => '紂', - '' => '紅', - '' => '紀', - '' => '紉', - '' => '紇', - '' => '約', - '' => '紆', - '' => '缸', - '' => '美', - '' => '羿', - '' => '耄', - '@' => '耐', - 'A' => '耍', - 'B' => '耑', - 'C' => '耶', - 'D' => '胖', - 'E' => '胥', - 'F' => '胚', - 'G' => '胃', - 'H' => '胄', - 'I' => '背', - 'J' => '胡', - 'K' => '胛', - 'L' => '胎', - 'M' => '胞', - 'N' => '胤', - 'O' => '胝', - 'P' => '致', - 'Q' => '舢', - 'R' => '苧', - 'S' => '范', - 'T' => '茅', - 'U' => '苣', - 'V' => '苛', - 'W' => '苦', - 'X' => '茄', - 'Y' => '若', - 'Z' => '茂', - '[' => '茉', - '\\' => '苒', - ']' => '苗', - '^' => '英', - '_' => '茁', - '`' => '苜', - 'a' => '苔', - 'b' => '苑', - 'c' => '苞', - 'd' => '苓', - 'e' => '苟', - 'f' => '苯', - 'g' => '茆', - 'h' => '虐', - 'i' => '虹', - 'j' => '虻', - 'k' => '虺', - 'l' => '衍', - 'm' => '衫', - 'n' => '要', - 'o' => '觔', - 'p' => '計', - 'q' => '訂', - 'r' => '訃', - 's' => '貞', - 't' => '負', - 'u' => '赴', - 'v' => '赳', - 'w' => '趴', - 'x' => '軍', - 'y' => '軌', - 'z' => '述', - '{' => '迦', - '|' => '迢', - '}' => '迪', - '~' => '迥', - '' => '迭', - '' => '迫', - '' => '迤', - '' => '迨', - '' => '郊', - '' => '郎', - '' => '郁', - '' => '郃', - '' => '酋', - '' => '酊', - '' => '重', - '' => '閂', - '' => '限', - '' => '陋', - '' => '陌', - '' => '降', - '' => '面', - '' => '革', - '' => '韋', - '' => '韭', - '' => '音', - '' => '頁', - '' => '風', - '' => '飛', - '' => '食', - '' => '首', - '' => '香', - '' => '乘', - '' => '亳', - '' => '倌', - '' => '倍', - '' => '倣', - '' => '俯', - '' => '倦', - '' => '倥', - '' => '俸', - '' => '倩', - '' => '倖', - '' => '倆', - '' => '值', - '' => '借', - '' => '倚', - '' => '倒', - '' => '們', - '' => '俺', - '' => '倀', - '' => '倔', - '' => '倨', - '' => '俱', - '' => '倡', - '' => '個', - '' => '候', - '' => '倘', - '' => '俳', - '' => '修', - '' => '倭', - '' => '倪', - '' => '俾', - '' => '倫', - '' => '倉', - '' => '兼', - '' => '冤', - '' => '冥', - '' => '冢', - '' => '凍', - '' => '凌', - '' => '准', - '' => '凋', - '' => '剖', - '' => '剜', - '' => '剔', - '' => '剛', - '' => '剝', - '' => '匪', - '' => '卿', - '' => '原', - '' => '厝', - '' => '叟', - '' => '哨', - '' => '唐', - '' => '唁', - '' => '唷', - '' => '哼', - '' => '哥', - '' => '哲', - '' => '唆', - '' => '哺', - '' => '唔', - '' => '哩', - '' => '哭', - '' => '員', - '' => '唉', - '' => '哮', - '' => '哪', - '@' => '哦', - 'A' => '唧', - 'B' => '唇', - 'C' => '哽', - 'D' => '唏', - 'E' => '圃', - 'F' => '圄', - 'G' => '埂', - 'H' => '埔', - 'I' => '埋', - 'J' => '埃', - 'K' => '堉', - 'L' => '夏', - 'M' => '套', - 'N' => '奘', - 'O' => '奚', - 'P' => '娑', - 'Q' => '娘', - 'R' => '娜', - 'S' => '娟', - 'T' => '娛', - 'U' => '娓', - 'V' => '姬', - 'W' => '娠', - 'X' => '娣', - 'Y' => '娩', - 'Z' => '娥', - '[' => '娌', - '\\' => '娉', - ']' => '孫', - '^' => '屘', - '_' => '宰', - '`' => '害', - 'a' => '家', - 'b' => '宴', - 'c' => '宮', - 'd' => '宵', - 'e' => '容', - 'f' => '宸', - 'g' => '射', - 'h' => '屑', - 'i' => '展', - 'j' => '屐', - 'k' => '峭', - 'l' => '峽', - 'm' => '峻', - 'n' => '峪', - 'o' => '峨', - 'p' => '峰', - 'q' => '島', - 'r' => '崁', - 's' => '峴', - 't' => '差', - 'u' => '席', - 'v' => '師', - 'w' => '庫', - 'x' => '庭', - 'y' => '座', - 'z' => '弱', - '{' => '徒', - '|' => '徑', - '}' => '徐', - '~' => '恙', - '' => '恣', - '' => '恥', - '' => '恐', - '' => '恕', - '' => '恭', - '' => '恩', - '' => '息', - '' => '悄', - '' => '悟', - '' => '悚', - '' => '悍', - '' => '悔', - '' => '悌', - '' => '悅', - '' => '悖', - '' => '扇', - '' => '拳', - '' => '挈', - '' => '拿', - '' => '捎', - '' => '挾', - '' => '振', - '' => '捕', - '' => '捂', - '' => '捆', - '' => '捏', - '' => '捉', - '' => '挺', - '' => '捐', - '' => '挽', - '' => '挪', - '' => '挫', - '' => '挨', - '' => '捍', - '' => '捌', - '' => '效', - '' => '敉', - '' => '料', - '' => '旁', - '' => '旅', - '' => '時', - '' => '晉', - '' => '晏', - '' => '晃', - '' => '晒', - '' => '晌', - '' => '晅', - '' => '晁', - '' => '書', - '' => '朔', - '' => '朕', - '' => '朗', - '' => '校', - '' => '核', - '' => '案', - '' => '框', - '' => '桓', - '' => '根', - '' => '桂', - '' => '桔', - '' => '栩', - '' => '梳', - '' => '栗', - '' => '桌', - '' => '桑', - '' => '栽', - '' => '柴', - '' => '桐', - '' => '桀', - '' => '格', - '' => '桃', - '' => '株', - '' => '桅', - '' => '栓', - '' => '栘', - '' => '桁', - '' => '殊', - '' => '殉', - '' => '殷', - '' => '氣', - '' => '氧', - '' => '氨', - '' => '氦', - '' => '氤', - '' => '泰', - '' => '浪', - '' => '涕', - '' => '消', - '' => '涇', - '' => '浦', - '' => '浸', - '' => '海', - '' => '浙', - '' => '涓', - '@' => '浬', - 'A' => '涉', - 'B' => '浮', - 'C' => '浚', - 'D' => '浴', - 'E' => '浩', - 'F' => '涌', - 'G' => '涊', - 'H' => '浹', - 'I' => '涅', - 'J' => '浥', - 'K' => '涔', - 'L' => '烊', - 'M' => '烘', - 'N' => '烤', - 'O' => '烙', - 'P' => '烈', - 'Q' => '烏', - 'R' => '爹', - 'S' => '特', - 'T' => '狼', - 'U' => '狹', - 'V' => '狽', - 'W' => '狸', - 'X' => '狷', - 'Y' => '玆', - 'Z' => '班', - '[' => '琉', - '\\' => '珮', - ']' => '珠', - '^' => '珪', - '_' => '珞', - '`' => '畔', - 'a' => '畝', - 'b' => '畜', - 'c' => '畚', - 'd' => '留', - 'e' => '疾', - 'f' => '病', - 'g' => '症', - 'h' => '疲', - 'i' => '疳', - 'j' => '疽', - 'k' => '疼', - 'l' => '疹', - 'm' => '痂', - 'n' => '疸', - 'o' => '皋', - 'p' => '皰', - 'q' => '益', - 'r' => '盍', - 's' => '盎', - 't' => '眩', - 'u' => '真', - 'v' => '眠', - 'w' => '眨', - 'x' => '矩', - 'y' => '砰', - 'z' => '砧', - '{' => '砸', - '|' => '砝', - '}' => '破', - '~' => '砷', - '' => '砥', - '' => '砭', - '' => '砠', - '' => '砟', - '' => '砲', - '' => '祕', - '' => '祐', - '' => '祠', - '' => '祟', - '' => '祖', - '' => '神', - '' => '祝', - '' => '祗', - '' => '祚', - '' => '秤', - '' => '秣', - '' => '秧', - '' => '租', - '' => '秦', - '' => '秩', - '' => '秘', - '' => '窄', - '' => '窈', - '' => '站', - '' => '笆', - '' => '笑', - '' => '粉', - '' => '紡', - '' => '紗', - '' => '紋', - '' => '紊', - '' => '素', - '' => '索', - '' => '純', - '' => '紐', - '' => '紕', - '' => '級', - '' => '紜', - '' => '納', - '' => '紙', - '' => '紛', - '' => '缺', - '' => '罟', - '' => '羔', - '' => '翅', - '' => '翁', - '' => '耆', - '' => '耘', - '' => '耕', - '' => '耙', - '' => '耗', - '' => '耽', - '' => '耿', - '' => '胱', - '' => '脂', - '' => '胰', - '' => '脅', - '' => '胭', - '' => '胴', - '' => '脆', - '' => '胸', - '' => '胳', - '' => '脈', - '' => '能', - '' => '脊', - '' => '胼', - '' => '胯', - '' => '臭', - '' => '臬', - '' => '舀', - '' => '舐', - '' => '航', - '' => '舫', - '' => '舨', - '' => '般', - '' => '芻', - '' => '茫', - '' => '荒', - '' => '荔', - '' => '荊', - '' => '茸', - '' => '荐', - '' => '草', - '' => '茵', - '' => '茴', - '' => '荏', - '' => '茲', - '' => '茹', - '' => '茶', - '' => '茗', - '' => '荀', - '' => '茱', - '' => '茨', - '' => '荃', - '@' => '虔', - 'A' => '蚊', - 'B' => '蚪', - 'C' => '蚓', - 'D' => '蚤', - 'E' => '蚩', - 'F' => '蚌', - 'G' => '蚣', - 'H' => '蚜', - 'I' => '衰', - 'J' => '衷', - 'K' => '袁', - 'L' => '袂', - 'M' => '衽', - 'N' => '衹', - 'O' => '記', - 'P' => '訐', - 'Q' => '討', - 'R' => '訌', - 'S' => '訕', - 'T' => '訊', - 'U' => '託', - 'V' => '訓', - 'W' => '訖', - 'X' => '訏', - 'Y' => '訑', - 'Z' => '豈', - '[' => '豺', - '\\' => '豹', - ']' => '財', - '^' => '貢', - '_' => '起', - '`' => '躬', - 'a' => '軒', - 'b' => '軔', - 'c' => '軏', - 'd' => '辱', - 'e' => '送', - 'f' => '逆', - 'g' => '迷', - 'h' => '退', - 'i' => '迺', - 'j' => '迴', - 'k' => '逃', - 'l' => '追', - 'm' => '逅', - 'n' => '迸', - 'o' => '邕', - 'p' => '郡', - 'q' => '郝', - 'r' => '郢', - 's' => '酒', - 't' => '配', - 'u' => '酌', - 'v' => '釘', - 'w' => '針', - 'x' => '釗', - 'y' => '釜', - 'z' => '釙', - '{' => '閃', - '|' => '院', - '}' => '陣', - '~' => '陡', - '' => '陛', - '' => '陝', - '' => '除', - '' => '陘', - '' => '陞', - '' => '隻', - '' => '飢', - '' => '馬', - '' => '骨', - '' => '高', - '' => '鬥', - '' => '鬲', - '' => '鬼', - '' => '乾', - '' => '偺', - '' => '偽', - '' => '停', - '' => '假', - '' => '偃', - '' => '偌', - '' => '做', - '' => '偉', - '' => '健', - '' => '偶', - '' => '偎', - '' => '偕', - '' => '偵', - '' => '側', - '' => '偷', - '' => '偏', - '' => '倏', - '' => '偯', - '' => '偭', - '' => '兜', - '' => '冕', - '' => '凰', - '' => '剪', - '' => '副', - '' => '勒', - '' => '務', - '' => '勘', - '' => '動', - '' => '匐', - '' => '匏', - '' => '匙', - '' => '匿', - '' => '區', - '' => '匾', - '' => '參', - '' => '曼', - '' => '商', - '' => '啪', - '' => '啦', - '' => '啄', - '' => '啞', - '' => '啡', - '' => '啃', - '' => '啊', - '' => '唱', - '' => '啖', - '' => '問', - '' => '啕', - '' => '唯', - '' => '啤', - '' => '唸', - '' => '售', - '' => '啜', - '' => '唬', - '' => '啣', - '' => '唳', - '' => '啁', - '' => '啗', - '' => '圈', - '' => '國', - '' => '圉', - '' => '域', - '' => '堅', - '' => '堊', - '' => '堆', - '' => '埠', - '' => '埤', - '' => '基', - '' => '堂', - '' => '堵', - '' => '執', - '' => '培', - '' => '夠', - '' => '奢', - '' => '娶', - '' => '婁', - '' => '婉', - '' => '婦', - '' => '婪', - '' => '婀', - '@' => '娼', - 'A' => '婢', - 'B' => '婚', - 'C' => '婆', - 'D' => '婊', - 'E' => '孰', - 'F' => '寇', - 'G' => '寅', - 'H' => '寄', - 'I' => '寂', - 'J' => '宿', - 'K' => '密', - 'L' => '尉', - 'M' => '專', - 'N' => '將', - 'O' => '屠', - 'P' => '屜', - 'Q' => '屝', - 'R' => '崇', - 'S' => '崆', - 'T' => '崎', - 'U' => '崛', - 'V' => '崖', - 'W' => '崢', - 'X' => '崑', - 'Y' => '崩', - 'Z' => '崔', - '[' => '崙', - '\\' => '崤', - ']' => '崧', - '^' => '崗', - '_' => '巢', - '`' => '常', - 'a' => '帶', - 'b' => '帳', - 'c' => '帷', - 'd' => '康', - 'e' => '庸', - 'f' => '庶', - 'g' => '庵', - 'h' => '庾', - 'i' => '張', - 'j' => '強', - 'k' => '彗', - 'l' => '彬', - 'm' => '彩', - 'n' => '彫', - 'o' => '得', - 'p' => '徙', - 'q' => '從', - 'r' => '徘', - 's' => '御', - 't' => '徠', - 'u' => '徜', - 'v' => '恿', - 'w' => '患', - 'x' => '悉', - 'y' => '悠', - 'z' => '您', - '{' => '惋', - '|' => '悴', - '}' => '惦', - '~' => '悽', - '' => '情', - '' => '悻', - '' => '悵', - '' => '惜', - '' => '悼', - '' => '惘', - '' => '惕', - '' => '惆', - '' => '惟', - '' => '悸', - '' => '惚', - '' => '惇', - '' => '戚', - '' => '戛', - '' => '扈', - '' => '掠', - '' => '控', - '' => '捲', - '' => '掖', - '' => '探', - '' => '接', - '' => '捷', - '' => '捧', - '' => '掘', - '' => '措', - '' => '捱', - '' => '掩', - '' => '掉', - '' => '掃', - '' => '掛', - '' => '捫', - '' => '推', - '' => '掄', - '' => '授', - '' => '掙', - '' => '採', - '' => '掬', - '' => '排', - '' => '掏', - '' => '掀', - '' => '捻', - '' => '捩', - '' => '捨', - '' => '捺', - '' => '敝', - '' => '敖', - '' => '救', - '' => '教', - '' => '敗', - '' => '啟', - '' => '敏', - '' => '敘', - '' => '敕', - '' => '敔', - '' => '斜', - '' => '斛', - '' => '斬', - '' => '族', - '' => '旋', - '' => '旌', - '' => '旎', - '' => '晝', - '' => '晚', - '' => '晤', - '' => '晨', - '' => '晦', - '' => '晞', - '' => '曹', - '' => '勗', - '' => '望', - '' => '梁', - '' => '梯', - '' => '梢', - '' => '梓', - '' => '梵', - '' => '桿', - '' => '桶', - '' => '梱', - '' => '梧', - '' => '梗', - '' => '械', - '' => '梃', - '' => '棄', - '' => '梭', - '' => '梆', - '' => '梅', - '' => '梔', - '' => '條', - '' => '梨', - '' => '梟', - '' => '梡', - '' => '梂', - '' => '欲', - '' => '殺', - '@' => '毫', - 'A' => '毬', - 'B' => '氫', - 'C' => '涎', - 'D' => '涼', - 'E' => '淳', - 'F' => '淙', - 'G' => '液', - 'H' => '淡', - 'I' => '淌', - 'J' => '淤', - 'K' => '添', - 'L' => '淺', - 'M' => '清', - 'N' => '淇', - 'O' => '淋', - 'P' => '涯', - 'Q' => '淑', - 'R' => '涮', - 'S' => '淞', - 'T' => '淹', - 'U' => '涸', - 'V' => '混', - 'W' => '淵', - 'X' => '淅', - 'Y' => '淒', - 'Z' => '渚', - '[' => '涵', - '\\' => '淚', - ']' => '淫', - '^' => '淘', - '_' => '淪', - '`' => '深', - 'a' => '淮', - 'b' => '淨', - 'c' => '淆', - 'd' => '淄', - 'e' => '涪', - 'f' => '淬', - 'g' => '涿', - 'h' => '淦', - 'i' => '烹', - 'j' => '焉', - 'k' => '焊', - 'l' => '烽', - 'm' => '烯', - 'n' => '爽', - 'o' => '牽', - 'p' => '犁', - 'q' => '猜', - 'r' => '猛', - 's' => '猖', - 't' => '猓', - 'u' => '猙', - 'v' => '率', - 'w' => '琅', - 'x' => '琊', - 'y' => '球', - 'z' => '理', - '{' => '現', - '|' => '琍', - '}' => '瓠', - '~' => '瓶', - '' => '瓷', - '' => '甜', - '' => '產', - '' => '略', - '' => '畦', - '' => '畢', - '' => '異', - '' => '疏', - '' => '痔', - '' => '痕', - '' => '疵', - '' => '痊', - '' => '痍', - '' => '皎', - '' => '盔', - '' => '盒', - '' => '盛', - '' => '眷', - '' => '眾', - '' => '眼', - '' => '眶', - '' => '眸', - '' => '眺', - '' => '硫', - '' => '硃', - '' => '硎', - '' => '祥', - '' => '票', - '' => '祭', - '' => '移', - '' => '窒', - '' => '窕', - '' => '笠', - '' => '笨', - '' => '笛', - '' => '第', - '' => '符', - '' => '笙', - '' => '笞', - '' => '笮', - '' => '粒', - '' => '粗', - '' => '粕', - '' => '絆', - '' => '絃', - '' => '統', - '' => '紮', - '' => '紹', - '' => '紼', - '' => '絀', - '' => '細', - '' => '紳', - '' => '組', - '' => '累', - '' => '終', - '' => '紲', - '' => '紱', - '' => '缽', - '' => '羞', - '' => '羚', - '' => '翌', - '' => '翎', - '' => '習', - '' => '耜', - '' => '聊', - '' => '聆', - '' => '脯', - '' => '脖', - '' => '脣', - '' => '脫', - '' => '脩', - '' => '脰', - '' => '脤', - '' => '舂', - '' => '舵', - '' => '舷', - '' => '舶', - '' => '船', - '' => '莎', - '' => '莞', - '' => '莘', - '' => '荸', - '' => '莢', - '' => '莖', - '' => '莽', - '' => '莫', - '' => '莒', - '' => '莊', - '' => '莓', - '' => '莉', - '' => '莠', - '' => '荷', - '' => '荻', - '' => '荼', - '@' => '莆', - 'A' => '莧', - 'B' => '處', - 'C' => '彪', - 'D' => '蛇', - 'E' => '蛀', - 'F' => '蚶', - 'G' => '蛄', - 'H' => '蚵', - 'I' => '蛆', - 'J' => '蛋', - 'K' => '蚱', - 'L' => '蚯', - 'M' => '蛉', - 'N' => '術', - 'O' => '袞', - 'P' => '袈', - 'Q' => '被', - 'R' => '袒', - 'S' => '袖', - 'T' => '袍', - 'U' => '袋', - 'V' => '覓', - 'W' => '規', - 'X' => '訪', - 'Y' => '訝', - 'Z' => '訣', - '[' => '訥', - '\\' => '許', - ']' => '設', - '^' => '訟', - '_' => '訛', - '`' => '訢', - 'a' => '豉', - 'b' => '豚', - 'c' => '販', - 'd' => '責', - 'e' => '貫', - 'f' => '貨', - 'g' => '貪', - 'h' => '貧', - 'i' => '赧', - 'j' => '赦', - 'k' => '趾', - 'l' => '趺', - 'm' => '軛', - 'n' => '軟', - 'o' => '這', - 'p' => '逍', - 'q' => '通', - 'r' => '逗', - 's' => '連', - 't' => '速', - 'u' => '逝', - 'v' => '逐', - 'w' => '逕', - 'x' => '逞', - 'y' => '造', - 'z' => '透', - '{' => '逢', - '|' => '逖', - '}' => '逛', - '~' => '途', - '' => '部', - '' => '郭', - '' => '都', - '' => '酗', - '' => '野', - '' => '釵', - '' => '釦', - '' => '釣', - '' => '釧', - '' => '釭', - '' => '釩', - '' => '閉', - '' => '陪', - '' => '陵', - '' => '陳', - '' => '陸', - '' => '陰', - '' => '陴', - '' => '陶', - '' => '陷', - '' => '陬', - '' => '雀', - '' => '雪', - '' => '雩', - '' => '章', - '' => '竟', - '' => '頂', - '' => '頃', - '' => '魚', - '' => '鳥', - '' => '鹵', - '' => '鹿', - '' => '麥', - '' => '麻', - '' => '傢', - '' => '傍', - '' => '傅', - '' => '備', - '' => '傑', - '' => '傀', - '' => '傖', - '' => '傘', - '' => '傚', - '' => '最', - '' => '凱', - '' => '割', - '' => '剴', - '' => '創', - '' => '剩', - '' => '勞', - '' => '勝', - '' => '勛', - '' => '博', - '' => '厥', - '' => '啻', - '' => '喀', - '' => '喧', - '' => '啼', - '' => '喊', - '' => '喝', - '' => '喘', - '' => '喂', - '' => '喜', - '' => '喪', - '' => '喔', - '' => '喇', - '' => '喋', - '' => '喃', - '' => '喳', - '' => '單', - '' => '喟', - '' => '唾', - '' => '喲', - '' => '喚', - '' => '喻', - '' => '喬', - '' => '喱', - '' => '啾', - '' => '喉', - '' => '喫', - '' => '喙', - '' => '圍', - '' => '堯', - '' => '堪', - '' => '場', - '' => '堤', - '' => '堰', - '' => '報', - '' => '堡', - '' => '堝', - '' => '堠', - '' => '壹', - '' => '壺', - '' => '奠', - '@' => '婷', - 'A' => '媚', - 'B' => '婿', - 'C' => '媒', - 'D' => '媛', - 'E' => '媧', - 'F' => '孳', - 'G' => '孱', - 'H' => '寒', - 'I' => '富', - 'J' => '寓', - 'K' => '寐', - 'L' => '尊', - 'M' => '尋', - 'N' => '就', - 'O' => '嵌', - 'P' => '嵐', - 'Q' => '崴', - 'R' => '嵇', - 'S' => '巽', - 'T' => '幅', - 'U' => '帽', - 'V' => '幀', - 'W' => '幃', - 'X' => '幾', - 'Y' => '廊', - 'Z' => '廁', - '[' => '廂', - '\\' => '廄', - ']' => '弼', - '^' => '彭', - '_' => '復', - '`' => '循', - 'a' => '徨', - 'b' => '惑', - 'c' => '惡', - 'd' => '悲', - 'e' => '悶', - 'f' => '惠', - 'g' => '愜', - 'h' => '愣', - 'i' => '惺', - 'j' => '愕', - 'k' => '惰', - 'l' => '惻', - 'm' => '惴', - 'n' => '慨', - 'o' => '惱', - 'p' => '愎', - 'q' => '惶', - 'r' => '愉', - 's' => '愀', - 't' => '愒', - 'u' => '戟', - 'v' => '扉', - 'w' => '掣', - 'x' => '掌', - 'y' => '描', - 'z' => '揀', - '{' => '揩', - '|' => '揉', - '}' => '揆', - '~' => '揍', - '' => '插', - '' => '揣', - '' => '提', - '' => '握', - '' => '揖', - '' => '揭', - '' => '揮', - '' => '捶', - '' => '援', - '' => '揪', - '' => '換', - '' => '摒', - '' => '揚', - '' => '揹', - '' => '敞', - '' => '敦', - '' => '敢', - '' => '散', - '' => '斑', - '' => '斐', - '' => '斯', - '' => '普', - '' => '晰', - '' => '晴', - '' => '晶', - '' => '景', - '' => '暑', - '' => '智', - '' => '晾', - '' => '晷', - '' => '曾', - '' => '替', - '' => '期', - '' => '朝', - '' => '棺', - '' => '棕', - '' => '棠', - '' => '棘', - '' => '棗', - '' => '椅', - '' => '棟', - '' => '棵', - '' => '森', - '' => '棧', - '' => '棹', - '' => '棒', - '' => '棲', - '' => '棣', - '' => '棋', - '' => '棍', - '' => '植', - '' => '椒', - '' => '椎', - '' => '棉', - '' => '棚', - '' => '楮', - '' => '棻', - '' => '款', - '' => '欺', - '' => '欽', - '' => '殘', - '' => '殖', - '' => '殼', - '' => '毯', - '' => '氮', - '' => '氯', - '' => '氬', - '' => '港', - '' => '游', - '' => '湔', - '' => '渡', - '' => '渲', - '' => '湧', - '' => '湊', - '' => '渠', - '' => '渥', - '' => '渣', - '' => '減', - '' => '湛', - '' => '湘', - '' => '渤', - '' => '湖', - '' => '湮', - '' => '渭', - '' => '渦', - '' => '湯', - '' => '渴', - '' => '湍', - '' => '渺', - '' => '測', - '' => '湃', - '' => '渝', - '' => '渾', - '' => '滋', - '@' => '溉', - 'A' => '渙', - 'B' => '湎', - 'C' => '湣', - 'D' => '湄', - 'E' => '湲', - 'F' => '湩', - 'G' => '湟', - 'H' => '焙', - 'I' => '焚', - 'J' => '焦', - 'K' => '焰', - 'L' => '無', - 'M' => '然', - 'N' => '煮', - 'O' => '焜', - 'P' => '牌', - 'Q' => '犄', - 'R' => '犀', - 'S' => '猶', - 'T' => '猥', - 'U' => '猴', - 'V' => '猩', - 'W' => '琺', - 'X' => '琪', - 'Y' => '琳', - 'Z' => '琢', - '[' => '琥', - '\\' => '琵', - ']' => '琶', - '^' => '琴', - '_' => '琯', - '`' => '琛', - 'a' => '琦', - 'b' => '琨', - 'c' => '甥', - 'd' => '甦', - 'e' => '畫', - 'f' => '番', - 'g' => '痢', - 'h' => '痛', - 'i' => '痣', - 'j' => '痙', - 'k' => '痘', - 'l' => '痞', - 'm' => '痠', - 'n' => '登', - 'o' => '發', - 'p' => '皖', - 'q' => '皓', - 'r' => '皴', - 's' => '盜', - 't' => '睏', - 'u' => '短', - 'v' => '硝', - 'w' => '硬', - 'x' => '硯', - 'y' => '稍', - 'z' => '稈', - '{' => '程', - '|' => '稅', - '}' => '稀', - '~' => '窘', - '' => '窗', - '' => '窖', - '' => '童', - '' => '竣', - '' => '等', - '' => '策', - '' => '筆', - '' => '筐', - '' => '筒', - '' => '答', - '' => '筍', - '' => '筋', - '' => '筏', - '' => '筑', - '' => '粟', - '' => '粥', - '' => '絞', - '' => '結', - '' => '絨', - '' => '絕', - '' => '紫', - '' => '絮', - '' => '絲', - '' => '絡', - '' => '給', - '' => '絢', - '' => '絰', - '' => '絳', - '' => '善', - '' => '翔', - '' => '翕', - '' => '耋', - '' => '聒', - '' => '肅', - '' => '腕', - '' => '腔', - '' => '腋', - '' => '腑', - '' => '腎', - '' => '脹', - '' => '腆', - '' => '脾', - '' => '腌', - '' => '腓', - '' => '腴', - '' => '舒', - '' => '舜', - '' => '菩', - '' => '萃', - '' => '菸', - '' => '萍', - '' => '菠', - '' => '菅', - '' => '萋', - '' => '菁', - '' => '華', - '' => '菱', - '' => '菴', - '' => '著', - '' => '萊', - '' => '菰', - '' => '萌', - '' => '菌', - '' => '菽', - '' => '菲', - '' => '菊', - '' => '萸', - '' => '萎', - '' => '萄', - '' => '菜', - '' => '萇', - '' => '菔', - '' => '菟', - '' => '虛', - '' => '蛟', - '' => '蛙', - '' => '蛭', - '' => '蛔', - '' => '蛛', - '' => '蛤', - '' => '蛐', - '' => '蛞', - '' => '街', - '' => '裁', - '' => '裂', - '' => '袱', - '' => '覃', - '' => '視', - '' => '註', - '' => '詠', - '' => '評', - '' => '詞', - '' => '証', - '' => '詁', - '@' => '詔', - 'A' => '詛', - 'B' => '詐', - 'C' => '詆', - 'D' => '訴', - 'E' => '診', - 'F' => '訶', - 'G' => '詖', - 'H' => '象', - 'I' => '貂', - 'J' => '貯', - 'K' => '貼', - 'L' => '貳', - 'M' => '貽', - 'N' => '賁', - 'O' => '費', - 'P' => '賀', - 'Q' => '貴', - 'R' => '買', - 'S' => '貶', - 'T' => '貿', - 'U' => '貸', - 'V' => '越', - 'W' => '超', - 'X' => '趁', - 'Y' => '跎', - 'Z' => '距', - '[' => '跋', - '\\' => '跚', - ']' => '跑', - '^' => '跌', - '_' => '跛', - '`' => '跆', - 'a' => '軻', - 'b' => '軸', - 'c' => '軼', - 'd' => '辜', - 'e' => '逮', - 'f' => '逵', - 'g' => '週', - 'h' => '逸', - 'i' => '進', - 'j' => '逶', - 'k' => '鄂', - 'l' => '郵', - 'm' => '鄉', - 'n' => '郾', - 'o' => '酣', - 'p' => '酥', - 'q' => '量', - 'r' => '鈔', - 's' => '鈕', - 't' => '鈣', - 'u' => '鈉', - 'v' => '鈞', - 'w' => '鈍', - 'x' => '鈐', - 'y' => '鈇', - 'z' => '鈑', - '{' => '閔', - '|' => '閏', - '}' => '開', - '~' => '閑', - '' => '間', - '' => '閒', - '' => '閎', - '' => '隊', - '' => '階', - '' => '隋', - '' => '陽', - '' => '隅', - '' => '隆', - '' => '隍', - '' => '陲', - '' => '隄', - '' => '雁', - '' => '雅', - '' => '雄', - '' => '集', - '' => '雇', - '' => '雯', - '' => '雲', - '' => '韌', - '' => '項', - '' => '順', - '' => '須', - '' => '飧', - '' => '飪', - '' => '飯', - '' => '飩', - '' => '飲', - '' => '飭', - '' => '馮', - '' => '馭', - '' => '黃', - '' => '黍', - '' => '黑', - '' => '亂', - '' => '傭', - '' => '債', - '' => '傲', - '' => '傳', - '' => '僅', - '' => '傾', - '' => '催', - '' => '傷', - '' => '傻', - '' => '傯', - '' => '僇', - '' => '剿', - '' => '剷', - '' => '剽', - '' => '募', - '' => '勦', - '' => '勤', - '' => '勢', - '' => '勣', - '' => '匯', - '' => '嗟', - '' => '嗨', - '' => '嗓', - '' => '嗦', - '' => '嗎', - '' => '嗜', - '' => '嗇', - '' => '嗑', - '' => '嗣', - '' => '嗤', - '' => '嗯', - '' => '嗚', - '' => '嗡', - '' => '嗅', - '' => '嗆', - '' => '嗥', - '' => '嗉', - '' => '園', - '' => '圓', - '' => '塞', - '' => '塑', - '' => '塘', - '' => '塗', - '' => '塚', - '' => '塔', - '' => '填', - '' => '塌', - '' => '塭', - '' => '塊', - '' => '塢', - '' => '塒', - '' => '塋', - '' => '奧', - '' => '嫁', - '' => '嫉', - '' => '嫌', - '' => '媾', - '' => '媽', - '' => '媼', - '@' => '媳', - 'A' => '嫂', - 'B' => '媲', - 'C' => '嵩', - 'D' => '嵯', - 'E' => '幌', - 'F' => '幹', - 'G' => '廉', - 'H' => '廈', - 'I' => '弒', - 'J' => '彙', - 'K' => '徬', - 'L' => '微', - 'M' => '愚', - 'N' => '意', - 'O' => '慈', - 'P' => '感', - 'Q' => '想', - 'R' => '愛', - 'S' => '惹', - 'T' => '愁', - 'U' => '愈', - 'V' => '慎', - 'W' => '慌', - 'X' => '慄', - 'Y' => '慍', - 'Z' => '愾', - '[' => '愴', - '\\' => '愧', - ']' => '愍', - '^' => '愆', - '_' => '愷', - '`' => '戡', - 'a' => '戢', - 'b' => '搓', - 'c' => '搾', - 'd' => '搞', - 'e' => '搪', - 'f' => '搭', - 'g' => '搽', - 'h' => '搬', - 'i' => '搏', - 'j' => '搜', - 'k' => '搔', - 'l' => '損', - 'm' => '搶', - 'n' => '搖', - 'o' => '搗', - 'p' => '搆', - 'q' => '敬', - 'r' => '斟', - 's' => '新', - 't' => '暗', - 'u' => '暉', - 'v' => '暇', - 'w' => '暈', - 'x' => '暖', - 'y' => '暄', - 'z' => '暘', - '{' => '暍', - '|' => '會', - '}' => '榔', - '~' => '業', - '' => '楚', - '' => '楷', - '' => '楠', - '' => '楔', - '' => '極', - '' => '椰', - '' => '概', - '' => '楊', - '' => '楨', - '' => '楫', - '' => '楞', - '' => '楓', - '' => '楹', - '' => '榆', - '' => '楝', - '' => '楣', - '' => '楛', - '' => '歇', - '' => '歲', - '' => '毀', - '' => '殿', - '' => '毓', - '' => '毽', - '' => '溢', - '' => '溯', - '' => '滓', - '' => '溶', - '' => '滂', - '' => '源', - '' => '溝', - '' => '滇', - '' => '滅', - '' => '溥', - '' => '溘', - '' => '溼', - '' => '溺', - '' => '溫', - '' => '滑', - '' => '準', - '' => '溜', - '' => '滄', - '' => '滔', - '' => '溪', - '' => '溧', - '' => '溴', - '' => '煎', - '' => '煙', - '' => '煩', - '' => '煤', - '' => '煉', - '' => '照', - '' => '煜', - '' => '煬', - '' => '煦', - '' => '煌', - '' => '煥', - '' => '煞', - '' => '煆', - '' => '煨', - '' => '煖', - '' => '爺', - '' => '牒', - '' => '猷', - '' => '獅', - '' => '猿', - '' => '猾', - '' => '瑯', - '' => '瑚', - '' => '瑕', - '' => '瑟', - '' => '瑞', - '' => '瑁', - '' => '琿', - '' => '瑙', - '' => '瑛', - '' => '瑜', - '' => '當', - '' => '畸', - '' => '瘀', - '' => '痰', - '' => '瘁', - '' => '痲', - '' => '痱', - '' => '痺', - '' => '痿', - '' => '痴', - '' => '痳', - '' => '盞', - '' => '盟', - '' => '睛', - '' => '睫', - '' => '睦', - '' => '睞', - '' => '督', - '@' => '睹', - 'A' => '睪', - 'B' => '睬', - 'C' => '睜', - 'D' => '睥', - 'E' => '睨', - 'F' => '睢', - 'G' => '矮', - 'H' => '碎', - 'I' => '碰', - 'J' => '碗', - 'K' => '碘', - 'L' => '碌', - 'M' => '碉', - 'N' => '硼', - 'O' => '碑', - 'P' => '碓', - 'Q' => '硿', - 'R' => '祺', - 'S' => '祿', - 'T' => '禁', - 'U' => '萬', - 'V' => '禽', - 'W' => '稜', - 'X' => '稚', - 'Y' => '稠', - 'Z' => '稔', - '[' => '稟', - '\\' => '稞', - ']' => '窟', - '^' => '窠', - '_' => '筷', - '`' => '節', - 'a' => '筠', - 'b' => '筮', - 'c' => '筧', - 'd' => '粱', - 'e' => '粳', - 'f' => '粵', - 'g' => '經', - 'h' => '絹', - 'i' => '綑', - 'j' => '綁', - 'k' => '綏', - 'l' => '絛', - 'm' => '置', - 'n' => '罩', - 'o' => '罪', - 'p' => '署', - 'q' => '義', - 'r' => '羨', - 's' => '群', - 't' => '聖', - 'u' => '聘', - 'v' => '肆', - 'w' => '肄', - 'x' => '腱', - 'y' => '腰', - 'z' => '腸', - '{' => '腥', - '|' => '腮', - '}' => '腳', - '~' => '腫', - '' => '腹', - '' => '腺', - '' => '腦', - '' => '舅', - '' => '艇', - '' => '蒂', - '' => '葷', - '' => '落', - '' => '萱', - '' => '葵', - '' => '葦', - '' => '葫', - '' => '葉', - '' => '葬', - '' => '葛', - '' => '萼', - '' => '萵', - '' => '葡', - '' => '董', - '' => '葩', - '' => '葭', - '' => '葆', - '' => '虞', - '' => '虜', - '' => '號', - '' => '蛹', - '' => '蜓', - '' => '蜈', - '' => '蜇', - '' => '蜀', - '' => '蛾', - '' => '蛻', - '' => '蜂', - '' => '蜃', - '' => '蜆', - '' => '蜊', - '' => '衙', - '' => '裟', - '' => '裔', - '' => '裙', - '' => '補', - '' => '裘', - '' => '裝', - '' => '裡', - '' => '裊', - '' => '裕', - '' => '裒', - '' => '覜', - '' => '解', - '' => '詫', - '' => '該', - '' => '詳', - '' => '試', - '' => '詩', - '' => '詰', - '' => '誇', - '' => '詼', - '' => '詣', - '' => '誠', - '' => '話', - '' => '誅', - '' => '詭', - '' => '詢', - '' => '詮', - '' => '詬', - '' => '詹', - '' => '詻', - '' => '訾', - '' => '詨', - '' => '豢', - '' => '貊', - '' => '貉', - '' => '賊', - '' => '資', - '' => '賈', - '' => '賄', - '' => '貲', - '' => '賃', - '' => '賂', - '' => '賅', - '' => '跡', - '' => '跟', - '' => '跨', - '' => '路', - '' => '跳', - '' => '跺', - '' => '跪', - '' => '跤', - '' => '跦', - '' => '躲', - '' => '較', - '' => '載', - '' => '軾', - '' => '輊', - '@' => '辟', - 'A' => '農', - 'B' => '運', - 'C' => '遊', - 'D' => '道', - 'E' => '遂', - 'F' => '達', - 'G' => '逼', - 'H' => '違', - 'I' => '遐', - 'J' => '遇', - 'K' => '遏', - 'L' => '過', - 'M' => '遍', - 'N' => '遑', - 'O' => '逾', - 'P' => '遁', - 'Q' => '鄒', - 'R' => '鄗', - 'S' => '酬', - 'T' => '酪', - 'U' => '酩', - 'V' => '釉', - 'W' => '鈷', - 'X' => '鉗', - 'Y' => '鈸', - 'Z' => '鈽', - '[' => '鉀', - '\\' => '鈾', - ']' => '鉛', - '^' => '鉋', - '_' => '鉤', - '`' => '鉑', - 'a' => '鈴', - 'b' => '鉉', - 'c' => '鉍', - 'd' => '鉅', - 'e' => '鈹', - 'f' => '鈿', - 'g' => '鉚', - 'h' => '閘', - 'i' => '隘', - 'j' => '隔', - 'k' => '隕', - 'l' => '雍', - 'm' => '雋', - 'n' => '雉', - 'o' => '雊', - 'p' => '雷', - 'q' => '電', - 'r' => '雹', - 's' => '零', - 't' => '靖', - 'u' => '靴', - 'v' => '靶', - 'w' => '預', - 'x' => '頑', - 'y' => '頓', - 'z' => '頊', - '{' => '頒', - '|' => '頌', - '}' => '飼', - '~' => '飴', - '' => '飽', - '' => '飾', - '' => '馳', - '' => '馱', - '' => '馴', - '' => '髡', - '' => '鳩', - '' => '麂', - '' => '鼎', - '' => '鼓', - '' => '鼠', - '' => '僧', - '' => '僮', - '' => '僥', - '' => '僖', - '' => '僭', - '' => '僚', - '' => '僕', - '' => '像', - '' => '僑', - '' => '僱', - '' => '僎', - '' => '僩', - '' => '兢', - '' => '凳', - '' => '劃', - '' => '劂', - '' => '匱', - '' => '厭', - '' => '嗾', - '' => '嘀', - '' => '嘛', - '' => '嘗', - '' => '嗽', - '' => '嘔', - '' => '嘆', - '' => '嘉', - '' => '嘍', - '' => '嘎', - '' => '嗷', - '' => '嘖', - '' => '嘟', - '' => '嘈', - '' => '嘐', - '' => '嗶', - '' => '團', - '' => '圖', - '' => '塵', - '' => '塾', - '' => '境', - '' => '墓', - '' => '墊', - '' => '塹', - '' => '墅', - '' => '塽', - '' => '壽', - '' => '夥', - '' => '夢', - '' => '夤', - '' => '奪', - '' => '奩', - '' => '嫡', - '' => '嫦', - '' => '嫩', - '' => '嫗', - '' => '嫖', - '' => '嫘', - '' => '嫣', - '' => '孵', - '' => '寞', - '' => '寧', - '' => '寡', - '' => '寥', - '' => '實', - '' => '寨', - '' => '寢', - '' => '寤', - '' => '察', - '' => '對', - '' => '屢', - '' => '嶄', - '' => '嶇', - '' => '幛', - '' => '幣', - '' => '幕', - '' => '幗', - '' => '幔', - '' => '廓', - '' => '廖', - '' => '弊', - '' => '彆', - '' => '彰', - '' => '徹', - '' => '慇', - '@' => '愿', - 'A' => '態', - 'B' => '慷', - 'C' => '慢', - 'D' => '慣', - 'E' => '慟', - 'F' => '慚', - 'G' => '慘', - 'H' => '慵', - 'I' => '截', - 'J' => '撇', - 'K' => '摘', - 'L' => '摔', - 'M' => '撤', - 'N' => '摸', - 'O' => '摟', - 'P' => '摺', - 'Q' => '摑', - 'R' => '摧', - 'S' => '搴', - 'T' => '摭', - 'U' => '摻', - 'V' => '敲', - 'W' => '斡', - 'X' => '旗', - 'Y' => '旖', - 'Z' => '暢', - '[' => '暨', - '\\' => '暝', - ']' => '榜', - '^' => '榨', - '_' => '榕', - '`' => '槁', - 'a' => '榮', - 'b' => '槓', - 'c' => '構', - 'd' => '榛', - 'e' => '榷', - 'f' => '榻', - 'g' => '榫', - 'h' => '榴', - 'i' => '槐', - 'j' => '槍', - 'k' => '榭', - 'l' => '槌', - 'm' => '榦', - 'n' => '槃', - 'o' => '榣', - 'p' => '歉', - 'q' => '歌', - 'r' => '氳', - 's' => '漳', - 't' => '演', - 'u' => '滾', - 'v' => '漓', - 'w' => '滴', - 'x' => '漩', - 'y' => '漾', - 'z' => '漠', - '{' => '漬', - '|' => '漏', - '}' => '漂', - '~' => '漢', - '' => '滿', - '' => '滯', - '' => '漆', - '' => '漱', - '' => '漸', - '' => '漲', - '' => '漣', - '' => '漕', - '' => '漫', - '' => '漯', - '' => '澈', - '' => '漪', - '' => '滬', - '' => '漁', - '' => '滲', - '' => '滌', - '' => '滷', - '' => '熔', - '' => '熙', - '' => '煽', - '' => '熊', - '' => '熄', - '' => '熒', - '' => '爾', - '' => '犒', - '' => '犖', - '' => '獄', - '' => '獐', - '' => '瑤', - '' => '瑣', - '' => '瑪', - '' => '瑰', - '' => '瑭', - '' => '甄', - '' => '疑', - '' => '瘧', - '' => '瘍', - '' => '瘋', - '' => '瘉', - '' => '瘓', - '' => '盡', - '' => '監', - '' => '瞄', - '' => '睽', - '' => '睿', - '' => '睡', - '' => '磁', - '' => '碟', - '' => '碧', - '' => '碳', - '' => '碩', - '' => '碣', - '' => '禎', - '' => '福', - '' => '禍', - '' => '種', - '' => '稱', - '' => '窪', - '' => '窩', - '' => '竭', - '' => '端', - '' => '管', - '' => '箕', - '' => '箋', - '' => '筵', - '' => '算', - '' => '箝', - '' => '箔', - '' => '箏', - '' => '箸', - '' => '箇', - '' => '箄', - '' => '粹', - '' => '粽', - '' => '精', - '' => '綻', - '' => '綰', - '' => '綜', - '' => '綽', - '' => '綾', - '' => '綠', - '' => '緊', - '' => '綴', - '' => '網', - '' => '綱', - '' => '綺', - '' => '綢', - '' => '綿', - '' => '綵', - '' => '綸', - '' => '維', - '' => '緒', - '' => '緇', - '' => '綬', - '@' => '罰', - 'A' => '翠', - 'B' => '翡', - 'C' => '翟', - 'D' => '聞', - 'E' => '聚', - 'F' => '肇', - 'G' => '腐', - 'H' => '膀', - 'I' => '膏', - 'J' => '膈', - 'K' => '膊', - 'L' => '腿', - 'M' => '膂', - 'N' => '臧', - 'O' => '臺', - 'P' => '與', - 'Q' => '舔', - 'R' => '舞', - 'S' => '艋', - 'T' => '蓉', - 'U' => '蒿', - 'V' => '蓆', - 'W' => '蓄', - 'X' => '蒙', - 'Y' => '蒞', - 'Z' => '蒲', - '[' => '蒜', - '\\' => '蓋', - ']' => '蒸', - '^' => '蓀', - '_' => '蓓', - '`' => '蒐', - 'a' => '蒼', - 'b' => '蓑', - 'c' => '蓊', - 'd' => '蜿', - 'e' => '蜜', - 'f' => '蜻', - 'g' => '蜢', - 'h' => '蜥', - 'i' => '蜴', - 'j' => '蜘', - 'k' => '蝕', - 'l' => '蜷', - 'm' => '蜩', - 'n' => '裳', - 'o' => '褂', - 'p' => '裴', - 'q' => '裹', - 'r' => '裸', - 's' => '製', - 't' => '裨', - 'u' => '褚', - 'v' => '裯', - 'w' => '誦', - 'x' => '誌', - 'y' => '語', - 'z' => '誣', - '{' => '認', - '|' => '誡', - '}' => '誓', - '~' => '誤', - '' => '說', - '' => '誥', - '' => '誨', - '' => '誘', - '' => '誑', - '' => '誚', - '' => '誧', - '' => '豪', - '' => '貍', - '' => '貌', - '' => '賓', - '' => '賑', - '' => '賒', - '' => '赫', - '' => '趙', - '' => '趕', - '' => '跼', - '' => '輔', - '' => '輒', - '' => '輕', - '' => '輓', - '' => '辣', - '' => '遠', - '' => '遘', - '' => '遜', - '' => '遣', - '' => '遙', - '' => '遞', - '' => '遢', - '' => '遝', - '' => '遛', - '' => '鄙', - '' => '鄘', - '' => '鄞', - '' => '酵', - '' => '酸', - '' => '酷', - '' => '酴', - '' => '鉸', - '' => '銀', - '' => '銅', - '' => '銘', - '' => '銖', - '' => '鉻', - '' => '銓', - '' => '銜', - '' => '銨', - '' => '鉼', - '' => '銑', - '' => '閡', - '' => '閨', - '' => '閩', - '' => '閣', - '' => '閥', - '' => '閤', - '' => '隙', - '' => '障', - '' => '際', - '' => '雌', - '' => '雒', - '' => '需', - '' => '靼', - '' => '鞅', - '' => '韶', - '' => '頗', - '' => '領', - '' => '颯', - '' => '颱', - '' => '餃', - '' => '餅', - '' => '餌', - '' => '餉', - '' => '駁', - '' => '骯', - '' => '骰', - '' => '髦', - '' => '魁', - '' => '魂', - '' => '鳴', - '' => '鳶', - '' => '鳳', - '' => '麼', - '' => '鼻', - '' => '齊', - '' => '億', - '' => '儀', - '' => '僻', - '' => '僵', - '' => '價', - '' => '儂', - '' => '儈', - '' => '儉', - '' => '儅', - '' => '凜', - '@' => '劇', - 'A' => '劈', - 'B' => '劉', - 'C' => '劍', - 'D' => '劊', - 'E' => '勰', - 'F' => '厲', - 'G' => '嘮', - 'H' => '嘻', - 'I' => '嘹', - 'J' => '嘲', - 'K' => '嘿', - 'L' => '嘴', - 'M' => '嘩', - 'N' => '噓', - 'O' => '噎', - 'P' => '噗', - 'Q' => '噴', - 'R' => '嘶', - 'S' => '嘯', - 'T' => '嘰', - 'U' => '墀', - 'V' => '墟', - 'W' => '增', - 'X' => '墳', - 'Y' => '墜', - 'Z' => '墮', - '[' => '墩', - '\\' => '墦', - ']' => '奭', - '^' => '嬉', - '_' => '嫻', - '`' => '嬋', - 'a' => '嫵', - 'b' => '嬌', - 'c' => '嬈', - 'd' => '寮', - 'e' => '寬', - 'f' => '審', - 'g' => '寫', - 'h' => '層', - 'i' => '履', - 'j' => '嶝', - 'k' => '嶔', - 'l' => '幢', - 'm' => '幟', - 'n' => '幡', - 'o' => '廢', - 'p' => '廚', - 'q' => '廟', - 'r' => '廝', - 's' => '廣', - 't' => '廠', - 'u' => '彈', - 'v' => '影', - 'w' => '德', - 'x' => '徵', - 'y' => '慶', - 'z' => '慧', - '{' => '慮', - '|' => '慝', - '}' => '慕', - '~' => '憂', - '' => '慼', - '' => '慰', - '' => '慫', - '' => '慾', - '' => '憧', - '' => '憐', - '' => '憫', - '' => '憎', - '' => '憬', - '' => '憚', - '' => '憤', - '' => '憔', - '' => '憮', - '' => '戮', - '' => '摩', - '' => '摯', - '' => '摹', - '' => '撞', - '' => '撲', - '' => '撈', - '' => '撐', - '' => '撰', - '' => '撥', - '' => '撓', - '' => '撕', - '' => '撩', - '' => '撒', - '' => '撮', - '' => '播', - '' => '撫', - '' => '撚', - '' => '撬', - '' => '撙', - '' => '撢', - '' => '撳', - '' => '敵', - '' => '敷', - '' => '數', - '' => '暮', - '' => '暫', - '' => '暴', - '' => '暱', - '' => '樣', - '' => '樟', - '' => '槨', - '' => '樁', - '' => '樞', - '' => '標', - '' => '槽', - '' => '模', - '' => '樓', - '' => '樊', - '' => '槳', - '' => '樂', - '' => '樅', - '' => '槭', - '' => '樑', - '' => '歐', - '' => '歎', - '' => '殤', - '' => '毅', - '' => '毆', - '' => '漿', - '' => '潼', - '' => '澄', - '' => '潑', - '' => '潦', - '' => '潔', - '' => '澆', - '' => '潭', - '' => '潛', - '' => '潸', - '' => '潮', - '' => '澎', - '' => '潺', - '' => '潰', - '' => '潤', - '' => '澗', - '' => '潘', - '' => '滕', - '' => '潯', - '' => '潠', - '' => '潟', - '' => '熟', - '' => '熬', - '' => '熱', - '' => '熨', - '' => '牖', - '' => '犛', - '' => '獎', - '' => '獗', - '' => '瑩', - '' => '璋', - '' => '璃', - '@' => '瑾', - 'A' => '璀', - 'B' => '畿', - 'C' => '瘠', - 'D' => '瘩', - 'E' => '瘟', - 'F' => '瘤', - 'G' => '瘦', - 'H' => '瘡', - 'I' => '瘢', - 'J' => '皚', - 'K' => '皺', - 'L' => '盤', - 'M' => '瞎', - 'N' => '瞇', - 'O' => '瞌', - 'P' => '瞑', - 'Q' => '瞋', - 'R' => '磋', - 'S' => '磅', - 'T' => '確', - 'U' => '磊', - 'V' => '碾', - 'W' => '磕', - 'X' => '碼', - 'Y' => '磐', - 'Z' => '稿', - '[' => '稼', - '\\' => '穀', - ']' => '稽', - '^' => '稷', - '_' => '稻', - '`' => '窯', - 'a' => '窮', - 'b' => '箭', - 'c' => '箱', - 'd' => '範', - 'e' => '箴', - 'f' => '篆', - 'g' => '篇', - 'h' => '篁', - 'i' => '箠', - 'j' => '篌', - 'k' => '糊', - 'l' => '締', - 'm' => '練', - 'n' => '緯', - 'o' => '緻', - 'p' => '緘', - 'q' => '緬', - 'r' => '緝', - 's' => '編', - 't' => '緣', - 'u' => '線', - 'v' => '緞', - 'w' => '緩', - 'x' => '綞', - 'y' => '緙', - 'z' => '緲', - '{' => '緹', - '|' => '罵', - '}' => '罷', - '~' => '羯', - '' => '翩', - '' => '耦', - '' => '膛', - '' => '膜', - '' => '膝', - '' => '膠', - '' => '膚', - '' => '膘', - '' => '蔗', - '' => '蔽', - '' => '蔚', - '' => '蓮', - '' => '蔬', - '' => '蔭', - '' => '蔓', - '' => '蔑', - '' => '蔣', - '' => '蔡', - '' => '蔔', - '' => '蓬', - '' => '蔥', - '' => '蓿', - '' => '蔆', - '' => '螂', - '' => '蝴', - '' => '蝶', - '' => '蝠', - '' => '蝦', - '' => '蝸', - '' => '蝨', - '' => '蝙', - '' => '蝗', - '' => '蝌', - '' => '蝓', - '' => '衛', - '' => '衝', - '' => '褐', - '' => '複', - '' => '褒', - '' => '褓', - '' => '褕', - '' => '褊', - '' => '誼', - '' => '諒', - '' => '談', - '' => '諄', - '' => '誕', - '' => '請', - '' => '諸', - '' => '課', - '' => '諉', - '' => '諂', - '' => '調', - '' => '誰', - '' => '論', - '' => '諍', - '' => '誶', - '' => '誹', - '' => '諛', - '' => '豌', - '' => '豎', - '' => '豬', - '' => '賠', - '' => '賞', - '' => '賦', - '' => '賤', - '' => '賬', - '' => '賭', - '' => '賢', - '' => '賣', - '' => '賜', - '' => '質', - '' => '賡', - '' => '赭', - '' => '趟', - '' => '趣', - '' => '踫', - '' => '踐', - '' => '踝', - '' => '踢', - '' => '踏', - '' => '踩', - '' => '踟', - '' => '踡', - '' => '踞', - '' => '躺', - '' => '輝', - '' => '輛', - '' => '輟', - '' => '輩', - '' => '輦', - '' => '輪', - '' => '輜', - '' => '輞', - '@' => '輥', - 'A' => '適', - 'B' => '遮', - 'C' => '遨', - 'D' => '遭', - 'E' => '遷', - 'F' => '鄰', - 'G' => '鄭', - 'H' => '鄧', - 'I' => '鄱', - 'J' => '醇', - 'K' => '醉', - 'L' => '醋', - 'M' => '醃', - 'N' => '鋅', - 'O' => '銻', - 'P' => '銷', - 'Q' => '鋪', - 'R' => '銬', - 'S' => '鋤', - 'T' => '鋁', - 'U' => '銳', - 'V' => '銼', - 'W' => '鋒', - 'X' => '鋇', - 'Y' => '鋰', - 'Z' => '銲', - '[' => '閭', - '\\' => '閱', - ']' => '霄', - '^' => '霆', - '_' => '震', - '`' => '霉', - 'a' => '靠', - 'b' => '鞍', - 'c' => '鞋', - 'd' => '鞏', - 'e' => '頡', - 'f' => '頫', - 'g' => '頜', - 'h' => '颳', - 'i' => '養', - 'j' => '餓', - 'k' => '餒', - 'l' => '餘', - 'm' => '駝', - 'n' => '駐', - 'o' => '駟', - 'p' => '駛', - 'q' => '駑', - 'r' => '駕', - 's' => '駒', - 't' => '駙', - 'u' => '骷', - 'v' => '髮', - 'w' => '髯', - 'x' => '鬧', - 'y' => '魅', - 'z' => '魄', - '{' => '魷', - '|' => '魯', - '}' => '鴆', - '~' => '鴉', - '' => '鴃', - '' => '麩', - '' => '麾', - '' => '黎', - '' => '墨', - '' => '齒', - '' => '儒', - '' => '儘', - '' => '儔', - '' => '儐', - '' => '儕', - '' => '冀', - '' => '冪', - '' => '凝', - '' => '劑', - '' => '劓', - '' => '勳', - '' => '噙', - '' => '噫', - '' => '噹', - '' => '噩', - '' => '噤', - '' => '噸', - '' => '噪', - '' => '器', - '' => '噥', - '' => '噱', - '' => '噯', - '' => '噬', - '' => '噢', - '' => '噶', - '' => '壁', - '' => '墾', - '' => '壇', - '' => '壅', - '' => '奮', - '' => '嬝', - '' => '嬴', - '' => '學', - '' => '寰', - '' => '導', - '' => '彊', - '' => '憲', - '' => '憑', - '' => '憩', - '' => '憊', - '' => '懍', - '' => '憶', - '' => '憾', - '' => '懊', - '' => '懈', - '' => '戰', - '' => '擅', - '' => '擁', - '' => '擋', - '' => '撻', - '' => '撼', - '' => '據', - '' => '擄', - '' => '擇', - '' => '擂', - '' => '操', - '' => '撿', - '' => '擒', - '' => '擔', - '' => '撾', - '' => '整', - '' => '曆', - '' => '曉', - '' => '暹', - '' => '曄', - '' => '曇', - '' => '暸', - '' => '樽', - '' => '樸', - '' => '樺', - '' => '橙', - '' => '橫', - '' => '橘', - '' => '樹', - '' => '橄', - '' => '橢', - '' => '橡', - '' => '橋', - '' => '橇', - '' => '樵', - '' => '機', - '' => '橈', - '' => '歙', - '' => '歷', - '' => '氅', - '' => '濂', - '' => '澱', - '' => '澡', - '@' => '濃', - 'A' => '澤', - 'B' => '濁', - 'C' => '澧', - 'D' => '澳', - 'E' => '激', - 'F' => '澹', - 'G' => '澶', - 'H' => '澦', - 'I' => '澠', - 'J' => '澴', - 'K' => '熾', - 'L' => '燉', - 'M' => '燐', - 'N' => '燒', - 'O' => '燈', - 'P' => '燕', - 'Q' => '熹', - 'R' => '燎', - 'S' => '燙', - 'T' => '燜', - 'U' => '燃', - 'V' => '燄', - 'W' => '獨', - 'X' => '璜', - 'Y' => '璣', - 'Z' => '璘', - '[' => '璟', - '\\' => '璞', - ']' => '瓢', - '^' => '甌', - '_' => '甍', - '`' => '瘴', - 'a' => '瘸', - 'b' => '瘺', - 'c' => '盧', - 'd' => '盥', - 'e' => '瞠', - 'f' => '瞞', - 'g' => '瞟', - 'h' => '瞥', - 'i' => '磨', - 'j' => '磚', - 'k' => '磬', - 'l' => '磧', - 'm' => '禦', - 'n' => '積', - 'o' => '穎', - 'p' => '穆', - 'q' => '穌', - 'r' => '穋', - 's' => '窺', - 't' => '篙', - 'u' => '簑', - 'v' => '築', - 'w' => '篤', - 'x' => '篛', - 'y' => '篡', - 'z' => '篩', - '{' => '篦', - '|' => '糕', - '}' => '糖', - '~' => '縊', - '' => '縑', - '' => '縈', - '' => '縛', - '' => '縣', - '' => '縞', - '' => '縝', - '' => '縉', - '' => '縐', - '' => '罹', - '' => '羲', - '' => '翰', - '' => '翱', - '' => '翮', - '' => '耨', - '' => '膳', - '' => '膩', - '' => '膨', - '' => '臻', - '' => '興', - '' => '艘', - '' => '艙', - '' => '蕊', - '' => '蕙', - '' => '蕈', - '' => '蕨', - '' => '蕩', - '' => '蕃', - '' => '蕉', - '' => '蕭', - '' => '蕪', - '' => '蕞', - '' => '螃', - '' => '螟', - '' => '螞', - '' => '螢', - '' => '融', - '' => '衡', - '' => '褪', - '' => '褲', - '' => '褥', - '' => '褫', - '' => '褡', - '' => '親', - '' => '覦', - '' => '諦', - '' => '諺', - '' => '諫', - '' => '諱', - '' => '謀', - '' => '諜', - '' => '諧', - '' => '諮', - '' => '諾', - '' => '謁', - '' => '謂', - '' => '諷', - '' => '諭', - '' => '諳', - '' => '諶', - '' => '諼', - '' => '豫', - '' => '豭', - '' => '貓', - '' => '賴', - '' => '蹄', - '' => '踱', - '' => '踴', - '' => '蹂', - '' => '踹', - '' => '踵', - '' => '輻', - '' => '輯', - '' => '輸', - '' => '輳', - '' => '辨', - '' => '辦', - '' => '遵', - '' => '遴', - '' => '選', - '' => '遲', - '' => '遼', - '' => '遺', - '' => '鄴', - '' => '醒', - '' => '錠', - '' => '錶', - '' => '鋸', - '' => '錳', - '' => '錯', - '' => '錢', - '' => '鋼', - '' => '錫', - '' => '錄', - '' => '錚', - '@' => '錐', - 'A' => '錦', - 'B' => '錡', - 'C' => '錕', - 'D' => '錮', - 'E' => '錙', - 'F' => '閻', - 'G' => '隧', - 'H' => '隨', - 'I' => '險', - 'J' => '雕', - 'K' => '霎', - 'L' => '霑', - 'M' => '霖', - 'N' => '霍', - 'O' => '霓', - 'P' => '霏', - 'Q' => '靛', - 'R' => '靜', - 'S' => '靦', - 'T' => '鞘', - 'U' => '頰', - 'V' => '頸', - 'W' => '頻', - 'X' => '頷', - 'Y' => '頭', - 'Z' => '頹', - '[' => '頤', - '\\' => '餐', - ']' => '館', - '^' => '餞', - '_' => '餛', - '`' => '餡', - 'a' => '餚', - 'b' => '駭', - 'c' => '駢', - 'd' => '駱', - 'e' => '骸', - 'f' => '骼', - 'g' => '髻', - 'h' => '髭', - 'i' => '鬨', - 'j' => '鮑', - 'k' => '鴕', - 'l' => '鴣', - 'm' => '鴦', - 'n' => '鴨', - 'o' => '鴒', - 'p' => '鴛', - 'q' => '默', - 'r' => '黔', - 's' => '龍', - 't' => '龜', - 'u' => '優', - 'v' => '償', - 'w' => '儡', - 'x' => '儲', - 'y' => '勵', - 'z' => '嚎', - '{' => '嚀', - '|' => '嚐', - '}' => '嚅', - '~' => '嚇', - '' => '嚏', - '' => '壕', - '' => '壓', - '' => '壑', - '' => '壎', - '' => '嬰', - '' => '嬪', - '' => '嬤', - '' => '孺', - '' => '尷', - '' => '屨', - '' => '嶼', - '' => '嶺', - '' => '嶽', - '' => '嶸', - '' => '幫', - '' => '彌', - '' => '徽', - '' => '應', - '' => '懂', - '' => '懇', - '' => '懦', - '' => '懋', - '' => '戲', - '' => '戴', - '' => '擎', - '' => '擊', - '' => '擘', - '' => '擠', - '' => '擰', - '' => '擦', - '' => '擬', - '' => '擱', - '' => '擢', - '' => '擭', - '' => '斂', - '' => '斃', - '' => '曙', - '' => '曖', - '' => '檀', - '' => '檔', - '' => '檄', - '' => '檢', - '' => '檜', - '' => '櫛', - '' => '檣', - '' => '橾', - '' => '檗', - '' => '檐', - '' => '檠', - '' => '歜', - '' => '殮', - '' => '毚', - '' => '氈', - '' => '濘', - '' => '濱', - '' => '濟', - '' => '濠', - '' => '濛', - '' => '濤', - '' => '濫', - '' => '濯', - '' => '澀', - '' => '濬', - '' => '濡', - '' => '濩', - '' => '濕', - '' => '濮', - '' => '濰', - '' => '燧', - '' => '營', - '' => '燮', - '' => '燦', - '' => '燥', - '' => '燭', - '' => '燬', - '' => '燴', - '' => '燠', - '' => '爵', - '' => '牆', - '' => '獰', - '' => '獲', - '' => '璩', - '' => '環', - '' => '璦', - '' => '璨', - '' => '癆', - '' => '療', - '' => '癌', - '' => '盪', - '' => '瞳', - '' => '瞪', - '' => '瞰', - '' => '瞬', - '@' => '瞧', - 'A' => '瞭', - 'B' => '矯', - 'C' => '磷', - 'D' => '磺', - 'E' => '磴', - 'F' => '磯', - 'G' => '礁', - 'H' => '禧', - 'I' => '禪', - 'J' => '穗', - 'K' => '窿', - 'L' => '簇', - 'M' => '簍', - 'N' => '篾', - 'O' => '篷', - 'P' => '簌', - 'Q' => '篠', - 'R' => '糠', - 'S' => '糜', - 'T' => '糞', - 'U' => '糢', - 'V' => '糟', - 'W' => '糙', - 'X' => '糝', - 'Y' => '縮', - 'Z' => '績', - '[' => '繆', - '\\' => '縷', - ']' => '縲', - '^' => '繃', - '_' => '縫', - '`' => '總', - 'a' => '縱', - 'b' => '繅', - 'c' => '繁', - 'd' => '縴', - 'e' => '縹', - 'f' => '繈', - 'g' => '縵', - 'h' => '縿', - 'i' => '縯', - 'j' => '罄', - 'k' => '翳', - 'l' => '翼', - 'm' => '聱', - 'n' => '聲', - 'o' => '聰', - 'p' => '聯', - 'q' => '聳', - 'r' => '臆', - 's' => '臃', - 't' => '膺', - 'u' => '臂', - 'v' => '臀', - 'w' => '膿', - 'x' => '膽', - 'y' => '臉', - 'z' => '膾', - '{' => '臨', - '|' => '舉', - '}' => '艱', - '~' => '薪', - '' => '薄', - '' => '蕾', - '' => '薜', - '' => '薑', - '' => '薔', - '' => '薯', - '' => '薛', - '' => '薇', - '' => '薨', - '' => '薊', - '' => '虧', - '' => '蟀', - '' => '蟑', - '' => '螳', - '' => '蟒', - '' => '蟆', - '' => '螫', - '' => '螻', - '' => '螺', - '' => '蟈', - '' => '蟋', - '' => '褻', - '' => '褶', - '' => '襄', - '' => '褸', - '' => '褽', - '' => '覬', - '' => '謎', - '' => '謗', - '' => '謙', - '' => '講', - '' => '謊', - '' => '謠', - '' => '謝', - '' => '謄', - '' => '謐', - '' => '豁', - '' => '谿', - '' => '豳', - '' => '賺', - '' => '賽', - '' => '購', - '' => '賸', - '' => '賻', - '' => '趨', - '' => '蹉', - '' => '蹋', - '' => '蹈', - '' => '蹊', - '' => '轄', - '' => '輾', - '' => '轂', - '' => '轅', - '' => '輿', - '' => '避', - '' => '遽', - '' => '還', - '' => '邁', - '' => '邂', - '' => '邀', - '' => '鄹', - '' => '醣', - '' => '醞', - '' => '醜', - '' => '鍍', - '' => '鎂', - '' => '錨', - '' => '鍵', - '' => '鍊', - '' => '鍥', - '' => '鍋', - '' => '錘', - '' => '鍾', - '' => '鍬', - '' => '鍛', - '' => '鍰', - '' => '鍚', - '' => '鍔', - '' => '闊', - '' => '闋', - '' => '闌', - '' => '闈', - '' => '闆', - '' => '隱', - '' => '隸', - '' => '雖', - '' => '霜', - '' => '霞', - '' => '鞠', - '' => '韓', - '' => '顆', - '' => '颶', - '' => '餵', - '' => '騁', - '@' => '駿', - 'A' => '鮮', - 'B' => '鮫', - 'C' => '鮪', - 'D' => '鮭', - 'E' => '鴻', - 'F' => '鴿', - 'G' => '麋', - 'H' => '黏', - 'I' => '點', - 'J' => '黜', - 'K' => '黝', - 'L' => '黛', - 'M' => '鼾', - 'N' => '齋', - 'O' => '叢', - 'P' => '嚕', - 'Q' => '嚮', - 'R' => '壙', - 'S' => '壘', - 'T' => '嬸', - 'U' => '彝', - 'V' => '懣', - 'W' => '戳', - 'X' => '擴', - 'Y' => '擲', - 'Z' => '擾', - '[' => '攆', - '\\' => '擺', - ']' => '擻', - '^' => '擷', - '_' => '斷', - '`' => '曜', - 'a' => '朦', - 'b' => '檳', - 'c' => '檬', - 'd' => '櫃', - 'e' => '檻', - 'f' => '檸', - 'g' => '櫂', - 'h' => '檮', - 'i' => '檯', - 'j' => '歟', - 'k' => '歸', - 'l' => '殯', - 'm' => '瀉', - 'n' => '瀋', - 'o' => '濾', - 'p' => '瀆', - 'q' => '濺', - 'r' => '瀑', - 's' => '瀏', - 't' => '燻', - 'u' => '燼', - 'v' => '燾', - 'w' => '燸', - 'x' => '獷', - 'y' => '獵', - 'z' => '璧', - '{' => '璿', - '|' => '甕', - '}' => '癖', - '~' => '癘', - '¡' => '癒', - '¢' => '瞽', - '£' => '瞿', - '¤' => '瞻', - '¥' => '瞼', - '¦' => '礎', - '§' => '禮', - '¨' => '穡', - '©' => '穢', - 'ª' => '穠', - '«' => '竄', - '¬' => '竅', - '­' => '簫', - '®' => '簧', - '¯' => '簪', - '°' => '簞', - '±' => '簣', - '²' => '簡', - '³' => '糧', - '´' => '織', - 'µ' => '繕', - '¶' => '繞', - '·' => '繚', - '¸' => '繡', - '¹' => '繒', - 'º' => '繙', - '»' => '罈', - '¼' => '翹', - '½' => '翻', - '¾' => '職', - '¿' => '聶', - '' => '臍', - '' => '臏', - '' => '舊', - '' => '藏', - '' => '薩', - '' => '藍', - '' => '藐', - '' => '藉', - '' => '薰', - '' => '薺', - '' => '薹', - '' => '薦', - '' => '蟯', - '' => '蟬', - '' => '蟲', - '' => '蟠', - '' => '覆', - '' => '覲', - '' => '觴', - '' => '謨', - '' => '謹', - '' => '謬', - '' => '謫', - '' => '豐', - '' => '贅', - '' => '蹙', - '' => '蹣', - '' => '蹦', - '' => '蹤', - '' => '蹟', - '' => '蹕', - '' => '軀', - '' => '轉', - '' => '轍', - '' => '邇', - '' => '邃', - '' => '邈', - '' => '醫', - '' => '醬', - '' => '釐', - '' => '鎔', - '' => '鎊', - '' => '鎖', - '' => '鎢', - '' => '鎳', - '' => '鎮', - '' => '鎬', - '' => '鎰', - '' => '鎘', - '' => '鎚', - '' => '鎗', - '' => '闔', - '' => '闖', - '' => '闐', - '' => '闕', - '' => '離', - '' => '雜', - '' => '雙', - '' => '雛', - '' => '雞', - '' => '霤', - '' => '鞣', - '' => '鞦', - '@' => '鞭', - 'A' => '韹', - 'B' => '額', - 'C' => '顏', - 'D' => '題', - 'E' => '顎', - 'F' => '顓', - 'G' => '颺', - 'H' => '餾', - 'I' => '餿', - 'J' => '餽', - 'K' => '餮', - 'L' => '馥', - 'M' => '騎', - 'N' => '髁', - 'O' => '鬃', - 'P' => '鬆', - 'Q' => '魏', - 'R' => '魎', - 'S' => '魍', - 'T' => '鯊', - 'U' => '鯉', - 'V' => '鯽', - 'W' => '鯈', - 'X' => '鯀', - 'Y' => '鵑', - 'Z' => '鵝', - '[' => '鵠', - '\\' => '黠', - ']' => '鼕', - '^' => '鼬', - '_' => '儳', - '`' => '嚥', - 'a' => '壞', - 'b' => '壟', - 'c' => '壢', - 'd' => '寵', - 'e' => '龐', - 'f' => '廬', - 'g' => '懲', - 'h' => '懷', - 'i' => '懶', - 'j' => '懵', - 'k' => '攀', - 'l' => '攏', - 'm' => '曠', - 'n' => '曝', - 'o' => '櫥', - 'p' => '櫝', - 'q' => '櫚', - 'r' => '櫓', - 's' => '瀛', - 't' => '瀟', - 'u' => '瀨', - 'v' => '瀚', - 'w' => '瀝', - 'x' => '瀕', - 'y' => '瀘', - 'z' => '爆', - '{' => '爍', - '|' => '牘', - '}' => '犢', - '~' => '獸', - 'á' => '獺', - 'â' => '璽', - 'ã' => '瓊', - 'ä' => '瓣', - 'å' => '疇', - 'æ' => '疆', - 'ç' => '癟', - 'è' => '癡', - 'é' => '矇', - 'ê' => '礙', - 'ë' => '禱', - 'ì' => '穫', - 'í' => '穩', - 'î' => '簾', - 'ï' => '簿', - 'ð' => '簸', - 'ñ' => '簽', - 'ò' => '簷', - 'ó' => '籀', - 'ô' => '繫', - 'õ' => '繭', - 'ö' => '繹', - '÷' => '繩', - 'ø' => '繪', - 'ù' => '羅', - 'ú' => '繳', - 'û' => '羶', - 'ü' => '羹', - 'ý' => '羸', - 'þ' => '臘', - 'ÿ' => '藩', - '' => '藝', - '' => '藪', - '' => '藕', - '' => '藤', - '' => '藥', - '' => '藷', - '' => '蟻', - '' => '蠅', - '' => '蠍', - '' => '蟹', - '' => '蟾', - '' => '襠', - '' => '襟', - '' => '襖', - '' => '襞', - '' => '譁', - '' => '譜', - '' => '識', - '' => '證', - '' => '譚', - '' => '譎', - '' => '譏', - '' => '譆', - '' => '譙', - '' => '贈', - '' => '贊', - '' => '蹼', - '' => '蹲', - '' => '躇', - '' => '蹶', - '' => '蹬', - '' => '蹺', - '' => '蹴', - '' => '轔', - '' => '轎', - '' => '辭', - '' => '邊', - '' => '邋', - '' => '醱', - '' => '醮', - '' => '鏡', - '' => '鏑', - '' => '鏟', - '' => '鏃', - '' => '鏈', - '' => '鏜', - '' => '鏝', - '' => '鏖', - '' => '鏢', - '' => '鏍', - '' => '鏘', - '' => '鏤', - '' => '鏗', - '' => '鏨', - '' => '關', - '' => '隴', - '' => '難', - '' => '霪', - '' => '霧', - '' => '靡', - '' => '韜', - '' => '韻', - '' => '類', - '@' => '願', - 'A' => '顛', - 'B' => '颼', - 'C' => '饅', - 'D' => '饉', - 'E' => '騖', - 'F' => '騙', - 'G' => '鬍', - 'H' => '鯨', - 'I' => '鯧', - 'J' => '鯖', - 'K' => '鯛', - 'L' => '鶉', - 'M' => '鵡', - 'N' => '鵲', - 'O' => '鵪', - 'P' => '鵬', - 'Q' => '麒', - 'R' => '麗', - 'S' => '麓', - 'T' => '麴', - 'U' => '勸', - 'V' => '嚨', - 'W' => '嚷', - 'X' => '嚶', - 'Y' => '嚴', - 'Z' => '嚼', - '[' => '壤', - '\\' => '孀', - ']' => '孃', - '^' => '孽', - '_' => '寶', - '`' => '巉', - 'a' => '懸', - 'b' => '懺', - 'c' => '攘', - 'd' => '攔', - 'e' => '攙', - 'f' => '曦', - 'g' => '朧', - 'h' => '櫬', - 'i' => '瀾', - 'j' => '瀰', - 'k' => '瀲', - 'l' => '爐', - 'm' => '獻', - 'n' => '瓏', - 'o' => '癢', - 'p' => '癥', - 'q' => '礦', - 'r' => '礪', - 's' => '礬', - 't' => '礫', - 'u' => '竇', - 'v' => '競', - 'w' => '籌', - 'x' => '籃', - 'y' => '籍', - 'z' => '糯', - '{' => '糰', - '|' => '辮', - '}' => '繽', - '~' => '繼', - 'ġ' => '纂', - 'Ģ' => '罌', - 'ģ' => '耀', - 'Ĥ' => '臚', - 'ĥ' => '艦', - 'Ħ' => '藻', - 'ħ' => '藹', - 'Ĩ' => '蘑', - 'ĩ' => '藺', - 'Ī' => '蘆', - 'ī' => '蘋', - 'Ĭ' => '蘇', - 'ĭ' => '蘊', - 'Į' => '蠔', - 'į' => '蠕', - 'İ' => '襤', - 'ı' => '覺', - 'IJ' => '觸', - 'ij' => '議', - 'Ĵ' => '譬', - 'ĵ' => '警', - 'Ķ' => '譯', - 'ķ' => '譟', - 'ĸ' => '譫', - 'Ĺ' => '贏', - 'ĺ' => '贍', - 'Ļ' => '躉', - 'ļ' => '躁', - 'Ľ' => '躅', - 'ľ' => '躂', - 'Ŀ' => '醴', - '' => '釋', - '' => '鐘', - '' => '鐃', - '' => '鏽', - '' => '闡', - '' => '霰', - '' => '飄', - '' => '饒', - '' => '饑', - '' => '馨', - '' => '騫', - '' => '騰', - '' => '騷', - '' => '騵', - '' => '鰓', - '' => '鰍', - '' => '鹹', - '' => '麵', - '' => '黨', - '' => '鼯', - '' => '齟', - '' => '齣', - '' => '齡', - '' => '儷', - '' => '儸', - '' => '囁', - '' => '囀', - '' => '囂', - '' => '夔', - '' => '屬', - '' => '巍', - '' => '懼', - '' => '懾', - '' => '攝', - '' => '攜', - '' => '斕', - '' => '曩', - '' => '櫻', - '' => '欄', - '' => '櫺', - '' => '殲', - '' => '灌', - '' => '爛', - '' => '犧', - '' => '瓖', - '' => '瓔', - '' => '癩', - '' => '矓', - '' => '籐', - '' => '纏', - '' => '續', - '' => '羼', - '' => '蘗', - '' => '蘭', - '' => '蘚', - '' => '蠣', - '' => '蠢', - '' => '蠡', - '' => '蠟', - '' => '襪', - '' => '襬', - '' => '覽', - '' => '譴', - '@' => '護', - 'A' => '譽', - 'B' => '贓', - 'C' => '躊', - 'D' => '躍', - 'E' => '躋', - 'F' => '轟', - 'G' => '辯', - 'H' => '醺', - 'I' => '鐮', - 'J' => '鐳', - 'K' => '鐵', - 'L' => '鐺', - 'M' => '鐸', - 'N' => '鐲', - 'O' => '鐫', - 'P' => '闢', - 'Q' => '霸', - 'R' => '霹', - 'S' => '露', - 'T' => '響', - 'U' => '顧', - 'V' => '顥', - 'W' => '饗', - 'X' => '驅', - 'Y' => '驃', - 'Z' => '驀', - '[' => '騾', - '\\' => '髏', - ']' => '魔', - '^' => '魑', - '_' => '鰭', - '`' => '鰥', - 'a' => '鶯', - 'b' => '鶴', - 'c' => '鷂', - 'd' => '鶸', - 'e' => '麝', - 'f' => '黯', - 'g' => '鼙', - 'h' => '齜', - 'i' => '齦', - 'j' => '齧', - 'k' => '儼', - 'l' => '儻', - 'm' => '囈', - 'n' => '囊', - 'o' => '囉', - 'p' => '孿', - 'q' => '巔', - 'r' => '巒', - 's' => '彎', - 't' => '懿', - 'u' => '攤', - 'v' => '權', - 'w' => '歡', - 'x' => '灑', - 'y' => '灘', - 'z' => '玀', - '{' => '瓤', - '|' => '疊', - '}' => '癮', - '~' => '癬', - 'š' => '禳', - 'Ţ' => '籠', - 'ţ' => '籟', - 'Ť' => '聾', - 'ť' => '聽', - 'Ŧ' => '臟', - 'ŧ' => '襲', - 'Ũ' => '襯', - 'ũ' => '觼', - 'Ū' => '讀', - 'ū' => '贖', - 'Ŭ' => '贗', - 'ŭ' => '躑', - 'Ů' => '躓', - 'ů' => '轡', - 'Ű' => '酈', - 'ű' => '鑄', - 'Ų' => '鑑', - 'ų' => '鑒', - 'Ŵ' => '霽', - 'ŵ' => '霾', - 'Ŷ' => '韃', - 'ŷ' => '韁', - 'Ÿ' => '顫', - 'Ź' => '饕', - 'ź' => '驕', - 'Ż' => '驍', - 'ż' => '髒', - 'Ž' => '鬚', - 'ž' => '鱉', - 'ſ' => '鰱', - '' => '鰾', - '' => '鰻', - '' => '鷓', - '' => '鷗', - '' => '鼴', - '' => '齬', - '' => '齪', - '' => '龔', - '' => '囌', - '' => '巖', - '' => '戀', - '' => '攣', - '' => '攫', - '' => '攪', - '' => '曬', - '' => '欐', - '' => '瓚', - '' => '竊', - '' => '籤', - '' => '籣', - '' => '籥', - '' => '纓', - '' => '纖', - '' => '纔', - '' => '臢', - '' => '蘸', - '' => '蘿', - '' => '蠱', - '' => '變', - '' => '邐', - '' => '邏', - '' => '鑣', - '' => '鑠', - '' => '鑤', - '' => '靨', - '' => '顯', - '' => '饜', - '' => '驚', - '' => '驛', - '' => '驗', - '' => '髓', - '' => '體', - '' => '髑', - '' => '鱔', - '' => '鱗', - '' => '鱖', - '' => '鷥', - '' => '麟', - '' => '黴', - '' => '囑', - '' => '壩', - '' => '攬', - '' => '灞', - '' => '癱', - '' => '癲', - '' => '矗', - '' => '罐', - '' => '羈', - '' => '蠶', - '' => '蠹', - '' => '衢', - '' => '讓', - '' => '讒', - '@' => '讖', - 'A' => '艷', - 'B' => '贛', - 'C' => '釀', - 'D' => '鑪', - 'E' => '靂', - 'F' => '靈', - 'G' => '靄', - 'H' => '韆', - 'I' => '顰', - 'J' => '驟', - 'K' => '鬢', - 'L' => '魘', - 'M' => '鱟', - 'N' => '鷹', - 'O' => '鷺', - 'P' => '鹼', - 'Q' => '鹽', - 'R' => '鼇', - 'S' => '齷', - 'T' => '齲', - 'U' => '廳', - 'V' => '欖', - 'W' => '灣', - 'X' => '籬', - 'Y' => '籮', - 'Z' => '蠻', - '[' => '觀', - '\\' => '躡', - ']' => '釁', - '^' => '鑲', - '_' => '鑰', - '`' => '顱', - 'a' => '饞', - 'b' => '髖', - 'c' => '鬣', - 'd' => '黌', - 'e' => '灤', - 'f' => '矚', - 'g' => '讚', - 'h' => '鑷', - 'i' => '韉', - 'j' => '驢', - 'k' => '驥', - 'l' => '纜', - 'm' => '讜', - 'n' => '躪', - 'o' => '釅', - 'p' => '鑽', - 'q' => '鑾', - 'r' => '鑼', - 's' => '鱷', - 't' => '鱸', - 'u' => '黷', - 'v' => '豔', - 'w' => '鑿', - 'x' => '鸚', - 'y' => '爨', - 'z' => '驪', - '{' => '鬱', - '|' => '鸛', - '}' => '鸞', - '~' => '籲', - 'ơ' => 'ヾ', - 'Ƣ' => 'ゝ', - 'ƣ' => 'ゞ', - 'Ƥ' => '々', - 'ƥ' => 'ぁ', - 'Ʀ' => 'あ', - 'Ƨ' => 'ぃ', - 'ƨ' => 'い', - 'Ʃ' => 'ぅ', - 'ƪ' => 'う', - 'ƫ' => 'ぇ', - 'Ƭ' => 'え', - 'ƭ' => 'ぉ', - 'Ʈ' => 'お', - 'Ư' => 'か', - 'ư' => 'が', - 'Ʊ' => 'き', - 'Ʋ' => 'ぎ', - 'Ƴ' => 'く', - 'ƴ' => 'ぐ', - 'Ƶ' => 'け', - 'ƶ' => 'げ', - 'Ʒ' => 'こ', - 'Ƹ' => 'ご', - 'ƹ' => 'さ', - 'ƺ' => 'ざ', - 'ƻ' => 'し', - 'Ƽ' => 'じ', - 'ƽ' => 'す', - 'ƾ' => 'ず', - 'ƿ' => 'せ', - '' => 'ぜ', - '' => 'そ', - '' => 'ぞ', - '' => 'た', - '' => 'だ', - '' => 'ち', - '' => 'ぢ', - '' => 'っ', - '' => 'つ', - '' => 'づ', - '' => 'て', - '' => 'で', - '' => 'と', - '' => 'ど', - '' => 'な', - '' => 'に', - '' => 'ぬ', - '' => 'ね', - '' => 'の', - '' => 'は', - '' => 'ば', - '' => 'ぱ', - '' => 'ひ', - '' => 'び', - '' => 'ぴ', - '' => 'ふ', - '' => 'ぶ', - '' => 'ぷ', - '' => 'へ', - '' => 'べ', - '' => 'ぺ', - '' => 'ほ', - '' => 'ぼ', - '' => 'ぽ', - '' => 'ま', - '' => 'み', - '' => 'む', - '' => 'め', - '' => 'も', - '' => 'ゃ', - '' => 'や', - '' => 'ゅ', - '' => 'ゆ', - '' => 'ょ', - '' => 'よ', - '' => 'ら', - '' => 'り', - '' => 'る', - '' => 'れ', - '' => 'ろ', - '' => 'ゎ', - '' => 'わ', - '' => 'ゐ', - '' => 'ゑ', - '' => 'を', - '' => 'ん', - '' => 'ァ', - '' => 'ア', - '' => 'ィ', - '' => 'イ', - '' => 'ゥ', - '' => 'ウ', - '' => 'ェ', - '@' => 'エ', - 'A' => 'ォ', - 'B' => 'オ', - 'C' => 'カ', - 'D' => 'ガ', - 'E' => 'キ', - 'F' => 'ギ', - 'G' => 'ク', - 'H' => 'グ', - 'I' => 'ケ', - 'J' => 'ゲ', - 'K' => 'コ', - 'L' => 'ゴ', - 'M' => 'サ', - 'N' => 'ザ', - 'O' => 'シ', - 'P' => 'ジ', - 'Q' => 'ス', - 'R' => 'ズ', - 'S' => 'セ', - 'T' => 'ゼ', - 'U' => 'ソ', - 'V' => 'ゾ', - 'W' => 'タ', - 'X' => 'ダ', - 'Y' => 'チ', - 'Z' => 'ヂ', - '[' => 'ッ', - '\\' => 'ツ', - ']' => 'ヅ', - '^' => 'テ', - '_' => 'デ', - '`' => 'ト', - 'a' => 'ド', - 'b' => 'ナ', - 'c' => 'ニ', - 'd' => 'ヌ', - 'e' => 'ネ', - 'f' => 'ノ', - 'g' => 'ハ', - 'h' => 'バ', - 'i' => 'パ', - 'j' => 'ヒ', - 'k' => 'ビ', - 'l' => 'ピ', - 'm' => 'フ', - 'n' => 'ブ', - 'o' => 'プ', - 'p' => 'ヘ', - 'q' => 'ベ', - 'r' => 'ペ', - 's' => 'ホ', - 't' => 'ボ', - 'u' => 'ポ', - 'v' => 'マ', - 'w' => 'ミ', - 'x' => 'ム', - 'y' => 'メ', - 'z' => 'モ', - '{' => 'ャ', - '|' => 'ヤ', - '}' => 'ュ', - '~' => 'ユ', - 'ǡ' => 'ョ', - 'Ǣ' => 'ヨ', - 'ǣ' => 'ラ', - 'Ǥ' => 'リ', - 'ǥ' => 'ル', - 'Ǧ' => 'レ', - 'ǧ' => 'ロ', - 'Ǩ' => 'ヮ', - 'ǩ' => 'ワ', - 'Ǫ' => 'ヰ', - 'ǫ' => 'ヱ', - 'Ǭ' => 'ヲ', - 'ǭ' => 'ン', - 'Ǯ' => 'ヴ', - 'ǯ' => 'ヵ', - 'ǰ' => 'ヶ', - 'DZ' => 'Д', - 'Dz' => 'Е', - 'dz' => 'Ё', - 'Ǵ' => 'Ж', - 'ǵ' => 'З', - 'Ƕ' => 'И', - 'Ƿ' => 'Й', - 'Ǹ' => 'К', - 'ǹ' => 'Л', - 'Ǻ' => 'М', - 'ǻ' => 'У', - 'Ǽ' => 'Ф', - 'ǽ' => 'Х', - 'Ǿ' => 'Ц', - 'ǿ' => 'Ч', - '' => 'Ш', - '' => 'Щ', - '' => 'Ъ', - '' => 'Ы', - '' => 'Ь', - '' => 'Э', - '' => 'Ю', - '' => 'Я', - '' => 'а', - '' => 'б', - '' => 'в', - '' => 'г', - '' => 'д', - '' => 'е', - '' => 'ё', - '' => 'ж', - '' => 'з', - '' => 'и', - '' => 'й', - '' => 'к', - '' => 'л', - '' => 'м', - '' => 'н', - '' => 'о', - '' => 'п', - '' => 'р', - '' => 'с', - '' => 'т', - '' => 'у', - '' => 'ф', - '' => 'х', - '' => 'ц', - '' => 'ч', - '' => 'ш', - '' => 'щ', - '' => 'ъ', - '' => 'ы', - '' => 'ь', - '' => 'э', - '' => 'ю', - '' => 'я', - '' => '①', - '' => '②', - '' => '③', - '' => '④', - '' => '⑤', - '' => '⑥', - '' => '⑦', - '' => '⑧', - '' => '⑨', - '' => '⑩', - '' => '⑴', - '' => '⑵', - '' => '⑶', - '' => '⑷', - '' => '⑸', - '' => '⑹', - '' => '⑺', - '' => '⑻', - '' => '⑼', - '' => '⑽', - '@' => '乂', - 'A' => '乜', - 'B' => '凵', - 'C' => '匚', - 'D' => '厂', - 'E' => '万', - 'F' => '丌', - 'G' => '乇', - 'H' => '亍', - 'I' => '囗', - 'J' => '兀', - 'K' => '屮', - 'L' => '彳', - 'M' => '丏', - 'N' => '冇', - 'O' => '与', - 'P' => '丮', - 'Q' => '亓', - 'R' => '仂', - 'S' => '仉', - 'T' => '仈', - 'U' => '冘', - 'V' => '勼', - 'W' => '卬', - 'X' => '厹', - 'Y' => '圠', - 'Z' => '夃', - '[' => '夬', - '\\' => '尐', - ']' => '巿', - '^' => '旡', - '_' => '殳', - '`' => '毌', - 'a' => '气', - 'b' => '爿', - 'c' => '丱', - 'd' => '丼', - 'e' => '仨', - 'f' => '仜', - 'g' => '仩', - 'h' => '仡', - 'i' => '仝', - 'j' => '仚', - 'k' => '刌', - 'l' => '匜', - 'm' => '卌', - 'n' => '圢', - 'o' => '圣', - 'p' => '夗', - 'q' => '夯', - 'r' => '宁', - 's' => '宄', - 't' => '尒', - 'u' => '尻', - 'v' => '屴', - 'w' => '屳', - 'x' => '帄', - 'y' => '庀', - 'z' => '庂', - '{' => '忉', - '|' => '戉', - '}' => '扐', - '~' => '氕', - 'ɡ' => '氶', - 'ɢ' => '汃', - 'ɣ' => '氿', - 'ɤ' => '氻', - 'ɥ' => '犮', - 'ɦ' => '犰', - 'ɧ' => '玊', - 'ɨ' => '禸', - 'ɩ' => '肊', - 'ɪ' => '阞', - 'ɫ' => '伎', - 'ɬ' => '优', - 'ɭ' => '伬', - 'ɮ' => '仵', - 'ɯ' => '伔', - 'ɰ' => '仱', - 'ɱ' => '伀', - 'ɲ' => '价', - 'ɳ' => '伈', - 'ɴ' => '伝', - 'ɵ' => '伂', - 'ɶ' => '伅', - 'ɷ' => '伢', - 'ɸ' => '伓', - 'ɹ' => '伄', - 'ɺ' => '仴', - 'ɻ' => '伒', - 'ɼ' => '冱', - 'ɽ' => '刓', - 'ɾ' => '刉', - 'ɿ' => '刐', - '' => '劦', - '' => '匢', - '' => '匟', - '' => '卍', - '' => '厊', - '' => '吇', - '' => '囡', - '' => '囟', - '' => '圮', - '' => '圪', - '' => '圴', - '' => '夼', - '' => '妀', - '' => '奼', - '' => '妅', - '' => '奻', - '' => '奾', - '' => '奷', - '' => '奿', - '' => '孖', - '' => '尕', - '' => '尥', - '' => '屼', - '' => '屺', - '' => '屻', - '' => '屾', - '' => '巟', - '' => '幵', - '' => '庄', - '' => '异', - '' => '弚', - '' => '彴', - '' => '忕', - '' => '忔', - '' => '忏', - '' => '扜', - '' => '扞', - '' => '扤', - '' => '扡', - '' => '扦', - '' => '扢', - '' => '扙', - '' => '扠', - '' => '扚', - '' => '扥', - '' => '旯', - '' => '旮', - '' => '朾', - '' => '朹', - '' => '朸', - '' => '朻', - '' => '机', - '' => '朿', - '' => '朼', - '' => '朳', - '' => '氘', - '' => '汆', - '' => '汒', - '' => '汜', - '' => '汏', - '' => '汊', - '' => '汔', - '' => '汋', - '@' => '汌', - 'A' => '灱', - 'B' => '牞', - 'C' => '犴', - 'D' => '犵', - 'E' => '玎', - 'F' => '甪', - 'G' => '癿', - 'H' => '穵', - 'I' => '网', - 'J' => '艸', - 'K' => '艼', - 'L' => '芀', - 'M' => '艽', - 'N' => '艿', - 'O' => '虍', - 'P' => '襾', - 'Q' => '邙', - 'R' => '邗', - 'S' => '邘', - 'T' => '邛', - 'U' => '邔', - 'V' => '阢', - 'W' => '阤', - 'X' => '阠', - 'Y' => '阣', - 'Z' => '佖', - '[' => '伻', - '\\' => '佢', - ']' => '佉', - '^' => '体', - '_' => '佤', - '`' => '伾', - 'a' => '佧', - 'b' => '佒', - 'c' => '佟', - 'd' => '佁', - 'e' => '佘', - 'f' => '伭', - 'g' => '伳', - 'h' => '伿', - 'i' => '佡', - 'j' => '冏', - 'k' => '冹', - 'l' => '刜', - 'm' => '刞', - 'n' => '刡', - 'o' => '劭', - 'p' => '劮', - 'q' => '匉', - 'r' => '卣', - 's' => '卲', - 't' => '厎', - 'u' => '厏', - 'v' => '吰', - 'w' => '吷', - 'x' => '吪', - 'y' => '呔', - 'z' => '呅', - '{' => '吙', - '|' => '吜', - '}' => '吥', - '~' => '吘', - 'ʡ' => '吽', - 'ʢ' => '呏', - 'ʣ' => '呁', - 'ʤ' => '吨', - 'ʥ' => '吤', - 'ʦ' => '呇', - 'ʧ' => '囮', - 'ʨ' => '囧', - 'ʩ' => '囥', - 'ʪ' => '坁', - 'ʫ' => '坅', - 'ʬ' => '坌', - 'ʭ' => '坉', - 'ʮ' => '坋', - 'ʯ' => '坒', - 'ʰ' => '夆', - 'ʱ' => '奀', - 'ʲ' => '妦', - 'ʳ' => '妘', - 'ʴ' => '妠', - 'ʵ' => '妗', - 'ʶ' => '妎', - 'ʷ' => '妢', - 'ʸ' => '妐', - 'ʹ' => '妏', - 'ʺ' => '妧', - 'ʻ' => '妡', - 'ʼ' => '宎', - 'ʽ' => '宒', - 'ʾ' => '尨', - 'ʿ' => '尪', - '' => '岍', - '' => '岏', - '' => '岈', - '' => '岋', - '' => '岉', - '' => '岒', - '' => '岊', - '' => '岆', - '' => '岓', - '' => '岕', - '' => '巠', - '' => '帊', - '' => '帎', - '' => '庋', - '' => '庉', - '' => '庌', - '' => '庈', - '' => '庍', - '' => '弅', - '' => '弝', - '' => '彸', - '' => '彶', - '' => '忒', - '' => '忑', - '' => '忐', - '' => '忭', - '' => '忨', - '' => '忮', - '' => '忳', - '' => '忡', - '' => '忤', - '' => '忣', - '' => '忺', - '' => '忯', - '' => '忷', - '' => '忻', - '' => '怀', - '' => '忴', - '' => '戺', - '' => '抃', - '' => '抌', - '' => '抎', - '' => '抏', - '' => '抔', - '' => '抇', - '' => '扱', - '' => '扻', - '' => '扺', - '' => '扰', - '' => '抁', - '' => '抈', - '' => '扷', - '' => '扽', - '' => '扲', - '' => '扴', - '' => '攷', - '' => '旰', - '' => '旴', - '' => '旳', - '' => '旲', - '' => '旵', - '' => '杅', - '' => '杇', - '@' => '杙', - 'A' => '杕', - 'B' => '杌', - 'C' => '杈', - 'D' => '杝', - 'E' => '杍', - 'F' => '杚', - 'G' => '杋', - 'H' => '毐', - 'I' => '氙', - 'J' => '氚', - 'K' => '汸', - 'L' => '汧', - 'M' => '汫', - 'N' => '沄', - 'O' => '沋', - 'P' => '沏', - 'Q' => '汱', - 'R' => '汯', - 'S' => '汩', - 'T' => '沚', - 'U' => '汭', - 'V' => '沇', - 'W' => '沕', - 'X' => '沜', - 'Y' => '汦', - 'Z' => '汳', - '[' => '汥', - '\\' => '汻', - ']' => '沎', - '^' => '灴', - '_' => '灺', - '`' => '牣', - 'a' => '犿', - 'b' => '犽', - 'c' => '狃', - 'd' => '狆', - 'e' => '狁', - 'f' => '犺', - 'g' => '狅', - 'h' => '玕', - 'i' => '玗', - 'j' => '玓', - 'k' => '玔', - 'l' => '玒', - 'm' => '町', - 'n' => '甹', - 'o' => '疔', - 'p' => '疕', - 'q' => '皁', - 'r' => '礽', - 's' => '耴', - 't' => '肕', - 'u' => '肙', - 'v' => '肐', - 'w' => '肒', - 'x' => '肜', - 'y' => '芐', - 'z' => '芏', - '{' => '芅', - '|' => '芎', - '}' => '芑', - '~' => '芓', - 'ˡ' => '芊', - 'ˢ' => '芃', - 'ˣ' => '芄', - 'ˤ' => '豸', - '˥' => '迉', - '˦' => '辿', - '˧' => '邟', - '˨' => '邡', - '˩' => '邥', - '˪' => '邞', - '˫' => '邧', - 'ˬ' => '邠', - '˭' => '阰', - 'ˮ' => '阨', - '˯' => '阯', - '˰' => '阭', - '˱' => '丳', - '˲' => '侘', - '˳' => '佼', - '˴' => '侅', - '˵' => '佽', - '˶' => '侀', - '˷' => '侇', - '˸' => '佶', - '˹' => '佴', - '˺' => '侉', - '˻' => '侄', - '˼' => '佷', - '˽' => '佌', - '˾' => '侗', - '˿' => '佪', - '' => '侚', - '' => '佹', - '' => '侁', - '' => '佸', - '' => '侐', - '' => '侜', - '' => '侔', - '' => '侞', - '' => '侒', - '' => '侂', - '' => '侕', - '' => '佫', - '' => '佮', - '' => '冞', - '' => '冼', - '' => '冾', - '' => '刵', - '' => '刲', - '' => '刳', - '' => '剆', - '' => '刱', - '' => '劼', - '' => '匊', - '' => '匋', - '' => '匼', - '' => '厒', - '' => '厔', - '' => '咇', - '' => '呿', - '' => '咁', - '' => '咑', - '' => '咂', - '' => '咈', - '' => '呫', - '' => '呺', - '' => '呾', - '' => '呥', - '' => '呬', - '' => '呴', - '' => '呦', - '' => '咍', - '' => '呯', - '' => '呡', - '' => '呠', - '' => '咘', - '' => '呣', - '' => '呧', - '' => '呤', - '' => '囷', - '' => '囹', - '' => '坯', - '' => '坲', - '' => '坭', - '' => '坫', - '' => '坱', - '' => '坰', - '' => '坶', - '' => '垀', - '' => '坵', - '' => '坻', - '' => '坳', - '' => '坴', - '' => '坢', - '@' => '坨', - 'A' => '坽', - 'B' => '夌', - 'C' => '奅', - 'D' => '妵', - 'E' => '妺', - 'F' => '姏', - 'G' => '姎', - 'H' => '妲', - 'I' => '姌', - 'J' => '姁', - 'K' => '妶', - 'L' => '妼', - 'M' => '姃', - 'N' => '姖', - 'O' => '妱', - 'P' => '妽', - 'Q' => '姀', - 'R' => '姈', - 'S' => '妴', - 'T' => '姇', - 'U' => '孢', - 'V' => '孥', - 'W' => '宓', - 'X' => '宕', - 'Y' => '屄', - 'Z' => '屇', - '[' => '岮', - '\\' => '岤', - ']' => '岠', - '^' => '岵', - '_' => '岯', - '`' => '岨', - 'a' => '岬', - 'b' => '岟', - 'c' => '岣', - 'd' => '岭', - 'e' => '岢', - 'f' => '岪', - 'g' => '岧', - 'h' => '岝', - 'i' => '岥', - 'j' => '岶', - 'k' => '岰', - 'l' => '岦', - 'm' => '帗', - 'n' => '帔', - 'o' => '帙', - 'p' => '弨', - 'q' => '弢', - 'r' => '弣', - 's' => '弤', - 't' => '彔', - 'u' => '徂', - 'v' => '彾', - 'w' => '彽', - 'x' => '忞', - 'y' => '忥', - 'z' => '怭', - '{' => '怦', - '|' => '怙', - '}' => '怲', - '~' => '怋', - '̡' => '怴', - '̢' => '怊', - '̣' => '怗', - '̤' => '怳', - '̥' => '怚', - '̦' => '怞', - '̧' => '怬', - '̨' => '怢', - '̩' => '怍', - '̪' => '怐', - '̫' => '怮', - '̬' => '怓', - '̭' => '怑', - '̮' => '怌', - '̯' => '怉', - '̰' => '怜', - '̱' => '戔', - '̲' => '戽', - '̳' => '抭', - '̴' => '抴', - '̵' => '拑', - '̶' => '抾', - '̷' => '抪', - '̸' => '抶', - '̹' => '拊', - '̺' => '抮', - '̻' => '抳', - '̼' => '抯', - '̽' => '抻', - '̾' => '抩', - '̿' => '抰', - '' => '抸', - '' => '攽', - '' => '斨', - '' => '斻', - '' => '昉', - '' => '旼', - '' => '昄', - '' => '昒', - '' => '昈', - '' => '旻', - '' => '昃', - '' => '昋', - '' => '昍', - '' => '昅', - '' => '旽', - '' => '昑', - '' => '昐', - '' => '曶', - '' => '朊', - '' => '枅', - '' => '杬', - '' => '枎', - '' => '枒', - '' => '杶', - '' => '杻', - '' => '枘', - '' => '枆', - '' => '构', - '' => '杴', - '' => '枍', - '' => '枌', - '' => '杺', - '' => '枟', - '' => '枑', - '' => '枙', - '' => '枃', - '' => '杽', - '' => '极', - '' => '杸', - '' => '杹', - '' => '枔', - '' => '欥', - '' => '殀', - '' => '歾', - '' => '毞', - '' => '氝', - '' => '沓', - '' => '泬', - '' => '泫', - '' => '泮', - '' => '泙', - '' => '沶', - '' => '泔', - '' => '沭', - '' => '泧', - '' => '沷', - '' => '泐', - '' => '泂', - '' => '沺', - '' => '泃', - '' => '泆', - '' => '泭', - '' => '泲', - '@' => '泒', - 'A' => '泝', - 'B' => '沴', - 'C' => '沊', - 'D' => '沝', - 'E' => '沀', - 'F' => '泞', - 'G' => '泀', - 'H' => '洰', - 'I' => '泍', - 'J' => '泇', - 'K' => '沰', - 'L' => '泹', - 'M' => '泏', - 'N' => '泩', - 'O' => '泑', - 'P' => '炔', - 'Q' => '炘', - 'R' => '炅', - 'S' => '炓', - 'T' => '炆', - 'U' => '炄', - 'V' => '炑', - 'W' => '炖', - 'X' => '炂', - 'Y' => '炚', - 'Z' => '炃', - '[' => '牪', - '\\' => '狖', - ']' => '狋', - '^' => '狘', - '_' => '狉', - '`' => '狜', - 'a' => '狒', - 'b' => '狔', - 'c' => '狚', - 'd' => '狌', - 'e' => '狑', - 'f' => '玤', - 'g' => '玡', - 'h' => '玭', - 'i' => '玦', - 'j' => '玢', - 'k' => '玠', - 'l' => '玬', - 'm' => '玝', - 'n' => '瓝', - 'o' => '瓨', - 'p' => '甿', - 'q' => '畀', - 'r' => '甾', - 's' => '疌', - 't' => '疘', - 'u' => '皯', - 'v' => '盳', - 'w' => '盱', - 'x' => '盰', - 'y' => '盵', - 'z' => '矸', - '{' => '矼', - '|' => '矹', - '}' => '矻', - '~' => '矺', - '͡' => '矷', - '͢' => '祂', - 'ͣ' => '礿', - 'ͤ' => '秅', - 'ͥ' => '穸', - 'ͦ' => '穻', - 'ͧ' => '竻', - 'ͨ' => '籵', - 'ͩ' => '糽', - 'ͪ' => '耵', - 'ͫ' => '肏', - 'ͬ' => '肮', - 'ͭ' => '肣', - 'ͮ' => '肸', - 'ͯ' => '肵', - 'Ͱ' => '肭', - 'ͱ' => '舠', - 'Ͳ' => '芠', - 'ͳ' => '苀', - 'ʹ' => '芫', - '͵' => '芚', - 'Ͷ' => '芘', - 'ͷ' => '芛', - '͸' => '芵', - '͹' => '芧', - 'ͺ' => '芮', - 'ͻ' => '芼', - 'ͼ' => '芞', - 'ͽ' => '芺', - ';' => '芴', - 'Ϳ' => '芨', - '' => '芡', - '' => '芩', - '' => '苂', - '' => '芤', - '' => '苃', - '' => '芶', - '' => '芢', - '' => '虰', - '' => '虯', - '' => '虭', - '' => '虮', - '' => '豖', - '' => '迒', - '' => '迋', - '' => '迓', - '' => '迍', - '' => '迖', - '' => '迕', - '' => '迗', - '' => '邲', - '' => '邴', - '' => '邯', - '' => '邳', - '' => '邰', - '' => '阹', - '' => '阽', - '' => '阼', - '' => '阺', - '' => '陃', - '' => '俍', - '' => '俅', - '' => '俓', - '' => '侲', - '' => '俉', - '' => '俋', - '' => '俁', - '' => '俔', - '' => '俜', - '' => '俙', - '' => '侻', - '' => '侳', - '' => '俛', - '' => '俇', - '' => '俖', - '' => '侺', - '' => '俀', - '' => '侹', - '' => '俬', - '' => '剄', - '' => '剉', - '' => '勀', - '' => '勂', - '' => '匽', - '' => '卼', - '' => '厗', - '' => '厖', - '' => '厙', - '' => '厘', - '' => '咺', - '' => '咡', - '' => '咭', - '' => '咥', - '' => '哏', - '@' => '哃', - 'A' => '茍', - 'B' => '咷', - 'C' => '咮', - 'D' => '哖', - 'E' => '咶', - 'F' => '哅', - 'G' => '哆', - 'H' => '咠', - 'I' => '呰', - 'J' => '咼', - 'K' => '咢', - 'L' => '咾', - 'M' => '呲', - 'N' => '哞', - 'O' => '咰', - 'P' => '垵', - 'Q' => '垞', - 'R' => '垟', - 'S' => '垤', - 'T' => '垌', - 'U' => '垗', - 'V' => '垝', - 'W' => '垛', - 'X' => '垔', - 'Y' => '垘', - 'Z' => '垏', - '[' => '垙', - '\\' => '垥', - ']' => '垚', - '^' => '垕', - '_' => '壴', - '`' => '复', - 'a' => '奓', - 'b' => '姡', - 'c' => '姞', - 'd' => '姮', - 'e' => '娀', - 'f' => '姱', - 'g' => '姝', - 'h' => '姺', - 'i' => '姽', - 'j' => '姼', - 'k' => '姶', - 'l' => '姤', - 'm' => '姲', - 'n' => '姷', - 'o' => '姛', - 'p' => '姩', - 'q' => '姳', - 'r' => '姵', - 's' => '姠', - 't' => '姾', - 'u' => '姴', - 'v' => '姭', - 'w' => '宨', - 'x' => '屌', - 'y' => '峐', - 'z' => '峘', - '{' => '峌', - '|' => '峗', - '}' => '峋', - '~' => '峛', - 'Ρ' => '峞', - '΢' => '峚', - 'Σ' => '峉', - 'Τ' => '峇', - 'Υ' => '峊', - 'Φ' => '峖', - 'Χ' => '峓', - 'Ψ' => '峔', - 'Ω' => '峏', - 'Ϊ' => '峈', - 'Ϋ' => '峆', - 'ά' => '峎', - 'έ' => '峟', - 'ή' => '峸', - 'ί' => '巹', - 'ΰ' => '帡', - 'α' => '帢', - 'β' => '帣', - 'γ' => '帠', - 'δ' => '帤', - 'ε' => '庰', - 'ζ' => '庤', - 'η' => '庢', - 'θ' => '庛', - 'ι' => '庣', - 'κ' => '庥', - 'λ' => '弇', - 'μ' => '弮', - 'ν' => '彖', - 'ξ' => '徆', - 'ο' => '怷', - '' => '怹', - '' => '恔', - '' => '恲', - '' => '恞', - '' => '恅', - '' => '恓', - '' => '恇', - '' => '恉', - '' => '恛', - '' => '恌', - '' => '恀', - '' => '恂', - '' => '恟', - '' => '怤', - '' => '恄', - '' => '恘', - '' => '恦', - '' => '恮', - '' => '扂', - '' => '扃', - '' => '拏', - '' => '挍', - '' => '挋', - '' => '拵', - '' => '挎', - '' => '挃', - '' => '拫', - '' => '拹', - '' => '挏', - '' => '挌', - '' => '拸', - '' => '拶', - '' => '挀', - '' => '挓', - '' => '挔', - '' => '拺', - '' => '挕', - '' => '拻', - '' => '拰', - '' => '敁', - '' => '敃', - '' => '斪', - '' => '斿', - '' => '昶', - '' => '昡', - '' => '昲', - '' => '昵', - '' => '昜', - '' => '昦', - '' => '昢', - '' => '昳', - '' => '昫', - '' => '昺', - '' => '昝', - '' => '昴', - '' => '昹', - '' => '昮', - '' => '朏', - '' => '朐', - '' => '柁', - '' => '柲', - '' => '柈', - '' => '枺', - '@' => '柜', - 'A' => '枻', - 'B' => '柸', - 'C' => '柘', - 'D' => '柀', - 'E' => '枷', - 'F' => '柅', - 'G' => '柫', - 'H' => '柤', - 'I' => '柟', - 'J' => '枵', - 'K' => '柍', - 'L' => '枳', - 'M' => '柷', - 'N' => '柶', - 'O' => '柮', - 'P' => '柣', - 'Q' => '柂', - 'R' => '枹', - 'S' => '柎', - 'T' => '柧', - 'U' => '柰', - 'V' => '枲', - 'W' => '柼', - 'X' => '柆', - 'Y' => '柭', - 'Z' => '柌', - '[' => '枮', - '\\' => '柦', - ']' => '柛', - '^' => '柺', - '_' => '柉', - '`' => '柊', - 'a' => '柃', - 'b' => '柪', - 'c' => '柋', - 'd' => '欨', - 'e' => '殂', - 'f' => '殄', - 'g' => '殶', - 'h' => '毖', - 'i' => '毘', - 'j' => '毠', - 'k' => '氠', - 'l' => '氡', - 'm' => '洨', - 'n' => '洴', - 'o' => '洭', - 'p' => '洟', - 'q' => '洼', - 'r' => '洿', - 's' => '洒', - 't' => '洊', - 'u' => '泚', - 'v' => '洳', - 'w' => '洄', - 'x' => '洙', - 'y' => '洺', - 'z' => '洚', - '{' => '洑', - '|' => '洀', - '}' => '洝', - '~' => '浂', - 'ϡ' => '洁', - 'Ϣ' => '洘', - 'ϣ' => '洷', - 'Ϥ' => '洃', - 'ϥ' => '洏', - 'Ϧ' => '浀', - 'ϧ' => '洇', - 'Ϩ' => '洠', - 'ϩ' => '洬', - 'Ϫ' => '洈', - 'ϫ' => '洢', - 'Ϭ' => '洉', - 'ϭ' => '洐', - 'Ϯ' => '炷', - 'ϯ' => '炟', - 'ϰ' => '炾', - 'ϱ' => '炱', - 'ϲ' => '炰', - 'ϳ' => '炡', - 'ϴ' => '炴', - 'ϵ' => '炵', - '϶' => '炩', - 'Ϸ' => '牁', - 'ϸ' => '牉', - 'Ϲ' => '牊', - 'Ϻ' => '牬', - 'ϻ' => '牰', - 'ϼ' => '牳', - 'Ͻ' => '牮', - 'Ͼ' => '狊', - 'Ͽ' => '狤', - '' => '狨', - '' => '狫', - '' => '狟', - '' => '狪', - '' => '狦', - '' => '狣', - '' => '玅', - '' => '珌', - '' => '珂', - '' => '珈', - '' => '珅', - '' => '玹', - '' => '玶', - '' => '玵', - '' => '玴', - '' => '珫', - '' => '玿', - '' => '珇', - '' => '玾', - '' => '珃', - '' => '珆', - '' => '玸', - '' => '珋', - '' => '瓬', - '' => '瓮', - '' => '甮', - '' => '畇', - '' => '畈', - '' => '疧', - '' => '疪', - '' => '癹', - '' => '盄', - '' => '眈', - '' => '眃', - '' => '眄', - '' => '眅', - '' => '眊', - '' => '盷', - '' => '盻', - '' => '盺', - '' => '矧', - '' => '矨', - '' => '砆', - '' => '砑', - '' => '砒', - '' => '砅', - '' => '砐', - '' => '砏', - '' => '砎', - '' => '砉', - '' => '砃', - '' => '砓', - '' => '祊', - '' => '祌', - '' => '祋', - '' => '祅', - '' => '祄', - '' => '秕', - '' => '种', - '' => '秏', - '' => '秖', - '' => '秎', - '' => '窀', - '@' => '穾', - 'A' => '竑', - 'B' => '笀', - 'C' => '笁', - 'D' => '籺', - 'E' => '籸', - 'F' => '籹', - 'G' => '籿', - 'H' => '粀', - 'I' => '粁', - 'J' => '紃', - 'K' => '紈', - 'L' => '紁', - 'M' => '罘', - 'N' => '羑', - 'O' => '羍', - 'P' => '羾', - 'Q' => '耇', - 'R' => '耎', - 'S' => '耏', - 'T' => '耔', - 'U' => '耷', - 'V' => '胘', - 'W' => '胇', - 'X' => '胠', - 'Y' => '胑', - 'Z' => '胈', - '[' => '胂', - '\\' => '胐', - ']' => '胅', - '^' => '胣', - '_' => '胙', - '`' => '胜', - 'a' => '胊', - 'b' => '胕', - 'c' => '胉', - 'd' => '胏', - 'e' => '胗', - 'f' => '胦', - 'g' => '胍', - 'h' => '臿', - 'i' => '舡', - 'j' => '芔', - 'k' => '苙', - 'l' => '苾', - 'm' => '苹', - 'n' => '茇', - 'o' => '苨', - 'p' => '茀', - 'q' => '苕', - 'r' => '茺', - 's' => '苫', - 't' => '苖', - 'u' => '苴', - 'v' => '苬', - 'w' => '苡', - 'x' => '苲', - 'y' => '苵', - 'z' => '茌', - '{' => '苻', - '|' => '苶', - '}' => '苰', - '~' => '苪', - 'С' => '苤', - 'Т' => '苠', - 'У' => '苺', - 'Ф' => '苳', - 'Х' => '苭', - 'Ц' => '虷', - 'Ч' => '虴', - 'Ш' => '虼', - 'Щ' => '虳', - 'Ъ' => '衁', - 'Ы' => '衎', - 'Ь' => '衧', - 'Э' => '衪', - 'Ю' => '衩', - 'Я' => '觓', - 'а' => '訄', - 'б' => '訇', - 'в' => '赲', - 'г' => '迣', - 'д' => '迡', - 'е' => '迮', - 'ж' => '迠', - 'з' => '郱', - 'и' => '邽', - 'й' => '邿', - 'к' => '郕', - 'л' => '郅', - 'м' => '邾', - 'н' => '郇', - 'о' => '郋', - 'п' => '郈', - '' => '釔', - '' => '釓', - '' => '陔', - '' => '陏', - '' => '陑', - '' => '陓', - '' => '陊', - '' => '陎', - '' => '倞', - '' => '倅', - '' => '倇', - '' => '倓', - '' => '倢', - '' => '倰', - '' => '倛', - '' => '俵', - '' => '俴', - '' => '倳', - '' => '倷', - '' => '倬', - '' => '俶', - '' => '俷', - '' => '倗', - '' => '倜', - '' => '倠', - '' => '倧', - '' => '倵', - '' => '倯', - '' => '倱', - '' => '倎', - '' => '党', - '' => '冔', - '' => '冓', - '' => '凊', - '' => '凄', - '' => '凅', - '' => '凈', - '' => '凎', - '' => '剡', - '' => '剚', - '' => '剒', - '' => '剞', - '' => '剟', - '' => '剕', - '' => '剢', - '' => '勍', - '' => '匎', - '' => '厞', - '' => '唦', - '' => '哢', - '' => '唗', - '' => '唒', - '' => '哧', - '' => '哳', - '' => '哤', - '' => '唚', - '' => '哿', - '' => '唄', - '' => '唈', - '' => '哫', - '' => '唑', - '' => '唅', - '' => '哱', - '@' => '唊', - 'A' => '哻', - 'B' => '哷', - 'C' => '哸', - 'D' => '哠', - 'E' => '唎', - 'F' => '唃', - 'G' => '唋', - 'H' => '圁', - 'I' => '圂', - 'J' => '埌', - 'K' => '堲', - 'L' => '埕', - 'M' => '埒', - 'N' => '垺', - 'O' => '埆', - 'P' => '垽', - 'Q' => '垼', - 'R' => '垸', - 'S' => '垶', - 'T' => '垿', - 'U' => '埇', - 'V' => '埐', - 'W' => '垹', - 'X' => '埁', - 'Y' => '夎', - 'Z' => '奊', - '[' => '娙', - '\\' => '娖', - ']' => '娭', - '^' => '娮', - '_' => '娕', - '`' => '娏', - 'a' => '娗', - 'b' => '娊', - 'c' => '娞', - 'd' => '娳', - 'e' => '孬', - 'f' => '宧', - 'g' => '宭', - 'h' => '宬', - 'i' => '尃', - 'j' => '屖', - 'k' => '屔', - 'l' => '峬', - 'm' => '峿', - 'n' => '峮', - 'o' => '峱', - 'p' => '峷', - 'q' => '崀', - 'r' => '峹', - 's' => '帩', - 't' => '帨', - 'u' => '庨', - 'v' => '庮', - 'w' => '庪', - 'x' => '庬', - 'y' => '弳', - 'z' => '弰', - '{' => '彧', - '|' => '恝', - '}' => '恚', - '~' => '恧', - 'ѡ' => '恁', - 'Ѣ' => '悢', - 'ѣ' => '悈', - 'Ѥ' => '悀', - 'ѥ' => '悒', - 'Ѧ' => '悁', - 'ѧ' => '悝', - 'Ѩ' => '悃', - 'ѩ' => '悕', - 'Ѫ' => '悛', - 'ѫ' => '悗', - 'Ѭ' => '悇', - 'ѭ' => '悜', - 'Ѯ' => '悎', - 'ѯ' => '戙', - 'Ѱ' => '扆', - 'ѱ' => '拲', - 'Ѳ' => '挐', - 'ѳ' => '捖', - 'Ѵ' => '挬', - 'ѵ' => '捄', - 'Ѷ' => '捅', - 'ѷ' => '挶', - 'Ѹ' => '捃', - 'ѹ' => '揤', - 'Ѻ' => '挹', - 'ѻ' => '捋', - 'Ѽ' => '捊', - 'ѽ' => '挼', - 'Ѿ' => '挩', - 'ѿ' => '捁', - '' => '挴', - '' => '捘', - '' => '捔', - '' => '捙', - '' => '挭', - '' => '捇', - '' => '挳', - '' => '捚', - '' => '捑', - '' => '挸', - '' => '捗', - '' => '捀', - '' => '捈', - '' => '敊', - '' => '敆', - '' => '旆', - '' => '旃', - '' => '旄', - '' => '旂', - '' => '晊', - '' => '晟', - '' => '晇', - '' => '晑', - '' => '朒', - '' => '朓', - '' => '栟', - '' => '栚', - '' => '桉', - '' => '栲', - '' => '栳', - '' => '栻', - '' => '桋', - '' => '桏', - '' => '栖', - '' => '栱', - '' => '栜', - '' => '栵', - '' => '栫', - '' => '栭', - '' => '栯', - '' => '桎', - '' => '桄', - '' => '栴', - '' => '栝', - '' => '栒', - '' => '栔', - '' => '栦', - '' => '栨', - '' => '栮', - '' => '桍', - '' => '栺', - '' => '栥', - '' => '栠', - '' => '欬', - '' => '欯', - '' => '欭', - '' => '欱', - '' => '欴', - '' => '歭', - '' => '肂', - '' => '殈', - '' => '毦', - '' => '毤', - '@' => '毨', - 'A' => '毣', - 'B' => '毢', - 'C' => '毧', - 'D' => '氥', - 'E' => '浺', - 'F' => '浣', - 'G' => '浤', - 'H' => '浶', - 'I' => '洍', - 'J' => '浡', - 'K' => '涒', - 'L' => '浘', - 'M' => '浢', - 'N' => '浭', - 'O' => '浯', - 'P' => '涑', - 'Q' => '涍', - 'R' => '淯', - 'S' => '浿', - 'T' => '涆', - 'U' => '浞', - 'V' => '浧', - 'W' => '浠', - 'X' => '涗', - 'Y' => '浰', - 'Z' => '浼', - '[' => '浟', - '\\' => '涂', - ']' => '涘', - '^' => '洯', - '_' => '浨', - '`' => '涋', - 'a' => '浾', - 'b' => '涀', - 'c' => '涄', - 'd' => '洖', - 'e' => '涃', - 'f' => '浻', - 'g' => '浽', - 'h' => '浵', - 'i' => '涐', - 'j' => '烜', - 'k' => '烓', - 'l' => '烑', - 'm' => '烝', - 'n' => '烋', - 'o' => '缹', - 'p' => '烢', - 'q' => '烗', - 'r' => '烒', - 's' => '烞', - 't' => '烠', - 'u' => '烔', - 'v' => '烍', - 'w' => '烅', - 'x' => '烆', - 'y' => '烇', - 'z' => '烚', - '{' => '烎', - '|' => '烡', - '}' => '牂', - '~' => '牸', - 'ҡ' => '牷', - 'Ң' => '牶', - 'ң' => '猀', - 'Ҥ' => '狺', - 'ҥ' => '狴', - 'Ҧ' => '狾', - 'ҧ' => '狶', - 'Ҩ' => '狳', - 'ҩ' => '狻', - 'Ҫ' => '猁', - 'ҫ' => '珓', - 'Ҭ' => '珙', - 'ҭ' => '珥', - 'Ү' => '珖', - 'ү' => '玼', - 'Ұ' => '珧', - 'ұ' => '珣', - 'Ҳ' => '珩', - 'ҳ' => '珜', - 'Ҵ' => '珒', - 'ҵ' => '珛', - 'Ҷ' => '珔', - 'ҷ' => '珝', - 'Ҹ' => '珚', - 'ҹ' => '珗', - 'Һ' => '珘', - 'һ' => '珨', - 'Ҽ' => '瓞', - 'ҽ' => '瓟', - 'Ҿ' => '瓴', - 'ҿ' => '瓵', - '' => '甡', - '' => '畛', - '' => '畟', - '' => '疰', - '' => '痁', - '' => '疻', - '' => '痄', - '' => '痀', - '' => '疿', - '' => '疶', - '' => '疺', - '' => '皊', - '' => '盉', - '' => '眝', - '' => '眛', - '' => '眐', - '' => '眓', - '' => '眒', - '' => '眣', - '' => '眑', - '' => '眕', - '' => '眙', - '' => '眚', - '' => '眢', - '' => '眧', - '' => '砣', - '' => '砬', - '' => '砢', - '' => '砵', - '' => '砯', - '' => '砨', - '' => '砮', - '' => '砫', - '' => '砡', - '' => '砩', - '' => '砳', - '' => '砪', - '' => '砱', - '' => '祔', - '' => '祛', - '' => '祏', - '' => '祜', - '' => '祓', - '' => '祒', - '' => '祑', - '' => '秫', - '' => '秬', - '' => '秠', - '' => '秮', - '' => '秭', - '' => '秪', - '' => '秜', - '' => '秞', - '' => '秝', - '' => '窆', - '' => '窉', - '' => '窅', - '' => '窋', - '' => '窌', - '' => '窊', - '' => '窇', - '' => '竘', - '' => '笐', - '@' => '笄', - 'A' => '笓', - 'B' => '笅', - 'C' => '笏', - 'D' => '笈', - 'E' => '笊', - 'F' => '笎', - 'G' => '笉', - 'H' => '笒', - 'I' => '粄', - 'J' => '粑', - 'K' => '粊', - 'L' => '粌', - 'M' => '粈', - 'N' => '粍', - 'O' => '粅', - 'P' => '紞', - 'Q' => '紝', - 'R' => '紑', - 'S' => '紎', - 'T' => '紘', - 'U' => '紖', - 'V' => '紓', - 'W' => '紟', - 'X' => '紒', - 'Y' => '紏', - 'Z' => '紌', - '[' => '罜', - '\\' => '罡', - ']' => '罞', - '^' => '罠', - '_' => '罝', - '`' => '罛', - 'a' => '羖', - 'b' => '羒', - 'c' => '翃', - 'd' => '翂', - 'e' => '翀', - 'f' => '耖', - 'g' => '耾', - 'h' => '耹', - 'i' => '胺', - 'j' => '胲', - 'k' => '胹', - 'l' => '胵', - 'm' => '脁', - 'n' => '胻', - 'o' => '脀', - 'p' => '舁', - 'q' => '舯', - 'r' => '舥', - 's' => '茳', - 't' => '茭', - 'u' => '荄', - 'v' => '茙', - 'w' => '荑', - 'x' => '茥', - 'y' => '荖', - 'z' => '茿', - '{' => '荁', - '|' => '茦', - '}' => '茜', - '~' => '茢', - 'ӡ' => '荂', - 'Ӣ' => '荎', - 'ӣ' => '茛', - 'Ӥ' => '茪', - 'ӥ' => '茈', - 'Ӧ' => '茼', - 'ӧ' => '荍', - 'Ө' => '茖', - 'ө' => '茤', - 'Ӫ' => '茠', - 'ӫ' => '茷', - 'Ӭ' => '茯', - 'ӭ' => '茩', - 'Ӯ' => '荇', - 'ӯ' => '荅', - 'Ӱ' => '荌', - 'ӱ' => '荓', - 'Ӳ' => '茞', - 'ӳ' => '茬', - 'Ӵ' => '荋', - 'ӵ' => '茧', - 'Ӷ' => '荈', - 'ӷ' => '虓', - 'Ӹ' => '虒', - 'ӹ' => '蚢', - 'Ӻ' => '蚨', - 'ӻ' => '蚖', - 'Ӽ' => '蚍', - 'ӽ' => '蚑', - 'Ӿ' => '蚞', - 'ӿ' => '蚇', - '' => '蚗', - '' => '蚆', - '' => '蚋', - '' => '蚚', - '' => '蚅', - '' => '蚥', - '' => '蚙', - '' => '蚡', - '' => '蚧', - '' => '蚕', - '' => '蚘', - '' => '蚎', - '' => '蚝', - '' => '蚐', - '' => '蚔', - '' => '衃', - '' => '衄', - '' => '衭', - '' => '衵', - '' => '衶', - '' => '衲', - '' => '袀', - '' => '衱', - '' => '衿', - '' => '衯', - '' => '袃', - '' => '衾', - '' => '衴', - '' => '衼', - '' => '訒', - '' => '豇', - '' => '豗', - '' => '豻', - '' => '貤', - '' => '貣', - '' => '赶', - '' => '赸', - '' => '趵', - '' => '趷', - '' => '趶', - '' => '軑', - '' => '軓', - '' => '迾', - '' => '迵', - '' => '适', - '' => '迿', - '' => '迻', - '' => '逄', - '' => '迼', - '' => '迶', - '' => '郖', - '' => '郠', - '' => '郙', - '' => '郚', - '' => '郣', - '' => '郟', - '' => '郥', - '' => '郘', - '' => '郛', - '' => '郗', - '' => '郜', - '' => '郤', - '' => '酐', - '@' => '酎', - 'A' => '酏', - 'B' => '釕', - 'C' => '釢', - 'D' => '釚', - 'E' => '陜', - 'F' => '陟', - 'G' => '隼', - 'H' => '飣', - 'I' => '髟', - 'J' => '鬯', - 'K' => '乿', - 'L' => '偰', - 'M' => '偪', - 'N' => '偡', - 'O' => '偞', - 'P' => '偠', - 'Q' => '偓', - 'R' => '偋', - 'S' => '偝', - 'T' => '偲', - 'U' => '偈', - 'V' => '偍', - 'W' => '偁', - 'X' => '偛', - 'Y' => '偊', - 'Z' => '偢', - '[' => '倕', - '\\' => '偅', - ']' => '偟', - '^' => '偩', - '_' => '偫', - '`' => '偣', - 'a' => '偤', - 'b' => '偆', - 'c' => '偀', - 'd' => '偮', - 'e' => '偳', - 'f' => '偗', - 'g' => '偑', - 'h' => '凐', - 'i' => '剫', - 'j' => '剭', - 'k' => '剬', - 'l' => '剮', - 'm' => '勖', - 'n' => '勓', - 'o' => '匭', - 'p' => '厜', - 'q' => '啵', - 'r' => '啶', - 's' => '唼', - 't' => '啍', - 'u' => '啐', - 'v' => '唴', - 'w' => '唪', - 'x' => '啑', - 'y' => '啢', - 'z' => '唶', - '{' => '唵', - '|' => '唰', - '}' => '啒', - '~' => '啅', - 'ԡ' => '唌', - 'Ԣ' => '唲', - 'ԣ' => '啥', - 'Ԥ' => '啎', - 'ԥ' => '唹', - 'Ԧ' => '啈', - 'ԧ' => '唭', - 'Ԩ' => '唻', - 'ԩ' => '啀', - 'Ԫ' => '啋', - 'ԫ' => '圊', - 'Ԭ' => '圇', - 'ԭ' => '埻', - 'Ԯ' => '堔', - 'ԯ' => '埢', - '԰' => '埶', - 'Ա' => '埜', - 'Բ' => '埴', - 'Գ' => '堀', - 'Դ' => '埭', - 'Ե' => '埽', - 'Զ' => '堈', - 'Է' => '埸', - 'Ը' => '堋', - 'Թ' => '埳', - 'Ժ' => '埏', - 'Ի' => '堇', - 'Լ' => '埮', - 'Խ' => '埣', - 'Ծ' => '埲', - 'Կ' => '埥', - '' => '埬', - '' => '埡', - '' => '堎', - '' => '埼', - '' => '堐', - '' => '埧', - '' => '堁', - '' => '堌', - '' => '埱', - '' => '埩', - '' => '埰', - '' => '堍', - '' => '堄', - '' => '奜', - '' => '婠', - '' => '婘', - '' => '婕', - '' => '婧', - '' => '婞', - '' => '娸', - '' => '娵', - '' => '婭', - '' => '婐', - '' => '婟', - '' => '婥', - '' => '婬', - '' => '婓', - '' => '婤', - '' => '婗', - '' => '婃', - '' => '婝', - '' => '婒', - '' => '婄', - '' => '婛', - '' => '婈', - '' => '媎', - '' => '娾', - '' => '婍', - '' => '娹', - '' => '婌', - '' => '婰', - '' => '婩', - '' => '婇', - '' => '婑', - '' => '婖', - '' => '婂', - '' => '婜', - '' => '孲', - '' => '孮', - '' => '寁', - '' => '寀', - '' => '屙', - '' => '崞', - '' => '崋', - '' => '崝', - '' => '崚', - '' => '崠', - '' => '崌', - '' => '崨', - '' => '崍', - '' => '崦', - '' => '崥', - '' => '崏', - '@' => '崰', - 'A' => '崒', - 'B' => '崣', - 'C' => '崟', - 'D' => '崮', - 'E' => '帾', - 'F' => '帴', - 'G' => '庱', - 'H' => '庴', - 'I' => '庹', - 'J' => '庲', - 'K' => '庳', - 'L' => '弶', - 'M' => '弸', - 'N' => '徛', - 'O' => '徖', - 'P' => '徟', - 'Q' => '悊', - 'R' => '悐', - 'S' => '悆', - 'T' => '悾', - 'U' => '悰', - 'V' => '悺', - 'W' => '惓', - 'X' => '惔', - 'Y' => '惏', - 'Z' => '惤', - '[' => '惙', - '\\' => '惝', - ']' => '惈', - '^' => '悱', - '_' => '惛', - '`' => '悷', - 'a' => '惊', - 'b' => '悿', - 'c' => '惃', - 'd' => '惍', - 'e' => '惀', - 'f' => '挲', - 'g' => '捥', - 'h' => '掊', - 'i' => '掂', - 'j' => '捽', - 'k' => '掽', - 'l' => '掞', - 'm' => '掭', - 'n' => '掝', - 'o' => '掗', - 'p' => '掫', - 'q' => '掎', - 'r' => '捯', - 's' => '掇', - 't' => '掐', - 'u' => '据', - 'v' => '掯', - 'w' => '捵', - 'x' => '掜', - 'y' => '捭', - 'z' => '掮', - '{' => '捼', - '|' => '掤', - '}' => '挻', - '~' => '掟', - 'ա' => '捸', - 'բ' => '掅', - 'գ' => '掁', - 'դ' => '掑', - 'ե' => '掍', - 'զ' => '捰', - 'է' => '敓', - 'ը' => '旍', - 'թ' => '晥', - 'ժ' => '晡', - 'ի' => '晛', - 'լ' => '晙', - 'խ' => '晜', - 'ծ' => '晢', - 'կ' => '朘', - 'հ' => '桹', - 'ձ' => '梇', - 'ղ' => '梐', - 'ճ' => '梜', - 'մ' => '桭', - 'յ' => '桮', - 'ն' => '梮', - 'շ' => '梫', - 'ո' => '楖', - 'չ' => '桯', - 'պ' => '梣', - 'ջ' => '梬', - 'ռ' => '梩', - 'ս' => '桵', - 'վ' => '桴', - 'տ' => '梲', - '' => '梏', - '' => '桷', - '' => '梒', - '' => '桼', - '' => '桫', - '' => '桲', - '' => '梪', - '' => '梀', - '' => '桱', - '' => '桾', - '' => '梛', - '' => '梖', - '' => '梋', - '' => '梠', - '' => '梉', - '' => '梤', - '' => '桸', - '' => '桻', - '' => '梑', - '' => '梌', - '' => '梊', - '' => '桽', - '' => '欶', - '' => '欳', - '' => '欷', - '' => '欸', - '' => '殑', - '' => '殏', - '' => '殍', - '' => '殎', - '' => '殌', - '' => '氪', - '' => '淀', - '' => '涫', - '' => '涴', - '' => '涳', - '' => '湴', - '' => '涬', - '' => '淩', - '' => '淢', - '' => '涷', - '' => '淶', - '' => '淔', - '' => '渀', - '' => '淈', - '' => '淠', - '' => '淟', - '' => '淖', - '' => '涾', - '' => '淥', - '' => '淜', - '' => '淝', - '' => '淛', - '' => '淴', - '' => '淊', - '' => '涽', - '' => '淭', - '' => '淰', - '' => '涺', - '' => '淕', - '' => '淂', - '' => '淏', - '' => '淉', - '@' => '淐', - 'A' => '淲', - 'B' => '淓', - 'C' => '淽', - 'D' => '淗', - 'E' => '淍', - 'F' => '淣', - 'G' => '涻', - 'H' => '烺', - 'I' => '焍', - 'J' => '烷', - 'K' => '焗', - 'L' => '烴', - 'M' => '焌', - 'N' => '烰', - 'O' => '焄', - 'P' => '烳', - 'Q' => '焐', - 'R' => '烼', - 'S' => '烿', - 'T' => '焆', - 'U' => '焓', - 'V' => '焀', - 'W' => '烸', - 'X' => '烶', - 'Y' => '焋', - 'Z' => '焂', - '[' => '焎', - '\\' => '牾', - ']' => '牻', - '^' => '牼', - '_' => '牿', - '`' => '猝', - 'a' => '猗', - 'b' => '猇', - 'c' => '猑', - 'd' => '猘', - 'e' => '猊', - 'f' => '猈', - 'g' => '狿', - 'h' => '猏', - 'i' => '猞', - 'j' => '玈', - 'k' => '珶', - 'l' => '珸', - 'm' => '珵', - 'n' => '琄', - 'o' => '琁', - 'p' => '珽', - 'q' => '琇', - 'r' => '琀', - 's' => '珺', - 't' => '珼', - 'u' => '珿', - 'v' => '琌', - 'w' => '琋', - 'x' => '珴', - 'y' => '琈', - 'z' => '畤', - '{' => '畣', - '|' => '痎', - '}' => '痒', - '~' => '痏', - '֡' => '痋', - '֢' => '痌', - '֣' => '痑', - '֤' => '痐', - '֥' => '皏', - '֦' => '皉', - '֧' => '盓', - '֨' => '眹', - '֩' => '眯', - '֪' => '眭', - '֫' => '眱', - '֬' => '眲', - '֭' => '眴', - '֮' => '眳', - '֯' => '眽', - 'ְ' => '眥', - 'ֱ' => '眻', - 'ֲ' => '眵', - 'ֳ' => '硈', - 'ִ' => '硒', - 'ֵ' => '硉', - 'ֶ' => '硍', - 'ַ' => '硊', - 'ָ' => '硌', - 'ֹ' => '砦', - 'ֺ' => '硅', - 'ֻ' => '硐', - 'ּ' => '祤', - 'ֽ' => '祧', - '־' => '祩', - 'ֿ' => '祪', - '' => '祣', - '' => '祫', - '' => '祡', - '' => '离', - '' => '秺', - '' => '秸', - '' => '秶', - '' => '秷', - '' => '窏', - '' => '窔', - '' => '窐', - '' => '笵', - '' => '筇', - '' => '笴', - '' => '笥', - '' => '笰', - '' => '笢', - '' => '笤', - '' => '笳', - '' => '笘', - '' => '笪', - '' => '笝', - '' => '笱', - '' => '笫', - '' => '笭', - '' => '笯', - '' => '笲', - '' => '笸', - '' => '笚', - '' => '笣', - '' => '粔', - '' => '粘', - '' => '粖', - '' => '粣', - '' => '紵', - '' => '紽', - '' => '紸', - '' => '紶', - '' => '紺', - '' => '絅', - '' => '紬', - '' => '紩', - '' => '絁', - '' => '絇', - '' => '紾', - '' => '紿', - '' => '絊', - '' => '紻', - '' => '紨', - '' => '罣', - '' => '羕', - '' => '羜', - '' => '羝', - '' => '羛', - '' => '翊', - '' => '翋', - '' => '翍', - '' => '翐', - '' => '翑', - '' => '翇', - '' => '翏', - '' => '翉', - '' => '耟', - '@' => '耞', - 'A' => '耛', - 'B' => '聇', - 'C' => '聃', - 'D' => '聈', - 'E' => '脘', - 'F' => '脥', - 'G' => '脙', - 'H' => '脛', - 'I' => '脭', - 'J' => '脟', - 'K' => '脬', - 'L' => '脞', - 'M' => '脡', - 'N' => '脕', - 'O' => '脧', - 'P' => '脝', - 'Q' => '脢', - 'R' => '舑', - 'S' => '舸', - 'T' => '舳', - 'U' => '舺', - 'V' => '舴', - 'W' => '舲', - 'X' => '艴', - 'Y' => '莐', - 'Z' => '莣', - '[' => '莨', - '\\' => '莍', - ']' => '荺', - '^' => '荳', - '_' => '莤', - '`' => '荴', - 'a' => '莏', - 'b' => '莁', - 'c' => '莕', - 'd' => '莙', - 'e' => '荵', - 'f' => '莔', - 'g' => '莩', - 'h' => '荽', - 'i' => '莃', - 'j' => '莌', - 'k' => '莝', - 'l' => '莛', - 'm' => '莪', - 'n' => '莋', - 'o' => '荾', - 'p' => '莥', - 'q' => '莯', - 'r' => '莈', - 's' => '莗', - 't' => '莰', - 'u' => '荿', - 'v' => '莦', - 'w' => '莇', - 'x' => '莮', - 'y' => '荶', - 'z' => '莚', - '{' => '虙', - '|' => '虖', - '}' => '蚿', - '~' => '蚷', - 'ס' => '蛂', - 'ע' => '蛁', - 'ף' => '蛅', - 'פ' => '蚺', - 'ץ' => '蚰', - 'צ' => '蛈', - 'ק' => '蚹', - 'ר' => '蚳', - 'ש' => '蚸', - 'ת' => '蛌', - '׫' => '蚴', - '׬' => '蚻', - '׭' => '蚼', - '׮' => '蛃', - 'ׯ' => '蚽', - 'װ' => '蚾', - 'ױ' => '衒', - 'ײ' => '袉', - '׳' => '袕', - '״' => '袨', - '׵' => '袢', - '׶' => '袪', - '׷' => '袚', - '׸' => '袑', - '׹' => '袡', - '׺' => '袟', - '׻' => '袘', - '׼' => '袧', - '׽' => '袙', - '׾' => '袛', - '׿' => '袗', - '' => '袤', - '' => '袬', - '' => '袌', - '' => '袓', - '' => '袎', - '' => '覂', - '' => '觖', - '' => '觙', - '' => '觕', - '' => '訰', - '' => '訧', - '' => '訬', - '' => '訞', - '' => '谹', - '' => '谻', - '' => '豜', - '' => '豝', - '' => '豽', - '' => '貥', - '' => '赽', - '' => '赻', - '' => '赹', - '' => '趼', - '' => '跂', - '' => '趹', - '' => '趿', - '' => '跁', - '' => '軘', - '' => '軞', - '' => '軝', - '' => '軜', - '' => '軗', - '' => '軠', - '' => '軡', - '' => '逤', - '' => '逋', - '' => '逑', - '' => '逜', - '' => '逌', - '' => '逡', - '' => '郯', - '' => '郪', - '' => '郰', - '' => '郴', - '' => '郲', - '' => '郳', - '' => '郔', - '' => '郫', - '' => '郬', - '' => '郩', - '' => '酖', - '' => '酘', - '' => '酚', - '' => '酓', - '' => '酕', - '' => '釬', - '' => '釴', - '' => '釱', - '' => '釳', - '' => '釸', - '' => '釤', - '' => '釹', - '' => '釪', - '@' => '釫', - 'A' => '釷', - 'B' => '釨', - 'C' => '釮', - 'D' => '镺', - 'E' => '閆', - 'F' => '閈', - 'G' => '陼', - 'H' => '陭', - 'I' => '陫', - 'J' => '陱', - 'K' => '陯', - 'L' => '隿', - 'M' => '靪', - 'N' => '頄', - 'O' => '飥', - 'P' => '馗', - 'Q' => '傛', - 'R' => '傕', - 'S' => '傔', - 'T' => '傞', - 'U' => '傋', - 'V' => '傣', - 'W' => '傃', - 'X' => '傌', - 'Y' => '傎', - 'Z' => '傝', - '[' => '偨', - '\\' => '傜', - ']' => '傒', - '^' => '傂', - '_' => '傇', - '`' => '兟', - 'a' => '凔', - 'b' => '匒', - 'c' => '匑', - 'd' => '厤', - 'e' => '厧', - 'f' => '喑', - 'g' => '喨', - 'h' => '喥', - 'i' => '喭', - 'j' => '啷', - 'k' => '噅', - 'l' => '喢', - 'm' => '喓', - 'n' => '喈', - 'o' => '喏', - 'p' => '喵', - 'q' => '喁', - 'r' => '喣', - 's' => '喒', - 't' => '喤', - 'u' => '啽', - 'v' => '喌', - 'w' => '喦', - 'x' => '啿', - 'y' => '喕', - 'z' => '喡', - '{' => '喎', - '|' => '圌', - '}' => '堩', - '~' => '堷', - 'ء' => '堙', - 'آ' => '堞', - 'أ' => '堧', - 'ؤ' => '堣', - 'إ' => '堨', - 'ئ' => '埵', - 'ا' => '塈', - 'ب' => '堥', - 'ة' => '堜', - 'ت' => '堛', - 'ث' => '堳', - 'ج' => '堿', - 'ح' => '堶', - 'خ' => '堮', - 'د' => '堹', - 'ذ' => '堸', - 'ر' => '堭', - 'ز' => '堬', - 'س' => '堻', - 'ش' => '奡', - 'ص' => '媯', - 'ض' => '媔', - 'ط' => '媟', - 'ظ' => '婺', - 'ع' => '媢', - 'غ' => '媞', - 'ػ' => '婸', - 'ؼ' => '媦', - 'ؽ' => '婼', - 'ؾ' => '媥', - 'ؿ' => '媬', - '' => '媕', - '' => '媮', - '' => '娷', - '' => '媄', - '' => '媊', - '' => '媗', - '' => '媃', - '' => '媋', - '' => '媩', - '' => '婻', - '' => '婽', - '' => '媌', - '' => '媜', - '' => '媏', - '' => '媓', - '' => '媝', - '' => '寪', - '' => '寍', - '' => '寋', - '' => '寔', - '' => '寑', - '' => '寊', - '' => '寎', - '' => '尌', - '' => '尰', - '' => '崷', - '' => '嵃', - '' => '嵫', - '' => '嵁', - '' => '嵋', - '' => '崿', - '' => '崵', - '' => '嵑', - '' => '嵎', - '' => '嵕', - '' => '崳', - '' => '崺', - '' => '嵒', - '' => '崽', - '' => '崱', - '' => '嵙', - '' => '嵂', - '' => '崹', - '' => '嵉', - '' => '崸', - '' => '崼', - '' => '崲', - '' => '崶', - '' => '嵀', - '' => '嵅', - '' => '幄', - '' => '幁', - '' => '彘', - '' => '徦', - '' => '徥', - '' => '徫', - '' => '惉', - '' => '悹', - '' => '惌', - '' => '惢', - '' => '惎', - '' => '惄', - '' => '愔', - '@' => '惲', - 'A' => '愊', - 'B' => '愖', - 'C' => '愅', - 'D' => '惵', - 'E' => '愓', - 'F' => '惸', - 'G' => '惼', - 'H' => '惾', - 'I' => '惁', - 'J' => '愃', - 'K' => '愘', - 'L' => '愝', - 'M' => '愐', - 'N' => '惿', - 'O' => '愄', - 'P' => '愋', - 'Q' => '扊', - 'R' => '掔', - 'S' => '掱', - 'T' => '掰', - 'U' => '揎', - 'V' => '揥', - 'W' => '揨', - 'X' => '揯', - 'Y' => '揃', - 'Z' => '撝', - '[' => '揳', - '\\' => '揊', - ']' => '揠', - '^' => '揶', - '_' => '揕', - '`' => '揲', - 'a' => '揵', - 'b' => '摡', - 'c' => '揟', - 'd' => '掾', - 'e' => '揝', - 'f' => '揜', - 'g' => '揄', - 'h' => '揘', - 'i' => '揓', - 'j' => '揂', - 'k' => '揇', - 'l' => '揌', - 'm' => '揋', - 'n' => '揈', - 'o' => '揰', - 'p' => '揗', - 'q' => '揙', - 'r' => '攲', - 's' => '敧', - 't' => '敪', - 'u' => '敤', - 'v' => '敜', - 'w' => '敨', - 'x' => '敥', - 'y' => '斌', - 'z' => '斝', - '{' => '斞', - '|' => '斮', - '}' => '旐', - '~' => '旒', - '١' => '晼', - '٢' => '晬', - '٣' => '晻', - '٤' => '暀', - '٥' => '晱', - '٦' => '晹', - '٧' => '晪', - '٨' => '晲', - '٩' => '朁', - '٪' => '椌', - '٫' => '棓', - '٬' => '椄', - '٭' => '棜', - 'ٮ' => '椪', - 'ٯ' => '棬', - 'ٰ' => '棪', - 'ٱ' => '棱', - 'ٲ' => '椏', - 'ٳ' => '棖', - 'ٴ' => '棷', - 'ٵ' => '棫', - 'ٶ' => '棤', - 'ٷ' => '棶', - 'ٸ' => '椓', - 'ٹ' => '椐', - 'ٺ' => '棳', - 'ٻ' => '棡', - 'ټ' => '椇', - 'ٽ' => '棌', - 'پ' => '椈', - 'ٿ' => '楰', - '' => '梴', - '' => '椑', - '' => '棯', - '' => '棆', - '' => '椔', - '' => '棸', - '' => '棐', - '' => '棽', - '' => '棼', - '' => '棨', - '' => '椋', - '' => '椊', - '' => '椗', - '' => '棎', - '' => '棈', - '' => '棝', - '' => '棞', - '' => '棦', - '' => '棴', - '' => '棑', - '' => '椆', - '' => '棔', - '' => '棩', - '' => '椕', - '' => '椥', - '' => '棇', - '' => '欹', - '' => '欻', - '' => '欿', - '' => '欼', - '' => '殔', - '' => '殗', - '' => '殙', - '' => '殕', - '' => '殽', - '' => '毰', - '' => '毲', - '' => '毳', - '' => '氰', - '' => '淼', - '' => '湆', - '' => '湇', - '' => '渟', - '' => '湉', - '' => '溈', - '' => '渼', - '' => '渽', - '' => '湅', - '' => '湢', - '' => '渫', - '' => '渿', - '' => '湁', - '' => '湝', - '' => '湳', - '' => '渜', - '' => '渳', - '' => '湋', - '' => '湀', - '' => '湑', - '' => '渻', - '' => '渃', - '' => '渮', - '' => '湞', - '@' => '湨', - 'A' => '湜', - 'B' => '湡', - 'C' => '渱', - 'D' => '渨', - 'E' => '湠', - 'F' => '湱', - 'G' => '湫', - 'H' => '渹', - 'I' => '渢', - 'J' => '渰', - 'K' => '湓', - 'L' => '湥', - 'M' => '渧', - 'N' => '湸', - 'O' => '湤', - 'P' => '湷', - 'Q' => '湕', - 'R' => '湹', - 'S' => '湒', - 'T' => '湦', - 'U' => '渵', - 'V' => '渶', - 'W' => '湚', - 'X' => '焠', - 'Y' => '焞', - 'Z' => '焯', - '[' => '烻', - '\\' => '焮', - ']' => '焱', - '^' => '焣', - '_' => '焥', - '`' => '焢', - 'a' => '焲', - 'b' => '焟', - 'c' => '焨', - 'd' => '焺', - 'e' => '焛', - 'f' => '牋', - 'g' => '牚', - 'h' => '犈', - 'i' => '犉', - 'j' => '犆', - 'k' => '犅', - 'l' => '犋', - 'm' => '猒', - 'n' => '猋', - 'o' => '猰', - 'p' => '猢', - 'q' => '猱', - 'r' => '猳', - 's' => '猧', - 't' => '猲', - 'u' => '猭', - 'v' => '猦', - 'w' => '猣', - 'x' => '猵', - 'y' => '猌', - 'z' => '琮', - '{' => '琬', - '|' => '琰', - '}' => '琫', - '~' => '琖', - 'ڡ' => '琚', - 'ڢ' => '琡', - 'ڣ' => '琭', - 'ڤ' => '琱', - 'ڥ' => '琤', - 'ڦ' => '琣', - 'ڧ' => '琝', - 'ڨ' => '琩', - 'ک' => '琠', - 'ڪ' => '琲', - 'ګ' => '瓻', - 'ڬ' => '甯', - 'ڭ' => '畯', - 'ڮ' => '畬', - 'گ' => '痧', - 'ڰ' => '痚', - 'ڱ' => '痡', - 'ڲ' => '痦', - 'ڳ' => '痝', - 'ڴ' => '痟', - 'ڵ' => '痤', - 'ڶ' => '痗', - 'ڷ' => '皕', - 'ڸ' => '皒', - 'ڹ' => '盚', - 'ں' => '睆', - 'ڻ' => '睇', - 'ڼ' => '睄', - 'ڽ' => '睍', - 'ھ' => '睅', - 'ڿ' => '睊', - '' => '睎', - '' => '睋', - '' => '睌', - '' => '矞', - '' => '矬', - '' => '硠', - '' => '硤', - '' => '硥', - '' => '硜', - '' => '硭', - '' => '硱', - '' => '硪', - '' => '确', - '' => '硰', - '' => '硩', - '' => '硨', - '' => '硞', - '' => '硢', - '' => '祴', - '' => '祳', - '' => '祲', - '' => '祰', - '' => '稂', - '' => '稊', - '' => '稃', - '' => '稌', - '' => '稄', - '' => '窙', - '' => '竦', - '' => '竤', - '' => '筊', - '' => '笻', - '' => '筄', - '' => '筈', - '' => '筌', - '' => '筎', - '' => '筀', - '' => '筘', - '' => '筅', - '' => '粢', - '' => '粞', - '' => '粨', - '' => '粡', - '' => '絘', - '' => '絯', - '' => '絣', - '' => '絓', - '' => '絖', - '' => '絧', - '' => '絪', - '' => '絏', - '' => '絭', - '' => '絜', - '' => '絫', - '' => '絒', - '' => '絔', - '' => '絩', - '' => '絑', - '' => '絟', - '' => '絎', - '' => '缾', - '' => '缿', - '' => '罥', - '@' => '罦', - 'A' => '羢', - 'B' => '羠', - 'C' => '羡', - 'D' => '翗', - 'E' => '聑', - 'F' => '聏', - 'G' => '聐', - 'H' => '胾', - 'I' => '胔', - 'J' => '腃', - 'K' => '腊', - 'L' => '腒', - 'M' => '腏', - 'N' => '腇', - 'O' => '脽', - 'P' => '腍', - 'Q' => '脺', - 'R' => '臦', - 'S' => '臮', - 'T' => '臷', - 'U' => '臸', - 'V' => '臹', - 'W' => '舄', - 'X' => '舼', - 'Y' => '舽', - 'Z' => '舿', - '[' => '艵', - '\\' => '茻', - ']' => '菏', - '^' => '菹', - '_' => '萣', - '`' => '菀', - 'a' => '菨', - 'b' => '萒', - 'c' => '菧', - 'd' => '菤', - 'e' => '菼', - 'f' => '菶', - 'g' => '萐', - 'h' => '菆', - 'i' => '菈', - 'j' => '菫', - 'k' => '菣', - 'l' => '莿', - 'm' => '萁', - 'n' => '菝', - 'o' => '菥', - 'p' => '菘', - 'q' => '菿', - 'r' => '菡', - 's' => '菋', - 't' => '菎', - 'u' => '菖', - 'v' => '菵', - 'w' => '菉', - 'x' => '萉', - 'y' => '萏', - 'z' => '菞', - '{' => '萑', - '|' => '萆', - '}' => '菂', - '~' => '菳', - 'ۡ' => '菕', - 'ۢ' => '菺', - 'ۣ' => '菇', - 'ۤ' => '菑', - 'ۥ' => '菪', - 'ۦ' => '萓', - 'ۧ' => '菃', - 'ۨ' => '菬', - '۩' => '菮', - '۪' => '菄', - '۫' => '菻', - '۬' => '菗', - 'ۭ' => '菢', - 'ۮ' => '萛', - 'ۯ' => '菛', - '۰' => '菾', - '۱' => '蛘', - '۲' => '蛢', - '۳' => '蛦', - '۴' => '蛓', - '۵' => '蛣', - '۶' => '蛚', - '۷' => '蛪', - '۸' => '蛝', - '۹' => '蛫', - 'ۺ' => '蛜', - 'ۻ' => '蛬', - 'ۼ' => '蛩', - '۽' => '蛗', - '۾' => '蛨', - 'ۿ' => '蛑', - '' => '衈', - '' => '衖', - '' => '衕', - '' => '袺', - '' => '裗', - '' => '袹', - '' => '袸', - '' => '裀', - '' => '袾', - '' => '袶', - '' => '袼', - '' => '袷', - '' => '袽', - '' => '袲', - '' => '褁', - '' => '裉', - '' => '覕', - '' => '覘', - '' => '覗', - '' => '觝', - '' => '觚', - '' => '觛', - '' => '詎', - '' => '詍', - '' => '訹', - '' => '詙', - '' => '詀', - '' => '詗', - '' => '詘', - '' => '詄', - '' => '詅', - '' => '詒', - '' => '詈', - '' => '詑', - '' => '詊', - '' => '詌', - '' => '詏', - '' => '豟', - '' => '貁', - '' => '貀', - '' => '貺', - '' => '貾', - '' => '貰', - '' => '貹', - '' => '貵', - '' => '趄', - '' => '趀', - '' => '趉', - '' => '跘', - '' => '跓', - '' => '跍', - '' => '跇', - '' => '跖', - '' => '跜', - '' => '跏', - '' => '跕', - '' => '跙', - '' => '跈', - '' => '跗', - '' => '跅', - '' => '軯', - '' => '軷', - '' => '軺', - '@' => '軹', - 'A' => '軦', - 'B' => '軮', - 'C' => '軥', - 'D' => '軵', - 'E' => '軧', - 'F' => '軨', - 'G' => '軶', - 'H' => '軫', - 'I' => '軱', - 'J' => '軬', - 'K' => '軴', - 'L' => '軩', - 'M' => '逭', - 'N' => '逴', - 'O' => '逯', - 'P' => '鄆', - 'Q' => '鄬', - 'R' => '鄄', - 'S' => '郿', - 'T' => '郼', - 'U' => '鄈', - 'V' => '郹', - 'W' => '郻', - 'X' => '鄁', - 'Y' => '鄀', - 'Z' => '鄇', - '[' => '鄅', - '\\' => '鄃', - ']' => '酡', - '^' => '酤', - '_' => '酟', - '`' => '酢', - 'a' => '酠', - 'b' => '鈁', - 'c' => '鈊', - 'd' => '鈥', - 'e' => '鈃', - 'f' => '鈚', - 'g' => '鈦', - 'h' => '鈏', - 'i' => '鈌', - 'j' => '鈀', - 'k' => '鈒', - 'l' => '釿', - 'm' => '釽', - 'n' => '鈆', - 'o' => '鈄', - 'p' => '鈧', - 'q' => '鈂', - 'r' => '鈜', - 's' => '鈤', - 't' => '鈙', - 'u' => '鈗', - 'v' => '鈅', - 'w' => '鈖', - 'x' => '镻', - 'y' => '閍', - 'z' => '閌', - '{' => '閐', - '|' => '隇', - '}' => '陾', - '~' => '隈', - 'ܡ' => '隉', - 'ܢ' => '隃', - 'ܣ' => '隀', - 'ܤ' => '雂', - 'ܥ' => '雈', - 'ܦ' => '雃', - 'ܧ' => '雱', - 'ܨ' => '雰', - 'ܩ' => '靬', - 'ܪ' => '靰', - 'ܫ' => '靮', - 'ܬ' => '頇', - 'ܭ' => '颩', - 'ܮ' => '飫', - 'ܯ' => '鳦', - 'ܰ' => '黹', - 'ܱ' => '亃', - 'ܲ' => '亄', - 'ܳ' => '亶', - 'ܴ' => '傽', - 'ܵ' => '傿', - 'ܶ' => '僆', - 'ܷ' => '傮', - 'ܸ' => '僄', - 'ܹ' => '僊', - 'ܺ' => '傴', - 'ܻ' => '僈', - 'ܼ' => '僂', - 'ܽ' => '傰', - 'ܾ' => '僁', - 'ܿ' => '傺', - '' => '傱', - '' => '僋', - '' => '僉', - '' => '傶', - '' => '傸', - '' => '凗', - '' => '剺', - '' => '剸', - '' => '剻', - '' => '剼', - '' => '嗃', - '' => '嗛', - '' => '嗌', - '' => '嗐', - '' => '嗋', - '' => '嗊', - '' => '嗝', - '' => '嗀', - '' => '嗔', - '' => '嗄', - '' => '嗩', - '' => '喿', - '' => '嗒', - '' => '喍', - '' => '嗏', - '' => '嗕', - '' => '嗢', - '' => '嗖', - '' => '嗈', - '' => '嗲', - '' => '嗍', - '' => '嗙', - '' => '嗂', - '' => '圔', - '' => '塓', - '' => '塨', - '' => '塤', - '' => '塏', - '' => '塍', - '' => '塉', - '' => '塯', - '' => '塕', - '' => '塎', - '' => '塝', - '' => '塙', - '' => '塥', - '' => '塛', - '' => '堽', - '' => '塣', - '' => '塱', - '' => '壼', - '' => '嫇', - '' => '嫄', - '' => '嫋', - '' => '媺', - '' => '媸', - '' => '媱', - '' => '媵', - '' => '媰', - '' => '媿', - '' => '嫈', - '' => '媻', - '' => '嫆', - '@' => '媷', - 'A' => '嫀', - 'B' => '嫊', - 'C' => '媴', - 'D' => '媶', - 'E' => '嫍', - 'F' => '媹', - 'G' => '媐', - 'H' => '寖', - 'I' => '寘', - 'J' => '寙', - 'K' => '尟', - 'L' => '尳', - 'M' => '嵱', - 'N' => '嵣', - 'O' => '嵊', - 'P' => '嵥', - 'Q' => '嵲', - 'R' => '嵬', - 'S' => '嵞', - 'T' => '嵨', - 'U' => '嵧', - 'V' => '嵢', - 'W' => '巰', - 'X' => '幏', - 'Y' => '幎', - 'Z' => '幊', - '[' => '幍', - '\\' => '幋', - ']' => '廅', - '^' => '廌', - '_' => '廆', - '`' => '廋', - 'a' => '廇', - 'b' => '彀', - 'c' => '徯', - 'd' => '徭', - 'e' => '惷', - 'f' => '慉', - 'g' => '慊', - 'h' => '愫', - 'i' => '慅', - 'j' => '愶', - 'k' => '愲', - 'l' => '愮', - 'm' => '慆', - 'n' => '愯', - 'o' => '慏', - 'p' => '愩', - 'q' => '慀', - 'r' => '戠', - 's' => '酨', - 't' => '戣', - 'u' => '戥', - 'v' => '戤', - 'w' => '揅', - 'x' => '揱', - 'y' => '揫', - 'z' => '搐', - '{' => '搒', - '|' => '搉', - '}' => '搠', - '~' => '搤', - 'ݡ' => '搳', - 'ݢ' => '摃', - 'ݣ' => '搟', - 'ݤ' => '搕', - 'ݥ' => '搘', - 'ݦ' => '搹', - 'ݧ' => '搷', - 'ݨ' => '搢', - 'ݩ' => '搣', - 'ݪ' => '搌', - 'ݫ' => '搦', - 'ݬ' => '搰', - 'ݭ' => '搨', - 'ݮ' => '摁', - 'ݯ' => '搵', - 'ݰ' => '搯', - 'ݱ' => '搊', - 'ݲ' => '搚', - 'ݳ' => '摀', - 'ݴ' => '搥', - 'ݵ' => '搧', - 'ݶ' => '搋', - 'ݷ' => '揧', - 'ݸ' => '搛', - 'ݹ' => '搮', - 'ݺ' => '搡', - 'ݻ' => '搎', - 'ݼ' => '敯', - 'ݽ' => '斒', - 'ݾ' => '旓', - 'ݿ' => '暆', - '' => '暌', - '' => '暕', - '' => '暐', - '' => '暋', - '' => '暊', - '' => '暙', - '' => '暔', - '' => '晸', - '' => '朠', - '' => '楦', - '' => '楟', - '' => '椸', - '' => '楎', - '' => '楢', - '' => '楱', - '' => '椿', - '' => '楅', - '' => '楪', - '' => '椹', - '' => '楂', - '' => '楗', - '' => '楙', - '' => '楺', - '' => '楈', - '' => '楉', - '' => '椵', - '' => '楬', - '' => '椳', - '' => '椽', - '' => '楥', - '' => '棰', - '' => '楸', - '' => '椴', - '' => '楩', - '' => '楀', - '' => '楯', - '' => '楄', - '' => '楶', - '' => '楘', - '' => '楁', - '' => '楴', - '' => '楌', - '' => '椻', - '' => '楋', - '' => '椷', - '' => '楜', - '' => '楏', - '' => '楑', - '' => '椲', - '' => '楒', - '' => '椯', - '' => '楻', - '' => '椼', - '' => '歆', - '' => '歅', - '' => '歃', - '' => '歂', - '' => '歈', - '' => '歁', - '' => '殛', - '' => '嗀', - '' => '毻', - '' => '毼', - '@' => '毹', - 'A' => '毷', - 'B' => '毸', - 'C' => '溛', - 'D' => '滖', - 'E' => '滈', - 'F' => '溏', - 'G' => '滀', - 'H' => '溟', - 'I' => '溓', - 'J' => '溔', - 'K' => '溠', - 'L' => '溱', - 'M' => '溹', - 'N' => '滆', - 'O' => '滒', - 'P' => '溽', - 'Q' => '滁', - 'R' => '溞', - 'S' => '滉', - 'T' => '溷', - 'U' => '溰', - 'V' => '滍', - 'W' => '溦', - 'X' => '滏', - 'Y' => '溲', - 'Z' => '溾', - '[' => '滃', - '\\' => '滜', - ']' => '滘', - '^' => '溙', - '_' => '溒', - '`' => '溎', - 'a' => '溍', - 'b' => '溤', - 'c' => '溡', - 'd' => '溿', - 'e' => '溳', - 'f' => '滐', - 'g' => '滊', - 'h' => '溗', - 'i' => '溮', - 'j' => '溣', - 'k' => '煇', - 'l' => '煔', - 'm' => '煒', - 'n' => '煣', - 'o' => '煠', - 'p' => '煁', - 'q' => '煝', - 'r' => '煢', - 's' => '煲', - 't' => '煸', - 'u' => '煪', - 'v' => '煡', - 'w' => '煂', - 'x' => '煘', - 'y' => '煃', - 'z' => '煋', - '{' => '煰', - '|' => '煟', - '}' => '煐', - '~' => '煓', - 'ޡ' => '煄', - 'ޢ' => '煍', - 'ޣ' => '煚', - 'ޤ' => '牏', - 'ޥ' => '犍', - 'ަ' => '犌', - 'ާ' => '犑', - 'ި' => '犐', - 'ީ' => '犎', - 'ު' => '猼', - 'ޫ' => '獂', - 'ެ' => '猻', - 'ޭ' => '猺', - 'ޮ' => '獀', - 'ޯ' => '獊', - 'ް' => '獉', - 'ޱ' => '瑄', - '޲' => '瑊', - '޳' => '瑋', - '޴' => '瑒', - '޵' => '瑑', - '޶' => '瑗', - '޷' => '瑀', - '޸' => '瑏', - '޹' => '瑐', - '޺' => '瑎', - '޻' => '瑂', - '޼' => '瑆', - '޽' => '瑍', - '޾' => '瑔', - '޿' => '瓡', - '' => '瓿', - '' => '瓾', - '' => '瓽', - '' => '甝', - '' => '畹', - '' => '畷', - '' => '榃', - '' => '痯', - '' => '瘏', - '' => '瘃', - '' => '痷', - '' => '痾', - '' => '痼', - '' => '痹', - '' => '痸', - '' => '瘐', - '' => '痻', - '' => '痶', - '' => '痭', - '' => '痵', - '' => '痽', - '' => '皙', - '' => '皵', - '' => '盝', - '' => '睕', - '' => '睟', - '' => '睠', - '' => '睒', - '' => '睖', - '' => '睚', - '' => '睩', - '' => '睧', - '' => '睔', - '' => '睙', - '' => '睭', - '' => '矠', - '' => '碇', - '' => '碚', - '' => '碔', - '' => '碏', - '' => '碄', - '' => '碕', - '' => '碅', - '' => '碆', - '' => '碡', - '' => '碃', - '' => '硹', - '' => '碙', - '' => '碀', - '' => '碖', - '' => '硻', - '' => '祼', - '' => '禂', - '' => '祽', - '' => '祹', - '' => '稑', - '' => '稘', - '' => '稙', - '' => '稒', - '' => '稗', - '' => '稕', - '' => '稢', - '' => '稓', - '@' => '稛', - 'A' => '稐', - 'B' => '窣', - 'C' => '窢', - 'D' => '窞', - 'E' => '竫', - 'F' => '筦', - 'G' => '筤', - 'H' => '筭', - 'I' => '筴', - 'J' => '筩', - 'K' => '筲', - 'L' => '筥', - 'M' => '筳', - 'N' => '筱', - 'O' => '筰', - 'P' => '筡', - 'Q' => '筸', - 'R' => '筶', - 'S' => '筣', - 'T' => '粲', - 'U' => '粴', - 'V' => '粯', - 'W' => '綈', - 'X' => '綆', - 'Y' => '綀', - 'Z' => '綍', - '[' => '絿', - '\\' => '綅', - ']' => '絺', - '^' => '綎', - '_' => '絻', - '`' => '綃', - 'a' => '絼', - 'b' => '綌', - 'c' => '綔', - 'd' => '綄', - 'e' => '絽', - 'f' => '綒', - 'g' => '罭', - 'h' => '罫', - 'i' => '罧', - 'j' => '罨', - 'k' => '罬', - 'l' => '羦', - 'm' => '羥', - 'n' => '羧', - 'o' => '翛', - 'p' => '翜', - 'q' => '耡', - 'r' => '腤', - 's' => '腠', - 't' => '腷', - 'u' => '腜', - 'v' => '腩', - 'w' => '腛', - 'x' => '腢', - 'y' => '腲', - 'z' => '朡', - '{' => '腞', - '|' => '腶', - '}' => '腧', - '~' => '腯', - 'ߡ' => '腄', - 'ߢ' => '腡', - 'ߣ' => '舝', - 'ߤ' => '艉', - 'ߥ' => '艄', - 'ߦ' => '艀', - 'ߧ' => '艂', - 'ߨ' => '艅', - 'ߩ' => '蓱', - 'ߪ' => '萿', - '߫' => '葖', - '߬' => '葶', - '߭' => '葹', - '߮' => '蒏', - '߯' => '蒍', - '߰' => '葥', - '߱' => '葑', - '߲' => '葀', - '߳' => '蒆', - 'ߴ' => '葧', - 'ߵ' => '萰', - '߶' => '葍', - '߷' => '葽', - '߸' => '葚', - '߹' => '葙', - 'ߺ' => '葴', - '߻' => '葳', - '߼' => '葝', - '߽' => '蔇', - '߾' => '葞', - '߿' => '萷', - '' => '萺', - '' => '萴', - '' => '葺', - '' => '葃', - '' => '葸', - '' => '萲', - '' => '葅', - '' => '萩', - '' => '菙', - '' => '葋', - '' => '萯', - '' => '葂', - '' => '萭', - '' => '葟', - '' => '葰', - '' => '萹', - '' => '葎', - '' => '葌', - '' => '葒', - '' => '葯', - '' => '蓅', - '' => '蒎', - '' => '萻', - '' => '葇', - '' => '萶', - '' => '萳', - '' => '葨', - '' => '葾', - '' => '葄', - '' => '萫', - '' => '葠', - '' => '葔', - '' => '葮', - '' => '葐', - '' => '蜋', - '' => '蜄', - '' => '蛷', - '' => '蜌', - '' => '蛺', - '' => '蛖', - '' => '蛵', - '' => '蝍', - '' => '蛸', - '' => '蜎', - '' => '蜉', - '' => '蜁', - '' => '蛶', - '' => '蜍', - '' => '蜅', - '' => '裖', - '' => '裋', - '' => '裍', - '' => '裎', - '' => '裞', - '' => '裛', - '' => '裚', - '' => '裌', - '' => '裐', - '' => '覅', - '' => '覛', - '' => '觟', - '' => '觥', - '' => '觤', - '@' => '觡', - 'A' => '觠', - 'B' => '觢', - 'C' => '觜', - 'D' => '触', - 'E' => '詶', - 'F' => '誆', - 'G' => '詿', - 'H' => '詡', - 'I' => '訿', - 'J' => '詷', - 'K' => '誂', - 'L' => '誄', - 'M' => '詵', - 'N' => '誃', - 'O' => '誁', - 'P' => '詴', - 'Q' => '詺', - 'R' => '谼', - 'S' => '豋', - 'T' => '豊', - 'U' => '豥', - 'V' => '豤', - 'W' => '豦', - 'X' => '貆', - 'Y' => '貄', - 'Z' => '貅', - '[' => '賌', - '\\' => '赨', - ']' => '赩', - '^' => '趑', - '_' => '趌', - '`' => '趎', - 'a' => '趏', - 'b' => '趍', - 'c' => '趓', - 'd' => '趔', - 'e' => '趐', - 'f' => '趒', - 'g' => '跰', - 'h' => '跠', - 'i' => '跬', - 'j' => '跱', - 'k' => '跮', - 'l' => '跐', - 'm' => '跩', - 'n' => '跣', - 'o' => '跢', - 'p' => '跧', - 'q' => '跲', - 'r' => '跫', - 's' => '跴', - 't' => '輆', - 'u' => '軿', - 'v' => '輁', - 'w' => '輀', - 'x' => '輅', - 'y' => '輇', - 'z' => '輈', - '{' => '輂', - '|' => '輋', - '}' => '遒', - '~' => '逿', - '' => '遄', - '' => '遉', - '' => '逽', - '' => '鄐', - '' => '鄍', - '' => '鄏', - '' => '鄑', - '' => '鄖', - '' => '鄔', - '' => '鄋', - '' => '鄎', - '' => '酮', - '' => '酯', - '' => '鉈', - '' => '鉒', - '' => '鈰', - '' => '鈺', - '' => '鉦', - '' => '鈳', - '' => '鉥', - '' => '鉞', - '' => '銃', - '' => '鈮', - '' => '鉊', - '' => '鉆', - '' => '鉭', - '' => '鉬', - '' => '鉏', - '' => '鉠', - '' => '鉧', - '' => '鉯', - '' => '鈶', - '' => '鉡', - '' => '鉰', - '' => '鈱', - '' => '鉔', - '' => '鉣', - '' => '鉐', - '' => '鉲', - '' => '鉎', - '' => '鉓', - '' => '鉌', - '' => '鉖', - '' => '鈲', - '' => '閟', - '' => '閜', - '' => '閞', - '' => '閛', - '' => '隒', - '' => '隓', - '' => '隑', - '' => '隗', - '' => '雎', - '' => '雺', - '' => '雽', - '' => '雸', - '' => '雵', - '' => '靳', - '' => '靷', - '' => '靸', - '' => '靲', - '' => '頏', - '' => '頍', - '' => '頎', - '' => '颬', - '' => '飶', - '' => '飹', - '' => '馯', - '' => '馲', - '' => '馰', - '' => '馵', - '' => '骭', - '' => '骫', - '' => '魛', - '' => '鳪', - '' => '鳭', - '' => '鳧', - '' => '麀', - '' => '黽', - '' => '僦', - '' => '僔', - '' => '僗', - '' => '僨', - '' => '僳', - '' => '僛', - '' => '僪', - '' => '僝', - '' => '僤', - '' => '僓', - '' => '僬', - '' => '僰', - '' => '僯', - '' => '僣', - '' => '僠', - '@' => '凘', - 'A' => '劀', - 'B' => '劁', - 'C' => '勩', - 'D' => '勫', - 'E' => '匰', - 'F' => '厬', - 'G' => '嘧', - 'H' => '嘕', - 'I' => '嘌', - 'J' => '嘒', - 'K' => '嗼', - 'L' => '嘏', - 'M' => '嘜', - 'N' => '嘁', - 'O' => '嘓', - 'P' => '嘂', - 'Q' => '嗺', - 'R' => '嘝', - 'S' => '嘄', - 'T' => '嗿', - 'U' => '嗹', - 'V' => '墉', - 'W' => '塼', - 'X' => '墐', - 'Y' => '墘', - 'Z' => '墆', - '[' => '墁', - '\\' => '塿', - ']' => '塴', - '^' => '墋', - '_' => '塺', - '`' => '墇', - 'a' => '墑', - 'b' => '墎', - 'c' => '塶', - 'd' => '墂', - 'e' => '墈', - 'f' => '塻', - 'g' => '墔', - 'h' => '墏', - 'i' => '壾', - 'j' => '奫', - 'k' => '嫜', - 'l' => '嫮', - 'm' => '嫥', - 'n' => '嫕', - 'o' => '嫪', - 'p' => '嫚', - 'q' => '嫭', - 'r' => '嫫', - 's' => '嫳', - 't' => '嫢', - 'u' => '嫠', - 'v' => '嫛', - 'w' => '嫬', - 'x' => '嫞', - 'y' => '嫝', - 'z' => '嫙', - '{' => '嫨', - '|' => '嫟', - '}' => '孷', - '~' => '寠', - '' => '寣', - '' => '屣', - '' => '嶂', - '' => '嶀', - '' => '嵽', - '' => '嶆', - '' => '嵺', - '' => '嶁', - '' => '嵷', - '' => '嶊', - '' => '嶉', - '' => '嶈', - '' => '嵾', - '' => '嵼', - '' => '嶍', - '' => '嵹', - '' => '嵿', - '' => '幘', - '' => '幙', - '' => '幓', - '' => '廘', - '' => '廑', - '' => '廗', - '' => '廎', - '' => '廜', - '' => '廕', - '' => '廙', - '' => '廒', - '' => '廔', - '' => '彄', - '' => '彃', - '' => '彯', - '' => '徶', - '' => '愬', - '' => '愨', - '' => '慁', - '' => '慞', - '' => '慱', - '' => '慳', - '' => '慒', - '' => '慓', - '' => '慲', - '' => '慬', - '' => '憀', - '' => '慴', - '' => '慔', - '' => '慺', - '' => '慛', - '' => '慥', - '' => '愻', - '' => '慪', - '' => '慡', - '' => '慖', - '' => '戩', - '' => '戧', - '' => '戫', - '' => '搫', - '' => '摍', - '' => '摛', - '' => '摝', - '' => '摴', - '' => '摶', - '' => '摲', - '' => '摳', - '' => '摽', - '' => '摵', - '' => '摦', - '' => '撦', - '' => '摎', - '' => '撂', - '' => '摞', - '' => '摜', - '' => '摋', - '' => '摓', - '' => '摠', - '' => '摐', - '' => '摿', - '' => '搿', - '' => '摬', - '' => '摫', - '' => '摙', - '' => '摥', - '' => '摷', - '' => '敳', - '' => '斠', - '' => '暡', - '' => '暠', - '' => '暟', - '' => '朅', - '' => '朄', - '' => '朢', - '' => '榱', - '' => '榶', - '' => '槉', - '@' => '榠', - 'A' => '槎', - 'B' => '榖', - 'C' => '榰', - 'D' => '榬', - 'E' => '榼', - 'F' => '榑', - 'G' => '榙', - 'H' => '榎', - 'I' => '榧', - 'J' => '榍', - 'K' => '榩', - 'L' => '榾', - 'M' => '榯', - 'N' => '榿', - 'O' => '槄', - 'P' => '榽', - 'Q' => '榤', - 'R' => '槔', - 'S' => '榹', - 'T' => '槊', - 'U' => '榚', - 'V' => '槏', - 'W' => '榳', - 'X' => '榓', - 'Y' => '榪', - 'Z' => '榡', - '[' => '榞', - '\\' => '槙', - ']' => '榗', - '^' => '榐', - '_' => '槂', - '`' => '榵', - 'a' => '榥', - 'b' => '槆', - 'c' => '歊', - 'd' => '歍', - 'e' => '歋', - 'f' => '殞', - 'g' => '殟', - 'h' => '殠', - 'i' => '毃', - 'j' => '毄', - 'k' => '毾', - 'l' => '滎', - 'm' => '滵', - 'n' => '滱', - 'o' => '漃', - 'p' => '漥', - 'q' => '滸', - 'r' => '漷', - 's' => '滻', - 't' => '漮', - 'u' => '漉', - 'v' => '潎', - 'w' => '漙', - 'x' => '漚', - 'y' => '漧', - 'z' => '漘', - '{' => '漻', - '|' => '漒', - '}' => '滭', - '~' => '漊', - '' => '漶', - '' => '潳', - '' => '滹', - '' => '滮', - '' => '漭', - '' => '潀', - '' => '漰', - '' => '漼', - '' => '漵', - '' => '滫', - '' => '漇', - '' => '漎', - '' => '潃', - '' => '漅', - '' => '滽', - '' => '滶', - '' => '漹', - '' => '漜', - '' => '滼', - '' => '漺', - '' => '漟', - '' => '漍', - '' => '漞', - '' => '漈', - '' => '漡', - '' => '熇', - '' => '熐', - '' => '熉', - '' => '熀', - '' => '熅', - '' => '熂', - '' => '熏', - '' => '煻', - '' => '熆', - '' => '熁', - '' => '熗', - '' => '牄', - '' => '牓', - '' => '犗', - '' => '犕', - '' => '犓', - '' => '獃', - '' => '獍', - '' => '獑', - '' => '獌', - '' => '瑢', - '' => '瑳', - '' => '瑱', - '' => '瑵', - '' => '瑲', - '' => '瑧', - '' => '瑮', - '' => '甀', - '' => '甂', - '' => '甃', - '' => '畽', - '' => '疐', - '' => '瘖', - '' => '瘈', - '' => '瘌', - '' => '瘕', - '' => '瘑', - '' => '瘊', - '' => '瘔', - '' => '皸', - '' => '瞁', - '' => '睼', - '' => '瞅', - '' => '瞂', - '' => '睮', - '' => '瞀', - '' => '睯', - '' => '睾', - '' => '瞃', - '' => '碲', - '' => '碪', - '' => '碴', - '' => '碭', - '' => '碨', - '' => '硾', - '' => '碫', - '' => '碞', - '' => '碥', - '' => '碠', - '' => '碬', - '' => '碢', - '' => '碤', - '' => '禘', - '' => '禊', - '' => '禋', - '' => '禖', - '' => '禕', - '' => '禔', - '' => '禓', - '@' => '禗', - 'A' => '禈', - 'B' => '禒', - 'C' => '禐', - 'D' => '稫', - 'E' => '穊', - 'F' => '稰', - 'G' => '稯', - 'H' => '稨', - 'I' => '稦', - 'J' => '窨', - 'K' => '窫', - 'L' => '窬', - 'M' => '竮', - 'N' => '箈', - 'O' => '箜', - 'P' => '箊', - 'Q' => '箑', - 'R' => '箐', - 'S' => '箖', - 'T' => '箍', - 'U' => '箌', - 'V' => '箛', - 'W' => '箎', - 'X' => '箅', - 'Y' => '箘', - 'Z' => '劄', - '[' => '箙', - '\\' => '箤', - ']' => '箂', - '^' => '粻', - '_' => '粿', - '`' => '粼', - 'a' => '粺', - 'b' => '綧', - 'c' => '綷', - 'd' => '緂', - 'e' => '綣', - 'f' => '綪', - 'g' => '緁', - 'h' => '緀', - 'i' => '緅', - 'j' => '綝', - 'k' => '緎', - 'l' => '緄', - 'm' => '緆', - 'n' => '緋', - 'o' => '緌', - 'p' => '綯', - 'q' => '綹', - 'r' => '綖', - 's' => '綼', - 't' => '綟', - 'u' => '綦', - 'v' => '綮', - 'w' => '綩', - 'x' => '綡', - 'y' => '緉', - 'z' => '罳', - '{' => '翢', - '|' => '翣', - '}' => '翥', - '~' => '翞', - '' => '耤', - '' => '聝', - '' => '聜', - '' => '膉', - '' => '膆', - '' => '膃', - '' => '膇', - '' => '膍', - '' => '膌', - '' => '膋', - '' => '舕', - '' => '蒗', - '' => '蒤', - '' => '蒡', - '' => '蒟', - '' => '蒺', - '' => '蓎', - '' => '蓂', - '' => '蒬', - '' => '蒮', - '' => '蒫', - '' => '蒹', - '' => '蒴', - '' => '蓁', - '' => '蓍', - '' => '蒪', - '' => '蒚', - '' => '蒱', - '' => '蓐', - '' => '蒝', - '' => '蒧', - '' => '蒻', - '' => '蒢', - '' => '蒔', - '' => '蓇', - '' => '蓌', - '' => '蒛', - '' => '蒩', - '' => '蒯', - '' => '蒨', - '' => '蓖', - '' => '蒘', - '' => '蒶', - '' => '蓏', - '' => '蒠', - '' => '蓗', - '' => '蓔', - '' => '蓒', - '' => '蓛', - '' => '蒰', - '' => '蒑', - '' => '虡', - '' => '蜳', - '' => '蜣', - '' => '蜨', - '' => '蝫', - '' => '蝀', - '' => '蜮', - '' => '蜞', - '' => '蜡', - '' => '蜙', - '' => '蜛', - '' => '蝃', - '' => '蜬', - '' => '蝁', - '' => '蜾', - '' => '蝆', - '' => '蜠', - '' => '蜲', - '' => '蜪', - '' => '蜭', - '' => '蜼', - '' => '蜒', - '' => '蜺', - '' => '蜱', - '' => '蜵', - '' => '蝂', - '' => '蜦', - '' => '蜧', - '' => '蜸', - '' => '蜤', - '' => '蜚', - '' => '蜰', - '' => '蜑', - '' => '裷', - '' => '裧', - '' => '裱', - '' => '裲', - '' => '裺', - '' => '裾', - '' => '裮', - '' => '裼', - '' => '裶', - '' => '裻', - '@' => '裰', - 'A' => '裬', - 'B' => '裫', - 'C' => '覝', - 'D' => '覡', - 'E' => '覟', - 'F' => '覞', - 'G' => '觩', - 'H' => '觫', - 'I' => '觨', - 'J' => '誫', - 'K' => '誙', - 'L' => '誋', - 'M' => '誒', - 'N' => '誏', - 'O' => '誖', - 'P' => '谽', - 'Q' => '豨', - 'R' => '豩', - 'S' => '賕', - 'T' => '賏', - 'U' => '賗', - 'V' => '趖', - 'W' => '踉', - 'X' => '踂', - 'Y' => '跿', - 'Z' => '踍', - '[' => '跽', - '\\' => '踊', - ']' => '踃', - '^' => '踇', - '_' => '踆', - '`' => '踅', - 'a' => '跾', - 'b' => '踀', - 'c' => '踄', - 'd' => '輐', - 'e' => '輑', - 'f' => '輎', - 'g' => '輍', - 'h' => '鄣', - 'i' => '鄜', - 'j' => '鄠', - 'k' => '鄢', - 'l' => '鄟', - 'm' => '鄝', - 'n' => '鄚', - 'o' => '鄤', - 'p' => '鄡', - 'q' => '鄛', - 'r' => '酺', - 's' => '酲', - 't' => '酹', - 'u' => '酳', - 'v' => '銥', - 'w' => '銤', - 'x' => '鉶', - 'y' => '銛', - 'z' => '鉺', - '{' => '銠', - '|' => '銔', - '}' => '銪', - '~' => '銍', - '' => '銦', - '' => '銚', - '' => '銫', - '' => '鉹', - '' => '銗', - '' => '鉿', - '' => '銣', - '' => '鋮', - '' => '銎', - '' => '銂', - '' => '銕', - '' => '銢', - '' => '鉽', - '' => '銈', - '' => '銡', - '' => '銊', - '' => '銆', - '' => '銌', - '' => '銙', - '' => '銧', - '' => '鉾', - '' => '銇', - '' => '銩', - '' => '銝', - '' => '銋', - '' => '鈭', - '' => '隞', - '' => '隡', - '' => '雿', - '' => '靘', - '' => '靽', - '' => '靺', - '' => '靾', - '' => '鞃', - '' => '鞀', - '' => '鞂', - '' => '靻', - '' => '鞄', - '' => '鞁', - '' => '靿', - '' => '韎', - '' => '韍', - '' => '頖', - '' => '颭', - '' => '颮', - '' => '餂', - '' => '餀', - '' => '餇', - '' => '馝', - '' => '馜', - '' => '駃', - '' => '馹', - '' => '馻', - '' => '馺', - '' => '駂', - '' => '馽', - '' => '駇', - '' => '骱', - '' => '髣', - '' => '髧', - '' => '鬾', - '' => '鬿', - '' => '魠', - '' => '魡', - '' => '魟', - '' => '鳱', - '' => '鳲', - '' => '鳵', - '' => '麧', - '' => '僿', - '' => '儃', - '' => '儰', - '' => '僸', - '' => '儆', - '' => '儇', - '' => '僶', - '' => '僾', - '' => '儋', - '' => '儌', - '' => '僽', - '' => '儊', - '' => '劋', - '' => '劌', - '' => '勱', - '' => '勯', - '' => '噈', - '' => '噂', - '' => '噌', - '' => '嘵', - '' => '噁', - '' => '噊', - '' => '噉', - '' => '噆', - '' => '噘', - '@' => '噚', - 'A' => '噀', - 'B' => '嘳', - 'C' => '嘽', - 'D' => '嘬', - 'E' => '嘾', - 'F' => '嘸', - 'G' => '嘪', - 'H' => '嘺', - 'I' => '圚', - 'J' => '墫', - 'K' => '墝', - 'L' => '墱', - 'M' => '墠', - 'N' => '墣', - 'O' => '墯', - 'P' => '墬', - 'Q' => '墥', - 'R' => '墡', - 'S' => '壿', - 'T' => '嫿', - 'U' => '嫴', - 'V' => '嫽', - 'W' => '嫷', - 'X' => '嫶', - 'Y' => '嬃', - 'Z' => '嫸', - '[' => '嬂', - '\\' => '嫹', - ']' => '嬁', - '^' => '嬇', - '_' => '嬅', - '`' => '嬏', - 'a' => '屧', - 'b' => '嶙', - 'c' => '嶗', - 'd' => '嶟', - 'e' => '嶒', - 'f' => '嶢', - 'g' => '嶓', - 'h' => '嶕', - 'i' => '嶠', - 'j' => '嶜', - 'k' => '嶡', - 'l' => '嶚', - 'm' => '嶞', - 'n' => '幩', - 'o' => '幝', - 'p' => '幠', - 'q' => '幜', - 'r' => '緳', - 's' => '廛', - 't' => '廞', - 'u' => '廡', - 'v' => '彉', - 'w' => '徲', - 'x' => '憋', - 'y' => '憃', - 'z' => '慹', - '{' => '憱', - '|' => '憰', - '}' => '憢', - '~' => '憉', - '' => '憛', - '' => '憓', - '' => '憯', - '' => '憭', - '' => '憟', - '' => '憒', - '' => '憪', - '' => '憡', - '' => '憍', - '' => '慦', - '' => '憳', - '' => '戭', - '' => '摮', - '' => '摰', - '' => '撖', - '' => '撠', - '' => '撅', - '' => '撗', - '' => '撜', - '' => '撏', - '' => '撋', - '' => '撊', - '' => '撌', - '' => '撣', - '' => '撟', - '' => '摨', - '' => '撱', - '' => '撘', - '' => '敶', - '' => '敺', - '' => '敹', - '' => '敻', - '' => '斲', - '' => '斳', - '' => '暵', - '' => '暰', - '' => '暩', - '' => '暲', - '' => '暷', - '' => '暪', - '' => '暯', - '' => '樀', - '' => '樆', - '' => '樗', - '' => '槥', - '' => '槸', - '' => '樕', - '' => '槱', - '' => '槤', - '' => '樠', - '' => '槿', - '' => '槬', - '' => '槢', - '' => '樛', - '' => '樝', - '' => '槾', - '' => '樧', - '' => '槲', - '' => '槮', - '' => '樔', - '' => '槷', - '' => '槧', - '' => '橀', - '' => '樈', - '' => '槦', - '' => '槻', - '' => '樍', - '' => '槼', - '' => '槫', - '' => '樉', - '' => '樄', - '' => '樘', - '' => '樥', - '' => '樏', - '' => '槶', - '' => '樦', - '' => '樇', - '' => '槴', - '' => '樖', - '' => '歑', - '' => '殥', - '' => '殣', - '' => '殢', - '' => '殦', - '' => '氁', - '' => '氀', - '' => '毿', - '' => '氂', - '' => '潁', - '' => '漦', - '' => '潾', - '' => '澇', - '' => '濆', - '' => '澒', - '@' => '澍', - 'A' => '澉', - 'B' => '澌', - 'C' => '潢', - 'D' => '潏', - 'E' => '澅', - 'F' => '潚', - 'G' => '澖', - 'H' => '潶', - 'I' => '潬', - 'J' => '澂', - 'K' => '潕', - 'L' => '潲', - 'M' => '潒', - 'N' => '潐', - 'O' => '潗', - 'P' => '澔', - 'Q' => '澓', - 'R' => '潝', - 'S' => '漀', - 'T' => '潡', - 'U' => '潫', - 'V' => '潽', - 'W' => '潧', - 'X' => '澐', - 'Y' => '潓', - 'Z' => '澋', - '[' => '潩', - '\\' => '潿', - ']' => '澕', - '^' => '潣', - '_' => '潷', - '`' => '潪', - 'a' => '潻', - 'b' => '熲', - 'c' => '熯', - 'd' => '熛', - 'e' => '熰', - 'f' => '熠', - 'g' => '熚', - 'h' => '熩', - 'i' => '熵', - 'j' => '熝', - 'k' => '熥', - 'l' => '熞', - 'm' => '熤', - 'n' => '熡', - 'o' => '熪', - 'p' => '熜', - 'q' => '熧', - 'r' => '熳', - 's' => '犘', - 't' => '犚', - 'u' => '獘', - 'v' => '獒', - 'w' => '獞', - 'x' => '獟', - 'y' => '獠', - 'z' => '獝', - '{' => '獛', - '|' => '獡', - '}' => '獚', - '~' => '獙', - '' => '獢', - '' => '璇', - '' => '璉', - '' => '璊', - '' => '璆', - '' => '璁', - '' => '瑽', - '' => '璅', - '' => '璈', - '' => '瑼', - '' => '瑹', - '' => '甈', - '' => '甇', - '' => '畾', - '' => '瘥', - '' => '瘞', - '' => '瘙', - '' => '瘝', - '' => '瘜', - '' => '瘣', - '' => '瘚', - '' => '瘨', - '' => '瘛', - '' => '皜', - '' => '皝', - '' => '皞', - '' => '皛', - '' => '瞍', - '' => '瞏', - '' => '瞉', - '' => '瞈', - '' => '磍', - '' => '碻', - '' => '磏', - '' => '磌', - '' => '磑', - '' => '磎', - '' => '磔', - '' => '磈', - '' => '磃', - '' => '磄', - '' => '磉', - '' => '禚', - '' => '禡', - '' => '禠', - '' => '禜', - '' => '禢', - '' => '禛', - '' => '歶', - '' => '稹', - '' => '窲', - '' => '窴', - '' => '窳', - '' => '箷', - '' => '篋', - '' => '箾', - '' => '箬', - '' => '篎', - '' => '箯', - '' => '箹', - '' => '篊', - '' => '箵', - '' => '糅', - '' => '糈', - '' => '糌', - '' => '糋', - '' => '緷', - '' => '緛', - '' => '緪', - '' => '緧', - '' => '緗', - '' => '緡', - '' => '縃', - '' => '緺', - '' => '緦', - '' => '緶', - '' => '緱', - '' => '緰', - '' => '緮', - '' => '緟', - '' => '罶', - '' => '羬', - '' => '羰', - '' => '羭', - '' => '翭', - '' => '翫', - '' => '翪', - '' => '翬', - '' => '翦', - '' => '翨', - '' => '聤', - '' => '聧', - '' => '膣', - '' => '膟', - '@' => '膞', - 'A' => '膕', - 'B' => '膢', - 'C' => '膙', - 'D' => '膗', - 'E' => '舖', - 'F' => '艏', - 'G' => '艓', - 'H' => '艒', - 'I' => '艐', - 'J' => '艎', - 'K' => '艑', - 'L' => '蔤', - 'M' => '蔻', - 'N' => '蔏', - 'O' => '蔀', - 'P' => '蔩', - 'Q' => '蔎', - 'R' => '蔉', - 'S' => '蔍', - 'T' => '蔟', - 'U' => '蔊', - 'V' => '蔧', - 'W' => '蔜', - 'X' => '蓻', - 'Y' => '蔫', - 'Z' => '蓺', - '[' => '蔈', - '\\' => '蔌', - ']' => '蓴', - '^' => '蔪', - '_' => '蓲', - '`' => '蔕', - 'a' => '蓷', - 'b' => '蓫', - 'c' => '蓳', - 'd' => '蓼', - 'e' => '蔒', - 'f' => '蓪', - 'g' => '蓩', - 'h' => '蔖', - 'i' => '蓾', - 'j' => '蔨', - 'k' => '蔝', - 'l' => '蔮', - 'm' => '蔂', - 'n' => '蓽', - 'o' => '蔞', - 'p' => '蓶', - 'q' => '蔱', - 'r' => '蔦', - 's' => '蓧', - 't' => '蓨', - 'u' => '蓰', - 'v' => '蓯', - 'w' => '蓹', - 'x' => '蔘', - 'y' => '蔠', - 'z' => '蔰', - '{' => '蔋', - '|' => '蔙', - '}' => '蔯', - '~' => '虢', - '' => '蝖', - '' => '蝣', - '' => '蝤', - '' => '蝷', - '' => '蟡', - '' => '蝳', - '' => '蝘', - '' => '蝔', - '' => '蝛', - '' => '蝒', - '' => '蝡', - '' => '蝚', - '' => '蝑', - '' => '蝞', - '' => '蝭', - '' => '蝪', - '' => '蝐', - '' => '蝎', - '' => '蝟', - '' => '蝝', - '' => '蝯', - '' => '蝬', - '' => '蝺', - '' => '蝮', - '' => '蝜', - '' => '蝥', - '' => '蝏', - '' => '蝻', - '' => '蝵', - '' => '蝢', - '' => '蝧', - '' => '蝩', - '' => '衚', - '' => '褅', - '' => '褌', - '' => '褔', - '' => '褋', - '' => '褗', - '' => '褘', - '' => '褙', - '' => '褆', - '' => '褖', - '' => '褑', - '' => '褎', - '' => '褉', - '' => '覢', - '' => '覤', - '' => '覣', - '' => '觭', - '' => '觰', - '' => '觬', - '' => '諏', - '' => '諆', - '' => '誸', - '' => '諓', - '' => '諑', - '' => '諔', - '' => '諕', - '' => '誻', - '' => '諗', - '' => '誾', - '' => '諀', - '' => '諅', - '' => '諘', - '' => '諃', - '' => '誺', - '' => '誽', - '' => '諙', - '' => '谾', - '' => '豍', - '' => '貏', - '' => '賥', - '' => '賟', - '' => '賙', - '' => '賨', - '' => '賚', - '' => '賝', - '' => '賧', - '' => '趠', - '' => '趜', - '' => '趡', - '' => '趛', - '' => '踠', - '' => '踣', - '' => '踥', - '' => '踤', - '' => '踮', - '' => '踕', - '' => '踛', - '' => '踖', - '' => '踑', - '' => '踙', - '' => '踦', - '' => '踧', - '@' => '踔', - 'A' => '踒', - 'B' => '踘', - 'C' => '踓', - 'D' => '踜', - 'E' => '踗', - 'F' => '踚', - 'G' => '輬', - 'H' => '輤', - 'I' => '輘', - 'J' => '輚', - 'K' => '輠', - 'L' => '輣', - 'M' => '輖', - 'N' => '輗', - 'O' => '遳', - 'P' => '遰', - 'Q' => '遯', - 'R' => '遧', - 'S' => '遫', - 'T' => '鄯', - 'U' => '鄫', - 'V' => '鄩', - 'W' => '鄪', - 'X' => '鄲', - 'Y' => '鄦', - 'Z' => '鄮', - '[' => '醅', - '\\' => '醆', - ']' => '醊', - '^' => '醁', - '_' => '醂', - '`' => '醄', - 'a' => '醀', - 'b' => '鋐', - 'c' => '鋃', - 'd' => '鋄', - 'e' => '鋀', - 'f' => '鋙', - 'g' => '銶', - 'h' => '鋏', - 'i' => '鋱', - 'j' => '鋟', - 'k' => '鋘', - 'l' => '鋩', - 'm' => '鋗', - 'n' => '鋝', - 'o' => '鋌', - 'p' => '鋯', - 'q' => '鋂', - 'r' => '鋨', - 's' => '鋊', - 't' => '鋈', - 'u' => '鋎', - 'v' => '鋦', - 'w' => '鋍', - 'x' => '鋕', - 'y' => '鋉', - 'z' => '鋠', - '{' => '鋞', - '|' => '鋧', - '}' => '鋑', - '~' => '鋓', - '' => '銵', - '' => '鋡', - '' => '鋆', - '' => '銴', - '' => '镼', - '' => '閬', - '' => '閫', - '' => '閮', - '' => '閰', - '' => '隤', - '' => '隢', - '' => '雓', - '' => '霅', - '' => '霈', - '' => '霂', - '' => '靚', - '' => '鞊', - '' => '鞎', - '' => '鞈', - '' => '韐', - '' => '韏', - '' => '頞', - '' => '頝', - '' => '頦', - '' => '頩', - '' => '頨', - '' => '頠', - '' => '頛', - '' => '頧', - '' => '颲', - '' => '餈', - '' => '飺', - '' => '餑', - '' => '餔', - '' => '餖', - '' => '餗', - '' => '餕', - '' => '駜', - '' => '駍', - '' => '駏', - '' => '駓', - '' => '駔', - '' => '駎', - '' => '駉', - '' => '駖', - '' => '駘', - '' => '駋', - '' => '駗', - '' => '駌', - '' => '骳', - '' => '髬', - '' => '髫', - '' => '髳', - '' => '髲', - '' => '髱', - '' => '魆', - '' => '魃', - '' => '魧', - '' => '魴', - '' => '魱', - '' => '魦', - '' => '魶', - '' => '魵', - '' => '魰', - '' => '魨', - '' => '魤', - '' => '魬', - '' => '鳼', - '' => '鳺', - '' => '鳽', - '' => '鳿', - '' => '鳷', - '' => '鴇', - '' => '鴀', - '' => '鳹', - '' => '鳻', - '' => '鴈', - '' => '鴅', - '' => '鴄', - '' => '麃', - '' => '黓', - '' => '鼏', - '' => '鼐', - '' => '儜', - '' => '儓', - '' => '儗', - '' => '儚', - '' => '儑', - '' => '凞', - '' => '匴', - '' => '叡', - '' => '噰', - '' => '噠', - '' => '噮', - '@' => '噳', - 'A' => '噦', - 'B' => '噣', - 'C' => '噭', - 'D' => '噲', - 'E' => '噞', - 'F' => '噷', - 'G' => '圜', - 'H' => '圛', - 'I' => '壈', - 'J' => '墽', - 'K' => '壉', - 'L' => '墿', - 'M' => '墺', - 'N' => '壂', - 'O' => '墼', - 'P' => '壆', - 'Q' => '嬗', - 'R' => '嬙', - 'S' => '嬛', - 'T' => '嬡', - 'U' => '嬔', - 'V' => '嬓', - 'W' => '嬐', - 'X' => '嬖', - 'Y' => '嬨', - 'Z' => '嬚', - '[' => '嬠', - '\\' => '嬞', - ']' => '寯', - '^' => '嶬', - '_' => '嶱', - '`' => '嶩', - 'a' => '嶧', - 'b' => '嶵', - 'c' => '嶰', - 'd' => '嶮', - 'e' => '嶪', - 'f' => '嶨', - 'g' => '嶲', - 'h' => '嶭', - 'i' => '嶯', - 'j' => '嶴', - 'k' => '幧', - 'l' => '幨', - 'm' => '幦', - 'n' => '幯', - 'o' => '廩', - 'p' => '廧', - 'q' => '廦', - 'r' => '廨', - 's' => '廥', - 't' => '彋', - 'u' => '徼', - 'v' => '憝', - 'w' => '憨', - 'x' => '憖', - 'y' => '懅', - 'z' => '憴', - '{' => '懆', - '|' => '懁', - '}' => '懌', - '~' => '憺', - '' => '憿', - '' => '憸', - '' => '憌', - '' => '擗', - '' => '擖', - '' => '擐', - '' => '擏', - '' => '擉', - '' => '撽', - '' => '撉', - '' => '擃', - '' => '擛', - '' => '擳', - '' => '擙', - '' => '攳', - '' => '敿', - '' => '敼', - '' => '斢', - '' => '曈', - '' => '暾', - '' => '曀', - '' => '曊', - '' => '曋', - '' => '曏', - '' => '暽', - '' => '暻', - '' => '暺', - '' => '曌', - '' => '朣', - '' => '樴', - '' => '橦', - '' => '橉', - '' => '橧', - '' => '樲', - '' => '橨', - '' => '樾', - '' => '橝', - '' => '橭', - '' => '橶', - '' => '橛', - '' => '橑', - '' => '樨', - '' => '橚', - '' => '樻', - '' => '樿', - '' => '橁', - '' => '橪', - '' => '橤', - '' => '橐', - '' => '橏', - '' => '橔', - '' => '橯', - '' => '橩', - '' => '橠', - '' => '樼', - '' => '橞', - '' => '橖', - '' => '橕', - '' => '橍', - '' => '橎', - '' => '橆', - '' => '歕', - '' => '歔', - '' => '歖', - '' => '殧', - '' => '殪', - '' => '殫', - '' => '毈', - '' => '毇', - '' => '氄', - '' => '氃', - '' => '氆', - '' => '澭', - '' => '濋', - '' => '澣', - '' => '濇', - '' => '澼', - '' => '濎', - '' => '濈', - '' => '潞', - '' => '濄', - '' => '澽', - '' => '澞', - '' => '濊', - '' => '澨', - '' => '瀄', - '' => '澥', - '' => '澮', - '' => '澺', - '' => '澬', - '' => '澪', - '' => '濏', - '' => '澿', - '' => '澸', - '@' => '澢', - 'A' => '濉', - 'B' => '澫', - 'C' => '濍', - 'D' => '澯', - 'E' => '澲', - 'F' => '澰', - 'G' => '燅', - 'H' => '燂', - 'I' => '熿', - 'J' => '熸', - 'K' => '燖', - 'L' => '燀', - 'M' => '燁', - 'N' => '燋', - 'O' => '燔', - 'P' => '燊', - 'Q' => '燇', - 'R' => '燏', - 'S' => '熽', - 'T' => '燘', - 'U' => '熼', - 'V' => '燆', - 'W' => '燚', - 'X' => '燛', - 'Y' => '犝', - 'Z' => '犞', - '[' => '獩', - '\\' => '獦', - ']' => '獧', - '^' => '獬', - '_' => '獥', - '`' => '獫', - 'a' => '獪', - 'b' => '瑿', - 'c' => '璚', - 'd' => '璠', - 'e' => '璔', - 'f' => '璒', - 'g' => '璕', - 'h' => '璡', - 'i' => '甋', - 'j' => '疀', - 'k' => '瘯', - 'l' => '瘭', - 'm' => '瘱', - 'n' => '瘽', - 'o' => '瘳', - 'p' => '瘼', - 'q' => '瘵', - 'r' => '瘲', - 's' => '瘰', - 't' => '皻', - 'u' => '盦', - 'v' => '瞚', - 'w' => '瞝', - 'x' => '瞡', - 'y' => '瞜', - 'z' => '瞛', - '{' => '瞢', - '|' => '瞣', - '}' => '瞕', - '~' => '瞙', - '' => '瞗', - '' => '磝', - '' => '磩', - '' => '磥', - '' => '磪', - '' => '磞', - '' => '磣', - '' => '磛', - '' => '磡', - '' => '磢', - '' => '磭', - '' => '磟', - '' => '磠', - '' => '禤', - '' => '穄', - '' => '穈', - '' => '穇', - '' => '窶', - '' => '窸', - '' => '窵', - '' => '窱', - '' => '窷', - '' => '篞', - '' => '篣', - '' => '篧', - '' => '篝', - '' => '篕', - '' => '篥', - '' => '篚', - '' => '篨', - '' => '篹', - '' => '篔', - '' => '篪', - '' => '篢', - '' => '篜', - '' => '篫', - '' => '篘', - '' => '篟', - '' => '糒', - '' => '糔', - '' => '糗', - '' => '糐', - '' => '糑', - '' => '縒', - '' => '縡', - '' => '縗', - '' => '縌', - '' => '縟', - '' => '縠', - '' => '縓', - '' => '縎', - '' => '縜', - '' => '縕', - '' => '縚', - '' => '縢', - '' => '縋', - '' => '縏', - '' => '縖', - '' => '縍', - '' => '縔', - '' => '縥', - '' => '縤', - '' => '罃', - '' => '罻', - '' => '罼', - '' => '罺', - '' => '羱', - '' => '翯', - '' => '耪', - '' => '耩', - '' => '聬', - '' => '膱', - '' => '膦', - '' => '膮', - '' => '膹', - '' => '膵', - '' => '膫', - '' => '膰', - '' => '膬', - '' => '膴', - '' => '膲', - '' => '膷', - '' => '膧', - '' => '臲', - '' => '艕', - '' => '艖', - '' => '艗', - '' => '蕖', - '' => '蕅', - '' => '蕫', - '' => '蕍', - '' => '蕓', - '' => '蕡', - '' => '蕘', - '@' => '蕀', - 'A' => '蕆', - 'B' => '蕤', - 'C' => '蕁', - 'D' => '蕢', - 'E' => '蕄', - 'F' => '蕑', - 'G' => '蕇', - 'H' => '蕣', - 'I' => '蔾', - 'J' => '蕛', - 'K' => '蕱', - 'L' => '蕎', - 'M' => '蕮', - 'N' => '蕵', - 'O' => '蕕', - 'P' => '蕧', - 'Q' => '蕠', - 'R' => '薌', - 'S' => '蕦', - 'T' => '蕝', - 'U' => '蕔', - 'V' => '蕥', - 'W' => '蕬', - 'X' => '虣', - 'Y' => '虥', - 'Z' => '虤', - '[' => '螛', - '\\' => '螏', - ']' => '螗', - '^' => '螓', - '_' => '螒', - '`' => '螈', - 'a' => '螁', - 'b' => '螖', - 'c' => '螘', - 'd' => '蝹', - 'e' => '螇', - 'f' => '螣', - 'g' => '螅', - 'h' => '螐', - 'i' => '螑', - 'j' => '螝', - 'k' => '螄', - 'l' => '螔', - 'm' => '螜', - 'n' => '螚', - 'o' => '螉', - 'p' => '褞', - 'q' => '褦', - 'r' => '褰', - 's' => '褭', - 't' => '褮', - 'u' => '褧', - 'v' => '褱', - 'w' => '褢', - 'x' => '褩', - 'y' => '褣', - 'z' => '褯', - '{' => '褬', - '|' => '褟', - '}' => '觱', - '~' => '諠', - '' => '諢', - '' => '諲', - '' => '諴', - '' => '諵', - '' => '諝', - '' => '謔', - '' => '諤', - '' => '諟', - '' => '諰', - '' => '諈', - '' => '諞', - '' => '諡', - '' => '諨', - '' => '諿', - '' => '諯', - '' => '諻', - '' => '貑', - '' => '貒', - '' => '貐', - '' => '賵', - '' => '賮', - '' => '賱', - '' => '賰', - '' => '賳', - '' => '赬', - '' => '赮', - '' => '趥', - '' => '趧', - '' => '踳', - '' => '踾', - '' => '踸', - '' => '蹀', - '' => '蹅', - '' => '踶', - '' => '踼', - '' => '踽', - '' => '蹁', - '' => '踰', - '' => '踿', - '' => '躽', - '' => '輶', - '' => '輮', - '' => '輵', - '' => '輲', - '' => '輹', - '' => '輷', - '' => '輴', - '' => '遶', - '' => '遹', - '' => '遻', - '' => '邆', - '' => '郺', - '' => '鄳', - '' => '鄵', - '' => '鄶', - '' => '醓', - '' => '醐', - '' => '醑', - '' => '醍', - '' => '醏', - '' => '錧', - '' => '錞', - '' => '錈', - '' => '錟', - '' => '錆', - '' => '錏', - '' => '鍺', - '' => '錸', - '' => '錼', - '' => '錛', - '' => '錣', - '' => '錒', - '' => '錁', - '' => '鍆', - '' => '錭', - '' => '錎', - '' => '錍', - '' => '鋋', - '' => '錝', - '' => '鋺', - '' => '錥', - '' => '錓', - '' => '鋹', - '' => '鋷', - '' => '錴', - '' => '錂', - '' => '錤', - '' => '鋿', - '' => '錩', - '' => '錹', - '' => '錵', - '' => '錪', - '' => '錔', - '' => '錌', - '@' => '錋', - 'A' => '鋾', - 'B' => '錉', - 'C' => '錀', - 'D' => '鋻', - 'E' => '錖', - 'F' => '閼', - 'G' => '闍', - 'H' => '閾', - 'I' => '閹', - 'J' => '閺', - 'K' => '閶', - 'L' => '閿', - 'M' => '閵', - 'N' => '閽', - 'O' => '隩', - 'P' => '雔', - 'Q' => '霋', - 'R' => '霒', - 'S' => '霐', - 'T' => '鞙', - 'U' => '鞗', - 'V' => '鞔', - 'W' => '韰', - 'X' => '韸', - 'Y' => '頵', - 'Z' => '頯', - '[' => '頲', - '\\' => '餤', - ']' => '餟', - '^' => '餧', - '_' => '餩', - '`' => '馞', - 'a' => '駮', - 'b' => '駬', - 'c' => '駥', - 'd' => '駤', - 'e' => '駰', - 'f' => '駣', - 'g' => '駪', - 'h' => '駩', - 'i' => '駧', - 'j' => '骹', - 'k' => '骿', - 'l' => '骴', - 'm' => '骻', - 'n' => '髶', - 'o' => '髺', - 'p' => '髹', - 'q' => '髷', - 'r' => '鬳', - 's' => '鮀', - 't' => '鮅', - 'u' => '鮇', - 'v' => '魼', - 'w' => '魾', - 'x' => '魻', - 'y' => '鮂', - 'z' => '鮓', - '{' => '鮒', - '|' => '鮐', - '}' => '魺', - '~' => '鮕', - '' => '魽', - '' => '鮈', - '' => '鴥', - '' => '鴗', - '' => '鴠', - '' => '鴞', - '' => '鴔', - '' => '鴩', - '' => '鴝', - '' => '鴘', - '' => '鴢', - '' => '鴐', - '' => '鴙', - '' => '鴟', - '' => '麈', - '' => '麆', - '' => '麇', - '' => '麮', - '' => '麭', - '' => '黕', - '' => '黖', - '' => '黺', - '' => '鼒', - '' => '鼽', - '' => '儦', - '' => '儥', - '' => '儢', - '' => '儤', - '' => '儠', - '' => '儩', - '' => '勴', - '' => '嚓', - '' => '嚌', - '' => '嚍', - '' => '嚆', - '' => '嚄', - '' => '嚃', - '' => '噾', - '' => '嚂', - '' => '噿', - '' => '嚁', - '' => '壖', - '' => '壔', - '' => '壏', - '' => '壒', - '' => '嬭', - '' => '嬥', - '' => '嬲', - '' => '嬣', - '' => '嬬', - '' => '嬧', - '' => '嬦', - '' => '嬯', - '' => '嬮', - '' => '孻', - '' => '寱', - '' => '寲', - '' => '嶷', - '' => '幬', - '' => '幪', - '' => '徾', - '' => '徻', - '' => '懃', - '' => '憵', - '' => '憼', - '' => '懧', - '' => '懠', - '' => '懥', - '' => '懤', - '' => '懨', - '' => '懞', - '' => '擯', - '' => '擩', - '' => '擣', - '' => '擫', - '' => '擤', - '' => '擨', - '' => '斁', - '' => '斀', - '' => '斶', - '' => '旚', - '' => '曒', - '' => '檍', - '' => '檖', - '' => '檁', - '' => '檥', - '' => '檉', - '' => '檟', - '' => '檛', - '' => '檡', - '' => '檞', - '' => '檇', - '' => '檓', - '' => '檎', - '@' => '檕', - 'A' => '檃', - 'B' => '檨', - 'C' => '檤', - 'D' => '檑', - 'E' => '橿', - 'F' => '檦', - 'G' => '檚', - 'H' => '檅', - 'I' => '檌', - 'J' => '檒', - 'K' => '歛', - 'L' => '殭', - 'M' => '氉', - 'N' => '濌', - 'O' => '澩', - 'P' => '濴', - 'Q' => '濔', - 'R' => '濣', - 'S' => '濜', - 'T' => '濭', - 'U' => '濧', - 'V' => '濦', - 'W' => '濞', - 'X' => '濲', - 'Y' => '濝', - 'Z' => '濢', - '[' => '濨', - '\\' => '燡', - ']' => '燱', - '^' => '燨', - '_' => '燲', - '`' => '燤', - 'a' => '燰', - 'b' => '燢', - 'c' => '獳', - 'd' => '獮', - 'e' => '獯', - 'f' => '璗', - 'g' => '璲', - 'h' => '璫', - 'i' => '璐', - 'j' => '璪', - 'k' => '璭', - 'l' => '璱', - 'm' => '璥', - 'n' => '璯', - 'o' => '甐', - 'p' => '甑', - 'q' => '甒', - 'r' => '甏', - 's' => '疄', - 't' => '癃', - 'u' => '癈', - 'v' => '癉', - 'w' => '癇', - 'x' => '皤', - 'y' => '盩', - 'z' => '瞵', - '{' => '瞫', - '|' => '瞲', - '}' => '瞷', - '~' => '瞶', - '' => '瞴', - '' => '瞱', - '' => '瞨', - '' => '矰', - '' => '磳', - '' => '磽', - '' => '礂', - '' => '磻', - '' => '磼', - '' => '磲', - '' => '礅', - '' => '磹', - '' => '磾', - '' => '礄', - '' => '禫', - '' => '禨', - '' => '穜', - '' => '穛', - '' => '穖', - '' => '穘', - '' => '穔', - '' => '穚', - '' => '窾', - '' => '竀', - '' => '竁', - '' => '簅', - '' => '簏', - '' => '篲', - '' => '簀', - '' => '篿', - '' => '篻', - '' => '簎', - '' => '篴', - '' => '簋', - '' => '篳', - '' => '簂', - '' => '簉', - '' => '簃', - '' => '簁', - '' => '篸', - '' => '篽', - '' => '簆', - '' => '篰', - '' => '篱', - '' => '簐', - '' => '簊', - '' => '糨', - '' => '縭', - '' => '縼', - '' => '繂', - '' => '縳', - '' => '顈', - '' => '縸', - '' => '縪', - '' => '繉', - '' => '繀', - '' => '繇', - '' => '縩', - '' => '繌', - '' => '縰', - '' => '縻', - '' => '縶', - '' => '繄', - '' => '縺', - '' => '罅', - '' => '罿', - '' => '罾', - '' => '罽', - '' => '翴', - '' => '翲', - '' => '耬', - '' => '膻', - '' => '臄', - '' => '臌', - '' => '臊', - '' => '臅', - '' => '臇', - '' => '膼', - '' => '臩', - '' => '艛', - '' => '艚', - '' => '艜', - '' => '薃', - '' => '薀', - '' => '薏', - '' => '薧', - '' => '薕', - '' => '薠', - '' => '薋', - '' => '薣', - '' => '蕻', - '' => '薤', - '' => '薚', - '' => '薞', - '@' => '蕷', - 'A' => '蕼', - 'B' => '薉', - 'C' => '薡', - 'D' => '蕺', - 'E' => '蕸', - 'F' => '蕗', - 'G' => '薎', - 'H' => '薖', - 'I' => '薆', - 'J' => '薍', - 'K' => '薙', - 'L' => '薝', - 'M' => '薁', - 'N' => '薢', - 'O' => '薂', - 'P' => '薈', - 'Q' => '薅', - 'R' => '蕹', - 'S' => '蕶', - 'T' => '薘', - 'U' => '薐', - 'V' => '薟', - 'W' => '虨', - 'X' => '螾', - 'Y' => '螪', - 'Z' => '螭', - '[' => '蟅', - '\\' => '螰', - ']' => '螬', - '^' => '螹', - '_' => '螵', - '`' => '螼', - 'a' => '螮', - 'b' => '蟉', - 'c' => '蟃', - 'd' => '蟂', - 'e' => '蟌', - 'f' => '螷', - 'g' => '螯', - 'h' => '蟄', - 'i' => '蟊', - 'j' => '螴', - 'k' => '螶', - 'l' => '螿', - 'm' => '螸', - 'n' => '螽', - 'o' => '蟞', - 'p' => '螲', - 'q' => '褵', - 'r' => '褳', - 's' => '褼', - 't' => '褾', - 'u' => '襁', - 'v' => '襒', - 'w' => '褷', - 'x' => '襂', - 'y' => '覭', - 'z' => '覯', - '{' => '覮', - '|' => '觲', - '}' => '觳', - '~' => '謞', - '' => '謘', - '' => '謖', - '' => '謑', - '' => '謅', - '' => '謋', - '' => '謢', - '' => '謏', - '' => '謒', - '' => '謕', - '' => '謇', - '' => '謍', - '' => '謈', - '' => '謆', - '' => '謜', - '' => '謓', - '' => '謚', - '' => '豏', - '' => '豰', - '' => '豲', - '' => '豱', - '' => '豯', - '' => '貕', - '' => '貔', - '' => '賹', - '' => '赯', - '' => '蹎', - '' => '蹍', - '' => '蹓', - '' => '蹐', - '' => '蹌', - '' => '蹇', - '' => '轃', - '' => '轀', - '' => '邅', - '' => '遾', - '' => '鄸', - '' => '醚', - '' => '醢', - '' => '醛', - '' => '醙', - '' => '醟', - '' => '醡', - '' => '醝', - '' => '醠', - '' => '鎡', - '' => '鎃', - '' => '鎯', - '' => '鍤', - '' => '鍖', - '' => '鍇', - '' => '鍼', - '' => '鍘', - '' => '鍜', - '' => '鍶', - '' => '鍉', - '' => '鍐', - '' => '鍑', - '' => '鍠', - '' => '鍭', - '' => '鎏', - '' => '鍌', - '' => '鍪', - '' => '鍹', - '' => '鍗', - '' => '鍕', - '' => '鍒', - '' => '鍏', - '' => '鍱', - '' => '鍷', - '' => '鍻', - '' => '鍡', - '' => '鍞', - '' => '鍣', - '' => '鍧', - '' => '鎀', - '' => '鍎', - '' => '鍙', - '' => '闇', - '' => '闀', - '' => '闉', - '' => '闃', - '' => '闅', - '' => '閷', - '' => '隮', - '' => '隰', - '' => '隬', - '' => '霠', - '' => '霟', - '' => '霘', - '' => '霝', - '' => '霙', - '' => '鞚', - '' => '鞡', - '' => '鞜', - '@' => '鞞', - 'A' => '鞝', - 'B' => '韕', - 'C' => '韔', - 'D' => '韱', - 'E' => '顁', - 'F' => '顄', - 'G' => '顊', - 'H' => '顉', - 'I' => '顅', - 'J' => '顃', - 'K' => '餥', - 'L' => '餫', - 'M' => '餬', - 'N' => '餪', - 'O' => '餳', - 'P' => '餲', - 'Q' => '餯', - 'R' => '餭', - 'S' => '餱', - 'T' => '餰', - 'U' => '馘', - 'V' => '馣', - 'W' => '馡', - 'X' => '騂', - 'Y' => '駺', - 'Z' => '駴', - '[' => '駷', - '\\' => '駹', - ']' => '駸', - '^' => '駶', - '_' => '駻', - '`' => '駽', - 'a' => '駾', - 'b' => '駼', - 'c' => '騃', - 'd' => '骾', - 'e' => '髾', - 'f' => '髽', - 'g' => '鬁', - 'h' => '髼', - 'i' => '魈', - 'j' => '鮚', - 'k' => '鮨', - 'l' => '鮞', - 'm' => '鮛', - 'n' => '鮦', - 'o' => '鮡', - 'p' => '鮥', - 'q' => '鮤', - 'r' => '鮆', - 's' => '鮢', - 't' => '鮠', - 'u' => '鮯', - 'v' => '鴳', - 'w' => '鵁', - 'x' => '鵧', - 'y' => '鴶', - 'z' => '鴮', - '{' => '鴯', - '|' => '鴱', - '}' => '鴸', - '~' => '鴰', - '' => '鵅', - '' => '鵂', - '' => '鵃', - '' => '鴾', - '' => '鴷', - '' => '鵀', - '' => '鴽', - '' => '翵', - '' => '鴭', - '' => '麊', - '' => '麉', - '' => '麍', - '' => '麰', - '' => '黈', - '' => '黚', - '' => '黻', - '' => '黿', - '' => '鼤', - '' => '鼣', - '' => '鼢', - '' => '齔', - '' => '龠', - '' => '儱', - '' => '儭', - '' => '儮', - '' => '嚘', - '' => '嚜', - '' => '嚗', - '' => '嚚', - '' => '嚝', - '' => '嚙', - '' => '奰', - '' => '嬼', - '' => '屩', - '' => '屪', - '' => '巀', - '' => '幭', - '' => '幮', - '' => '懘', - '' => '懟', - '' => '懭', - '' => '懮', - '' => '懱', - '' => '懪', - '' => '懰', - '' => '懫', - '' => '懖', - '' => '懩', - '' => '擿', - '' => '攄', - '' => '擽', - '' => '擸', - '' => '攁', - '' => '攃', - '' => '擼', - '' => '斔', - '' => '旛', - '' => '曚', - '' => '曛', - '' => '曘', - '' => '櫅', - '' => '檹', - '' => '檽', - '' => '櫡', - '' => '櫆', - '' => '檺', - '' => '檶', - '' => '檷', - '' => '櫇', - '' => '檴', - '' => '檭', - '' => '歞', - '' => '毉', - '' => '氋', - '' => '瀇', - '' => '瀌', - '' => '瀍', - '' => '瀁', - '' => '瀅', - '' => '瀔', - '' => '瀎', - '' => '濿', - '' => '瀀', - '' => '濻', - '' => '瀦', - '' => '濼', - '' => '濷', - '' => '瀊', - '' => '爁', - '' => '燿', - '' => '燹', - '' => '爃', - '' => '燽', - '' => '獶', - '@' => '璸', - 'A' => '瓀', - 'B' => '璵', - 'C' => '瓁', - 'D' => '璾', - 'E' => '璶', - 'F' => '璻', - 'G' => '瓂', - 'H' => '甔', - 'I' => '甓', - 'J' => '癜', - 'K' => '癤', - 'L' => '癙', - 'M' => '癐', - 'N' => '癓', - 'O' => '癗', - 'P' => '癚', - 'Q' => '皦', - 'R' => '皽', - 'S' => '盬', - 'T' => '矂', - 'U' => '瞺', - 'V' => '磿', - 'W' => '礌', - 'X' => '礓', - 'Y' => '礔', - 'Z' => '礉', - '[' => '礐', - '\\' => '礒', - ']' => '礑', - '^' => '禭', - '_' => '禬', - '`' => '穟', - 'a' => '簜', - 'b' => '簩', - 'c' => '簙', - 'd' => '簠', - 'e' => '簟', - 'f' => '簭', - 'g' => '簝', - 'h' => '簦', - 'i' => '簨', - 'j' => '簢', - 'k' => '簥', - 'l' => '簰', - 'm' => '繜', - 'n' => '繐', - 'o' => '繖', - 'p' => '繣', - 'q' => '繘', - 'r' => '繢', - 's' => '繟', - 't' => '繑', - 'u' => '繠', - 'v' => '繗', - 'w' => '繓', - 'x' => '羵', - 'y' => '羳', - 'z' => '翷', - '{' => '翸', - '|' => '聵', - '}' => '臑', - '~' => '臒', - '' => '臐', - '' => '艟', - '' => '艞', - '' => '薴', - '' => '藆', - '' => '藀', - '' => '藃', - '' => '藂', - '' => '薳', - '' => '薵', - '' => '薽', - '' => '藇', - '' => '藄', - '' => '薿', - '' => '藋', - '' => '藎', - '' => '藈', - '' => '藅', - '' => '薱', - '' => '薶', - '' => '藒', - '' => '蘤', - '' => '薸', - '' => '薷', - '' => '薾', - '' => '虩', - '' => '蟧', - '' => '蟦', - '' => '蟢', - '' => '蟛', - '' => '蟫', - '' => '蟪', - '' => '蟥', - '' => '蟟', - '' => '蟳', - '' => '蟤', - '' => '蟔', - '' => '蟜', - '' => '蟓', - '' => '蟭', - '' => '蟘', - '' => '蟣', - '' => '螤', - '' => '蟗', - '' => '蟙', - '' => '蠁', - '' => '蟴', - '' => '蟨', - '' => '蟝', - '' => '襓', - '' => '襋', - '' => '襏', - '' => '襌', - '' => '襆', - '' => '襐', - '' => '襑', - '' => '襉', - '' => '謪', - '' => '謧', - '' => '謣', - '' => '謳', - '' => '謰', - '' => '謵', - '' => '譇', - '' => '謯', - '' => '謼', - '' => '謾', - '' => '謱', - '' => '謥', - '' => '謷', - '' => '謦', - '' => '謶', - '' => '謮', - '' => '謤', - '' => '謻', - '' => '謽', - '' => '謺', - '' => '豂', - '' => '豵', - '' => '貙', - '' => '貘', - '' => '貗', - '' => '賾', - '' => '贄', - '' => '贂', - '' => '贀', - '' => '蹜', - '' => '蹢', - '' => '蹠', - '' => '蹗', - '' => '蹖', - '' => '蹞', - '' => '蹥', - '' => '蹧', - '@' => '蹛', - 'A' => '蹚', - 'B' => '蹡', - 'C' => '蹝', - 'D' => '蹩', - 'E' => '蹔', - 'F' => '轆', - 'G' => '轇', - 'H' => '轈', - 'I' => '轋', - 'J' => '鄨', - 'K' => '鄺', - 'L' => '鄻', - 'M' => '鄾', - 'N' => '醨', - 'O' => '醥', - 'P' => '醧', - 'Q' => '醯', - 'R' => '醪', - 'S' => '鎵', - 'T' => '鎌', - 'U' => '鎒', - 'V' => '鎷', - 'W' => '鎛', - 'X' => '鎝', - 'Y' => '鎉', - 'Z' => '鎧', - '[' => '鎎', - '\\' => '鎪', - ']' => '鎞', - '^' => '鎦', - '_' => '鎕', - '`' => '鎈', - 'a' => '鎙', - 'b' => '鎟', - 'c' => '鎍', - 'd' => '鎱', - 'e' => '鎑', - 'f' => '鎲', - 'g' => '鎤', - 'h' => '鎨', - 'i' => '鎴', - 'j' => '鎣', - 'k' => '鎥', - 'l' => '闒', - 'm' => '闓', - 'n' => '闑', - 'o' => '隳', - 'p' => '雗', - 'q' => '雚', - 'r' => '巂', - 's' => '雟', - 't' => '雘', - 'u' => '雝', - 'v' => '霣', - 'w' => '霢', - 'x' => '霥', - 'y' => '鞬', - 'z' => '鞮', - '{' => '鞨', - '|' => '鞫', - '}' => '鞤', - '~' => '鞪', - '' => '鞢', - '' => '鞥', - '' => '韗', - '' => '韙', - '' => '韖', - '' => '韘', - '' => '韺', - '' => '顐', - '' => '顑', - '' => '顒', - '' => '颸', - '' => '饁', - '' => '餼', - '' => '餺', - '' => '騏', - '' => '騋', - '' => '騉', - '' => '騍', - '' => '騄', - '' => '騑', - '' => '騊', - '' => '騅', - '' => '騇', - '' => '騆', - '' => '髀', - '' => '髜', - '' => '鬈', - '' => '鬄', - '' => '鬅', - '' => '鬩', - '' => '鬵', - '' => '魊', - '' => '魌', - '' => '魋', - '' => '鯇', - '' => '鯆', - '' => '鯃', - '' => '鮿', - '' => '鯁', - '' => '鮵', - '' => '鮸', - '' => '鯓', - '' => '鮶', - '' => '鯄', - '' => '鮹', - '' => '鮽', - '' => '鵜', - '' => '鵓', - '' => '鵏', - '' => '鵊', - '' => '鵛', - '' => '鵋', - '' => '鵙', - '' => '鵖', - '' => '鵌', - '' => '鵗', - '' => '鵒', - '' => '鵔', - '' => '鵟', - '' => '鵘', - '' => '鵚', - '' => '麎', - '' => '麌', - '' => '黟', - '' => '鼁', - '' => '鼀', - '' => '鼖', - '' => '鼥', - '' => '鼫', - '' => '鼪', - '' => '鼩', - '' => '鼨', - '' => '齌', - '' => '齕', - '' => '儴', - '' => '儵', - '' => '劖', - '' => '勷', - '' => '厴', - '' => '嚫', - '' => '嚭', - '' => '嚦', - '' => '嚧', - '' => '嚪', - '' => '嚬', - '' => '壚', - '' => '壝', - '' => '壛', - '' => '夒', - '' => '嬽', - '' => '嬾', - '' => '嬿', - '' => '巃', - '' => '幰', - '@' => '徿', - 'A' => '懻', - 'B' => '攇', - 'C' => '攐', - 'D' => '攍', - 'E' => '攉', - 'F' => '攌', - 'G' => '攎', - 'H' => '斄', - 'I' => '旞', - 'J' => '旝', - 'K' => '曞', - 'L' => '櫧', - 'M' => '櫠', - 'N' => '櫌', - 'O' => '櫑', - 'P' => '櫙', - 'Q' => '櫋', - 'R' => '櫟', - 'S' => '櫜', - 'T' => '櫐', - 'U' => '櫫', - 'V' => '櫏', - 'W' => '櫍', - 'X' => '櫞', - 'Y' => '歠', - 'Z' => '殰', - '[' => '氌', - '\\' => '瀙', - ']' => '瀧', - '^' => '瀠', - '_' => '瀖', - '`' => '瀫', - 'a' => '瀡', - 'b' => '瀢', - 'c' => '瀣', - 'd' => '瀩', - 'e' => '瀗', - 'f' => '瀤', - 'g' => '瀜', - 'h' => '瀪', - 'i' => '爌', - 'j' => '爊', - 'k' => '爇', - 'l' => '爂', - 'm' => '爅', - 'n' => '犥', - 'o' => '犦', - 'p' => '犤', - 'q' => '犣', - 'r' => '犡', - 's' => '瓋', - 't' => '瓅', - 'u' => '璷', - 'v' => '瓃', - 'w' => '甖', - 'x' => '癠', - 'y' => '矉', - 'z' => '矊', - '{' => '矄', - '|' => '矱', - '}' => '礝', - '~' => '礛', - '' => '礡', - '' => '礜', - '' => '礗', - '' => '礞', - '' => '禰', - '' => '穧', - '' => '穨', - '' => '簳', - '' => '簼', - '' => '簹', - '' => '簬', - '' => '簻', - '' => '糬', - '' => '糪', - '' => '繶', - '' => '繵', - '' => '繸', - '' => '繰', - '' => '繷', - '' => '繯', - '' => '繺', - '' => '繲', - '' => '繴', - '' => '繨', - '' => '罋', - '' => '罊', - '' => '羃', - '' => '羆', - '' => '羷', - '' => '翽', - '' => '翾', - '' => '聸', - '' => '臗', - '' => '臕', - '' => '艤', - '' => '艡', - '' => '艣', - '' => '藫', - '' => '藱', - '' => '藭', - '' => '藙', - '' => '藡', - '' => '藨', - '' => '藚', - '' => '藗', - '' => '藬', - '' => '藲', - '' => '藸', - '' => '藘', - '' => '藟', - '' => '藣', - '' => '藜', - '' => '藑', - '' => '藰', - '' => '藦', - '' => '藯', - '' => '藞', - '' => '藢', - '' => '蠀', - '' => '蟺', - '' => '蠃', - '' => '蟶', - '' => '蟷', - '' => '蠉', - '' => '蠌', - '' => '蠋', - '' => '蠆', - '' => '蟼', - '' => '蠈', - '' => '蟿', - '' => '蠊', - '' => '蠂', - '' => '襢', - '' => '襚', - '' => '襛', - '' => '襗', - '' => '襡', - '' => '襜', - '' => '襘', - '' => '襝', - '' => '襙', - '' => '覈', - '' => '覷', - '' => '覶', - '' => '觶', - '' => '譐', - '' => '譈', - '' => '譊', - '' => '譀', - '' => '譓', - '' => '譖', - '' => '譔', - '' => '譋', - '' => '譕', - '@' => '譑', - 'A' => '譂', - 'B' => '譒', - 'C' => '譗', - 'D' => '豃', - 'E' => '豷', - 'F' => '豶', - 'G' => '貚', - 'H' => '贆', - 'I' => '贇', - 'J' => '贉', - 'K' => '趬', - 'L' => '趪', - 'M' => '趭', - 'N' => '趫', - 'O' => '蹭', - 'P' => '蹸', - 'Q' => '蹳', - 'R' => '蹪', - 'S' => '蹯', - 'T' => '蹻', - 'U' => '軂', - 'V' => '轒', - 'W' => '轑', - 'X' => '轏', - 'Y' => '轐', - 'Z' => '轓', - '[' => '辴', - '\\' => '酀', - ']' => '鄿', - '^' => '醰', - '_' => '醭', - '`' => '鏞', - 'a' => '鏇', - 'b' => '鏏', - 'c' => '鏂', - 'd' => '鏚', - 'e' => '鏐', - 'f' => '鏹', - 'g' => '鏬', - 'h' => '鏌', - 'i' => '鏙', - 'j' => '鎩', - 'k' => '鏦', - 'l' => '鏊', - 'm' => '鏔', - 'n' => '鏮', - 'o' => '鏣', - 'p' => '鏕', - 'q' => '鏄', - 'r' => '鏎', - 's' => '鏀', - 't' => '鏒', - 'u' => '鏧', - 'v' => '镽', - 'w' => '闚', - 'x' => '闛', - 'y' => '雡', - 'z' => '霩', - '{' => '霫', - '|' => '霬', - '}' => '霨', - '~' => '霦', - '' => '鞳', - '' => '鞷', - '' => '鞶', - '' => '韝', - '' => '韞', - '' => '韟', - '' => '顜', - '' => '顙', - '' => '顝', - '' => '顗', - '' => '颿', - '' => '颽', - '' => '颻', - '' => '颾', - '' => '饈', - '' => '饇', - '' => '饃', - '' => '馦', - '' => '馧', - '' => '騚', - '' => '騕', - '' => '騥', - '' => '騝', - '' => '騤', - '' => '騛', - '' => '騢', - '' => '騠', - '' => '騧', - '' => '騣', - '' => '騞', - '' => '騜', - '' => '騔', - '' => '髂', - '' => '鬋', - '' => '鬊', - '' => '鬎', - '' => '鬌', - '' => '鬷', - '' => '鯪', - '' => '鯫', - '' => '鯠', - '' => '鯞', - '' => '鯤', - '' => '鯦', - '' => '鯢', - '' => '鯰', - '' => '鯔', - '' => '鯗', - '' => '鯬', - '' => '鯜', - '' => '鯙', - '' => '鯥', - '' => '鯕', - '' => '鯡', - '' => '鯚', - '' => '鵷', - '' => '鶁', - '' => '鶊', - '' => '鶄', - '' => '鶈', - '' => '鵱', - '' => '鶀', - '' => '鵸', - '' => '鶆', - '' => '鶋', - '' => '鶌', - '' => '鵽', - '' => '鵫', - '' => '鵴', - '' => '鵵', - '' => '鵰', - '' => '鵩', - '' => '鶅', - '' => '鵳', - '' => '鵻', - '' => '鶂', - '' => '鵯', - '' => '鵹', - '' => '鵿', - '' => '鶇', - '' => '鵨', - '' => '麔', - '' => '麑', - '' => '黀', - '' => '黼', - '' => '鼭', - '' => '齀', - '' => '齁', - '' => '齍', - '' => '齖', - '' => '齗', - '' => '齘', - '' => '匷', - '' => '嚲', - '@' => '嚵', - 'A' => '嚳', - 'B' => '壣', - 'C' => '孅', - 'D' => '巆', - 'E' => '巇', - 'F' => '廮', - 'G' => '廯', - 'H' => '忀', - 'I' => '忁', - 'J' => '懹', - 'K' => '攗', - 'L' => '攖', - 'M' => '攕', - 'N' => '攓', - 'O' => '旟', - 'P' => '曨', - 'Q' => '曣', - 'R' => '曤', - 'S' => '櫳', - 'T' => '櫰', - 'U' => '櫪', - 'V' => '櫨', - 'W' => '櫹', - 'X' => '櫱', - 'Y' => '櫮', - 'Z' => '櫯', - '[' => '瀼', - '\\' => '瀵', - ']' => '瀯', - '^' => '瀷', - '_' => '瀴', - '`' => '瀱', - 'a' => '灂', - 'b' => '瀸', - 'c' => '瀿', - 'd' => '瀺', - 'e' => '瀹', - 'f' => '灀', - 'g' => '瀻', - 'h' => '瀳', - 'i' => '灁', - 'j' => '爓', - 'k' => '爔', - 'l' => '犨', - 'm' => '獽', - 'n' => '獼', - 'o' => '璺', - 'p' => '皫', - 'q' => '皪', - 'r' => '皾', - 's' => '盭', - 't' => '矌', - 'u' => '矎', - 'v' => '矏', - 'w' => '矍', - 'x' => '矲', - 'y' => '礥', - 'z' => '礣', - '{' => '礧', - '|' => '礨', - '}' => '礤', - '~' => '礩', - '' => '禲', - '' => '穮', - '' => '穬', - '' => '穭', - '' => '竷', - '' => '籉', - '' => '籈', - '' => '籊', - '' => '籇', - '' => '籅', - '' => '糮', - '' => '繻', - '' => '繾', - '' => '纁', - '' => '纀', - '' => '羺', - '' => '翿', - '' => '聹', - '' => '臛', - '' => '臙', - '' => '舋', - '' => '艨', - '' => '艩', - '' => '蘢', - '' => '藿', - '' => '蘁', - '' => '藾', - '' => '蘛', - '' => '蘀', - '' => '藶', - '' => '蘄', - '' => '蘉', - '' => '蘅', - '' => '蘌', - '' => '藽', - '' => '蠙', - '' => '蠐', - '' => '蠑', - '' => '蠗', - '' => '蠓', - '' => '蠖', - '' => '襣', - '' => '襦', - '' => '覹', - '' => '觷', - '' => '譠', - '' => '譪', - '' => '譝', - '' => '譨', - '' => '譣', - '' => '譥', - '' => '譧', - '' => '譭', - '' => '趮', - '' => '躆', - '' => '躈', - '' => '躄', - '' => '轙', - '' => '轖', - '' => '轗', - '' => '轕', - '' => '轘', - '' => '轚', - '' => '邍', - '' => '酃', - '' => '酁', - '' => '醷', - '' => '醵', - '' => '醲', - '' => '醳', - '' => '鐋', - '' => '鐓', - '' => '鏻', - '' => '鐠', - '' => '鐏', - '' => '鐔', - '' => '鏾', - '' => '鐕', - '' => '鐐', - '' => '鐨', - '' => '鐙', - '' => '鐍', - '' => '鏵', - '' => '鐀', - '' => '鏷', - '' => '鐇', - '' => '鐎', - '' => '鐖', - '' => '鐒', - '' => '鏺', - '' => '鐉', - '' => '鏸', - '' => '鐊', - '' => '鏿', - '@' => '鏼', - 'A' => '鐌', - 'B' => '鏶', - 'C' => '鐑', - 'D' => '鐆', - 'E' => '闞', - 'F' => '闠', - 'G' => '闟', - 'H' => '霮', - 'I' => '霯', - 'J' => '鞹', - 'K' => '鞻', - 'L' => '韽', - 'M' => '韾', - 'N' => '顠', - 'O' => '顢', - 'P' => '顣', - 'Q' => '顟', - 'R' => '飁', - 'S' => '飂', - 'T' => '饐', - 'U' => '饎', - 'V' => '饙', - 'W' => '饌', - 'X' => '饋', - 'Y' => '饓', - 'Z' => '騲', - '[' => '騴', - '\\' => '騱', - ']' => '騬', - '^' => '騪', - '_' => '騶', - '`' => '騩', - 'a' => '騮', - 'b' => '騸', - 'c' => '騭', - 'd' => '髇', - 'e' => '髊', - 'f' => '髆', - 'g' => '鬐', - 'h' => '鬒', - 'i' => '鬑', - 'j' => '鰋', - 'k' => '鰈', - 'l' => '鯷', - 'm' => '鰅', - 'n' => '鰒', - 'o' => '鯸', - 'p' => '鱀', - 'q' => '鰇', - 'r' => '鰎', - 's' => '鰆', - 't' => '鰗', - 'u' => '鰔', - 'v' => '鰉', - 'w' => '鶟', - 'x' => '鶙', - 'y' => '鶤', - 'z' => '鶝', - '{' => '鶒', - '|' => '鶘', - '}' => '鶐', - '~' => '鶛', - '' => '鶠', - '' => '鶔', - '' => '鶜', - '' => '鶪', - '' => '鶗', - '' => '鶡', - '' => '鶚', - '' => '鶢', - '' => '鶨', - '' => '鶞', - '' => '鶣', - '' => '鶿', - '' => '鶩', - '' => '鶖', - '' => '鶦', - '' => '鶧', - '' => '麙', - '' => '麛', - '' => '麚', - '' => '黥', - '' => '黤', - '' => '黧', - '' => '黦', - '' => '鼰', - '' => '鼮', - '' => '齛', - '' => '齠', - '' => '齞', - '' => '齝', - '' => '齙', - '' => '龑', - '' => '儺', - '' => '儹', - '' => '劘', - '' => '劗', - '' => '囃', - '' => '嚽', - '' => '嚾', - '' => '孈', - '' => '孇', - '' => '巋', - '' => '巏', - '' => '廱', - '' => '懽', - '' => '攛', - '' => '欂', - '' => '櫼', - '' => '欃', - '' => '櫸', - '' => '欀', - '' => '灃', - '' => '灄', - '' => '灊', - '' => '灈', - '' => '灉', - '' => '灅', - '' => '灆', - '' => '爝', - '' => '爚', - '' => '爙', - '' => '獾', - '' => '甗', - '' => '癪', - '' => '矐', - '' => '礭', - '' => '礱', - '' => '礯', - '' => '籔', - '' => '籓', - '' => '糲', - '' => '纊', - '' => '纇', - '' => '纈', - '' => '纋', - '' => '纆', - '' => '纍', - '' => '罍', - '' => '羻', - '' => '耰', - '' => '臝', - '' => '蘘', - '' => '蘪', - '' => '蘦', - '' => '蘟', - '' => '蘣', - '' => '蘜', - '' => '蘙', - '' => '蘧', - '' => '蘮', - '' => '蘡', - '' => '蘠', - '' => '蘩', - '' => '蘞', - '' => '蘥', - '@' => '蠩', - 'A' => '蠝', - 'B' => '蠛', - 'C' => '蠠', - 'D' => '蠤', - 'E' => '蠜', - 'F' => '蠫', - 'G' => '衊', - 'H' => '襭', - 'I' => '襩', - 'J' => '襮', - 'K' => '襫', - 'L' => '觺', - 'M' => '譹', - 'N' => '譸', - 'O' => '譅', - 'P' => '譺', - 'Q' => '譻', - 'R' => '贐', - 'S' => '贔', - 'T' => '趯', - 'U' => '躎', - 'V' => '躌', - 'W' => '轞', - 'X' => '轛', - 'Y' => '轝', - 'Z' => '酆', - '[' => '酄', - '\\' => '酅', - ']' => '醹', - '^' => '鐿', - '_' => '鐻', - '`' => '鐶', - 'a' => '鐩', - 'b' => '鐽', - 'c' => '鐼', - 'd' => '鐰', - 'e' => '鐹', - 'f' => '鐪', - 'g' => '鐷', - 'h' => '鐬', - 'i' => '鑀', - 'j' => '鐱', - 'k' => '闥', - 'l' => '闤', - 'm' => '闣', - 'n' => '霵', - 'o' => '霺', - 'p' => '鞿', - 'q' => '韡', - 'r' => '顤', - 's' => '飉', - 't' => '飆', - 'u' => '飀', - 'v' => '饘', - 'w' => '饖', - 'x' => '騹', - 'y' => '騽', - 'z' => '驆', - '{' => '驄', - '|' => '驂', - '}' => '驁', - '~' => '騺', - '' => '騿', - '' => '髍', - '' => '鬕', - '' => '鬗', - '' => '鬘', - '' => '鬖', - '' => '鬺', - '' => '魒', - '' => '鰫', - '' => '鰝', - '' => '鰜', - '' => '鰬', - '' => '鰣', - '' => '鰨', - '' => '鰩', - '' => '鰤', - '' => '鰡', - '' => '鶷', - '' => '鶶', - '' => '鶼', - '' => '鷁', - '' => '鷇', - '' => '鷊', - '' => '鷏', - '' => '鶾', - '' => '鷅', - '' => '鷃', - '' => '鶻', - '' => '鶵', - '' => '鷎', - '' => '鶹', - '' => '鶺', - '' => '鶬', - '' => '鷈', - '' => '鶱', - '' => '鶭', - '' => '鷌', - '' => '鶳', - '' => '鷍', - '' => '鶲', - '' => '鹺', - '' => '麜', - '' => '黫', - '' => '黮', - '' => '黭', - '' => '鼛', - '' => '鼘', - '' => '鼚', - '' => '鼱', - '' => '齎', - '' => '齥', - '' => '齤', - '' => '龒', - '' => '亹', - '' => '囆', - '' => '囅', - '' => '囋', - '' => '奱', - '' => '孋', - '' => '孌', - '' => '巕', - '' => '巑', - '' => '廲', - '' => '攡', - '' => '攠', - '' => '攦', - '' => '攢', - '' => '欋', - '' => '欈', - '' => '欉', - '' => '氍', - '' => '灕', - '' => '灖', - '' => '灗', - '' => '灒', - '' => '爞', - '' => '爟', - '' => '犩', - '' => '獿', - '' => '瓘', - '' => '瓕', - '' => '瓙', - '' => '瓗', - '' => '癭', - '' => '皭', - '' => '礵', - '' => '禴', - '' => '穰', - '' => '穱', - '' => '籗', - '' => '籜', - '' => '籙', - '' => '籛', - '' => '籚', - '@' => '糴', - 'A' => '糱', - 'B' => '纑', - 'C' => '罏', - 'D' => '羇', - 'E' => '臞', - 'F' => '艫', - 'G' => '蘴', - 'H' => '蘵', - 'I' => '蘳', - 'J' => '蘬', - 'K' => '蘲', - 'L' => '蘶', - 'M' => '蠬', - 'N' => '蠨', - 'O' => '蠦', - 'P' => '蠪', - 'Q' => '蠥', - 'R' => '襱', - 'S' => '覿', - 'T' => '覾', - 'U' => '觻', - 'V' => '譾', - 'W' => '讄', - 'X' => '讂', - 'Y' => '讆', - 'Z' => '讅', - '[' => '譿', - '\\' => '贕', - ']' => '躕', - '^' => '躔', - '_' => '躚', - '`' => '躒', - 'a' => '躐', - 'b' => '躖', - 'c' => '躗', - 'd' => '轠', - 'e' => '轢', - 'f' => '酇', - 'g' => '鑌', - 'h' => '鑐', - 'i' => '鑊', - 'j' => '鑋', - 'k' => '鑏', - 'l' => '鑇', - 'm' => '鑅', - 'n' => '鑈', - 'o' => '鑉', - 'p' => '鑆', - 'q' => '霿', - 'r' => '韣', - 's' => '顪', - 't' => '顩', - 'u' => '飋', - 'v' => '饔', - 'w' => '饛', - 'x' => '驎', - 'y' => '驓', - 'z' => '驔', - '{' => '驌', - '|' => '驏', - '}' => '驈', - '~' => '驊', - '' => '驉', - '' => '驒', - '' => '驐', - '' => '髐', - '' => '鬙', - '' => '鬫', - '' => '鬻', - '' => '魖', - '' => '魕', - '' => '鱆', - '' => '鱈', - '' => '鰿', - '' => '鱄', - '' => '鰹', - '' => '鰳', - '' => '鱁', - '' => '鰼', - '' => '鰷', - '' => '鰴', - '' => '鰲', - '' => '鰽', - '' => '鰶', - '' => '鷛', - '' => '鷒', - '' => '鷞', - '' => '鷚', - '' => '鷋', - '' => '鷐', - '' => '鷜', - '' => '鷑', - '' => '鷟', - '' => '鷩', - '' => '鷙', - '' => '鷘', - '' => '鷖', - '' => '鷵', - '' => '鷕', - '' => '鷝', - '' => '麶', - '' => '黰', - '' => '鼵', - '' => '鼳', - '' => '鼲', - '' => '齂', - '' => '齫', - '' => '龕', - '' => '龢', - '' => '儽', - '' => '劙', - '' => '壨', - '' => '壧', - '' => '奲', - '' => '孍', - '' => '巘', - '' => '蠯', - '' => '彏', - '' => '戁', - '' => '戃', - '' => '戄', - '' => '攩', - '' => '攥', - '' => '斖', - '' => '曫', - '' => '欑', - '' => '欒', - '' => '欏', - '' => '毊', - '' => '灛', - '' => '灚', - '' => '爢', - '' => '玂', - '' => '玁', - '' => '玃', - '' => '癰', - '' => '矔', - '' => '籧', - '' => '籦', - '' => '纕', - '' => '艬', - '' => '蘺', - '' => '虀', - '' => '蘹', - '' => '蘼', - '' => '蘱', - '' => '蘻', - '' => '蘾', - '' => '蠰', - '' => '蠲', - '' => '蠮', - '' => '蠳', - '' => '襶', - '' => '襴', - '' => '襳', - '' => '觾', - '@' => '讌', - 'A' => '讎', - 'B' => '讋', - 'C' => '讈', - 'D' => '豅', - 'E' => '贙', - 'F' => '躘', - 'G' => '轤', - 'H' => '轣', - 'I' => '醼', - 'J' => '鑢', - 'K' => '鑕', - 'L' => '鑝', - 'M' => '鑗', - 'N' => '鑞', - 'O' => '韄', - 'P' => '韅', - 'Q' => '頀', - 'R' => '驖', - 'S' => '驙', - 'T' => '鬞', - 'U' => '鬟', - 'V' => '鬠', - 'W' => '鱒', - 'X' => '鱘', - 'Y' => '鱐', - 'Z' => '鱊', - '[' => '鱍', - '\\' => '鱋', - ']' => '鱕', - '^' => '鱙', - '_' => '鱌', - '`' => '鱎', - 'a' => '鷻', - 'b' => '鷷', - 'c' => '鷯', - 'd' => '鷣', - 'e' => '鷫', - 'f' => '鷸', - 'g' => '鷤', - 'h' => '鷶', - 'i' => '鷡', - 'j' => '鷮', - 'k' => '鷦', - 'l' => '鷲', - 'm' => '鷰', - 'n' => '鷢', - 'o' => '鷬', - 'p' => '鷴', - 'q' => '鷳', - 'r' => '鷨', - 's' => '鷭', - 't' => '黂', - 'u' => '黐', - 'v' => '黲', - 'w' => '黳', - 'x' => '鼆', - 'y' => '鼜', - 'z' => '鼸', - '{' => '鼷', - '|' => '鼶', - '}' => '齃', - '~' => '齏', - '' => '齱', - '' => '齰', - '' => '齮', - '' => '齯', - '' => '囓', - '' => '囍', - '' => '孎', - '' => '屭', - '' => '攭', - '' => '曭', - '' => '曮', - '' => '欓', - '' => '灟', - '' => '灡', - '' => '灝', - '' => '灠', - '' => '爣', - '' => '瓛', - '' => '瓥', - '' => '矕', - '' => '礸', - '' => '禷', - '' => '禶', - '' => '籪', - '' => '纗', - '' => '羉', - '' => '艭', - '' => '虃', - '' => '蠸', - '' => '蠷', - '' => '蠵', - '' => '衋', - '' => '讔', - '' => '讕', - '' => '躞', - '' => '躟', - '' => '躠', - '' => '躝', - '' => '醾', - '' => '醽', - '' => '釂', - '' => '鑫', - '' => '鑨', - '' => '鑩', - '' => '雥', - '' => '靆', - '' => '靃', - '' => '靇', - '' => '韇', - '' => '韥', - '' => '驞', - '' => '髕', - '' => '魙', - '' => '鱣', - '' => '鱧', - '' => '鱦', - '' => '鱢', - '' => '鱞', - '' => '鱠', - '' => '鸂', - '' => '鷾', - '' => '鸇', - '' => '鸃', - '' => '鸆', - '' => '鸅', - '' => '鸀', - '' => '鸁', - '' => '鸉', - '' => '鷿', - '' => '鷽', - '' => '鸄', - '' => '麠', - '' => '鼞', - '' => '齆', - '' => '齴', - '' => '齵', - '' => '齶', - '' => '囔', - '' => '攮', - '' => '斸', - '' => '欘', - '' => '欙', - '' => '欗', - '' => '欚', - '' => '灢', - '' => '爦', - '' => '犪', - '' => '矘', - '' => '矙', - '' => '礹', - '' => '籩', - '' => '籫', - '' => '糶', - '' => '纚', - '@' => '纘', - 'A' => '纛', - 'B' => '纙', - 'C' => '臠', - 'D' => '臡', - 'E' => '虆', - 'F' => '虇', - 'G' => '虈', - 'H' => '襹', - 'I' => '襺', - 'J' => '襼', - 'K' => '襻', - 'L' => '觿', - 'M' => '讘', - 'N' => '讙', - 'O' => '躥', - 'P' => '躤', - 'Q' => '躣', - 'R' => '鑮', - 'S' => '鑭', - 'T' => '鑯', - 'U' => '鑱', - 'V' => '鑳', - 'W' => '靉', - 'X' => '顲', - 'Y' => '饟', - 'Z' => '鱨', - '[' => '鱮', - '\\' => '鱭', - ']' => '鸋', - '^' => '鸍', - '_' => '鸐', - '`' => '鸏', - 'a' => '鸒', - 'b' => '鸑', - 'c' => '麡', - 'd' => '黵', - 'e' => '鼉', - 'f' => '齇', - 'g' => '齸', - 'h' => '齻', - 'i' => '齺', - 'j' => '齹', - 'k' => '圞', - 'l' => '灦', - 'm' => '籯', - 'n' => '蠼', - 'o' => '趲', - 'p' => '躦', - 'q' => '釃', - 'r' => '鑴', - 's' => '鑸', - 't' => '鑶', - 'u' => '鑵', - 'v' => '驠', - 'w' => '鱴', - 'x' => '鱳', - 'y' => '鱱', - 'z' => '鱵', - '{' => '鸔', - '|' => '鸓', - '}' => '黶', - '~' => '鼊', - '' => '龤', - '' => '灨', - '' => '灥', - '' => '糷', - '' => '虪', - '' => '蠾', - '' => '蠽', - '' => '蠿', - '' => '讞', - '' => '貜', - '' => '躩', - '' => '軉', - '' => '靋', - '' => '顳', - '' => '顴', - '' => '飌', - '' => '饡', - '' => '馫', - '' => '驤', - '' => '驦', - '' => '驧', - '' => '鬤', - '' => '鸕', - '' => '鸗', - '' => '齈', - '' => '戇', - '' => '欞', - '' => '爧', - '' => '虌', - '' => '躨', - '' => '钂', - '' => '钀', - '' => '钁', - '' => '驩', - '' => '驨', - '' => '鬮', - '' => '鸙', - '' => '爩', - '' => '虋', - '' => '讟', - '' => '钃', - '' => '鱹', - '' => '麷', - '' => '癵', - '' => '驫', - '' => '鱺', - '' => '鸝', - '' => '灩', - '' => '灪', - '' => '麤', - '' => '齾', - '' => '齉', - '' => '龘', -); - -$result =& $data; -unset($data); - -return $result; diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php deleted file mode 100644 index a014e4b4595544e94b92b16655ec45eb6616c1a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 zcmXZfbyyT_6o&E7*0H;FRAfQ1+hxJ-?!Z`K6%-LSRP4kq1e8$h?(UfRy1To(yJ7C< zFZOpmXV|%R&wI{nbZly3s$m3z-e6L^8J6G;dQFe%_4~bPW`tpyu7_NvC#L96RFR6I zVyHMOj!K{ss3fxTVJTP+l~$Mz%fJ<=tis)}oVXPl;x*k zp+=}NYK%-|t%Oa)Rj{eJ8a5Nxz%X$wYz_?+j%uSg7pxB>bmayZDQ<)<#7(fJxEV%? zTVN|#3bjV1Q5#goQCp{FtsM^9ft?Q8JE-Nn?m)21K}V43pcBY)&>3Vq=;ENH^SUd+ z9tYh(jssVB-FPl^i+L~_)<7Oq6UC@>AB=_dP!D9Ho+{lBdqMjk>@6OKeMA-a6%Ua1 z6A!`u;t@DNJO&4f7vLah>3s*o)`UY)G#ZK`&@j{z4M$7S2o#P+BKrg!C7y(%#Zz#M zcpQ!u&%klwSvX!i2PcT9;Y6_jPJ&I)WE6(t;$RCn1x2E%$c?5UOK&nAwj%VRHfRR2 zbtvOSox%iB2ihm6p%fH@=Al@W zitOufzNksy7c~h2q9#F5)D#Jc+6fCp?SzG*=H(($QzQ*e=Pnkb?q~^WhL)lpXc;OT zZ_XxM4n1fEYKm4Oo6+D}1-*o;(G0W(#iO+-0j)zml#XVi^=KB_fD+M0l!P`ROUGlg zc#Cukw9mt>;vKk6ybHJMTAlnIqORQuXH%Pj=Ad0D8D*lmC<~>aY%~w;MyY5InvZgj zALSxTLm^MRNtzFBHS}JkYQ=p@(bQp!u5wrjuMGMg} zv)7u^A%D1;;ML+;%nkh=UPZ&vYiI;|9gRe9pi$^eWZi&oL0edg<~Xu^-s81yk3i#|c)(5GlT`V37#pQDNB z3p5FRi7b6VUqL&Q^lLF2ej{eUZ$%zSUEhgWq~F7~=m*pe{fOG5pHK(%GwO(bL7mXA zs5ANvbwR(QuILZc4gHBM_1$04&LjO>%!mJoIq+XG7ybvWfn>il`#0gesxRs4}X8s-UWK5EO#yqxvWmg`)T{c<<^m5)Q*r1d2cnPy^Hu zHAImp5;a1NP-D~>H9<|Bn!0>8b#*gWH*EQ&*Mr~~SNI--uK6Y7LIqt2)c z>VmqWuBaR8hPtEfs0ZqSdZM1F7wUz2qu!_w>Vx{CzNjDShx()bXaE|32BLvz5E_IA zqrqqh8iIzRp=cNyhK8fzXapL8Mxv2u6dHv_qtPfn9^SjUOpk$M&{#AUjYH$mcr+gQ zkPl5j6Ho$5KoikKl!y}1Bs2+4Mw8JLGzBH0Bs3LGMbpqUl#G(mbTl2MpcFI%%|NLr z70pC5kstX{8cIU}6hP@H9nC_s&}=jt%|UZe2FgHl(OfhS%|r9ie6#>9Knu}AveBJsLjT>ft8V{K@{+nif9uLcz+5Emo%-3}T!#Ed9^fx!(Qf?OYjs!K_ri zXjTqiGAns6o0YX!%sKqMSIsx@Yv!BybvZ}*dc&+W_oi8^>y}yf|CU+H>us~1|F&6q zeaEc4zH3%K-!p52y>C`tKQJqgADWfNkIc&B$7bd26SMO6sT|Z!{LHK^___5fk6)OT z$1ly=Kwp`azpu^8-#2nl`|MjgS02AJE01^NY|Z0)J6GO*kb`>Pel+WS`^l_4|7dP-ViAl!Y~&1>){2Gad0UiC$J{sW=Ke9`~_ diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php deleted file mode 100644 index aba455b5ec97b2e9987a607421d5b571f3cea32e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 zcmXZfbzBsC6vp9e>)72oDzc#1?XqBZcVMir3W|suDt2NQf(qE(-Ffc}+-uzK?(XiA z`M!U#&*we6%yE84Oj!!L^V+@m1e-&;$~O})Y%lQYR=;}1lt_61(^=ofh-5@!FC57929jP zcO=;9pcBY;;OeXk&w*|+7e>P>$b+h)7?tjUv9K2Ef=tv^rTbtvXdi&x#Y3=%sN$aD ze$rmzLD*Y74Ew+ZsIS8Fu%D>5?hl(24nWapAc{bPP*XG*H9$j9I2wxV<8YXG0uC2X z!V%&zI8rC@BVmrHBVn$nbvaMe5=n!3YTx;=GZ(c$wG6v! zAi9S>>O{C8 z>O{CGUgf1OiCWN?#iOKGM15XY#apD;#M|(?cn97PwUKYag@m^hYJ1-nwfXOemngmq zZGEeJT+}r_0lQLbp>D`V-BBLuf$~vL^d#zqoY({M4h z&nUbApA|2{=R~#Y^Ds|~`~}#L+80rO^b#6?UPc4aD`*gU6%9tOp&{sXG!(sohM_l+ zbsfG1ZEc~q;iF^JS+4IWRq?x`rujWlP5-{Amij(2uA!`U$l` zKclwj7t{{@irS;!PzUro>WKb8ozS1iQs4ar?Of8oVMFwf!fg1jm;?WVRzZ(Ox(y@D k?+b*IgQh2(pQCOgloId-Bb?u+1qFUzFyv1$Rp&PT2Vg`sAOHXW diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php deleted file mode 100644 index e8e2370303b50cecec4043f3e0a324155eee90e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3210 zcmXZfS6CER7{>9~aje+8qaXu{y}K;f#e%&dSXNjCMZ{%E#NK;i7klp|Rup5+kfv9u zu6ku}SLy90k@J7Ac7D(M&9n2J=X__LiA%`I$g!;4pf8x2W=E#`f&`VW zMqCS9itAu2aXpL`H^A1g9BPBgqqeAmQ9H9`-AxAV!DfRF26fDJM}n;eoxnDO&S1Mi z7qG*it3g?F-Hl+UL3gmr!0Dj}-wi$D9vBB}Aupp`i>J1@JHjtgD_b<1Sh~|CR#x4TI3tTF-^gmS~sd<0%x+Lp{)Z6oD3?o@gO@e+row)*|Rd zi&1m56#39HG!-pJX=nvXM=OyZtwPh#YBU|KK^bT*%0%msdj_r-Z@`V>MYu`405`)K zXbYN&wxTSw4b4K^Q8wCvW}^a>gLa}hXcr2geaJ0>2SjbdgJL1+A-D(~M!Dz+3ZkPZ z4;@1vqT}czbOOyqCs95+h3292$o&*vfRoTgg&LW98U{n6KG0Qv?cqI+l{x{us*@LRYLeTN32@6llN0~&&UL`mo;G!#8R!%zqfM-R~m z^azbakCA&FK7sGgb8~(?g~i$h&)_J+=V&x~fySVhXe@e##-Z0}JbHtY(OWbDy+iIL z_%m#WenIWguc!n14Ru7nqfY1#)EWJWx}d*MSM)dPhWKRu(&%c5F!xVNkVXUcUVXufe^xG0|a-HHf@n4xVt+PD{azJCw14< z-CZb|_kTX!^Lx(By>sWBx%+HnbW&WB$CDiJ1>&cBgJOIEpEt_u^ZR|N-cXO%8**QW zH>yj)CA>g|P$5(p6-Gr+5mXcvMa57tR2&sYB~S@e5|u=yP$}d=9#k5YMrBYLR2G#* zTM2%1*6oi6MW7HT0qhK^K1m3&49tnk^C=7+6Ca4K& zikhNu6posqW~e!8j#{7=PAy%3wsdhT7q@b8YZte6aT^!6adBH0w{>wl7q@e9dl$EN zaR(Q7aB)W$cXV+l7k6@TNM}~j8AYH76p12H6pBJ!P!|-9qET1W6?H@1Pl!y}1Tr?LY zp(Hd9%|m|VN69D|1yBH`pcFJ8%|{E+0<;h)}fA23#c`gR8~;aE*8nt`+yfb>bnoUOWQR#N#ksJOS?)kHQDUGcZFu4IdOw z!iU5)@L_Q++#sgIjpAXrNn8gvix*+0co}Ai=V7*Z9c~e?!mZ*hxJ}H4+r^!52h7nv z?-UP^-6d*ccfCq=d4DN*lmT2!-~5w-DWVScujdCsg2Id9&~vo6S)tMEm$ z+WL~5rKevut2$TAs^uf*Ebe#JtnytmYkk+vTNr=CybIqnt2rJu?;w9m&eYC6X3ix4 zxLIACW7gK^nsxst%qy7xq*=wdEobc}|CD(Te%ibpKV#NT?ME@i~ktrY3?V=s#QN#b~P*e z4CY*dpDU|%exbQ4>h%ZCIZOIarPI_-e<`ime_L9o;~#mY zzLWoIxPDarQ#xB~yQ_2o!y-JMAb)IfN>f{j)6?;ExTY_!GSv H7vcFIjh|ty diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php deleted file mode 100644 index 3771c8f624117ef901a2e0a79449a865ae717aef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 zcmXZfbyQSq6vp9e>)73LRAfN0+hM@&?!Xvf6ciCBRP4kq1eCVByW^bO-QAsfy9>_m z{cGk~@BU_;1^e53CMqT+A;sbF2RwnqI3qOP6Yv;r!{hULQjKtjVK^Ug8t&-gm&jt3 zKqXK~R1%d!rBG>P=D{+s0xGL84VHr|QF(=XU9C==12%$ zH9<{K2ns<4GFQQ-;%eATTmzenYhkFk4z_>}6o%@eSSM@_Q3RTXTxdF)hGwAF$b;IVnaI+W zj1zSS<3(L(uc+%hOVs_HEow3)h?+%-B6q|&2bxECjJYrpC7~8*9-5AlQ8b#5Vo(aQ zuE7PO=73Ms9Po>p0|8MpBq(YlEEKg77Kxgci$%?lR5*jDSb}<>rKmYthI*pqsA#y^ zdvFDGqm`%`T7@hIgL5_X5UxQp(OMLT)}eT`9(hq3nuRu?*=Qq5K$}n^+Kf!yjxFL% z(yh=s2e*m0;db#3+@Z6&_d7+M-38}Rn~vt9-6#oVpm``0C8I1fAMHUYXfIlTvXKwv zAX76TSG+-*2Q4*pzEZVffzmXJ3zcec?h`MQ?uRST0pv#qQ2-r6L39``L`TpfbQCQ{ z$51Ldj+USk$kfxdPXdOXLVMS@SLdaabDCyxFBjFTokYJQI|x` z=gXqj#TD@i#aG2!@S3QWyDqBbZipJlH{mjl-cqRHeOuJvzaw6v_%5{crScwJN_Zdj zLMG~sEYt@*iu$6*P(SoI>W`j41JILbAbJW7LQf-8E9x0&>A{~B_2+v|yujJ##f$I- zQO)`yTu%5B8jM~>L(nT|D0&qQL$9IX=yfy#y@5ueH_<5c78;G-M&@<+4zx6g-WAmq z?};jYU(|K}Kvdg*2#Z#*J(@pKs^!SBR$_(0?+jN%}o(hkiiq(T}JD`U!PJKci0Q7t|U3in^fR zP*?Oj>W2P6-O-=ORNwsttz6Q-#XR_rm<|6GbKrl_EG%M#%i#$1dHunpfZ-0~=cvmO YO!j*N;r4IS;sT#H5cDM*s&hI12mJdrGXMYp diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php deleted file mode 100644 index 2d67d33f9ed9e1f8650061e59b0b04ee9942c21c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 zcmXxnbyyT@6vy#v>)PEqDiVs_Qg(L-#tJAXA}+fsHYV7ytliz+buZoyxZTO^?hdcK z-{1S!oX>OKnK?V}IkV41#-t{ux?E{qw>K%y35s`n-AUqLLLcmqM{29 z;RPy$3ZcTNFe-wIprWWKDu#-o;;1+(fl8o~s3aT8xyxNaa$9&HE}x=w=;2j6Sp^U2NQQN zaYqw(G;t>rcQSEEXR7FoB2Wa1M3E>8MWJXEjbcy?>VmqUuBa>OhPt8ds5|O`dZ3=D zC+dZIq28!B>Vx{AzNjzihx(!Zs6QHj2B3jxAR2@Qp}}Y{8iIzPp=c-?hK8ZxXgC^y zMxc>sBpQWAq0wkG8iU55v1lwBhsL4tXgrFIg%6LWrzgM(Xd;@3CZS1aGMbFs$c?6; zDJTxbp?DOJ5>Nt~il(AzXc|gHi6{vrq3LKknt^7ZWR#3%qM0ZKrJz}87D`2_Xf~RS zJjjF6P#W?gFY+NDnuF$`xo9q$hvuPll#b@3`Dg)JfEJ>KXc1b37Nf;z30i`dqTJ0e zL)-$FiCf`v(GORM*>I&8fUCr9aJ9G{W{NvtmbeqH5qH70;%>N3+ymE(d*KFgAKWPJ zhnvI$aI<&_ZV?Z|t>O{r7mvbh@fZw<$Kf{d1l%rOfIGyCaHn_)?h-G<-QpFvN4yI6 zir3&i@jBcu-hc`yAsOM2@&FEv+>ZKg()2zR5t?NH-t$lpL zT0QZkoULhl%39<0w6!Mr8Ee(^thMIiIcp8o^VXWz7p(RBa;;T=p0%d%MQe@WOV--Y zm#sC^uUP9v^s2SqQ?FU8e_pp%|GZ&+is$*J^-27e?AP_)wq8g69XX)>eb-vE@Se5S zzi+MQ@qxAW>qDHE#pOSOxq4dp;u*3Zi)Y~{I(H5HRM~UzGi6oC=i+*@Ux;hrm*NKa z70lHLe=X`ae=%+%KiiAoafemDxIlL`b%k@{kKhPF#eG<^#1%;%k_`&pV9%%!2_iW7#87j n1$h$Ee92xXDwwa>2$wG9nb?j~(6$!;|5wN>EFh)Q@5pft)Ol;iMT?4SY*6xnooteAc-7(wU z9j=_;bN-t5`+47c=iGCi3!mv0pOKQ`a%K8FzSKl_Sdz!*amTtnUau$H9qDqrBkqfE z$HoHzs)Q<|%BTvef~umbs2ZwZAIo0cwC6qK3$g+^7+1gc_s9s0nIVx{CzNjDShx()bXaE|32BLvz5E_IAqrqqh8iIzRp=cNyhK8fzXapL8Mxv2u z6dHv_qtR##8iU57v1l9`hsLAvXabsmCZdUG5}Je(65zd0lj+HDGMa*>ps8ponuew! z5AvYtXgW$ni6{vrp=6YdW}q2pCYp&-Pzp*#sc06Og=VAKC=I2dIcN?_N9kxTnu{_} z2AYTFAusZxOq7Xy$cM5}7MhRdqXlRIT8I{+Y?O@_p+#shT8x&UC1@#Hik6{eXgOMr za!_zBTmb{O;7aj0T&3X^aJ9OJ;Tm-h!L{lhf$P*=2Xmpb60TQwE4*Lb0{DQq4Q|lz zNw`tn>+nGsSPdT%*T7BUdbn9U3b%;bjjhnxNH*YbzfX6`kYa8HP`Yr{GEPHasQji%&yGu{)!#j{mHvMW2JAg3a9Py!94* z!CFzfDCa4Om#npcmvK;Wx*~4iZdXN}#WhjKdL4%Hb#gbXwYHnqI=fre+S1!Ns7<>A zo&9|GBbv_Jgdere!;e{C!hUOQdcaz#3tB5Hjs zN8S*XzBk1?48H|Kc?!ha*2>E}azQTh?^-Kf?^$d9eQWK)2i7{H4{<Ba=`}v)^ zI>_%~C`U*41NNWhn|>6}!=LQ5BK@=4I-Orct@>B-7#IHr1A2(xVJK%W?LRbq4*scj zt`_!}+PeC0QU8?w5f!3;MZHS@!BBy+e^>27M#Z>XVcz7-tTdlHHk_ZVF|Mri%w%7r T`Tbfr;7#^rdDGpRi*fxA$_!4T diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php deleted file mode 100644 index 0b314c80bf4cb090e3973d71286a54e5d00cdf3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3809 zcmXxnWport6o%o&VQ_b7AVeUzGZEa~CCHEj5(ptoCP2{O?n!WWcemXcmUVaEoppzG zXGy(Z{p$OiTRm0X_g3|psMxfmG?y#g=kX=SJ0S@kpT~)IJYKIS(+PJuPS|5%PIOG( zB{EO>P(G9&s*9MS9lR1?)i zwNNco8`VY*a!?&q2h~M&Q9V=-g`f~rAJs>pC=|to!ADoqBjGR{MW6`O05w1jQ9~4o zB2gpM2sK8HQ4`d}sHy4CrY3G?;$|jpZsO)9ZeijUCT?lsmL_gx;#MYZZQ|A@Ze!v$ zCT?ruwkB?8;&vtuYtJg$BR6uRC=`XFQ8bD{F(?+rq7JA7>WDg`PN);=j5?z(s0-?f zx}t8V8|sd_qaLUS>WO-yUZ@x9je4U#s1NFk`l5cQAL@_#qXB3D8i)p>L1+*fj0U42 zXb2jLhN59;7#fa-qY-EX8i_`tQD_tzjYgxmIQZyldU^~TgT|tK?Q7W2-rlB;HhNh$G z$cwxv9i<~5@}Ufrfo7l?XeOG8W}#Uq6J?^=Xf~RI=AgM~E}Dntq4{V&T7VXyEEHG{ z7m7FGBJmhpEbfO(#Dj3DxEC%H55eW)5x7D;4p)jN;41MbTrHk~YsAxVt#}fy6PLjC z;!?OlTnRUdhv6o18Qd&hgxTU{m?NHtx#A7DMZ5;Lig(~PF&AzZcfuXwRk#!S55Qf@ zZiTzWEpQLKw+Zf5b|2g)o`UQJbPl{^7Q=%T>w5V1&BkHxEg~42{@|?Ba$9e0`%ymJ|UW6}NtEn&Hz(UfOMUB29 zW|6%L{n{?qU@%98yKb$u-LO{aZd&i+=Wb!Yw%ct{8|scmXK!HihXZ<;r^Lm~_OwRlY{$=7Yc)kwOt)2J0wN8&0to3v+T5I($ zVZX}sG7Ow$_E$vR{HnN$>}%p`_`0|Pz5(y5>)%v%E!nrkb?|L*J$wfSv$Z$hwO&L1 zJvmo%y>G3<>I3Z8OZgB6boWPgv?}zm(rV>T#68Rv6jgvvMeT#n#7hkRT+D%AK)}avhS%*)NpM0E-Cnm7WR2-E+B~VFJ5|u)wP-#>el|f~Y3%O8PR2G#(r zcQSEj6L&Uo7ZZ0eaadQrqAQ9*Q79TkqZkx}Vo@xLLvg4Z>V~?b?x+XqfqJ5zs2A#m zdZXT`59)*ZqQ0mf>WBKH{%8OifCi$0Xb>8N2BX1f2pWQhqM>LQ8it0W;b;UJfkvW{ zXcQWSMx)Va3>t&RqOoWk8i&TC@n`~?fF`1eC_WzE|1~{52~I+j(PT6QO+i!9ROCi( zG!0Ed2`B+2qC}L0lF)QC9nC;9P%=tJDJTWaL^IJWGz+DoR5TmSMrkMw%|UZeI!Z@# z(Ol#~9+ZJHkQaGTCdx$f&^$CB%|{E+0+fZa&_c8jEkcXXVzd}7K}*n5v=l8v%g}P< zUk6u+x8X|hG+ZU-!PVk1xCRCMU{KRP zDQfzsRJ@zw)8ZcZ5cHjeXEavtJ*(nPWX~yk2%gtiwaNwY7TJriAXmL|$$AI*hpl(w z%W}3F@rt$9{t@igVqXySKVoz3XSt<}9gYc0CpT1^+QUe5TSwchsx4ruC6imRx8O4T`9il?phHP2Y< zD#^D#!T4vb598;oHM{4n_4O}cpSI~m7|_bTBx>->;ufC$3iNM;uPVD0z6OK3w_aDV z&eI#B9`&Zi>R7)83$oSrZ(FOC-;s0I^R9QTb;RDo!93FMi@NAOu+`e353ygZ{E?`0 zQXpyrK88W<*C(Q0{Hdt#`b^Yjd@kw|`9jo_zl476{8!56Fo&(=;IRL6g( zVjY<8p-&zBgQ&~vN0_g%KZ)9kpG9rsFQPW)SLoAUqu-$a8Xx()ve)4sqNebtc#7;_ zFke^O-!OQI>_4L3`>&|t|6oC`7Wy9c6*3~qA^BQC*ble=%f9FaQ7m diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php deleted file mode 100644 index 48440ba1acf8727aa87bb9faa657f640dc2ec98a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3809 zcmXxnby!qe6vp9e>)73TR3sF;rR?qwj1f>!M4TB^?7(gX?C$PvZuiXXj=A04Df{>B zzh=G9w@%GoXU{Xyap}qFE|=Hm_N62^A&G9E+lg`99*;ZI33oY8*dt+1OlC@PAIp<<{wDvnB^63B&Is3a;s*0+iYN$G@j%uJ9s3xk3YN1-FHmZ&4pgO27 zs*4=tpn9kts*mcU2B-lFK_RFiYKTHnD2fk*4?oR}gu`$Yfg(^N)Ce_3jZq|uL`_f= z)D$&E%}_I==4L*do4SRmTbR0~sau-5m8n~qy0xiWo4Spu+nBnosoR>movGWIy1l8} zo4SLkJD57GBX`jeMWHAZjiONuib1g`7R8}B)CqM$ol$4h1$9APQCHLrbwk}zchm#* zKs`}U)C=`Oy-{z}2lYXHQD4*#^+Wwpe>4CMKm*Z0GzbksgVA6#1Pwt$(NHuD4MW4x za5MsqKqJveGzyJEqtR$I28}^u(O4884LFsn5 zQRynUN$C!_S?OxHMd?nsRp}a-t#lX6QMwl9D%}mYDP0G*E8PosDBS>eD%}TnDcuNn zD^>FzrDsX^D%DNyQ+kqgzjz)V5I4bt;stm})Pf#{0e$U9lpdw|sCXG36SdsO#Ve#I zL@oD87|<}BQhJ!?)8Zv~M${0Vg?Xn)&xyC-c^J&qGhDFNfM2xM*)GZ1n)u7sx|b_B zpuxNf{YSXkHSs#UE^72{z+lcH;+xjGw_Da4o{)>?rF z)>@!E>(iX>QELtCW7dnwAGf}ZpTPc`@JUgx%2Vpjk)O8K-8^G`g2SJ+)-*k5y`TJf zYdzfy*1G!_ah{gR5B-{gfT%b1B~efEvZx1tMZCk6Ulp|ouZed_Ul;WrzaicueG>+= zH34r~YZrK1&ed-8j(prE`6c z^UiRtA9S!b;2(9cHinRtOq$7&&dReGG}-;}P0zbn;s|4^zQjX#xYvj0-5 zpQFE(9^+L1z&!C^7|hiw{iise5m7Ezh$qRLk?M0|Liw{A<;qC&Ci%k6KiB*QPm(Xg Kljf)|%Jn}O%1rG5 diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php deleted file mode 100644 index c9cac0c35d7c8d46246383d6a092ba47f0422fbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3194 zcmXxnRd7^S9LMqEaB+9IK!`waXR`_J?h<5477_>{tN=j+rMRM#LZwk@R0fqnWl>pF4wXaYQF&AWRX`O{MN|n@LJo3JWmFke zK~+#yR25Z2)lhX*9o0ZJP)$@5)k3vUZB!f8L3L1FR2S7l^-z6OA2mP?P(#!ZHA0P0 zW7HTmK}}Fo)D$&C%}{gH9J$CvEl>;8617CFP%9LN;!tbU8pWe{l%4?JK247#!bFsW zl29Ae2DL?PQ8G$K?NB?^9<@guPzR%qrawEH+{xrlCU-Wuv&mgd?qYIRle?PS&E#$- zcQ?7a$vsT&VRBECdz#$Klkq3ED3Q9p<&ZMRUD1(R?%?EkFxU4$46b(L$7qa?v8R z2<4$Xv=}W$0Te(%6ht8uLSYm}OVARu6fH%|&@z;d^3ig%9IZer&`PuttwO8NYP1@y zL2FO}`f(RrEAEEt#69p`aW7miM&Ns5A>1HF;YM*E+$8RYo5cfgi+B)j6%WB};$gU5 zJOX!!N8wKK7~CZuhr7l1;U4h=xL5oTM#PU`p?CsD#glNKcnaJo zyVeDazh|wj{8}zllYV2Z?|o~n)qiKL2KnAvt@wkr=6~N>^Lv0}+S{L0j_3wGwBE*a zAIZ^8__6hR`~=4|o1bl2tNlggPZ<4Fya=C(+R9(WkE#A9UWU(MaeG5I{Z_-1pg9s$^I7g?myxU2LCHwh5w0H;A>bM)#y76x!sCQfm~PPJkI|K395bo diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php deleted file mode 100644 index 3e7770ad59374f6dff41ea47271b3e5399323c66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3763 zcmXxnb#N3(6vy$yVR3gDAVeUzvk~0gCCHKl5(pveZh+wK&L+6KyW8DvI6pY6bInPe zOP%|X{{H%}d7pYcJ3Za6-_*v$XQX7fTt2_YpPJ}|C3*ZFC)V+Jy`C&5(&ac2PeeGe zaru|%d=)?iP(f4>6+(qjVN@6uK}AqeR1_6M#ZYln9F;&NkPEp`NmLS*LZwh?R2r2* zWl&jE7L`NgPVY7dgm5^-w)jAJs<~ln?WsReE~qQ&in^h0 zs5|P8dY~StC+dlMpW%uKKBzD1i~6B{s6XnD2A~0GAR34Up+RUc8jOaZA!sNX ziiV+KXgC^Oql#C{$$!H3if>KZlN=2z?Dw>L>p=l@$rJ?C)I!Z_BXa<^rGEfGZ ziDn`%@**GdAwTk?Oq7Xcp;>4)nvLe5IVcNdp}A--nuq40`Di{`fEJ*IXdzmJ7NNx` zv>#657gcmwW% z!NYK`vOC~D_+TI0FYbp2H25GqD4vCf#LMuocncm8wXjFUEo6_uTs`-=sOO%5!TSt8 zDQe43iD$^37Vp9{qKfdWs8={As#MO4TJ{StFGsVyXuXx+zGS@(UzP()@fB+o^;H~N zLi(Dh(bvVrWN*Nrj>}D$m#vMvWv#j0w%*R|cdYl~yEv%hc2CrSy06iJ&5VB1I)IYIOE4{G7FB^Srgz<^^k=ycez2Jzlcb z+dZ__>>uHvw&`V2mHUdQ?(!-Otz~YniR<9&;%fMYxBh${R~#j8y0Gcg-}4ui^m zp{xq?OHq6KmAIRGzZQ4GZ$xd>x1t)scQB|{{=KLg{XtZF`cYH^`boUUgMJp(j(-vL zf%z4Nt~2;IWz|xD7uAmc5cR$JQ`EhGiE8D4i)xzxi24lt3-fYR$p0yw&nUOc73NL$ jWv2O^*l_-Sx?P#+zGQ!-`7fG3z?H6vy$kb?j~(6$!;|5wN>EFh)SJ5Qjm<23-XgcMZVqu3d9oYu$zIknK*k zyF2B6f9J0`pXc2BzIX09_s%mtqLUJmJf7r$FEA(88x-dY_`H!`pWp9G^@e)9-jKUO zypd5wAK^tRhKix$s5mNtN}!UcBr1hUq0*={Duc?PvZyR7hsq%j@}TmlJgR^ypo*v> zs)Q<`%BV7`f~ugZs4A+4s-fzrI;w$cpqi*As)cHy+Nd_FgX*BVs4l99>Y@6mK5Bp( zpoXX+YJ?i0#;7s!A}?x!nxLkrDQbqAp&%55nxp0@7zLx45P0X)^++fTMPVomwLmRU zOVkpDqj1y;wL+~?Yt#m{acb-Ov#pEUxwxH++q<~Ei#xcugNr-5xTA|Zxww;yJG;2E zi@UhEi;KIuxT}l1xwxB)L%Oqy?kEC9pdP3PibRnp3Pqu46pebKo~ReGi(*k6ibL@z9?e3t&}=jtC7=W}2hBlq(OfhS%|r9ie6#>9K#3?3Ekp}Z z5=ugg&?4kVew2)oQ2+%{3Q9qX(PFd&EkR4sQk05P(K56QEl11I3bX>PL@UuMvJH;HhOWXr@!#wTt z9#Q+eSA%ylcpofG*Us)&dK>8j;z4*&JPQwr7vW*?8ayJNheyRN@EFWf36G1KdqTX$ z;FFrW6`oR7H9IZdBzs0w7oHXM748>LGx!1VIy?spbG6FzX1)1>S^INQ&Q^n5G9Tf2 zm*pJ2{Xw&ebH$v?_=n6Y?Nzg?cg?KzT{mxM{tfe9eABGnc-Xv~{4F_qGk(OZ)A6WT zO`K=e*5{k`{Kw2X5|5izj3?xreZ22U^M3r4S?Azsv)1#BS$E2_=3~r%&a7+Xd9%LX zZL`*2U{?FTVAkF7qFMEP$$XUey=>NTdd0kh{Htd5&ueD&&+BHj;~Qoji#O$LJ?|~E zZi2VvT-`bEnAh?Ccg-6Ao>}|xzFGD90N>V`{SfA>I)%z=@gKng&HY$ewdyCz>L&dZ z=IQ$TOj)h-bIny5zYz7UzZ6yUuSE6a*RU`{J@pMPSkD%GtI>M#cQ#rN`(Dn}3H<@* zX$O9^vh(L$J4gBtr8Cq{e=4one_2|m<8L`l z*W^DMuHTe@mCn`L{!_Y$VG$lrkUu^-Wq!aL8O(p#2v164a(p1v{jn_?;ExZa_!GSv H7vcFI$@E|M diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php deleted file mode 100644 index 4ba6573c397be67ff55c276c542c146876bcd4b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3841 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 O8|O>)Cb?A?=K3GlBw-Z* diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php deleted file mode 100644 index 953e4635060777745fefbcedb6c16a49f7605388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 zcmXxnby(GR6vy$|dhKq#DkBuTrR?qwj4Pm^h#ni^`#Ls5~lY;k5KB|uzpa!TRYKR)4 zMyN4rjGCY(s3~fS+{lfZp=PK#YK~f<7AOb>q5Dz6DHsfcQEUjjcXbv?C=5kmC=9hk zEm14f3WcL^)Ec!$ZBQH37PWQM&RL-CoVdLcw|C+WPTawXJ34VkC+_6Lot(I{6L)sv zE>7IViMu*+S10b~#NC{@yAyYJ;*cJEMGq8#B2XlXL{TUTMWbjGgJMum)D!hWy-;t| z8}&hbP+!y+^+Wwof7BlhKm*V~G!P9!gV10!7!5%~&`>lK4MW4wa5Nl^KqJsdG!l(M zqtIwH8jV3?&{#AUjYH$mcr+eOKoihJG!acglh9-|8BIY`P;4x`cXihER5%q)L(|Z7 zG#$-AGmr;)&`dNF#i2M9kK$1RNXg52c_K zG#|}JsVEgKKnsu;c~KflLq6m~=_nm7L<`X(vX$qyurK%KVZIrGtI|vmiY|cXnqK9 zGGE4<&D-%7^Jcu&oQ=1c_u}pN&PBLG>CA(8C%(G@?t*~}Fk8F{cZ(WY4lK;dB)v!J z({Qiohx=fWUya{yzE1vtS@j3adfOo!I7Inj@hm)|>O4)uQKgTPJ|=1sj$8FQ(kIMY z@k#SGe9F8VpEhgJoWc2;le3mSK>1_l!}y%}I6jXHG_(t%sxOL1D83|WWS2#a?24!- zUlkwW-fQBc@Va;c=87j_9xU?jzc##LrlM6Mojb1wUuj;GQ?{BL9MU4}Q_C(Z6KYa9%cRTJD(D z>bqt&_Z71?%d2Ls=hw{Vc>n9>OZW}5cGH_??Vh*Hx2S(x_N$-yX7#VYtbV;?)(&_V z2egph6LpBa4{z&ZJ`mNr4`Go%i*NY|7ig+KwzOJbXx8nYnAQ4E&1(H;X0`rvvs(X! zS*`xktX6+zR;#}@tJUAgc{&BZwY+xwcV-B&BKR4{)>BV6ezX$ihi=f7!jfj7aI?oDy4F2eOceLHQ_ diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php deleted file mode 100644 index 2668bcc4e583f4fc5a97336648ffc0a17d767f16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3841 zcmXxnby$^26vy$k_1fKfRTS(_K52 zoig9w`RhHO=giDI@64IG&kc)6j7{`-k^;U!T$DE`+86M7!@WMg-8ilU;Z7%GN}qvEIpDuGI(lBg6ag*?cEN~6-K3@U@lqOzzQ zDu>FW@~8r;fGVPjs1mA#Dx=D%3aWytqN=DGs)nkg>Zk^)foh_fs1~Y)YNOhy4yuFd zqPnOas)y>M`pApCr~zt#8lr}%5o&~jP!MX28lxtt35pDc_nxjsLSP7LikhNks2OUG znxht|1!{>}qE@ICYK>YuwQ=>?#>H)2+}6eIT-?sZ?Ooj7#T{JS!Nnb2+|k9IT-?dU zon747#a&$7#l>A++||Xw-Izr;6pBJo7z#t-C>(W1-BARJKs`_o)D!hYy-+XI8}&wg zP#@G6^+o+qKhz)fM+49RG!P9$gU}!}7!5{4&=52f4MoGyFf<$uMm3(Z2YC>F(`I5Zp0Msv^{6p!N3Tr?LYpae7z%|nSO z5zR;QkstX{5=ue=6hO%+87)8y&_c8jEkcV>3Q9qX(PFd&EkR4sQnU;$L(9=}v;wU_ zD^c!xxJtYUQ^jL&wYVRy5f8$(;$FB;JOtN^M_`(G9HxsW;QiuJ_<(o@W{9WZgW^f} zkhlguEUtwc#B{h(JPbF9>)>YbBFq#o!z}SU%ocCJE#ft}RlE(iiP>{hrN=BH|9_uxC5NbgnaeQ=+63hoy#zysoScu+hC4~ZM$VVI*WJR+*^QBfa! z4CZHSp!0F1wP`2BTVzj)D#KHvzTvc}VmTwK49~*+Y)$i=SqpOByqR}hkTX;9MYG1c zBxmXEm(4l_SIpYWtL7}myJpt*T{mlfH_TgTf784R-!iK>9x?AAe_PJf%06n&B>$LM zRh(ni(&w5r{^RDA^nb#v&A20H?I!=Ec@KWdyd6Jn)_k5Z>r#2vtTXtWS@+2EW_{mX zv*w>?R{g(V*5&b{S^N2tSr^mG=55UP6|>IQt7g^DYi8BY>t>bX8)lu0H|0!?_m(+> z_q{D=r{QiudF8j5zJHHkCj!aexmGZX7(w} zxdcB`R`dK^eYK5Wi2CX;MQ!?5qH6MMn4hMa`UdCe9{yIX_2TcWwFdiMPS*+j0q1B1 zezdeU{3o*t;%7NS1^0_t!~KeLukhKwS$FN%?>Ofy=|7ZCQ#t*qw0i$#X`PP0T z|50=OsQjyRw&wPq(gkc9>hT2mW0I2N1K#i^{Fx2)Bqt=r1VY?D+kyuEm_V{W!K-$m Gp8o+}M`57= diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php deleted file mode 100644 index a7b47f8f39f67571b0eb53559cc2bd10135a41e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3831 zcmXxnWport6o%o&VQ_b7AVeUzGZEa~CCHErBoIOv0fI|_;Fb*T?(VkBx`%a_th>9C zdcXSB_c^zxr>pC`eNM;3rzfYoT>gM3kdo+xC3ylKC)V-!e4Y#^(&ac24@Ee!aruYn zd=)?iP(f4>6+(qjVN@6uK}AqeR1_6M#ZYln9F;&NkPEp`NmLS*LZwh?R2r2*Wl&jE z7L`NgPVY7dgm5^-w)jAJs<~ln?lkh zCa4K&ikhNksF_i7lh5X+Zei*crfzBKmZolH>Q<(1ZR*yhZe!{;rfzHMwx(`p>UO4X zZ|e4@?qKQ;rjF>yU35flu1P$$$Gbw*uK7t|GXMcq(0)E#w4 zJx~wS6ZJ&BP%qRQ^+tVAAJiB1Mg34e)F1Un1JD385Di3w&>%Dz4Ms!I5Hu7GMZ?fA zG#m{_BhUym5{*Qo&?qz-jYeb87&I1*MF|P;!O>)T92|$nqw#10nt&#viO7RIXcC%) z5>X;bLP^Mryl66-jHaL|C>bTA6qJIdqN!*anubzQDw>X_qcoI;W}q1;9i^k0XeRO@ zAMztV3ZMWAq9B@uW}(?=HkyOxpbV6O=AyZ19-4>dqxon7T7VX!g=i64gchURjc|#$ z2`&{k!)4+Ym?>t%%~2AgSZ!N z6!*bR;(oYUJOHdX}Cu` z1NVw&;Xd&k+%KMo2gD2Tpm-4;5--8S;$?V5yaJDkSK%@78aysuhbP1v@T7PXo)T}t z)8cJ-M!W;hig)2Tm={ul&s!_P7p#@xi*oi-et*eYn|xW$Q9`a*Dnu6=r z%FqpK-QP`X&BZNirTMnC!hXkEvv60=)&M_jt)YCxTAO&!T48$BTGxNfdNI%AacgbH z6LOBm>q%?P*HhLS-KVW}KhIbz`OjKwY@V~$fIe@n^}S%N`+w0|bCzqZLA!6Q{d~z< zQ~R>D-aM~Z>&5h{wes_twes`2wPy7VYmM@oa<;Dbmi1bm@7r=H3%_HXiQl!>`R`fl zdAx6}{rUjk7e5r2aJ4*9VgE>6M)zY;fBlKLobIRM3iz405`Hdf8DEI2=zb}#hF^(m z;Mby-_>H)Z?ziH4_?@@`eh+iCz#r7rbp5EVR`ip)%Hq%JY6-unt4aJ-UH$KG>MHlY z!+UzK{sHr{6r(@Y*4ywe+tyV4EobVj@sCbdNdHwkq#^iE?R-YLU9K>n*B?v`II-b; c!n$3-G`}|xX})LkPw;sIL0_7q^W3ig0aT-0AOHXW diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php deleted file mode 100644 index 0f040548b5fb5c26eff8859380f744574ca5c0c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3676 zcmXxnWq1==6o>J}A-FpXP%2Q|sp0M}MM4{Bp_G!OK=Cyew{45t;_hy{S-0uBYu4Re z>3#qA)12RP&YhgOGV>%pDJw0@;|T=4!Soa-BGnu8Ith-~@Au|7(H_T%x+}^_NG!a> z7ODs;f{LP|s2D1SilgGF1S)|_qLQc-Duqg;(x?n7gFMKC%A&HU94d#(qw=T%s(>n@ zil`E*ges%Ts0ylrs-mi>8mfk>qw1&zs)1^vny414g=(YPs1B-w>Y}=+9;%1xqxz@; zYJeJ|hR8tk?uCNQn6L&Ci2NQQRaYqw(GI1vp zcQ$cn6L&Fj7ZXQyrHig84#lB(6ps>60!l=QCWliKeyAVnkNTqlXaE|B2BJY|5E_gIqakPr8j6OZVQ3f{j)tQVXapLGMxs$@ z6dH|2qcLa<8jHrFacCSGkH(`3XabsuCZgnIc;{;N^dvY5O-7T^6f^}*MN^R%dC@d9 z4W*zIl!{W35Bbn^G#$-AGf)~zL+L0T%|tWNEHn#cpbRt{%|@9h6U{+$P!`HUbJ1Mn zM}8DQ0Te_*l#Q~{JTwo@NAuAFv;gIx9JCNEM2pZOv=}W$OVARu6fH%|&@!|FxhvpG z7`hBsi6`J{@eo`C!^^kgwbtA4I_$25>uov@Z%}#_+$gSwo5W*qv$z)KiR)p$cpPql zp`&oCvK!zwWzWIw;(543#d_qO%I+t-OWBifw|ENf5l_Rtus~0=PuY!RA5vCNv|n6D z_JE2v!Gq#vcu0H@9u{-q5mEDeRLm!POxyyG!_ZB5LRl^8Nl`0$O2wMz)8ci;o`K;E_fA&^R#f+tkv6fYfZxqYmL8& z-QC>ombeGrR&}n{@?mSOz$4Zds1I3dS3PR2<{z_OPW|K7H}DhK-3y--_ra%Bou`R< z+FIQ_W3BV>thLVZbJn{3^VWJg*IL~dU{_Q7f~Zw{Q9MX!J?s8=?;Gn=qWKt^1a>4%pjrzFtS~Sl`Fp-^H$$>^<=!+4pU=R_FtzFOmLG z)O#~5ULpIDcolvuUW1>AIz^v~TKdmKozKt3Ta5ieybZsE1#0pu@outTi}%8BM4i5G zMNP+d&=tRjA-(v15VbNtYV7^o`6p2ym7m22$o`_S+5*2St7Z8Oy1LcxDn7&5KSb@9 zKQ&gLkiWz=6#orfjr~VieKY=r;e74-|8S^~F>xMGgx?p)&ImdQk^E1L^JHfRe8Fh* Sr?IfW?+a%8Gac2%dHx3%T`Zaa diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php deleted file mode 100644 index 479945691cebc26afca2bf4ff9f1b3c3da49644c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3410 zcmXxnRd^I<7>42EFt|Gm5F!xV*=&Nly98O1g#;bG!}~GX88%(p;*Wd`k_c9ROlyrzMphck{?Vj zy`+|^3@U@lqOzzQDu>FW@~8r;fGVPjs1mA#Dx=D%3aWxUY%!)E~q57ykYJeJ`hNvNGgc_m7s4;4SnxLkrDQbqAq2{PL zYJpmymZ&B2k&jxTR;V>3=;9Z*Nq5p_bHoI1Pn+1c$bZg+9JtJ_`O?&fwkx4XOD-R&N3_i($X+dbXx<#sQ( zd%NA+?LKbzaXYCmzoIV+pa4okX()(-C>^Dv43vTTp?;`8>W>DX0cao^hz6lSXfPU# zhM*y6C>n}}pb$D8jmKR31}jkh$f*) zXfm3Nrl2WkDw>L>p=oG3nvQ0m8E7V&i83?cjjKD;v*0W=8_h;@&>S=u%|#&;Li5l( zl!dZTHp)g}6h`yWe6#>9KshJ}<)U1)5G_QD&?1zF^3YFNBtwrn5I#h(NZ#a%O znu`wNE%JSMt9(D+CO?F?%Marn@?N}C-iCL{+wpFEbvN7tuNAMyd*uyypL{dkFW-U> z$Q$uN`Br>Lz6~FiH{m1lW_(n>9UqhLz{lk~@d^1Zd{Vv}pOWvvr{#O`8F>pnD{sZ; zWcxeM%l3C(kazI>MR_N_B=5q-vc2vS*#xKc7@XPX1{EB=Gzbac! zugNF4|GIn*2!>nPyG^P}NdvinpjeIOE!#UuH?Js0r)2ggbZAOHXW diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php deleted file mode 100644 index 856164536ef82f4e77209da0e67af9350b42677b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3776 zcmY+{Wn2_n7{~Ez>)NeYqap)}-7X7ucL&A_tDuOup<<$!Dr z-6`|?-xt2x{eGV3%${?0&hyN~#HA&rxmwG^(j!7OVwpq1vc63RCJ9SV!Cl z>%zLI9;%1xqxz@;YJd!6Wx$5wGT2C54jYRrV7QnGn?M(eKs8ak3G2W}ja&_*#5J&~ zxE3}O*THCUJ!}q3pcbekYKclYYUSLr)+Pt7!Da_-9Mo{WwK?ktI zK}QG0o$s9p>~hc<>~>&w(Zu&ax40L^z-q{Ys-sw?9)NK$40S~Y>V|AqW_A~K)ASHo zp4n4mfo3m}C7QiO7HReobprc}tkmo$YOVd@1ST~AwLk+=3>t(Y(O}dJ4M7djP!xfN zAzQmST-0uk5LIYKiaL^`MD6Ej@gP?oBOZcd#lvu%cm$4z6VU_|j^g8CQ#cVtp-IS% zCZkDc3TlqLs3n?;?4vM2JO&fR9Ox5s;WY6$oG#|UB=H1H7Ei(%a1ok`qEQNJf@Yz~ zC>6z`*(eUBAxra_18p?`zo;S+5LG0C8moUPq^N4fTv0`0o~ZsXUsUZ(hf|o;0@MX9 zM2*oR)D3}mYbEQ4Nx%h6P{0wthKl!#U$A6kW`p)52Vtwu>` z4N699k$oPn6EDE^;zgJ(UVTr?jYN9iaJEkGxbeH)$>@4!>yU3ePiXTUR}+WlEk{rw!YRO-${`xIj@h^OI2 z@eI5K^K~9CD|(jb6-9MCuZr13uZe2-*F_!P8={^`Zi<HUV}Bkm=9gYT{n3kP0D1`xL@%R3=oK^=y^4mQ*U(V(IvR%FK*Q0S z$WkqOOVrK$HVh;89c1g@dlwdD=$Yd^jm;tZeR!`4JJtCEs7n=~5yU=3Bhg1_6#5vA zMxUTD=uv;FR@5Q<4z}Vt-=o&(2h;}r zh}xo`P&@Q9YL9+F9ni0+Bl-<>LcgQV=nrJ6ar`Of5&a8ljep;#f0U|f`>$B|JQn44 mxx)RvKqw_>cp`Wgb-O~T0belEc`+?a@cV)xf2yH8x9dMXG%%O| diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php deleted file mode 100644 index 0bf828ffdbfbe208e5ee725770fb17a3560e8717..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134095 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%0Dsv?L$y5;b4PJ= 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 AWdHyG diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php deleted file mode 100644 index a593d05deb2677f456f5d87d26c555034c244ac8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372283 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
-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 diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php deleted file mode 100644 index d4e99f1f4310365ba3d0a8c27678f3f720f4c6b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291504 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 z 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 z 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 diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php deleted file mode 100644 index 267b190668f43dad5d1129cde15c033ed9e26597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231436 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 F{tLg)Cfxu4 diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php deleted file mode 100644 index d7a217c9306874e5ef39c99ac566a70c695120c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 zcmXZfMRXNO07l`#;o_P+F80 zr9WR2-E+B~VFJ5`|G1 zl|rRZX;d1OL1j=Bib7>kSyT>{Lj$7W{WG{DF)#*|N99okQ~^~)6;UNr2~|dwQ594L zRYg?;RSWKCwP05dcJ*M_2zHHN*9>;eVAl$Etzg#W;dj9;gTEiF%@5 zs2A#udZRw559*8hqJF3!>W})P0R!OuGq}?O;XpJ94MKy_U^D~`LGdUa4MjuIFfcdi1f`%9G#O1sQ_vJN6-`Cc&@?n1O-D1(3^WtXM6=K=G#kxEbI=?#7u}r;=gE0+ zzMKyi$OUkrTnHD*MR2iP4423yaH(7hm&s*txm*rc$Q5vnc^47bQFaI4%3x5;gAyW9?U$Q^K}+zEHdU2wPD4fn`B zaIf48_sM;5zuXTG$OG`8JO~fTL-4RX43Eeo@TfcrkI7^3xI7L|$P@6SJPA+9Q}DDr z4bR9k@T@!w&&hM}ygUyt$P4hIya+GJOYpM146n#5@T$BDugPohy1Wi=$Q$scya{i~ zTky8L4e!W1@IiRbejk$ddso`;J!!uWOZ$C9+V7*%ejk(e`?$2utI~d7llJ?%wBI+R{k|#f_bq9^ zZ%g}qN80bZ(th8Q_WQoH-w&kyekkqtBWb@MOZ)vq+V7{*em|4;`?<8=FQol`DedhllJ?&wBJ9Z{r)NK z_b+L`e@pxQN80bd(tiJwsr{CZ4TYkT5|UHKMZ$6Ac#g(~QWBFBA~C_+H1&g|gh)zK KV%YCuL;nN!8Z|Qj diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php deleted file mode 100644 index d60f6473addc9e2f2663c09326734ca5a91c2315..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3780 zcmXZfb#xSG6vkmZFt|Gm5F!xV*=&Nly98O1g#6Yd7xqK;!c6gG@=dzu)%j0on*in{kN9KsM zopIS8G1GilSnu7%Gm6qY|hDDv3&>Qm7OvjY^|3s0=EL%A#_p94e2>qY9`3s)#D0N~jX5 zj4Gols0ylzsv;ZNs2ZwV~FnWa>tyZfxqtrfy>DCZ=v`>ZYb{ zX6k09Zf@%4rfy;C7N(AD$rLS-136GEibYQ3L~$q%#iMxC3bjJ5QESu&wLxuBThtD< zL+w#})B$xs9Z^Tr33Wo9QD@WzbwOQGSJVx4L)}q#)C2WEJyB283-v<1QE$`-^+A16 zU(^rvL;X>IGyn}i1JOV<2n|Am(O@(L4M9WEP?V4WpMRR29tMY@;b=G-fkvQ_Xe4qW z7aD~|p+uC3l28(IBR3k2Mx!xk3`$1HC1aBdfo7nYXeOG4W}!?J z$b_@S*>H|H2WE*`aIQEP&J*Xs`Qm)IKwJP9iVNW)aS>cBE{03QC2*;@6fP5&!R6v| zxI$b3SBfj)DsdHDEv|-Z#5HiOxE8Jx*TMDTdbmN{05^&o;U;kt+$?T}Tf{AJtGE?z z6Su+b;&!-0+yQrrJK-)E)Faz1>U#HxyE(j9JPh}V2jPD4EIa@M2jD?gtLzu>-AFVqyRR910 diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php deleted file mode 100644 index d69220bff7d2555652dffb45b4e2223c11278da2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3746 zcmXxnRd7{T7{&48aB+7yK!`waC%Fmk?h@pZ1QG}#Tmgc+ySuwP2^CuE?)p;d?%uwX z?Em_n_WI47hcmPGIx{CRIVU5>=L>}c;mlMoDlHHWcz!Ps3WR2-E+B~VFJ5|u)wkPrD#X;d1OL1j=`R2G#(C9VnMhPeZC89*+M}Cxql29^AMqN-B)D?9_-B35w9d$=NP!H4-^+df; zFVq|LMtx8p)ED(d{ZK#DAN5BA&;T?L4Mc;`AT$^aMnljLG!zX*!_Y7^91TY!&Eh2l!da;Of(Z^qii$_%|baS2hB#aQ4j@D z2!&7>g;4}W&>S=e%|&z3JTwpGqFgi|%|{E+0<;hnj?SKJHtiTmJwaX&mD9)JhMgYb}e2p$#> z!z1DmcvL(JkHH6dD)_ir4WBTp;*(}|e9EknPn*^98MA6WYgW(a%qsf4SxsLstLlqp zb$!XKvM-y}_7$`0zG_zA*UT#Xx>=3iFst&LW_5nctkQ3r)%qQ?YR@yP_k6R8ziU?W zkD68eV`g>#xLM^tVOIP1%&PxMv-*F^e2n{W-+UZDZ9ajYF`vZGnor^9%%}15<}>&O z^I80&`5b=9d>+4SzJOmbU&ODPFX7kBm+|Z7EBFobRs5#;8h*=s9lve9f!{IT#P6DK z;rGn9@%!dG_ycnu{?MF{KQiCNADi#t2Xel?&!3pJ-%rij?`LN1_j9xM`-NHi{nD)c zer48vzcy>X-KRaB+9IK!`waXR`_J?h<5477_>{tN=k5cXxLvZpEc7H(P@ise7Bc zJJcze_uo(V{GKy&Gc)&`$+K|@87Uc-F+$cB7gYuxfC@;!~@}c}FKPrF#ni^`#Ls5~lSnns1B-w>Y}Z1mzfl)(KpAAji$i$6I+}Om8P29x9O-$U>#7#}y%*4%1+}y;?P29r7 zElk|f#4SzS%EYZq9Mzgtv_>xELUAY#xse;iqj;2n5>Ok|2DL?PQ9INQwMXqy2h;&| zL>*Bl)CqM)olzIm1$9MTQ8&~Lbw}M%57YzoL_JY2)C=`Sy-^?32lYjLQ9slV^+)~D z05kv%L<7+vGzbkwgV7K)1Pw()(J(X&4M)RKVj_I}G&MZ}jzA;PNHhwKLZi`WKZ_N=4(*cr*b`KxrrqO+*t>I!Z^A&?J$5Pyhu{5KTc-&{Q-PO+(XACdx$9(R4He%|J8JOf(D4LbK6qGzZN=A#^hY z=ZbUTJaHbJFV2Sx#07AnxDYN97s18iVz@+H0+)(Q;WBX9dM_( z6Ydgs!QJ9+xJTRr_rmOuCht>vAL;$#et1AU01y5@S%2z~(uYVN77xQGp`#riQT7Pg zqcE(~I;QL~vd6{a@Pv2*o)k~QQ_xYNomTcV*)!r9cvd_M&xz;YQ!qQEqdu?ndD0ie z3-F?N5nh7MC3soc%kT;es~)Z@dzI`p@fy4?UWYft8}Mo9=-i)yS!%;)MV-z~Q4Q{h zI;W&vgwc(4Js}_CEb3ri5s$LpJEG3& zE)1)r?}@sU?u**OtI$ykzox9#{JOGg;WtDr@=Z~n>@Cez>AWrKs(eRO3%@IB3-3Wk zb@jfo+R+E1KKF+jtQP(VW@$$si>El8Y*EYjMAS9=DRk7qpNR*V`?&_|7WzWeS$!$$ zUj0gQ)xclF@D*P5jRxziz7=(md?%_?z8BT)KZq*+A7OYeZ~jSCiT*6AfPaCG8u(Xb zwdUWHRsTK^Rb~%Gt?GBp)vNvx^}p{=QFroRqPFlibhL$klokIK)xVEmb|~lEV_cRM l;q&@~X#v|E$xl+36-@Vg1JUO9Y0dzjHxTrt+ZyMx{sU@pHv<3w diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php deleted file mode 100644 index 65a48ee397f58fc7835c9f5007dd118001523bba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3801 zcmXxnb#zln7{=knA-FqSpj4o^lcvSpU5bP@&_XFC0u*<5cXwSpX<^wd&APkqcHP~L zZRhvizwY;(Z|2@PGxO%0#3f{;WH=l?zuTXhWJM&q{cg);xxHR@rWNh5tf+^gELVKN zBep<=P$5(p6-Gr+5mXcvMa57tR2&sYB~S@e5|u=yP$}d<4pbVIMrBYLR2G#*z3-w05Q6JO?^+kPAKhzKPNBz+NGyn}m1JNKf2n|Mq(GWBQ4MjuIFfYlhI`4Ms73( zO+iU02_>Us9Knu}Avv2Dgjb;SO;J+$rvayTn~^x40Yb5%<8o;$FB<+z0oI`{4oc06ZujgongK z@UVCo9ubegqvBC`4CV!OqQ`CPNKa_^35K79xjKhaqR!#8Jz4EDntX=IXVuQq-8!fC zIojv#ww7{14(ja}7iwJTR`Yg?}2Ty4vB@ffpjXmm&` zziC^sxP^0WG5ogO*3k#$EDaCYecgpDyRS{pw)_tW1?1*BWm04i&{&rs85AOed%#gnSMf4rk@m*>8C_x`e{*@=lRl`YAe)li3;`G zqC)+Ss8GKvD%9_Z3ibOitQ+=$y1Km|in=d(qK^L~@i>e8SX87x5l_ zMJ4(R@hsghMFsjRQJeF%c!9y+h!^3vqSE}Gs5E~sUSaSLFnkmKsP0wxlc?W`pGAe| z7g3kvS5dF}P1HXB4)a1<^dD;LSLIJJ#E1V9v*6!iHvC7t1OFB8!vA3SHhiG&y?n+v n9gYaE#}`QRTdqj{q&gjebf3o`ZT_(q4DfpV0dKmcaZbno0Z>I1 diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php deleted file mode 100644 index 42e50e0fd412fe7dae7061749d94bb216f38235b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3780 zcmXZfWpGnz7(n60A-FpPD73h1DemrW1&UKj1$TFMcXxMoVOe)~Vcp%8-gAECedfJ4 zH$XqloRDdxlk^Y z8|6lMP#%;Q7!^iEP!UuV6-C8RF;pBCM+tFbb7N=dtzfPl%(a8LPB7OA=DNXLH<;@M zbG=}$AI$ZGIkEwtq5+CV(WoJ6h+XIckAgpq8j5 zYK2;%)~GdVgW90Bs4Z%T+M)KSJ?eluppK{`>V!I>&Zsl$g1Vrts4MD*x}olVIqK6nkz^guWe4MKy^U^EyFK|@e1ibX@w zP&5n;L&MQ<6o=x_2s8qXL?h8CGzyJIqtO^N28~5y(Ks{?jYs2AJc>sX&;*o#63|36 z5hbETl!TH{GD=1%CoTWBp1QOaxq*Ym%ycRDO@I(!R2x}Tp?G$m2xFqC0D`K zay48d*TA)MEnFwp!S!-I+#ol=jdCO0Bsam$ax>f_x4^A(E8Hfx!R>N8+#z?sopLAK zC3nHyayQ%~_rSe!FWe{h!ToYSJOJ;{JAn_nJ_rxNd%pEyw};staqE+gx;@JFm^=oL z%j58b^tmVHNw%ltDR^3*hG*m%cvhZ;=j1tfUY>^+;JushqT7q`lDq^j%ggYJ_uhh6 z-Cl*)llNX~1`-0Y54Y_?|T2$D{#2 zE)DnzX~0iP1Aa;x@YB+OpOFUqtTf=~qyaxK4fq9Vz%NPzeo6XGzAXJFUy%mjFAex3X}}-L100o4 zr2T#>53&7B+VAJ`2-`2D{eCI!_bX|?UrYP_M%wSU(tf{__WQlG-yfv?{wVGDCuzSw z%L{zwU!?v1D(&|-X}`ZqEBiy*@1N3s|C09mx4gk~|B?QT{44!s_)n(xTRu7zib#x0 lN*R|Njw#3g(dbZ0d{SI;RPg6C^@7B>6+(qjVN@6uK}AqeR1_6M#gK(8R2&sYB~S@e5|u=yP$^Uz zl}2Sy8B`XPMdeUAR34Q_6;K6K5miK$P$g6uRYp}%6;u^fMb%I>R2@}EHBb#y6V*hu zP%Ts&)kZe5Q5{qV)kSqtJyZ{cp)gb*)kond9K}b#+^6Z0NEnHtP!wu_8lZ-#A&N%P zs1a&}8l%Rj32I{0)bwXl6E`z)GZQyAadQ*5FmVeLw={7}6Sp#PD-*XiacdK|F>xCc zw>5EF6Sp&QI}=B==UcQ#F62TnC*Bl)CqM)olzIm1$9MT zQ8&~Lbw}M%57YzoL_JY2)C=`Sy-^?32lYjLQ9slV^+)~D05kv%L<7+vGzbkwgV7K) z1Pw()(J(X&4M)S#2s8qXL?h8CGzyJIqfvZ3%zc`k9s|dqv1lwBhsL4tXgu;D51N1` zpahhF5>X=ZA}^YVCZb7b5=ufzC>bTA$!Ic~f~KGpl!B(BsVEhtqG@OvN<(RAI+~7r z$cOyMj{+!wf+&b)pc!Z;nu%tiStuQ)quFRSnuF$`xo9q$hvuRAXg*qi7N882l>rxu z3t^_12^Wcr;9_wxTp})kOU0#dnYaut7nj2o;tIG@TnSf+tKe#JHC!XEfosLJaGkgg zt{2zC4dMp4QQQbOiJRbNaWmW^Zh>3Ht#F&T4Q>~=!yV!dxKrE-cZs{;ZgDr)l6T)={dDDSH4OSN1qO z0Ylo4lggeXdrE7s!_&&1hG&$$0ndsz;W-tbgXhKb@B(zyI~TQ94Sq?yP4Q)zlcBA? zg0rrWzA9dY*R=Q!ybc|;gM=f)Brye&#?B9cozNu9o@-4!fdtZPb$7Z@z3H#_=|W6 z{;IWl)o;pbet%b1XY_}to8nIu>kj%$)TQ&csQLXz)JXmd9reb4Fr*K9tm3=5Uoy&N mSz$h}KbR7*-QoNrby>kwzc&zR{+{L)_`HFjFV$9^%laSmz%=>* diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php deleted file mode 100644 index 5f23f515c40cad0483fe085c94b215b720765e7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 zcmXZfb$Aq46o&Cqd~tVJAduj$A-KD{1qe=n2=4Cgt_4c5LUCwIl3MES?(S}6-uJIP zzvnx5_s+~clPAquOdCHf6iQ5rO`0$|95E&~DK;Dvj!j62ogIz}g~O5eM22IUXM9x8 zP$rZK-HYx;nNenx1!X~5QC5@{Ltzv~Q?Vzp`)OCWoZcx_^>Uu$4FR1GWb^V}j5Y!EVx?xZ^4C+Qf z-6*IV2X*71ZW7c@f;zG(yJ(7{Q8a3XnxPmJgPNn}s0C_)TB4Sy6>5cAqt>VmYJ=LM zwx}IyhuWj|r~~SNI--uK6Y7LIqt2)c>VmqWuBaR8hPtEfs0ZqSdZM1F7wUz2qu!_w z>Vx{CzNjDShx()bXaE|32BLvz5E_IAqrqqh8iIxng?B%LGd&CrL&MQBs3XKMpMuf6p!N3R5TS$ zL(|Z7G#w?N1eAypQ4&f*$tW4kKr_%xG!xB2v(Rib8_hv;&|EYZ%|r9hd^8^|Knu`9 zv=A*qcNW3Laxq*Ym%ycRDO@I(!R2x}Tp?G$m2xFqC0D`Kay48d*TA)MEnFwp!S!-I z+#ol=jdCO0Bsam$ax>f_x4^A(E8Hfx!R>N8+#z?sopLAKC3nHyayQ%~_rSe!FWe{h z!ToYSJRlFigYqCeBoD#EFx5wP1g5*IqcF{o$8uZ^*Meg*R>XirzBy5Wa2d z{JtZ7zVF(6gs*zf)T8pgsV|uiOg&d0O4oh_Q@tA>n>tpXn0m}UmENn*Y(Bv@J~#ED zd|`Tu^h;A;UtgJ?CjHvfN%_Xq`TbUU>%Ozu_w)DC7xE7<%_I7w^smNGFy$h@`?GX@ zf3exG`qlI@&A-Vj@OPWNqCez0(m!qX*8OFAf%I=vNAe%(3+i8+kJ9`fOwahCD$$`( oL_%C*^5mp&OlAHZjSeNpC&nd31^=67G$h0&B`3s(?TZfm53l_*NB{r; diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php deleted file mode 100644 index b31bb83f400bd1597d5e5b1024755c27ae92eb04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3674 zcmXZfb#PQy7{=k^aB+9IK!`waXR`_J?h<5477_>{tN_8?-QC^Y8ECo-EurlcT4-?? zTBty$1})Uc`MrPL@0ssAchBB?-ksT~n3RMR%kuhMzQi~?B;Mt7*-qQ#@wig$aLcyC zJ_xg&(HWP>3}r%@P-c`FWkFd`R+JTGL)lPvlpW7!^iEP!UuV6-C8RF;pBCMeui1yli5L={mbR0)Nk5L6jeMxiJa#fHK6S93zlfPsT-KOp{X01x{;|HnL4a7yJ(CY$bq6z6mlXbibl~W2F0Kzs0nI{nxbZ?8ETH2 zqZX(IYKdB+R;U$fjas8Ns10h1+M;%-9cqu-qYkJ8>WDg`PN);=j5?z(s0-?fx}t8V z8|sd_qaLUS>WO-yUZ@x9je4U#s1NFk`l5cQAL@_#qu5yZ{%X$j05|{*L<7+vGzbkw zgOLll&=52P#i2M9kK&OVxzSKG6b(bePy$Loi6{{bN5jzwGy)}|Bs3C@M9C-_jY6YP z3Q9qv(P-pB9^^${B>M}9O0jX`74STqieL#ZegjYs3r1T+CnL=({@Gzm>clhG73 z1x-b1Q{gmm8k{aphcm<(aHcpD&Jt(A+2U+CN1OxaigV#SaUPs6&W8)c1#qFb5H1oI z!NuZYxI|n6mx@c_GI1GPE-r^F#1(L*xDu`sSHacdYPd#R1J{ac;W}|0TraMN8^jH8 zqqq@n5;wuk;%2x-+yb|XTj4es*bTSCbnR+~hIi22Dei>3wN~7t?jE{(#l3K!hL6Ji zFsMx)P**%Co@DqCOgjXRXzc}fR9)TqnAU0=$JIT~@Coq*JSpmfPKl@Jo`!*4@Qk`= z;92o3Jg4Df@H`Cav0qSEyeR5}F2S@*ti7zY7vUB7ks|q_s7R)Xiex}k27@r5;9M1z zvTGVv20s?n{X|p-uZy}>x~L4^5S77CMP=|aQ5pPPR0h8g6}p?ELU&74=)M#cy02hB z=lQm}3f&!1q5E3H3eGp`Ds*>6h3=lH(A^ic_5lnYKnZj6}ngAVTOMekHB9< z9sXZMh3+>|q5EA_=>C8KJ&o7up61SPM1}584ePh=FLlo`{8l^<---I6_*+!0{((V# z!GA^F`9GMRaW*0xmKEZ0d;Lj1+ZoEgM2F>1_PTxH<}YK$fXD6gdy;LOG`?#EPucgNKUZB5zs)Q<|%BTve zf~umb$VN7*hN_|Js5+{FYM?L_hH9dkC>({O_z3vy)67UDj6_i=3e`fjP;FEjMWbj` z2h~A!QC(CI)ibJZ=Ci(u8<@C(i5r@@p@|!rxRHq)o4B!wo0zzXiJO|ZsfnAJxS5HY zo4C1&TbQ_oi6dHaik8TQTqp*`AUATOSQLxmP#kK7TA|jcHEM&}pth(jYKPjP_NYDT zfI6U#s3YoxI-$;}GwOo6psuJZ>V~?Z?x;KJfqI~xs3+=$dZFH^H|m4>puVUt>WBKF z{-{41fCiv}XdoJd2BE=dFdBk}prL3eijRlSKFv%IgTv5pG#rgUBhW}R5_ymZjY6YP z0!l!MC=q#)7mY@v(HJxaC7~pgjFQnS>){4*1KcQXgqy@oaI?4>ZV|V@t>RX=P22{zi`(H2aR=Nf z?u5IcY*Jf-X@cv?IS&%lso@+{2KjXeh)J)`sLJx}ii^&Wv2#q01A z%+fqxRJ1fNr1wpjsr`LR)c(FL>QwKDnvHiwUD12cIm15so4 zp{V`+NWEH(k40VJCo0zdehNc+pr0wLxq2XKaUP1AtItL4?-$|$&itjQE&B?Fv`1fy zdMMwhSiA78vU+`er|dDl`Fmw`>wZvH`};`LAU#&GdVdu4LjDOl8p5ANo$41AU*dOv zg_+vl-^2@Ke-||je~9Y+Q`G+c1)X#B{;lj)_>ZVp-@l^X4F9QD_v(L97x)BbW#76e nmt}?dy#8QHz;=i8chqGCQ~lmRr1@`}UEuQug1%H+buQ~EguyeV diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php deleted file mode 100644 index fd038823053f32e5358a44934fe6fa62c5d43f67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3780 zcmXZfWpES;07T)#VR3g@Aduj$A-KD{1qe=n2=4Cg?(Xi~<=o-ig>!dTGVlGG{%WSS zcDJXeY8p14IBH@jl$aEoG8PkQ3+H6l|&^` z7==+OR0@?wrBNAF21TF z1yw;+QPn`zg8Q>tkgEr|dXQ@bxkiv{2DxUCYX!MhkZT9Ic981?xlWMl2DxsK>jk-9 zkn0Dzevl&@@GTmkXcUbaqJ}62#h^y05o(MYqb8^cYKoeoW~dozj+&zus0C_?TB25{ z6>5!Iqc*4wYKz*UcBma{kJ_USr~~SVI-*Xf6Y7jQqb{fm>WaFeZm1jTj=G~Bs0Zqa zdZJ#a7wV0Aqduq)>WliKeyAVnkNTql1K@*Wa8D0}1JNKf2n|Mq(GWBQ#iCd=6b(hg z&@eO{4M%Y(4vjz~&`2~AjY6Z)Xfzs)L1WNZG!~6Rt@0GyzRO6VXI82~9!? zC;=s+M3jV*P%=tJlhI@}1x-Oy(Nr`IO+(YsbTk9aKr_)yGz-l_v(aoc2hBlqQOaC6 zPtJq$<$Sn6E`ST=LbymSf{W#1xI`|2OXX6yOfG}V<#M<}u7E4$O1Mg{f~)0fxJIsl zYvo$FPOgLN<$Ab5Zh#x*Mz~3Cf}7=LxJ7P(Tjf@`O>TqR<#xD3?tnYxPPj|%g1hBz zxJT}Rd*xoZ58k!k{nCC9Nc%k~?e~zh-^0>=k4XDHD(&}}wBO^>eosjIJt^(?6ihkA zPdM#a`#mG=_pG$vbJBj#OZ&Yb?f0Uz-%HYdFH8HqBJKC8wBKveey>aWy&>)QrnKK% z(tdAC`@JLW_hD(jkH~%eS1EEod{iEQkI94Zad`+nArHeR$@B1Kc>%s6FTz*lCHR`W3}2U5;2ZKPd{bV7 zZ^`TMZFvK}BX7cYExt^S9Fdeka}U_wfEgXZC}q9q^CR0skZ&@Xyi#{~{gm zuhLKcO*-J;r33y$I^aL01O7`o;J>8<{s*Qwm47|!fd7-J11=vO3PmKuB_@wc3dfY= deKb0h9G@7M6cxOjre2T`mz10kANIQF(EqUyHw^#) diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php deleted file mode 100644 index ed6f72f362f7e68ceb8f5964cc783aa0e198283f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3104 zcmXZe)l*eb9K~@PJ$8$ER3sD=`*Oj=E-X-tD_jLd#2YGhw_taR-CYlk-Q7Of-G70y zzw2qQ&;0hBn!RRDWORCRx@CENE?-Kb9hBtqxooHH@_1YscBp0BA-O_qXH?D-o}=6- zH_C(Zpu8wA%7^ly{3t&vfC``h6o3k%f~XKGge+vC!l*DRf{LJ`s3Zm%Zfoh8$jq0E}C>({Ox~MLy zhw7pFsJ>AHb3PlG+|cBPCO0ya-t{{g`!b3YK2;%)~GdVgW90Bs4Z%T+M)KSJ&Hjwr~~SN zI--uK6Y7LIqt2)c>VmqWuBaR8hPtEfs0ZqSdZM1F7wUy#Q7r0>dZRw559*8hqJF3! z>W})PI24ECQ9K%e2B3jxAWBGp|5tOS2f;yTFdB@8pdn}|8j4)Vg@&PFC=n&1B$R~Q z$c=`h;b;UJfs#=&NV+{Wfh;&ymh+ySqMy6;tSC(~=hA|p{rxDazn?_)_p_+}ei7B* zucG?q}kf%u>JuP5rh^1 diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php deleted file mode 100644 index cf723ac686da214bb81f7ec12f1a1e039af4acf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3692 zcmXxnb#N6|7(nsj@Njo{Kp??gLvVL@3lN+Tk{4WpySqbakpjitTIvSv)V-zd?lL8N zPXF5PH+T2V&d#}W=QVAfG%hI=N{Pfr#*Yd|jgF7RhvUNW$;t6E!!e<7IQqWma9p$W zOSN=mKp9X*lo4e@nNVhw8D&9PP*#)`WkcCec9b3EKsitdg-}kE6Xim=P;QhPWR2-E+B~VFJ5|u)wP-#>e zl|f}tSyUEF({rl={3Lvg4XYKEGl=BNc~fm))Ls1<63TBFve z4QhkhqPD0VYKPjR_NW8ufI6a%s1xdhI-}003+jTpqOPbL>V~?b?x+XqfqJ5zs2A#m zdZXT`59)*ZqQ0mf>WBKH{%8OifCi$0Xb>8N2BX1f$Pjq%8Z!(G)ZV zC7~oV6-`CSC>f=o6cj-bl!{W(G&BuON7K;^Gy}~nc^47bQFaI4%3x5;gAyW9?U$Q^K}+zEHdU2wPD z4fn`BaIf48_sM;5zuXTGz`JR_$Nm4?7dhzd2f6)_JOmHR!|;ea0*}h0@R&RXkIUom zgggOH!nHUUJneFH5t$BF*xu z&tB!(Yp$B*byu&mdc#$-yeZA{5owl>O0&Er&GIp6mXAxbd_wvqpOj|#lr+nyr8zt! zt>IZ|md{DEd|sO63(_oaOS8Nq&GJQQmM_Tze5;qG6}}=LVD(k`Abd^Q=G>>tt%`=@ln{v|y}{+4dof28NgzcPKpR*nsYqLLF*QYS^i gah3Sr7#m7WOi75u1b-saZ%9svq$VeZy)QQOA7qLkyZ`_I diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php deleted file mode 100644 index c978731a429f57aa8383c20fd27a66ddd4519af6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3242 zcmXxn)l(H=0ETf3W5vKiu~tDsF)%O=2NVlCutntvM?nGcgo*_gb_aGBcDG*WAK|5n z-JLT!%J;lp?faW=XU>_OXLe@e5^^(gEz9e3`7+b&uymKtWjk$`$K%SgBQ4vGC=+2j z<4Z5mr7DZcqH?GlDv!#e3aA1KKmn*Cs)#C~N~kibjH;k2$U+vXimIYO6o{&!YN$G@ zj%uJ9s3xk3f>02ug=(SNs5YvD>Y%!)E~pZAIo0cwCkPzY*>8lpz15o(MY zqb8^cYKod78`-ECYKEGl<|q_}qA(POTA&sv9EGEl2>9=68i|CFC<;ZPmZ&9ag<7F# z6pdP=)~F3?gW96DM(s?W?aYobJI3txX16!HgV`O-?r3&LvpbpH$?RCOW6kbtc4xD@ znBB$fu4Z>NJE9x^q8oA`2Z}>+$cdaN9>t>slz_UU?x+Xqff7+7>WO-yUZ@x9je4U# zs1NFk`l2M1g!-X=s6XnD2A~0GAR34Up+RUc8jOaZA!sNXiiV+KXgC^qDg2HN=2#2gyP# z;6`yH+$3&-o5js=i?{`D6}Q4|;xDeI@U(au zo)OQ$v*KBJPCN(Ci|645@dCUkUWAv#OYpLI8D0^uz^md_cul+puZ!2=4R}vC-_+?% zPH%~~;BE0Xyd&O$4`4}wp4~%yUj;uBRd9)@f**@2_=%{3pNcB@nW%!Fi~8Lcq6&T~ zs^C|m3VtoB;5VWQek-crccKb@FRI`Vq6+>f9^mPG5*74kQ9*wZ74%n8L4Ok!^mkD~ z{}2`QPfN0qe#4Riy><%3)by9=F$@<+GjPe04Z1e~#Dfi!`4gr8juo MKEEf&)_o4^FR)&yX8-^I diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php deleted file mode 100644 index 2a3e36a486511cdabe21a6bd873b37694f642d57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 zcmXZfW0)3u0EY3C>&v(^2Bk%5 zQ96_krAO&e29yD1L>W;glnG@K9mpTNBL0!Q~(u31yLbX2o*+!Q4v%G6-7l+F;ol{N5xSIR05SmB~ciK zQ7Kdkl}4pe8B_*Epa@hJl||)HIW!;=KDY*FBnn2M@~AwjfGVJhs3NL_Dxu1#GOB{A zpsJ{9plZSStQPF*!LAD|J?7G3O8|-?)t{3e3 z!LA?d$OgPc0~C#-QA5-a#h@6}2sJ{DQDf8uH9<{LQ`8JKL(Nfh)B?3YEm2F<3bjJ5 zQESu&wLxuBThtDIG++RHa1GA%KsXQ$LW9s?G#Cv*Lr^S=MMKe0Gz<+x z!_jaQhvLu(Gy;u8Bhe@{3XMji(HJxajYVV8I5ZB8N8?dEiboUB1T+y%M3c}YlzcequdBL$xU#x+zhwKEpV&c3b)B^aJ$?NcgP)Zr`!p5$z5=_+zt20 zJ#eqw3-`%=aKGFS56A=Xpgaf<$wTn4JPeP>Bk-s^3XjQS@VGn_?>%Y1DbjxLOZ$CP+V5l1ejk_i`-HULC#C&9CGGcV zX}`}%`+Zj0?{m_ApNA=)_7}Wszb{JreM#Ey%hG;dk@owlwBOgH{k|^k_YG;kZ%X@p zOWN<-(th88DIU>x;eEg8Js-B;_oe-QAno@>7`~6wk?=RARf0g$8o3!8G zrTzXP?e|Ye|u?ripySuw~bvt3Z!|m=4SMK*c zfBnwqIcJ#5{oVII&qTIQicj)*k^{a#LX0;k))(-3qr5)9-L3vSLln>=Y`B8pU02M$5Q9)D)6+(qkVN?VaK_28mMNv^y3>8DgQE^lPl|Us? zNmL4zLZwk@R0fqnWl>pF4wXaYQF&AWRX`O{MN|n@LX}ZvR0UN*RZ&$`4OK(cQFT-U z)j%~-P2@#hR14KYwNY(U2h~AACbx|-1M$sYg;nSUwP#B8BP#CI*>Y@6mJ_<+S zr~zt#8lr}%5o+Yr*qzVDu5RM$Ca!Mk>ZY!4=IUmyZtm*lu5RJ#7OrmT>Xxo<VmqW zuBaR8hPtEfs0ZqSdZM1F7wUz2qu!_w>Vx{CzNjDShx()bXaE|32BLvz5E_IAqrqqh z8iIzRp=cNyhK8fzXapL8Mxv2u6dHv_qtPfj8a{lwGd%{5L1WQaG!BhJS=u%|-LjJTxE8M+?vbv=A*sY3P1N z8eU{xj2D~J@e=a}ywse5mzlTX<>sAuh4~;}X+DWpnJ?ni=9_qpoTc@qo0rmGYhH=h znYI4)X03mNc_Z^1&71Hh^JctRPTz|&tS@KEE4R_lGH=IQm1z`&(Xc7;pOmgbrsPk#7lIa)UX2il)4w_KCSLD_>8(&;j`j3_?&nhJ}=&Y zFNnGsUKDT9eM!6xv&B0w2j;AYFNL`99D#)LT%JFBS z&h_V_ZhU!tzKzePp*AMq56{8v;${}Xi|JP>o^9v0#8 n1o`8VQ>F&IQNjF-jqs!-CdUOr-EZ350e@T|#h>WaT!iO;WL94R diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php deleted file mode 100644 index dbbf96be1470ea7d188775080050f13815ddba11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3827 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 nSyqJ4>kp;{Y|1AN{<(3fs&oXh$jw@N_P diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php deleted file mode 100644 index ba6d203dcabee1831ae4ceaf3a3037340ffe7d3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3721 zcmXxnb#xS09L4eCFt|Gm5F!xV*=&Nly98O1g#0v` z0rI|g{+jzazj>3*&b#lNjfzQ0NUK9mpTNBL0!Q~+7XLIqJlR0tJ9g;8Nt1QkI= zQBhP36+^{Qaa018KqXO0R0@?srBP{A29-f&QCU z1yw;+QB`Ck8&yNqP<2!t)j%~+2nsS$sCCybwk}ychnvAKs``T)D!hWy-;t|8}&hbP+!y+^+Wwo zf7BlhKm*V~G!P9!gV10!7!5%~&`>lK#m2&CSF@*w!C`1P8jePw5ojbDi9E=IMxjwC z4#lB(6py^fi$Nt4M2ToD8jHrEaVQBTq48)uN=C_O0-AtQPzsueCL$m5 zAwTk?01BWW3ZhA95}J%AqbX<#N=2z?Dw>L>p=oG3nvQ0m8E7V&iDsc$C=ESMKZ4Wc zv`u&pzOxEuIOA=2uH$`pp5q;OzT=&E0nVBS7dqn;coELj>c!6ZBI6|*>%%M)uQFZf z+`R#>a=a0*cDx0zal93;b-W9&bG#a_cf1B~z*&0SMvXJHd=t*pf4J45NFSGWFcm-Y+wK=bedcW7j>)d<;-cExz#o6$dm=14?bKvu02Fw)a!aJf0 z_kuW|>5Jk5_>#B~-W3;%!j}#5Z-QO2=czhu0T>Mbn&f1Se_4i{@ z{e3K|zn_Te@28^r`hF)D`umfp{{AegzrTp;@2{fz`eFG?=yeR^EtnH=gggX-Z|$+#iS&pSe8HF2_(kZA@QDo$9CHupU;zOhg-HC z_EMPbj?O+rW-ABEfpVgpC>P3wa--ZR56Xk`qP!>{%7^l!{HOpbfGlL8f~X)WgbJa; zs4yymilCyXC@O}Eq2j1GDuGI%lBgsqg-W5)s5B~r%Am5SEGmb}q4KCas(>n>il`#0 zgesxRs4}X8s-UW#2DL$LQCrjw zwL|Sud(;7SKpjy>)CqM$ol$4h1$9APQCHLrbwk}zchm#*Ks`}U)C=`Oy-{z}2lYXH zQD4*#^+Wwpe>4CMKm*Z0GzbksgVA6#1Pwt$(NGi{3tt>fr-#8|XgC^QNXgo?r$!G$afKpHj znusPMAMznT@}mF>pdbpONoW$9j3%QgXbMV2sc0&iil(7yXgZpXW}q2pCYp(6p;;&m zWu@=J>2lgzcs9PY1ZFtnxA7duTku@R>+n3s>+yWY`|v`?$MIsvZ{j76SK+0O*WhK2 z*W%@lH{cbHm*SO_$;6d>qJOnc{ z;9*S?2gJQ3d`+JjU85qCR9#MSVxU z6;2ooA!$!C)E5zsZ2a^J}JCuKDE-RSq_Xfhv S-?i)$eBMCNmu%}im-Rn3-~){S diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php deleted file mode 100644 index 1cfadcf2b45b964117e92888b6cd54a1c501f1bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3691 zcmXxnb#&BN9L4d)A-FpPC>1E~OsB=&U5X6tKntam5uj+d6lZr2?(XjHFvCh$VBLjv zcQ@$!-u#vOIlsI#Y2M8_6PJ*Yl3`i?fG3ceWJe@>0v_9Kdwf1mrX6kBcGP20wmUxW z5SyobC?Cp?@}mN%04j(IqC%(;DvS!FBB%%|ii)CQs2H-4g^Hu%s01p3N}`ge6e@*E zqtd7hDuc?RvZx#?hsvY!r~;~hDx!+05~_qMqspiXs)DMbs;C;OhN`3Ls0ONmYNDE` z7OI76quR(uHmZZ_pt`6os)y>K2o!Z%NHmN_F(?K#Kn+ks)DXp@ zSkwqLLXA;l)C4s#YHIdpQ^g~=^UZfSB$lUteG%H-B2w>G(r$!$z- zYjRtY+nLsNC;@dq9Z*Nq5p_bHP-oN`bwOQFSJV}C zL)}n!)E)IeJy1{76ZJy9P;b;5^+A15U(^@%L;X;H)E^B%1JFP;5Dh|u&|owe4M9WD zP&5<`L&MN;G#rgUBhW}R5{*Km&}cLoB__g0N3*BLz%ghn8jHrEacDdmk37hOCZGu@ z2_>Oql#IN{izcFpXcC%)Qcwy?MX6{qnvABPDJTu4p{ZypN=NBv8k&YOPzIWgrXwHn zAwTk?01BWW3ZfZk2AYXxqFHDb%0!uHHkys*pgCwRnv3S4d1yYGj~1W>C<{HvK8myD ztj%~KzPlRcIOFYjk>mY%vE!Y1iQ`>(Db8ICmpS8;csUMh^$KTviSbH}bu+7+@kYk0 z9dE*G9B;*I9dE0Po)%BTGvXO|Ry+&OiRa*X@jSdBUVs-x{o5~z+F+MOy|OFf z71mxAufl8MHF#aT4sVDz;7xcZ3*HhRhquLSct>0aLt+jLi;Li0QI&dHT*CAjaVdOO zTn3*Lm&06f1$(q!k5IS;5``9cjCULtC+qls>rX1s>Z9LYWJGBj){*X2Kc6^Pr_TGz6fuN`nbI#Zei`aqWb+F3~7tL55sz*4|MVl)_y3ezaNR}?*mc& z{a93gKM~d6Pet|jGg1BhTvUI*5Y^u=MfLY9QT_c|RDZt_)!%PL_4hkb{rz54e}8}> zJ^qiHs=q&p>hI5@`umHh{{AYezrTs<@9(1e`-iCh{wb=ze~Iev-=g~akEs6s3q!i+ z|6o{8^uJEd>u-$9vLbw5e=sdzyCeD8=(2+8es3V!{D#as!RHMGed)H&b6F1ozXvC= diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php deleted file mode 100644 index f73cbb6ffd844dcc04e7ec63775f611166299b26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3454 zcmXxnWpGqi7{>A9aB+9Ife?Y<&Snz=!QCy$k}M<;LRbNUh7f2OW^k7lcXzk6v`lEx zLO-^tA}zE~fthxiod0t_-RC#&Id}Ixd+$55(Xr{t>6YaWcmgSjc4(3(;IZAd$LI58 z*b$a(hkp=myJHG2Q3Wc53ZcTNFe-wIprWWKDu#-o;;1+(fl8o~s3an7^Dvv6l3aBEgh$^8YzHPE~<;_p?au3s*h}BqYxB=8lVQKA!>+1Q7CGJ8lf;0h7!VI{?$Aq5ikNp zqDa&jHAYQP6BLD_P*cS*+8AJhl+MSW2})DQJX{m}q401ZR~(I7Mk z4Mu~}5Hti0MMKdrGz<+#!_f#d0*yo?(I_+ujYgx<7&HbYB*6Tud8Wt0v1l9`hsLAv zXabsmJjjD4qKPOGC88vhguKX$CZS1aGMbE%Q8G$FDQF6sf~KOWC>5omX=oZsLuqI_ znvT*@I+}rIARqD}Kk}mh3ZNhgqM2wWnuTVe*=RP(KpAKbnuF$|xo94mhvuXCXaQP) z7NUhH6Xj(c!C7+V7Q7hWUIVk8^2d0I<9&Fk;~n@z$2;*yICm*r=9Ew1<&H1n)s8pe zHI6sqwT`#pb&j{=^^SMp4UX61jgHshO*mJ#+pKc7wr_QoUt;+Vd`r#l6xHi4QJZ&* zyV<)3=4BnidsW^G_lY{!{o;PA2gC#Lpm-1-f;k)EVO0;qBcgurqvBDj$HZgsxOg0% z5cPAN6i-q;C7yz(#nbSNcm|#o&%$%!Ie1h zOHmDeC91)Dq8hvppJvkU191_2C}zP&;$rw%)Zu(B>TsTjI-IAX4(A(Dhx4ttiaUQN zu7-J{X3+Pd-r*lay~00=>)HF0xB>nw>ecu~)OdL&YPviZH40ydTe;OsQM2M#QIqF4 zQFHQ@_z8Poiy9oiiy9n%h#DMkL=BF&;vR1Gr>ME{m#De%x2U=CkEprvPSo6ZFKQzF z3-dBp@JatUUYYMmmt}?ey#8Qnz;=i6Ps(Kl)BN5*g!x-lu)yaH1bu0?*14?z0cX+f ArvLx| diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php deleted file mode 100644 index 953704f6e5af289f97294f99980d3a2e651609bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3800 zcmXxnbzBsA9LDjpb?t5)6$!;|VZrY1z*u1w6cLwQ6%!G=+ zJo$Z|`D?!K*YlfU*ylI1uZ@mPO-yw-(!4HjQoI$C;PSdGr{(f^T98kIq1 zP+3$Kl|$uFc~l-%Kow9$R1sA|l~83=8C5}5P*qeFRYTQKbyOYIKs8WJR1?)gwNPzT z8`VK|P+e3PS;#{5P(4&1)kh6b0~CTnP(#!Zg`!Xt7X}|6%^nGd;V1${phl<>YK$7A zNEC^hpeCp(YKoenW=74;{%mgM7G`c?=9Xq|Y35dDZe`}yW^QffHfC;P=C)>TYvy)l zZfEB9W^Qlh4rcCP=CF?3MMo5cqEIx7Mo#2JF(?MbqFB@kbwZs{XVe9CL0wT-)D3k* z-BEYc1NA^XQBTwh^+LT-Z`23%L48qQ)DQJT{ZW5301ZF`(Lgi^4MKy_U^D~`K||3{ zGz<+x!_jaw0*yc;(MU83jY6Z*Xfy_mL1WQa6c+~{AI+W~2gjlDXgr#LCZLIEB61-Y znuI2ycodHkPy%uzH=2wlqbX<#N<@h$2_>PaXeye9rlDk%jHaXMCdqxon7T7VX!g=i64gfdWG z=4reb2kyd5#Th&C68vBj%(COXc&Y89c$w|}c)9HZcm;mA46d}}^LP~w+<>d?SYCs( zbu(*WP#0S#Zs+9n;tIGyJO?+zybP`0WP1nsX4|{*7TbI9leQ1yt+qGgZML`I?KpS> z?ogbi(|0P~NW9BF`zGFvvvu)3cD#moukE#X9}ep5{qVjzIRJBX@i2=DexDW9?{lL1eO^?*FNi0(tB0cceNj}u zFNx~+Wl{aUBC6k4MfLldsD57;)$bdk`h8PWzi)}^_ia)Az61T+_!n}Ns_uZOx`U$X z&K30xz6%2xTRKMTAz)Jqmx8f@JoffO#??v_dgBGu5@sFb3S3ik**ZnN6 zWAQK0uYP}3x}NkmaRdBai&f|!O7#-{Q>hC5OR2tm{#L5z_a9Nu@4qlFL$~#xZQaNt uoST2Kh$x36#N$r$C3`JrD8Eso9KMt^w>RAUV9j6PaeIB96ie%(9RCC6c1dpl diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php deleted file mode 100644 index 78580ece01bbaeb2477c97dbae88eafe2579e4a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3616 zcmXxnb#PQy6vy%6@Njo{K!`waXR`_J?h<5477_>{tN=mNG{7(|?ch!+P~6=Md0A+i zy1P(!cP01xdw=cu%sKbXm2>aRCM0F0Wm#4*-I+yqDRvXeyeDrlDzQI+~7r z$cJX287Kv%pj4EK{K$`HqM2wGnuXF(8cIj$Xf~RS=Abz!17)DOXfDb`nP?uGhq6!> znvdqA01BWW3Zf7Sp)d-g1!w_Uh!&znXc5Xr*=R9ZjFzA!XenBXmZ4>6Ia-cZpcN%u6N;0uJ_{2t~cNU) z6z>=J!vmsr`Ji}^>>=oA8xAXbnCuZ4*$j^=dlViMb>7Ft<77{WC*Vowtb(VM)mfev zPm?_(o`Gk@v+$gF4xSg!!wcdCcu~9vFF{9ba9LTk&=nZjLh)5)ufl8MHF#aT4sVDz z;1kf%w%>#Wd1P;i+MIkbhpZ!NuL_`}u@P}4#kWb-pWV8Xt*z znm&e(F6<}b<9zv373*R8Ow?X|F0Q5c3yszN{Srp>$b6+@?bX+!-i>cW-IQ-dUH0!p zHUIZ8qPO`6Q7!tTs0RKCI=a6hQ$h1}G GvHk~;j}(jm diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php deleted file mode 100644 index de1609d85ab469a8d4fe3e139a502b66b0c10c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3662 zcmXxnb#xS09L4eCu(&%65F!xV*=&Nly98O1g#y^lnjT%=Xd*4ldOnjx8H5KEVtL|&a|Q(mKF6- zl;w&qIK&pH5GsTUqr#{NDuRllqNo@uhKi%&s01p3N}`ge6e@)r$bm|u(x?n7gUX_^ zs2nPX%A@kA0;+&2qKc>zs)Q<|%BTvef~umbs2ZwZAI|LKbR(8lZ-#A!>vgp$HU#8l%Q25=ElKDEQ!L_DD30MlmP`H9<{K zQ`8j2qFB@nHABr&bJPO0FluS`XG=4;GIJ|4w>EQYGq*8w8#A{xb6YdFGjlsLw>NWp zGj}j^2Qzmxb4N3GGIJ+0M|I{dIwL1?qBs z2kL=(qMoQ1>VqJd}-8iWR;!Dt8?f`+1@Xc!uX zhNIzV1R8-xqLFA68ihuq(P#`BgT|tKZ_N=4JrbTk9aKxrrq%|tU%I!Z^g&@7aJ zGSF-^8+nlz`H&C!ksk$60L?*j&|EYZ%|r80Cdx$f(R{Q3EkFy=LbM1iLW|L2v;-|d zStvjIIL?-{p2SOWXg$oa3!lp&fPEWhX=$1@Sv!7a7a8vdRRORkBCR$QSm4|CLV*wMQx4~;tA4| z;z@W)JOxjSdbMZ7Go)w5v+$gF4xSg!!wcdCcu~9vFNv4nWl@j)il`lRRn#lHCSK#* z>*95IL%acRiZ|gc@fLgv-pPVbix0!wVm7=3gJMu=4r#8q42DFN<{5DX>9gWW_?);3 zJ}*83^TgFK48ywT7nH6ceNkKsUlJdKFT>#D@D-)&;HxmK+jvc>s`0w0p1lD>s>Yj2 zH*u-A#Le(+QQv@fM12C@74`XgPu#}2?~5w*2QZ`^`ymW3W${N^ybFFT>Lx!C)!%$k z{rwaMb*ayks=uF$>hBk#`unA*{@xYU-+Q9^`<1Bvel4oM-@vdo;kQcF-|s~A_j^%K z;|Cbj3;j{4`uh_M>jU+(QuX&2QT_cDhV-m{Q>y;{E~>wOi0bd3qWb%nsQ&&fs=xn; z>hHfWq)*U)Fh5&Q=e|}K6gbA|a71`LzCfDaaz*mb(CG-I`#k<=^Ea_zf!E^?c+)Md Hb2|P9YmgvV diff --git a/lib/vendor/symfony/polyfill-iconv/Resources/charset/translit.php b/lib/vendor/symfony/polyfill-iconv/Resources/charset/translit.php deleted file mode 100644 index ed59858..0000000 --- a/lib/vendor/symfony/polyfill-iconv/Resources/charset/translit.php +++ /dev/null @@ -1,4098 +0,0 @@ - 'μ', - '¼' => ' 1⁄4 ', - '½' => ' 1⁄2 ', - '¾' => ' 3⁄4 ', - 'IJ' => 'IJ', - 'ij' => 'ij', - 'Ŀ' => 'L·', - 'ŀ' => 'l·', - 'ʼn' => 'ʼn', - 'ſ' => 's', - 'DŽ' => 'DŽ', - 'Dž' => 'Dž', - 'dž' => 'dž', - 'LJ' => 'LJ', - 'Lj' => 'Lj', - 'lj' => 'lj', - 'NJ' => 'NJ', - 'Nj' => 'Nj', - 'nj' => 'nj', - 'DZ' => 'DZ', - 'Dz' => 'Dz', - 'dz' => 'dz', - 'ϐ' => 'β', - 'ϑ' => 'θ', - 'ϒ' => 'Υ', - 'ϕ' => 'φ', - 'ϖ' => 'π', - 'ϰ' => 'κ', - 'ϱ' => 'ρ', - 'ϲ' => 'ς', - 'ϴ' => 'Θ', - 'ϵ' => 'ε', - 'Ϲ' => 'Σ', - 'և' => 'եւ', - 'ٵ' => 'اٴ', - 'ٶ' => 'وٴ', - 'ٷ' => 'ۇٴ', - 'ٸ' => 'يٴ', - 'ำ' => 'ํา', - 'ຳ' => 'ໍາ', - 'ໜ' => 'ຫນ', - 'ໝ' => 'ຫມ', - 'ཷ' => 'ྲཱྀ', - 'ཹ' => 'ླཱྀ', - 'ẚ' => 'aʾ', - '․' => '.', - '‥' => '..', - '…' => '...', - '″' => '′′', - '‴' => '′′′', - '‶' => '‵‵', - '‷' => '‵‵‵', - '‼' => '!!', - '⁇' => '??', - '⁈' => '?!', - '⁉' => '!?', - '⁗' => '′′′′', - '₨' => 'Rs', - '℀' => 'a/c', - '℁' => 'a/s', - 'ℂ' => 'C', - '℃' => '°C', - '℅' => 'c/o', - '℆' => 'c/u', - 'ℇ' => 'Ɛ', - '℉' => '°F', - 'ℊ' => 'g', - 'ℋ' => 'H', - 'ℌ' => 'H', - 'ℍ' => 'H', - 'ℎ' => 'h', - 'ℏ' => 'ħ', - 'ℐ' => 'I', - 'ℑ' => 'I', - 'ℒ' => 'L', - 'ℓ' => 'l', - 'ℕ' => 'N', - '№' => 'No', - 'ℙ' => 'P', - 'ℚ' => 'Q', - 'ℛ' => 'R', - 'ℜ' => 'R', - 'ℝ' => 'R', - '℡' => 'TEL', - 'ℤ' => 'Z', - 'ℨ' => 'Z', - 'ℬ' => 'B', - 'ℭ' => 'C', - 'ℯ' => 'e', - 'ℰ' => 'E', - 'ℱ' => 'F', - 'ℳ' => 'M', - 'ℴ' => 'o', - 'ℵ' => 'א', - 'ℶ' => 'ב', - 'ℷ' => 'ג', - 'ℸ' => 'ד', - 'ℹ' => 'i', - '℻' => 'FAX', - 'ℼ' => 'π', - 'ℽ' => 'γ', - 'ℾ' => 'Γ', - 'ℿ' => 'Π', - '⅀' => '∑', - 'ⅅ' => 'D', - 'ⅆ' => 'd', - 'ⅇ' => 'e', - 'ⅈ' => 'i', - 'ⅉ' => 'j', - '⅐' => ' 1⁄7 ', - '⅑' => ' 1⁄9 ', - '⅒' => ' 1⁄10 ', - '⅓' => ' 1⁄3 ', - '⅔' => ' 2⁄3 ', - '⅕' => ' 1⁄5 ', - '⅖' => ' 2⁄5 ', - '⅗' => ' 3⁄5 ', - '⅘' => ' 4⁄5 ', - '⅙' => ' 1⁄6 ', - '⅚' => ' 5⁄6 ', - '⅛' => ' 1⁄8 ', - '⅜' => ' 3⁄8 ', - '⅝' => ' 5⁄8 ', - '⅞' => ' 7⁄8 ', - '⅟' => ' 1⁄ ', - 'Ⅰ' => 'I', - 'Ⅱ' => 'II', - 'Ⅲ' => 'III', - 'Ⅳ' => 'IV', - 'Ⅴ' => 'V', - 'Ⅵ' => 'VI', - 'Ⅶ' => 'VII', - 'Ⅷ' => 'VIII', - 'Ⅸ' => 'IX', - 'Ⅹ' => 'X', - 'Ⅺ' => 'XI', - 'Ⅻ' => 'XII', - 'Ⅼ' => 'L', - 'Ⅽ' => 'C', - 'Ⅾ' => 'D', - 'Ⅿ' => 'M', - 'ⅰ' => 'i', - 'ⅱ' => 'ii', - 'ⅲ' => 'iii', - 'ⅳ' => 'iv', - 'ⅴ' => 'v', - 'ⅵ' => 'vi', - 'ⅶ' => 'vii', - 'ⅷ' => 'viii', - 'ⅸ' => 'ix', - 'ⅹ' => 'x', - 'ⅺ' => 'xi', - 'ⅻ' => 'xii', - 'ⅼ' => 'l', - 'ⅽ' => 'c', - 'ⅾ' => 'd', - 'ⅿ' => 'm', - '↉' => ' 0⁄3 ', - '∬' => '∫∫', - '∭' => '∫∫∫', - '∯' => '∮∮', - '∰' => '∮∮∮', - '①' => '(1)', - '②' => '(2)', - '③' => '(3)', - '④' => '(4)', - '⑤' => '(5)', - '⑥' => '(6)', - '⑦' => '(7)', - '⑧' => '(8)', - '⑨' => '(9)', - '⑩' => '(10)', - '⑪' => '(11)', - '⑫' => '(12)', - '⑬' => '(13)', - '⑭' => '(14)', - '⑮' => '(15)', - '⑯' => '(16)', - '⑰' => '(17)', - '⑱' => '(18)', - '⑲' => '(19)', - '⑳' => '(20)', - '⑴' => '(1)', - '⑵' => '(2)', - '⑶' => '(3)', - '⑷' => '(4)', - '⑸' => '(5)', - '⑹' => '(6)', - '⑺' => '(7)', - '⑻' => '(8)', - '⑼' => '(9)', - '⑽' => '(10)', - '⑾' => '(11)', - '⑿' => '(12)', - '⒀' => '(13)', - '⒁' => '(14)', - '⒂' => '(15)', - '⒃' => '(16)', - '⒄' => '(17)', - '⒅' => '(18)', - '⒆' => '(19)', - '⒇' => '(20)', - '⒈' => '1.', - '⒉' => '2.', - '⒊' => '3.', - '⒋' => '4.', - '⒌' => '5.', - '⒍' => '6.', - '⒎' => '7.', - '⒏' => '8.', - '⒐' => '9.', - '⒑' => '10.', - '⒒' => '11.', - '⒓' => '12.', - '⒔' => '13.', - '⒕' => '14.', - '⒖' => '15.', - '⒗' => '16.', - '⒘' => '17.', - '⒙' => '18.', - '⒚' => '19.', - '⒛' => '20.', - '⒜' => '(a)', - '⒝' => '(b)', - '⒞' => '(c)', - '⒟' => '(d)', - '⒠' => '(e)', - '⒡' => '(f)', - '⒢' => '(g)', - '⒣' => '(h)', - '⒤' => '(i)', - '⒥' => '(j)', - '⒦' => '(k)', - '⒧' => '(l)', - '⒨' => '(m)', - '⒩' => '(n)', - '⒪' => '(o)', - '⒫' => '(p)', - '⒬' => '(q)', - '⒭' => '(r)', - '⒮' => '(s)', - '⒯' => '(t)', - '⒰' => '(u)', - '⒱' => '(v)', - '⒲' => '(w)', - '⒳' => '(x)', - '⒴' => '(y)', - '⒵' => '(z)', - 'Ⓐ' => '(A)', - 'Ⓑ' => '(B)', - 'Ⓒ' => '(C)', - 'Ⓓ' => '(D)', - 'Ⓔ' => '(E)', - 'Ⓕ' => '(F)', - 'Ⓖ' => '(G)', - 'Ⓗ' => '(H)', - 'Ⓘ' => '(I)', - 'Ⓙ' => '(J)', - 'Ⓚ' => '(K)', - 'Ⓛ' => '(L)', - 'Ⓜ' => '(M)', - 'Ⓝ' => '(N)', - 'Ⓞ' => '(O)', - 'Ⓟ' => '(P)', - 'Ⓠ' => '(Q)', - 'Ⓡ' => '(R)', - 'Ⓢ' => '(S)', - 'Ⓣ' => '(T)', - 'Ⓤ' => '(U)', - 'Ⓥ' => '(V)', - 'Ⓦ' => '(W)', - 'Ⓧ' => '(X)', - 'Ⓨ' => '(Y)', - 'Ⓩ' => '(Z)', - 'ⓐ' => '(a)', - 'ⓑ' => '(b)', - 'ⓒ' => '(c)', - 'ⓓ' => '(d)', - 'ⓔ' => '(e)', - 'ⓕ' => '(f)', - 'ⓖ' => '(g)', - 'ⓗ' => '(h)', - 'ⓘ' => '(i)', - 'ⓙ' => '(j)', - 'ⓚ' => '(k)', - 'ⓛ' => '(l)', - 'ⓜ' => '(m)', - 'ⓝ' => '(n)', - 'ⓞ' => '(o)', - 'ⓟ' => '(p)', - 'ⓠ' => '(q)', - 'ⓡ' => '(r)', - 'ⓢ' => '(s)', - 'ⓣ' => '(t)', - 'ⓤ' => '(u)', - 'ⓥ' => '(v)', - 'ⓦ' => '(w)', - 'ⓧ' => '(x)', - 'ⓨ' => '(y)', - 'ⓩ' => '(z)', - '⓪' => '(0)', - '⨌' => '∫∫∫∫', - '⩴' => '::=', - '⩵' => '==', - '⩶' => '===', - '⺟' => '母', - '⻳' => '龟', - '⼀' => '一', - '⼁' => '丨', - '⼂' => '丶', - '⼃' => '丿', - '⼄' => '乙', - '⼅' => '亅', - '⼆' => '二', - '⼇' => '亠', - '⼈' => '人', - '⼉' => '儿', - '⼊' => '入', - '⼋' => '八', - '⼌' => '冂', - '⼍' => '冖', - '⼎' => '冫', - '⼏' => '几', - '⼐' => '凵', - '⼑' => '刀', - '⼒' => '力', - '⼓' => '勹', - '⼔' => '匕', - '⼕' => '匚', - '⼖' => '匸', - '⼗' => '十', - '⼘' => '卜', - '⼙' => '卩', - '⼚' => '厂', - '⼛' => '厶', - '⼜' => '又', - '⼝' => '口', - '⼞' => '囗', - '⼟' => '土', - '⼠' => '士', - '⼡' => '夂', - '⼢' => '夊', - '⼣' => '夕', - '⼤' => '大', - '⼥' => '女', - '⼦' => '子', - '⼧' => '宀', - '⼨' => '寸', - '⼩' => '小', - '⼪' => '尢', - '⼫' => '尸', - '⼬' => '屮', - '⼭' => '山', - '⼮' => '巛', - '⼯' => '工', - '⼰' => '己', - '⼱' => '巾', - '⼲' => '干', - '⼳' => '幺', - '⼴' => '广', - '⼵' => '廴', - '⼶' => '廾', - '⼷' => '弋', - '⼸' => '弓', - '⼹' => '彐', - '⼺' => '彡', - '⼻' => '彳', - '⼼' => '心', - '⼽' => '戈', - '⼾' => '戶', - '⼿' => '手', - '⽀' => '支', - '⽁' => '攴', - '⽂' => '文', - '⽃' => '斗', - '⽄' => '斤', - '⽅' => '方', - '⽆' => '无', - '⽇' => '日', - '⽈' => '曰', - '⽉' => '月', - '⽊' => '木', - '⽋' => '欠', - '⽌' => '止', - '⽍' => '歹', - '⽎' => '殳', - '⽏' => '毋', - '⽐' => '比', - '⽑' => '毛', - '⽒' => '氏', - '⽓' => '气', - '⽔' => '水', - '⽕' => '火', - '⽖' => '爪', - '⽗' => '父', - '⽘' => '爻', - '⽙' => '爿', - '⽚' => '片', - '⽛' => '牙', - '⽜' => '牛', - '⽝' => '犬', - '⽞' => '玄', - '⽟' => '玉', - '⽠' => '瓜', - '⽡' => '瓦', - '⽢' => '甘', - '⽣' => '生', - '⽤' => '用', - '⽥' => '田', - '⽦' => '疋', - '⽧' => '疒', - '⽨' => '癶', - '⽩' => '白', - '⽪' => '皮', - '⽫' => '皿', - '⽬' => '目', - '⽭' => '矛', - '⽮' => '矢', - '⽯' => '石', - '⽰' => '示', - '⽱' => '禸', - '⽲' => '禾', - '⽳' => '穴', - '⽴' => '立', - '⽵' => '竹', - '⽶' => '米', - '⽷' => '糸', - '⽸' => '缶', - '⽹' => '网', - '⽺' => '羊', - '⽻' => '羽', - '⽼' => '老', - '⽽' => '而', - '⽾' => '耒', - '⽿' => '耳', - '⾀' => '聿', - '⾁' => '肉', - '⾂' => '臣', - '⾃' => '自', - '⾄' => '至', - '⾅' => '臼', - '⾆' => '舌', - '⾇' => '舛', - '⾈' => '舟', - '⾉' => '艮', - '⾊' => '色', - '⾋' => '艸', - '⾌' => '虍', - '⾍' => '虫', - '⾎' => '血', - '⾏' => '行', - '⾐' => '衣', - '⾑' => '襾', - '⾒' => '見', - '⾓' => '角', - '⾔' => '言', - '⾕' => '谷', - '⾖' => '豆', - '⾗' => '豕', - '⾘' => '豸', - '⾙' => '貝', - '⾚' => '赤', - '⾛' => '走', - '⾜' => '足', - '⾝' => '身', - '⾞' => '車', - '⾟' => '辛', - '⾠' => '辰', - '⾡' => '辵', - '⾢' => '邑', - '⾣' => '酉', - '⾤' => '釆', - '⾥' => '里', - '⾦' => '金', - '⾧' => '長', - '⾨' => '門', - '⾩' => '阜', - '⾪' => '隶', - '⾫' => '隹', - '⾬' => '雨', - '⾭' => '靑', - '⾮' => '非', - '⾯' => '面', - '⾰' => '革', - '⾱' => '韋', - '⾲' => '韭', - '⾳' => '音', - '⾴' => '頁', - '⾵' => '風', - '⾶' => '飛', - '⾷' => '食', - '⾸' => '首', - '⾹' => '香', - '⾺' => '馬', - '⾻' => '骨', - '⾼' => '高', - '⾽' => '髟', - '⾾' => '鬥', - '⾿' => '鬯', - '⿀' => '鬲', - '⿁' => '鬼', - '⿂' => '魚', - '⿃' => '鳥', - '⿄' => '鹵', - '⿅' => '鹿', - '⿆' => '麥', - '⿇' => '麻', - '⿈' => '黃', - '⿉' => '黍', - '⿊' => '黑', - '⿋' => '黹', - '⿌' => '黽', - '⿍' => '鼎', - '⿎' => '鼓', - '⿏' => '鼠', - '⿐' => '鼻', - '⿑' => '齊', - '⿒' => '齒', - '⿓' => '龍', - '⿔' => '龜', - '⿕' => '龠', - ' ' => ' ', - '〶' => '〒', - '〸' => '十', - '〹' => '卄', - '〺' => '卅', - 'ㄱ' => 'ᄀ', - 'ㄲ' => 'ᄁ', - 'ㄳ' => 'ᆪ', - 'ㄴ' => 'ᄂ', - 'ㄵ' => 'ᆬ', - 'ㄶ' => 'ᆭ', - 'ㄷ' => 'ᄃ', - 'ㄸ' => 'ᄄ', - 'ㄹ' => 'ᄅ', - 'ㄺ' => 'ᆰ', - 'ㄻ' => 'ᆱ', - 'ㄼ' => 'ᆲ', - 'ㄽ' => 'ᆳ', - 'ㄾ' => 'ᆴ', - 'ㄿ' => 'ᆵ', - 'ㅀ' => 'ᄚ', - 'ㅁ' => 'ᄆ', - 'ㅂ' => 'ᄇ', - 'ㅃ' => 'ᄈ', - 'ㅄ' => 'ᄡ', - 'ㅅ' => 'ᄉ', - 'ㅆ' => 'ᄊ', - 'ㅇ' => 'ᄋ', - 'ㅈ' => 'ᄌ', - 'ㅉ' => 'ᄍ', - 'ㅊ' => 'ᄎ', - 'ㅋ' => 'ᄏ', - 'ㅌ' => 'ᄐ', - 'ㅍ' => 'ᄑ', - 'ㅎ' => 'ᄒ', - 'ㅏ' => 'ᅡ', - 'ㅐ' => 'ᅢ', - 'ㅑ' => 'ᅣ', - 'ㅒ' => 'ᅤ', - 'ㅓ' => 'ᅥ', - 'ㅔ' => 'ᅦ', - 'ㅕ' => 'ᅧ', - 'ㅖ' => 'ᅨ', - 'ㅗ' => 'ᅩ', - 'ㅘ' => 'ᅪ', - 'ㅙ' => 'ᅫ', - 'ㅚ' => 'ᅬ', - 'ㅛ' => 'ᅭ', - 'ㅜ' => 'ᅮ', - 'ㅝ' => 'ᅯ', - 'ㅞ' => 'ᅰ', - 'ㅟ' => 'ᅱ', - 'ㅠ' => 'ᅲ', - 'ㅡ' => 'ᅳ', - 'ㅢ' => 'ᅴ', - 'ㅣ' => 'ᅵ', - 'ㅤ' => 'ᅠ', - 'ㅥ' => 'ᄔ', - 'ㅦ' => 'ᄕ', - 'ㅧ' => 'ᇇ', - 'ㅨ' => 'ᇈ', - 'ㅩ' => 'ᇌ', - 'ㅪ' => 'ᇎ', - 'ㅫ' => 'ᇓ', - 'ㅬ' => 'ᇗ', - 'ㅭ' => 'ᇙ', - 'ㅮ' => 'ᄜ', - 'ㅯ' => 'ᇝ', - 'ㅰ' => 'ᇟ', - 'ㅱ' => 'ᄝ', - 'ㅲ' => 'ᄞ', - 'ㅳ' => 'ᄠ', - 'ㅴ' => 'ᄢ', - 'ㅵ' => 'ᄣ', - 'ㅶ' => 'ᄧ', - 'ㅷ' => 'ᄩ', - 'ㅸ' => 'ᄫ', - 'ㅹ' => 'ᄬ', - 'ㅺ' => 'ᄭ', - 'ㅻ' => 'ᄮ', - 'ㅼ' => 'ᄯ', - 'ㅽ' => 'ᄲ', - 'ㅾ' => 'ᄶ', - 'ㅿ' => 'ᅀ', - 'ㆀ' => 'ᅇ', - 'ㆁ' => 'ᅌ', - 'ㆂ' => 'ᇱ', - 'ㆃ' => 'ᇲ', - 'ㆄ' => 'ᅗ', - 'ㆅ' => 'ᅘ', - 'ㆆ' => 'ᅙ', - 'ㆇ' => 'ᆄ', - 'ㆈ' => 'ᆅ', - 'ㆉ' => 'ᆈ', - 'ㆊ' => 'ᆑ', - 'ㆋ' => 'ᆒ', - 'ㆌ' => 'ᆔ', - 'ㆍ' => 'ᆞ', - 'ㆎ' => 'ᆡ', - '㈀' => '(ᄀ)', - '㈁' => '(ᄂ)', - '㈂' => '(ᄃ)', - '㈃' => '(ᄅ)', - '㈄' => '(ᄆ)', - '㈅' => '(ᄇ)', - '㈆' => '(ᄉ)', - '㈇' => '(ᄋ)', - '㈈' => '(ᄌ)', - '㈉' => '(ᄎ)', - '㈊' => '(ᄏ)', - '㈋' => '(ᄐ)', - '㈌' => '(ᄑ)', - '㈍' => '(ᄒ)', - '㈎' => '(가)', - '㈏' => '(나)', - '㈐' => '(다)', - '㈑' => '(라)', - '㈒' => '(마)', - '㈓' => '(바)', - '㈔' => '(사)', - '㈕' => '(아)', - '㈖' => '(자)', - '㈗' => '(차)', - '㈘' => '(카)', - '㈙' => '(타)', - '㈚' => '(파)', - '㈛' => '(하)', - '㈜' => '(주)', - '㈝' => '(오전)', - '㈞' => '(오후)', - '㈠' => '(一)', - '㈡' => '(二)', - '㈢' => '(三)', - '㈣' => '(四)', - '㈤' => '(五)', - '㈥' => '(六)', - '㈦' => '(七)', - '㈧' => '(八)', - '㈨' => '(九)', - '㈩' => '(十)', - '㈪' => '(月)', - '㈫' => '(火)', - '㈬' => '(水)', - '㈭' => '(木)', - '㈮' => '(金)', - '㈯' => '(土)', - '㈰' => '(日)', - '㈱' => '(株)', - '㈲' => '(有)', - '㈳' => '(社)', - '㈴' => '(名)', - '㈵' => '(特)', - '㈶' => '(財)', - '㈷' => '(祝)', - '㈸' => '(労)', - '㈹' => '(代)', - '㈺' => '(呼)', - '㈻' => '(学)', - '㈼' => '(監)', - '㈽' => '(企)', - '㈾' => '(資)', - '㈿' => '(協)', - '㉀' => '(祭)', - '㉁' => '(休)', - '㉂' => '(自)', - '㉃' => '(至)', - '㉄' => '(問)', - '㉅' => '(幼)', - '㉆' => '(文)', - '㉇' => '(箏)', - '㉐' => 'PTE', - '㉑' => '(21)', - '㉒' => '(22)', - '㉓' => '(23)', - '㉔' => '(24)', - '㉕' => '(25)', - '㉖' => '(26)', - '㉗' => '(27)', - '㉘' => '(28)', - '㉙' => '(29)', - '㉚' => '(30)', - '㉛' => '(31)', - '㉜' => '(32)', - '㉝' => '(33)', - '㉞' => '(34)', - '㉟' => '(35)', - '㉠' => '(ᄀ)', - '㉡' => '(ᄂ)', - '㉢' => '(ᄃ)', - '㉣' => '(ᄅ)', - '㉤' => '(ᄆ)', - '㉥' => '(ᄇ)', - '㉦' => '(ᄉ)', - '㉧' => '(ᄋ)', - '㉨' => '(ᄌ)', - '㉩' => '(ᄎ)', - '㉪' => '(ᄏ)', - '㉫' => '(ᄐ)', - '㉬' => '(ᄑ)', - '㉭' => '(ᄒ)', - '㉮' => '(가)', - '㉯' => '(나)', - '㉰' => '(다)', - '㉱' => '(라)', - '㉲' => '(마)', - '㉳' => '(바)', - '㉴' => '(사)', - '㉵' => '(아)', - '㉶' => '(자)', - '㉷' => '(차)', - '㉸' => '(카)', - '㉹' => '(타)', - '㉺' => '(파)', - '㉻' => '(하)', - '㉼' => '(참고)', - '㉽' => '(주의)', - '㉾' => '(우)', - '㊀' => '(一)', - '㊁' => '(二)', - '㊂' => '(三)', - '㊃' => '(四)', - '㊄' => '(五)', - '㊅' => '(六)', - '㊆' => '(七)', - '㊇' => '(八)', - '㊈' => '(九)', - '㊉' => '(十)', - '㊊' => '(月)', - '㊋' => '(火)', - '㊌' => '(水)', - '㊍' => '(木)', - '㊎' => '(金)', - '㊏' => '(土)', - '㊐' => '(日)', - '㊑' => '(株)', - '㊒' => '(有)', - '㊓' => '(社)', - '㊔' => '(名)', - '㊕' => '(特)', - '㊖' => '(財)', - '㊗' => '(祝)', - '㊘' => '(労)', - '㊙' => '(秘)', - '㊚' => '(男)', - '㊛' => '(女)', - '㊜' => '(適)', - '㊝' => '(優)', - '㊞' => '(印)', - '㊟' => '(注)', - '㊠' => '(項)', - '㊡' => '(休)', - '㊢' => '(写)', - '㊣' => '(正)', - '㊤' => '(上)', - '㊥' => '(中)', - '㊦' => '(下)', - '㊧' => '(左)', - '㊨' => '(右)', - '㊩' => '(医)', - '㊪' => '(宗)', - '㊫' => '(学)', - '㊬' => '(監)', - '㊭' => '(企)', - '㊮' => '(資)', - '㊯' => '(協)', - '㊰' => '(夜)', - '㊱' => '(36)', - '㊲' => '(37)', - '㊳' => '(38)', - '㊴' => '(39)', - '㊵' => '(40)', - '㊶' => '(41)', - '㊷' => '(42)', - '㊸' => '(43)', - '㊹' => '(44)', - '㊺' => '(45)', - '㊻' => '(46)', - '㊼' => '(47)', - '㊽' => '(48)', - '㊾' => '(49)', - '㊿' => '(50)', - '㋀' => '1月', - '㋁' => '2月', - '㋂' => '3月', - '㋃' => '4月', - '㋄' => '5月', - '㋅' => '6月', - '㋆' => '7月', - '㋇' => '8月', - '㋈' => '9月', - '㋉' => '10月', - '㋊' => '11月', - '㋋' => '12月', - '㋌' => 'Hg', - '㋍' => 'erg', - '㋎' => 'eV', - '㋏' => 'LTD', - '㋐' => '(ア)', - '㋑' => '(イ)', - '㋒' => '(ウ)', - '㋓' => '(エ)', - '㋔' => '(オ)', - '㋕' => '(カ)', - '㋖' => '(キ)', - '㋗' => '(ク)', - '㋘' => '(ケ)', - '㋙' => '(コ)', - '㋚' => '(サ)', - '㋛' => '(シ)', - '㋜' => '(ス)', - '㋝' => '(セ)', - '㋞' => '(ソ)', - '㋟' => '(タ)', - '㋠' => '(チ)', - '㋡' => '(ツ)', - '㋢' => '(テ)', - '㋣' => '(ト)', - '㋤' => '(ナ)', - '㋥' => '(ニ)', - '㋦' => '(ヌ)', - '㋧' => '(ネ)', - '㋨' => '(ノ)', - '㋩' => '(ハ)', - '㋪' => '(ヒ)', - '㋫' => '(フ)', - '㋬' => '(ヘ)', - '㋭' => '(ホ)', - '㋮' => '(マ)', - '㋯' => '(ミ)', - '㋰' => '(ム)', - '㋱' => '(メ)', - '㋲' => '(モ)', - '㋳' => '(ヤ)', - '㋴' => '(ユ)', - '㋵' => '(ヨ)', - '㋶' => '(ラ)', - '㋷' => '(リ)', - '㋸' => '(ル)', - '㋹' => '(レ)', - '㋺' => '(ロ)', - '㋻' => '(ワ)', - '㋼' => '(ヰ)', - '㋽' => '(ヱ)', - '㋾' => '(ヲ)', - '㋿' => '令和', - '㌀' => 'アパート', - '㌁' => 'アルファ', - '㌂' => 'アンペア', - '㌃' => 'アール', - '㌄' => 'イニング', - '㌅' => 'インチ', - '㌆' => 'ウォン', - '㌇' => 'エスクード', - '㌈' => 'エーカー', - '㌉' => 'オンス', - '㌊' => 'オーム', - '㌋' => 'カイリ', - '㌌' => 'カラット', - '㌍' => 'カロリー', - '㌎' => 'ガロン', - '㌏' => 'ガンマ', - '㌐' => 'ギガ', - '㌑' => 'ギニー', - '㌒' => 'キュリー', - '㌓' => 'ギルダー', - '㌔' => 'キロ', - '㌕' => 'キログラム', - '㌖' => 'キロメートル', - '㌗' => 'キロワット', - '㌘' => 'グラム', - '㌙' => 'グラムトン', - '㌚' => 'クルゼイロ', - '㌛' => 'クローネ', - '㌜' => 'ケース', - '㌝' => 'コルナ', - '㌞' => 'コーポ', - '㌟' => 'サイクル', - '㌠' => 'サンチーム', - '㌡' => 'シリング', - '㌢' => 'センチ', - '㌣' => 'セント', - '㌤' => 'ダース', - '㌥' => 'デシ', - '㌦' => 'ドル', - '㌧' => 'トン', - '㌨' => 'ナノ', - '㌩' => 'ノット', - '㌪' => 'ハイツ', - '㌫' => 'パーセント', - '㌬' => 'パーツ', - '㌭' => 'バーレル', - '㌮' => 'ピアストル', - '㌯' => 'ピクル', - '㌰' => 'ピコ', - '㌱' => 'ビル', - '㌲' => 'ファラッド', - '㌳' => 'フィート', - '㌴' => 'ブッシェル', - '㌵' => 'フラン', - '㌶' => 'ヘクタール', - '㌷' => 'ペソ', - '㌸' => 'ペニヒ', - '㌹' => 'ヘルツ', - '㌺' => 'ペンス', - '㌻' => 'ページ', - '㌼' => 'ベータ', - '㌽' => 'ポイント', - '㌾' => 'ボルト', - '㌿' => 'ホン', - '㍀' => 'ポンド', - '㍁' => 'ホール', - '㍂' => 'ホーン', - '㍃' => 'マイクロ', - '㍄' => 'マイル', - '㍅' => 'マッハ', - '㍆' => 'マルク', - '㍇' => 'マンション', - '㍈' => 'ミクロン', - '㍉' => 'ミリ', - '㍊' => 'ミリバール', - '㍋' => 'メガ', - '㍌' => 'メガトン', - '㍍' => 'メートル', - '㍎' => 'ヤード', - '㍏' => 'ヤール', - '㍐' => 'ユアン', - '㍑' => 'リットル', - '㍒' => 'リラ', - '㍓' => 'ルピー', - '㍔' => 'ルーブル', - '㍕' => 'レム', - '㍖' => 'レントゲン', - '㍗' => 'ワット', - '㍘' => '0点', - '㍙' => '1点', - '㍚' => '2点', - '㍛' => '3点', - '㍜' => '4点', - '㍝' => '5点', - '㍞' => '6点', - '㍟' => '7点', - '㍠' => '8点', - '㍡' => '9点', - '㍢' => '10点', - '㍣' => '11点', - '㍤' => '12点', - '㍥' => '13点', - '㍦' => '14点', - '㍧' => '15点', - '㍨' => '16点', - '㍩' => '17点', - '㍪' => '18点', - '㍫' => '19点', - '㍬' => '20点', - '㍭' => '21点', - '㍮' => '22点', - '㍯' => '23点', - '㍰' => '24点', - '㍱' => 'hPa', - '㍲' => 'da', - '㍳' => 'AU', - '㍴' => 'bar', - '㍵' => 'oV', - '㍶' => 'pc', - '㍷' => 'dm', - '㍸' => 'dm²', - '㍹' => 'dm³', - '㍺' => 'IU', - '㍻' => '平成', - '㍼' => '昭和', - '㍽' => '大正', - '㍾' => '明治', - '㍿' => '株式会社', - '㎀' => 'pA', - '㎁' => 'nA', - '㎂' => 'μA', - '㎃' => 'mA', - '㎄' => 'kA', - '㎅' => 'KB', - '㎆' => 'MB', - '㎇' => 'GB', - '㎈' => 'cal', - '㎉' => 'kcal', - '㎊' => 'pF', - '㎋' => 'nF', - '㎌' => 'μF', - '㎍' => 'μg', - '㎎' => 'mg', - '㎏' => 'kg', - '㎐' => 'Hz', - '㎑' => 'kHz', - '㎒' => 'MHz', - '㎓' => 'GHz', - '㎔' => 'THz', - '㎕' => 'μℓ', - '㎖' => 'mℓ', - '㎗' => 'dℓ', - '㎘' => 'kℓ', - '㎙' => 'fm', - '㎚' => 'nm', - '㎛' => 'μm', - '㎜' => 'mm', - '㎝' => 'cm', - '㎞' => 'km', - '㎟' => 'mm²', - '㎠' => 'cm²', - '㎡' => 'm²', - '㎢' => 'km²', - '㎣' => 'mm³', - '㎤' => 'cm³', - '㎥' => 'm³', - '㎦' => 'km³', - '㎧' => 'm∕s', - '㎨' => 'm∕s²', - '㎩' => 'Pa', - '㎪' => 'kPa', - '㎫' => 'MPa', - '㎬' => 'GPa', - '㎭' => 'rad', - '㎮' => 'rad∕s', - '㎯' => 'rad∕s²', - '㎰' => 'ps', - '㎱' => 'ns', - '㎲' => 'μs', - '㎳' => 'ms', - '㎴' => 'pV', - '㎵' => 'nV', - '㎶' => 'μV', - '㎷' => 'mV', - '㎸' => 'kV', - '㎹' => 'MV', - '㎺' => 'pW', - '㎻' => 'nW', - '㎼' => 'μW', - '㎽' => 'mW', - '㎾' => 'kW', - '㎿' => 'MW', - '㏀' => 'kΩ', - '㏁' => 'MΩ', - '㏂' => 'a.m.', - '㏃' => 'Bq', - '㏄' => 'cc', - '㏅' => 'cd', - '㏆' => 'C∕kg', - '㏇' => 'Co.', - '㏈' => 'dB', - '㏉' => 'Gy', - '㏊' => 'ha', - '㏋' => 'HP', - '㏌' => 'in', - '㏍' => 'KK', - '㏎' => 'KM', - '㏏' => 'kt', - '㏐' => 'lm', - '㏑' => 'ln', - '㏒' => 'log', - '㏓' => 'lx', - '㏔' => 'mb', - '㏕' => 'mil', - '㏖' => 'mol', - '㏗' => 'PH', - '㏘' => 'p.m.', - '㏙' => 'PPM', - '㏚' => 'PR', - '㏛' => 'sr', - '㏜' => 'Sv', - '㏝' => 'Wb', - '㏞' => 'V∕m', - '㏟' => 'A∕m', - '㏠' => '1日', - '㏡' => '2日', - '㏢' => '3日', - '㏣' => '4日', - '㏤' => '5日', - '㏥' => '6日', - '㏦' => '7日', - '㏧' => '8日', - '㏨' => '9日', - '㏩' => '10日', - '㏪' => '11日', - '㏫' => '12日', - '㏬' => '13日', - '㏭' => '14日', - '㏮' => '15日', - '㏯' => '16日', - '㏰' => '17日', - '㏱' => '18日', - '㏲' => '19日', - '㏳' => '20日', - '㏴' => '21日', - '㏵' => '22日', - '㏶' => '23日', - '㏷' => '24日', - '㏸' => '25日', - '㏹' => '26日', - '㏺' => '27日', - '㏻' => '28日', - '㏼' => '29日', - '㏽' => '30日', - '㏾' => '31日', - '㏿' => 'gal', - '豈' => '豈', - '更' => '更', - '車' => '車', - '賈' => '賈', - '滑' => '滑', - '串' => '串', - '句' => '句', - '龜' => '龜', - '龜' => '龜', - '契' => '契', - '金' => '金', - '喇' => '喇', - '奈' => '奈', - '懶' => '懶', - '癩' => '癩', - '羅' => '羅', - '蘿' => '蘿', - '螺' => '螺', - '裸' => '裸', - '邏' => '邏', - '樂' => '樂', - '洛' => '洛', - '烙' => '烙', - '珞' => '珞', - '落' => '落', - '酪' => '酪', - '駱' => '駱', - '亂' => '亂', - '卵' => '卵', - '欄' => '欄', - '爛' => '爛', - '蘭' => '蘭', - '鸞' => '鸞', - '嵐' => '嵐', - '濫' => '濫', - '藍' => '藍', - '襤' => '襤', - '拉' => '拉', - '臘' => '臘', - '蠟' => '蠟', - '廊' => '廊', - '朗' => '朗', - '浪' => '浪', - '狼' => '狼', - '郎' => '郎', - '來' => '來', - '冷' => '冷', - '勞' => '勞', - '擄' => '擄', - '櫓' => '櫓', - '爐' => '爐', - '盧' => '盧', - '老' => '老', - '蘆' => '蘆', - '虜' => '虜', - '路' => '路', - '露' => '露', - '魯' => '魯', - '鷺' => '鷺', - '碌' => '碌', - '祿' => '祿', - '綠' => '綠', - '菉' => '菉', - '錄' => '錄', - '鹿' => '鹿', - '論' => '論', - '壟' => '壟', - '弄' => '弄', - '籠' => '籠', - '聾' => '聾', - '牢' => '牢', - '磊' => '磊', - '賂' => '賂', - '雷' => '雷', - '壘' => '壘', - '屢' => '屢', - '樓' => '樓', - '淚' => '淚', - '漏' => '漏', - '累' => '累', - '縷' => '縷', - '陋' => '陋', - '勒' => '勒', - '肋' => '肋', - '凜' => '凜', - '凌' => '凌', - '稜' => '稜', - '綾' => '綾', - '菱' => '菱', - '陵' => '陵', - '讀' => '讀', - '拏' => '拏', - '樂' => '樂', - '諾' => '諾', - '丹' => '丹', - '寧' => '寧', - '怒' => '怒', - '率' => '率', - '異' => '異', - '北' => '北', - '磻' => '磻', - '便' => '便', - '復' => '復', - '不' => '不', - '泌' => '泌', - '數' => '數', - '索' => '索', - '參' => '參', - '塞' => '塞', - '省' => '省', - '葉' => '葉', - '說' => '說', - '殺' => '殺', - '辰' => '辰', - '沈' => '沈', - '拾' => '拾', - '若' => '若', - '掠' => '掠', - '略' => '略', - '亮' => '亮', - '兩' => '兩', - '凉' => '凉', - '梁' => '梁', - '糧' => '糧', - '良' => '良', - '諒' => '諒', - '量' => '量', - '勵' => '勵', - '呂' => '呂', - '女' => '女', - '廬' => '廬', - '旅' => '旅', - '濾' => '濾', - '礪' => '礪', - '閭' => '閭', - '驪' => '驪', - '麗' => '麗', - '黎' => '黎', - '力' => '力', - '曆' => '曆', - '歷' => '歷', - '轢' => '轢', - '年' => '年', - '憐' => '憐', - '戀' => '戀', - '撚' => '撚', - '漣' => '漣', - '煉' => '煉', - '璉' => '璉', - '秊' => '秊', - '練' => '練', - '聯' => '聯', - '輦' => '輦', - '蓮' => '蓮', - '連' => '連', - '鍊' => '鍊', - '列' => '列', - '劣' => '劣', - '咽' => '咽', - '烈' => '烈', - '裂' => '裂', - '說' => '說', - '廉' => '廉', - '念' => '念', - '捻' => '捻', - '殮' => '殮', - '簾' => '簾', - '獵' => '獵', - '令' => '令', - '囹' => '囹', - '寧' => '寧', - '嶺' => '嶺', - '怜' => '怜', - '玲' => '玲', - '瑩' => '瑩', - '羚' => '羚', - '聆' => '聆', - '鈴' => '鈴', - '零' => '零', - '靈' => '靈', - '領' => '領', - '例' => '例', - '禮' => '禮', - '醴' => '醴', - '隸' => '隸', - '惡' => '惡', - '了' => '了', - '僚' => '僚', - '寮' => '寮', - '尿' => '尿', - '料' => '料', - '樂' => '樂', - '燎' => '燎', - '療' => '療', - '蓼' => '蓼', - '遼' => '遼', - '龍' => '龍', - '暈' => '暈', - '阮' => '阮', - '劉' => '劉', - '杻' => '杻', - '柳' => '柳', - '流' => '流', - '溜' => '溜', - '琉' => '琉', - '留' => '留', - '硫' => '硫', - '紐' => '紐', - '類' => '類', - '六' => '六', - '戮' => '戮', - '陸' => '陸', - '倫' => '倫', - '崙' => '崙', - '淪' => '淪', - '輪' => '輪', - '律' => '律', - '慄' => '慄', - '栗' => '栗', - '率' => '率', - '隆' => '隆', - '利' => '利', - '吏' => '吏', - '履' => '履', - '易' => '易', - '李' => '李', - '梨' => '梨', - '泥' => '泥', - '理' => '理', - '痢' => '痢', - '罹' => '罹', - '裏' => '裏', - '裡' => '裡', - '里' => '里', - '離' => '離', - '匿' => '匿', - '溺' => '溺', - '吝' => '吝', - '燐' => '燐', - '璘' => '璘', - '藺' => '藺', - '隣' => '隣', - '鱗' => '鱗', - '麟' => '麟', - '林' => '林', - '淋' => '淋', - '臨' => '臨', - '立' => '立', - '笠' => '笠', - '粒' => '粒', - '狀' => '狀', - '炙' => '炙', - '識' => '識', - '什' => '什', - '茶' => '茶', - '刺' => '刺', - '切' => '切', - '度' => '度', - '拓' => '拓', - '糖' => '糖', - '宅' => '宅', - '洞' => '洞', - '暴' => '暴', - '輻' => '輻', - '行' => '行', - '降' => '降', - '見' => '見', - '廓' => '廓', - '兀' => '兀', - '嗀' => '嗀', - '﨎' => '', - '﨏' => '', - '塚' => '塚', - '﨑' => '', - '晴' => '晴', - '﨓' => '', - '﨔' => '', - '凞' => '凞', - '猪' => '猪', - '益' => '益', - '礼' => '礼', - '神' => '神', - '祥' => '祥', - '福' => '福', - '靖' => '靖', - '精' => '精', - '羽' => '羽', - '﨟' => '', - '蘒' => '蘒', - '﨡' => '', - '諸' => '諸', - '﨣' => '', - '﨤' => '', - '逸' => '逸', - '都' => '都', - '﨧' => '', - '﨨' => '', - '﨩' => '', - '飯' => '飯', - '飼' => '飼', - '館' => '館', - '鶴' => '鶴', - '郞' => '郞', - '隷' => '隷', - '侮' => '侮', - '僧' => '僧', - '免' => '免', - '勉' => '勉', - '勤' => '勤', - '卑' => '卑', - '喝' => '喝', - '嘆' => '嘆', - '器' => '器', - '塀' => '塀', - '墨' => '墨', - '層' => '層', - '屮' => '屮', - '悔' => '悔', - '慨' => '慨', - '憎' => '憎', - '懲' => '懲', - '敏' => '敏', - '既' => '既', - '暑' => '暑', - '梅' => '梅', - '海' => '海', - '渚' => '渚', - '漢' => '漢', - '煮' => '煮', - '爫' => '爫', - '琢' => '琢', - '碑' => '碑', - '社' => '社', - '祉' => '祉', - '祈' => '祈', - '祐' => '祐', - '祖' => '祖', - '祝' => '祝', - '禍' => '禍', - '禎' => '禎', - '穀' => '穀', - '突' => '突', - '節' => '節', - '練' => '練', - '縉' => '縉', - '繁' => '繁', - '署' => '署', - '者' => '者', - '臭' => '臭', - '艹' => '艹', - '艹' => '艹', - '著' => '著', - '褐' => '褐', - '視' => '視', - '謁' => '謁', - '謹' => '謹', - '賓' => '賓', - '贈' => '贈', - '辶' => '辶', - '逸' => '逸', - '難' => '難', - '響' => '響', - '頻' => '頻', - '恵' => '恵', - '𤋮' => '𤋮', - '舘' => '舘', - '並' => '並', - '况' => '况', - '全' => '全', - '侀' => '侀', - '充' => '充', - '冀' => '冀', - '勇' => '勇', - '勺' => '勺', - '喝' => '喝', - '啕' => '啕', - '喙' => '喙', - '嗢' => '嗢', - '塚' => '塚', - '墳' => '墳', - '奄' => '奄', - '奔' => '奔', - '婢' => '婢', - '嬨' => '嬨', - '廒' => '廒', - '廙' => '廙', - '彩' => '彩', - '徭' => '徭', - '惘' => '惘', - '慎' => '慎', - '愈' => '愈', - '憎' => '憎', - '慠' => '慠', - '懲' => '懲', - '戴' => '戴', - '揄' => '揄', - '搜' => '搜', - '摒' => '摒', - '敖' => '敖', - '晴' => '晴', - '朗' => '朗', - '望' => '望', - '杖' => '杖', - '歹' => '歹', - '殺' => '殺', - '流' => '流', - '滛' => '滛', - '滋' => '滋', - '漢' => '漢', - '瀞' => '瀞', - '煮' => '煮', - '瞧' => '瞧', - '爵' => '爵', - '犯' => '犯', - '猪' => '猪', - '瑱' => '瑱', - '甆' => '甆', - '画' => '画', - '瘝' => '瘝', - '瘟' => '瘟', - '益' => '益', - '盛' => '盛', - '直' => '直', - '睊' => '睊', - '着' => '着', - '磌' => '磌', - '窱' => '窱', - '節' => '節', - '类' => '类', - '絛' => '絛', - '練' => '練', - '缾' => '缾', - '者' => '者', - '荒' => '荒', - '華' => '華', - '蝹' => '蝹', - '襁' => '襁', - '覆' => '覆', - '視' => '視', - '調' => '調', - '諸' => '諸', - '請' => '請', - '謁' => '謁', - '諾' => '諾', - '諭' => '諭', - '謹' => '謹', - '變' => '變', - '贈' => '贈', - '輸' => '輸', - '遲' => '遲', - '醙' => '醙', - '鉶' => '鉶', - '陼' => '陼', - '難' => '難', - '靖' => '靖', - '韛' => '韛', - '響' => '響', - '頋' => '頋', - '頻' => '頻', - '鬒' => '鬒', - '龜' => '龜', - '𢡊' => '𢡊', - '𢡄' => '𢡄', - '𣏕' => '𣏕', - '㮝' => '㮝', - '䀘' => '䀘', - '䀹' => '䀹', - '𥉉' => '𥉉', - '𥳐' => '𥳐', - '𧻓' => '𧻓', - '齃' => '齃', - '龎' => '龎', - 'ff' => 'ff', - 'fi' => 'fi', - 'fl' => 'fl', - 'ffi' => 'ffi', - 'ffl' => 'ffl', - 'ſt' => 'ſt', - 'st' => 'st', - 'ﬓ' => 'մն', - 'ﬔ' => 'մե', - 'ﬕ' => 'մի', - 'ﬖ' => 'վն', - 'ﬗ' => 'մխ', - 'ﬠ' => 'ע', - 'ﬡ' => 'א', - 'ﬢ' => 'ד', - 'ﬣ' => 'ה', - 'ﬤ' => 'כ', - 'ﬥ' => 'ל', - 'ﬦ' => 'ם', - 'ﬧ' => 'ר', - 'ﬨ' => 'ת', - '﬩' => '+', - 'ﭏ' => 'אל', - '﹉' => '‾', - '﹊' => '‾', - '﹋' => '‾', - '﹌' => '‾', - '﹍' => '_', - '﹎' => '_', - '﹏' => '_', - '﹐' => ',', - '﹑' => '、', - '﹒' => '.', - '﹔' => ';', - '﹕' => ':', - '﹖' => '?', - '﹗' => '!', - '﹘' => '—', - '﹙' => '(', - '﹚' => ')', - '﹛' => '{', - '﹜' => '}', - '﹝' => '〔', - '﹞' => '〕', - '﹟' => '#', - '﹠' => '&', - '﹡' => '*', - '﹢' => '+', - '﹣' => '-', - '﹤' => '<', - '﹥' => '>', - '﹦' => '=', - '﹨' => '\\', - '﹩' => '$', - '﹪' => '%', - '﹫' => '@', - '!' => '!', - '"' => '"', - '#' => '#', - '$' => '$', - '%' => '%', - '&' => '&', - ''' => '\'', - '(' => '(', - ')' => ')', - '*' => '*', - '+' => '+', - ',' => ',', - '-' => '-', - '.' => '.', - '/' => '/', - '0' => '0', - '1' => '1', - '2' => '2', - '3' => '3', - '4' => '4', - '5' => '5', - '6' => '6', - '7' => '7', - '8' => '8', - '9' => '9', - ':' => ':', - ';' => ';', - '<' => '<', - '=' => '=', - '>' => '>', - '?' => '?', - '@' => '@', - 'A' => 'A', - 'B' => 'B', - 'C' => 'C', - 'D' => 'D', - 'E' => 'E', - 'F' => 'F', - 'G' => 'G', - 'H' => 'H', - 'I' => 'I', - 'J' => 'J', - 'K' => 'K', - 'L' => 'L', - 'M' => 'M', - 'N' => 'N', - 'O' => 'O', - 'P' => 'P', - 'Q' => 'Q', - 'R' => 'R', - 'S' => 'S', - 'T' => 'T', - 'U' => 'U', - 'V' => 'V', - 'W' => 'W', - 'X' => 'X', - 'Y' => 'Y', - 'Z' => 'Z', - '[' => '[', - '\' => '\\', - ']' => ']', - '^' => '^', - '_' => '_', - '`' => '`', - 'a' => 'a', - 'b' => 'b', - 'c' => 'c', - 'd' => 'd', - 'e' => 'e', - 'f' => 'f', - 'g' => 'g', - 'h' => 'h', - 'i' => 'i', - 'j' => 'j', - 'k' => 'k', - 'l' => 'l', - 'm' => 'm', - 'n' => 'n', - 'o' => 'o', - 'p' => 'p', - 'q' => 'q', - 'r' => 'r', - 's' => 's', - 't' => 't', - 'u' => 'u', - 'v' => 'v', - 'w' => 'w', - 'x' => 'x', - 'y' => 'y', - 'z' => 'z', - '{' => '{', - '|' => '|', - '}' => '}', - '~' => '~', - '⦅' => '⦅', - '⦆' => '⦆', - '。' => '。', - '「' => '「', - '」' => '」', - '、' => '、', - '・' => '・', - 'ヲ' => 'ヲ', - 'ァ' => 'ァ', - 'ィ' => 'ィ', - 'ゥ' => 'ゥ', - 'ェ' => 'ェ', - 'ォ' => 'ォ', - 'ャ' => 'ャ', - 'ュ' => 'ュ', - 'ョ' => 'ョ', - 'ッ' => 'ッ', - 'ー' => 'ー', - 'ア' => 'ア', - 'イ' => 'イ', - 'ウ' => 'ウ', - 'エ' => 'エ', - 'オ' => 'オ', - 'カ' => 'カ', - 'キ' => 'キ', - 'ク' => 'ク', - 'ケ' => 'ケ', - 'コ' => 'コ', - 'サ' => 'サ', - 'シ' => 'シ', - 'ス' => 'ス', - 'セ' => 'セ', - 'ソ' => 'ソ', - 'タ' => 'タ', - 'チ' => 'チ', - 'ツ' => 'ツ', - 'テ' => 'テ', - 'ト' => 'ト', - 'ナ' => 'ナ', - 'ニ' => 'ニ', - 'ヌ' => 'ヌ', - 'ネ' => 'ネ', - 'ノ' => 'ノ', - 'ハ' => 'ハ', - 'ヒ' => 'ヒ', - 'フ' => 'フ', - 'ヘ' => 'ヘ', - 'ホ' => 'ホ', - 'マ' => 'マ', - 'ミ' => 'ミ', - 'ム' => 'ム', - 'メ' => 'メ', - 'モ' => 'モ', - 'ヤ' => 'ヤ', - 'ユ' => 'ユ', - 'ヨ' => 'ヨ', - 'ラ' => 'ラ', - 'リ' => 'リ', - 'ル' => 'ル', - 'レ' => 'レ', - 'ロ' => 'ロ', - 'ワ' => 'ワ', - 'ン' => 'ン', - '゙' => '゙', - '゚' => '゚', - 'ᅠ' => 'ㅤ', - 'ᄀ' => 'ㄱ', - 'ᄁ' => 'ㄲ', - 'ᆪ' => 'ㄳ', - 'ᄂ' => 'ㄴ', - 'ᆬ' => 'ㄵ', - 'ᆭ' => 'ㄶ', - 'ᄃ' => 'ㄷ', - 'ᄄ' => 'ㄸ', - 'ᄅ' => 'ㄹ', - 'ᆰ' => 'ㄺ', - 'ᆱ' => 'ㄻ', - 'ᆲ' => 'ㄼ', - 'ᆳ' => 'ㄽ', - 'ᆴ' => 'ㄾ', - 'ᆵ' => 'ㄿ', - 'ᄚ' => 'ㅀ', - 'ᄆ' => 'ㅁ', - 'ᄇ' => 'ㅂ', - 'ᄈ' => 'ㅃ', - 'ᄡ' => 'ㅄ', - 'ᄉ' => 'ㅅ', - 'ᄊ' => 'ㅆ', - 'ᄋ' => 'ㅇ', - 'ᄌ' => 'ㅈ', - 'ᄍ' => 'ㅉ', - 'ᄎ' => 'ㅊ', - 'ᄏ' => 'ㅋ', - 'ᄐ' => 'ㅌ', - 'ᄑ' => 'ㅍ', - 'ᄒ' => 'ㅎ', - 'ᅡ' => 'ㅏ', - 'ᅢ' => 'ㅐ', - 'ᅣ' => 'ㅑ', - 'ᅤ' => 'ㅒ', - 'ᅥ' => 'ㅓ', - 'ᅦ' => 'ㅔ', - 'ᅧ' => 'ㅕ', - 'ᅨ' => 'ㅖ', - 'ᅩ' => 'ㅗ', - 'ᅪ' => 'ㅘ', - 'ᅫ' => 'ㅙ', - 'ᅬ' => 'ㅚ', - 'ᅭ' => 'ㅛ', - 'ᅮ' => 'ㅜ', - 'ᅯ' => 'ㅝ', - 'ᅰ' => 'ㅞ', - 'ᅱ' => 'ㅟ', - 'ᅲ' => 'ㅠ', - 'ᅳ' => 'ㅡ', - 'ᅴ' => 'ㅢ', - 'ᅵ' => 'ㅣ', - '¢' => '¢', - '£' => '£', - '¬' => '¬', - ' ̄' => '¯', - '¦' => '¦', - '¥' => '¥', - '₩' => '₩', - '│' => '│', - '←' => '←', - '↑' => '↑', - '→' => '→', - '↓' => '↓', - '■' => '■', - '○' => '○', - '𝐀' => 'A', - '𝐁' => 'B', - '𝐂' => 'C', - '𝐃' => 'D', - '𝐄' => 'E', - '𝐅' => 'F', - '𝐆' => 'G', - '𝐇' => 'H', - '𝐈' => 'I', - '𝐉' => 'J', - '𝐊' => 'K', - '𝐋' => 'L', - '𝐌' => 'M', - '𝐍' => 'N', - '𝐎' => 'O', - '𝐏' => 'P', - '𝐐' => 'Q', - '𝐑' => 'R', - '𝐒' => 'S', - '𝐓' => 'T', - '𝐔' => 'U', - '𝐕' => 'V', - '𝐖' => 'W', - '𝐗' => 'X', - '𝐘' => 'Y', - '𝐙' => 'Z', - '𝐚' => 'a', - '𝐛' => 'b', - '𝐜' => 'c', - '𝐝' => 'd', - '𝐞' => 'e', - '𝐟' => 'f', - '𝐠' => 'g', - '𝐡' => 'h', - '𝐢' => 'i', - '𝐣' => 'j', - '𝐤' => 'k', - '𝐥' => 'l', - '𝐦' => 'm', - '𝐧' => 'n', - '𝐨' => 'o', - '𝐩' => 'p', - '𝐪' => 'q', - '𝐫' => 'r', - '𝐬' => 's', - '𝐭' => 't', - '𝐮' => 'u', - '𝐯' => 'v', - '𝐰' => 'w', - '𝐱' => 'x', - '𝐲' => 'y', - '𝐳' => 'z', - '𝐴' => 'A', - '𝐵' => 'B', - '𝐶' => 'C', - '𝐷' => 'D', - '𝐸' => 'E', - '𝐹' => 'F', - '𝐺' => 'G', - '𝐻' => 'H', - '𝐼' => 'I', - '𝐽' => 'J', - '𝐾' => 'K', - '𝐿' => 'L', - '𝑀' => 'M', - '𝑁' => 'N', - '𝑂' => 'O', - '𝑃' => 'P', - '𝑄' => 'Q', - '𝑅' => 'R', - '𝑆' => 'S', - '𝑇' => 'T', - '𝑈' => 'U', - '𝑉' => 'V', - '𝑊' => 'W', - '𝑋' => 'X', - '𝑌' => 'Y', - '𝑍' => 'Z', - '𝑎' => 'a', - '𝑏' => 'b', - '𝑐' => 'c', - '𝑑' => 'd', - '𝑒' => 'e', - '𝑓' => 'f', - '𝑔' => 'g', - '𝑖' => 'i', - '𝑗' => 'j', - '𝑘' => 'k', - '𝑙' => 'l', - '𝑚' => 'm', - '𝑛' => 'n', - '𝑜' => 'o', - '𝑝' => 'p', - '𝑞' => 'q', - '𝑟' => 'r', - '𝑠' => 's', - '𝑡' => 't', - '𝑢' => 'u', - '𝑣' => 'v', - '𝑤' => 'w', - '𝑥' => 'x', - '𝑦' => 'y', - '𝑧' => 'z', - '𝑨' => 'A', - '𝑩' => 'B', - '𝑪' => 'C', - '𝑫' => 'D', - '𝑬' => 'E', - '𝑭' => 'F', - '𝑮' => 'G', - '𝑯' => 'H', - '𝑰' => 'I', - '𝑱' => 'J', - '𝑲' => 'K', - '𝑳' => 'L', - '𝑴' => 'M', - '𝑵' => 'N', - '𝑶' => 'O', - '𝑷' => 'P', - '𝑸' => 'Q', - '𝑹' => 'R', - '𝑺' => 'S', - '𝑻' => 'T', - '𝑼' => 'U', - '𝑽' => 'V', - '𝑾' => 'W', - '𝑿' => 'X', - '𝒀' => 'Y', - '𝒁' => 'Z', - '𝒂' => 'a', - '𝒃' => 'b', - '𝒄' => 'c', - '𝒅' => 'd', - '𝒆' => 'e', - '𝒇' => 'f', - '𝒈' => 'g', - '𝒉' => 'h', - '𝒊' => 'i', - '𝒋' => 'j', - '𝒌' => 'k', - '𝒍' => 'l', - '𝒎' => 'm', - '𝒏' => 'n', - '𝒐' => 'o', - '𝒑' => 'p', - '𝒒' => 'q', - '𝒓' => 'r', - '𝒔' => 's', - '𝒕' => 't', - '𝒖' => 'u', - '𝒗' => 'v', - '𝒘' => 'w', - '𝒙' => 'x', - '𝒚' => 'y', - '𝒛' => 'z', - '𝒜' => 'A', - '𝒞' => 'C', - '𝒟' => 'D', - '𝒢' => 'G', - '𝒥' => 'J', - '𝒦' => 'K', - '𝒩' => 'N', - '𝒪' => 'O', - '𝒫' => 'P', - '𝒬' => 'Q', - '𝒮' => 'S', - '𝒯' => 'T', - '𝒰' => 'U', - '𝒱' => 'V', - '𝒲' => 'W', - '𝒳' => 'X', - '𝒴' => 'Y', - '𝒵' => 'Z', - '𝒶' => 'a', - '𝒷' => 'b', - '𝒸' => 'c', - '𝒹' => 'd', - '𝒻' => 'f', - '𝒽' => 'h', - '𝒾' => 'i', - '𝒿' => 'j', - '𝓀' => 'k', - '𝓁' => 'l', - '𝓂' => 'm', - '𝓃' => 'n', - '𝓅' => 'p', - '𝓆' => 'q', - '𝓇' => 'r', - '𝓈' => 's', - '𝓉' => 't', - '𝓊' => 'u', - '𝓋' => 'v', - '𝓌' => 'w', - '𝓍' => 'x', - '𝓎' => 'y', - '𝓏' => 'z', - '𝓐' => 'A', - '𝓑' => 'B', - '𝓒' => 'C', - '𝓓' => 'D', - '𝓔' => 'E', - '𝓕' => 'F', - '𝓖' => 'G', - '𝓗' => 'H', - '𝓘' => 'I', - '𝓙' => 'J', - '𝓚' => 'K', - '𝓛' => 'L', - '𝓜' => 'M', - '𝓝' => 'N', - '𝓞' => 'O', - '𝓟' => 'P', - '𝓠' => 'Q', - '𝓡' => 'R', - '𝓢' => 'S', - '𝓣' => 'T', - '𝓤' => 'U', - '𝓥' => 'V', - '𝓦' => 'W', - '𝓧' => 'X', - '𝓨' => 'Y', - '𝓩' => 'Z', - '𝓪' => 'a', - '𝓫' => 'b', - '𝓬' => 'c', - '𝓭' => 'd', - '𝓮' => 'e', - '𝓯' => 'f', - '𝓰' => 'g', - '𝓱' => 'h', - '𝓲' => 'i', - '𝓳' => 'j', - '𝓴' => 'k', - '𝓵' => 'l', - '𝓶' => 'm', - '𝓷' => 'n', - '𝓸' => 'o', - '𝓹' => 'p', - '𝓺' => 'q', - '𝓻' => 'r', - '𝓼' => 's', - '𝓽' => 't', - '𝓾' => 'u', - '𝓿' => 'v', - '𝔀' => 'w', - '𝔁' => 'x', - '𝔂' => 'y', - '𝔃' => 'z', - '𝔄' => 'A', - '𝔅' => 'B', - '𝔇' => 'D', - '𝔈' => 'E', - '𝔉' => 'F', - '𝔊' => 'G', - '𝔍' => 'J', - '𝔎' => 'K', - '𝔏' => 'L', - '𝔐' => 'M', - '𝔑' => 'N', - '𝔒' => 'O', - '𝔓' => 'P', - '𝔔' => 'Q', - '𝔖' => 'S', - '𝔗' => 'T', - '𝔘' => 'U', - '𝔙' => 'V', - '𝔚' => 'W', - '𝔛' => 'X', - '𝔜' => 'Y', - '𝔞' => 'a', - '𝔟' => 'b', - '𝔠' => 'c', - '𝔡' => 'd', - '𝔢' => 'e', - '𝔣' => 'f', - '𝔤' => 'g', - '𝔥' => 'h', - '𝔦' => 'i', - '𝔧' => 'j', - '𝔨' => 'k', - '𝔩' => 'l', - '𝔪' => 'm', - '𝔫' => 'n', - '𝔬' => 'o', - '𝔭' => 'p', - '𝔮' => 'q', - '𝔯' => 'r', - '𝔰' => 's', - '𝔱' => 't', - '𝔲' => 'u', - '𝔳' => 'v', - '𝔴' => 'w', - '𝔵' => 'x', - '𝔶' => 'y', - '𝔷' => 'z', - '𝔸' => 'A', - '𝔹' => 'B', - '𝔻' => 'D', - '𝔼' => 'E', - '𝔽' => 'F', - '𝔾' => 'G', - '𝕀' => 'I', - '𝕁' => 'J', - '𝕂' => 'K', - '𝕃' => 'L', - '𝕄' => 'M', - '𝕆' => 'O', - '𝕊' => 'S', - '𝕋' => 'T', - '𝕌' => 'U', - '𝕍' => 'V', - '𝕎' => 'W', - '𝕏' => 'X', - '𝕐' => 'Y', - '𝕒' => 'a', - '𝕓' => 'b', - '𝕔' => 'c', - '𝕕' => 'd', - '𝕖' => 'e', - '𝕗' => 'f', - '𝕘' => 'g', - '𝕙' => 'h', - '𝕚' => 'i', - '𝕛' => 'j', - '𝕜' => 'k', - '𝕝' => 'l', - '𝕞' => 'm', - '𝕟' => 'n', - '𝕠' => 'o', - '𝕡' => 'p', - '𝕢' => 'q', - '𝕣' => 'r', - '𝕤' => 's', - '𝕥' => 't', - '𝕦' => 'u', - '𝕧' => 'v', - '𝕨' => 'w', - '𝕩' => 'x', - '𝕪' => 'y', - '𝕫' => 'z', - '𝕬' => 'A', - '𝕭' => 'B', - '𝕮' => 'C', - '𝕯' => 'D', - '𝕰' => 'E', - '𝕱' => 'F', - '𝕲' => 'G', - '𝕳' => 'H', - '𝕴' => 'I', - '𝕵' => 'J', - '𝕶' => 'K', - '𝕷' => 'L', - '𝕸' => 'M', - '𝕹' => 'N', - '𝕺' => 'O', - '𝕻' => 'P', - '𝕼' => 'Q', - '𝕽' => 'R', - '𝕾' => 'S', - '𝕿' => 'T', - '𝖀' => 'U', - '𝖁' => 'V', - '𝖂' => 'W', - '𝖃' => 'X', - '𝖄' => 'Y', - '𝖅' => 'Z', - '𝖆' => 'a', - '𝖇' => 'b', - '𝖈' => 'c', - '𝖉' => 'd', - '𝖊' => 'e', - '𝖋' => 'f', - '𝖌' => 'g', - '𝖍' => 'h', - '𝖎' => 'i', - '𝖏' => 'j', - '𝖐' => 'k', - '𝖑' => 'l', - '𝖒' => 'm', - '𝖓' => 'n', - '𝖔' => 'o', - '𝖕' => 'p', - '𝖖' => 'q', - '𝖗' => 'r', - '𝖘' => 's', - '𝖙' => 't', - '𝖚' => 'u', - '𝖛' => 'v', - '𝖜' => 'w', - '𝖝' => 'x', - '𝖞' => 'y', - '𝖟' => 'z', - '𝖠' => 'A', - '𝖡' => 'B', - '𝖢' => 'C', - '𝖣' => 'D', - '𝖤' => 'E', - '𝖥' => 'F', - '𝖦' => 'G', - '𝖧' => 'H', - '𝖨' => 'I', - '𝖩' => 'J', - '𝖪' => 'K', - '𝖫' => 'L', - '𝖬' => 'M', - '𝖭' => 'N', - '𝖮' => 'O', - '𝖯' => 'P', - '𝖰' => 'Q', - '𝖱' => 'R', - '𝖲' => 'S', - '𝖳' => 'T', - '𝖴' => 'U', - '𝖵' => 'V', - '𝖶' => 'W', - '𝖷' => 'X', - '𝖸' => 'Y', - '𝖹' => 'Z', - '𝖺' => 'a', - '𝖻' => 'b', - '𝖼' => 'c', - '𝖽' => 'd', - '𝖾' => 'e', - '𝖿' => 'f', - '𝗀' => 'g', - '𝗁' => 'h', - '𝗂' => 'i', - '𝗃' => 'j', - '𝗄' => 'k', - '𝗅' => 'l', - '𝗆' => 'm', - '𝗇' => 'n', - '𝗈' => 'o', - '𝗉' => 'p', - '𝗊' => 'q', - '𝗋' => 'r', - '𝗌' => 's', - '𝗍' => 't', - '𝗎' => 'u', - '𝗏' => 'v', - '𝗐' => 'w', - '𝗑' => 'x', - '𝗒' => 'y', - '𝗓' => 'z', - '𝗔' => 'A', - '𝗕' => 'B', - '𝗖' => 'C', - '𝗗' => 'D', - '𝗘' => 'E', - '𝗙' => 'F', - '𝗚' => 'G', - '𝗛' => 'H', - '𝗜' => 'I', - '𝗝' => 'J', - '𝗞' => 'K', - '𝗟' => 'L', - '𝗠' => 'M', - '𝗡' => 'N', - '𝗢' => 'O', - '𝗣' => 'P', - '𝗤' => 'Q', - '𝗥' => 'R', - '𝗦' => 'S', - '𝗧' => 'T', - '𝗨' => 'U', - '𝗩' => 'V', - '𝗪' => 'W', - '𝗫' => 'X', - '𝗬' => 'Y', - '𝗭' => 'Z', - '𝗮' => 'a', - '𝗯' => 'b', - '𝗰' => 'c', - '𝗱' => 'd', - '𝗲' => 'e', - '𝗳' => 'f', - '𝗴' => 'g', - '𝗵' => 'h', - '𝗶' => 'i', - '𝗷' => 'j', - '𝗸' => 'k', - '𝗹' => 'l', - '𝗺' => 'm', - '𝗻' => 'n', - '𝗼' => 'o', - '𝗽' => 'p', - '𝗾' => 'q', - '𝗿' => 'r', - '𝘀' => 's', - '𝘁' => 't', - '𝘂' => 'u', - '𝘃' => 'v', - '𝘄' => 'w', - '𝘅' => 'x', - '𝘆' => 'y', - '𝘇' => 'z', - '𝘈' => 'A', - '𝘉' => 'B', - '𝘊' => 'C', - '𝘋' => 'D', - '𝘌' => 'E', - '𝘍' => 'F', - '𝘎' => 'G', - '𝘏' => 'H', - '𝘐' => 'I', - '𝘑' => 'J', - '𝘒' => 'K', - '𝘓' => 'L', - '𝘔' => 'M', - '𝘕' => 'N', - '𝘖' => 'O', - '𝘗' => 'P', - '𝘘' => 'Q', - '𝘙' => 'R', - '𝘚' => 'S', - '𝘛' => 'T', - '𝘜' => 'U', - '𝘝' => 'V', - '𝘞' => 'W', - '𝘟' => 'X', - '𝘠' => 'Y', - '𝘡' => 'Z', - '𝘢' => 'a', - '𝘣' => 'b', - '𝘤' => 'c', - '𝘥' => 'd', - '𝘦' => 'e', - '𝘧' => 'f', - '𝘨' => 'g', - '𝘩' => 'h', - '𝘪' => 'i', - '𝘫' => 'j', - '𝘬' => 'k', - '𝘭' => 'l', - '𝘮' => 'm', - '𝘯' => 'n', - '𝘰' => 'o', - '𝘱' => 'p', - '𝘲' => 'q', - '𝘳' => 'r', - '𝘴' => 's', - '𝘵' => 't', - '𝘶' => 'u', - '𝘷' => 'v', - '𝘸' => 'w', - '𝘹' => 'x', - '𝘺' => 'y', - '𝘻' => 'z', - '𝘼' => 'A', - '𝘽' => 'B', - '𝘾' => 'C', - '𝘿' => 'D', - '𝙀' => 'E', - '𝙁' => 'F', - '𝙂' => 'G', - '𝙃' => 'H', - '𝙄' => 'I', - '𝙅' => 'J', - '𝙆' => 'K', - '𝙇' => 'L', - '𝙈' => 'M', - '𝙉' => 'N', - '𝙊' => 'O', - '𝙋' => 'P', - '𝙌' => 'Q', - '𝙍' => 'R', - '𝙎' => 'S', - '𝙏' => 'T', - '𝙐' => 'U', - '𝙑' => 'V', - '𝙒' => 'W', - '𝙓' => 'X', - '𝙔' => 'Y', - '𝙕' => 'Z', - '𝙖' => 'a', - '𝙗' => 'b', - '𝙘' => 'c', - '𝙙' => 'd', - '𝙚' => 'e', - '𝙛' => 'f', - '𝙜' => 'g', - '𝙝' => 'h', - '𝙞' => 'i', - '𝙟' => 'j', - '𝙠' => 'k', - '𝙡' => 'l', - '𝙢' => 'm', - '𝙣' => 'n', - '𝙤' => 'o', - '𝙥' => 'p', - '𝙦' => 'q', - '𝙧' => 'r', - '𝙨' => 's', - '𝙩' => 't', - '𝙪' => 'u', - '𝙫' => 'v', - '𝙬' => 'w', - '𝙭' => 'x', - '𝙮' => 'y', - '𝙯' => 'z', - '𝙰' => 'A', - '𝙱' => 'B', - '𝙲' => 'C', - '𝙳' => 'D', - '𝙴' => 'E', - '𝙵' => 'F', - '𝙶' => 'G', - '𝙷' => 'H', - '𝙸' => 'I', - '𝙹' => 'J', - '𝙺' => 'K', - '𝙻' => 'L', - '𝙼' => 'M', - '𝙽' => 'N', - '𝙾' => 'O', - '𝙿' => 'P', - '𝚀' => 'Q', - '𝚁' => 'R', - '𝚂' => 'S', - '𝚃' => 'T', - '𝚄' => 'U', - '𝚅' => 'V', - '𝚆' => 'W', - '𝚇' => 'X', - '𝚈' => 'Y', - '𝚉' => 'Z', - '𝚊' => 'a', - '𝚋' => 'b', - '𝚌' => 'c', - '𝚍' => 'd', - '𝚎' => 'e', - '𝚏' => 'f', - '𝚐' => 'g', - '𝚑' => 'h', - '𝚒' => 'i', - '𝚓' => 'j', - '𝚔' => 'k', - '𝚕' => 'l', - '𝚖' => 'm', - '𝚗' => 'n', - '𝚘' => 'o', - '𝚙' => 'p', - '𝚚' => 'q', - '𝚛' => 'r', - '𝚜' => 's', - '𝚝' => 't', - '𝚞' => 'u', - '𝚟' => 'v', - '𝚠' => 'w', - '𝚡' => 'x', - '𝚢' => 'y', - '𝚣' => 'z', - '𝚤' => 'ı', - '𝚥' => 'ȷ', - '𝚨' => 'Α', - '𝚩' => 'Β', - '𝚪' => 'Γ', - '𝚫' => 'Δ', - '𝚬' => 'Ε', - '𝚭' => 'Ζ', - '𝚮' => 'Η', - '𝚯' => 'Θ', - '𝚰' => 'Ι', - '𝚱' => 'Κ', - '𝚲' => 'Λ', - '𝚳' => 'Μ', - '𝚴' => 'Ν', - '𝚵' => 'Ξ', - '𝚶' => 'Ο', - '𝚷' => 'Π', - '𝚸' => 'Ρ', - '𝚹' => 'ϴ', - '𝚺' => 'Σ', - '𝚻' => 'Τ', - '𝚼' => 'Υ', - '𝚽' => 'Φ', - '𝚾' => 'Χ', - '𝚿' => 'Ψ', - '𝛀' => 'Ω', - '𝛁' => '∇', - '𝛂' => 'α', - '𝛃' => 'β', - '𝛄' => 'γ', - '𝛅' => 'δ', - '𝛆' => 'ε', - '𝛇' => 'ζ', - '𝛈' => 'η', - '𝛉' => 'θ', - '𝛊' => 'ι', - '𝛋' => 'κ', - '𝛌' => 'λ', - '𝛍' => 'μ', - '𝛎' => 'ν', - '𝛏' => 'ξ', - '𝛐' => 'ο', - '𝛑' => 'π', - '𝛒' => 'ρ', - '𝛓' => 'ς', - '𝛔' => 'σ', - '𝛕' => 'τ', - '𝛖' => 'υ', - '𝛗' => 'φ', - '𝛘' => 'χ', - '𝛙' => 'ψ', - '𝛚' => 'ω', - '𝛛' => '∂', - '𝛜' => 'ϵ', - '𝛝' => 'ϑ', - '𝛞' => 'ϰ', - '𝛟' => 'ϕ', - '𝛠' => 'ϱ', - '𝛡' => 'ϖ', - '𝛢' => 'Α', - '𝛣' => 'Β', - '𝛤' => 'Γ', - '𝛥' => 'Δ', - '𝛦' => 'Ε', - '𝛧' => 'Ζ', - '𝛨' => 'Η', - '𝛩' => 'Θ', - '𝛪' => 'Ι', - '𝛫' => 'Κ', - '𝛬' => 'Λ', - '𝛭' => 'Μ', - '𝛮' => 'Ν', - '𝛯' => 'Ξ', - '𝛰' => 'Ο', - '𝛱' => 'Π', - '𝛲' => 'Ρ', - '𝛳' => 'ϴ', - '𝛴' => 'Σ', - '𝛵' => 'Τ', - '𝛶' => 'Υ', - '𝛷' => 'Φ', - '𝛸' => 'Χ', - '𝛹' => 'Ψ', - '𝛺' => 'Ω', - '𝛻' => '∇', - '𝛼' => 'α', - '𝛽' => 'β', - '𝛾' => 'γ', - '𝛿' => 'δ', - '𝜀' => 'ε', - '𝜁' => 'ζ', - '𝜂' => 'η', - '𝜃' => 'θ', - '𝜄' => 'ι', - '𝜅' => 'κ', - '𝜆' => 'λ', - '𝜇' => 'μ', - '𝜈' => 'ν', - '𝜉' => 'ξ', - '𝜊' => 'ο', - '𝜋' => 'π', - '𝜌' => 'ρ', - '𝜍' => 'ς', - '𝜎' => 'σ', - '𝜏' => 'τ', - '𝜐' => 'υ', - '𝜑' => 'φ', - '𝜒' => 'χ', - '𝜓' => 'ψ', - '𝜔' => 'ω', - '𝜕' => '∂', - '𝜖' => 'ϵ', - '𝜗' => 'ϑ', - '𝜘' => 'ϰ', - '𝜙' => 'ϕ', - '𝜚' => 'ϱ', - '𝜛' => 'ϖ', - '𝜜' => 'Α', - '𝜝' => 'Β', - '𝜞' => 'Γ', - '𝜟' => 'Δ', - '𝜠' => 'Ε', - '𝜡' => 'Ζ', - '𝜢' => 'Η', - '𝜣' => 'Θ', - '𝜤' => 'Ι', - '𝜥' => 'Κ', - '𝜦' => 'Λ', - '𝜧' => 'Μ', - '𝜨' => 'Ν', - '𝜩' => 'Ξ', - '𝜪' => 'Ο', - '𝜫' => 'Π', - '𝜬' => 'Ρ', - '𝜭' => 'ϴ', - '𝜮' => 'Σ', - '𝜯' => 'Τ', - '𝜰' => 'Υ', - '𝜱' => 'Φ', - '𝜲' => 'Χ', - '𝜳' => 'Ψ', - '𝜴' => 'Ω', - '𝜵' => '∇', - '𝜶' => 'α', - '𝜷' => 'β', - '𝜸' => 'γ', - '𝜹' => 'δ', - '𝜺' => 'ε', - '𝜻' => 'ζ', - '𝜼' => 'η', - '𝜽' => 'θ', - '𝜾' => 'ι', - '𝜿' => 'κ', - '𝝀' => 'λ', - '𝝁' => 'μ', - '𝝂' => 'ν', - '𝝃' => 'ξ', - '𝝄' => 'ο', - '𝝅' => 'π', - '𝝆' => 'ρ', - '𝝇' => 'ς', - '𝝈' => 'σ', - '𝝉' => 'τ', - '𝝊' => 'υ', - '𝝋' => 'φ', - '𝝌' => 'χ', - '𝝍' => 'ψ', - '𝝎' => 'ω', - '𝝏' => '∂', - '𝝐' => 'ϵ', - '𝝑' => 'ϑ', - '𝝒' => 'ϰ', - '𝝓' => 'ϕ', - '𝝔' => 'ϱ', - '𝝕' => 'ϖ', - '𝝖' => 'Α', - '𝝗' => 'Β', - '𝝘' => 'Γ', - '𝝙' => 'Δ', - '𝝚' => 'Ε', - '𝝛' => 'Ζ', - '𝝜' => 'Η', - '𝝝' => 'Θ', - '𝝞' => 'Ι', - '𝝟' => 'Κ', - '𝝠' => 'Λ', - '𝝡' => 'Μ', - '𝝢' => 'Ν', - '𝝣' => 'Ξ', - '𝝤' => 'Ο', - '𝝥' => 'Π', - '𝝦' => 'Ρ', - '𝝧' => 'ϴ', - '𝝨' => 'Σ', - '𝝩' => 'Τ', - '𝝪' => 'Υ', - '𝝫' => 'Φ', - '𝝬' => 'Χ', - '𝝭' => 'Ψ', - '𝝮' => 'Ω', - '𝝯' => '∇', - '𝝰' => 'α', - '𝝱' => 'β', - '𝝲' => 'γ', - '𝝳' => 'δ', - '𝝴' => 'ε', - '𝝵' => 'ζ', - '𝝶' => 'η', - '𝝷' => 'θ', - '𝝸' => 'ι', - '𝝹' => 'κ', - '𝝺' => 'λ', - '𝝻' => 'μ', - '𝝼' => 'ν', - '𝝽' => 'ξ', - '𝝾' => 'ο', - '𝝿' => 'π', - '𝞀' => 'ρ', - '𝞁' => 'ς', - '𝞂' => 'σ', - '𝞃' => 'τ', - '𝞄' => 'υ', - '𝞅' => 'φ', - '𝞆' => 'χ', - '𝞇' => 'ψ', - '𝞈' => 'ω', - '𝞉' => '∂', - '𝞊' => 'ϵ', - '𝞋' => 'ϑ', - '𝞌' => 'ϰ', - '𝞍' => 'ϕ', - '𝞎' => 'ϱ', - '𝞏' => 'ϖ', - '𝞐' => 'Α', - '𝞑' => 'Β', - '𝞒' => 'Γ', - '𝞓' => 'Δ', - '𝞔' => 'Ε', - '𝞕' => 'Ζ', - '𝞖' => 'Η', - '𝞗' => 'Θ', - '𝞘' => 'Ι', - '𝞙' => 'Κ', - '𝞚' => 'Λ', - '𝞛' => 'Μ', - '𝞜' => 'Ν', - '𝞝' => 'Ξ', - '𝞞' => 'Ο', - '𝞟' => 'Π', - '𝞠' => 'Ρ', - '𝞡' => 'ϴ', - '𝞢' => 'Σ', - '𝞣' => 'Τ', - '𝞤' => 'Υ', - '𝞥' => 'Φ', - '𝞦' => 'Χ', - '𝞧' => 'Ψ', - '𝞨' => 'Ω', - '𝞩' => '∇', - '𝞪' => 'α', - '𝞫' => 'β', - '𝞬' => 'γ', - '𝞭' => 'δ', - '𝞮' => 'ε', - '𝞯' => 'ζ', - '𝞰' => 'η', - '𝞱' => 'θ', - '𝞲' => 'ι', - '𝞳' => 'κ', - '𝞴' => 'λ', - '𝞵' => 'μ', - '𝞶' => 'ν', - '𝞷' => 'ξ', - '𝞸' => 'ο', - '𝞹' => 'π', - '𝞺' => 'ρ', - '𝞻' => 'ς', - '𝞼' => 'σ', - '𝞽' => 'τ', - '𝞾' => 'υ', - '𝞿' => 'φ', - '𝟀' => 'χ', - '𝟁' => 'ψ', - '𝟂' => 'ω', - '𝟃' => '∂', - '𝟄' => 'ϵ', - '𝟅' => 'ϑ', - '𝟆' => 'ϰ', - '𝟇' => 'ϕ', - '𝟈' => 'ϱ', - '𝟉' => 'ϖ', - '𝟊' => 'Ϝ', - '𝟋' => 'ϝ', - '𝟎' => '0', - '𝟏' => '1', - '𝟐' => '2', - '𝟑' => '3', - '𝟒' => '4', - '𝟓' => '5', - '𝟔' => '6', - '𝟕' => '7', - '𝟖' => '8', - '𝟗' => '9', - '𝟘' => '0', - '𝟙' => '1', - '𝟚' => '2', - '𝟛' => '3', - '𝟜' => '4', - '𝟝' => '5', - '𝟞' => '6', - '𝟟' => '7', - '𝟠' => '8', - '𝟡' => '9', - '𝟢' => '0', - '𝟣' => '1', - '𝟤' => '2', - '𝟥' => '3', - '𝟦' => '4', - '𝟧' => '5', - '𝟨' => '6', - '𝟩' => '7', - '𝟪' => '8', - '𝟫' => '9', - '𝟬' => '0', - '𝟭' => '1', - '𝟮' => '2', - '𝟯' => '3', - '𝟰' => '4', - '𝟱' => '5', - '𝟲' => '6', - '𝟳' => '7', - '𝟴' => '8', - '𝟵' => '9', - '𝟶' => '0', - '𝟷' => '1', - '𝟸' => '2', - '𝟹' => '3', - '𝟺' => '4', - '𝟻' => '5', - '𝟼' => '6', - '𝟽' => '7', - '𝟾' => '8', - '𝟿' => '9', - '𞸀' => 'ا', - '𞸁' => 'ب', - '𞸂' => 'ج', - '𞸃' => 'د', - '𞸅' => 'و', - '𞸆' => 'ز', - '𞸇' => 'ح', - '𞸈' => 'ط', - '𞸉' => 'ي', - '𞸊' => 'ك', - '𞸋' => 'ل', - '𞸌' => 'م', - '𞸍' => 'ن', - '𞸎' => 'س', - '𞸏' => 'ع', - '𞸐' => 'ف', - '𞸑' => 'ص', - '𞸒' => 'ق', - '𞸓' => 'ر', - '𞸔' => 'ش', - '𞸕' => 'ت', - '𞸖' => 'ث', - '𞸗' => 'خ', - '𞸘' => 'ذ', - '𞸙' => 'ض', - '𞸚' => 'ظ', - '𞸛' => 'غ', - '𞸜' => 'ٮ', - '𞸝' => 'ں', - '𞸞' => 'ڡ', - '𞸟' => 'ٯ', - '𞸡' => 'ب', - '𞸢' => 'ج', - '𞸤' => 'ه', - '𞸧' => 'ح', - '𞸩' => 'ي', - '𞸪' => 'ك', - '𞸫' => 'ل', - '𞸬' => 'م', - '𞸭' => 'ن', - '𞸮' => 'س', - '𞸯' => 'ع', - '𞸰' => 'ف', - '𞸱' => 'ص', - '𞸲' => 'ق', - '𞸴' => 'ش', - '𞸵' => 'ت', - '𞸶' => 'ث', - '𞸷' => 'خ', - '𞸹' => 'ض', - '𞸻' => 'غ', - '𞹂' => 'ج', - '𞹇' => 'ح', - '𞹉' => 'ي', - '𞹋' => 'ل', - '𞹍' => 'ن', - '𞹎' => 'س', - '𞹏' => 'ع', - '𞹑' => 'ص', - '𞹒' => 'ق', - '𞹔' => 'ش', - '𞹗' => 'خ', - '𞹙' => 'ض', - '𞹛' => 'غ', - '𞹝' => 'ں', - '𞹟' => 'ٯ', - '𞹡' => 'ب', - '𞹢' => 'ج', - '𞹤' => 'ه', - '𞹧' => 'ح', - '𞹨' => 'ط', - '𞹩' => 'ي', - '𞹪' => 'ك', - '𞹬' => 'م', - '𞹭' => 'ن', - '𞹮' => 'س', - '𞹯' => 'ع', - '𞹰' => 'ف', - '𞹱' => 'ص', - '𞹲' => 'ق', - '𞹴' => 'ش', - '𞹵' => 'ت', - '𞹶' => 'ث', - '𞹷' => 'خ', - '𞹹' => 'ض', - '𞹺' => 'ظ', - '𞹻' => 'غ', - '𞹼' => 'ٮ', - '𞹾' => 'ڡ', - '𞺀' => 'ا', - '𞺁' => 'ب', - '𞺂' => 'ج', - '𞺃' => 'د', - '𞺄' => 'ه', - '𞺅' => 'و', - '𞺆' => 'ز', - '𞺇' => 'ح', - '𞺈' => 'ط', - '𞺉' => 'ي', - '𞺋' => 'ل', - '𞺌' => 'م', - '𞺍' => 'ن', - '𞺎' => 'س', - '𞺏' => 'ع', - '𞺐' => 'ف', - '𞺑' => 'ص', - '𞺒' => 'ق', - '𞺓' => 'ر', - '𞺔' => 'ش', - '𞺕' => 'ت', - '𞺖' => 'ث', - '𞺗' => 'خ', - '𞺘' => 'ذ', - '𞺙' => 'ض', - '𞺚' => 'ظ', - '𞺛' => 'غ', - '𞺡' => 'ب', - '𞺢' => 'ج', - '𞺣' => 'د', - '𞺥' => 'و', - '𞺦' => 'ز', - '𞺧' => 'ح', - '𞺨' => 'ط', - '𞺩' => 'ي', - '𞺫' => 'ل', - '𞺬' => 'م', - '𞺭' => 'ن', - '𞺮' => 'س', - '𞺯' => 'ع', - '𞺰' => 'ف', - '𞺱' => 'ص', - '𞺲' => 'ق', - '𞺳' => 'ر', - '𞺴' => 'ش', - '𞺵' => 'ت', - '𞺶' => 'ث', - '𞺷' => 'خ', - '𞺸' => 'ذ', - '𞺹' => 'ض', - '𞺺' => 'ظ', - '𞺻' => 'غ', - '🄀' => '0.', - '🄁' => '0,', - '🄂' => '1,', - '🄃' => '2,', - '🄄' => '3,', - '🄅' => '4,', - '🄆' => '5,', - '🄇' => '6,', - '🄈' => '7,', - '🄉' => '8,', - '🄊' => '9,', - '🄐' => '(A)', - '🄑' => '(B)', - '🄒' => '(C)', - '🄓' => '(D)', - '🄔' => '(E)', - '🄕' => '(F)', - '🄖' => '(G)', - '🄗' => '(H)', - '🄘' => '(I)', - '🄙' => '(J)', - '🄚' => '(K)', - '🄛' => '(L)', - '🄜' => '(M)', - '🄝' => '(N)', - '🄞' => '(O)', - '🄟' => '(P)', - '🄠' => '(Q)', - '🄡' => '(R)', - '🄢' => '(S)', - '🄣' => '(T)', - '🄤' => '(U)', - '🄥' => '(V)', - '🄦' => '(W)', - '🄧' => '(X)', - '🄨' => '(Y)', - '🄩' => '(Z)', - '🄪' => '〔S〕', - '🄫' => '(C)', - '🄬' => '(R)', - '🄭' => '(CD)', - '🄮' => '(WZ)', - '🄰' => 'A', - '🄱' => 'B', - '🄲' => 'C', - '🄳' => 'D', - '🄴' => 'E', - '🄵' => 'F', - '🄶' => 'G', - '🄷' => 'H', - '🄸' => 'I', - '🄹' => 'J', - '🄺' => 'K', - '🄻' => 'L', - '🄼' => 'M', - '🄽' => 'N', - '🄾' => 'O', - '🄿' => 'P', - '🅀' => 'Q', - '🅁' => 'R', - '🅂' => 'S', - '🅃' => 'T', - '🅄' => 'U', - '🅅' => 'V', - '🅆' => 'W', - '🅇' => 'X', - '🅈' => 'Y', - '🅉' => 'Z', - '🅊' => 'HV', - '🅋' => 'MV', - '🅌' => 'SD', - '🅍' => 'SS', - '🅎' => 'PPV', - '🅏' => 'WC', - '🆐' => 'DJ', - '🈀' => 'ほか', - '🈁' => 'ココ', - '🈂' => 'サ', - '🈐' => '手', - '🈑' => '字', - '🈒' => '双', - '🈓' => 'デ', - '🈔' => '二', - '🈕' => '多', - '🈖' => '解', - '🈗' => '天', - '🈘' => '交', - '🈙' => '映', - '🈚' => '無', - '🈛' => '料', - '🈜' => '前', - '🈝' => '後', - '🈞' => '再', - '🈟' => '新', - '🈠' => '初', - '🈡' => '終', - '🈢' => '生', - '🈣' => '販', - '🈤' => '声', - '🈥' => '吹', - '🈦' => '演', - '🈧' => '投', - '🈨' => '捕', - '🈩' => '一', - '🈪' => '三', - '🈫' => '遊', - '🈬' => '左', - '🈭' => '中', - '🈮' => '右', - '🈯' => '指', - '🈰' => '走', - '🈱' => '打', - '🈲' => '禁', - '🈳' => '空', - '🈴' => '合', - '🈵' => '満', - '🈶' => '有', - '🈷' => '月', - '🈸' => '申', - '🈹' => '割', - '🈺' => '営', - '🈻' => '配', - '🉀' => '〔本〕', - '🉁' => '〔三〕', - '🉂' => '〔二〕', - '🉃' => '〔安〕', - '🉄' => '〔点〕', - '🉅' => '〔打〕', - '🉆' => '〔盗〕', - '🉇' => '〔勝〕', - '🉈' => '〔敗〕', - '🉐' => '(得)', - '🉑' => '(可)', - '丽' => '丽', - '丸' => '丸', - '乁' => '乁', - '𠄢' => '𠄢', - '你' => '你', - '侮' => '侮', - '侻' => '侻', - '倂' => '倂', - '偺' => '偺', - '備' => '備', - '僧' => '僧', - '像' => '像', - '㒞' => '㒞', - '𠘺' => '𠘺', - '免' => '免', - '兔' => '兔', - '兤' => '兤', - '具' => '具', - '𠔜' => '𠔜', - '㒹' => '㒹', - '內' => '內', - '再' => '再', - '𠕋' => '𠕋', - '冗' => '冗', - '冤' => '冤', - '仌' => '仌', - '冬' => '冬', - '况' => '况', - '𩇟' => '𩇟', - '凵' => '凵', - '刃' => '刃', - '㓟' => '㓟', - '刻' => '刻', - '剆' => '剆', - '割' => '割', - '剷' => '剷', - '㔕' => '㔕', - '勇' => '勇', - '勉' => '勉', - '勤' => '勤', - '勺' => '勺', - '包' => '包', - '匆' => '匆', - '北' => '北', - '卉' => '卉', - '卑' => '卑', - '博' => '博', - '即' => '即', - '卽' => '卽', - '卿' => '卿', - '卿' => '卿', - '卿' => '卿', - '𠨬' => '𠨬', - '灰' => '灰', - '及' => '及', - '叟' => '叟', - '𠭣' => '𠭣', - '叫' => '叫', - '叱' => '叱', - '吆' => '吆', - '咞' => '咞', - '吸' => '吸', - '呈' => '呈', - '周' => '周', - '咢' => '咢', - '哶' => '哶', - '唐' => '唐', - '啓' => '啓', - '啣' => '啣', - '善' => '善', - '善' => '善', - '喙' => '喙', - '喫' => '喫', - '喳' => '喳', - '嗂' => '嗂', - '圖' => '圖', - '嘆' => '嘆', - '圗' => '圗', - '噑' => '噑', - '噴' => '噴', - '切' => '切', - '壮' => '壮', - '城' => '城', - '埴' => '埴', - '堍' => '堍', - '型' => '型', - '堲' => '堲', - '報' => '報', - '墬' => '墬', - '𡓤' => '𡓤', - '売' => '売', - '壷' => '壷', - '夆' => '夆', - '多' => '多', - '夢' => '夢', - '奢' => '奢', - '𡚨' => '𡚨', - '𡛪' => '𡛪', - '姬' => '姬', - '娛' => '娛', - '娧' => '娧', - '姘' => '姘', - '婦' => '婦', - '㛮' => '㛮', - '㛼' => '㛼', - '嬈' => '嬈', - '嬾' => '嬾', - '嬾' => '嬾', - '𡧈' => '𡧈', - '寃' => '寃', - '寘' => '寘', - '寧' => '寧', - '寳' => '寳', - '𡬘' => '𡬘', - '寿' => '寿', - '将' => '将', - '当' => '当', - '尢' => '尢', - '㞁' => '㞁', - '屠' => '屠', - '屮' => '屮', - '峀' => '峀', - '岍' => '岍', - '𡷤' => '𡷤', - '嵃' => '嵃', - '𡷦' => '𡷦', - '嵮' => '嵮', - '嵫' => '嵫', - '嵼' => '嵼', - '巡' => '巡', - '巢' => '巢', - '㠯' => '㠯', - '巽' => '巽', - '帨' => '帨', - '帽' => '帽', - '幩' => '幩', - '㡢' => '㡢', - '𢆃' => '𢆃', - '㡼' => '㡼', - '庰' => '庰', - '庳' => '庳', - '庶' => '庶', - '廊' => '廊', - '𪎒' => '𪎒', - '廾' => '廾', - '𢌱' => '𢌱', - '𢌱' => '𢌱', - '舁' => '舁', - '弢' => '弢', - '弢' => '弢', - '㣇' => '㣇', - '𣊸' => '𣊸', - '𦇚' => '𦇚', - '形' => '形', - '彫' => '彫', - '㣣' => '㣣', - '徚' => '徚', - '忍' => '忍', - '志' => '志', - '忹' => '忹', - '悁' => '悁', - '㤺' => '㤺', - '㤜' => '㤜', - '悔' => '悔', - '𢛔' => '𢛔', - '惇' => '惇', - '慈' => '慈', - '慌' => '慌', - '慎' => '慎', - '慌' => '慌', - '慺' => '慺', - '憎' => '憎', - '憲' => '憲', - '憤' => '憤', - '憯' => '憯', - '懞' => '懞', - '懲' => '懲', - '懶' => '懶', - '成' => '成', - '戛' => '戛', - '扝' => '扝', - '抱' => '抱', - '拔' => '拔', - '捐' => '捐', - '𢬌' => '𢬌', - '挽' => '挽', - '拼' => '拼', - '捨' => '捨', - '掃' => '掃', - '揤' => '揤', - '𢯱' => '𢯱', - '搢' => '搢', - '揅' => '揅', - '掩' => '掩', - '㨮' => '㨮', - '摩' => '摩', - '摾' => '摾', - '撝' => '撝', - '摷' => '摷', - '㩬' => '㩬', - '敏' => '敏', - '敬' => '敬', - '𣀊' => '𣀊', - '旣' => '旣', - '書' => '書', - '晉' => '晉', - '㬙' => '㬙', - '暑' => '暑', - '㬈' => '㬈', - '㫤' => '㫤', - '冒' => '冒', - '冕' => '冕', - '最' => '最', - '暜' => '暜', - '肭' => '肭', - '䏙' => '䏙', - '朗' => '朗', - '望' => '望', - '朡' => '朡', - '杞' => '杞', - '杓' => '杓', - '𣏃' => '𣏃', - '㭉' => '㭉', - '柺' => '柺', - '枅' => '枅', - '桒' => '桒', - '梅' => '梅', - '𣑭' => '𣑭', - '梎' => '梎', - '栟' => '栟', - '椔' => '椔', - '㮝' => '㮝', - '楂' => '楂', - '榣' => '榣', - '槪' => '槪', - '檨' => '檨', - '𣚣' => '𣚣', - '櫛' => '櫛', - '㰘' => '㰘', - '次' => '次', - '𣢧' => '𣢧', - '歔' => '歔', - '㱎' => '㱎', - '歲' => '歲', - '殟' => '殟', - '殺' => '殺', - '殻' => '殻', - '𣪍' => '𣪍', - '𡴋' => '𡴋', - '𣫺' => '𣫺', - '汎' => '汎', - '𣲼' => '𣲼', - '沿' => '沿', - '泍' => '泍', - '汧' => '汧', - '洖' => '洖', - '派' => '派', - '海' => '海', - '流' => '流', - '浩' => '浩', - '浸' => '浸', - '涅' => '涅', - '𣴞' => '𣴞', - '洴' => '洴', - '港' => '港', - '湮' => '湮', - '㴳' => '㴳', - '滋' => '滋', - '滇' => '滇', - '𣻑' => '𣻑', - '淹' => '淹', - '潮' => '潮', - '𣽞' => '𣽞', - '𣾎' => '𣾎', - '濆' => '濆', - '瀹' => '瀹', - '瀞' => '瀞', - '瀛' => '瀛', - '㶖' => '㶖', - '灊' => '灊', - '災' => '災', - '灷' => '灷', - '炭' => '炭', - '𠔥' => '𠔥', - '煅' => '煅', - '𤉣' => '𤉣', - '熜' => '熜', - '𤎫' => '𤎫', - '爨' => '爨', - '爵' => '爵', - '牐' => '牐', - '𤘈' => '𤘈', - '犀' => '犀', - '犕' => '犕', - '𤜵' => '𤜵', - '𤠔' => '𤠔', - '獺' => '獺', - '王' => '王', - '㺬' => '㺬', - '玥' => '玥', - '㺸' => '㺸', - '㺸' => '㺸', - '瑇' => '瑇', - '瑜' => '瑜', - '瑱' => '瑱', - '璅' => '璅', - '瓊' => '瓊', - '㼛' => '㼛', - '甤' => '甤', - '𤰶' => '𤰶', - '甾' => '甾', - '𤲒' => '𤲒', - '異' => '異', - '𢆟' => '𢆟', - '瘐' => '瘐', - '𤾡' => '𤾡', - '𤾸' => '𤾸', - '𥁄' => '𥁄', - '㿼' => '㿼', - '䀈' => '䀈', - '直' => '直', - '𥃳' => '𥃳', - '𥃲' => '𥃲', - '𥄙' => '𥄙', - '𥄳' => '𥄳', - '眞' => '眞', - '真' => '真', - '真' => '真', - '睊' => '睊', - '䀹' => '䀹', - '瞋' => '瞋', - '䁆' => '䁆', - '䂖' => '䂖', - '𥐝' => '𥐝', - '硎' => '硎', - '碌' => '碌', - '磌' => '磌', - '䃣' => '䃣', - '𥘦' => '𥘦', - '祖' => '祖', - '𥚚' => '𥚚', - '𥛅' => '𥛅', - '福' => '福', - '秫' => '秫', - '䄯' => '䄯', - '穀' => '穀', - '穊' => '穊', - '穏' => '穏', - '𥥼' => '𥥼', - '𥪧' => '𥪧', - '𥪧' => '𥪧', - '竮' => '竮', - '䈂' => '䈂', - '𥮫' => '𥮫', - '篆' => '篆', - '築' => '築', - '䈧' => '䈧', - '𥲀' => '𥲀', - '糒' => '糒', - '䊠' => '䊠', - '糨' => '糨', - '糣' => '糣', - '紀' => '紀', - '𥾆' => '𥾆', - '絣' => '絣', - '䌁' => '䌁', - '緇' => '緇', - '縂' => '縂', - '繅' => '繅', - '䌴' => '䌴', - '𦈨' => '𦈨', - '𦉇' => '𦉇', - '䍙' => '䍙', - '𦋙' => '𦋙', - '罺' => '罺', - '𦌾' => '𦌾', - '羕' => '羕', - '翺' => '翺', - '者' => '者', - '𦓚' => '𦓚', - '𦔣' => '𦔣', - '聠' => '聠', - '𦖨' => '𦖨', - '聰' => '聰', - '𣍟' => '𣍟', - '䏕' => '䏕', - '育' => '育', - '脃' => '脃', - '䐋' => '䐋', - '脾' => '脾', - '媵' => '媵', - '𦞧' => '𦞧', - '𦞵' => '𦞵', - '𣎓' => '𣎓', - '𣎜' => '𣎜', - '舁' => '舁', - '舄' => '舄', - '辞' => '辞', - '䑫' => '䑫', - '芑' => '芑', - '芋' => '芋', - '芝' => '芝', - '劳' => '劳', - '花' => '花', - '芳' => '芳', - '芽' => '芽', - '苦' => '苦', - '𦬼' => '𦬼', - '若' => '若', - '茝' => '茝', - '荣' => '荣', - '莭' => '莭', - '茣' => '茣', - '莽' => '莽', - '菧' => '菧', - '著' => '著', - '荓' => '荓', - '菊' => '菊', - '菌' => '菌', - '菜' => '菜', - '𦰶' => '𦰶', - '𦵫' => '𦵫', - '𦳕' => '𦳕', - '䔫' => '䔫', - '蓱' => '蓱', - '蓳' => '蓳', - '蔖' => '蔖', - '𧏊' => '𧏊', - '蕤' => '蕤', - '𦼬' => '𦼬', - '䕝' => '䕝', - '䕡' => '䕡', - '𦾱' => '𦾱', - '𧃒' => '𧃒', - '䕫' => '䕫', - '虐' => '虐', - '虜' => '虜', - '虧' => '虧', - '虩' => '虩', - '蚩' => '蚩', - '蚈' => '蚈', - '蜎' => '蜎', - '蛢' => '蛢', - '蝹' => '蝹', - '蜨' => '蜨', - '蝫' => '蝫', - '螆' => '螆', - '䗗' => '䗗', - '蟡' => '蟡', - '蠁' => '蠁', - '䗹' => '䗹', - '衠' => '衠', - '衣' => '衣', - '𧙧' => '𧙧', - '裗' => '裗', - '裞' => '裞', - '䘵' => '䘵', - '裺' => '裺', - '㒻' => '㒻', - '𧢮' => '𧢮', - '𧥦' => '𧥦', - '䚾' => '䚾', - '䛇' => '䛇', - '誠' => '誠', - '諭' => '諭', - '變' => '變', - '豕' => '豕', - '𧲨' => '𧲨', - '貫' => '貫', - '賁' => '賁', - '贛' => '贛', - '起' => '起', - '𧼯' => '𧼯', - '𠠄' => '𠠄', - '跋' => '跋', - '趼' => '趼', - '跰' => '跰', - '𠣞' => '𠣞', - '軔' => '軔', - '輸' => '輸', - '𨗒' => '𨗒', - '𨗭' => '𨗭', - '邔' => '邔', - '郱' => '郱', - '鄑' => '鄑', - '𨜮' => '𨜮', - '鄛' => '鄛', - '鈸' => '鈸', - '鋗' => '鋗', - '鋘' => '鋘', - '鉼' => '鉼', - '鏹' => '鏹', - '鐕' => '鐕', - '𨯺' => '𨯺', - '開' => '開', - '䦕' => '䦕', - '閷' => '閷', - '𨵷' => '𨵷', - '䧦' => '䧦', - '雃' => '雃', - '嶲' => '嶲', - '霣' => '霣', - '𩅅' => '𩅅', - '𩈚' => '𩈚', - '䩮' => '䩮', - '䩶' => '䩶', - '韠' => '韠', - '𩐊' => '𩐊', - '䪲' => '䪲', - '𩒖' => '𩒖', - '頋' => '頋', - '頋' => '頋', - '頩' => '頩', - '𩖶' => '𩖶', - '飢' => '飢', - '䬳' => '䬳', - '餩' => '餩', - '馧' => '馧', - '駂' => '駂', - '駾' => '駾', - '䯎' => '䯎', - '𩬰' => '𩬰', - '鬒' => '鬒', - '鱀' => '鱀', - '鳽' => '鳽', - '䳎' => '䳎', - '䳭' => '䳭', - '鵧' => '鵧', - '𪃎' => '𪃎', - '䳸' => '䳸', - '𪄅' => '𪄅', - '𪈎' => '𪈎', - '𪊑' => '𪊑', - '麻' => '麻', - '䵖' => '䵖', - '黹' => '黹', - '黾' => '黾', - '鼅' => '鼅', - '鼏' => '鼏', - '鼖' => '鼖', - '鼻' => '鼻', - '𪘀' => '𪘀', - 'Æ' => 'AE', - 'Ð' => 'D', - 'Ø' => 'O', - 'Þ' => 'TH', - 'ß' => 'ss', - 'æ' => 'ae', - 'ð' => 'd', - 'ø' => 'o', - 'þ' => 'th', - 'Đ' => 'D', - 'đ' => 'd', - 'Ħ' => 'H', - 'ħ' => 'h', - 'ı' => 'i', - 'ĸ' => 'q', - 'Ł' => 'L', - 'ł' => 'l', - 'Ŋ' => 'N', - 'ŋ' => 'n', - 'Œ' => 'OE', - 'œ' => 'oe', - 'Ŧ' => 'T', - 'ŧ' => 't', - 'ƀ' => 'b', - 'Ɓ' => 'B', - 'Ƃ' => 'B', - 'ƃ' => 'b', - 'Ƈ' => 'C', - 'ƈ' => 'c', - 'Ɖ' => 'D', - 'Ɗ' => 'D', - 'Ƌ' => 'D', - 'ƌ' => 'd', - 'Ɛ' => 'E', - 'Ƒ' => 'F', - 'ƒ' => 'f', - 'Ɠ' => 'G', - 'ƕ' => 'hv', - 'Ɩ' => 'I', - 'Ɨ' => 'I', - 'Ƙ' => 'K', - 'ƙ' => 'k', - 'ƚ' => 'l', - 'Ɲ' => 'N', - 'ƞ' => 'n', - 'Ƣ' => 'OI', - 'ƣ' => 'oi', - 'Ƥ' => 'P', - 'ƥ' => 'p', - 'ƫ' => 't', - 'Ƭ' => 'T', - 'ƭ' => 't', - 'Ʈ' => 'T', - 'Ʋ' => 'V', - 'Ƴ' => 'Y', - 'ƴ' => 'y', - 'Ƶ' => 'Z', - 'ƶ' => 'z', - 'Ǥ' => 'G', - 'ǥ' => 'g', - 'ȡ' => 'd', - 'Ȥ' => 'Z', - 'ȥ' => 'z', - 'ȴ' => 'l', - 'ȵ' => 'n', - 'ȶ' => 't', - 'ȷ' => 'j', - 'ȸ' => 'db', - 'ȹ' => 'qp', - 'Ⱥ' => 'A', - 'Ȼ' => 'C', - 'ȼ' => 'c', - 'Ƚ' => 'L', - 'Ⱦ' => 'T', - 'ȿ' => 's', - 'ɀ' => 'z', - 'Ƀ' => 'B', - 'Ʉ' => 'U', - 'Ɇ' => 'E', - 'ɇ' => 'e', - 'Ɉ' => 'J', - 'ɉ' => 'j', - 'Ɍ' => 'R', - 'ɍ' => 'r', - 'Ɏ' => 'Y', - 'ɏ' => 'y', - 'ɓ' => 'b', - 'ɕ' => 'c', - 'ɖ' => 'd', - 'ɗ' => 'd', - 'ɛ' => 'e', - 'ɟ' => 'j', - 'ɠ' => 'g', - 'ɡ' => 'g', - 'ɢ' => 'G', - 'ɦ' => 'h', - 'ɧ' => 'h', - 'ɨ' => 'i', - 'ɪ' => 'I', - 'ɫ' => 'l', - 'ɬ' => 'l', - 'ɭ' => 'l', - 'ɱ' => 'm', - 'ɲ' => 'n', - 'ɳ' => 'n', - 'ɴ' => 'N', - 'ɶ' => 'OE', - 'ɼ' => 'r', - 'ɽ' => 'r', - 'ɾ' => 'r', - 'ʀ' => 'R', - 'ʂ' => 's', - 'ʈ' => 't', - 'ʉ' => 'u', - 'ʋ' => 'v', - 'ʏ' => 'Y', - 'ʐ' => 'z', - 'ʑ' => 'z', - 'ʙ' => 'B', - 'ʛ' => 'G', - 'ʜ' => 'H', - 'ʝ' => 'j', - 'ʟ' => 'L', - 'ʠ' => 'q', - 'ʣ' => 'dz', - 'ʥ' => 'dz', - 'ʦ' => 'ts', - 'ʪ' => 'ls', - 'ʫ' => 'lz', - 'ᴀ' => 'A', - 'ᴁ' => 'AE', - 'ᴃ' => 'B', - 'ᴄ' => 'C', - 'ᴅ' => 'D', - 'ᴆ' => 'D', - 'ᴇ' => 'E', - 'ᴊ' => 'J', - 'ᴋ' => 'K', - 'ᴌ' => 'L', - 'ᴍ' => 'M', - 'ᴏ' => 'O', - 'ᴘ' => 'P', - 'ᴛ' => 'T', - 'ᴜ' => 'U', - 'ᴠ' => 'V', - 'ᴡ' => 'W', - 'ᴢ' => 'Z', - 'ᵫ' => 'ue', - 'ᵬ' => 'b', - 'ᵭ' => 'd', - 'ᵮ' => 'f', - 'ᵯ' => 'm', - 'ᵰ' => 'n', - 'ᵱ' => 'p', - 'ᵲ' => 'r', - 'ᵳ' => 'r', - 'ᵴ' => 's', - 'ᵵ' => 't', - 'ᵶ' => 'z', - 'ᵺ' => 'th', - 'ᵻ' => 'I', - 'ᵽ' => 'p', - 'ᵾ' => 'U', - 'ᶀ' => 'b', - 'ᶁ' => 'd', - 'ᶂ' => 'f', - 'ᶃ' => 'g', - 'ᶄ' => 'k', - 'ᶅ' => 'l', - 'ᶆ' => 'm', - 'ᶇ' => 'n', - 'ᶈ' => 'p', - 'ᶉ' => 'r', - 'ᶊ' => 's', - 'ᶌ' => 'v', - 'ᶍ' => 'x', - 'ᶎ' => 'z', - 'ᶏ' => 'a', - 'ᶑ' => 'd', - 'ᶒ' => 'e', - 'ᶓ' => 'e', - 'ᶖ' => 'i', - 'ᶙ' => 'u', - 'ẜ' => 's', - 'ẝ' => 's', - 'ẞ' => 'SS', - 'Ỻ' => 'LL', - 'ỻ' => 'll', - 'Ỽ' => 'V', - 'ỽ' => 'v', - 'Ỿ' => 'Y', - 'ỿ' => 'y', - 'Ⱡ' => 'L', - 'ⱡ' => 'l', - 'Ɫ' => 'L', - 'Ᵽ' => 'P', - 'Ɽ' => 'R', - 'ⱥ' => 'a', - 'ⱦ' => 't', - 'Ⱨ' => 'H', - 'ⱨ' => 'h', - 'Ⱪ' => 'K', - 'ⱪ' => 'k', - 'Ⱬ' => 'Z', - 'ⱬ' => 'z', - 'Ɱ' => 'M', - 'ⱱ' => 'v', - 'Ⱳ' => 'W', - 'ⱳ' => 'w', - 'ⱴ' => 'v', - 'ⱸ' => 'e', - 'ⱺ' => 'o', - 'Ȿ' => 'S', - 'Ɀ' => 'Z', - 'ꜰ' => 'F', - 'ꜱ' => 'S', - 'Ꜳ' => 'AA', - 'ꜳ' => 'aa', - 'Ꜵ' => 'AO', - 'ꜵ' => 'ao', - 'Ꜷ' => 'AU', - 'ꜷ' => 'au', - 'Ꜹ' => 'AV', - 'ꜹ' => 'av', - 'Ꜻ' => 'AV', - 'ꜻ' => 'av', - 'Ꜽ' => 'AY', - 'ꜽ' => 'ay', - 'Ꝁ' => 'K', - 'ꝁ' => 'k', - 'Ꝃ' => 'K', - 'ꝃ' => 'k', - 'Ꝅ' => 'K', - 'ꝅ' => 'k', - 'Ꝇ' => 'L', - 'ꝇ' => 'l', - 'Ꝉ' => 'L', - 'ꝉ' => 'l', - 'Ꝋ' => 'O', - 'ꝋ' => 'o', - 'Ꝍ' => 'O', - 'ꝍ' => 'o', - 'Ꝏ' => 'OO', - 'ꝏ' => 'oo', - 'Ꝑ' => 'P', - 'ꝑ' => 'p', - 'Ꝓ' => 'P', - 'ꝓ' => 'p', - 'Ꝕ' => 'P', - 'ꝕ' => 'p', - 'Ꝗ' => 'Q', - 'ꝗ' => 'q', - 'Ꝙ' => 'Q', - 'ꝙ' => 'q', - 'Ꝟ' => 'V', - 'ꝟ' => 'v', - 'Ꝡ' => 'VY', - 'ꝡ' => 'vy', - 'Ꝥ' => 'TH', - 'ꝥ' => 'th', - 'Ꝧ' => 'TH', - 'ꝧ' => 'th', - 'ꝱ' => 'd', - 'ꝲ' => 'l', - 'ꝳ' => 'm', - 'ꝴ' => 'n', - 'ꝵ' => 'r', - 'ꝶ' => 'R', - 'ꝷ' => 't', - 'Ꝺ' => 'D', - 'ꝺ' => 'd', - 'Ꝼ' => 'F', - 'ꝼ' => 'f', - 'Ꞇ' => 'T', - 'ꞇ' => 't', - 'Ꞑ' => 'N', - 'ꞑ' => 'n', - 'Ꞓ' => 'C', - 'ꞓ' => 'c', - 'Ꞡ' => 'G', - 'ꞡ' => 'g', - 'Ꞣ' => 'K', - 'ꞣ' => 'k', - 'Ꞥ' => 'N', - 'ꞥ' => 'n', - 'Ꞧ' => 'R', - 'ꞧ' => 'r', - 'Ꞩ' => 'S', - 'ꞩ' => 's', - 'Ɦ' => 'H', - '©' => '(C)', - '®' => '(R)', - '₠' => 'CE', - '₢' => 'Cr', - '₣' => 'Fr.', - '₤' => 'L.', - '₧' => 'Pts', - '₺' => 'TL', - '₹' => 'Rs', - '℗' => '(P)', - '℘' => 'P', - '℞' => 'Rx', - '〇' => '0', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - 'ʹ' => '\'', - 'ʺ' => '"', - 'ʻ' => '\'', - 'ʼ' => '\'', - 'ʽ' => '\'', - 'ˈ' => '\'', - 'ˋ' => '`', - '‘' => '\'', - '’' => '\'', - '‚' => ',', - '‛' => '\'', - '“' => '"', - '”' => '"', - '„' => ',,', - '‟' => '"', - '′' => '\'', - '〝' => '"', - '〞' => '"', - '«' => '<<', - '»' => '>>', - '‹' => '<', - '›' => '>', - '­' => '-', - '‐' => '-', - '‑' => '-', - '‒' => '-', - '–' => '-', - '—' => '-', - '―' => '-', - '︱' => '-', - '︲' => '-', - '˂' => '<', - '˃' => '>', - '˄' => '^', - 'ˆ' => '^', - 'ː' => ':', - '˜' => '~', - '‖' => '||', - '⁄' => '/', - '⁅' => '[', - '⁆' => ']', - '⁎' => '*', - '、' => ',', - '。' => '.', - '〈' => '<', - '〉' => '>', - '《' => '<<', - '》' => '>>', - '〔' => '[', - '〕' => ']', - '〘' => '[', - '〙' => ']', - '〚' => '[', - '〛' => ']', - '︐' => ',', - '︑' => ',', - '︒' => '.', - '︓' => ':', - '︔' => ';', - '︕' => '!', - '︖' => '?', - '︙' => '...', - '︰' => '..', - '︵' => '(', - '︶' => ')', - '︷' => '{', - '︸' => '}', - '︹' => '[', - '︺' => ']', - '︽' => '<<', - '︾' => '>>', - '︿' => '<', - '﹀' => '>', - '﹇' => '[', - '﹈' => ']', - '×' => '*', - '÷' => '/', - '˖' => '+', - '˗' => '-', - '−' => '-', - '∕' => '/', - '∖' => '\\', - '∣' => '|', - '∥' => '||', - '≪' => '<<', - '≫' => '>>', - '⦅' => '((', - '⦆' => '))', -); - -$result =& $data; -unset($data); - -return $result; diff --git a/lib/vendor/symfony/polyfill-iconv/bootstrap.php b/lib/vendor/symfony/polyfill-iconv/bootstrap.php deleted file mode 100644 index 14b5003..0000000 --- a/lib/vendor/symfony/polyfill-iconv/bootstrap.php +++ /dev/null @@ -1,84 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Iconv as p; - -if (extension_loaded('iconv')) { - return; -} - -if (!defined('ICONV_IMPL')) { - define('ICONV_IMPL', 'Symfony'); -} -if (!defined('ICONV_VERSION')) { - define('ICONV_VERSION', '1.0'); -} -if (!defined('ICONV_MIME_DECODE_STRICT')) { - define('ICONV_MIME_DECODE_STRICT', 1); -} -if (!defined('ICONV_MIME_DECODE_CONTINUE_ON_ERROR')) { - define('ICONV_MIME_DECODE_CONTINUE_ON_ERROR', 2); -} - -if (!function_exists('iconv')) { - function iconv($from, $to, $s) { return p\Iconv::iconv($from, $to, $s); } -} -if (!function_exists('iconv_get_encoding')) { - function iconv_get_encoding($type = 'all') { return p\Iconv::iconv_get_encoding($type); } -} -if (!function_exists('iconv_set_encoding')) { - function iconv_set_encoding($type, $charset) { return p\Iconv::iconv_set_encoding($type, $charset); } -} -if (!function_exists('iconv_mime_encode')) { - function iconv_mime_encode($name, $value, $pref = null) { return p\Iconv::iconv_mime_encode($name, $value, $pref); } -} -if (!function_exists('iconv_mime_decode_headers')) { - function iconv_mime_decode_headers($encodedHeaders, $mode = 0, $enc = null) { return p\Iconv::iconv_mime_decode_headers($encodedHeaders, $mode, $enc); } -} - -if (extension_loaded('mbstring')) { - if (!function_exists('iconv_strlen')) { - function iconv_strlen($s, $enc = null) { null === $enc and $enc = p\Iconv::$internalEncoding; return mb_strlen($s, $enc); } - } - if (!function_exists('iconv_strpos')) { - function iconv_strpos($s, $needle, $offset = 0, $enc = null) { null === $enc and $enc = p\Iconv::$internalEncoding; return mb_strpos($s, $needle, $offset, $enc); } - } - if (!function_exists('iconv_strrpos')) { - function iconv_strrpos($s, $needle, $enc = null) { null === $enc and $enc = p\Iconv::$internalEncoding; return mb_strrpos($s, $needle, 0, $enc); } - } - if (!function_exists('iconv_substr')) { - function iconv_substr($s, $start, $length = 2147483647, $enc = null) { null === $enc and $enc = p\Iconv::$internalEncoding; return mb_substr($s, $start, $length, $enc); } - } - if (!function_exists('iconv_mime_decode')) { - function iconv_mime_decode($encodedHeaders, $mode = 0, $enc = null) { null === $enc and $enc = p\Iconv::$internalEncoding; return mb_decode_mimeheader($encodedHeaders, $mode, $enc); } - } -} else { - if (!function_exists('iconv_strlen')) { - if (extension_loaded('xml')) { - function iconv_strlen($s, $enc = null) { return p\Iconv::strlen1($s, $enc); } - } else { - function iconv_strlen($s, $enc = null) { return p\Iconv::strlen2($s, $enc); } - } - } - - if (!function_exists('iconv_strpos')) { - function iconv_strpos($s, $needle, $offset = 0, $enc = null) { return p\Iconv::iconv_strpos($s, $needle, $offset, $enc); } - } - if (!function_exists('iconv_strrpos')) { - function iconv_strrpos($s, $needle, $enc = null) { return p\Iconv::iconv_strrpos($s, $needle, $enc); } - } - if (!function_exists('iconv_substr')) { - function iconv_substr($s, $start, $length = 2147483647, $enc = null) { return p\Iconv::iconv_substr($s, $start, $length, $enc); } - } - if (!function_exists('iconv_mime_decode')) { - function iconv_mime_decode($encodedHeaders, $mode = 0, $enc = null) { return p\Iconv::iconv_mime_decode($encodedHeaders, $mode, $enc); } - } -} diff --git a/lib/vendor/symfony/polyfill-iconv/composer.json b/lib/vendor/symfony/polyfill-iconv/composer.json deleted file mode 100644 index 3df179e..0000000 --- a/lib/vendor/symfony/polyfill-iconv/composer.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "symfony/polyfill-iconv", - "type": "library", - "description": "Symfony polyfill for the Iconv extension", - "keywords": ["polyfill", "shim", "compatibility", "portable", "iconv"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=5.3.3" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Iconv\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - } -} diff --git a/lib/vendor/symfony/polyfill-intl-idn/Idn.php b/lib/vendor/symfony/polyfill-intl-idn/Idn.php deleted file mode 100644 index f54ffd5..0000000 --- a/lib/vendor/symfony/polyfill-intl-idn/Idn.php +++ /dev/null @@ -1,287 +0,0 @@ - - * @author Sebastian Kroczek - * @author Dmitry Lukashin - * @author Laurent Bassin - * - * @internal - */ -final class Idn -{ - const INTL_IDNA_VARIANT_2003 = 0; - const INTL_IDNA_VARIANT_UTS46 = 1; - - private static $encodeTable = array( - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', - 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', - 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - ); - - private static $decodeTable = array( - 'a' => 0, 'b' => 1, 'c' => 2, 'd' => 3, 'e' => 4, 'f' => 5, - 'g' => 6, 'h' => 7, 'i' => 8, 'j' => 9, 'k' => 10, 'l' => 11, - 'm' => 12, 'n' => 13, 'o' => 14, 'p' => 15, 'q' => 16, 'r' => 17, - 's' => 18, 't' => 19, 'u' => 20, 'v' => 21, 'w' => 22, 'x' => 23, - 'y' => 24, 'z' => 25, '0' => 26, '1' => 27, '2' => 28, '3' => 29, - '4' => 30, '5' => 31, '6' => 32, '7' => 33, '8' => 34, '9' => 35, - ); - - public static function idn_to_ascii($domain, $options, $variant, &$idna_info = array()) - { - if (\PHP_VERSION_ID >= 70200 && self::INTL_IDNA_VARIANT_2003 === $variant) { - @trigger_error('idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated', E_USER_DEPRECATED); - } - - if (self::INTL_IDNA_VARIANT_UTS46 === $variant) { - $domain = mb_strtolower($domain, 'utf-8'); - } - - $parts = explode('.', $domain); - - foreach ($parts as $i => &$part) { - if ('' === $part && \count($parts) > 1 + $i) { - return false; - } - if (false === $part = self::encodePart($part)) { - return false; - } - } - - $output = implode('.', $parts); - - $idna_info = array( - 'result' => \strlen($output) > 255 ? false : $output, - 'isTransitionalDifferent' => false, - 'errors' => 0, - ); - - return $idna_info['result']; - } - - public static function idn_to_utf8($domain, $options, $variant, &$idna_info = array()) - { - if (\PHP_VERSION_ID >= 70200 && self::INTL_IDNA_VARIANT_2003 === $variant) { - @trigger_error('idn_to_utf8(): INTL_IDNA_VARIANT_2003 is deprecated', E_USER_DEPRECATED); - } - - $parts = explode('.', $domain); - - foreach ($parts as &$part) { - $length = \strlen($part); - if ($length < 1 || 63 < $length) { - continue; - } - if (0 !== strpos($part, 'xn--')) { - continue; - } - - $part = substr($part, 4); - $part = self::decodePart($part); - } - - $output = implode('.', $parts); - - $idna_info = array( - 'result' => \strlen($output) > 255 ? false : $output, - 'isTransitionalDifferent' => false, - 'errors' => 0, - ); - - return $idna_info['result']; - } - - private static function encodePart($input) - { - if (\substr($input, 0, 1) === '-' || \substr($input, -1) === '-') { - return false; - } - - $codePoints = self::listCodePoints($input); - - $n = 128; - $bias = 72; - $delta = 0; - $h = $b = \count($codePoints['basic']); - - $output = ''; - foreach ($codePoints['basic'] as $code) { - $output .= mb_chr($code, 'utf-8'); - } - if ($input === $output) { - return $output; - } - if ($b > 0) { - $output .= '-'; - } - - $codePoints['nonBasic'] = array_unique($codePoints['nonBasic']); - sort($codePoints['nonBasic']); - - $i = 0; - $length = mb_strlen($input, 'utf-8'); - while ($h < $length) { - $m = $codePoints['nonBasic'][$i++]; - $delta += ($m - $n) * ($h + 1); - $n = $m; - - foreach ($codePoints['all'] as $c) { - if ($c < $n || $c < 128) { - ++$delta; - } - if ($c === $n) { - $q = $delta; - for ($k = 36;; $k += 36) { - $t = self::calculateThreshold($k, $bias); - if ($q < $t) { - break; - } - - $code = $t + (($q - $t) % (36 - $t)); - $output .= self::$encodeTable[$code]; - - $q = ($q - $t) / (36 - $t); - } - - $output .= self::$encodeTable[$q]; - $bias = self::adapt($delta, $h + 1, ($h === $b)); - $delta = 0; - ++$h; - } - } - - ++$delta; - ++$n; - } - - $output = 'xn--'.$output; - - return \strlen($output) < 1 || 63 < \strlen($output) ? false : strtolower($output); - } - - private static function listCodePoints($input) - { - $codePoints = array( - 'all' => array(), - 'basic' => array(), - 'nonBasic' => array(), - ); - - $length = mb_strlen($input, 'utf-8'); - for ($i = 0; $i < $length; ++$i) { - $char = mb_substr($input, $i, 1, 'utf-8'); - $code = mb_ord($char, 'utf-8'); - if ($code < 128) { - $codePoints['all'][] = $codePoints['basic'][] = $code; - } else { - $codePoints['all'][] = $codePoints['nonBasic'][] = $code; - } - } - - return $codePoints; - } - - private static function calculateThreshold($k, $bias) - { - if ($k <= $bias + 1) { - return 1; - } - if ($k >= $bias + 26) { - return 26; - } - - return $k - $bias; - } - - private static function adapt($delta, $numPoints, $firstTime) - { - $delta = (int) ($firstTime ? $delta / 700 : $delta / 2); - $delta += (int) ($delta / $numPoints); - - $k = 0; - while ($delta > 35 * 13) { - $delta = (int) ($delta / 35); - $k = $k + 36; - } - - return $k + (int) (36 * $delta / ($delta + 38)); - } - - private static function decodePart($input) - { - $n = 128; - $i = 0; - $bias = 72; - $output = ''; - - $pos = strrpos($input, '-'); - if (false !== $pos) { - $output = substr($input, 0, $pos++); - } else { - $pos = 0; - } - - $outputLength = \strlen($output); - $inputLength = \strlen($input); - - while ($pos < $inputLength) { - $oldi = $i; - $w = 1; - - for ($k = 36;; $k += 36) { - $digit = self::$decodeTable[$input[$pos++]]; - $i += $digit * $w; - $t = self::calculateThreshold($k, $bias); - - if ($digit < $t) { - break; - } - - $w *= 36 - $t; - } - - $bias = self::adapt($i - $oldi, ++$outputLength, 0 === $oldi); - $n = $n + (int) ($i / $outputLength); - $i = $i % $outputLength; - $output = mb_substr($output, 0, $i, 'utf-8').mb_chr($n, 'utf-8').mb_substr($output, $i, $outputLength - 1, 'utf-8'); - - ++$i; - } - - return $output; - } -} diff --git a/lib/vendor/symfony/polyfill-intl-idn/LICENSE b/lib/vendor/symfony/polyfill-intl-idn/LICENSE deleted file mode 100644 index 3f853aa..0000000 --- a/lib/vendor/symfony/polyfill-intl-idn/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2018-2019 Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/vendor/symfony/polyfill-intl-idn/README.md b/lib/vendor/symfony/polyfill-intl-idn/README.md deleted file mode 100644 index 2e75f2e..0000000 --- a/lib/vendor/symfony/polyfill-intl-idn/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Symfony Polyfill / Intl: Idn -============================ - -This component provides [`idn_to_ascii`](https://php.net/idn-to-ascii) and [`idn_to_utf8`](https://php.net/idn-to-utf8) functions to users who run php versions without the [Intl](https://php.net/intl) extension. - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/lib/vendor/symfony/polyfill-intl-idn/bootstrap.php b/lib/vendor/symfony/polyfill-intl-idn/bootstrap.php deleted file mode 100644 index f02d5de..0000000 --- a/lib/vendor/symfony/polyfill-intl-idn/bootstrap.php +++ /dev/null @@ -1,141 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Intl\Idn as p; - -if (extension_loaded('intl')) { - return; -} - -if (!defined('U_IDNA_PROHIBITED_ERROR')) { - define('U_IDNA_PROHIBITED_ERROR', 66560); -} -if (!defined('U_IDNA_ERROR_START')) { - define('U_IDNA_ERROR_START', 66560); -} -if (!defined('U_IDNA_UNASSIGNED_ERROR')) { - define('U_IDNA_UNASSIGNED_ERROR', 66561); -} -if (!defined('U_IDNA_CHECK_BIDI_ERROR')) { - define('U_IDNA_CHECK_BIDI_ERROR', 66562); -} -if (!defined('U_IDNA_STD3_ASCII_RULES_ERROR')) { - define('U_IDNA_STD3_ASCII_RULES_ERROR', 66563); -} -if (!defined('U_IDNA_ACE_PREFIX_ERROR')) { - define('U_IDNA_ACE_PREFIX_ERROR', 66564); -} -if (!defined('U_IDNA_VERIFICATION_ERROR')) { - define('U_IDNA_VERIFICATION_ERROR', 66565); -} -if (!defined('U_IDNA_LABEL_TOO_LONG_ERROR')) { - define('U_IDNA_LABEL_TOO_LONG_ERROR', 66566); -} -if (!defined('U_IDNA_ZERO_LENGTH_LABEL_ERROR')) { - define('U_IDNA_ZERO_LENGTH_LABEL_ERROR', 66567); -} -if (!defined('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR')) { - define('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR', 66568); -} -if (!defined('U_IDNA_ERROR_LIMIT')) { - define('U_IDNA_ERROR_LIMIT', 66569); -} -if (!defined('U_STRINGPREP_PROHIBITED_ERROR')) { - define('U_STRINGPREP_PROHIBITED_ERROR', 66560); -} -if (!defined('U_STRINGPREP_UNASSIGNED_ERROR')) { - define('U_STRINGPREP_UNASSIGNED_ERROR', 66561); -} -if (!defined('U_STRINGPREP_CHECK_BIDI_ERROR')) { - define('U_STRINGPREP_CHECK_BIDI_ERROR', 66562); -} -if (!defined('IDNA_DEFAULT')) { - define('IDNA_DEFAULT', 0); -} -if (!defined('IDNA_ALLOW_UNASSIGNED')) { - define('IDNA_ALLOW_UNASSIGNED', 1); -} -if (!defined('IDNA_USE_STD3_RULES')) { - define('IDNA_USE_STD3_RULES', 2); -} -if (!defined('IDNA_CHECK_BIDI')) { - define('IDNA_CHECK_BIDI', 4); -} -if (!defined('IDNA_CHECK_CONTEXTJ')) { - define('IDNA_CHECK_CONTEXTJ', 8); -} -if (!defined('IDNA_NONTRANSITIONAL_TO_ASCII')) { - define('IDNA_NONTRANSITIONAL_TO_ASCII', 16); -} -if (!defined('IDNA_NONTRANSITIONAL_TO_UNICODE')) { - define('IDNA_NONTRANSITIONAL_TO_UNICODE', 32); -} -if (!defined('INTL_IDNA_VARIANT_2003')) { - define('INTL_IDNA_VARIANT_2003', 0); -} -if (!defined('INTL_IDNA_VARIANT_UTS46')) { - define('INTL_IDNA_VARIANT_UTS46', 1); -} -if (!defined('IDNA_ERROR_EMPTY_LABEL')) { - define('IDNA_ERROR_EMPTY_LABEL', 1); -} -if (!defined('IDNA_ERROR_LABEL_TOO_LONG')) { - define('IDNA_ERROR_LABEL_TOO_LONG', 2); -} -if (!defined('IDNA_ERROR_DOMAIN_NAME_TOO_LONG')) { - define('IDNA_ERROR_DOMAIN_NAME_TOO_LONG', 4); -} -if (!defined('IDNA_ERROR_LEADING_HYPHEN')) { - define('IDNA_ERROR_LEADING_HYPHEN', 8); -} -if (!defined('IDNA_ERROR_TRAILING_HYPHEN')) { - define('IDNA_ERROR_TRAILING_HYPHEN', 16); -} -if (!defined('IDNA_ERROR_HYPHEN_3_4')) { - define('IDNA_ERROR_HYPHEN_3_4', 32); -} -if (!defined('IDNA_ERROR_LEADING_COMBINING_MARK')) { - define('IDNA_ERROR_LEADING_COMBINING_MARK', 64); -} -if (!defined('IDNA_ERROR_DISALLOWED')) { - define('IDNA_ERROR_DISALLOWED', 128); -} -if (!defined('IDNA_ERROR_PUNYCODE')) { - define('IDNA_ERROR_PUNYCODE', 256); -} -if (!defined('IDNA_ERROR_LABEL_HAS_DOT')) { - define('IDNA_ERROR_LABEL_HAS_DOT', 512); -} -if (!defined('IDNA_ERROR_INVALID_ACE_LABEL')) { - define('IDNA_ERROR_INVALID_ACE_LABEL', 1024); -} -if (!defined('IDNA_ERROR_BIDI')) { - define('IDNA_ERROR_BIDI', 2048); -} -if (!defined('IDNA_ERROR_CONTEXTJ')) { - define('IDNA_ERROR_CONTEXTJ', 4096); -} - -if (PHP_VERSION_ID < 70400) { - if (!function_exists('idn_to_ascii')) { - function idn_to_ascii($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_2003, &$idna_info = array()) { return p\Idn::idn_to_ascii($domain, $options, $variant, $idna_info); } - } - if (!function_exists('idn_to_utf8')) { - function idn_to_utf8($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_2003, &$idna_info = array()) { return p\Idn::idn_to_utf8($domain, $options, $variant, $idna_info); } - } -} else { - if (!function_exists('idn_to_ascii')) { - function idn_to_ascii($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = array()) { return p\Idn::idn_to_ascii($domain, $options, $variant, $idna_info); } - } - if (!function_exists('idn_to_utf8')) { - function idn_to_utf8($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = array()) { return p\Idn::idn_to_utf8($domain, $options, $variant, $idna_info); } - } -} diff --git a/lib/vendor/symfony/polyfill-intl-idn/composer.json b/lib/vendor/symfony/polyfill-intl-idn/composer.json deleted file mode 100644 index 550bdc2..0000000 --- a/lib/vendor/symfony/polyfill-intl-idn/composer.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "symfony/polyfill-intl-idn", - "type": "library", - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "keywords": ["polyfill", "shim", "compatibility", "portable", "intl", "idn"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-intl": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - } -} diff --git a/lib/vendor/symfony/polyfill-mbstring/LICENSE b/lib/vendor/symfony/polyfill-mbstring/LICENSE deleted file mode 100644 index 4cd8bdd..0000000 --- a/lib/vendor/symfony/polyfill-mbstring/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015-2019 Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/vendor/symfony/polyfill-mbstring/Mbstring.php b/lib/vendor/symfony/polyfill-mbstring/Mbstring.php deleted file mode 100644 index 15503bc..0000000 --- a/lib/vendor/symfony/polyfill-mbstring/Mbstring.php +++ /dev/null @@ -1,847 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Mbstring; - -/** - * Partial mbstring implementation in PHP, iconv based, UTF-8 centric. - * - * Implemented: - * - mb_chr - Returns a specific character from its Unicode code point - * - mb_convert_encoding - Convert character encoding - * - mb_convert_variables - Convert character code in variable(s) - * - mb_decode_mimeheader - Decode string in MIME header field - * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED - * - mb_decode_numericentity - Decode HTML numeric string reference to character - * - mb_encode_numericentity - Encode character to HTML numeric string reference - * - mb_convert_case - Perform case folding on a string - * - mb_detect_encoding - Detect character encoding - * - mb_get_info - Get internal settings of mbstring - * - mb_http_input - Detect HTTP input character encoding - * - mb_http_output - Set/Get HTTP output character encoding - * - mb_internal_encoding - Set/Get internal character encoding - * - mb_list_encodings - Returns an array of all supported encodings - * - mb_ord - Returns the Unicode code point of a character - * - mb_output_handler - Callback function converts character encoding in output buffer - * - mb_scrub - Replaces ill-formed byte sequences with substitute characters - * - mb_strlen - Get string length - * - mb_strpos - Find position of first occurrence of string in a string - * - mb_strrpos - Find position of last occurrence of a string in a string - * - mb_str_split - Convert a string to an array - * - mb_strtolower - Make a string lowercase - * - mb_strtoupper - Make a string uppercase - * - mb_substitute_character - Set/Get substitution character - * - mb_substr - Get part of string - * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive - * - mb_stristr - Finds first occurrence of a string within another, case insensitive - * - mb_strrchr - Finds the last occurrence of a character in a string within another - * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive - * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive - * - mb_strstr - Finds first occurrence of a string within another - * - mb_strwidth - Return width of string - * - mb_substr_count - Count the number of substring occurrences - * - * Not implemented: - * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) - * - mb_ereg_* - Regular expression with multibyte support - * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable - * - mb_preferred_mime_name - Get MIME charset string - * - mb_regex_encoding - Returns current encoding for multibyte regex as string - * - mb_regex_set_options - Set/Get the default options for mbregex functions - * - mb_send_mail - Send encoded mail - * - mb_split - Split multibyte string using regular expression - * - mb_strcut - Get part of string - * - mb_strimwidth - Get truncated string with specified width - * - * @author Nicolas Grekas - * - * @internal - */ -final class Mbstring -{ - const MB_CASE_FOLD = PHP_INT_MAX; - - private static $encodingList = array('ASCII', 'UTF-8'); - private static $language = 'neutral'; - private static $internalEncoding = 'UTF-8'; - private static $caseFold = array( - array('µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"), - array('μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'), - ); - - public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) - { - if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) { - $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); - } else { - $fromEncoding = self::getEncoding($fromEncoding); - } - - $toEncoding = self::getEncoding($toEncoding); - - if ('BASE64' === $fromEncoding) { - $s = base64_decode($s); - $fromEncoding = $toEncoding; - } - - if ('BASE64' === $toEncoding) { - return base64_encode($s); - } - - if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) { - if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) { - $fromEncoding = 'Windows-1252'; - } - if ('UTF-8' !== $fromEncoding) { - $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s); - } - - return preg_replace_callback('/[\x80-\xFF]+/', array(__CLASS__, 'html_encoding_callback'), $s); - } - - if ('HTML-ENTITIES' === $fromEncoding) { - $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8'); - $fromEncoding = 'UTF-8'; - } - - return iconv($fromEncoding, $toEncoding.'//IGNORE', $s); - } - - public static function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) - { - $vars = array(&$a, &$b, &$c, &$d, &$e, &$f); - - $ok = true; - array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) { - if (false === $v = Mbstring::mb_convert_encoding($v, $toEncoding, $fromEncoding)) { - $ok = false; - } - }); - - return $ok ? $fromEncoding : false; - } - - public static function mb_decode_mimeheader($s) - { - return iconv_mime_decode($s, 2, self::$internalEncoding); - } - - public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) - { - trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', E_USER_WARNING); - } - - public static function mb_decode_numericentity($s, $convmap, $encoding = null) - { - if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) { - trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING); - - return null; - } - - if (!\is_array($convmap) || !$convmap) { - return false; - } - - if (null !== $encoding && !\is_scalar($encoding)) { - trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING); - - return ''; // Instead of null (cf. mb_encode_numericentity). - } - - $s = (string) $s; - if ('' === $s) { - return ''; - } - - $encoding = self::getEncoding($encoding); - - if ('UTF-8' === $encoding) { - $encoding = null; - if (!preg_match('//u', $s)) { - $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); - } - } else { - $s = iconv($encoding, 'UTF-8//IGNORE', $s); - } - - $cnt = floor(\count($convmap) / 4) * 4; - - for ($i = 0; $i < $cnt; $i += 4) { - // collector_decode_htmlnumericentity ignores $convmap[$i + 3] - $convmap[$i] += $convmap[$i + 2]; - $convmap[$i + 1] += $convmap[$i + 2]; - } - - $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) { - $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; - for ($i = 0; $i < $cnt; $i += 4) { - if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { - return Mbstring::mb_chr($c - $convmap[$i + 2]); - } - } - - return $m[0]; - }, $s); - - if (null === $encoding) { - return $s; - } - - return iconv('UTF-8', $encoding.'//IGNORE', $s); - } - - public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) - { - if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) { - trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING); - - return null; - } - - if (!\is_array($convmap) || !$convmap) { - return false; - } - - if (null !== $encoding && !\is_scalar($encoding)) { - trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING); - - return null; // Instead of '' (cf. mb_decode_numericentity). - } - - if (null !== $is_hex && !\is_scalar($is_hex)) { - trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', E_USER_WARNING); - - return null; - } - - $s = (string) $s; - if ('' === $s) { - return ''; - } - - $encoding = self::getEncoding($encoding); - - if ('UTF-8' === $encoding) { - $encoding = null; - if (!preg_match('//u', $s)) { - $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); - } - } else { - $s = iconv($encoding, 'UTF-8//IGNORE', $s); - } - - static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); - - $cnt = floor(\count($convmap) / 4) * 4; - $i = 0; - $len = \strlen($s); - $result = ''; - - while ($i < $len) { - $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; - $uchr = substr($s, $i, $ulen); - $i += $ulen; - $c = self::mb_ord($uchr); - - for ($j = 0; $j < $cnt; $j += 4) { - if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { - $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; - $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; - continue 2; - } - } - $result .= $uchr; - } - - if (null === $encoding) { - return $result; - } - - return iconv('UTF-8', $encoding.'//IGNORE', $result); - } - - public static function mb_convert_case($s, $mode, $encoding = null) - { - $s = (string) $s; - if ('' === $s) { - return ''; - } - - $encoding = self::getEncoding($encoding); - - if ('UTF-8' === $encoding) { - $encoding = null; - if (!preg_match('//u', $s)) { - $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); - } - } else { - $s = iconv($encoding, 'UTF-8//IGNORE', $s); - } - - if (MB_CASE_TITLE == $mode) { - static $titleRegexp = null; - if (null === $titleRegexp) { - $titleRegexp = self::getData('titleCaseRegexp'); - } - $s = preg_replace_callback($titleRegexp, array(__CLASS__, 'title_case'), $s); - } else { - if (MB_CASE_UPPER == $mode) { - static $upper = null; - if (null === $upper) { - $upper = self::getData('upperCase'); - } - $map = $upper; - } else { - if (self::MB_CASE_FOLD === $mode) { - $s = str_replace(self::$caseFold[0], self::$caseFold[1], $s); - } - - static $lower = null; - if (null === $lower) { - $lower = self::getData('lowerCase'); - } - $map = $lower; - } - - static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); - - $i = 0; - $len = \strlen($s); - - while ($i < $len) { - $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; - $uchr = substr($s, $i, $ulen); - $i += $ulen; - - if (isset($map[$uchr])) { - $uchr = $map[$uchr]; - $nlen = \strlen($uchr); - - if ($nlen == $ulen) { - $nlen = $i; - do { - $s[--$nlen] = $uchr[--$ulen]; - } while ($ulen); - } else { - $s = substr_replace($s, $uchr, $i - $ulen, $ulen); - $len += $nlen - $ulen; - $i += $nlen - $ulen; - } - } - } - } - - if (null === $encoding) { - return $s; - } - - return iconv('UTF-8', $encoding.'//IGNORE', $s); - } - - public static function mb_internal_encoding($encoding = null) - { - if (null === $encoding) { - return self::$internalEncoding; - } - - $encoding = self::getEncoding($encoding); - - if ('UTF-8' === $encoding || false !== @iconv($encoding, $encoding, ' ')) { - self::$internalEncoding = $encoding; - - return true; - } - - return false; - } - - public static function mb_language($lang = null) - { - if (null === $lang) { - return self::$language; - } - - switch ($lang = strtolower($lang)) { - case 'uni': - case 'neutral': - self::$language = $lang; - - return true; - } - - return false; - } - - public static function mb_list_encodings() - { - return array('UTF-8'); - } - - public static function mb_encoding_aliases($encoding) - { - switch (strtoupper($encoding)) { - case 'UTF8': - case 'UTF-8': - return array('utf8'); - } - - return false; - } - - public static function mb_check_encoding($var = null, $encoding = null) - { - if (null === $encoding) { - if (null === $var) { - return false; - } - $encoding = self::$internalEncoding; - } - - return self::mb_detect_encoding($var, array($encoding)) || false !== @iconv($encoding, $encoding, $var); - } - - public static function mb_detect_encoding($str, $encodingList = null, $strict = false) - { - if (null === $encodingList) { - $encodingList = self::$encodingList; - } else { - if (!\is_array($encodingList)) { - $encodingList = array_map('trim', explode(',', $encodingList)); - } - $encodingList = array_map('strtoupper', $encodingList); - } - - foreach ($encodingList as $enc) { - switch ($enc) { - case 'ASCII': - if (!preg_match('/[\x80-\xFF]/', $str)) { - return $enc; - } - break; - - case 'UTF8': - case 'UTF-8': - if (preg_match('//u', $str)) { - return 'UTF-8'; - } - break; - - default: - if (0 === strncmp($enc, 'ISO-8859-', 9)) { - return $enc; - } - } - } - - return false; - } - - public static function mb_detect_order($encodingList = null) - { - if (null === $encodingList) { - return self::$encodingList; - } - - if (!\is_array($encodingList)) { - $encodingList = array_map('trim', explode(',', $encodingList)); - } - $encodingList = array_map('strtoupper', $encodingList); - - foreach ($encodingList as $enc) { - switch ($enc) { - default: - if (strncmp($enc, 'ISO-8859-', 9)) { - return false; - } - // no break - case 'ASCII': - case 'UTF8': - case 'UTF-8': - } - } - - self::$encodingList = $encodingList; - - return true; - } - - public static function mb_strlen($s, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return \strlen($s); - } - - return @iconv_strlen($s, $encoding); - } - - public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return strpos($haystack, $needle, $offset); - } - - $needle = (string) $needle; - if ('' === $needle) { - trigger_error(__METHOD__.': Empty delimiter', E_USER_WARNING); - - return false; - } - - return iconv_strpos($haystack, $needle, $offset, $encoding); - } - - public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return strrpos($haystack, $needle, $offset); - } - - if ($offset != (int) $offset) { - $offset = 0; - } elseif ($offset = (int) $offset) { - if ($offset < 0) { - if (0 > $offset += self::mb_strlen($needle)) { - $haystack = self::mb_substr($haystack, 0, $offset, $encoding); - } - $offset = 0; - } else { - $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); - } - } - - $pos = iconv_strrpos($haystack, $needle, $encoding); - - return false !== $pos ? $offset + $pos : false; - } - - public static function mb_str_split($string, $split_length = 1, $encoding = null) - { - if (null !== $string && !\is_scalar($string) && !(\is_object($string) && \method_exists($string, '__toString'))) { - trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', E_USER_WARNING); - - return null; - } - - if (1 > $split_length = (int) $split_length) { - trigger_error('The length of each segment must be greater than zero', E_USER_WARNING); - - return false; - } - - if (null === $encoding) { - $encoding = mb_internal_encoding(); - } - - if ('UTF-8' === $encoding = self::getEncoding($encoding)) { - $rx = '/('; - while (65535 < $split_length) { - $rx .= '.{65535}'; - $split_length -= 65535; - } - $rx .= '.{'.$split_length.'})/us'; - - return preg_split($rx, $string, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - } - - $result = array(); - $length = mb_strlen($string, $encoding); - - for ($i = 0; $i < $length; $i += $split_length) { - $result[] = mb_substr($string, $i, $split_length, $encoding); - } - - return $result; - } - - public static function mb_strtolower($s, $encoding = null) - { - return self::mb_convert_case($s, MB_CASE_LOWER, $encoding); - } - - public static function mb_strtoupper($s, $encoding = null) - { - return self::mb_convert_case($s, MB_CASE_UPPER, $encoding); - } - - public static function mb_substitute_character($c = null) - { - if (0 === strcasecmp($c, 'none')) { - return true; - } - - return null !== $c ? false : 'none'; - } - - public static function mb_substr($s, $start, $length = null, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return (string) substr($s, $start, null === $length ? 2147483647 : $length); - } - - if ($start < 0) { - $start = iconv_strlen($s, $encoding) + $start; - if ($start < 0) { - $start = 0; - } - } - - if (null === $length) { - $length = 2147483647; - } elseif ($length < 0) { - $length = iconv_strlen($s, $encoding) + $length - $start; - if ($length < 0) { - return ''; - } - } - - return (string) iconv_substr($s, $start, $length, $encoding); - } - - public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) - { - $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); - $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); - - return self::mb_strpos($haystack, $needle, $offset, $encoding); - } - - public static function mb_stristr($haystack, $needle, $part = false, $encoding = null) - { - $pos = self::mb_stripos($haystack, $needle, 0, $encoding); - - return self::getSubpart($pos, $part, $haystack, $encoding); - } - - public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return strrchr($haystack, $needle, $part); - } - $needle = self::mb_substr($needle, 0, 1, $encoding); - $pos = iconv_strrpos($haystack, $needle, $encoding); - - return self::getSubpart($pos, $part, $haystack, $encoding); - } - - public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null) - { - $needle = self::mb_substr($needle, 0, 1, $encoding); - $pos = self::mb_strripos($haystack, $needle, $encoding); - - return self::getSubpart($pos, $part, $haystack, $encoding); - } - - public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) - { - $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); - $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); - - return self::mb_strrpos($haystack, $needle, $offset, $encoding); - } - - public static function mb_strstr($haystack, $needle, $part = false, $encoding = null) - { - $pos = strpos($haystack, $needle); - if (false === $pos) { - return false; - } - if ($part) { - return substr($haystack, 0, $pos); - } - - return substr($haystack, $pos); - } - - public static function mb_get_info($type = 'all') - { - $info = array( - 'internal_encoding' => self::$internalEncoding, - 'http_output' => 'pass', - 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)', - 'func_overload' => 0, - 'func_overload_list' => 'no overload', - 'mail_charset' => 'UTF-8', - 'mail_header_encoding' => 'BASE64', - 'mail_body_encoding' => 'BASE64', - 'illegal_chars' => 0, - 'encoding_translation' => 'Off', - 'language' => self::$language, - 'detect_order' => self::$encodingList, - 'substitute_character' => 'none', - 'strict_detection' => 'Off', - ); - - if ('all' === $type) { - return $info; - } - if (isset($info[$type])) { - return $info[$type]; - } - - return false; - } - - public static function mb_http_input($type = '') - { - return false; - } - - public static function mb_http_output($encoding = null) - { - return null !== $encoding ? 'pass' === $encoding : 'pass'; - } - - public static function mb_strwidth($s, $encoding = null) - { - $encoding = self::getEncoding($encoding); - - if ('UTF-8' !== $encoding) { - $s = iconv($encoding, 'UTF-8//IGNORE', $s); - } - - $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); - - return ($wide << 1) + iconv_strlen($s, 'UTF-8'); - } - - public static function mb_substr_count($haystack, $needle, $encoding = null) - { - return substr_count($haystack, $needle); - } - - public static function mb_output_handler($contents, $status) - { - return $contents; - } - - public static function mb_chr($code, $encoding = null) - { - if (0x80 > $code %= 0x200000) { - $s = \chr($code); - } elseif (0x800 > $code) { - $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); - } elseif (0x10000 > $code) { - $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); - } else { - $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); - } - - if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { - $s = mb_convert_encoding($s, $encoding, 'UTF-8'); - } - - return $s; - } - - public static function mb_ord($s, $encoding = null) - { - if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { - $s = mb_convert_encoding($s, 'UTF-8', $encoding); - } - - if (1 === \strlen($s)) { - return \ord($s); - } - - $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; - if (0xF0 <= $code) { - return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; - } - if (0xE0 <= $code) { - return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; - } - if (0xC0 <= $code) { - return (($code - 0xC0) << 6) + $s[2] - 0x80; - } - - return $code; - } - - private static function getSubpart($pos, $part, $haystack, $encoding) - { - if (false === $pos) { - return false; - } - if ($part) { - return self::mb_substr($haystack, 0, $pos, $encoding); - } - - return self::mb_substr($haystack, $pos, null, $encoding); - } - - private static function html_encoding_callback(array $m) - { - $i = 1; - $entities = ''; - $m = unpack('C*', htmlentities($m[0], ENT_COMPAT, 'UTF-8')); - - while (isset($m[$i])) { - if (0x80 > $m[$i]) { - $entities .= \chr($m[$i++]); - continue; - } - if (0xF0 <= $m[$i]) { - $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; - } elseif (0xE0 <= $m[$i]) { - $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; - } else { - $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80; - } - - $entities .= '&#'.$c.';'; - } - - return $entities; - } - - private static function title_case(array $s) - { - return self::mb_convert_case($s[1], MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], MB_CASE_LOWER, 'UTF-8'); - } - - private static function getData($file) - { - if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { - return require $file; - } - - return false; - } - - private static function getEncoding($encoding) - { - if (null === $encoding) { - return self::$internalEncoding; - } - - if ('UTF-8' === $encoding) { - return 'UTF-8'; - } - - $encoding = strtoupper($encoding); - - if ('8BIT' === $encoding || 'BINARY' === $encoding) { - return 'CP850'; - } - - if ('UTF8' === $encoding) { - return 'UTF-8'; - } - - return $encoding; - } -} diff --git a/lib/vendor/symfony/polyfill-mbstring/README.md b/lib/vendor/symfony/polyfill-mbstring/README.md deleted file mode 100644 index 4efb599..0000000 --- a/lib/vendor/symfony/polyfill-mbstring/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Symfony Polyfill / Mbstring -=========================== - -This component provides a partial, native PHP implementation for the -[Mbstring](https://php.net/mbstring) extension. - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php deleted file mode 100644 index e6fbfa6..0000000 --- a/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +++ /dev/null @@ -1,1096 +0,0 @@ - 'a', - 'B' => 'b', - 'C' => 'c', - 'D' => 'd', - 'E' => 'e', - 'F' => 'f', - 'G' => 'g', - 'H' => 'h', - 'I' => 'i', - 'J' => 'j', - 'K' => 'k', - 'L' => 'l', - 'M' => 'm', - 'N' => 'n', - 'O' => 'o', - 'P' => 'p', - 'Q' => 'q', - 'R' => 'r', - 'S' => 's', - 'T' => 't', - 'U' => 'u', - 'V' => 'v', - 'W' => 'w', - 'X' => 'x', - 'Y' => 'y', - 'Z' => 'z', - 'À' => 'à', - 'Á' => 'á', - 'Â' => 'â', - 'Ã' => 'ã', - 'Ä' => 'ä', - 'Å' => 'å', - 'Æ' => 'æ', - 'Ç' => 'ç', - 'È' => 'è', - 'É' => 'é', - 'Ê' => 'ê', - 'Ë' => 'ë', - 'Ì' => 'ì', - 'Í' => 'í', - 'Î' => 'î', - 'Ï' => 'ï', - 'Ð' => 'ð', - 'Ñ' => 'ñ', - 'Ò' => 'ò', - 'Ó' => 'ó', - 'Ô' => 'ô', - 'Õ' => 'õ', - 'Ö' => 'ö', - 'Ø' => 'ø', - 'Ù' => 'ù', - 'Ú' => 'ú', - 'Û' => 'û', - 'Ü' => 'ü', - 'Ý' => 'ý', - 'Þ' => 'þ', - 'Ā' => 'ā', - 'Ă' => 'ă', - 'Ą' => 'ą', - 'Ć' => 'ć', - 'Ĉ' => 'ĉ', - 'Ċ' => 'ċ', - 'Č' => 'č', - 'Ď' => 'ď', - 'Đ' => 'đ', - 'Ē' => 'ē', - 'Ĕ' => 'ĕ', - 'Ė' => 'ė', - 'Ę' => 'ę', - 'Ě' => 'ě', - 'Ĝ' => 'ĝ', - 'Ğ' => 'ğ', - 'Ġ' => 'ġ', - 'Ģ' => 'ģ', - 'Ĥ' => 'ĥ', - 'Ħ' => 'ħ', - 'Ĩ' => 'ĩ', - 'Ī' => 'ī', - 'Ĭ' => 'ĭ', - 'Į' => 'į', - 'İ' => 'i', - 'IJ' => 'ij', - 'Ĵ' => 'ĵ', - 'Ķ' => 'ķ', - 'Ĺ' => 'ĺ', - 'Ļ' => 'ļ', - 'Ľ' => 'ľ', - 'Ŀ' => 'ŀ', - 'Ł' => 'ł', - 'Ń' => 'ń', - 'Ņ' => 'ņ', - 'Ň' => 'ň', - 'Ŋ' => 'ŋ', - 'Ō' => 'ō', - 'Ŏ' => 'ŏ', - 'Ő' => 'ő', - 'Œ' => 'œ', - 'Ŕ' => 'ŕ', - 'Ŗ' => 'ŗ', - 'Ř' => 'ř', - 'Ś' => 'ś', - 'Ŝ' => 'ŝ', - 'Ş' => 'ş', - 'Š' => 'š', - 'Ţ' => 'ţ', - 'Ť' => 'ť', - 'Ŧ' => 'ŧ', - 'Ũ' => 'ũ', - 'Ū' => 'ū', - 'Ŭ' => 'ŭ', - 'Ů' => 'ů', - 'Ű' => 'ű', - 'Ų' => 'ų', - 'Ŵ' => 'ŵ', - 'Ŷ' => 'ŷ', - 'Ÿ' => 'ÿ', - 'Ź' => 'ź', - 'Ż' => 'ż', - 'Ž' => 'ž', - 'Ɓ' => 'ɓ', - 'Ƃ' => 'ƃ', - 'Ƅ' => 'ƅ', - 'Ɔ' => 'ɔ', - 'Ƈ' => 'ƈ', - 'Ɖ' => 'ɖ', - 'Ɗ' => 'ɗ', - 'Ƌ' => 'ƌ', - 'Ǝ' => 'ǝ', - 'Ə' => 'ə', - 'Ɛ' => 'ɛ', - 'Ƒ' => 'ƒ', - 'Ɠ' => 'ɠ', - 'Ɣ' => 'ɣ', - 'Ɩ' => 'ɩ', - 'Ɨ' => 'ɨ', - 'Ƙ' => 'ƙ', - 'Ɯ' => 'ɯ', - 'Ɲ' => 'ɲ', - 'Ɵ' => 'ɵ', - 'Ơ' => 'ơ', - 'Ƣ' => 'ƣ', - 'Ƥ' => 'ƥ', - 'Ʀ' => 'ʀ', - 'Ƨ' => 'ƨ', - 'Ʃ' => 'ʃ', - 'Ƭ' => 'ƭ', - 'Ʈ' => 'ʈ', - 'Ư' => 'ư', - 'Ʊ' => 'ʊ', - 'Ʋ' => 'ʋ', - 'Ƴ' => 'ƴ', - 'Ƶ' => 'ƶ', - 'Ʒ' => 'ʒ', - 'Ƹ' => 'ƹ', - 'Ƽ' => 'ƽ', - 'DŽ' => 'dž', - 'Dž' => 'dž', - 'LJ' => 'lj', - 'Lj' => 'lj', - 'NJ' => 'nj', - 'Nj' => 'nj', - 'Ǎ' => 'ǎ', - 'Ǐ' => 'ǐ', - 'Ǒ' => 'ǒ', - 'Ǔ' => 'ǔ', - 'Ǖ' => 'ǖ', - 'Ǘ' => 'ǘ', - 'Ǚ' => 'ǚ', - 'Ǜ' => 'ǜ', - 'Ǟ' => 'ǟ', - 'Ǡ' => 'ǡ', - 'Ǣ' => 'ǣ', - 'Ǥ' => 'ǥ', - 'Ǧ' => 'ǧ', - 'Ǩ' => 'ǩ', - 'Ǫ' => 'ǫ', - 'Ǭ' => 'ǭ', - 'Ǯ' => 'ǯ', - 'DZ' => 'dz', - 'Dz' => 'dz', - 'Ǵ' => 'ǵ', - 'Ƕ' => 'ƕ', - 'Ƿ' => 'ƿ', - 'Ǹ' => 'ǹ', - 'Ǻ' => 'ǻ', - 'Ǽ' => 'ǽ', - 'Ǿ' => 'ǿ', - 'Ȁ' => 'ȁ', - 'Ȃ' => 'ȃ', - 'Ȅ' => 'ȅ', - 'Ȇ' => 'ȇ', - 'Ȉ' => 'ȉ', - 'Ȋ' => 'ȋ', - 'Ȍ' => 'ȍ', - 'Ȏ' => 'ȏ', - 'Ȑ' => 'ȑ', - 'Ȓ' => 'ȓ', - 'Ȕ' => 'ȕ', - 'Ȗ' => 'ȗ', - 'Ș' => 'ș', - 'Ț' => 'ț', - 'Ȝ' => 'ȝ', - 'Ȟ' => 'ȟ', - 'Ƞ' => 'ƞ', - 'Ȣ' => 'ȣ', - 'Ȥ' => 'ȥ', - 'Ȧ' => 'ȧ', - 'Ȩ' => 'ȩ', - 'Ȫ' => 'ȫ', - 'Ȭ' => 'ȭ', - 'Ȯ' => 'ȯ', - 'Ȱ' => 'ȱ', - 'Ȳ' => 'ȳ', - 'Ⱥ' => 'ⱥ', - 'Ȼ' => 'ȼ', - 'Ƚ' => 'ƚ', - 'Ⱦ' => 'ⱦ', - 'Ɂ' => 'ɂ', - 'Ƀ' => 'ƀ', - 'Ʉ' => 'ʉ', - 'Ʌ' => 'ʌ', - 'Ɇ' => 'ɇ', - 'Ɉ' => 'ɉ', - 'Ɋ' => 'ɋ', - 'Ɍ' => 'ɍ', - 'Ɏ' => 'ɏ', - 'Ͱ' => 'ͱ', - 'Ͳ' => 'ͳ', - 'Ͷ' => 'ͷ', - 'Ϳ' => 'ϳ', - 'Ά' => 'ά', - 'Έ' => 'έ', - 'Ή' => 'ή', - 'Ί' => 'ί', - 'Ό' => 'ό', - 'Ύ' => 'ύ', - 'Ώ' => 'ώ', - 'Α' => 'α', - 'Β' => 'β', - 'Γ' => 'γ', - 'Δ' => 'δ', - 'Ε' => 'ε', - 'Ζ' => 'ζ', - 'Η' => 'η', - 'Θ' => 'θ', - 'Ι' => 'ι', - 'Κ' => 'κ', - 'Λ' => 'λ', - 'Μ' => 'μ', - 'Ν' => 'ν', - 'Ξ' => 'ξ', - 'Ο' => 'ο', - 'Π' => 'π', - 'Ρ' => 'ρ', - 'Σ' => 'σ', - 'Τ' => 'τ', - 'Υ' => 'υ', - 'Φ' => 'φ', - 'Χ' => 'χ', - 'Ψ' => 'ψ', - 'Ω' => 'ω', - 'Ϊ' => 'ϊ', - 'Ϋ' => 'ϋ', - 'Ϗ' => 'ϗ', - 'Ϙ' => 'ϙ', - 'Ϛ' => 'ϛ', - 'Ϝ' => 'ϝ', - 'Ϟ' => 'ϟ', - 'Ϡ' => 'ϡ', - 'Ϣ' => 'ϣ', - 'Ϥ' => 'ϥ', - 'Ϧ' => 'ϧ', - 'Ϩ' => 'ϩ', - 'Ϫ' => 'ϫ', - 'Ϭ' => 'ϭ', - 'Ϯ' => 'ϯ', - 'ϴ' => 'θ', - 'Ϸ' => 'ϸ', - 'Ϲ' => 'ϲ', - 'Ϻ' => 'ϻ', - 'Ͻ' => 'ͻ', - 'Ͼ' => 'ͼ', - 'Ͽ' => 'ͽ', - 'Ѐ' => 'ѐ', - 'Ё' => 'ё', - 'Ђ' => 'ђ', - 'Ѓ' => 'ѓ', - 'Є' => 'є', - 'Ѕ' => 'ѕ', - 'І' => 'і', - 'Ї' => 'ї', - 'Ј' => 'ј', - 'Љ' => 'љ', - 'Њ' => 'њ', - 'Ћ' => 'ћ', - 'Ќ' => 'ќ', - 'Ѝ' => 'ѝ', - 'Ў' => 'ў', - 'Џ' => 'џ', - 'А' => 'а', - 'Б' => 'б', - 'В' => 'в', - 'Г' => 'г', - 'Д' => 'д', - 'Е' => 'е', - 'Ж' => 'ж', - 'З' => 'з', - 'И' => 'и', - 'Й' => 'й', - 'К' => 'к', - 'Л' => 'л', - 'М' => 'м', - 'Н' => 'н', - 'О' => 'о', - 'П' => 'п', - 'Р' => 'р', - 'С' => 'с', - 'Т' => 'т', - 'У' => 'у', - 'Ф' => 'ф', - 'Х' => 'х', - 'Ц' => 'ц', - 'Ч' => 'ч', - 'Ш' => 'ш', - 'Щ' => 'щ', - 'Ъ' => 'ъ', - 'Ы' => 'ы', - 'Ь' => 'ь', - 'Э' => 'э', - 'Ю' => 'ю', - 'Я' => 'я', - 'Ѡ' => 'ѡ', - 'Ѣ' => 'ѣ', - 'Ѥ' => 'ѥ', - 'Ѧ' => 'ѧ', - 'Ѩ' => 'ѩ', - 'Ѫ' => 'ѫ', - 'Ѭ' => 'ѭ', - 'Ѯ' => 'ѯ', - 'Ѱ' => 'ѱ', - 'Ѳ' => 'ѳ', - 'Ѵ' => 'ѵ', - 'Ѷ' => 'ѷ', - 'Ѹ' => 'ѹ', - 'Ѻ' => 'ѻ', - 'Ѽ' => 'ѽ', - 'Ѿ' => 'ѿ', - 'Ҁ' => 'ҁ', - 'Ҋ' => 'ҋ', - 'Ҍ' => 'ҍ', - 'Ҏ' => 'ҏ', - 'Ґ' => 'ґ', - 'Ғ' => 'ғ', - 'Ҕ' => 'ҕ', - 'Җ' => 'җ', - 'Ҙ' => 'ҙ', - 'Қ' => 'қ', - 'Ҝ' => 'ҝ', - 'Ҟ' => 'ҟ', - 'Ҡ' => 'ҡ', - 'Ң' => 'ң', - 'Ҥ' => 'ҥ', - 'Ҧ' => 'ҧ', - 'Ҩ' => 'ҩ', - 'Ҫ' => 'ҫ', - 'Ҭ' => 'ҭ', - 'Ү' => 'ү', - 'Ұ' => 'ұ', - 'Ҳ' => 'ҳ', - 'Ҵ' => 'ҵ', - 'Ҷ' => 'ҷ', - 'Ҹ' => 'ҹ', - 'Һ' => 'һ', - 'Ҽ' => 'ҽ', - 'Ҿ' => 'ҿ', - 'Ӏ' => 'ӏ', - 'Ӂ' => 'ӂ', - 'Ӄ' => 'ӄ', - 'Ӆ' => 'ӆ', - 'Ӈ' => 'ӈ', - 'Ӊ' => 'ӊ', - 'Ӌ' => 'ӌ', - 'Ӎ' => 'ӎ', - 'Ӑ' => 'ӑ', - 'Ӓ' => 'ӓ', - 'Ӕ' => 'ӕ', - 'Ӗ' => 'ӗ', - 'Ә' => 'ә', - 'Ӛ' => 'ӛ', - 'Ӝ' => 'ӝ', - 'Ӟ' => 'ӟ', - 'Ӡ' => 'ӡ', - 'Ӣ' => 'ӣ', - 'Ӥ' => 'ӥ', - 'Ӧ' => 'ӧ', - 'Ө' => 'ө', - 'Ӫ' => 'ӫ', - 'Ӭ' => 'ӭ', - 'Ӯ' => 'ӯ', - 'Ӱ' => 'ӱ', - 'Ӳ' => 'ӳ', - 'Ӵ' => 'ӵ', - 'Ӷ' => 'ӷ', - 'Ӹ' => 'ӹ', - 'Ӻ' => 'ӻ', - 'Ӽ' => 'ӽ', - 'Ӿ' => 'ӿ', - 'Ԁ' => 'ԁ', - 'Ԃ' => 'ԃ', - 'Ԅ' => 'ԅ', - 'Ԇ' => 'ԇ', - 'Ԉ' => 'ԉ', - 'Ԋ' => 'ԋ', - 'Ԍ' => 'ԍ', - 'Ԏ' => 'ԏ', - 'Ԑ' => 'ԑ', - 'Ԓ' => 'ԓ', - 'Ԕ' => 'ԕ', - 'Ԗ' => 'ԗ', - 'Ԙ' => 'ԙ', - 'Ԛ' => 'ԛ', - 'Ԝ' => 'ԝ', - 'Ԟ' => 'ԟ', - 'Ԡ' => 'ԡ', - 'Ԣ' => 'ԣ', - 'Ԥ' => 'ԥ', - 'Ԧ' => 'ԧ', - 'Ԩ' => 'ԩ', - 'Ԫ' => 'ԫ', - 'Ԭ' => 'ԭ', - 'Ԯ' => 'ԯ', - 'Ա' => 'ա', - 'Բ' => 'բ', - 'Գ' => 'գ', - 'Դ' => 'դ', - 'Ե' => 'ե', - 'Զ' => 'զ', - 'Է' => 'է', - 'Ը' => 'ը', - 'Թ' => 'թ', - 'Ժ' => 'ժ', - 'Ի' => 'ի', - 'Լ' => 'լ', - 'Խ' => 'խ', - 'Ծ' => 'ծ', - 'Կ' => 'կ', - 'Հ' => 'հ', - 'Ձ' => 'ձ', - 'Ղ' => 'ղ', - 'Ճ' => 'ճ', - 'Մ' => 'մ', - 'Յ' => 'յ', - 'Ն' => 'ն', - 'Շ' => 'շ', - 'Ո' => 'ո', - 'Չ' => 'չ', - 'Պ' => 'պ', - 'Ջ' => 'ջ', - 'Ռ' => 'ռ', - 'Ս' => 'ս', - 'Վ' => 'վ', - 'Տ' => 'տ', - 'Ր' => 'ր', - 'Ց' => 'ց', - 'Ւ' => 'ւ', - 'Փ' => 'փ', - 'Ք' => 'ք', - 'Օ' => 'օ', - 'Ֆ' => 'ֆ', - 'Ⴀ' => 'ⴀ', - 'Ⴁ' => 'ⴁ', - 'Ⴂ' => 'ⴂ', - 'Ⴃ' => 'ⴃ', - 'Ⴄ' => 'ⴄ', - 'Ⴅ' => 'ⴅ', - 'Ⴆ' => 'ⴆ', - 'Ⴇ' => 'ⴇ', - 'Ⴈ' => 'ⴈ', - 'Ⴉ' => 'ⴉ', - 'Ⴊ' => 'ⴊ', - 'Ⴋ' => 'ⴋ', - 'Ⴌ' => 'ⴌ', - 'Ⴍ' => 'ⴍ', - 'Ⴎ' => 'ⴎ', - 'Ⴏ' => 'ⴏ', - 'Ⴐ' => 'ⴐ', - 'Ⴑ' => 'ⴑ', - 'Ⴒ' => 'ⴒ', - 'Ⴓ' => 'ⴓ', - 'Ⴔ' => 'ⴔ', - 'Ⴕ' => 'ⴕ', - 'Ⴖ' => 'ⴖ', - 'Ⴗ' => 'ⴗ', - 'Ⴘ' => 'ⴘ', - 'Ⴙ' => 'ⴙ', - 'Ⴚ' => 'ⴚ', - 'Ⴛ' => 'ⴛ', - 'Ⴜ' => 'ⴜ', - 'Ⴝ' => 'ⴝ', - 'Ⴞ' => 'ⴞ', - 'Ⴟ' => 'ⴟ', - 'Ⴠ' => 'ⴠ', - 'Ⴡ' => 'ⴡ', - 'Ⴢ' => 'ⴢ', - 'Ⴣ' => 'ⴣ', - 'Ⴤ' => 'ⴤ', - 'Ⴥ' => 'ⴥ', - 'Ⴧ' => 'ⴧ', - 'Ⴭ' => 'ⴭ', - 'Ḁ' => 'ḁ', - 'Ḃ' => 'ḃ', - 'Ḅ' => 'ḅ', - 'Ḇ' => 'ḇ', - 'Ḉ' => 'ḉ', - 'Ḋ' => 'ḋ', - 'Ḍ' => 'ḍ', - 'Ḏ' => 'ḏ', - 'Ḑ' => 'ḑ', - 'Ḓ' => 'ḓ', - 'Ḕ' => 'ḕ', - 'Ḗ' => 'ḗ', - 'Ḙ' => 'ḙ', - 'Ḛ' => 'ḛ', - 'Ḝ' => 'ḝ', - 'Ḟ' => 'ḟ', - 'Ḡ' => 'ḡ', - 'Ḣ' => 'ḣ', - 'Ḥ' => 'ḥ', - 'Ḧ' => 'ḧ', - 'Ḩ' => 'ḩ', - 'Ḫ' => 'ḫ', - 'Ḭ' => 'ḭ', - 'Ḯ' => 'ḯ', - 'Ḱ' => 'ḱ', - 'Ḳ' => 'ḳ', - 'Ḵ' => 'ḵ', - 'Ḷ' => 'ḷ', - 'Ḹ' => 'ḹ', - 'Ḻ' => 'ḻ', - 'Ḽ' => 'ḽ', - 'Ḿ' => 'ḿ', - 'Ṁ' => 'ṁ', - 'Ṃ' => 'ṃ', - 'Ṅ' => 'ṅ', - 'Ṇ' => 'ṇ', - 'Ṉ' => 'ṉ', - 'Ṋ' => 'ṋ', - 'Ṍ' => 'ṍ', - 'Ṏ' => 'ṏ', - 'Ṑ' => 'ṑ', - 'Ṓ' => 'ṓ', - 'Ṕ' => 'ṕ', - 'Ṗ' => 'ṗ', - 'Ṙ' => 'ṙ', - 'Ṛ' => 'ṛ', - 'Ṝ' => 'ṝ', - 'Ṟ' => 'ṟ', - 'Ṡ' => 'ṡ', - 'Ṣ' => 'ṣ', - 'Ṥ' => 'ṥ', - 'Ṧ' => 'ṧ', - 'Ṩ' => 'ṩ', - 'Ṫ' => 'ṫ', - 'Ṭ' => 'ṭ', - 'Ṯ' => 'ṯ', - 'Ṱ' => 'ṱ', - 'Ṳ' => 'ṳ', - 'Ṵ' => 'ṵ', - 'Ṷ' => 'ṷ', - 'Ṹ' => 'ṹ', - 'Ṻ' => 'ṻ', - 'Ṽ' => 'ṽ', - 'Ṿ' => 'ṿ', - 'Ẁ' => 'ẁ', - 'Ẃ' => 'ẃ', - 'Ẅ' => 'ẅ', - 'Ẇ' => 'ẇ', - 'Ẉ' => 'ẉ', - 'Ẋ' => 'ẋ', - 'Ẍ' => 'ẍ', - 'Ẏ' => 'ẏ', - 'Ẑ' => 'ẑ', - 'Ẓ' => 'ẓ', - 'Ẕ' => 'ẕ', - 'ẞ' => 'ß', - 'Ạ' => 'ạ', - 'Ả' => 'ả', - 'Ấ' => 'ấ', - 'Ầ' => 'ầ', - 'Ẩ' => 'ẩ', - 'Ẫ' => 'ẫ', - 'Ậ' => 'ậ', - 'Ắ' => 'ắ', - 'Ằ' => 'ằ', - 'Ẳ' => 'ẳ', - 'Ẵ' => 'ẵ', - 'Ặ' => 'ặ', - 'Ẹ' => 'ẹ', - 'Ẻ' => 'ẻ', - 'Ẽ' => 'ẽ', - 'Ế' => 'ế', - 'Ề' => 'ề', - 'Ể' => 'ể', - 'Ễ' => 'ễ', - 'Ệ' => 'ệ', - 'Ỉ' => 'ỉ', - 'Ị' => 'ị', - 'Ọ' => 'ọ', - 'Ỏ' => 'ỏ', - 'Ố' => 'ố', - 'Ồ' => 'ồ', - 'Ổ' => 'ổ', - 'Ỗ' => 'ỗ', - 'Ộ' => 'ộ', - 'Ớ' => 'ớ', - 'Ờ' => 'ờ', - 'Ở' => 'ở', - 'Ỡ' => 'ỡ', - 'Ợ' => 'ợ', - 'Ụ' => 'ụ', - 'Ủ' => 'ủ', - 'Ứ' => 'ứ', - 'Ừ' => 'ừ', - 'Ử' => 'ử', - 'Ữ' => 'ữ', - 'Ự' => 'ự', - 'Ỳ' => 'ỳ', - 'Ỵ' => 'ỵ', - 'Ỷ' => 'ỷ', - 'Ỹ' => 'ỹ', - 'Ỻ' => 'ỻ', - 'Ỽ' => 'ỽ', - 'Ỿ' => 'ỿ', - 'Ἀ' => 'ἀ', - 'Ἁ' => 'ἁ', - 'Ἂ' => 'ἂ', - 'Ἃ' => 'ἃ', - 'Ἄ' => 'ἄ', - 'Ἅ' => 'ἅ', - 'Ἆ' => 'ἆ', - 'Ἇ' => 'ἇ', - 'Ἐ' => 'ἐ', - 'Ἑ' => 'ἑ', - 'Ἒ' => 'ἒ', - 'Ἓ' => 'ἓ', - 'Ἔ' => 'ἔ', - 'Ἕ' => 'ἕ', - 'Ἠ' => 'ἠ', - 'Ἡ' => 'ἡ', - 'Ἢ' => 'ἢ', - 'Ἣ' => 'ἣ', - 'Ἤ' => 'ἤ', - 'Ἥ' => 'ἥ', - 'Ἦ' => 'ἦ', - 'Ἧ' => 'ἧ', - 'Ἰ' => 'ἰ', - 'Ἱ' => 'ἱ', - 'Ἲ' => 'ἲ', - 'Ἳ' => 'ἳ', - 'Ἴ' => 'ἴ', - 'Ἵ' => 'ἵ', - 'Ἶ' => 'ἶ', - 'Ἷ' => 'ἷ', - 'Ὀ' => 'ὀ', - 'Ὁ' => 'ὁ', - 'Ὂ' => 'ὂ', - 'Ὃ' => 'ὃ', - 'Ὄ' => 'ὄ', - 'Ὅ' => 'ὅ', - 'Ὑ' => 'ὑ', - 'Ὓ' => 'ὓ', - 'Ὕ' => 'ὕ', - 'Ὗ' => 'ὗ', - 'Ὠ' => 'ὠ', - 'Ὡ' => 'ὡ', - 'Ὢ' => 'ὢ', - 'Ὣ' => 'ὣ', - 'Ὤ' => 'ὤ', - 'Ὥ' => 'ὥ', - 'Ὦ' => 'ὦ', - 'Ὧ' => 'ὧ', - 'ᾈ' => 'ᾀ', - 'ᾉ' => 'ᾁ', - 'ᾊ' => 'ᾂ', - 'ᾋ' => 'ᾃ', - 'ᾌ' => 'ᾄ', - 'ᾍ' => 'ᾅ', - 'ᾎ' => 'ᾆ', - 'ᾏ' => 'ᾇ', - 'ᾘ' => 'ᾐ', - 'ᾙ' => 'ᾑ', - 'ᾚ' => 'ᾒ', - 'ᾛ' => 'ᾓ', - 'ᾜ' => 'ᾔ', - 'ᾝ' => 'ᾕ', - 'ᾞ' => 'ᾖ', - 'ᾟ' => 'ᾗ', - 'ᾨ' => 'ᾠ', - 'ᾩ' => 'ᾡ', - 'ᾪ' => 'ᾢ', - 'ᾫ' => 'ᾣ', - 'ᾬ' => 'ᾤ', - 'ᾭ' => 'ᾥ', - 'ᾮ' => 'ᾦ', - 'ᾯ' => 'ᾧ', - 'Ᾰ' => 'ᾰ', - 'Ᾱ' => 'ᾱ', - 'Ὰ' => 'ὰ', - 'Ά' => 'ά', - 'ᾼ' => 'ᾳ', - 'Ὲ' => 'ὲ', - 'Έ' => 'έ', - 'Ὴ' => 'ὴ', - 'Ή' => 'ή', - 'ῌ' => 'ῃ', - 'Ῐ' => 'ῐ', - 'Ῑ' => 'ῑ', - 'Ὶ' => 'ὶ', - 'Ί' => 'ί', - 'Ῠ' => 'ῠ', - 'Ῡ' => 'ῡ', - 'Ὺ' => 'ὺ', - 'Ύ' => 'ύ', - 'Ῥ' => 'ῥ', - 'Ὸ' => 'ὸ', - 'Ό' => 'ό', - 'Ὼ' => 'ὼ', - 'Ώ' => 'ώ', - 'ῼ' => 'ῳ', - 'Ω' => 'ω', - 'K' => 'k', - 'Å' => 'å', - 'Ⅎ' => 'ⅎ', - 'Ⅰ' => 'ⅰ', - 'Ⅱ' => 'ⅱ', - 'Ⅲ' => 'ⅲ', - 'Ⅳ' => 'ⅳ', - 'Ⅴ' => 'ⅴ', - 'Ⅵ' => 'ⅵ', - 'Ⅶ' => 'ⅶ', - 'Ⅷ' => 'ⅷ', - 'Ⅸ' => 'ⅸ', - 'Ⅹ' => 'ⅹ', - 'Ⅺ' => 'ⅺ', - 'Ⅻ' => 'ⅻ', - 'Ⅼ' => 'ⅼ', - 'Ⅽ' => 'ⅽ', - 'Ⅾ' => 'ⅾ', - 'Ⅿ' => 'ⅿ', - 'Ↄ' => 'ↄ', - 'Ⓐ' => 'ⓐ', - 'Ⓑ' => 'ⓑ', - 'Ⓒ' => 'ⓒ', - 'Ⓓ' => 'ⓓ', - 'Ⓔ' => 'ⓔ', - 'Ⓕ' => 'ⓕ', - 'Ⓖ' => 'ⓖ', - 'Ⓗ' => 'ⓗ', - 'Ⓘ' => 'ⓘ', - 'Ⓙ' => 'ⓙ', - 'Ⓚ' => 'ⓚ', - 'Ⓛ' => 'ⓛ', - 'Ⓜ' => 'ⓜ', - 'Ⓝ' => 'ⓝ', - 'Ⓞ' => 'ⓞ', - 'Ⓟ' => 'ⓟ', - 'Ⓠ' => 'ⓠ', - 'Ⓡ' => 'ⓡ', - 'Ⓢ' => 'ⓢ', - 'Ⓣ' => 'ⓣ', - 'Ⓤ' => 'ⓤ', - 'Ⓥ' => 'ⓥ', - 'Ⓦ' => 'ⓦ', - 'Ⓧ' => 'ⓧ', - 'Ⓨ' => 'ⓨ', - 'Ⓩ' => 'ⓩ', - 'Ⰰ' => 'ⰰ', - 'Ⰱ' => 'ⰱ', - 'Ⰲ' => 'ⰲ', - 'Ⰳ' => 'ⰳ', - 'Ⰴ' => 'ⰴ', - 'Ⰵ' => 'ⰵ', - 'Ⰶ' => 'ⰶ', - 'Ⰷ' => 'ⰷ', - 'Ⰸ' => 'ⰸ', - 'Ⰹ' => 'ⰹ', - 'Ⰺ' => 'ⰺ', - 'Ⰻ' => 'ⰻ', - 'Ⰼ' => 'ⰼ', - 'Ⰽ' => 'ⰽ', - 'Ⰾ' => 'ⰾ', - 'Ⰿ' => 'ⰿ', - 'Ⱀ' => 'ⱀ', - 'Ⱁ' => 'ⱁ', - 'Ⱂ' => 'ⱂ', - 'Ⱃ' => 'ⱃ', - 'Ⱄ' => 'ⱄ', - 'Ⱅ' => 'ⱅ', - 'Ⱆ' => 'ⱆ', - 'Ⱇ' => 'ⱇ', - 'Ⱈ' => 'ⱈ', - 'Ⱉ' => 'ⱉ', - 'Ⱊ' => 'ⱊ', - 'Ⱋ' => 'ⱋ', - 'Ⱌ' => 'ⱌ', - 'Ⱍ' => 'ⱍ', - 'Ⱎ' => 'ⱎ', - 'Ⱏ' => 'ⱏ', - 'Ⱐ' => 'ⱐ', - 'Ⱑ' => 'ⱑ', - 'Ⱒ' => 'ⱒ', - 'Ⱓ' => 'ⱓ', - 'Ⱔ' => 'ⱔ', - 'Ⱕ' => 'ⱕ', - 'Ⱖ' => 'ⱖ', - 'Ⱗ' => 'ⱗ', - 'Ⱘ' => 'ⱘ', - 'Ⱙ' => 'ⱙ', - 'Ⱚ' => 'ⱚ', - 'Ⱛ' => 'ⱛ', - 'Ⱜ' => 'ⱜ', - 'Ⱝ' => 'ⱝ', - 'Ⱞ' => 'ⱞ', - 'Ⱡ' => 'ⱡ', - 'Ɫ' => 'ɫ', - 'Ᵽ' => 'ᵽ', - 'Ɽ' => 'ɽ', - 'Ⱨ' => 'ⱨ', - 'Ⱪ' => 'ⱪ', - 'Ⱬ' => 'ⱬ', - 'Ɑ' => 'ɑ', - 'Ɱ' => 'ɱ', - 'Ɐ' => 'ɐ', - 'Ɒ' => 'ɒ', - 'Ⱳ' => 'ⱳ', - 'Ⱶ' => 'ⱶ', - 'Ȿ' => 'ȿ', - 'Ɀ' => 'ɀ', - 'Ⲁ' => 'ⲁ', - 'Ⲃ' => 'ⲃ', - 'Ⲅ' => 'ⲅ', - 'Ⲇ' => 'ⲇ', - 'Ⲉ' => 'ⲉ', - 'Ⲋ' => 'ⲋ', - 'Ⲍ' => 'ⲍ', - 'Ⲏ' => 'ⲏ', - 'Ⲑ' => 'ⲑ', - 'Ⲓ' => 'ⲓ', - 'Ⲕ' => 'ⲕ', - 'Ⲗ' => 'ⲗ', - 'Ⲙ' => 'ⲙ', - 'Ⲛ' => 'ⲛ', - 'Ⲝ' => 'ⲝ', - 'Ⲟ' => 'ⲟ', - 'Ⲡ' => 'ⲡ', - 'Ⲣ' => 'ⲣ', - 'Ⲥ' => 'ⲥ', - 'Ⲧ' => 'ⲧ', - 'Ⲩ' => 'ⲩ', - 'Ⲫ' => 'ⲫ', - 'Ⲭ' => 'ⲭ', - 'Ⲯ' => 'ⲯ', - 'Ⲱ' => 'ⲱ', - 'Ⲳ' => 'ⲳ', - 'Ⲵ' => 'ⲵ', - 'Ⲷ' => 'ⲷ', - 'Ⲹ' => 'ⲹ', - 'Ⲻ' => 'ⲻ', - 'Ⲽ' => 'ⲽ', - 'Ⲿ' => 'ⲿ', - 'Ⳁ' => 'ⳁ', - 'Ⳃ' => 'ⳃ', - 'Ⳅ' => 'ⳅ', - 'Ⳇ' => 'ⳇ', - 'Ⳉ' => 'ⳉ', - 'Ⳋ' => 'ⳋ', - 'Ⳍ' => 'ⳍ', - 'Ⳏ' => 'ⳏ', - 'Ⳑ' => 'ⳑ', - 'Ⳓ' => 'ⳓ', - 'Ⳕ' => 'ⳕ', - 'Ⳗ' => 'ⳗ', - 'Ⳙ' => 'ⳙ', - 'Ⳛ' => 'ⳛ', - 'Ⳝ' => 'ⳝ', - 'Ⳟ' => 'ⳟ', - 'Ⳡ' => 'ⳡ', - 'Ⳣ' => 'ⳣ', - 'Ⳬ' => 'ⳬ', - 'Ⳮ' => 'ⳮ', - 'Ⳳ' => 'ⳳ', - 'Ꙁ' => 'ꙁ', - 'Ꙃ' => 'ꙃ', - 'Ꙅ' => 'ꙅ', - 'Ꙇ' => 'ꙇ', - 'Ꙉ' => 'ꙉ', - 'Ꙋ' => 'ꙋ', - 'Ꙍ' => 'ꙍ', - 'Ꙏ' => 'ꙏ', - 'Ꙑ' => 'ꙑ', - 'Ꙓ' => 'ꙓ', - 'Ꙕ' => 'ꙕ', - 'Ꙗ' => 'ꙗ', - 'Ꙙ' => 'ꙙ', - 'Ꙛ' => 'ꙛ', - 'Ꙝ' => 'ꙝ', - 'Ꙟ' => 'ꙟ', - 'Ꙡ' => 'ꙡ', - 'Ꙣ' => 'ꙣ', - 'Ꙥ' => 'ꙥ', - 'Ꙧ' => 'ꙧ', - 'Ꙩ' => 'ꙩ', - 'Ꙫ' => 'ꙫ', - 'Ꙭ' => 'ꙭ', - 'Ꚁ' => 'ꚁ', - 'Ꚃ' => 'ꚃ', - 'Ꚅ' => 'ꚅ', - 'Ꚇ' => 'ꚇ', - 'Ꚉ' => 'ꚉ', - 'Ꚋ' => 'ꚋ', - 'Ꚍ' => 'ꚍ', - 'Ꚏ' => 'ꚏ', - 'Ꚑ' => 'ꚑ', - 'Ꚓ' => 'ꚓ', - 'Ꚕ' => 'ꚕ', - 'Ꚗ' => 'ꚗ', - 'Ꚙ' => 'ꚙ', - 'Ꚛ' => 'ꚛ', - 'Ꜣ' => 'ꜣ', - 'Ꜥ' => 'ꜥ', - 'Ꜧ' => 'ꜧ', - 'Ꜩ' => 'ꜩ', - 'Ꜫ' => 'ꜫ', - 'Ꜭ' => 'ꜭ', - 'Ꜯ' => 'ꜯ', - 'Ꜳ' => 'ꜳ', - 'Ꜵ' => 'ꜵ', - 'Ꜷ' => 'ꜷ', - 'Ꜹ' => 'ꜹ', - 'Ꜻ' => 'ꜻ', - 'Ꜽ' => 'ꜽ', - 'Ꜿ' => 'ꜿ', - 'Ꝁ' => 'ꝁ', - 'Ꝃ' => 'ꝃ', - 'Ꝅ' => 'ꝅ', - 'Ꝇ' => 'ꝇ', - 'Ꝉ' => 'ꝉ', - 'Ꝋ' => 'ꝋ', - 'Ꝍ' => 'ꝍ', - 'Ꝏ' => 'ꝏ', - 'Ꝑ' => 'ꝑ', - 'Ꝓ' => 'ꝓ', - 'Ꝕ' => 'ꝕ', - 'Ꝗ' => 'ꝗ', - 'Ꝙ' => 'ꝙ', - 'Ꝛ' => 'ꝛ', - 'Ꝝ' => 'ꝝ', - 'Ꝟ' => 'ꝟ', - 'Ꝡ' => 'ꝡ', - 'Ꝣ' => 'ꝣ', - 'Ꝥ' => 'ꝥ', - 'Ꝧ' => 'ꝧ', - 'Ꝩ' => 'ꝩ', - 'Ꝫ' => 'ꝫ', - 'Ꝭ' => 'ꝭ', - 'Ꝯ' => 'ꝯ', - 'Ꝺ' => 'ꝺ', - 'Ꝼ' => 'ꝼ', - 'Ᵹ' => 'ᵹ', - 'Ꝿ' => 'ꝿ', - 'Ꞁ' => 'ꞁ', - 'Ꞃ' => 'ꞃ', - 'Ꞅ' => 'ꞅ', - 'Ꞇ' => 'ꞇ', - 'Ꞌ' => 'ꞌ', - 'Ɥ' => 'ɥ', - 'Ꞑ' => 'ꞑ', - 'Ꞓ' => 'ꞓ', - 'Ꞗ' => 'ꞗ', - 'Ꞙ' => 'ꞙ', - 'Ꞛ' => 'ꞛ', - 'Ꞝ' => 'ꞝ', - 'Ꞟ' => 'ꞟ', - 'Ꞡ' => 'ꞡ', - 'Ꞣ' => 'ꞣ', - 'Ꞥ' => 'ꞥ', - 'Ꞧ' => 'ꞧ', - 'Ꞩ' => 'ꞩ', - 'Ɦ' => 'ɦ', - 'Ɜ' => 'ɜ', - 'Ɡ' => 'ɡ', - 'Ɬ' => 'ɬ', - 'Ʞ' => 'ʞ', - 'Ʇ' => 'ʇ', - 'A' => 'a', - 'B' => 'b', - 'C' => 'c', - 'D' => 'd', - 'E' => 'e', - 'F' => 'f', - 'G' => 'g', - 'H' => 'h', - 'I' => 'i', - 'J' => 'j', - 'K' => 'k', - 'L' => 'l', - 'M' => 'm', - 'N' => 'n', - 'O' => 'o', - 'P' => 'p', - 'Q' => 'q', - 'R' => 'r', - 'S' => 's', - 'T' => 't', - 'U' => 'u', - 'V' => 'v', - 'W' => 'w', - 'X' => 'x', - 'Y' => 'y', - 'Z' => 'z', - '𐐀' => '𐐨', - '𐐁' => '𐐩', - '𐐂' => '𐐪', - '𐐃' => '𐐫', - '𐐄' => '𐐬', - '𐐅' => '𐐭', - '𐐆' => '𐐮', - '𐐇' => '𐐯', - '𐐈' => '𐐰', - '𐐉' => '𐐱', - '𐐊' => '𐐲', - '𐐋' => '𐐳', - '𐐌' => '𐐴', - '𐐍' => '𐐵', - '𐐎' => '𐐶', - '𐐏' => '𐐷', - '𐐐' => '𐐸', - '𐐑' => '𐐹', - '𐐒' => '𐐺', - '𐐓' => '𐐻', - '𐐔' => '𐐼', - '𐐕' => '𐐽', - '𐐖' => '𐐾', - '𐐗' => '𐐿', - '𐐘' => '𐑀', - '𐐙' => '𐑁', - '𐐚' => '𐑂', - '𐐛' => '𐑃', - '𐐜' => '𐑄', - '𐐝' => '𐑅', - '𐐞' => '𐑆', - '𐐟' => '𐑇', - '𐐠' => '𐑈', - '𐐡' => '𐑉', - '𐐢' => '𐑊', - '𐐣' => '𐑋', - '𐐤' => '𐑌', - '𐐥' => '𐑍', - '𐐦' => '𐑎', - '𐐧' => '𐑏', - '𑢠' => '𑣀', - '𑢡' => '𑣁', - '𑢢' => '𑣂', - '𑢣' => '𑣃', - '𑢤' => '𑣄', - '𑢥' => '𑣅', - '𑢦' => '𑣆', - '𑢧' => '𑣇', - '𑢨' => '𑣈', - '𑢩' => '𑣉', - '𑢪' => '𑣊', - '𑢫' => '𑣋', - '𑢬' => '𑣌', - '𑢭' => '𑣍', - '𑢮' => '𑣎', - '𑢯' => '𑣏', - '𑢰' => '𑣐', - '𑢱' => '𑣑', - '𑢲' => '𑣒', - '𑢳' => '𑣓', - '𑢴' => '𑣔', - '𑢵' => '𑣕', - '𑢶' => '𑣖', - '𑢷' => '𑣗', - '𑢸' => '𑣘', - '𑢹' => '𑣙', - '𑢺' => '𑣚', - '𑢻' => '𑣛', - '𑢼' => '𑣜', - '𑢽' => '𑣝', - '𑢾' => '𑣞', - '𑢿' => '𑣟', -); diff --git a/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php deleted file mode 100644 index 2a8f6e7..0000000 --- a/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +++ /dev/null @@ -1,5 +0,0 @@ - 'A', - 'b' => 'B', - 'c' => 'C', - 'd' => 'D', - 'e' => 'E', - 'f' => 'F', - 'g' => 'G', - 'h' => 'H', - 'i' => 'I', - 'j' => 'J', - 'k' => 'K', - 'l' => 'L', - 'm' => 'M', - 'n' => 'N', - 'o' => 'O', - 'p' => 'P', - 'q' => 'Q', - 'r' => 'R', - 's' => 'S', - 't' => 'T', - 'u' => 'U', - 'v' => 'V', - 'w' => 'W', - 'x' => 'X', - 'y' => 'Y', - 'z' => 'Z', - 'µ' => 'Μ', - 'à' => 'À', - 'á' => 'Á', - 'â' => 'Â', - 'ã' => 'Ã', - 'ä' => 'Ä', - 'å' => 'Å', - 'æ' => 'Æ', - 'ç' => 'Ç', - 'è' => 'È', - 'é' => 'É', - 'ê' => 'Ê', - 'ë' => 'Ë', - 'ì' => 'Ì', - 'í' => 'Í', - 'î' => 'Î', - 'ï' => 'Ï', - 'ð' => 'Ð', - 'ñ' => 'Ñ', - 'ò' => 'Ò', - 'ó' => 'Ó', - 'ô' => 'Ô', - 'õ' => 'Õ', - 'ö' => 'Ö', - 'ø' => 'Ø', - 'ù' => 'Ù', - 'ú' => 'Ú', - 'û' => 'Û', - 'ü' => 'Ü', - 'ý' => 'Ý', - 'þ' => 'Þ', - 'ÿ' => 'Ÿ', - 'ā' => 'Ā', - 'ă' => 'Ă', - 'ą' => 'Ą', - 'ć' => 'Ć', - 'ĉ' => 'Ĉ', - 'ċ' => 'Ċ', - 'č' => 'Č', - 'ď' => 'Ď', - 'đ' => 'Đ', - 'ē' => 'Ē', - 'ĕ' => 'Ĕ', - 'ė' => 'Ė', - 'ę' => 'Ę', - 'ě' => 'Ě', - 'ĝ' => 'Ĝ', - 'ğ' => 'Ğ', - 'ġ' => 'Ġ', - 'ģ' => 'Ģ', - 'ĥ' => 'Ĥ', - 'ħ' => 'Ħ', - 'ĩ' => 'Ĩ', - 'ī' => 'Ī', - 'ĭ' => 'Ĭ', - 'į' => 'Į', - 'ı' => 'I', - 'ij' => 'IJ', - 'ĵ' => 'Ĵ', - 'ķ' => 'Ķ', - 'ĺ' => 'Ĺ', - 'ļ' => 'Ļ', - 'ľ' => 'Ľ', - 'ŀ' => 'Ŀ', - 'ł' => 'Ł', - 'ń' => 'Ń', - 'ņ' => 'Ņ', - 'ň' => 'Ň', - 'ŋ' => 'Ŋ', - 'ō' => 'Ō', - 'ŏ' => 'Ŏ', - 'ő' => 'Ő', - 'œ' => 'Œ', - 'ŕ' => 'Ŕ', - 'ŗ' => 'Ŗ', - 'ř' => 'Ř', - 'ś' => 'Ś', - 'ŝ' => 'Ŝ', - 'ş' => 'Ş', - 'š' => 'Š', - 'ţ' => 'Ţ', - 'ť' => 'Ť', - 'ŧ' => 'Ŧ', - 'ũ' => 'Ũ', - 'ū' => 'Ū', - 'ŭ' => 'Ŭ', - 'ů' => 'Ů', - 'ű' => 'Ű', - 'ų' => 'Ų', - 'ŵ' => 'Ŵ', - 'ŷ' => 'Ŷ', - 'ź' => 'Ź', - 'ż' => 'Ż', - 'ž' => 'Ž', - 'ſ' => 'S', - 'ƀ' => 'Ƀ', - 'ƃ' => 'Ƃ', - 'ƅ' => 'Ƅ', - 'ƈ' => 'Ƈ', - 'ƌ' => 'Ƌ', - 'ƒ' => 'Ƒ', - 'ƕ' => 'Ƕ', - 'ƙ' => 'Ƙ', - 'ƚ' => 'Ƚ', - 'ƞ' => 'Ƞ', - 'ơ' => 'Ơ', - 'ƣ' => 'Ƣ', - 'ƥ' => 'Ƥ', - 'ƨ' => 'Ƨ', - 'ƭ' => 'Ƭ', - 'ư' => 'Ư', - 'ƴ' => 'Ƴ', - 'ƶ' => 'Ƶ', - 'ƹ' => 'Ƹ', - 'ƽ' => 'Ƽ', - 'ƿ' => 'Ƿ', - 'Dž' => 'DŽ', - 'dž' => 'DŽ', - 'Lj' => 'LJ', - 'lj' => 'LJ', - 'Nj' => 'NJ', - 'nj' => 'NJ', - 'ǎ' => 'Ǎ', - 'ǐ' => 'Ǐ', - 'ǒ' => 'Ǒ', - 'ǔ' => 'Ǔ', - 'ǖ' => 'Ǖ', - 'ǘ' => 'Ǘ', - 'ǚ' => 'Ǚ', - 'ǜ' => 'Ǜ', - 'ǝ' => 'Ǝ', - 'ǟ' => 'Ǟ', - 'ǡ' => 'Ǡ', - 'ǣ' => 'Ǣ', - 'ǥ' => 'Ǥ', - 'ǧ' => 'Ǧ', - 'ǩ' => 'Ǩ', - 'ǫ' => 'Ǫ', - 'ǭ' => 'Ǭ', - 'ǯ' => 'Ǯ', - 'Dz' => 'DZ', - 'dz' => 'DZ', - 'ǵ' => 'Ǵ', - 'ǹ' => 'Ǹ', - 'ǻ' => 'Ǻ', - 'ǽ' => 'Ǽ', - 'ǿ' => 'Ǿ', - 'ȁ' => 'Ȁ', - 'ȃ' => 'Ȃ', - 'ȅ' => 'Ȅ', - 'ȇ' => 'Ȇ', - 'ȉ' => 'Ȉ', - 'ȋ' => 'Ȋ', - 'ȍ' => 'Ȍ', - 'ȏ' => 'Ȏ', - 'ȑ' => 'Ȑ', - 'ȓ' => 'Ȓ', - 'ȕ' => 'Ȕ', - 'ȗ' => 'Ȗ', - 'ș' => 'Ș', - 'ț' => 'Ț', - 'ȝ' => 'Ȝ', - 'ȟ' => 'Ȟ', - 'ȣ' => 'Ȣ', - 'ȥ' => 'Ȥ', - 'ȧ' => 'Ȧ', - 'ȩ' => 'Ȩ', - 'ȫ' => 'Ȫ', - 'ȭ' => 'Ȭ', - 'ȯ' => 'Ȯ', - 'ȱ' => 'Ȱ', - 'ȳ' => 'Ȳ', - 'ȼ' => 'Ȼ', - 'ȿ' => 'Ȿ', - 'ɀ' => 'Ɀ', - 'ɂ' => 'Ɂ', - 'ɇ' => 'Ɇ', - 'ɉ' => 'Ɉ', - 'ɋ' => 'Ɋ', - 'ɍ' => 'Ɍ', - 'ɏ' => 'Ɏ', - 'ɐ' => 'Ɐ', - 'ɑ' => 'Ɑ', - 'ɒ' => 'Ɒ', - 'ɓ' => 'Ɓ', - 'ɔ' => 'Ɔ', - 'ɖ' => 'Ɖ', - 'ɗ' => 'Ɗ', - 'ə' => 'Ə', - 'ɛ' => 'Ɛ', - 'ɜ' => 'Ɜ', - 'ɠ' => 'Ɠ', - 'ɡ' => 'Ɡ', - 'ɣ' => 'Ɣ', - 'ɥ' => 'Ɥ', - 'ɦ' => 'Ɦ', - 'ɨ' => 'Ɨ', - 'ɩ' => 'Ɩ', - 'ɫ' => 'Ɫ', - 'ɬ' => 'Ɬ', - 'ɯ' => 'Ɯ', - 'ɱ' => 'Ɱ', - 'ɲ' => 'Ɲ', - 'ɵ' => 'Ɵ', - 'ɽ' => 'Ɽ', - 'ʀ' => 'Ʀ', - 'ʃ' => 'Ʃ', - 'ʇ' => 'Ʇ', - 'ʈ' => 'Ʈ', - 'ʉ' => 'Ʉ', - 'ʊ' => 'Ʊ', - 'ʋ' => 'Ʋ', - 'ʌ' => 'Ʌ', - 'ʒ' => 'Ʒ', - 'ʞ' => 'Ʞ', - 'ͅ' => 'Ι', - 'ͱ' => 'Ͱ', - 'ͳ' => 'Ͳ', - 'ͷ' => 'Ͷ', - 'ͻ' => 'Ͻ', - 'ͼ' => 'Ͼ', - 'ͽ' => 'Ͽ', - 'ά' => 'Ά', - 'έ' => 'Έ', - 'ή' => 'Ή', - 'ί' => 'Ί', - 'α' => 'Α', - 'β' => 'Β', - 'γ' => 'Γ', - 'δ' => 'Δ', - 'ε' => 'Ε', - 'ζ' => 'Ζ', - 'η' => 'Η', - 'θ' => 'Θ', - 'ι' => 'Ι', - 'κ' => 'Κ', - 'λ' => 'Λ', - 'μ' => 'Μ', - 'ν' => 'Ν', - 'ξ' => 'Ξ', - 'ο' => 'Ο', - 'π' => 'Π', - 'ρ' => 'Ρ', - 'ς' => 'Σ', - 'σ' => 'Σ', - 'τ' => 'Τ', - 'υ' => 'Υ', - 'φ' => 'Φ', - 'χ' => 'Χ', - 'ψ' => 'Ψ', - 'ω' => 'Ω', - 'ϊ' => 'Ϊ', - 'ϋ' => 'Ϋ', - 'ό' => 'Ό', - 'ύ' => 'Ύ', - 'ώ' => 'Ώ', - 'ϐ' => 'Β', - 'ϑ' => 'Θ', - 'ϕ' => 'Φ', - 'ϖ' => 'Π', - 'ϗ' => 'Ϗ', - 'ϙ' => 'Ϙ', - 'ϛ' => 'Ϛ', - 'ϝ' => 'Ϝ', - 'ϟ' => 'Ϟ', - 'ϡ' => 'Ϡ', - 'ϣ' => 'Ϣ', - 'ϥ' => 'Ϥ', - 'ϧ' => 'Ϧ', - 'ϩ' => 'Ϩ', - 'ϫ' => 'Ϫ', - 'ϭ' => 'Ϭ', - 'ϯ' => 'Ϯ', - 'ϰ' => 'Κ', - 'ϱ' => 'Ρ', - 'ϲ' => 'Ϲ', - 'ϳ' => 'Ϳ', - 'ϵ' => 'Ε', - 'ϸ' => 'Ϸ', - 'ϻ' => 'Ϻ', - 'а' => 'А', - 'б' => 'Б', - 'в' => 'В', - 'г' => 'Г', - 'д' => 'Д', - 'е' => 'Е', - 'ж' => 'Ж', - 'з' => 'З', - 'и' => 'И', - 'й' => 'Й', - 'к' => 'К', - 'л' => 'Л', - 'м' => 'М', - 'н' => 'Н', - 'о' => 'О', - 'п' => 'П', - 'р' => 'Р', - 'с' => 'С', - 'т' => 'Т', - 'у' => 'У', - 'ф' => 'Ф', - 'х' => 'Х', - 'ц' => 'Ц', - 'ч' => 'Ч', - 'ш' => 'Ш', - 'щ' => 'Щ', - 'ъ' => 'Ъ', - 'ы' => 'Ы', - 'ь' => 'Ь', - 'э' => 'Э', - 'ю' => 'Ю', - 'я' => 'Я', - 'ѐ' => 'Ѐ', - 'ё' => 'Ё', - 'ђ' => 'Ђ', - 'ѓ' => 'Ѓ', - 'є' => 'Є', - 'ѕ' => 'Ѕ', - 'і' => 'І', - 'ї' => 'Ї', - 'ј' => 'Ј', - 'љ' => 'Љ', - 'њ' => 'Њ', - 'ћ' => 'Ћ', - 'ќ' => 'Ќ', - 'ѝ' => 'Ѝ', - 'ў' => 'Ў', - 'џ' => 'Џ', - 'ѡ' => 'Ѡ', - 'ѣ' => 'Ѣ', - 'ѥ' => 'Ѥ', - 'ѧ' => 'Ѧ', - 'ѩ' => 'Ѩ', - 'ѫ' => 'Ѫ', - 'ѭ' => 'Ѭ', - 'ѯ' => 'Ѯ', - 'ѱ' => 'Ѱ', - 'ѳ' => 'Ѳ', - 'ѵ' => 'Ѵ', - 'ѷ' => 'Ѷ', - 'ѹ' => 'Ѹ', - 'ѻ' => 'Ѻ', - 'ѽ' => 'Ѽ', - 'ѿ' => 'Ѿ', - 'ҁ' => 'Ҁ', - 'ҋ' => 'Ҋ', - 'ҍ' => 'Ҍ', - 'ҏ' => 'Ҏ', - 'ґ' => 'Ґ', - 'ғ' => 'Ғ', - 'ҕ' => 'Ҕ', - 'җ' => 'Җ', - 'ҙ' => 'Ҙ', - 'қ' => 'Қ', - 'ҝ' => 'Ҝ', - 'ҟ' => 'Ҟ', - 'ҡ' => 'Ҡ', - 'ң' => 'Ң', - 'ҥ' => 'Ҥ', - 'ҧ' => 'Ҧ', - 'ҩ' => 'Ҩ', - 'ҫ' => 'Ҫ', - 'ҭ' => 'Ҭ', - 'ү' => 'Ү', - 'ұ' => 'Ұ', - 'ҳ' => 'Ҳ', - 'ҵ' => 'Ҵ', - 'ҷ' => 'Ҷ', - 'ҹ' => 'Ҹ', - 'һ' => 'Һ', - 'ҽ' => 'Ҽ', - 'ҿ' => 'Ҿ', - 'ӂ' => 'Ӂ', - 'ӄ' => 'Ӄ', - 'ӆ' => 'Ӆ', - 'ӈ' => 'Ӈ', - 'ӊ' => 'Ӊ', - 'ӌ' => 'Ӌ', - 'ӎ' => 'Ӎ', - 'ӏ' => 'Ӏ', - 'ӑ' => 'Ӑ', - 'ӓ' => 'Ӓ', - 'ӕ' => 'Ӕ', - 'ӗ' => 'Ӗ', - 'ә' => 'Ә', - 'ӛ' => 'Ӛ', - 'ӝ' => 'Ӝ', - 'ӟ' => 'Ӟ', - 'ӡ' => 'Ӡ', - 'ӣ' => 'Ӣ', - 'ӥ' => 'Ӥ', - 'ӧ' => 'Ӧ', - 'ө' => 'Ө', - 'ӫ' => 'Ӫ', - 'ӭ' => 'Ӭ', - 'ӯ' => 'Ӯ', - 'ӱ' => 'Ӱ', - 'ӳ' => 'Ӳ', - 'ӵ' => 'Ӵ', - 'ӷ' => 'Ӷ', - 'ӹ' => 'Ӹ', - 'ӻ' => 'Ӻ', - 'ӽ' => 'Ӽ', - 'ӿ' => 'Ӿ', - 'ԁ' => 'Ԁ', - 'ԃ' => 'Ԃ', - 'ԅ' => 'Ԅ', - 'ԇ' => 'Ԇ', - 'ԉ' => 'Ԉ', - 'ԋ' => 'Ԋ', - 'ԍ' => 'Ԍ', - 'ԏ' => 'Ԏ', - 'ԑ' => 'Ԑ', - 'ԓ' => 'Ԓ', - 'ԕ' => 'Ԕ', - 'ԗ' => 'Ԗ', - 'ԙ' => 'Ԙ', - 'ԛ' => 'Ԛ', - 'ԝ' => 'Ԝ', - 'ԟ' => 'Ԟ', - 'ԡ' => 'Ԡ', - 'ԣ' => 'Ԣ', - 'ԥ' => 'Ԥ', - 'ԧ' => 'Ԧ', - 'ԩ' => 'Ԩ', - 'ԫ' => 'Ԫ', - 'ԭ' => 'Ԭ', - 'ԯ' => 'Ԯ', - 'ա' => 'Ա', - 'բ' => 'Բ', - 'գ' => 'Գ', - 'դ' => 'Դ', - 'ե' => 'Ե', - 'զ' => 'Զ', - 'է' => 'Է', - 'ը' => 'Ը', - 'թ' => 'Թ', - 'ժ' => 'Ժ', - 'ի' => 'Ի', - 'լ' => 'Լ', - 'խ' => 'Խ', - 'ծ' => 'Ծ', - 'կ' => 'Կ', - 'հ' => 'Հ', - 'ձ' => 'Ձ', - 'ղ' => 'Ղ', - 'ճ' => 'Ճ', - 'մ' => 'Մ', - 'յ' => 'Յ', - 'ն' => 'Ն', - 'շ' => 'Շ', - 'ո' => 'Ո', - 'չ' => 'Չ', - 'պ' => 'Պ', - 'ջ' => 'Ջ', - 'ռ' => 'Ռ', - 'ս' => 'Ս', - 'վ' => 'Վ', - 'տ' => 'Տ', - 'ր' => 'Ր', - 'ց' => 'Ց', - 'ւ' => 'Ւ', - 'փ' => 'Փ', - 'ք' => 'Ք', - 'օ' => 'Օ', - 'ֆ' => 'Ֆ', - 'ᵹ' => 'Ᵹ', - 'ᵽ' => 'Ᵽ', - 'ḁ' => 'Ḁ', - 'ḃ' => 'Ḃ', - 'ḅ' => 'Ḅ', - 'ḇ' => 'Ḇ', - 'ḉ' => 'Ḉ', - 'ḋ' => 'Ḋ', - 'ḍ' => 'Ḍ', - 'ḏ' => 'Ḏ', - 'ḑ' => 'Ḑ', - 'ḓ' => 'Ḓ', - 'ḕ' => 'Ḕ', - 'ḗ' => 'Ḗ', - 'ḙ' => 'Ḙ', - 'ḛ' => 'Ḛ', - 'ḝ' => 'Ḝ', - 'ḟ' => 'Ḟ', - 'ḡ' => 'Ḡ', - 'ḣ' => 'Ḣ', - 'ḥ' => 'Ḥ', - 'ḧ' => 'Ḧ', - 'ḩ' => 'Ḩ', - 'ḫ' => 'Ḫ', - 'ḭ' => 'Ḭ', - 'ḯ' => 'Ḯ', - 'ḱ' => 'Ḱ', - 'ḳ' => 'Ḳ', - 'ḵ' => 'Ḵ', - 'ḷ' => 'Ḷ', - 'ḹ' => 'Ḹ', - 'ḻ' => 'Ḻ', - 'ḽ' => 'Ḽ', - 'ḿ' => 'Ḿ', - 'ṁ' => 'Ṁ', - 'ṃ' => 'Ṃ', - 'ṅ' => 'Ṅ', - 'ṇ' => 'Ṇ', - 'ṉ' => 'Ṉ', - 'ṋ' => 'Ṋ', - 'ṍ' => 'Ṍ', - 'ṏ' => 'Ṏ', - 'ṑ' => 'Ṑ', - 'ṓ' => 'Ṓ', - 'ṕ' => 'Ṕ', - 'ṗ' => 'Ṗ', - 'ṙ' => 'Ṙ', - 'ṛ' => 'Ṛ', - 'ṝ' => 'Ṝ', - 'ṟ' => 'Ṟ', - 'ṡ' => 'Ṡ', - 'ṣ' => 'Ṣ', - 'ṥ' => 'Ṥ', - 'ṧ' => 'Ṧ', - 'ṩ' => 'Ṩ', - 'ṫ' => 'Ṫ', - 'ṭ' => 'Ṭ', - 'ṯ' => 'Ṯ', - 'ṱ' => 'Ṱ', - 'ṳ' => 'Ṳ', - 'ṵ' => 'Ṵ', - 'ṷ' => 'Ṷ', - 'ṹ' => 'Ṹ', - 'ṻ' => 'Ṻ', - 'ṽ' => 'Ṽ', - 'ṿ' => 'Ṿ', - 'ẁ' => 'Ẁ', - 'ẃ' => 'Ẃ', - 'ẅ' => 'Ẅ', - 'ẇ' => 'Ẇ', - 'ẉ' => 'Ẉ', - 'ẋ' => 'Ẋ', - 'ẍ' => 'Ẍ', - 'ẏ' => 'Ẏ', - 'ẑ' => 'Ẑ', - 'ẓ' => 'Ẓ', - 'ẕ' => 'Ẕ', - 'ẛ' => 'Ṡ', - 'ạ' => 'Ạ', - 'ả' => 'Ả', - 'ấ' => 'Ấ', - 'ầ' => 'Ầ', - 'ẩ' => 'Ẩ', - 'ẫ' => 'Ẫ', - 'ậ' => 'Ậ', - 'ắ' => 'Ắ', - 'ằ' => 'Ằ', - 'ẳ' => 'Ẳ', - 'ẵ' => 'Ẵ', - 'ặ' => 'Ặ', - 'ẹ' => 'Ẹ', - 'ẻ' => 'Ẻ', - 'ẽ' => 'Ẽ', - 'ế' => 'Ế', - 'ề' => 'Ề', - 'ể' => 'Ể', - 'ễ' => 'Ễ', - 'ệ' => 'Ệ', - 'ỉ' => 'Ỉ', - 'ị' => 'Ị', - 'ọ' => 'Ọ', - 'ỏ' => 'Ỏ', - 'ố' => 'Ố', - 'ồ' => 'Ồ', - 'ổ' => 'Ổ', - 'ỗ' => 'Ỗ', - 'ộ' => 'Ộ', - 'ớ' => 'Ớ', - 'ờ' => 'Ờ', - 'ở' => 'Ở', - 'ỡ' => 'Ỡ', - 'ợ' => 'Ợ', - 'ụ' => 'Ụ', - 'ủ' => 'Ủ', - 'ứ' => 'Ứ', - 'ừ' => 'Ừ', - 'ử' => 'Ử', - 'ữ' => 'Ữ', - 'ự' => 'Ự', - 'ỳ' => 'Ỳ', - 'ỵ' => 'Ỵ', - 'ỷ' => 'Ỷ', - 'ỹ' => 'Ỹ', - 'ỻ' => 'Ỻ', - 'ỽ' => 'Ỽ', - 'ỿ' => 'Ỿ', - 'ἀ' => 'Ἀ', - 'ἁ' => 'Ἁ', - 'ἂ' => 'Ἂ', - 'ἃ' => 'Ἃ', - 'ἄ' => 'Ἄ', - 'ἅ' => 'Ἅ', - 'ἆ' => 'Ἆ', - 'ἇ' => 'Ἇ', - 'ἐ' => 'Ἐ', - 'ἑ' => 'Ἑ', - 'ἒ' => 'Ἒ', - 'ἓ' => 'Ἓ', - 'ἔ' => 'Ἔ', - 'ἕ' => 'Ἕ', - 'ἠ' => 'Ἠ', - 'ἡ' => 'Ἡ', - 'ἢ' => 'Ἢ', - 'ἣ' => 'Ἣ', - 'ἤ' => 'Ἤ', - 'ἥ' => 'Ἥ', - 'ἦ' => 'Ἦ', - 'ἧ' => 'Ἧ', - 'ἰ' => 'Ἰ', - 'ἱ' => 'Ἱ', - 'ἲ' => 'Ἲ', - 'ἳ' => 'Ἳ', - 'ἴ' => 'Ἴ', - 'ἵ' => 'Ἵ', - 'ἶ' => 'Ἶ', - 'ἷ' => 'Ἷ', - 'ὀ' => 'Ὀ', - 'ὁ' => 'Ὁ', - 'ὂ' => 'Ὂ', - 'ὃ' => 'Ὃ', - 'ὄ' => 'Ὄ', - 'ὅ' => 'Ὅ', - 'ὑ' => 'Ὑ', - 'ὓ' => 'Ὓ', - 'ὕ' => 'Ὕ', - 'ὗ' => 'Ὗ', - 'ὠ' => 'Ὠ', - 'ὡ' => 'Ὡ', - 'ὢ' => 'Ὢ', - 'ὣ' => 'Ὣ', - 'ὤ' => 'Ὤ', - 'ὥ' => 'Ὥ', - 'ὦ' => 'Ὦ', - 'ὧ' => 'Ὧ', - 'ὰ' => 'Ὰ', - 'ά' => 'Ά', - 'ὲ' => 'Ὲ', - 'έ' => 'Έ', - 'ὴ' => 'Ὴ', - 'ή' => 'Ή', - 'ὶ' => 'Ὶ', - 'ί' => 'Ί', - 'ὸ' => 'Ὸ', - 'ό' => 'Ό', - 'ὺ' => 'Ὺ', - 'ύ' => 'Ύ', - 'ὼ' => 'Ὼ', - 'ώ' => 'Ώ', - 'ᾀ' => 'ᾈ', - 'ᾁ' => 'ᾉ', - 'ᾂ' => 'ᾊ', - 'ᾃ' => 'ᾋ', - 'ᾄ' => 'ᾌ', - 'ᾅ' => 'ᾍ', - 'ᾆ' => 'ᾎ', - 'ᾇ' => 'ᾏ', - 'ᾐ' => 'ᾘ', - 'ᾑ' => 'ᾙ', - 'ᾒ' => 'ᾚ', - 'ᾓ' => 'ᾛ', - 'ᾔ' => 'ᾜ', - 'ᾕ' => 'ᾝ', - 'ᾖ' => 'ᾞ', - 'ᾗ' => 'ᾟ', - 'ᾠ' => 'ᾨ', - 'ᾡ' => 'ᾩ', - 'ᾢ' => 'ᾪ', - 'ᾣ' => 'ᾫ', - 'ᾤ' => 'ᾬ', - 'ᾥ' => 'ᾭ', - 'ᾦ' => 'ᾮ', - 'ᾧ' => 'ᾯ', - 'ᾰ' => 'Ᾰ', - 'ᾱ' => 'Ᾱ', - 'ᾳ' => 'ᾼ', - 'ι' => 'Ι', - 'ῃ' => 'ῌ', - 'ῐ' => 'Ῐ', - 'ῑ' => 'Ῑ', - 'ῠ' => 'Ῠ', - 'ῡ' => 'Ῡ', - 'ῥ' => 'Ῥ', - 'ῳ' => 'ῼ', - 'ⅎ' => 'Ⅎ', - 'ⅰ' => 'Ⅰ', - 'ⅱ' => 'Ⅱ', - 'ⅲ' => 'Ⅲ', - 'ⅳ' => 'Ⅳ', - 'ⅴ' => 'Ⅴ', - 'ⅵ' => 'Ⅵ', - 'ⅶ' => 'Ⅶ', - 'ⅷ' => 'Ⅷ', - 'ⅸ' => 'Ⅸ', - 'ⅹ' => 'Ⅹ', - 'ⅺ' => 'Ⅺ', - 'ⅻ' => 'Ⅻ', - 'ⅼ' => 'Ⅼ', - 'ⅽ' => 'Ⅽ', - 'ⅾ' => 'Ⅾ', - 'ⅿ' => 'Ⅿ', - 'ↄ' => 'Ↄ', - 'ⓐ' => 'Ⓐ', - 'ⓑ' => 'Ⓑ', - 'ⓒ' => 'Ⓒ', - 'ⓓ' => 'Ⓓ', - 'ⓔ' => 'Ⓔ', - 'ⓕ' => 'Ⓕ', - 'ⓖ' => 'Ⓖ', - 'ⓗ' => 'Ⓗ', - 'ⓘ' => 'Ⓘ', - 'ⓙ' => 'Ⓙ', - 'ⓚ' => 'Ⓚ', - 'ⓛ' => 'Ⓛ', - 'ⓜ' => 'Ⓜ', - 'ⓝ' => 'Ⓝ', - 'ⓞ' => 'Ⓞ', - 'ⓟ' => 'Ⓟ', - 'ⓠ' => 'Ⓠ', - 'ⓡ' => 'Ⓡ', - 'ⓢ' => 'Ⓢ', - 'ⓣ' => 'Ⓣ', - 'ⓤ' => 'Ⓤ', - 'ⓥ' => 'Ⓥ', - 'ⓦ' => 'Ⓦ', - 'ⓧ' => 'Ⓧ', - 'ⓨ' => 'Ⓨ', - 'ⓩ' => 'Ⓩ', - 'ⰰ' => 'Ⰰ', - 'ⰱ' => 'Ⰱ', - 'ⰲ' => 'Ⰲ', - 'ⰳ' => 'Ⰳ', - 'ⰴ' => 'Ⰴ', - 'ⰵ' => 'Ⰵ', - 'ⰶ' => 'Ⰶ', - 'ⰷ' => 'Ⰷ', - 'ⰸ' => 'Ⰸ', - 'ⰹ' => 'Ⰹ', - 'ⰺ' => 'Ⰺ', - 'ⰻ' => 'Ⰻ', - 'ⰼ' => 'Ⰼ', - 'ⰽ' => 'Ⰽ', - 'ⰾ' => 'Ⰾ', - 'ⰿ' => 'Ⰿ', - 'ⱀ' => 'Ⱀ', - 'ⱁ' => 'Ⱁ', - 'ⱂ' => 'Ⱂ', - 'ⱃ' => 'Ⱃ', - 'ⱄ' => 'Ⱄ', - 'ⱅ' => 'Ⱅ', - 'ⱆ' => 'Ⱆ', - 'ⱇ' => 'Ⱇ', - 'ⱈ' => 'Ⱈ', - 'ⱉ' => 'Ⱉ', - 'ⱊ' => 'Ⱊ', - 'ⱋ' => 'Ⱋ', - 'ⱌ' => 'Ⱌ', - 'ⱍ' => 'Ⱍ', - 'ⱎ' => 'Ⱎ', - 'ⱏ' => 'Ⱏ', - 'ⱐ' => 'Ⱐ', - 'ⱑ' => 'Ⱑ', - 'ⱒ' => 'Ⱒ', - 'ⱓ' => 'Ⱓ', - 'ⱔ' => 'Ⱔ', - 'ⱕ' => 'Ⱕ', - 'ⱖ' => 'Ⱖ', - 'ⱗ' => 'Ⱗ', - 'ⱘ' => 'Ⱘ', - 'ⱙ' => 'Ⱙ', - 'ⱚ' => 'Ⱚ', - 'ⱛ' => 'Ⱛ', - 'ⱜ' => 'Ⱜ', - 'ⱝ' => 'Ⱝ', - 'ⱞ' => 'Ⱞ', - 'ⱡ' => 'Ⱡ', - 'ⱥ' => 'Ⱥ', - 'ⱦ' => 'Ⱦ', - 'ⱨ' => 'Ⱨ', - 'ⱪ' => 'Ⱪ', - 'ⱬ' => 'Ⱬ', - 'ⱳ' => 'Ⱳ', - 'ⱶ' => 'Ⱶ', - 'ⲁ' => 'Ⲁ', - 'ⲃ' => 'Ⲃ', - 'ⲅ' => 'Ⲅ', - 'ⲇ' => 'Ⲇ', - 'ⲉ' => 'Ⲉ', - 'ⲋ' => 'Ⲋ', - 'ⲍ' => 'Ⲍ', - 'ⲏ' => 'Ⲏ', - 'ⲑ' => 'Ⲑ', - 'ⲓ' => 'Ⲓ', - 'ⲕ' => 'Ⲕ', - 'ⲗ' => 'Ⲗ', - 'ⲙ' => 'Ⲙ', - 'ⲛ' => 'Ⲛ', - 'ⲝ' => 'Ⲝ', - 'ⲟ' => 'Ⲟ', - 'ⲡ' => 'Ⲡ', - 'ⲣ' => 'Ⲣ', - 'ⲥ' => 'Ⲥ', - 'ⲧ' => 'Ⲧ', - 'ⲩ' => 'Ⲩ', - 'ⲫ' => 'Ⲫ', - 'ⲭ' => 'Ⲭ', - 'ⲯ' => 'Ⲯ', - 'ⲱ' => 'Ⲱ', - 'ⲳ' => 'Ⲳ', - 'ⲵ' => 'Ⲵ', - 'ⲷ' => 'Ⲷ', - 'ⲹ' => 'Ⲹ', - 'ⲻ' => 'Ⲻ', - 'ⲽ' => 'Ⲽ', - 'ⲿ' => 'Ⲿ', - 'ⳁ' => 'Ⳁ', - 'ⳃ' => 'Ⳃ', - 'ⳅ' => 'Ⳅ', - 'ⳇ' => 'Ⳇ', - 'ⳉ' => 'Ⳉ', - 'ⳋ' => 'Ⳋ', - 'ⳍ' => 'Ⳍ', - 'ⳏ' => 'Ⳏ', - 'ⳑ' => 'Ⳑ', - 'ⳓ' => 'Ⳓ', - 'ⳕ' => 'Ⳕ', - 'ⳗ' => 'Ⳗ', - 'ⳙ' => 'Ⳙ', - 'ⳛ' => 'Ⳛ', - 'ⳝ' => 'Ⳝ', - 'ⳟ' => 'Ⳟ', - 'ⳡ' => 'Ⳡ', - 'ⳣ' => 'Ⳣ', - 'ⳬ' => 'Ⳬ', - 'ⳮ' => 'Ⳮ', - 'ⳳ' => 'Ⳳ', - 'ⴀ' => 'Ⴀ', - 'ⴁ' => 'Ⴁ', - 'ⴂ' => 'Ⴂ', - 'ⴃ' => 'Ⴃ', - 'ⴄ' => 'Ⴄ', - 'ⴅ' => 'Ⴅ', - 'ⴆ' => 'Ⴆ', - 'ⴇ' => 'Ⴇ', - 'ⴈ' => 'Ⴈ', - 'ⴉ' => 'Ⴉ', - 'ⴊ' => 'Ⴊ', - 'ⴋ' => 'Ⴋ', - 'ⴌ' => 'Ⴌ', - 'ⴍ' => 'Ⴍ', - 'ⴎ' => 'Ⴎ', - 'ⴏ' => 'Ⴏ', - 'ⴐ' => 'Ⴐ', - 'ⴑ' => 'Ⴑ', - 'ⴒ' => 'Ⴒ', - 'ⴓ' => 'Ⴓ', - 'ⴔ' => 'Ⴔ', - 'ⴕ' => 'Ⴕ', - 'ⴖ' => 'Ⴖ', - 'ⴗ' => 'Ⴗ', - 'ⴘ' => 'Ⴘ', - 'ⴙ' => 'Ⴙ', - 'ⴚ' => 'Ⴚ', - 'ⴛ' => 'Ⴛ', - 'ⴜ' => 'Ⴜ', - 'ⴝ' => 'Ⴝ', - 'ⴞ' => 'Ⴞ', - 'ⴟ' => 'Ⴟ', - 'ⴠ' => 'Ⴠ', - 'ⴡ' => 'Ⴡ', - 'ⴢ' => 'Ⴢ', - 'ⴣ' => 'Ⴣ', - 'ⴤ' => 'Ⴤ', - 'ⴥ' => 'Ⴥ', - 'ⴧ' => 'Ⴧ', - 'ⴭ' => 'Ⴭ', - 'ꙁ' => 'Ꙁ', - 'ꙃ' => 'Ꙃ', - 'ꙅ' => 'Ꙅ', - 'ꙇ' => 'Ꙇ', - 'ꙉ' => 'Ꙉ', - 'ꙋ' => 'Ꙋ', - 'ꙍ' => 'Ꙍ', - 'ꙏ' => 'Ꙏ', - 'ꙑ' => 'Ꙑ', - 'ꙓ' => 'Ꙓ', - 'ꙕ' => 'Ꙕ', - 'ꙗ' => 'Ꙗ', - 'ꙙ' => 'Ꙙ', - 'ꙛ' => 'Ꙛ', - 'ꙝ' => 'Ꙝ', - 'ꙟ' => 'Ꙟ', - 'ꙡ' => 'Ꙡ', - 'ꙣ' => 'Ꙣ', - 'ꙥ' => 'Ꙥ', - 'ꙧ' => 'Ꙧ', - 'ꙩ' => 'Ꙩ', - 'ꙫ' => 'Ꙫ', - 'ꙭ' => 'Ꙭ', - 'ꚁ' => 'Ꚁ', - 'ꚃ' => 'Ꚃ', - 'ꚅ' => 'Ꚅ', - 'ꚇ' => 'Ꚇ', - 'ꚉ' => 'Ꚉ', - 'ꚋ' => 'Ꚋ', - 'ꚍ' => 'Ꚍ', - 'ꚏ' => 'Ꚏ', - 'ꚑ' => 'Ꚑ', - 'ꚓ' => 'Ꚓ', - 'ꚕ' => 'Ꚕ', - 'ꚗ' => 'Ꚗ', - 'ꚙ' => 'Ꚙ', - 'ꚛ' => 'Ꚛ', - 'ꜣ' => 'Ꜣ', - 'ꜥ' => 'Ꜥ', - 'ꜧ' => 'Ꜧ', - 'ꜩ' => 'Ꜩ', - 'ꜫ' => 'Ꜫ', - 'ꜭ' => 'Ꜭ', - 'ꜯ' => 'Ꜯ', - 'ꜳ' => 'Ꜳ', - 'ꜵ' => 'Ꜵ', - 'ꜷ' => 'Ꜷ', - 'ꜹ' => 'Ꜹ', - 'ꜻ' => 'Ꜻ', - 'ꜽ' => 'Ꜽ', - 'ꜿ' => 'Ꜿ', - 'ꝁ' => 'Ꝁ', - 'ꝃ' => 'Ꝃ', - 'ꝅ' => 'Ꝅ', - 'ꝇ' => 'Ꝇ', - 'ꝉ' => 'Ꝉ', - 'ꝋ' => 'Ꝋ', - 'ꝍ' => 'Ꝍ', - 'ꝏ' => 'Ꝏ', - 'ꝑ' => 'Ꝑ', - 'ꝓ' => 'Ꝓ', - 'ꝕ' => 'Ꝕ', - 'ꝗ' => 'Ꝗ', - 'ꝙ' => 'Ꝙ', - 'ꝛ' => 'Ꝛ', - 'ꝝ' => 'Ꝝ', - 'ꝟ' => 'Ꝟ', - 'ꝡ' => 'Ꝡ', - 'ꝣ' => 'Ꝣ', - 'ꝥ' => 'Ꝥ', - 'ꝧ' => 'Ꝧ', - 'ꝩ' => 'Ꝩ', - 'ꝫ' => 'Ꝫ', - 'ꝭ' => 'Ꝭ', - 'ꝯ' => 'Ꝯ', - 'ꝺ' => 'Ꝺ', - 'ꝼ' => 'Ꝼ', - 'ꝿ' => 'Ꝿ', - 'ꞁ' => 'Ꞁ', - 'ꞃ' => 'Ꞃ', - 'ꞅ' => 'Ꞅ', - 'ꞇ' => 'Ꞇ', - 'ꞌ' => 'Ꞌ', - 'ꞑ' => 'Ꞑ', - 'ꞓ' => 'Ꞓ', - 'ꞗ' => 'Ꞗ', - 'ꞙ' => 'Ꞙ', - 'ꞛ' => 'Ꞛ', - 'ꞝ' => 'Ꞝ', - 'ꞟ' => 'Ꞟ', - 'ꞡ' => 'Ꞡ', - 'ꞣ' => 'Ꞣ', - 'ꞥ' => 'Ꞥ', - 'ꞧ' => 'Ꞧ', - 'ꞩ' => 'Ꞩ', - 'a' => 'A', - 'b' => 'B', - 'c' => 'C', - 'd' => 'D', - 'e' => 'E', - 'f' => 'F', - 'g' => 'G', - 'h' => 'H', - 'i' => 'I', - 'j' => 'J', - 'k' => 'K', - 'l' => 'L', - 'm' => 'M', - 'n' => 'N', - 'o' => 'O', - 'p' => 'P', - 'q' => 'Q', - 'r' => 'R', - 's' => 'S', - 't' => 'T', - 'u' => 'U', - 'v' => 'V', - 'w' => 'W', - 'x' => 'X', - 'y' => 'Y', - 'z' => 'Z', - '𐐨' => '𐐀', - '𐐩' => '𐐁', - '𐐪' => '𐐂', - '𐐫' => '𐐃', - '𐐬' => '𐐄', - '𐐭' => '𐐅', - '𐐮' => '𐐆', - '𐐯' => '𐐇', - '𐐰' => '𐐈', - '𐐱' => '𐐉', - '𐐲' => '𐐊', - '𐐳' => '𐐋', - '𐐴' => '𐐌', - '𐐵' => '𐐍', - '𐐶' => '𐐎', - '𐐷' => '𐐏', - '𐐸' => '𐐐', - '𐐹' => '𐐑', - '𐐺' => '𐐒', - '𐐻' => '𐐓', - '𐐼' => '𐐔', - '𐐽' => '𐐕', - '𐐾' => '𐐖', - '𐐿' => '𐐗', - '𐑀' => '𐐘', - '𐑁' => '𐐙', - '𐑂' => '𐐚', - '𐑃' => '𐐛', - '𐑄' => '𐐜', - '𐑅' => '𐐝', - '𐑆' => '𐐞', - '𐑇' => '𐐟', - '𐑈' => '𐐠', - '𐑉' => '𐐡', - '𐑊' => '𐐢', - '𐑋' => '𐐣', - '𐑌' => '𐐤', - '𐑍' => '𐐥', - '𐑎' => '𐐦', - '𐑏' => '𐐧', - '𑣀' => '𑢠', - '𑣁' => '𑢡', - '𑣂' => '𑢢', - '𑣃' => '𑢣', - '𑣄' => '𑢤', - '𑣅' => '𑢥', - '𑣆' => '𑢦', - '𑣇' => '𑢧', - '𑣈' => '𑢨', - '𑣉' => '𑢩', - '𑣊' => '𑢪', - '𑣋' => '𑢫', - '𑣌' => '𑢬', - '𑣍' => '𑢭', - '𑣎' => '𑢮', - '𑣏' => '𑢯', - '𑣐' => '𑢰', - '𑣑' => '𑢱', - '𑣒' => '𑢲', - '𑣓' => '𑢳', - '𑣔' => '𑢴', - '𑣕' => '𑢵', - '𑣖' => '𑢶', - '𑣗' => '𑢷', - '𑣘' => '𑢸', - '𑣙' => '𑢹', - '𑣚' => '𑢺', - '𑣛' => '𑢻', - '𑣜' => '𑢼', - '𑣝' => '𑢽', - '𑣞' => '𑢾', - '𑣟' => '𑢿', -); diff --git a/lib/vendor/symfony/polyfill-mbstring/bootstrap.php b/lib/vendor/symfony/polyfill-mbstring/bootstrap.php deleted file mode 100644 index b36a092..0000000 --- a/lib/vendor/symfony/polyfill-mbstring/bootstrap.php +++ /dev/null @@ -1,141 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Mbstring as p; - -if (!function_exists('mb_convert_encoding')) { - function mb_convert_encoding($s, $to, $from = null) { return p\Mbstring::mb_convert_encoding($s, $to, $from); } -} -if (!function_exists('mb_decode_mimeheader')) { - function mb_decode_mimeheader($s) { return p\Mbstring::mb_decode_mimeheader($s); } -} -if (!function_exists('mb_encode_mimeheader')) { - function mb_encode_mimeheader($s, $charset = null, $transferEnc = null, $lf = null, $indent = null) { return p\Mbstring::mb_encode_mimeheader($s, $charset, $transferEnc, $lf, $indent); } -} -if (!function_exists('mb_decode_numericentity')) { - function mb_decode_numericentity($s, $convmap, $enc = null) { return p\Mbstring::mb_decode_numericentity($s, $convmap, $enc); } -} -if (!function_exists('mb_encode_numericentity')) { - function mb_encode_numericentity($s, $convmap, $enc = null, $is_hex = false) { return p\Mbstring::mb_encode_numericentity($s, $convmap, $enc, $is_hex); } -} -if (!function_exists('mb_convert_case')) { - function mb_convert_case($s, $mode, $enc = null) { return p\Mbstring::mb_convert_case($s, $mode, $enc); } -} -if (!function_exists('mb_internal_encoding')) { - function mb_internal_encoding($enc = null) { return p\Mbstring::mb_internal_encoding($enc); } -} -if (!function_exists('mb_language')) { - function mb_language($lang = null) { return p\Mbstring::mb_language($lang); } -} -if (!function_exists('mb_list_encodings')) { - function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); } -} -if (!function_exists('mb_encoding_aliases')) { - function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); } -} -if (!function_exists('mb_check_encoding')) { - function mb_check_encoding($var = null, $encoding = null) { return p\Mbstring::mb_check_encoding($var, $encoding); } -} -if (!function_exists('mb_detect_encoding')) { - function mb_detect_encoding($str, $encodingList = null, $strict = false) { return p\Mbstring::mb_detect_encoding($str, $encodingList, $strict); } -} -if (!function_exists('mb_detect_order')) { - function mb_detect_order($encodingList = null) { return p\Mbstring::mb_detect_order($encodingList); } -} -if (!function_exists('mb_parse_str')) { - function mb_parse_str($s, &$result = array()) { parse_str($s, $result); } -} -if (!function_exists('mb_strlen')) { - function mb_strlen($s, $enc = null) { return p\Mbstring::mb_strlen($s, $enc); } -} -if (!function_exists('mb_strpos')) { - function mb_strpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strpos($s, $needle, $offset, $enc); } -} -if (!function_exists('mb_strtolower')) { - function mb_strtolower($s, $enc = null) { return p\Mbstring::mb_strtolower($s, $enc); } -} -if (!function_exists('mb_strtoupper')) { - function mb_strtoupper($s, $enc = null) { return p\Mbstring::mb_strtoupper($s, $enc); } -} -if (!function_exists('mb_substitute_character')) { - function mb_substitute_character($char = null) { return p\Mbstring::mb_substitute_character($char); } -} -if (!function_exists('mb_substr')) { - function mb_substr($s, $start, $length = 2147483647, $enc = null) { return p\Mbstring::mb_substr($s, $start, $length, $enc); } -} -if (!function_exists('mb_stripos')) { - function mb_stripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_stripos($s, $needle, $offset, $enc); } -} -if (!function_exists('mb_stristr')) { - function mb_stristr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_stristr($s, $needle, $part, $enc); } -} -if (!function_exists('mb_strrchr')) { - function mb_strrchr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrchr($s, $needle, $part, $enc); } -} -if (!function_exists('mb_strrichr')) { - function mb_strrichr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrichr($s, $needle, $part, $enc); } -} -if (!function_exists('mb_strripos')) { - function mb_strripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strripos($s, $needle, $offset, $enc); } -} -if (!function_exists('mb_strrpos')) { - function mb_strrpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strrpos($s, $needle, $offset, $enc); } -} -if (!function_exists('mb_strstr')) { - function mb_strstr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strstr($s, $needle, $part, $enc); } -} -if (!function_exists('mb_get_info')) { - function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); } -} -if (!function_exists('mb_http_output')) { - function mb_http_output($enc = null) { return p\Mbstring::mb_http_output($enc); } -} -if (!function_exists('mb_strwidth')) { - function mb_strwidth($s, $enc = null) { return p\Mbstring::mb_strwidth($s, $enc); } -} -if (!function_exists('mb_substr_count')) { - function mb_substr_count($haystack, $needle, $enc = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $enc); } -} -if (!function_exists('mb_output_handler')) { - function mb_output_handler($contents, $status) { return p\Mbstring::mb_output_handler($contents, $status); } -} -if (!function_exists('mb_http_input')) { - function mb_http_input($type = '') { return p\Mbstring::mb_http_input($type); } -} -if (!function_exists('mb_convert_variables')) { - function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) { return p\Mbstring::mb_convert_variables($toEncoding, $fromEncoding, $a, $b, $c, $d, $e, $f); } -} -if (!function_exists('mb_ord')) { - function mb_ord($s, $enc = null) { return p\Mbstring::mb_ord($s, $enc); } -} -if (!function_exists('mb_chr')) { - function mb_chr($code, $enc = null) { return p\Mbstring::mb_chr($code, $enc); } -} -if (!function_exists('mb_scrub')) { - function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); } -} -if (!function_exists('mb_str_split')) { - function mb_str_split($string, $split_length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $split_length, $encoding); } -} - -if (extension_loaded('mbstring')) { - return; -} - -if (!defined('MB_CASE_UPPER')) { - define('MB_CASE_UPPER', 0); -} -if (!defined('MB_CASE_LOWER')) { - define('MB_CASE_LOWER', 1); -} -if (!defined('MB_CASE_TITLE')) { - define('MB_CASE_TITLE', 2); -} diff --git a/lib/vendor/symfony/polyfill-mbstring/composer.json b/lib/vendor/symfony/polyfill-mbstring/composer.json deleted file mode 100644 index d3dcc24..0000000 --- a/lib/vendor/symfony/polyfill-mbstring/composer.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "symfony/polyfill-mbstring", - "type": "library", - "description": "Symfony polyfill for the Mbstring extension", - "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=5.3.3" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - } -} diff --git a/lib/vendor/symfony/polyfill-php72/LICENSE b/lib/vendor/symfony/polyfill-php72/LICENSE deleted file mode 100644 index 4cd8bdd..0000000 --- a/lib/vendor/symfony/polyfill-php72/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015-2019 Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/vendor/symfony/polyfill-php72/Php72.php b/lib/vendor/symfony/polyfill-php72/Php72.php deleted file mode 100644 index 9b3edc7..0000000 --- a/lib/vendor/symfony/polyfill-php72/Php72.php +++ /dev/null @@ -1,217 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php72; - -/** - * @author Nicolas Grekas - * @author Dariusz Rumiński - * - * @internal - */ -final class Php72 -{ - private static $hashMask; - - public static function utf8_encode($s) - { - $s .= $s; - $len = \strlen($s); - - for ($i = $len >> 1, $j = 0; $i < $len; ++$i, ++$j) { - switch (true) { - case $s[$i] < "\x80": $s[$j] = $s[$i]; break; - case $s[$i] < "\xC0": $s[$j] = "\xC2"; $s[++$j] = $s[$i]; break; - default: $s[$j] = "\xC3"; $s[++$j] = \chr(\ord($s[$i]) - 64); break; - } - } - - return substr($s, 0, $j); - } - - public static function utf8_decode($s) - { - $s = (string) $s; - $len = \strlen($s); - - for ($i = 0, $j = 0; $i < $len; ++$i, ++$j) { - switch ($s[$i] & "\xF0") { - case "\xC0": - case "\xD0": - $c = (\ord($s[$i] & "\x1F") << 6) | \ord($s[++$i] & "\x3F"); - $s[$j] = $c < 256 ? \chr($c) : '?'; - break; - - case "\xF0": - ++$i; - // no break - - case "\xE0": - $s[$j] = '?'; - $i += 2; - break; - - default: - $s[$j] = $s[$i]; - } - } - - return substr($s, 0, $j); - } - - public static function php_os_family() - { - if ('\\' === \DIRECTORY_SEPARATOR) { - return 'Windows'; - } - - $map = array( - 'Darwin' => 'Darwin', - 'DragonFly' => 'BSD', - 'FreeBSD' => 'BSD', - 'NetBSD' => 'BSD', - 'OpenBSD' => 'BSD', - 'Linux' => 'Linux', - 'SunOS' => 'Solaris', - ); - - return isset($map[PHP_OS]) ? $map[PHP_OS] : 'Unknown'; - } - - public static function spl_object_id($object) - { - if (null === self::$hashMask) { - self::initHashMask(); - } - if (null === $hash = spl_object_hash($object)) { - return; - } - - // On 32-bit systems, PHP_INT_SIZE is 4, - return self::$hashMask ^ hexdec(substr($hash, 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1))); - } - - public static function sapi_windows_vt100_support($stream, $enable = null) - { - if (!\is_resource($stream)) { - trigger_error('sapi_windows_vt100_support() expects parameter 1 to be resource, '.\gettype($stream).' given', E_USER_WARNING); - - return false; - } - - $meta = stream_get_meta_data($stream); - - if ('STDIO' !== $meta['stream_type']) { - trigger_error('sapi_windows_vt100_support() was not able to analyze the specified stream', E_USER_WARNING); - - return false; - } - - // We cannot actually disable vt100 support if it is set - if (false === $enable || !self::stream_isatty($stream)) { - return false; - } - - // The native function does not apply to stdin - $meta = array_map('strtolower', $meta); - $stdin = 'php://stdin' === $meta['uri'] || 'php://fd/0' === $meta['uri']; - - return !$stdin - && (false !== getenv('ANSICON') - || 'ON' === getenv('ConEmuANSI') - || 'xterm' === getenv('TERM') - || 'Hyper' === getenv('TERM_PROGRAM')); - } - - public static function stream_isatty($stream) - { - if (!\is_resource($stream)) { - trigger_error('stream_isatty() expects parameter 1 to be resource, '.\gettype($stream).' given', E_USER_WARNING); - - return false; - } - - if ('\\' === \DIRECTORY_SEPARATOR) { - $stat = @fstat($stream); - // Check if formatted mode is S_IFCHR - return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; - } - - return \function_exists('posix_isatty') && @posix_isatty($stream); - } - - private static function initHashMask() - { - $obj = (object) array(); - self::$hashMask = -1; - - // check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below - $obFuncs = array('ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush'); - foreach (debug_backtrace(\PHP_VERSION_ID >= 50400 ? DEBUG_BACKTRACE_IGNORE_ARGS : false) as $frame) { - if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0] && \in_array($frame['function'], $obFuncs)) { - $frame['line'] = 0; - break; - } - } - if (!empty($frame['line'])) { - ob_start(); - debug_zval_dump($obj); - self::$hashMask = (int) substr(ob_get_clean(), 17); - } - - self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1))); - } - - public static function mb_chr($code, $encoding = null) - { - if (0x80 > $code %= 0x200000) { - $s = \chr($code); - } elseif (0x800 > $code) { - $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); - } elseif (0x10000 > $code) { - $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); - } else { - $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); - } - - if ('UTF-8' !== $encoding) { - $s = mb_convert_encoding($s, $encoding, 'UTF-8'); - } - - return $s; - } - - public static function mb_ord($s, $encoding = null) - { - if (null == $encoding) { - $s = mb_convert_encoding($s, 'UTF-8'); - } elseif ('UTF-8' !== $encoding) { - $s = mb_convert_encoding($s, 'UTF-8', $encoding); - } - - if (1 === \strlen($s)) { - return \ord($s); - } - - $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; - if (0xF0 <= $code) { - return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; - } - if (0xE0 <= $code) { - return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; - } - if (0xC0 <= $code) { - return (($code - 0xC0) << 6) + $s[2] - 0x80; - } - - return $code; - } -} diff --git a/lib/vendor/symfony/polyfill-php72/README.md b/lib/vendor/symfony/polyfill-php72/README.md deleted file mode 100644 index 59dec8a..0000000 --- a/lib/vendor/symfony/polyfill-php72/README.md +++ /dev/null @@ -1,28 +0,0 @@ -Symfony Polyfill / Php72 -======================== - -This component provides functions added to PHP 7.2 core: - -- [`spl_object_id`](https://php.net/spl_object_id) -- [`stream_isatty`](https://php.net/stream_isatty) - -On Windows only: - -- [`sapi_windows_vt100_support`](https://php.net/sapi_windows_vt100_support) - -Moved to core since 7.2 (was in the optional XML extension earlier): - -- [`utf8_encode`](https://php.net/utf8_encode) -- [`utf8_decode`](https://php.net/utf8_decode) - -Also, it provides constants added to PHP 7.2: -- [`PHP_FLOAT_*`](https://php.net/reserved.constants#constant.php-float-dig) -- [`PHP_OS_FAMILY`](https://php.net/reserved.constants#constant.php-os-family) - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/lib/vendor/symfony/polyfill-php72/bootstrap.php b/lib/vendor/symfony/polyfill-php72/bootstrap.php deleted file mode 100644 index a27a900..0000000 --- a/lib/vendor/symfony/polyfill-php72/bootstrap.php +++ /dev/null @@ -1,57 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Php72 as p; - -if (PHP_VERSION_ID >= 70200) { - return; -} - -if (!defined('PHP_FLOAT_DIG')) { - define('PHP_FLOAT_DIG', 15); -} -if (!defined('PHP_FLOAT_EPSILON')) { - define('PHP_FLOAT_EPSILON', 2.2204460492503E-16); -} -if (!defined('PHP_FLOAT_MIN')) { - define('PHP_FLOAT_MIN', 2.2250738585072E-308); -} -if (!defined('PHP_FLOAT_MAX')) { - define('PHP_FLOAT_MAX', 1.7976931348623157E+308); -} -if (!defined('PHP_OS_FAMILY')) { - define('PHP_OS_FAMILY', p\Php72::php_os_family()); -} - -if ('\\' === DIRECTORY_SEPARATOR && !function_exists('sapi_windows_vt100_support')) { - function sapi_windows_vt100_support($stream, $enable = null) { return p\Php72::sapi_windows_vt100_support($stream, $enable); } -} -if (!function_exists('stream_isatty')) { - function stream_isatty($stream) { return p\Php72::stream_isatty($stream); } -} -if (!function_exists('utf8_encode')) { - function utf8_encode($s) { return p\Php72::utf8_encode($s); } -} -if (!function_exists('utf8_decode')) { - function utf8_decode($s) { return p\Php72::utf8_decode($s); } -} -if (!function_exists('spl_object_id')) { - function spl_object_id($s) { return p\Php72::spl_object_id($s); } -} -if (!function_exists('mb_ord')) { - function mb_ord($s, $enc = null) { return p\Php72::mb_ord($s, $enc); } -} -if (!function_exists('mb_chr')) { - function mb_chr($code, $enc = null) { return p\Php72::mb_chr($code, $enc); } -} -if (!function_exists('mb_scrub')) { - function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); } -} diff --git a/lib/vendor/symfony/polyfill-php72/composer.json b/lib/vendor/symfony/polyfill-php72/composer.json deleted file mode 100644 index 314d713..0000000 --- a/lib/vendor/symfony/polyfill-php72/composer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "symfony/polyfill-php72", - "type": "library", - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "keywords": ["polyfill", "shim", "compatibility", "portable"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=5.3.3" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php72\\": "" }, - "files": [ "bootstrap.php" ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "1.17-dev" - } - } -}