commit 136e1459b7ce71afd6c132e93f02cb98a4931346 Author: Rob Canning Date: Wed Dec 6 12:05:01 2023 +0100 moving old projects from cold storage to git for possible revival diff --git a/INSTALL b/INSTALL new file mode 100755 index 0000000..7b2d173 --- /dev/null +++ b/INSTALL @@ -0,0 +1,58 @@ +////////////////////////////////// +// NODESCORE SERVER INSTALLATION +////////////////////////////////// + +// installation for server running +// debian stable or testing OS +// other systems see here: +// https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager + +////////////////////////////////// + +////////////////////////////////// +// get nodejs dependencies + +apt-get update +apt-get install git-core curl build-essential openssl libssl-dev + +////////////////////////////////// +// grab and compile from source + +mkdir -p /tmp/build/node && cd /tmp/build/node +git clone https://github.com/joyent/node.git . +git checkout v0.8.0 + +./configure --openssl-libpath=/usr/lib/ssl +make +make test +make install +node -v + +////////////////////////////////// +// server side thumnail dependencies +phantomjs +imagemagick + + +//aptitude install python-qt4 libqt4-webkit python-pip +//aptitude install xvfb xbase-clients xfonts-base libgtk2.0-0 + +// get nodescore dependencies + + +// the node_modules dir should life in the require.path +// ~/ + +npm config set registry http://registry.npmjs.org/ +sudo npm install socket.io socket.io-client node-osc osc-min jspack zeparser jsdom jquery xmlhttprequest requirejs express errorhandler method-override +sudo npm -g install supervisor +////////////////////////////////// +// get nodescore + +git clone git://gitorious.org/nodescore/nodescore.git nodescore + +////////////////////////////////// +//start server + +cd nodescore +node nodescore.js diff --git a/LICENCE b/LICENCE new file mode 100755 index 0000000..d8e65d1 --- /dev/null +++ b/LICENCE @@ -0,0 +1,685 @@ +//////////////////////////////////////////////////////////////////// + +Unless otherwise indicated all the code in these subdirectories is +released under the GNU General Public License. A copy of this license +is included below as well as in the main .pdf document. + + Rob Canning 2017 + +//////////////////////////////////////////////////////////////////// + + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100755 index 0000000..8f7100a --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +## Parallaxis Scrolling Score Server + +A scrolling score framework using html5 css javascript + +## About + +The Parallax Scrolling Score Server (PSSS) is a networked score play-out system targeted at human performers who interpret notational instructions from the web-browser. It is a multi-nodal server managed network with each performer’s browser a node, these scores are tightly synchronised with one another over the network using real-time web technologies. Written as a web application, no special software is needed to use the screen score it will run in any standards-compliant web browser (Canning, 2012b). The score may optionally be projected and visible to both audience and performers but each member of the ensemble needs a laptop, tablet or touch-screen monitor placed on a music stand to allow them access to the control parameters of the score during performance. + +## Live Version +- http://parallaxis.kiben.net/index.html + +## Code: + +- https://git.kiben.net/rc/parallaxis.git + +## Audio Examples + +- https://archive.org/details/ParallaxisForFourInstrumentsAndElectronics +- https://archive.org/details/ParallaxisDigitalScoreEnsemble +- https://archive.org/details/ParallaxisNetworkMusicFestival2014 + +## Installation Notes \ No newline at end of file diff --git a/chronometer.js b/chronometer.js new file mode 100755 index 0000000..5b5cb8c --- /dev/null +++ b/chronometer.js @@ -0,0 +1,53 @@ +//////////////////////////////////////////// +// Chronometer +//////////////////////////////////////////// + +// number padding: 0 to 00 +function pad(number) { return (number < 10 ? '0' : '') + number } + +function xdateTime() { + var xdatetime= new Date(); + var now=xdatetime.toString() + return now +} + + +// the chronometer initial states +function zeroChron(){ + zecsec = 0; seconds = 0; + mins = 0; hours = 0; + zero = pad(hours) +":"+pad(mins)+ ':'+ pad(seconds) + chron = zero + return zero +} + +zeroChron() + +/* +function chronCtrl (state,interval){ + console.log("=========================== chronstate=" + state) + if (state==1){ + var date = new Date() + var starttime = new Date().getTime() / 1000; + //var interval = 1020 - date.getMilliseconds(); + xstopwatch = setInterval(function () { + var nowtime = new Date().getTime() / 1000; + now = nowtime-starttime + hours = parseInt( now / 3600 ) % 24; + minutes = parseInt( now / 60 ) % 60; + seconds = parseInt(now % 60); + milliseconds = Math.floor((now-seconds)*10)%60; + time = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds) + "."+milliseconds; + console.log(time) +// socket.broadcast.emit('chronFromServer', time) +// socket.emit('chronFromServer', time) + }, 100) + } + if (state==0) { + clearInterval(xstopwatch); + } + } +*/ +//exports.chronCtrl = chronCtrl; +exports.xdateTime = xdateTime; +exports.zeroChron = zeroChron; diff --git a/duo/assets/README b/duo/assets/README new file mode 100755 index 0000000..e69de29 diff --git a/duo/assets/scoreparts/png/README b/duo/assets/scoreparts/png/README new file mode 100755 index 0000000..e69de29 diff --git a/duo/assets/source/README b/duo/assets/source/README new file mode 100755 index 0000000..e69de29 diff --git a/duo/assets/source/parallaxis-masterworkingscore.svg b/duo/assets/source/parallaxis-masterworkingscore.svg new file mode 100755 index 0000000..e006fd1 --- /dev/null +++ b/duo/assets/source/parallaxis-masterworkingscore.svg @@ -0,0 +1,39967 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ð„š + + + ð„š + + + ð„š + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ppp + p + pp + f + + + + + + + + + + + pp + + + + + + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + + + + + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/duo/client.html b/duo/client.html new file mode 100755 index 0000000..58f9dae --- /dev/null +++ b/duo/client.html @@ -0,0 +1,145 @@ + + + + Parallaxis + + + + + + + + + + +
+ +
+ +
+ + +
+
+

PARALLAXIS

+

IN FOUR PARTS

+

rc@kiben.net 2012

+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+
+
+
+ +
+ +
+ + +
+ +
00:00:00
+ + + +
+
X
+

Keyboard Controls

+ SPACEBAR = play from start +
. = pause +
, = resume +
click on playzone will also pause part +
1 2 3 4 = keydown to pause parts and key upto resume +
- + = global slower/faster 10% +
[ ] = preview back/forward (paused) + +
h = this help panel +
s = settings panel +
+ +
+
X
+ +

Control Panel

+ Speed (2 double - 0.5 half)
+ + LAN Server IP
+ OSC Port A (Ardour Tranport)
+ OSC Port B (Realtime FX Parameters)
+ OSC Port C (Playback Locations)
+ OSCgroups server
+
+ + + +
+ + +
+ + + + + + diff --git a/duo/images/parallaxis.svg b/duo/images/parallaxis.svg new file mode 100755 index 0000000..ed930d2 --- /dev/null +++ b/duo/images/parallaxis.svg @@ -0,0 +1,33111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ð„š + + + ð„š + + + ð„š + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + î„î„œ + + + + + + + pp + pp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pp + pp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mp + pp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pp + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mf + + + + + + + + + + + + + + + + + + + + + + + + + + + + pp + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ppp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pp + + + + + + + + pp + pp + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pp + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + + + + + + + + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + + + + + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + pp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pp + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mf + + + + + + + + + + + + + + + + + + + + + + + + + + + + pp + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ppp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pp + + + + + + + + + + + + + + + + + + + + + + pp + pp + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + pp + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mp + + + + diff --git a/duo/index.html b/duo/index.html new file mode 100755 index 0000000..efed8c5 --- /dev/null +++ b/duo/index.html @@ -0,0 +1,156 @@ + + + + Parallaxis + + + + + + + + + + +
+ +
+ +
-
+
-
+
-
+
-
+ +
+
+
+
+
+
+
+
+ +
+ + +
+
+

PARALLAXIS

+

IN FOUR PARTS

+

rc@kiben.net 2012

+ +
+

+ hit [SPACE] to start... +

+
+ + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+
+
+
+ +
+ +
+ + +
+ +
00:00:00
+ + + +
+
X
+

Keyboard Controls

+ SPACEBAR = play from start +
. = pause +
, = resume +
click on playzone will also pause part +
1 2 3 4 = keydown to pause parts and key upto resume +
- + = global slower/faster 10% +
[ ] = preview back/forward (paused) + +
h = this help panel +
s = settings panel +
+ +
+
X
+ +

Control Panel

+ Speed (2 double - 0.5 half)
+ + LAN Server IP
+ OSC Port A (Ardour Tranport)
+ OSC Port B (Realtime FX Parameters)
+ OSC Port C (Playback Locations)
+ OSCgroups server
+
+ + + +
+ + +
+ + + + + + diff --git a/duo/js/TimelineLite.min.js b/duo/js/TimelineLite.min.js new file mode 100755 index 0000000..fa43058 --- /dev/null +++ b/duo/js/TimelineLite.min.js @@ -0,0 +1,30 @@ +/** + * VERSION: beta 1.641 + * DATE: 2012-11-08 + * JavaScript (ActionScript 3 and 2 also available) + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + **/ +(window._gsQueue||(window._gsQueue=[])).push(function(){_gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(m,j,g){var h=function(b){j.call(this,b);this._labels={};this.autoRemoveChildren=!0==this.vars.autoRemoveChildren;this.smoothChildTiming=!0==this.vars.smoothChildTiming;this._sortChildren=!0;this._onUpdate=this.vars.onUpdate;for(var b=n.length,c,a;-1<--b;)if(a=this.vars[n[b]])for(c=a.length;-1<--c;)"{self}"===a[c]&&(a=this.vars[n[b]]=a.concat(),a[c]=this);this.vars.tweens instanceof +Array&&this.insertMultiple(this.vars.tweens,0,this.vars.align||"normal",this.vars.stagger||0)},n=["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams","onRepeatParams"],p=[],q=function(b){var c={},a;for(a in b)c[a]=b[a];return c},d=h.prototype=new j;h.version=1.641;d.constructor=h;d.kill()._gc=!1;d.to=function(b,c,a,f,e){return this.insert(new g(b,c,a),this._parseTimeOrLabel(e,f,!0))};d.from=function(b,c,a,f,e){return this.insert(g.from(b,c,a),this._parseTimeOrLabel(e,f,!0))}; +d.fromTo=function(b,c,a,f,e,d){return this.insert(g.fromTo(b,c,a,f),this._parseTimeOrLabel(d,e,!0))};d.staggerTo=function(b,c,a,f,e,d,i,k,r){i=new h({onComplete:i,onCompleteParams:k,onCompleteScope:r});f=f||0;for(k=0;k=f){this._totalTime=this._time=f;if(!this._reversed&&!this._hasPausedChild()&&(h=!0,l="onComplete",0===this._duration&&(0===b||0>this._rawPrevTime)))this._rawPrevTime!==b&&(a=!0);this._rawPrevTime=b;b=f+1E-6}else if(0>=b){this._totalTime=this._time=0;if(0!==e||0===this._duration&&0b?(this._active=!1,0===this._duration&&0<=this._rawPrevTime&&(a=!0)):this._initted||(a=!0);this._rawPrevTime=b;b=-1E-6}else this._totalTime=this._time=this._rawPrevTime= +b;if(this._time!==e||a){this._initted||(this._initted=!0);0===e&&this.vars.onStart&&0!==this._time&&(c||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||p));if(this._time>e)for(a=this._first;a;){j=a._next;if(this._paused&&!g)break;else if(a._active||a._startTime<=this._time&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())-(b-a._startTime)*a._timeScale,c,!1):a.render((b-a._startTime)*a._timeScale,c,!1);a=j}else for(a=this._last;a;){j= +a._prev;if(this._paused&&!g)break;else if(a._active||a._startTime<=e&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())-(b-a._startTime)*a._timeScale,c,!1):a.render((b-a._startTime)*a._timeScale,c,!1);a=j}this._onUpdate&&(c||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||p));if(l&&!this._gc&&(d===this._startTime||i!=this._timeScale))if(0===this._time||f>=this.totalDuration())h&&(this._timeline.autoRemoveChildren&&this._enabled(!1, +!1),this._active=!1),c||this.vars[l]&&this.vars[l].apply(this.vars[l+"Scope"]||this,this.vars[l+"Params"]||p)}};d._hasPausedChild=function(){for(var b=this._first;b;){if(b._paused||b instanceof h&&b._hasPausedChild())return!0;b=b._next}return!1};d.getChildren=function(b,c,a,f){for(var f=f||-9999999999,e=[],d=this._first,i=0;d;)d._startTime=a&&(d._startTime+=b),d=d._next;if(c)for(var e in this._labels)this._labels[e]>=a&&(this._labels[e]+=b);return this._uncache(!0)};d._kill=function(b,c){if(null==b&&null==c)return this._enabled(!1,!1);for(var a=null==c?this.getChildren(!0, +!0,!1):this.getTweensOf(c),d=a.length,e=!1;-1<--d;)a[d]._kill(b,c)&&(e=!0);return e};d.clear=function(b){var c=this.getChildren(!1,!0,!0),a=c.length;for(this._time=this._totalTime=0;-1<--a;)c[a]._enabled(!1,!1);!1!=b&&(this._labels={});return this._uncache(!0)};d.invalidate=function(){for(var b=this._first;b;)b.invalidate(),b=b._next;return this};d._enabled=function(b,c){if(b===this._gc)for(var a=this._first;a;)a._enabled(b,!0),a=a._next;return j.prototype._enabled.call(this,b,c)};d.progress=function(b){return!arguments.length? +this._time/this.duration():this.totalTime(this.duration()*b,!1)};d.duration=function(b){if(!arguments.length)return this._dirty&&this.totalDuration(),this._duration;0!==this.duration()&&0!==b&&this.timeScale(this._duration/b);return this};d.totalDuration=function(b){if(!arguments.length){if(this._dirty){for(var c=0,a=this._first,d=-999999999999,e;a;)e=a._next,a._startTimea._startTime&&(c-=a._startTime,this.shiftChildren(-a._startTime, +!1,-9999999999)),a=a._startTime+(!a._dirty?a._totalDuration:a.totalDuration())/a._timeScale,a>c&&(c=a),a=e;this._duration=this._totalDuration=c;this._dirty=!1}return this._totalDuration}0!==this.totalDuration()&&0!==b&&this.timeScale(this._totalDuration/b);return this};d.usesFrames=function(){for(var b=this._timeline;b._timeline;)b=b._timeline;return b===m._rootFramesTimeline};d.rawTime=function(){return this._paused||0!==this._totalTime&&this._totalTime!==this._totalDuration?this._totalTime:(this._timeline.rawTime()- +this._startTime)*this._timeScale};return h},!0)});window._gsDefine&&_gsQueue.pop()(); \ No newline at end of file diff --git a/duo/js/TimelineMax.min.js b/duo/js/TimelineMax.min.js new file mode 100755 index 0000000..2e94bee --- /dev/null +++ b/duo/js/TimelineMax.min.js @@ -0,0 +1,44 @@ +/*! + * VERSION: beta 1.641 + * DATE: 2012-11-08 + * JavaScript (ActionScript 3 and 2 also available) + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +(window._gsQueue||(window._gsQueue=[])).push(function(){_gsDefine("TimelineMax",["TimelineLite","TweenLite","easing.Ease"],function(h,p,f){var g=function(d){h.call(this,d);this._repeat=this.vars.repeat||0;this._repeatDelay=this.vars.repeatDelay||0;this._cycle=0;this._yoyo=!0==this.vars.yoyo;this._dirty=!0},q=[],s=new f(null,null,1,0),f=g.prototype=new h;f.constructor=g;f.kill()._gc=!1;g.version=1.641;f.invalidate=function(){this._yoyo=!0===this.vars.yoyo;this._repeat=this.vars.repeat||0;this._repeatDelay= +this.vars.repeatDelay||0;this._uncache(!0);return h.prototype.invalidate.call(this)};f.addCallback=function(d,c,a,e){return this.insert(p.delayedCall(0,d,a,e),c)};f.removeCallback=function(d,c){if(null==c)this._kill(null,d);else for(var a=this.getTweensOf(d,!1),e=a.length,b=this._parseTimeOrLabel(c);-1<--e;)a[e]._startTime===b&&a[e]._enabled(!1,!1);return this};f.tweenTo=function(d,c){var c=c||{},a={ease:s,overwrite:2,useFrames:this.usesFrames(),immediateRender:!1},e,b;for(e in c)a[e]=c[e];a.time= +this._parseTimeOrLabel(d);b=new p(this,Math.abs(Number(a.time)-this._time)/this._timeScale||0.001,a);a.onStart=function(){b.target.paused(!0);b.vars.time!==b.target.time()&&b.duration(Math.abs(b.vars.time-b.target.time())/b.target._timeScale);c.onStart&&c.onStart.apply(c.onStartScope||b,c.onStartParams||q)};return b};f.tweenFromTo=function(d,c,a){a=a||{};a.startAt={time:this._parseTimeOrLabel(d)};d=this.tweenTo(c,a);return d.duration(Math.abs(d.vars.time-d.vars.startAt.time)/this._timeScale||0.001)}; +f.render=function(d,c,a){this._gc&&this._enabled(!0,!1);this._active=!this._paused;var e=!this._dirty?this._totalDuration:this.totalDuration(),b=this._time,j=this._totalTime,i=this._startTime,f=this._timeScale,n=this._rawPrevTime,m=this._paused,k=this._cycle,g,l;if(d>=e){this._locked||(this._totalTime=e,this._cycle=this._repeat);if(!this._reversed&&!this._hasPausedChild()&&(g=!0,l="onComplete",0===this._duration&&(0===d||0>this._rawPrevTime)))this._rawPrevTime!==d&&(a=!0);this._rawPrevTime=d;this._yoyo&& +0!==(this._cycle&1)?(this._time=0,d=-1E-6):(this._time=this._duration,d=this._duration+1E-6)}else if(0>=d){this._locked||(this._totalTime=this._cycle=0);this._time=0;if(0!==b||0===this._duration&&0d?(this._active=!1,0===this._duration&&0<=this._rawPrevTime&&(a=!0)):this._initted||(a=!0);this._rawPrevTime=d;d=0===this._duration?0:-1E-6}else if(this._time=this._rawPrevTime=d,!this._locked&&(this._totalTime=d,0!==this._repeat)){var r= +this._duration+this._repeatDelay;this._cycle=this._totalTime/r>>0;0!==this._cycle&&this._cycle===this._totalTime/r&&this._cycle--;this._time=this._totalTime-this._cycle*r;this._yoyo&&0!==(this._cycle&1)&&(this._time=this._duration-this._time);this._time>this._duration?(this._time=this._duration,d=this._duration+1E-6):0>this._time?this._time=d=0:d=this._time}if(this._cycle!==k&&!this._locked){var r=this._yoyo&&0!==(k&1),h=r===(this._yoyo&&0!==(this._cycle&1)),p=this._totalTime,s=this._cycle,u=this._rawPrevTime, +v=this._time;this._totalTime=k*this._duration;this._cycleb)for(a=this._first;a;){j=a._next;if(this._paused&&!m)break;else if(a._active||a._startTime<=this._time&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())- +(d-a._startTime)*a._timeScale,c,!1):a.render((d-a._startTime)*a._timeScale,c,!1);a=j}else for(a=this._last;a;){j=a._prev;if(this._paused&&!m)break;else if(a._active||a._startTime<=b&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())-(d-a._startTime)*a._timeScale,c,!1):a.render((d-a._startTime)*a._timeScale,c,!1);a=j}this._onUpdate&&(c||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||q));if(l&&!this._locked&&!this._gc&&(i===this._startTime|| +f!==this._timeScale))if(0===this._time||e>=this.totalDuration())g&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),c||this.vars[l]&&this.vars[l].apply(this.vars[l+"Scope"]||this,this.vars[l+"Params"]||q)}};f.getActive=function(d,c,a){null==d&&(d=!0);null==c&&(c=!0);null==a&&(a=!1);var e=[],d=this.getChildren(d,c,a),c=0,a=d.length,b,j;for(b=0;b=j._startTime&&j._timeline._timed)return c[e].name;return null};f.getLabelBefore=function(d){null==d&&(d=this._time);for(var c=this.getLabelsArray(),a=c.length;-1<--a;)if(c[a].timethis._duration&&(d=this._duration);this._yoyo&&0!==(this._cycle&1)?d=this._duration-d+this._cycle*(this._duration+this._repeatDelay):0!==this._repeat&&(d+=this._cycle*(this._duration+this._repeatDelay)); +return this.totalTime(d,c)};f.repeat=function(d){if(!arguments.length)return this._repeat;this._repeat=d;return this._uncache(!0)};f.repeatDelay=function(d){if(!arguments.length)return this._repeatDelay;this._repeatDelay=d;return this._uncache(!0)};f.yoyo=function(d){if(!arguments.length)return this._yoyo;this._yoyo=d;return this};f.currentLabel=function(d){return!arguments.length?this.getLabelBefore(this._time+1E-8):this.seek(d,!0)};return g},!0);_gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline", +"TweenLite"],function(h,p,f){var g=function(a){p.call(this,a);this._labels={};this.autoRemoveChildren=!0==this.vars.autoRemoveChildren;this.smoothChildTiming=!0==this.vars.smoothChildTiming;this._sortChildren=!0;this._onUpdate=this.vars.onUpdate;for(var a=q.length,e,b;-1<--a;)if(b=this.vars[q[a]])for(e=b.length;-1<--e;)"{self}"===b[e]&&(b=this.vars[q[a]]=b.concat(),b[e]=this);this.vars.tweens instanceof Array&&this.insertMultiple(this.vars.tweens,0,this.vars.align||"normal",this.vars.stagger||0)}, +q=["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams","onRepeatParams"],s=[],d=function(a){var e={},b;for(b in a)e[b]=a[b];return e},c=g.prototype=new p;g.version=1.641;c.constructor=g;c.kill()._gc=!1;c.to=function(a,e,b,c,d){return this.insert(new f(a,e,b),this._parseTimeOrLabel(d,c,!0))};c.from=function(a,e,b,c,d){return this.insert(f.from(a,e,b),this._parseTimeOrLabel(d,c,!0))};c.fromTo=function(a,e,b,c,d,t){return this.insert(f.fromTo(a,e,b,c),this._parseTimeOrLabel(t, +d,!0))};c.staggerTo=function(a,e,b,c,i,t,n,m,k){n=new g({onComplete:n,onCompleteParams:m,onCompleteScope:k});c=c||0;for(m=0;m=d){this._totalTime=this._time= +d;if(!this._reversed&&!this._hasPausedChild()&&(k=!0,l="onComplete",0===this._duration&&(0===a||0>this._rawPrevTime)))this._rawPrevTime!==a&&(b=!0);this._rawPrevTime=a;a=d+1E-6}else if(0>=a){this._totalTime=this._time=0;if(0!==c||0===this._duration&&0a?(this._active=!1,0===this._duration&&0<=this._rawPrevTime&&(b=!0)):this._initted||(b=!0);this._rawPrevTime=a;a=-1E-6}else this._totalTime=this._time=this._rawPrevTime=a;if(this._time!==c|| +b){this._initted||(this._initted=!0);0===c&&this.vars.onStart&&0!==this._time&&(e||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||s));if(this._time>c)for(b=this._first;b;){h=b._next;if(this._paused&&!m)break;else if(b._active||b._startTime<=this._time&&!b._paused&&!b._gc)b._reversed?b.render((!b._dirty?b._totalDuration:b.totalDuration())-(a-b._startTime)*b._timeScale,e,!1):b.render((a-b._startTime)*b._timeScale,e,!1);b=h}else for(b=this._last;b;){h=b._prev;if(this._paused&& +!m)break;else if(b._active||b._startTime<=c&&!b._paused&&!b._gc)b._reversed?b.render((!b._dirty?b._totalDuration:b.totalDuration())-(a-b._startTime)*b._timeScale,e,!1):b.render((a-b._startTime)*b._timeScale,e,!1);b=h}this._onUpdate&&(e||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||s));if(l&&!this._gc&&(f===this._startTime||g!=this._timeScale))if(0===this._time||d>=this.totalDuration())k&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),e||this.vars[l]&& +this.vars[l].apply(this.vars[l+"Scope"]||this,this.vars[l+"Params"]||s)}};c._hasPausedChild=function(){for(var a=this._first;a;){if(a._paused||a instanceof g&&a._hasPausedChild())return!0;a=a._next}return!1};c.getChildren=function(a,d,b,c){for(var c=c||-9999999999,i=[],g=this._first,h=0;g;)g._startTime=b&&(c._startTime+=a),c=c._next;if(d)for(var f in this._labels)this._labels[f]>=b&&(this._labels[f]+=a);return this._uncache(!0)};c._kill=function(a,c){if(null==a&&null==c)return this._enabled(!1,!1);for(var b=null==c?this.getChildren(!0,!0,!1):this.getTweensOf(c), +d=b.length,f=!1;-1<--d;)b[d]._kill(a,c)&&(f=!0);return f};c.clear=function(a){var c=this.getChildren(!1,!0,!0),b=c.length;for(this._time=this._totalTime=0;-1<--b;)c[b]._enabled(!1,!1);!1!=a&&(this._labels={});return this._uncache(!0)};c.invalidate=function(){for(var a=this._first;a;)a.invalidate(),a=a._next;return this};c._enabled=function(a,c){if(a===this._gc)for(var b=this._first;b;)b._enabled(a,!0),b=b._next;return p.prototype._enabled.call(this,a,c)};c.progress=function(a){return!arguments.length? +this._time/this.duration():this.totalTime(this.duration()*a,!1)};c.duration=function(a){if(!arguments.length)return this._dirty&&this.totalDuration(),this._duration;0!==this.duration()&&0!==a&&this.timeScale(this._duration/a);return this};c.totalDuration=function(a){if(!arguments.length){if(this._dirty){for(var c=0,b=this._first,d=-999999999999,f;b;)f=b._next,b._startTimeb._startTime&&(c-=b._startTime,this.shiftChildren(-b._startTime, +!1,-9999999999)),b=b._startTime+(!b._dirty?b._totalDuration:b.totalDuration())/b._timeScale,b>c&&(c=b),b=f;this._duration=this._totalDuration=c;this._dirty=!1}return this._totalDuration}0!==this.totalDuration()&&0!==a&&this.timeScale(this._totalDuration/a);return this};c.usesFrames=function(){for(var a=this._timeline;a._timeline;)a=a._timeline;return a===h._rootFramesTimeline};c.rawTime=function(){return this._paused||0!==this._totalTime&&this._totalTime!==this._totalDuration?this._totalTime:(this._timeline.rawTime()- +this._startTime)*this._timeScale};return g},!0)});window._gsDefine&&_gsQueue.pop()(); \ No newline at end of file diff --git a/duo/js/TweenLite.min.js b/duo/js/TweenLite.min.js new file mode 100755 index 0000000..931f7de --- /dev/null +++ b/duo/js/TweenLite.min.js @@ -0,0 +1,52 @@ +/*! + * VERSION: beta 1.668 + * DATE: 2013-01-01 + * JavaScript + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +(function(n){var H=function(a){a=a.split(".");var c=n,b;for(b=0;ba?2*a:2*(1-a);1===b?l*=l:2===b?l*=l*l:3===b?l*=l*l*l:4===b&&(l*=l*l*l*l);return 1===c?1-l:2===c?l:0.5>a?l/2:1-l/2};q=["Linear","Quad","Cubic","Quart","Quint"];for(k=q.length;-1<--k;)d=s("easing."+q[k],null,!0),C=s("easing.Power"+k,null,!0),d.easeOut=C.easeOut=new u(null, +null,1,k),d.easeIn=C.easeIn=new u(null,null,2,k),d.easeInOut=C.easeInOut=new u(null,null,3,k);s("easing.Strong",m.easing.Power4,!0);m.easing.Linear.easeNone=m.easing.Linear.easeIn;var K=s("events.EventDispatcher",function(a){this._listeners={};this._eventTarget=a||this});d=K.prototype;d.addEventListener=function(a,c,b,l,e){e=e||0;var d=this._listeners[a],j=0,f;null==d&&(this._listeners[a]=d=[]);for(f=d.length;-1<--f;)a=d[f],a.c===c?d.splice(f,1):0===j&&a.pr=p||!0===a)b.frame++,p=b.time>p?b.time+h-(b.time-p):b.time+h-0.001,p>0||1)}:z;k();f=j(m)};this.useRAF=function(a){if(!arguments.length)return d;k();d=a;b.fps(g)};b.fps(a);n.setTimeout(function(){d&&!f&&b.useRAF(!1)},1E3)});d=m.Ticker.prototype=new m.events.EventDispatcher;d.constructor=m.Ticker;var r=s("core.Animation",function(a,c){this.vars=c||{};this._duration=this._totalDuration=a||0;this._delay=Number(this.vars.delay)||0;this._timeScale=1;this._active=!0===this.vars.immediateRender; +this.data=this.vars.data;this._reversed=!0===this.vars.reversed;if(v){I||(t.tick(),I=!0);var b=this.vars.useFrames?y:v;b.insert(this,b._time);this.vars.paused&&this.paused(!0)}}),t=r.ticker=new m.Ticker;d=r.prototype;d._dirty=d._gc=d._initted=d._paused=!1;d._totalTime=d._time=0;d._rawPrevTime=-1;d._next=d._last=d._onUpdate=d._timeline=d.timeline=null;d._paused=!1;d.play=function(a,c){arguments.length&&this.seek(a,c);this.reversed(!1);return this.paused(!1)};d.pause=function(a,c){arguments.length&& +this.seek(a,c);return this.paused(!0)};d.resume=function(a,c){arguments.length&&this.seek(a,c);return this.paused(!1)};d.seek=function(a,c){return this.totalTime(Number(a),!1!==c)};d.restart=function(a,c){this.reversed(!1);this.paused(!1);return this.totalTime(a?-this._delay:0,!1!==c)};d.reverse=function(a,c){arguments.length&&this.seek(a||this.totalDuration(),c);this.reversed(!0);return this.paused(!1)};d.render=function(){};d.invalidate=function(){return this};d._enabled=function(a,c){this._gc= +!a;this._active=a&&!this._paused&&0this._duration&&(a=this._duration);return this.totalTime(a,c)};d.totalTime=function(a, +c){if(!arguments.length)return this._totalTime;if(this._timeline){0>a&&(a+=this.totalDuration());if(this._timeline.smoothChildTiming&&(this._dirty&&this.totalDuration(),a>this._totalDuration&&(a=this._totalDuration),this._startTime=(this._paused?this._pauseTime:this._timeline._time)-(!this._reversed?a:this._totalDuration-a)/this._timeScale,this._timeline._dirty||this._uncache(!1),!this._timeline._active))for(var b=this._timeline;b._timeline;)b.totalTime(b._totalTime,!0),b=b._timeline;this._gc&&this._enabled(!0, +!1);this._totalTime!==a&&this.render(a,c,!1)}return this};d.startTime=function(a){if(!arguments.length)return this._startTime;a!==this._startTime&&(this._startTime=a,this.timeline&&this.timeline._sortChildren&&this.timeline.insert(this,a-this._delay));return this};d.timeScale=function(a){if(!arguments.length)return this._timeScale;a=a||1E-6;if(this._timeline&&this._timeline.smoothChildTiming){var c=this._pauseTime||0===this._pauseTime?this._pauseTime:this._timeline._totalTime;this._startTime=c-(c- +this._startTime)*this._timeScale/a}this._timeScale=a;return this._uncache(!1)};d.reversed=function(a){if(!arguments.length)return this._reversed;a!=this._reversed&&(this._reversed=a,this.totalTime(this._totalTime,!0));return this};d.paused=function(a){if(!arguments.length)return this._paused;a!=this._paused&&this._timeline&&(!a&&this._timeline.smoothChildTiming&&(this._startTime+=this._timeline.rawTime()-this._pauseTime,this._uncache(!1)),this._pauseTime=a?this._timeline.rawTime():null,this._paused= +a,this._active=!this._paused&&0d;)b=b._prev;b?(a._next=b._next,b._next=a):(a._next=this._first,this._first=a);a._next?a._next._prev=a:this._last=a;a._prev=b;this._timeline&&this._uncache(!0);return this};d._remove=function(a,c){a.timeline===this&&(c||a._enabled(!1,!0),a.timeline=null,a._prev?a._prev._next=a._next:this._first===a&&(this._first=a._next),a._next?a._next._prev= +a._prev:this._last===a&&(this._last=a._prev),this._timeline&&this._uncache(!0));return this};d.render=function(a,c){var b=this._first,d;for(this._totalTime=this._time=this._rawPrevTime=a;b;){d=b._next;if(b._active||a>=b._startTime&&!b._paused)b._reversed?b.render((!b._dirty?b._totalDuration:b.totalDuration())-(a-b._startTime)*b._timeScale,c,!1):b.render((a-b._startTime)*b._timeScale,c,!1);b=d}};d.rawTime=function(){return this._totalTime};var h=s("TweenLite",function(a,c,b){r.call(this,c,b);if(null== +a)throw"Cannot tween an undefined reference.";this.target=a;this._overwrite=null==this.vars.overwrite?M[h.defaultOverwrite]:"number"===typeof this.vars.overwrite?this.vars.overwrite>>0:M[this.vars.overwrite];if((a instanceof Array||a.jquery)&&"object"===typeof a[0]){this._targets=a.slice(0);this._propLookup=[];this._siblings=[];for(a=0;ah&&((m||!f._initted)&&2E-10>=h-f._startTime||(p[k++]=f));for(g=k;-1<--g;)if(f=p[g],2===d&&f._kill(b,a)&&(j=!0),2!==d||!f._firstPT&&f._initted)f._enabled(!1,!1)&&(j=!0);return j},O=function(a,c,b){for(var d=a._timeline,e=d._timeScale,g=a._startTime;d._timeline;){g+=d._startTime;e*=d._timeScale;if(d._paused)return-100;d=d._timeline}g/=e;return g>c?g-c:b&&g===c||!a._initted&&2E-10> +g-c?1E-10:(g+=a.totalDuration()/a._timeScale/e)>c?0:g-c-1E-10};d._init=function(){this.vars.startAt&&(this.vars.startAt.overwrite=0,this.vars.startAt.immediateRender=!0,h.to(this.target,0,this.vars.startAt));var a,c;this._ease=this.vars.ease instanceof u?this.vars.easeParams instanceof Array?this.vars.ease.config.apply(this.vars.ease,this.vars.easeParams):this.vars.ease:"function"===typeof this.vars.ease?new u(this.vars.ease,this.vars.easeParams):h.defaultEase;this._easeType=this._ease._type;this._easePower= +this._ease._power;this._firstPT=null;if(this._targets)for(a=this._targets.length;-1<--a;){if(this._initProps(this._targets[a],this._propLookup[a]={},this._siblings[a],this._overwrittenProps?this._overwrittenProps[a]:null))c=!0}else c=this._initProps(this.target,this._propLookup,this._siblings,this._overwrittenProps);c&&h._onPluginEvent("_onInitAllProps",this);this._overwrittenProps&&null==this._firstPT&&"function"!==typeof this.target&&this._enabled(!1,!1);if(this.vars.runBackwards)for(a=this._firstPT;a;)a.s+= +a.c,a.c=-a.c,a=a._next;this._onUpdate=this.vars.onUpdate;this._initted=!0};d._initProps=function(a,c,b,d){var e,g,j,f,h,k;if(null==a)return!1;for(e in this.vars){if(Q[e]){if("onStartParams"===e||"onUpdateParams"===e||"onCompleteParams"===e||"onReverseCompleteParams"===e||"onRepeatParams"===e)if(h=this.vars[e])for(g=h.length;-1<--g;)"{self}"===h[g]&&(h=this.vars[e]=h.concat(),h[g]=this)}else if(N[e]&&(f=new N[e])._onInitTween(a,this.vars[e],this)){this._firstPT=k={_next:this._firstPT,t:f,p:"setRatio", +s:0,c:1,f:!0,n:e,pg:!0,pr:f._priority};for(g=f._overwriteProps.length;-1<--g;)c[f._overwriteProps[g]]=this._firstPT;if(f._priority||f._onInitAllProps)j=!0;if(f._onDisable||f._onEnable)this._notifyPluginsOfEnabled=!0}else this._firstPT=c[e]=k={_next:this._firstPT,t:a,p:e,f:"function"===typeof a[e],n:e,pg:!1,pr:0},k.s=!k.f?parseFloat(a[e]):a[e.indexOf("set")||"function"!==typeof a["get"+e.substr(3)]?e:"get"+e.substr(3)](),g=this.vars[e],k.c="number"===typeof g?g-k.s:"string"===typeof g&&"="===g.charAt(1)? +parseInt(g.charAt(0)+"1",10)*Number(g.substr(2)):Number(g)||0;k&&k._next&&(k._next._prev=k)}return d&&this._kill(d,a)?this._initProps(a,c,b,d):1=this._duration){if(this._totalTime=this._time=this._duration,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(e=!0,g="onComplete"),0===this._duration){if(0===a|| +0>this._rawPrevTime)this._rawPrevTime!==a&&(b=!0);this._rawPrevTime=a}}else if(0>=a){this._totalTime=this._time=0;this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0;if(0!==d||0===this._duration&&0a?(this._active=!1,0===this._duration&&(0<=this._rawPrevTime&&(b=!0),this._rawPrevTime=a)):this._initted||(b=!0)}else if(this._totalTime=this._time=a,this._easeType){var j=a/this._duration,f=this._easeType,h=this._easePower;if(1===f||3===f&& +0.5<=j)j=1-j;3===f&&(j*=2);1===h?j*=j:2===h?j*=j*j:3===h?j*=j*j*j:4===h&&(j*=j*j*j*j);this.ratio=1===f?1-j:2===f?j:0.5>a/this._duration?j/2:1-j/2}else this.ratio=this._ease.getRatio(a/this._duration);if(this._time!==d||b){this._initted||(this._init(),!e&&this._time&&(this.ratio=this._ease.getRatio(this._time/this._duration)));!this._active&&!this._paused&&(this._active=!0);if(0===d&&this.vars.onStart&&(0!==this._time||0===this._duration))c||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams|| +E);for(a=this._firstPT;a;){if(a.f)a.t[a.p](a.c*this.ratio+a.s);else a.t[a.p]=a.c*this.ratio+a.s;a=a._next}this._onUpdate&&(c||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||E));g&&!this._gc&&(e&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),c||this.vars[g]&&this.vars[g].apply(this.vars[g+"Scope"]||this,this.vars[g+"Params"]||E))}};d._kill=function(a,c){"all"===a&&(a=null);if(null==a&&(null==c||c===this.target))return this._enabled(!1,!1);c= +c||this._targets||this.target;var b,d,e,g,h,f,k;if((c instanceof Array||c.jquery)&&"object"===typeof c[0])for(b=c.length;-1<--b;)this._kill(a,c[b])&&(h=!0);else{if(this._targets)for(b=this._targets.length;-1<--b;){if(c===this._targets[b]){g=this._propLookup[b]||{};this._overwrittenProps=this._overwrittenProps||[];d=this._overwrittenProps[b]=a?this._overwrittenProps[b]||{}:"all";break}}else{if(c!==this.target)return!1;g=this._propLookup;d=this._overwrittenProps=a?this._overwrittenProps||{}:"all"}if(g)for(e in f= +a||g,k=a!==d&&"all"!==d&&a!==g&&(null==a||!0!==a._tempKill),f){if(b=g[e]){b.pg&&b.t._kill(f)&&(h=!0);if(!b.pg||0===b.t._overwriteProps.length)b._prev?b._prev._next=b._next:b===this._firstPT&&(this._firstPT=b._next),b._next&&(b._next._prev=b._prev),b._next=b._prev=null;delete g[e]}k&&(d[e]=1)}}return h};d.invalidate=function(){this._notifyPluginsOfEnabled&&h._onPluginEvent("_onDisable",this);this._onUpdate=this._overwrittenProps=this._firstPT=null;this._initted=this._active=this._notifyPluginsOfEnabled= +!1;this._propLookup=this._targets?{}:[];return this};d._enabled=function(a,c){if(a&&this._gc)if(this._targets)for(var b=this._targets.length;-1<--b;)this._siblings[b]=A(this._targets[b],this,!0);else this._siblings=A(this.target,this,!0);r.prototype._enabled.call(this,a,c);return this._notifyPluginsOfEnabled&&this._firstPT?h._onPluginEvent(a?"_onEnable":"_onDisable",this):!1};h.to=function(a,c,b){return new h(a,c,b)};h.from=function(a,c,b){b.runBackwards=!0;!1!==b.immediateRender&&(b.immediateRender= +!0);return new h(a,c,b)};h.fromTo=function(a,c,b,d){d.startAt=b;b.immediateRender&&(d.immediateRender=!0);return new h(a,c,d)};h.delayedCall=function(a,c,b,d,e){return new h(c,0,{delay:a,onComplete:c,onCompleteParams:b,onCompleteScope:d,onReverseComplete:c,onReverseCompleteParams:b,onReverseCompleteScope:d,immediateRender:!1,useFrames:e,overwrite:0})};h.set=function(a,c){return new h(a,0,c)};h.killTweensOf=h.killDelayedCallsTo=function(a,c){for(var b=h.getTweensOf(a),d=b.length;-1<--d;)b[d]._kill(c, +a)};h.getTweensOf=function(a){if(null!=a){var c,b,d;if((a instanceof Array||a.jquery)&&"object"===typeof a[0]){c=a.length;for(b=[];-1<--c;)b=b.concat(h.getTweensOf(a[c]));for(c=b.length;-1<--c;){d=b[c];for(a=c;-1<--a;)d===b[a]&&b.splice(c,1)}}else{b=A(a).concat();for(c=b.length;-1<--c;)b[c]._gc&&b.splice(c,1)}return b}};var B=s("plugins.TweenPlugin",function(a,c){this._overwriteProps=(a||"").split(",");this._propName=this._overwriteProps[0];this._priority=c||0},!0);d=B.prototype;B.version=12;B.API= +2;d._firstPT=null;d._addTween=function(a,c,b,d,e,g){var h;if(null!=d&&(h="number"===typeof d||"="!==d.charAt(1)?Number(d)-b:parseInt(d.charAt(0)+"1",10)*Number(d.substr(2))))this._firstPT=a={_next:this._firstPT,t:a,p:c,s:b,c:h,f:"function"===typeof a[c],n:e||c,r:g},a._next&&(a._next._prev=a)};d.setRatio=function(a){for(var c=this._firstPT,b;c;){b=c.c*a+c.s;c.r&&(b=b+(0>0);if(c.f)c.t[c.p](b);else c.t[c.p]=b;c=c._next}};d._kill=function(a){if(null!=a[this._propName])this._overwriteProps= +[];else for(var c=this._overwriteProps.length;-1<--c;)null!=a[this._overwriteProps[c]]&&this._overwriteProps.splice(c,1);for(c=this._firstPT;c;)null!=a[c.n]&&(c._next&&(c._next._prev=c._prev),c._prev?(c._prev._next=c._next,c._prev=null):this._firstPT===c&&(this._firstPT=c._next)),c=c._next;return!1};d._roundProps=function(a,c){for(var b=this._firstPT;b;){if(a[this._propName]||null!=b.n&&a[b.n.split(this._propName+"_").join("")])b.r=c;b=b._next}};h._onPluginEvent=function(a,c){var b=c._firstPT,d;if("_onInitAllProps"=== +a){for(var e,g,h,f;b;){f=b._next;for(e=g;e&&e.pr>b.pr;)e=e._next;(b._prev=e?e._prev:h)?b._prev._next=b:g=b;(b._next=e)?e._prev=b:h=b;b=f}b=c._firstPT=g}for(;b;)b.pg&&"function"===typeof b.t[a]&&b.t[a]()&&(d=!0),b=b._next;return d};B.activate=function(a){for(var c=a.length;-1<--c;)a[c].API===B.API&&(h._plugins[(new a[c])._propName]=a[c]);return!0};if(q=n._gsQueue){for(k=0;k=f){if(this._totalTime=f, +this._cycle=this._repeat,this._yoyo&&0!==(this._cycle&1)?(this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0):(this._time=this._duration,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1),this._reversed||(v=!0,E="onComplete"),0===this._duration){if(0===g||0>this._rawPrevTime)this._rawPrevTime!==g&&(a=!0);this._rawPrevTime=g}}else if(0>=g){this._totalTime=this._time=this._cycle=0;this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0;if(0!==c||0===this._duration&&0g?(this._active=!1,0===this._duration&&(0<=this._rawPrevTime&&(a=!0),this._rawPrevTime=g)):this._initted||(a=!0)}else if(this._totalTime=this._time=g,0!==this._repeat&&(g=this._duration+this._repeatDelay,this._cycle=this._totalTime/g>>0,0!==this._cycle&&this._cycle===this._totalTime/g&&this._cycle--,this._time=this._totalTime-this._cycle*g,this._yoyo&&0!==(this._cycle&1)&&(this._time=this._duration-this._time),this._time>this._duration?this._time=this._duration: +0>this._time&&(this._time=0)),this._easeType){g=this._time/this._duration;var f=this._easeType,s=this._easePower;if(1===f||3===f&&0.5<=g)g=1-g;3===f&&(g*=2);1===s?g*=g:2===s?g*=g*g:3===s?g*=g*g*g:4===s&&(g*=g*g*g*g);this.ratio=1===f?1-g:2===f?g:0.5>this._time/this._duration?g/2:1-g/2}else this.ratio=this._ease.getRatio(this._time/this._duration);if(u===this._time&&!a)c!==this._totalTime&&this._onUpdate&&(d||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||b));else{this._initted|| +(this._init(),!v&&this._time&&(this.ratio=this._ease.getRatio(this._time/this._duration)));!this._active&&!this._paused&&(this._active=!0);if(0===c&&this.vars.onStart&&(0!==this._totalTime||0===this._duration))d||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||b);for(a=this._firstPT;a;){if(a.f)a.t[a.p](a.c*this.ratio+a.s);else a.t[a.p]=a.c*this.ratio+a.s;a=a._next}this._onUpdate&&(d||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||b));this._cycle!== +t&&(d||this._gc||this.vars.onRepeat&&this.vars.onRepeat.apply(this.vars.onRepeatScope||this,this.vars.onRepeatParams||b));E&&!this._gc&&(v&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),d||this.vars[E]&&this.vars[E].apply(this.vars[E+"Scope"]||this,this.vars[E+"Params"]||b))}};q.to=function(a,d,A){return new q(a,d,A)};q.from=function(a,d,A){A.runBackwards=!0;!1!==A.immediateRender&&(A.immediateRender=!0);return new q(a,d,A)};q.fromTo=function(a,d,A,f){f.startAt=A;A.immediateRender&& +(f.immediateRender=!0);return new q(a,d,f)};q.staggerTo=q.allTo=function(a,d,A,f,u,c,b){f=f||0;var t=[],E=a.length,s=A.delay||0,C,n,h;for(n=0;nthis._duration&&(a=this._duration);this._yoyo&&0!==(this._cycle&1)?a=this._duration-a+this._cycle*(this._duration+this._repeatDelay):0!=this._repeat&&(a+=this._cycle*(this._duration+this._repeatDelay));return this.totalTime(a,d)};l.totalDuration=function(a){return!arguments.length?(this._dirty&&(this._totalDuration=-1===this._repeat?999999999999:this._duration*(this._repeat+1)+this._repeatDelay*this._repeat,this._dirty=!1),this._totalDuration):-1===this._repeat? +this:this.duration((a-this._repeat*this._repeatDelay)/(this._repeat+1))};l.repeat=function(a){if(!arguments.length)return this._repeat;this._repeat=a;return this._uncache(!0)};l.repeatDelay=function(a){if(!arguments.length)return this._repeatDelay;this._repeatDelay=a;return this._uncache(!0)};l.yoyo=function(a){if(!arguments.length)return this._yoyo;this._yoyo=a;return this};return q},!0);_gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(r,k,h){var q=function(a){k.call(this, +a);this._labels={};this.autoRemoveChildren=!0===this.vars.autoRemoveChildren;this.smoothChildTiming=!0===this.vars.smoothChildTiming;this._sortChildren=!0;this._onUpdate=this.vars.onUpdate;a=l.length;for(var g,d;-1<--a;)if(d=this.vars[l[a]])for(g=d.length;-1<--g;)"{self}"===d[g]&&(d=this.vars[l[a]]=d.concat(),d[g]=this);this.vars.tweens instanceof Array&&this.insertMultiple(this.vars.tweens,0,this.vars.align||"normal",this.vars.stagger||0)},l=["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams", +"onRepeatParams"],b=[],t=function(a){var g={},d;for(d in a)g[d]=a[d];return g},c=q.prototype=new k;q.version=1.641;c.constructor=q;c.kill()._gc=!1;c.to=function(a,g,d,c,f){return this.insert(new h(a,g,d),this._parseTimeOrLabel(f,c,!0))};c.from=function(a,g,d,c,f){return this.insert(h.from(a,g,d),this._parseTimeOrLabel(f,c,!0))};c.fromTo=function(a,g,d,c,f,u){return this.insert(h.fromTo(a,g,d,c),this._parseTimeOrLabel(u,f,!0))};c.staggerTo=function(a,g,d,c,f,u,b,l,v){b=new q({onComplete:b,onCompleteParams:l, +onCompleteScope:v});c=c||0;for(l=0;l=t){this._totalTime=this._time=t;if(!this._reversed&&!this._hasPausedChild()&&(v=!0,s="onComplete",0===this._duration&&(0===a||0>this._rawPrevTime)))this._rawPrevTime!== +a&&(d=!0);this._rawPrevTime=a;a=t+1E-6}else if(0>=a){this._totalTime=this._time=0;if(0!==f||0===this._duration&&0a?(this._active=!1,0===this._duration&&0<=this._rawPrevTime&&(d=!0)):this._initted||(d=!0);this._rawPrevTime=a;a=-1E-6}else this._totalTime=this._time=this._rawPrevTime=a;if(this._time!==f||d){this._initted||(this._initted=!0);0===f&&this.vars.onStart&&0!==this._time&&(c||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams|| +b));if(this._time>f)for(d=this._first;d;){E=d._next;if(this._paused&&!q)break;else if(d._active||d._startTime<=this._time&&!d._paused&&!d._gc)d._reversed?d.render((!d._dirty?d._totalDuration:d.totalDuration())-(a-d._startTime)*d._timeScale,c,!1):d.render((a-d._startTime)*d._timeScale,c,!1);d=E}else for(d=this._last;d;){E=d._prev;if(this._paused&&!q)break;else if(d._active||d._startTime<=f&&!d._paused&&!d._gc)d._reversed?d.render((!d._dirty?d._totalDuration:d.totalDuration())-(a-d._startTime)*d._timeScale, +c,!1):d.render((a-d._startTime)*d._timeScale,c,!1);d=E}this._onUpdate&&(c||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||b));if(s&&!this._gc&&(u===this._startTime||h!=this._timeScale))if(0===this._time||t>=this.totalDuration())v&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),c||this.vars[s]&&this.vars[s].apply(this.vars[s+"Scope"]||this,this.vars[s+"Params"]||b)}};c._hasPausedChild=function(){for(var a=this._first;a;){if(a._paused||a instanceof +q&&a._hasPausedChild())return!0;a=a._next}return!1};c.getChildren=function(a,c,d,b){b=b||-9999999999;for(var f=[],u=this._first,t=0;u;)u._startTime=d&&(b._startTime+=a),b=b._next;if(c)for(var f in this._labels)this._labels[f]>=d&&(this._labels[f]+=a);return this._uncache(!0)};c._kill=function(a,c){if(null==a&&null==c)return this._enabled(!1,!1);for(var d=null==c?this.getChildren(!0,!0,!1):this.getTweensOf(c),b=d.length,f=!1;-1<--b;)d[b]._kill(a,c)&&(f=!0);return f};c.clear=function(a){var c=this.getChildren(!1,!0,!0),d=c.length;for(this._time=this._totalTime= +0;-1<--d;)c[d]._enabled(!1,!1);!1!=a&&(this._labels={});return this._uncache(!0)};c.invalidate=function(){for(var a=this._first;a;)a.invalidate(),a=a._next;return this};c._enabled=function(a,c){if(a===this._gc)for(var d=this._first;d;)d._enabled(a,!0),d=d._next;return k.prototype._enabled.call(this,a,c)};c.progress=function(a){return!arguments.length?this._time/this.duration():this.totalTime(this.duration()*a,!1)};c.duration=function(a){if(!arguments.length)return this._dirty&&this.totalDuration(), +this._duration;0!==this.duration()&&0!==a&&this.timeScale(this._duration/a);return this};c.totalDuration=function(a){if(!arguments.length){if(this._dirty){for(var c=0,d=this._first,b=-999999999999,f;d;)f=d._next,d._startTimed._startTime&&(c-=d._startTime,this.shiftChildren(-d._startTime,!1,-9999999999)),d=d._startTime+(!d._dirty?d._totalDuration:d.totalDuration())/d._timeScale,d>c&&(c=d),d=f;this._duration=this._totalDuration= +c;this._dirty=!1}return this._totalDuration}0!==this.totalDuration()&&0!==a&&this.timeScale(this._totalDuration/a);return this};c.usesFrames=function(){for(var a=this._timeline;a._timeline;)a=a._timeline;return a===r._rootFramesTimeline};c.rawTime=function(){return this._paused||0!==this._totalTime&&this._totalTime!==this._totalDuration?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale};return q},!0);_gsDefine("TimelineMax",["TimelineLite","TweenLite","easing.Ease"],function(r, +k,h){var q=function(b){r.call(this,b);this._repeat=this.vars.repeat||0;this._repeatDelay=this.vars.repeatDelay||0;this._cycle=0;this._yoyo=!0===this.vars.yoyo;this._dirty=!0},l=[],b=new h(null,null,1,0);h=q.prototype=new r;h.constructor=q;h.kill()._gc=!1;q.version=1.641;h.invalidate=function(){this._yoyo=!0===this.vars.yoyo;this._repeat=this.vars.repeat||0;this._repeatDelay=this.vars.repeatDelay||0;this._uncache(!0);return r.prototype.invalidate.call(this)};h.addCallback=function(b,c,a,g){return this.insert(k.delayedCall(0, +b,a,g),c)};h.removeCallback=function(b,c){if(null==c)this._kill(null,b);else for(var a=this.getTweensOf(b,!1),g=a.length,d=this._parseTimeOrLabel(c);-1<--g;)a[g]._startTime===d&&a[g]._enabled(!1,!1);return this};h.tweenTo=function(t,c){c=c||{};var a={ease:b,overwrite:2,useFrames:this.usesFrames(),immediateRender:!1},g,d;for(g in c)a[g]=c[g];a.time=this._parseTimeOrLabel(t);d=new k(this,Math.abs(Number(a.time)-this._time)/this._timeScale||0.001,a);a.onStart=function(){d.target.paused(!0);d.vars.time!== +d.target.time()&&d.duration(Math.abs(d.vars.time-d.target.time())/d.target._timeScale);c.onStart&&c.onStart.apply(c.onStartScope||d,c.onStartParams||l)};return d};h.tweenFromTo=function(b,c,a){a=a||{};a.startAt={time:this._parseTimeOrLabel(b)};b=this.tweenTo(c,a);return b.duration(Math.abs(b.vars.time-b.vars.startAt.time)/this._timeScale||0.001)};h.render=function(b,c,a){this._gc&&this._enabled(!0,!1);this._active=!this._paused;var g=!this._dirty?this._totalDuration:this.totalDuration(),d=this._time, +h=this._totalTime,f=this._startTime,u=this._timeScale,q=this._rawPrevTime,k=this._paused,v=this._cycle,E,s;if(b>=g){this._locked||(this._totalTime=g,this._cycle=this._repeat);if(!this._reversed&&!this._hasPausedChild()&&(E=!0,s="onComplete",0===this._duration&&(0===b||0>this._rawPrevTime)))this._rawPrevTime!==b&&(a=!0);this._rawPrevTime=b;this._yoyo&&0!==(this._cycle&1)?(this._time=0,b=-1E-6):(this._time=this._duration,b=this._duration+1E-6)}else if(0>=b){this._locked||(this._totalTime=this._cycle= +0);this._time=0;if(0!==d||0===this._duration&&0b?(this._active=!1,0===this._duration&&0<=this._rawPrevTime&&(a=!0)):this._initted||(a=!0);this._rawPrevTime=b;b=0===this._duration?0:-1E-6}else if(this._time=this._rawPrevTime=b,!this._locked&&(this._totalTime=b,0!==this._repeat)){var C=this._duration+this._repeatDelay;this._cycle=this._totalTime/C>>0;0!==this._cycle&&this._cycle===this._totalTime/C&&this._cycle--;this._time= +this._totalTime-this._cycle*C;this._yoyo&&0!==(this._cycle&1)&&(this._time=this._duration-this._time);this._time>this._duration?(this._time=this._duration,b=this._duration+1E-6):0>this._time?this._time=b=0:b=this._time}if(this._cycle!==v&&!this._locked){var C=this._yoyo&&0!==(v&1),n=C===(this._yoyo&&0!==(this._cycle&1)),T=this._totalTime,L=this._cycle,J=this._rawPrevTime,y=this._time;this._totalTime=v*this._duration;this._cycled)for(a=this._first;a;){h=a._next;if(this._paused&&!k)break;else if(a._active||a._startTime<=this._time&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())-(b-a._startTime)*a._timeScale,c,!1):a.render((b-a._startTime)*a._timeScale,c,!1);a=h}else for(a=this._last;a;){h=a._prev; +if(this._paused&&!k)break;else if(a._active||a._startTime<=d&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())-(b-a._startTime)*a._timeScale,c,!1):a.render((b-a._startTime)*a._timeScale,c,!1);a=h}this._onUpdate&&(c||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||l));if(s&&!this._locked&&!this._gc&&(f===this._startTime||u!==this._timeScale))if(0===this._time||g>=this.totalDuration())E&&(this._timeline.autoRemoveChildren&&this._enabled(!1, +!1),this._active=!1),c||this.vars[s]&&this.vars[s].apply(this.vars[s+"Scope"]||this,this.vars[s+"Params"]||l)}};h.getActive=function(b,c,a){null==b&&(b=!0);null==c&&(c=!0);null==a&&(a=!1);var g=[];b=this.getChildren(b,c,a);c=0;a=b.length;var d,h;for(d=0;d=h._startTime&&h._timeline._timeb)return c[g].name;return null};h.getLabelBefore=function(b){null==b&&(b=this._time);for(var c=this.getLabelsArray(),a=c.length;-1<--a;)if(c[a].timethis._duration&&(b=this._duration);this._yoyo&&0!==(this._cycle&1)?b=this._duration-b+this._cycle*(this._duration+this._repeatDelay):0!==this._repeat&&(b+=this._cycle*(this._duration+this._repeatDelay));return this.totalTime(b,c)};h.repeat=function(b){if(!arguments.length)return this._repeat;this._repeat=b;return this._uncache(!0)}; +h.repeatDelay=function(b){if(!arguments.length)return this._repeatDelay;this._repeatDelay=b;return this._uncache(!0)};h.yoyo=function(b){if(!arguments.length)return this._yoyo;this._yoyo=b;return this};h.currentLabel=function(b){return!arguments.length?this.getLabelBefore(this._time+1E-8):this.seek(b,!0)};return q},!0);_gsDefine("plugins.BezierPlugin",["plugins.TweenPlugin"],function(r){var k=function(){r.call(this,"bezier",-1);this._overwriteProps.pop();this._func={};this._round={}},h=k.prototype= +new r("bezier",1),q=180/Math.PI,l=Math.PI/180,b=[],t=[],c=[],a={},g=function(a,c,d,b){this.a=a;this.b=c;this.c=d;this.d=b;this.da=b-a;this.ca=d-a;this.ba=c-a},d=k.bezierThrough=function(d,u,h,q,v,E){var s={},C=[],n,l,k;v="string"===typeof v?","+v+",":",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,";null==u&&(u=1);for(l in d[0])C.push(l);b.length=t.length=c.length=0;for(n=C.length;-1< +--n;){l=C[n];a[l]=-1!==v.indexOf(","+l+",");k=s;var J=l,y;y=d;var j=l,B=a[l],x=E,G=[],z=void 0,w=void 0,r=void 0,e=void 0,m=void 0,z=void 0;if(x){y=[x].concat(y);for(w=y.length;-1<--w;)if("string"===typeof(z=y[w][j]))"="===z.charAt(1)&&(y[w][j]=x[j]+Number(z.charAt(0)+z.substr(2)))}z=y.length-2;if(0>z)G[0]=new g(y[0][j],0,0,y[-1>z?0:1][j]);else{for(w=0;wr)return n;for(j=0;j<=r;j++)x=c(a,g[j],h,n,q,r!==j),t[j]=x.end;for(B in f)y[B]=f[B];y.values=t;n=new b(a,"bezier",0,0,x.pt,2);n.data=x;n.plugin=q;n.setRatio=d;0===y.autoRotate&&(y.autoRotate=!0);y.autoRotate&&!(y.autoRotate instanceof Array)&&(j=!0===y.autoRotate?0:Number(y.autoRotate)*l,y.autoRotate=null!=x.end.left?[["left","top","rotation",j,!0]]:null!=x.end.x?[["x","y","rotation",j,!0]]:!1);y.autoRotate&&(h._transform||h._enableTransforms(!1),x.autoRotate=h._target._gsTransform); +q._onInitTween(x.proxy,y,h._tween);return n})}};h._onInitTween=function(a,c,b){this._target=a;c instanceof Array&&(c={values:c});this._props=[];this._timeRes=null==c.timeResolution?6:parseInt(c.timeResolution,10);var h=c.values||[],q={},l=h[0];b=c.autoRotate||b.vars.orientToBezier;var s,C,n;this._autoRotate=b?b instanceof Array?b:[["x","y","rotation",!0===b?0:Number(b)||0]]:null;for(s in l)this._props.push(s);for(l=this._props.length;-1<--l;)s=this._props[l],this._overwriteProps.push(s),b=this._func[s]= +"function"===typeof a[s],q[s]=!b?parseFloat(a[s]):a[s.indexOf("set")||"function"!==typeof a["get"+s.substr(3)]?s:"get"+s.substr(3)](),n||q[s]!==h[0][s]&&(n=q);if("cubic"!==c.type&&"quadratic"!==c.type&&"soft"!==c.type)q=d(h,isNaN(c.curviness)?1:c.curviness,!1,"thruBasic"===c.type,c.correlate,n);else{b=(b=c.type)||"soft";c={};n="cubic"===b?3:2;b="soft"===b;var l=[],k,r,t,y,j,B,x,G,z;b&&q&&(h=[q].concat(h));if(null==h||h.length>0||6;q=[];r=[];h=t=0;c=s-1;n=[];b= +[];for(C in l){k=l[C];j=q;B=s;x=1/B;G=k.length;for(var w=void 0,A=void 0,e=y=z=A=void 0,m=w=void 0,p=void 0,p=e=void 0;-1<--G;){e=k[G];A=e.a;z=e.d-A;y=e.c-A;e=e.b-A;A=0;for(m=1;m<=B;m++)w=x*m,p=1-w,w=A-(A=(w*w*z+3*p*(w*y+p*e))*w),p=G*B+m-1,j[p]=(j[p]||0)+w*w}}l=q.length;for(C=0;C>0,n[k]=b,r[k]=h,t=0,b=[]);this._length=h;this._lengths=r;this._segments=n;this._l1=this._li=this._s1=this._si=0;this._l2=this._lengths[0];this._curSeg=this._segments[0]; +this._s2=this._curSeg[0];this._prec=1/this._curSeg.length}if(b=this._autoRotate){b[0]instanceof Array||(this._autoRotate=b=[b]);for(l=b.length;-1<--l;)for(C=0;3>C;C++)s=b[l][C],this._func[s]="function"===typeof a[s]?a[s.indexOf("set")||"function"!==typeof a["get"+s.substr(3)]?s:"get"+s.substr(3)]:!1}return!0};h.setRatio=function(a){var c=this._segCount,b=this._func,d=this._target,h,g,l,k,n;if(this._timeRes){h=this._lengths;k=this._curSeg;a*=this._length;g=this._li;if(a>this._l2&&g=a;);0===g&&athis._s2&&g= +a;);0===g&&aa?0:1<=a?c-1:c*a>>0,k=(a-h*(1/c))*c;c=1-k;for(g=this._props.length;-1<--g;)if(a=this._props[g],l=this._beziers[a][h],n=(k*k*l.da+3*c*(k*l.ca+c*l.ba))*k+l.a,this._round[a]&&(n=n+(0>0),b[a])d[a](n);else d[a]=n;if(this._autoRotate){var c=this._autoRotate,r,t,A,y,j;for(g=c.length;-1<--g;)a=c[g][2],y=c[g][3]||0,j=!0===c[g][4]?1:q,l=this._beziers[c[g][0]][h],n=this._beziers[c[g][1]][h], +r=l.a+(l.b-l.a)*k,t=l.b+(l.c-l.b)*k,r+=(t-r)*k,t+=(l.c+(l.d-l.c)*k-t)*k,l=n.a+(n.b-n.a)*k,A=n.b+(n.c-n.b)*k,l+=(A-l)*k,A+=(n.c+(n.d-n.c)*k-A)*k,n=Math.atan2(A-l,t-r)*j+y,b[a]?b[a].call(d,n):d[a]=n}};h._roundProps=function(a,c){for(var b=this._overwriteProps,d=b.length;-1<--d;)if(a[b[d]]||a.bezier||a.bezierThrough)this._round[b[d]]=c};h._kill=function(a){var c=this._props,b,d;for(b in this._beziers)if(b in a){delete this._beziers[b];delete this._func[b];for(d=c.length;-1<--d;)c[d]===b&&c.splice(d, +1)}return r.prototype._kill.call(this,a)};r.activate([k]);return k},!0);_gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(r){var k=function(){r.call(this,"css");this._overwriteProps.length=0},h,q,l,b,t={},c=k.prototype=new r("css");c.constructor=k;k.version=1.667;k.API=2;k.defaultTransformPerspective=0;c="px";k.suffixMap={top:c,right:c,bottom:c,left:c,width:c,height:c,fontSize:c,padding:c,margin:c,perspective:c};var a=/(?:\d|\-\d|\.\d|\-\.\d)+/g,g=/(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g, +d=/(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi,A=/[^\d\-\.]/g,f=/(?:\d|\-|\+|=|#|\.)*/g,u=/opacity *= *([^)]*)/,X=/opacity:([^;]*)/,Q=/alpha\(opacity *=.+?\)/i,v=/([A-Z])/g,E=/-([a-z])/gi,s=/(^(?:url\(\"|url\())|(?:(\"\))$|\)$)/gi,C=function(a,e){return e.toUpperCase()},n=/(?:Left|Right|Width)/i,T=/(M11|M12|M21|M22)=[\d\-\.e]+/gi,L=/progid\:DXImageTransform\.Microsoft\.Matrix\(.+?\)/i,J=Math.PI/180,y=180/Math.PI,j={},B=document,x=B.createElement("div"),G=B.createElement("img"),z=k._internals= +{_specialProps:t},w=navigator.userAgent,R,e,m,p,F,I,D,aa=w.indexOf("Android"),Y=B.createElement("div");F=(m=-1!==w.indexOf("Safari")&&-1===w.indexOf("Chrome")&&(-1===aa||3Number(w.substr(w.indexOf("Version/")+8,1));p=-1!==w.indexOf("Firefox");/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(w);I=parseFloat(RegExp.$1);Y.innerHTML="a";D=(w=Y.getElementsByTagName("a")[0])?/^0.55/.test(w.style.opacity):!1;var la=function(a){return u.test("string"=== +typeof a?a:(a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100:1},ma="",ga="",ba=function(a,e){e=e||x;var c=e.style,b,d;if(void 0!==c[a])return a;a=a.charAt(0).toUpperCase()+a.substr(1);b=["O","Moz","ms","Ms","Webkit"];for(d=5;-1<--d&&void 0===c[b[d]+a];);return 0<=d?(ga=3===d?"ms":b[d],ma="-"+ga.toLowerCase()+"-",ga+a):null},ca=B.defaultView?B.defaultView.getComputedStyle:function(){},M=k.getStyle=function(a,e,c,b,d){var j;if(!D&&"opacity"===e)return la(a);!b&&a.style[e]? +j=a.style[e]:(c=c||ca(a,null))?j=(a=c.getPropertyValue(e.replace(v,"-$1").toLowerCase()))||c.length?a:c[e]:a.currentStyle&&(c=a.currentStyle,j=c[e]);return null!=d&&(!j||"none"===j||"auto"===j||"auto auto"===j)?d:j},ea=function(a,e,c){var b={},d=a._gsOverwrittenClassNamePT,j;if(d&&!c){for(;d;)d.setRatio(0),d=d._next;a._gsOverwrittenClassNamePT=null}if(e=e||ca(a,null))if(j=e.length)for(;-1<--j;)b[e[j].replace(E,C)]=e.getPropertyValue(e[j]);else for(j in e)b[j]=e[j];else if(e=a.currentStyle||a.style)for(j in e)b[j.replace(E, +C)]=e[j];D||(b.opacity=la(a));a=da(a,e,!1);b.rotation=a.rotation*y;b.skewX=a.skewX*y;b.scaleX=a.scaleX;b.scaleY=a.scaleY;b.x=a.x;b.y=a.y;U&&(b.z=a.z,b.rotationX=a.rotationX*y,b.rotationY=a.rotationY*y,b.scaleZ=a.scaleZ);b.filters&&delete b.filters;return b},na=function(a,e,c,b){var d={};a=a.style;var j,H,p;for(H in c)if("cssText"!==H&&"length"!==H&&isNaN(H)&&e[H]!==(j=c[H]))if(-1===H.indexOf("Origin")&&("number"===typeof j||"string"===typeof j))d[H]=(""===j||"auto"===j||"none"===j)&&"string"===typeof e[H]&& +""!==e[H].replace(A,"")?0:j,void 0!==a[H]&&(p=new ha(a,H,a[H],p));if(b)for(H in b)"className"!==H&&(d[H]=b[H]);return{difs:d,firstMPT:p}},ta={width:["Left","Right"],height:["Top","Bottom"]},ua=["marginLeft","marginRight","marginTop","marginBottom"],S=function(a,e,c,b,d){if("px"===b||!b)return c;if("auto"===b||!c)return 0;var j=n.test(e),H=a,p=x.style,m=0>c;m&&(c=-c);"%"===b&&-1!==e.indexOf("border")?j=c/100*(j?a.clientWidth:a.clientHeight):(p.cssText="border-style:solid; border-width:0; position:absolute; line-height:0;", +"%"===b||"em"===b||!H.appendChild?(H=a.parentNode||B.body,p[j?"width":"height"]=c+b):p[j?"borderLeftWidth":"borderTopWidth"]=c+b,H.appendChild(x),j=parseFloat(x[j?"offsetWidth":"offsetHeight"]),H.removeChild(x),0===j&&!d&&(j=S(a,e,c,b,!0)));return m?-j:j},ia=function(a,e){if(null==a||""===a||"auto"===a||"auto auto"===a)a="0 0";var c=a.split(" "),b=-1!==a.indexOf("left")?"0%":-1!==a.indexOf("right")?"100%":c[0],d=-1!==a.indexOf("top")?"0%":-1!==a.indexOf("bottom")?"100%":c[1];null==d?d="0":"center"=== +d&&(d="50%");if("center"===b||isNaN(parseFloat(b)))b="50%";e&&(e.oxp=-1!==b.indexOf("%"),e.oyp=-1!==d.indexOf("%"),e.oxr="="===b.charAt(1),e.oyr="="===d.charAt(1),e.ox=parseFloat(b.replace(A,"")),e.oy=parseFloat(d.replace(A,"")));return b+" "+d+(2c?2:-2));return e+c},$={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255, +255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ka=function(e){if(!e||""===e)return $.black;if($[e])return $[e];if("number"===typeof e)return[e>>16,e>>8&255,e&255];if("#"===e.charAt(0)){if(4===e.length){var c=e.charAt(1),b=e.charAt(2);e=e.charAt(3);e="#"+c+c+b+b+e+e}e=parseInt(e.substr(1),16);return[e>>16,e>>8&255,e&255]}e=e.match(a)||$.transparent;e[0]=Number(e[0]);e[1]=Number(e[1]);e[2]= +Number(e[2]);3c--)for(;++c>0]:p[c];return m+a.join(g)+g+e+H}:function(a){"number"===typeof a&&(a+=f);a=a.match(d)||[];var e=a.length;if(h>e--)for(;++e>0]:p[e];return m+a.join(g)+H}},w=function(a){a=a.split(",");return function(e,c,b,d,j,p,m){c=(c+"").split(" ");m={};for(b=0;4>b;b++)m[a[b]]=c[b]=c[b]||c[(b-1)/2>>0];return d.parse(e,m,j,p)}};z._setPluginRatio=function(a){this.plugin.setRatio(a);for(var e=this.data,c=e.proxy,b=e.firstMPT,d;b;)d=c[b.v], +b.r?d=0>0:d-0.5>>0:1E-6>d&&-1E-6=b.type&&(h=b.p,g[h]=b.s+b.c,m[h]=b.s,p||(l=new ha(b,"s",h,l,b.r),b.c=0),1===b.type))for(c=b.l;0<--c;)f="xn"+c,h=b.p+"_"+f,g[h]=b.data[f],m[h]=b[f],p||(l=new ha(b,f,h,l,b.rxp[f]));b=b._next}return{proxy:m,end:g,firstMPT:l,pt:a}};var N=z.CSSPropTween=function(a,e,c,d,j,p,H,m,g,f,l){this.t=a;this.p=e;this.s=c;this.c=d;this.n=H||"css_"+e;a instanceof N||b.push(this.n);this.r=m;this.type=p||0;g&&(this.pr=g,h=!0); +this.b=void 0===f?c:f;this.e=void 0===l?c+d:l;j&&(this._next=j,j._prev=this)},fa=k.parseComplex=function(e,c,b,d,j,p,m,h,f,l){m=new N(e,c,0,0,m,l?2:1,null,!1,h,b,d);e=b.split(", ").join(",").split(" ");c=(d+"").split(", ").join(",").split(" ");b=e.length;h=!1!==R;var k,q,n,F,I;b!==c.length&&(e=(p||"").split(" "),b=e.length);m.plugin=f;m.setRatio=l;for(p=0;pf.length?1:f[3],m.appendXtra("",f,(4>k.length?1:k[3])-f,")",!1)));else if(l=f.match(a)){n=k.match(g);if(!n||n.length!==l.length)return m;for(k=q=0;kb.scaleX,m=U?parseFloat(M(a,sa,e,!1,"0 0 0").split(" ")[2])||b.zOrigin||0:0,j,p,f,g,h,l,q,n;P?j=M(a,va,e,!0):a.currentStyle&&(j=(j=a.currentStyle.filter.match(T))&&4===j.length?j[0].substr(4)+","+Number(j[2].substr(4))+","+Number(j[1].substr(4))+","+j[3].substr(4)+","+(b?b.x:0)+","+(b?b.y:0):null);p=(j||"").match(/(?:\-|\b)[\d\-\.e]+\b/gi)||[];for(e=p.length;-1<--e;)j=Number(p[e]), +p[e]=(1E5*j+(0>j?-0.5:0.5)>>0)/1E5;if(16===p.length){if(d=p[8],j=p[9],h=p[10],l=p[12],q=p[13],n=p[14],b.zOrigin&&(n=-b.zOrigin,l=d*n-p[12],q=j*n-p[13],n=h*n+b.zOrigin-p[14]),!c||l!==b.x||q!==b.y||n!==b.z){var F=p[0],I=p[1],t=p[2],r=p[3],u=p[4],D=p[5],s=p[6],x=p[7];p=p[11];var w=-Math.PI+1E-4,Y=Math.PI-1E-4,v=b.rotationX=Math.atan2(s,h),aa=vY,y,A,B,z;v&&(B=Math.cos(-v),z=Math.sin(-v),v=u*B+d*z,y=D*B+j*z,A=s*B+h*z,d=u*-z+d*B,j=D*-z+j*B,h=s*-z+h*B,p=x*-z+p*B,u=v,D=y,s=A);if(v=b.rotationY=Math.atan2(d, +F))f=vY,B=Math.cos(-v),z=Math.sin(-v),y=I*B-j*z,A=t*B-h*z,j=I*z+j*B,h=t*z+h*B,p=r*z+p*B,F=F*B-d*z,I=y,t=A;if(v=b.rotation=Math.atan2(I,D))g=vY,B=Math.cos(-v),z=Math.sin(-v),F=F*B+u*z,y=I*B+D*z,D=I*-z+D*B,s=t*-z+s*B,I=y;g&&aa?b.rotation=b.rotationX=0:g&&f?b.rotation=b.rotationY=0:f&&aa&&(b.rotationY=b.rotationX=0);b.scaleX=(1E5*Math.sqrt(F*F+I*I)+0.5>>0)/1E5;b.scaleY=(1E5*Math.sqrt(D*D+j*j)+0.5>>0)/1E5;b.scaleZ=(1E5*Math.sqrt(s*s+h*h)+0.5>>0)/1E5;b.skewX=0;b.perspective=p?1/p:0;b.x=l;b.y= +q;b.z=n}}else if(!U||0===p.length||b.x!==p[4]||b.y!==p[5]||!b.rotationX&&!b.rotationY){j=(f=6<=p.length)?p[0]:1;l=p[1]||0;h=p[2]||0;q=f?p[3]:1;b.x=p[4]||0;b.y=p[5]||0;f=Math.sqrt(j*j+l*l);g=Math.sqrt(q*q+h*h);j=j||l?Math.atan2(l,j):b.rotation||0;h=h||q?Math.atan2(h,q)+j:b.skewX||0;l=f-Math.abs(b.scaleX||0);q=g-Math.abs(b.scaleY||0);Math.abs(h)>Math.PI/2&&Math.abs(h)<1.5*Math.PI&&(d?(f*=-1,h+=0>=j?Math.PI:-Math.PI,j+=0>=j?Math.PI:-Math.PI):(g*=-1,h+=0>=h?Math.PI:-Math.PI));d=(j-b.rotation)%Math.PI; +n=(h-b.skewX)%Math.PI;if(void 0===b.skewX||1E-6l||1E-6q||1E-6d||1E-6n)b.scaleX=f,b.scaleY=g,b.rotation=j,b.skewX=h;U&&(b.rotationX=b.rotationY=b.z=0,b.perspective=parseFloat(k.defaultTransformPerspective)||0,b.scaleZ=1)}b.zOrigin=m;for(e in b)1E-6>b[e]&&-1E-6>0)/1E5,b=(1E5*Math.sin(b)*e.scaleX>>0)/1E5,j=(1E5*Math.sin(c)*-e.scaleY>> +0)/1E5,c=(1E5*Math.cos(c)*e.scaleY>>0)/1E5,p=this.t.style,m=this.t.currentStyle,h,g;if(m){g=b;b=-j;j=-g;h=m.filter;p.filter="";var l=this.t.offsetWidth;g=this.t.offsetHeight;var k="absolute"!==m.position,q="progid:DXImageTransform.Microsoft.Matrix(M11="+d+", M12="+b+", M21="+j+", M22="+c,n=e.x,F=e.y,t,D;null!=e.ox&&(t=(e.oxp?0.01*l*e.ox:e.ox)-l/2,D=(e.oyp?0.01*g*e.oy:e.oy)-g/2,n+=t-(t*d+D*b),F+=D-(t*j+D*c));if(k)t=l/2,D=g/2,q+=", Dx="+(t-(t*d+D*b)+n)+", Dy="+(D-(t*j+D*c)+F)+")";else{var r=8>I?1:-1; +t=e.ieOffsetX||0;D=e.ieOffsetY||0;e.ieOffsetX=Math.round((l-((0>d?-d:d)*l+(0>b?-b:b)*g))/2+n);e.ieOffsetY=Math.round((g-((0>c?-c:c)*g+(0>j?-j:j)*l))/2+F);for(O=0;4>O;O++)l=ua[O],g=m[l],g=-1!==g.indexOf("px")?parseFloat(g):S(this.t,l,parseFloat(g),g.replace(f,""))||0,n=g!==e[l]?2>O?-e.ieOffsetX:-e.ieOffsetY:2>O?t-e.ieOffsetX:D-e.ieOffsetY,p[l]=(e[l]=Math.round(g-n*(0===O||2===O?1:r)))+"px";q+=", sizingMethod='auto expand')"}p.filter=-1!==h.indexOf("DXImageTransform.Microsoft.Matrix(")?h.replace(L, +q):q+" "+h;if(0===a||1===a)if(1===d&&0===b&&0===j&&1===c&&(!k||-1!==q.indexOf("Dx=0, Dy=0")))(!u.test(h)||100===parseFloat(RegExp.$1))&&-1===h.indexOf("gradient(")&&p.removeAttribute("filter")}},xa=function(){var a=this.data,e=this.t.style,b=a.perspective,c=a.scaleX,d=0,j=0,m=0,g=0,h=a.scaleY,f=0,l=0,q=0,k=0,n=a.scaleZ,F=0,I=0,t=0,D=b?-1/b:0,r=a.rotation,u=a.zOrigin,s,v,w,x,B;p&&(v=e.top+"",s=parseFloat(v)||0,v=v.substr((s+"").length),a._ffFix=!a._ffFix,e.top=(a._ffFix?s+0.05:s-0.05)+(""===v?"px": +v));r&&(s=Math.cos(r),r=Math.sin(r),w=h*r,d=c*-r,h*=s,c*=s,g=w);if(r=a.rotationY)s=Math.cos(r),r=Math.sin(r),x=n*-r,B=D*-r,j=c*r,f=g*r,n*=s,D*=s,c*=s,g*=s,q=x,I=B;if(r=a.rotationX)s=Math.cos(r),r=Math.sin(r),v=d*s+j*r,w=h*s+f*r,x=k*s+n*r,B=t*s+D*r,j=d*-r+j*s,f=h*-r+f*s,n=k*-r+n*s,D=t*-r+D*s,d=v,h=w,k=x,t=B;u&&(F-=u,m=j*F,l=f*F,F=n*F+u);m+=a.x;l+=a.y;F=(1E5*(F+a.z)>>0)/1E5;e[P]="matrix3d("+(1E5*c>>0)/1E5+","+(1E5*g>>0)/1E5+","+(1E5*q>>0)/1E5+","+(1E5*I>>0)/1E5+","+(1E5*d>>0)/1E5+","+(1E5*h>>0)/1E5+ +","+(1E5*k>>0)/1E5+","+(1E5*t>>0)/1E5+","+(1E5*j>>0)/1E5+","+(1E5*f>>0)/1E5+","+(1E5*n>>0)/1E5+","+(1E5*D>>0)/1E5+","+(1E5*m>>0)/1E5+","+(1E5*l>>0)/1E5+","+F+","+(b?1+-F/b:1)+")"},ya=function(){var a=this.data;if(!a.rotation&&!a.skewX)this.t.style[P]="matrix("+a.scaleX+",0,0,"+a.scaleY+","+a.x+","+a.y+")";else{var e=a.rotation,b=e-a.skewX,c=(1E5*Math.cos(e)*a.scaleX>>0)/1E5,e=(1E5*Math.sin(e)*a.scaleX>>0)/1E5,d=(1E5*Math.sin(b)*-a.scaleY>>0)/1E5,b=(1E5*Math.cos(b)*a.scaleY>>0)/1E5;this.t.style[P]= +"matrix("+c+","+e+","+d+","+b+","+a.x+","+a.y+")"}};K("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective",null,function(a,e,b,c,d,p,m){if(c._transform)return d;e=c._transform=da(a,l,!0);var g=a.style,h=ra.length,f,q,k,n,F;if("string"===typeof m.transform&&P)q=g[P],g[P]=m.transform,f=da(a,null,!1),g[P]=q;else if("object"===typeof m){q=null!=m.rotation?m.rotation: +null!=m.rotationZ?m.rotationZ:e.rotation*y;f={scaleX:V(null!=m.scaleX?m.scaleX:m.scale,e.scaleX),scaleY:V(null!=m.scaleY?m.scaleY:m.scale,e.scaleY),scaleZ:V(null!=m.scaleZ?m.scaleZ:m.scale,e.scaleZ),x:V(m.x,e.x),y:V(m.y,e.y),z:V(m.z,e.z),perspective:V(m.transformPerspective,e.perspective)};f.rotation=null!=m.shortRotation||null!=m.shortRotationZ?ja(m.shortRotation||m.shortRotationZ||0,e.rotation):"number"===typeof q?q*J:Z(q,e.rotation);U&&(f.rotationX=null!=m.shortRotationX?ja(m.shortRotationX,e.rotationX): +"number"===typeof m.rotationX?m.rotationX*J:Z(m.rotationX,e.rotationX),f.rotationY=null!=m.shortRotationY?ja(m.shortRotationY,e.rotationY):"number"===typeof m.rotationY?m.rotationY*J:Z(m.rotationY,e.rotationY),1E-6>f.rotationX&&-1E-6f.rotationY&&-1E-6f.skewY&&-1E-6f.skewX&&-1E-6f.rotation&&-1E-6k||null!=j[b])F=!0,d=new N(e,b,e[b],k,d),d.xs0=0,d.plugin=p,c._overwriteProps.push(d.n);if((k=m.transformOrigin)||U&&n&&e.zOrigin)P?(F=!0,k=(k||M(a,b,l,!1,"50% 50%"))+"",b=sa,d=new N(g,b,0,0,d, +-1,"css_transformOrigin"),d.b=g[b],d.plugin=p,U?(q=e.zOrigin,k=k.split(" "),e.zOrigin=(2n?1:0))||""):(n=parseFloat(h),D=h.substr((n+"").length)),""=== +D&&(D=q[b]||s),D!==s&&(g=S(a,"borderLeft",k,s),k=S(a,"borderTop",k,s),"%"===D?(g=100*(g/F)+"%",f=100*(k/r)+"%"):"em"===D?(s=S(a,"borderLeft",1,"em"),g=g/s+"em",f=k/s+"em"):(g+="px",f=k+"px"),I&&(h=parseFloat(g)+n+D,p=parseFloat(f)+n+D)),d=fa(m,c[j],g+" "+f,h+" "+p,!1,"0px",d);return d},!0,!1,pa("0px 0px 0px 0px",!1,!0));K("backgroundPosition","0 0",function(a,e,b,c,d,j){b=l||ca(a,null);b=this.format((b?I?b.getPropertyValue("background-position-x")+" "+b.getPropertyValue("background-position-y"):b.getPropertyValue("background-position"): +a.currentStyle.backgroundPositionX+" "+a.currentStyle.backgroundPositionY)||"0 0");e=this.format(e);var m,p,f,g;if(-1!==b.indexOf("%")!==(-1!==e.indexOf("%"))){c=b.split(" ");m=e.split(" ");G.setAttribute("src",M(a,"backgroundImage").replace(s,""));for(p=2;-1<--p;)b=c[p],f=-1!==b.indexOf("%"),f!==(-1!==m[p].indexOf("%"))&&(g=0===p?a.offsetWidth-G.width:a.offsetHeight-G.height,c[p]=f?parseFloat(b)/100*g+"px":100*(parseFloat(b)/g)+"%");b=c.join(" ")}return this.parseComplex(a.style,b,e,d,j)},!1,!1, +ia);K("backgroundSize","0 0",null,!1,!1,ia);K("perspective","0px",null,!0);K("perspectiveOrigin","50% 50%",null,!0);K("transformStyle","preserve-3d",null,!0);K("backfaceVisibility","visible",null,!0);K("margin",null,w("marginTop,marginRight,marginBottom,marginLeft"));K("padding",null,w("paddingTop,paddingRight,paddingBottom,paddingLeft"));K("clip","rect(0px,0px,0px,0px)");K("textShadow","0px 0px 0px #999",null,!1,!0);K("autoRound",null,function(a,e,b,c,d){return d});K("border","0px solid #000",function(a, +e,b,c,d,j){return this.parseComplex(a.style,this.format(M(a,"borderTopWidth",l,!1,"0px")+" "+M(a,"borderTopStyle",l,!1,"solid")+" "+M(a,"borderTopColor",l,!1,"#000")),this.format(e),d,j)},!1,!0,function(a){var e=a.split(" ");return e[0]+" "+(e[1]||"solid")+" "+(a.match(W)||["#000"])[0]});var za=function(a){var e=this.t,b=e.filter;a=this.s+this.c*a>>0;var c;100===a&&(-1===b.indexOf("atrix(")&&-1===b.indexOf("radient(")?(e.removeAttribute("filter"),c=!M(this.data,"filter")):(e.filter=b.replace(Q,""), +c=!0));c||(this.xn1&&(e.filter=b=b||"alpha(opacity=100)"),e.filter=-1===b.indexOf("opacity")?e.filter+(" alpha(opacity="+a+")"):b.replace(u,"opacity="+a))};K("opacity,alpha,autoAlpha","1",function(a,e,b,c,d,j){var m=parseFloat(M(a,"opacity",l,!1,"1")),p=a.style,f;e=parseFloat(e);"autoAlpha"===b&&(f=M(a,"visibility",l),1===m&&("hidden"===f&&0!==e)&&(m=0),d=new N(p,"visibility",0,0,d,-1,null,!1,0,0!==m?"visible":"hidden",0===e?"hidden":"visible"),d.xs0="visible",c._overwriteProps.push(d.n));D?d=new N(p, +"opacity",m,e-m,d):(d=new N(p,"opacity",100*m,100*(e-m),d),d.xn1="autoAlpha"===b?1:0,p.zoom=1,d.type=2,d.b="alpha(opacity="+d.s+")",d.e="alpha(opacity="+(d.s+d.c)+")",d.data=a,d.plugin=j,d.setRatio=za);return d});var Aa=function(a){if(1===a||0===a){this.t.className=1===a?this.e:this.b;a=this.data;for(var e=this.t.style,b=e.removeProperty?"removeProperty":"removeAttribute";a;){if(a.v)e[a.p]=a.v;else e[b](a.p.replace(v,"-$1").toLowerCase());a=a._next}}else this.t.className!==this.b&&(this.t.className= +this.b)};K("className",null,function(a,e,b,c,d,m,j){var p=a.className,f=a.style.cssText;d=c._classNamePT=new N(a,b,0,0,d,2);d.setRatio=Aa;d.b=p;d.e="="!==e.charAt(1)?e:"+"===e.charAt(0)?p+" "+e.substr(2):p.split(e.substr(2)).join("");c._tween._duration&&(e=ea(a,l,!0),a.className=d.e,j=na(a,e,ea(a),j),a.className=p,d.data=j.firstMPT,a.style.cssText=f,d=d.xfirst=c.parse(a,j.difs,d,m));return d});c=["bezier","throwProps","physicsProps","physics2D"];for(O=c.length;O--;)z(c[O]);c=k.prototype;c._firstPT= +null;c._onInitTween=function(a,c,d){if(!a.nodeType)return!1;this._target=a;this._tween=d;this._vars=c;R=c.autoRound;h=!1;q=c.suffixMap||k.suffixMap;l=ca(a,"");b=this._overwriteProps;d=a.style;var j,p,f,g;if(e&&""===d.zIndex&&(j=M(a,"zIndex",l),"auto"===j||""===j))d.zIndex=0;"string"===typeof c&&(p=d.cssText,j=ea(a,l),d.cssText=p+";"+c,j=na(a,j,ea(a)).difs,!D&&X.test(c)&&(j.opacity=parseFloat(RegExp.$1)),c=j,d.cssText=p);this._firstPT=c=this.parse(a,c,null);if(this._transformType){j=3===this._transformType; +if(P){if(m){e=!0;if(""===d.zIndex&&(g=M(a,"zIndex",l),"auto"===g||""===g))d.zIndex=0;F&&(d.WebkitBackfaceVisibility=this._vars.WebkitBackfaceVisibility||(j?"visible":"hidden"))}}else d.zoom=1;for(d=c;d&&d._next;)d=d._next;g=new N(a,"transform",0,0,null,2);this._linkCSSP(g,null,d);g.setRatio=j&&U?xa:P?ya:wa;g.data=this._transform||da(a,l,!0);b.pop()}if(h){for(;c;){a=c._next;for(d=p;d&&d.pr>c.pr;)d=d._next;(c._prev=d?d._prev:f)?c._prev._next=c:p=c;(c._next=d)?d._prev=c:f=c;c=a}this._firstPT=p}return!0}; +c.parse=function(a,e,b,c){var d=a.style,j,m,p,f,g,h,k,n;for(j in e){g=e[j];if(m=t[j])b=m.parse(a,g,j,this,b,c,e);else if(m=M(a,j,l)+"",k="string"===typeof g,"color"===j||"fill"===j||"stroke"===j||-1!==j.indexOf("Color")||k&&!g.indexOf("rgb"))k||(g=ka(g),g=(3f?1:0))||""):(f=parseFloat(g),k=k?g.substr((f+"").length)||"":"");""===k&&(k=q[j]||h);g=f||0===f?(n?f+p:f)+k:e[j];if(h!== +k&&""!==k&&(f||0===f))if(p||0===p)if(p=S(a,j,p,h),"%"===k?(p/=S(a,j,100,"%")/100,100>0:b-0.5>>0:1E-6>b&&-1E-6(a*=2)?0.5*a*a*((this._p2+1)*a-this._p2):0.5*((a-=2)*a*((this._p2+1)*a+this._p2)+2)}),t=h("BounceOut",function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}),c=h("BounceIn",function(a){return(a=1-a)<1/2.75?1-7.5625*a*a:a<2/2.75?1-(7.5625*(a-=1.5/2.75)*a+0.75):a<2.5/2.75? +1-(7.5625*(a-=2.25/2.75)*a+0.9375):1-(7.5625*(a-=2.625/2.75)*a+0.984375)}),a=h("BounceInOut",function(a){var b=0.5>a;a=b?1-2*a:2*a-1;a=a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375;return b?0.5*(1-a):0.5*a+0.5}),g=h("CircOut",function(a){return Math.sqrt(1-(a-=1)*a)}),d=h("CircIn",function(a){return-(Math.sqrt(1-a*a)-1)}),A=h("CircInOut",function(a){return 1>(a*=2)?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-= +2)*a)+1)}),f=2*Math.PI,u=function(a,b,c){var d=k("easing."+a,function(a,b){this._p1=a||1;this._p2=b||c;this._p3=this._p2/f*(Math.asin(1/this._p1)||0)},!0);a=d.prototype=new r;a.constructor=d;a.getRatio=b;a.config=function(a,b){return new d(a,b)};return d},X=u("ElasticOut",function(a){return this._p1*Math.pow(2,-10*a)*Math.sin((a-this._p3)*f/this._p2)+1},0.3),Q=u("ElasticIn",function(a){return-(this._p1*Math.pow(2,10*(a-=1))*Math.sin((a-this._p3)*f/this._p2))},0.3),u=u("ElasticInOut",function(a){return 1> +(a*=2)?-0.5*this._p1*Math.pow(2,10*(a-=1))*Math.sin((a-this._p3)*f/this._p2):0.5*this._p1*Math.pow(2,-10*(a-=1))*Math.sin((a-this._p3)*f/this._p2)+1},0.45),v=h("ExpoOut",function(a){return 1-Math.pow(2,-10*a)}),E=h("ExpoIn",function(a){return Math.pow(2,10*(a-1))-0.001}),s=h("ExpoInOut",function(a){return 1>(a*=2)?0.5*Math.pow(2,10*(a-1)):0.5*(2-Math.pow(2,-10*(a-1)))}),C=Math.PI/2,n=h("SineOut",function(a){return Math.sin(a*C)}),T=h("SineIn",function(a){return-Math.cos(a*C)+1}),h=h("SineInOut",function(a){return-0.5* +(Math.cos(Math.PI*a)-1)}),L=k("easing.SlowMo",function(a,b,c){null==a?a=0.7:1this._p3?this._calcEnd?1-(a=(a-this._p3)/this._p1)*a:b+(a-b)*(a=(a-this._p3)/this._p1)*a*a*a:this._calcEnd?1:b};L.ease=new L(0.7,0.7);J.config= +L.config=function(a,b,c){return new L(a,b,c)};var y=k("easing.SteppedEase",function(a){a=a||1;this._p1=1/a;this._p2=a+1},!0),J=y.prototype=new r;J.constructor=y;J.getRatio=function(a){0>a?a=0:1<=a&&(a=0.999999999);return(this._p2*a>>0)*this._p1};J.config=y.config=function(a){return new y(a)};k("easing.Bounce",{easeOut:new t,easeIn:new c,easeInOut:new a},!0);k("easing.Circ",{easeOut:new g,easeIn:new d,easeInOut:new A},!0);k("easing.Elastic",{easeOut:new X,easeIn:new Q,easeInOut:new u},!0);k("easing.Expo", +{easeOut:new v,easeIn:new E,easeInOut:new s},!0);k("easing.Sine",{easeOut:new n,easeIn:new T,easeInOut:new h},!0);return{easeOut:new l,easeIn:new b,easeInOut:new q}},!0)}); +(function(r){var k=function(a){a=a.split(".");var b=r,c;for(c=0;ca?2*a:2*(1-a);1===c?d*=d:2===c?d*=d*d:3===c?d*=d*d*d:4===c&&(d*=d*d*d*d);return 1===b?1-d:2===b?d:0.5>a?d/2:1-d/2};q=["Linear","Quad","Cubic","Quart","Quint"];for(l=q.length;-1<--l;)b=d("easing."+q[l],null,!0),t=d("easing.Power"+l,null,!0),b.easeOut=t.easeOut=new u(null, +null,1,l),b.easeIn=t.easeIn=new u(null,null,2,l),b.easeInOut=t.easeInOut=new u(null,null,3,l);d("easing.Strong",h.easing.Power4,!0);h.easing.Linear.easeNone=h.easing.Linear.easeIn;var X=d("events.EventDispatcher",function(a){this._listeners={};this._eventTarget=a||this});b=X.prototype;b.addEventListener=function(a,b,c,d,f){f=f||0;var g=this._listeners[a],h=0,j;null==g&&(this._listeners[a]=g=[]);for(j=g.length;-1<--j;)a=g[j],a.c===b?g.splice(j,1):0===h&&a.pr=l||!0===a)c.frame++,l=c.time>l?c.time+k-(c.time-l):c.time+k-0.001,l>0||1)}:Q;n();j=h(q)};this.useRAF=function(a){if(!arguments.length)return f;n();f=a;c.fps(g)};c.fps(a);r.setTimeout(function(){f&&!j&&c.useRAF(!1)},1E3)});b=h.Ticker.prototype=new h.events.EventDispatcher;b.constructor=h.Ticker;var s=d("core.Animation",function(a,b){this.vars=b||{};this._duration=this._totalDuration=a||0;this._delay=Number(this.vars.delay)||0;this._timeScale=1;this._active=!0===this.vars.immediateRender; +this.data=this.vars.data;this._reversed=!0===this.vars.reversed;if(x){c||(C.tick(),c=!0);var d=this.vars.useFrames?B:x;d.insert(this,d._time);this.vars.paused&&this.paused(!0)}}),C=s.ticker=new h.Ticker;b=s.prototype;b._dirty=b._gc=b._initted=b._paused=!1;b._totalTime=b._time=0;b._rawPrevTime=-1;b._next=b._last=b._onUpdate=b._timeline=b.timeline=null;b._paused=!1;b.play=function(a,b){arguments.length&&this.seek(a,b);this.reversed(!1);return this.paused(!1)};b.pause=function(a,b){arguments.length&& +this.seek(a,b);return this.paused(!0)};b.resume=function(a,b){arguments.length&&this.seek(a,b);return this.paused(!1)};b.seek=function(a,b){return this.totalTime(Number(a),!1!==b)};b.restart=function(a,b){this.reversed(!1);this.paused(!1);return this.totalTime(a?-this._delay:0,!1!==b)};b.reverse=function(a,b){arguments.length&&this.seek(a||this.totalDuration(),b);this.reversed(!0);return this.paused(!1)};b.render=function(){};b.invalidate=function(){return this};b._enabled=function(a,b){this._gc= +!a;this._active=a&&!this._paused&&0this._duration&&(a=this._duration);return this.totalTime(a,b)};b.totalTime=function(a, +b){if(!arguments.length)return this._totalTime;if(this._timeline){0>a&&(a+=this.totalDuration());if(this._timeline.smoothChildTiming&&(this._dirty&&this.totalDuration(),a>this._totalDuration&&(a=this._totalDuration),this._startTime=(this._paused?this._pauseTime:this._timeline._time)-(!this._reversed?a:this._totalDuration-a)/this._timeScale,this._timeline._dirty||this._uncache(!1),!this._timeline._active))for(var c=this._timeline;c._timeline;)c.totalTime(c._totalTime,!0),c=c._timeline;this._gc&&this._enabled(!0, +!1);this._totalTime!==a&&this.render(a,b,!1)}return this};b.startTime=function(a){if(!arguments.length)return this._startTime;a!==this._startTime&&(this._startTime=a,this.timeline&&this.timeline._sortChildren&&this.timeline.insert(this,a-this._delay));return this};b.timeScale=function(a){if(!arguments.length)return this._timeScale;a=a||1E-6;if(this._timeline&&this._timeline.smoothChildTiming){var b=this._pauseTime||0===this._pauseTime?this._pauseTime:this._timeline._totalTime;this._startTime=b-(b- +this._startTime)*this._timeScale/a}this._timeScale=a;return this._uncache(!1)};b.reversed=function(a){if(!arguments.length)return this._reversed;a!=this._reversed&&(this._reversed=a,this.totalTime(this._totalTime,!0));return this};b.paused=function(a){if(!arguments.length)return this._paused;a!=this._paused&&this._timeline&&(!a&&this._timeline.smoothChildTiming&&(this._startTime+=this._timeline.rawTime()-this._pauseTime,this._uncache(!1)),this._pauseTime=a?this._timeline.rawTime():null,this._paused= +a,this._active=!this._paused&&0d;)c=c._prev;c?(a._next=c._next,c._next=a):(a._next=this._first,this._first=a);a._next?a._next._prev=a:this._last=a;a._prev=c;this._timeline&&this._uncache(!0);return this};b._remove=function(a,b){a.timeline===this&&(b||a._enabled(!1,!0),a.timeline=null,a._prev?a._prev._next=a._next:this._first===a&&(this._first=a._next),a._next?a._next._prev= +a._prev:this._last===a&&(this._last=a._prev),this._timeline&&this._uncache(!0));return this};b.render=function(a,b){var c=this._first,d;for(this._totalTime=this._time=this._rawPrevTime=a;c;){d=c._next;if(c._active||a>=c._startTime&&!c._paused)c._reversed?c.render((!c._dirty?c._totalDuration:c.totalDuration())-(a-c._startTime)*c._timeScale,b,!1):c.render((a-c._startTime)*c._timeScale,b,!1);c=d}};b.rawTime=function(){return this._totalTime};var n=d("TweenLite",function(a,b,c){s.call(this,b,c);if(null== +a)throw"Cannot tween an undefined reference.";this.target=a;this._overwrite=null==this.vars.overwrite?j[n.defaultOverwrite]:"number"===typeof this.vars.overwrite?this.vars.overwrite>>0:j[this.vars.overwrite];if((a instanceof Array||a.jquery)&&"object"===typeof a[0]){this._targets=a.slice(0);this._propLookup=[];this._siblings=[];for(a=0;ak&&((q||!j._initted)&&2E-10>=k-j._startTime||(l[n++]=j));for(g=n;-1<--g;)if(j=l[g],2===d&&j._kill(c,a)&&(h=!0),2!==d||!j._firstPT&&j._initted)j._enabled(!1,!1)&&(h=!0);return h},w=function(a,b,c){for(var d=a._timeline,f=d._timeScale,g=a._startTime;d._timeline;){g+=d._startTime;f*=d._timeScale;if(d._paused)return-100;d=d._timeline}g/=f;return g>b?g-b:c&&g===b||!a._initted&&2E-10> +g-b?1E-10:(g+=a.totalDuration()/a._timeScale/f)>b?0:g-b-1E-10};b._init=function(){this.vars.startAt&&(this.vars.startAt.overwrite=0,this.vars.startAt.immediateRender=!0,n.to(this.target,0,this.vars.startAt));var a,b;this._ease=this.vars.ease instanceof u?this.vars.easeParams instanceof Array?this.vars.ease.config.apply(this.vars.ease,this.vars.easeParams):this.vars.ease:"function"===typeof this.vars.ease?new u(this.vars.ease,this.vars.easeParams):n.defaultEase;this._easeType=this._ease._type;this._easePower= +this._ease._power;this._firstPT=null;if(this._targets)for(a=this._targets.length;-1<--a;){if(this._initProps(this._targets[a],this._propLookup[a]={},this._siblings[a],this._overwrittenProps?this._overwrittenProps[a]:null))b=!0}else b=this._initProps(this.target,this._propLookup,this._siblings,this._overwrittenProps);b&&n._onPluginEvent("_onInitAllProps",this);this._overwrittenProps&&null==this._firstPT&&"function"!==typeof this.target&&this._enabled(!1,!1);if(this.vars.runBackwards)for(a=this._firstPT;a;)a.s+= +a.c,a.c=-a.c,a=a._next;this._onUpdate=this.vars.onUpdate;this._initted=!0};b._initProps=function(a,b,c,d){var f,g,h,j,k,l;if(null==a)return!1;for(f in this.vars){if(y[f]){if("onStartParams"===f||"onUpdateParams"===f||"onCompleteParams"===f||"onReverseCompleteParams"===f||"onRepeatParams"===f)if(k=this.vars[f])for(g=k.length;-1<--g;)"{self}"===k[g]&&(k=this.vars[f]=k.concat(),k[g]=this)}else if(T[f]&&(j=new T[f])._onInitTween(a,this.vars[f],this)){this._firstPT=l={_next:this._firstPT,t:j,p:"setRatio", +s:0,c:1,f:!0,n:f,pg:!0,pr:j._priority};for(g=j._overwriteProps.length;-1<--g;)b[j._overwriteProps[g]]=this._firstPT;if(j._priority||j._onInitAllProps)h=!0;if(j._onDisable||j._onEnable)this._notifyPluginsOfEnabled=!0}else this._firstPT=b[f]=l={_next:this._firstPT,t:a,p:f,f:"function"===typeof a[f],n:f,pg:!1,pr:0},l.s=!l.f?parseFloat(a[f]):a[f.indexOf("set")||"function"!==typeof a["get"+f.substr(3)]?f:"get"+f.substr(3)](),g=this.vars[f],l.c="number"===typeof g?g-l.s:"string"===typeof g&&"="===g.charAt(1)? +parseInt(g.charAt(0)+"1",10)*Number(g.substr(2)):Number(g)||0;l&&l._next&&(l._next._prev=l)}return d&&this._kill(d,a)?this._initProps(a,b,c,d):1=this._duration){if(this._totalTime=this._time=this._duration,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(g=!0,j="onComplete"),0===this._duration){if(0===a|| +0>this._rawPrevTime)this._rawPrevTime!==a&&(c=!0);this._rawPrevTime=a}}else if(0>=a){this._totalTime=this._time=0;this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0;if(0!==d||0===this._duration&&0a?(this._active=!1,0===this._duration&&(0<=this._rawPrevTime&&(c=!0),this._rawPrevTime=a)):this._initted||(c=!0)}else if(this._totalTime=this._time=a,this._easeType){var h=a/this._duration,k=this._easeType,l=this._easePower;if(1===k||3===k&& +0.5<=h)h=1-h;3===k&&(h*=2);1===l?h*=h:2===l?h*=h*h:3===l?h*=h*h*h:4===l&&(h*=h*h*h*h);this.ratio=1===k?1-h:2===k?h:0.5>a/this._duration?h/2:1-h/2}else this.ratio=this._ease.getRatio(a/this._duration);if(this._time!==d||c){this._initted||(this._init(),!g&&this._time&&(this.ratio=this._ease.getRatio(this._time/this._duration)));!this._active&&!this._paused&&(this._active=!0);if(0===d&&this.vars.onStart&&(0!==this._time||0===this._duration))b||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams|| +f);for(a=this._firstPT;a;){if(a.f)a.t[a.p](a.c*this.ratio+a.s);else a.t[a.p]=a.c*this.ratio+a.s;a=a._next}this._onUpdate&&(b||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||f));j&&!this._gc&&(g&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),b||this.vars[j]&&this.vars[j].apply(this.vars[j+"Scope"]||this,this.vars[j+"Params"]||f))}};b._kill=function(a,b){"all"===a&&(a=null);if(null==a&&(null==b||b===this.target))return this._enabled(!1,!1);b= +b||this._targets||this.target;var c,d,f,g,h,j,k;if((b instanceof Array||b.jquery)&&"object"===typeof b[0])for(c=b.length;-1<--c;)this._kill(a,b[c])&&(h=!0);else{if(this._targets)for(c=this._targets.length;-1<--c;){if(b===this._targets[c]){g=this._propLookup[c]||{};this._overwrittenProps=this._overwrittenProps||[];d=this._overwrittenProps[c]=a?this._overwrittenProps[c]||{}:"all";break}}else{if(b!==this.target)return!1;g=this._propLookup;d=this._overwrittenProps=a?this._overwrittenProps||{}:"all"}if(g)for(f in j= +a||g,k=a!==d&&"all"!==d&&a!==g&&(null==a||!0!==a._tempKill),j){if(c=g[f]){c.pg&&c.t._kill(j)&&(h=!0);if(!c.pg||0===c.t._overwriteProps.length)c._prev?c._prev._next=c._next:c===this._firstPT&&(this._firstPT=c._next),c._next&&(c._next._prev=c._prev),c._next=c._prev=null;delete g[f]}k&&(d[f]=1)}}return h};b.invalidate=function(){this._notifyPluginsOfEnabled&&n._onPluginEvent("_onDisable",this);this._onUpdate=this._overwrittenProps=this._firstPT=null;this._initted=this._active=this._notifyPluginsOfEnabled= +!1;this._propLookup=this._targets?{}:[];return this};b._enabled=function(a,b){if(a&&this._gc)if(this._targets)for(var c=this._targets.length;-1<--c;)this._siblings[c]=G(this._targets[c],this,!0);else this._siblings=G(this.target,this,!0);s.prototype._enabled.call(this,a,b);return this._notifyPluginsOfEnabled&&this._firstPT?n._onPluginEvent(a?"_onEnable":"_onDisable",this):!1};n.to=function(a,b,c){return new n(a,b,c)};n.from=function(a,b,c){c.runBackwards=!0;!1!==c.immediateRender&&(c.immediateRender= +!0);return new n(a,b,c)};n.fromTo=function(a,b,c,d){d.startAt=c;c.immediateRender&&(d.immediateRender=!0);return new n(a,b,d)};n.delayedCall=function(a,b,c,d,f){return new n(b,0,{delay:a,onComplete:b,onCompleteParams:c,onCompleteScope:d,onReverseComplete:b,onReverseCompleteParams:c,onReverseCompleteScope:d,immediateRender:!1,useFrames:f,overwrite:0})};n.set=function(a,b){return new n(a,0,b)};n.killTweensOf=n.killDelayedCallsTo=function(a,b){for(var c=n.getTweensOf(a),d=c.length;-1<--d;)c[d]._kill(b, +a)};n.getTweensOf=function(a){if(null!=a){var b,c,d;if((a instanceof Array||a.jquery)&&"object"===typeof a[0]){b=a.length;for(c=[];-1<--b;)c=c.concat(n.getTweensOf(a[b]));for(b=c.length;-1<--b;){d=c[b];for(a=b;-1<--a;)d===c[a]&&c.splice(b,1)}}else{c=G(a).concat();for(b=c.length;-1<--b;)c[b]._gc&&c.splice(b,1)}return c}};var R=d("plugins.TweenPlugin",function(a,b){this._overwriteProps=(a||"").split(",");this._propName=this._overwriteProps[0];this._priority=b||0},!0);b=R.prototype;R.version=12;R.API= +2;b._firstPT=null;b._addTween=function(a,b,c,d,f,g){var h;if(null!=d&&(h="number"===typeof d||"="!==d.charAt(1)?Number(d)-c:parseInt(d.charAt(0)+"1",10)*Number(d.substr(2))))this._firstPT=a={_next:this._firstPT,t:a,p:b,s:c,c:h,f:"function"===typeof a[b],n:f||b,r:g},a._next&&(a._next._prev=a)};b.setRatio=function(a){for(var b=this._firstPT,c;b;){c=b.c*a+b.s;b.r&&(c=c+(0>0);if(b.f)b.t[b.p](c);else b.t[b.p]=c;b=b._next}};b._kill=function(a){if(null!=a[this._propName])this._overwriteProps= +[];else for(var b=this._overwriteProps.length;-1<--b;)null!=a[this._overwriteProps[b]]&&this._overwriteProps.splice(b,1);for(b=this._firstPT;b;)null!=a[b.n]&&(b._next&&(b._next._prev=b._prev),b._prev?(b._prev._next=b._next,b._prev=null):this._firstPT===b&&(this._firstPT=b._next)),b=b._next;return!1};b._roundProps=function(a,b){for(var c=this._firstPT;c;){if(a[this._propName]||null!=c.n&&a[c.n.split(this._propName+"_").join("")])c.r=b;c=c._next}};n._onPluginEvent=function(a,b){var c=b._firstPT,d;if("_onInitAllProps"=== +a){for(var f,g,h,j;c;){j=c._next;for(f=g;f&&f.pr>c.pr;)f=f._next;(c._prev=f?f._prev:h)?c._prev._next=c:g=c;(c._next=f)?f._prev=c:h=c;c=j}c=b._firstPT=g}for(;c;)c.pg&&"function"===typeof c.t[a]&&c.t[a]()&&(d=!0),c=c._next;return d};R.activate=function(a){for(var b=a.length;-1<--b;)a[b].API===R.API&&(n._plugins[(new a[b])._propName]=a[b]);return!0};if(q=r._gsQueue){for(l=0;l(a*=2)?0.5*a*a*((this._p2+1)*a-this._p2):0.5*((a-=2)*a*((this._p2+1)*a+this._p2)+2)}),p=b("BounceOut",function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}),q=b("BounceIn",function(a){return(a=1-a)<1/2.75?1-7.5625*a*a:a<2/2.75?1-(7.5625*(a-=1.5/2.75)*a+0.75):a<2.5/2.75?1-(7.5625*(a-= 2.25/2.75)*a+0.9375):1-(7.5625*(a-=2.625/2.75)*a+0.984375)}),r=b("BounceInOut",function(a){var b=0.5>a,a=b?1-2*a:2*a-1,a=a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375;return b?0.5*(1-a):0.5*a+0.5}),s=b("CircOut",function(a){return Math.sqrt(1-(a-=1)*a)}),t=b("CircIn",function(a){return-(Math.sqrt(1-a*a)-1)}),u=b("CircInOut",function(a){return 1>(a*=2)?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-=2)*a)+1)}),i= 2*Math.PI,j=function(a,b,e){var d=c("easing."+a,function(a,b){this._p1=a||1;this._p2=b||e;this._p3=this._p2/i*(Math.asin(1/this._p1)||0)},!0),a=d.prototype=new g;a.constructor=d;a.getRatio=b;a.config=function(a,b){return new d(a,b)};return d},v=j("ElasticOut",function(a){return this._p1*Math.pow(2,-10*a)*Math.sin((a-this._p3)*i/this._p2)+1},0.3),w=j("ElasticIn",function(a){return-(this._p1*Math.pow(2,10*(a-=1))*Math.sin((a-this._p3)*i/this._p2))},0.3),j=j("ElasticInOut",function(a){return 1>(a*=2)? -0.5*this._p1*Math.pow(2,10*(a-=1))*Math.sin((a-this._p3)*i/this._p2):0.5*this._p1*Math.pow(2,-10*(a-=1))*Math.sin((a-this._p3)*i/this._p2)+1},0.45),x=b("ExpoOut",function(a){return 1-Math.pow(2,-10*a)}),y=b("ExpoIn",function(a){return Math.pow(2,10*(a-1))-0.001}),z=b("ExpoInOut",function(a){return 1>(a*=2)?0.5*Math.pow(2,10*(a-1)):0.5*(2-Math.pow(2,-10*(a-1)))}),m=Math.PI/2,A=b("SineOut",function(a){return Math.sin(a*m)}),B=b("SineIn",function(a){return-Math.cos(a*m)+1}),b=b("SineInOut",function(a){return-0.5* (Math.cos(Math.PI*a)-1)}),f=c("easing.SlowMo",function(a,b,c){null==a?a=0.7:1this._p3?this._calcEnd?1-(a=(a-this._p3)/this._p1)*a:b+(a-b)*(a=(a-this._p3)/this._p1)*a*a*a:this._calcEnd?1:b};f.ease=new f(0.7,0.7);e.config= f.config=function(a,b,c){return new f(a,b,c)};var k=c("easing.SteppedEase",function(a){a=a||1;this._p1=1/a;this._p2=a+1},!0),e=k.prototype=new g;e.constructor=k;e.getRatio=function(a){0>a?a=0:1<=a&&(a=0.999999999);return(this._p2*a>>0)*this._p1};e.config=k.config=function(a){return new k(a)};c("easing.Bounce",{easeOut:new p,easeIn:new q,easeInOut:new r},!0);c("easing.Circ",{easeOut:new s,easeIn:new t,easeInOut:new u},!0);c("easing.Elastic",{easeOut:new v,easeIn:new w,easeInOut:new j},!0);c("easing.Expo", {easeOut:new x,easeIn:new y,easeInOut:new z},!0);c("easing.Sine",{easeOut:new A,easeIn:new B,easeInOut:new b},!0);return{easeOut:new n,easeIn:new o,easeInOut:new h}},!0)});window._gsDefine&&_gsQueue.pop()(); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/.DS_Store b/duo/js/greensock-v12-js/.DS_Store new file mode 100755 index 0000000..3102a04 Binary files /dev/null and b/duo/js/greensock-v12-js/.DS_Store differ diff --git a/duo/js/greensock-v12-js/GETTING_STARTED.html b/duo/js/greensock-v12-js/GETTING_STARTED.html new file mode 100755 index 0000000..0671b5a --- /dev/null +++ b/duo/js/greensock-v12-js/GETTING_STARTED.html @@ -0,0 +1,11 @@ + + + + +Getting Started with the JavaScript Version of the GreenSock Animation Platform + + +
REDIRECTING...
+View the most recent "getting started" guide at greensock.com + + diff --git a/duo/js/greensock-v12-js/docs/.DS_Store b/duo/js/greensock-v12-js/docs/.DS_Store new file mode 100755 index 0000000..5008ddf Binary files /dev/null and b/duo/js/greensock-v12-js/docs/.DS_Store differ diff --git a/duo/js/greensock-v12-js/docs/AC_OETags.js b/duo/js/greensock-v12-js/docs/AC_OETags.js new file mode 100755 index 0000000..17fc479 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/AC_OETags.js @@ -0,0 +1,129 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// ADOBE SYSTEMS INCORPORATED +// Copyright 2008 Adobe Systems Incorporated +// All Rights Reserved. +// +// NOTICE: Adobe permits you to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// +//////////////////////////////////////////////////////////////////////////////// + + +//v1.0 +function AC_AddExtension(src, ext) +{ + if (src.indexOf('?') != -1) + return src.replace(/\?/, ext+'?'); + else + return src + ext; +} + +function AC_Generateobj(objAttrs, params, embedAttrs) +{ + var str = ' '; + str += ' + + + All Classes - GreenSock JavaScript Documentation + + + + + + +

All Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Animation
Back
BezierPlugin
Bounce
Circ
ColorPropsPlugin
CSSPlugin
CSSRulePlugin
Cubic
Ease
EaseLookup
EaselPlugin
Elastic
Expo
Linear
Power0
Power1
Power2
Power3
Power4
Quad
Quart
Quint
RaphaelPlugin
RoundPropsPlugin
ScrollToPlugin
SimpleTimeline
Sine
SlowMo
SteppedEase
Strong
TimelineLite
TimelineMax
TweenLite
TweenMax
TweenPlugin
+ + + \ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-A.html b/duo/js/greensock-v12-js/docs/all-index-A.html new file mode 100755 index 0000000..2ce4733 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-A.html @@ -0,0 +1,27 @@ +A +

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  
addCallback(callback:Function, timeOrLabel:any, params:Array, scope:any) — method, class com.greensock.TimelineMax
+ Inserts a callback at a particular time or label.
addLabel(label:String, time:Number) — method, class com.greensock.TimelineLite
+ Adds a label to the timeline, making it easy to mark important positions/times.
Animation — class, package com.greensock.core
+ Base class for all TweenLite, TweenMax, TimelineLite, and TimelineMax classes, providing + core methods/properties/functionality, but there is no reason to create an instance of this + class directly.
Animation(duration:Number, vars:Object) — Constructor, class com.greensock.core.Animation
+ Constructor + +
append(value:any, offsetOrLabel:any) — method, class com.greensock.TimelineLite
+ Appends a tween, timeline, callback, or label to the end of the timeline, + optionally offsetting its insertion point by a certain amount (to make it overlap with the end of + the timeline or leave a gap before its insertion point).
appendMultiple(tweens:Array, offsetOrLabel:any, align:String, stagger:Number) — method, class com.greensock.TimelineLite
+ Appends multiple tweens/timelines/callbacks/labels to the end of the timeline at once, optionally + offsetting the insertion point by a certain amount, aligning them (as a sequence for example), and/or + staggering their relative timing.
autoRemoveChildren — Property, class com.greensock.core.SimpleTimeline
If true, child tweens/timelines will be removed as soon as they complete.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-B.html b/duo/js/greensock-v12-js/docs/all-index-B.html new file mode 100755 index 0000000..8091153 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-B.html @@ -0,0 +1,25 @@ +B +

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  
Back — final class, package com.greensock.easing
+ Eases with an overshoot either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
BezierPlugin — class, package com.greensock.plugins
+ Animate virtually any property (or properties) along a Bezier (curved) path which you define + as an array of points/values that can be interpreted 4 different ways (described as the Bezier's "type", like type:"quadratic"): + + + "thru" (the default) - the plugin figures out how to draw the Bezier naturally through + the supplied values using a proprietary algorithm.
bezierThrough(values:Array, curviness:Number, quadratic:Boolean, correlate:String, prepend:Object, calcDifs:Boolean) — Static Method , class com.greensock.plugins.BezierPlugin
+ Takes an array that contains objects (could be Points, could be generic objects with + any number of properties but they should all match in terms of the names of properties like + [{x:0, y:0, scaleX:0.5}, {x:100, y:-200, scaleX:1.2}, {x:300, y:20, scaleX:0.8}]) and plots Bezier + segments THROUGH those values and returns an array containing a generic object for each Bezier segment.
Bounce — final class, package com.greensock.easing
+ Eases, bouncing either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-C.html b/duo/js/greensock-v12-js/docs/all-index-C.html new file mode 100755 index 0000000..b7fd2b2 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-C.html @@ -0,0 +1,34 @@ +C +

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  
call(callback:Function, params:Array, scope:any, offsetOrLabel:any, baseTimeOrLabel:any) — method, class com.greensock.TimelineLite
+ Appends a callback to the end of the timeline - this is + a convenience method that accomplishes exactly the same thing as + append( TweenLite.delayedCall(...) ) but with less code.
Circ — final class, package com.greensock.easing
+ Eases with an abrupt change in velocity either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
clear(labels:Boolean) — method, class com.greensock.TimelineLite
+ Empties the timeline of all tweens, timelines, and callbacks (and optionally labels too).
ColorPropsPlugin — class, package com.greensock.plugins
+ Tweens any color-related property of any object, like myObject.borderColor from "rgb(255,0,51)" + to "rgb(102,204,0)" (and you can define the initial color in almost any format like "#FF00CC" + or "rgba(255,0,51,0.5)" or "red" or "#f0c" or 0xFF00CC).
com.greensock — package
com.greensock.core — package
com.greensock.easing — package
com.greensock.plugins — package
config(linearRatio:Number, power:Number, yoyoMode:Boolean) — method, class com.greensock.easing.SlowMo
+ Permits customization of the ease with various parameters.
config(steps:int) — Static Method , class com.greensock.easing.SteppedEase
+ Permits customization of the ease (defining a number of steps).
CSSPlugin — class, package com.greensock.plugins
+ With the help of the CSSPlugin, GSAP can animate almost any css-related property of DOM elements + including the obvious things like width, height, margins, padding, top, left, and more plus more interesting things like transforms + (rotation, scaleX, scaleY, skewX, skewY, x, y, rotationX, and rotationY), colors, opacity, and lots more.
CSSRulePlugin — class, package com.greensock.plugins
+ Allows TweenLite and TweenMax to animate the raw style sheet rules which affect all objects of a particular selector + rather than affecting an individual DOM element's style (that's what the CSSPlugin is for).
Cubic — final class, package com.greensock.easing
+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to the Power2 ease.
cubicToQuadratic(a:Number, b:Number, c:Number, d:Number) — Static Method , class com.greensock.plugins.BezierPlugin
+ Using the fixed midpoint approach, we return an array of 4 quadratic Beziers that + closely approximates the cubic Bezier data provided.
currentLabel(value:String) — method, class com.greensock.TimelineMax
+ Gets the closest label that is at or before the current time, or jumps to a provided label + (behavior depends on whether or not you pass a parameter to the method).
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-D.html b/duo/js/greensock-v12-js/docs/all-index-D.html new file mode 100755 index 0000000..700ac4f --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-D.html @@ -0,0 +1,21 @@ +D +

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  
data — Property, class com.greensock.core.Animation
A place to store any data you want (initially populated with vars.data if it exists).
defaultEase — Static Property, class com.greensock.TweenLite
Provides An easy way to change the default easing equation.
defaultOverwrite — Static Property, class com.greensock.TweenLite
Provides An easy way to change the default overwrite mode.
delay(value:Number) — method, class com.greensock.core.Animation
+ Gets or sets the animation's initial delay which is the length of time in seconds + (or frames for frames-based tweens) before the animation should begin.
delayedCall(delay:Number, callback:Function, params:Array, scope:any, useFrames:Boolean) — Static Method , class com.greensock.TweenLite
+ Provides a simple way to call a function after a set amount of time (or frames).
delayedCall(delay:Number, callback:Function, params:Array, scope:any, useFrames:Boolean) — Static Method , class com.greensock.TweenMax
+ Provides a simple way to call a function after a set amount of time (or frames).
duration(value:Number) — method, class com.greensock.TimelineLite
+ Gets the timeline's duration or, if used as a setter, adjusts the timeline's + timeScale to fit it within the specified duration.
duration(value:Number) — method, class com.greensock.core.Animation
+ Gets or sets the animation's duration, not including any repeats or repeatDelays + (which are only available in TweenMax and TimelineMax).
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-E.html b/duo/js/greensock-v12-js/docs/all-index-E.html new file mode 100755 index 0000000..4f6309c --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-E.html @@ -0,0 +1,33 @@ +E +

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  
ease — Static Property, class com.greensock.easing.Linear
The default ease instance which can be reused many times in various tweens in order to conserve memory and improve performance slightly compared to creating a new instance each time.
ease — Static Property, class com.greensock.easing.SlowMo
The default ease instance which can be reused many times in various tweens in order to conserve memory and improve performance slightly compared to creating a new instance each time.
Ease — class, package com.greensock.easing
+ Base class for all GreenSock easing equations.
Ease(func:Function, extraParams:Array, type:Number, power:Number) — Constructor, class com.greensock.easing.Ease
+ Constructor + +
easeIn — Static Property, class com.greensock.easing.Back
Eases in with an overshoot, initially dipping below the starting value before accelerating towards the end.
easeIn — Static Property, class com.greensock.easing.Bounce
Bounces slightly at first, then to a greater degree over time, accelerating as the ease progresses.
easeIn — Static Property, class com.greensock.easing.Circ
Eases in with an abrupt change in velocity.
easeIn — Static Property, class com.greensock.easing.Cubic
Eases in with a power of 2
easeIn — Static Property, class com.greensock.easing.Elastic
Eases using a sine wave that starts slowly and then accelerates over time
easeIn — Static Property, class com.greensock.easing.Expo
+ Eases in a strong fashion starting out slowly and then accelerating.
easeIn — Static Property, class com.greensock.easing.Linear
Linear ease with no acceleration or deceleration
easeIn — Static Property, class com.greensock.easing.Power0
Eases in with a power of 0 (linear).
easeIn — Static Property, class com.greensock.easing.Power1
Eases in with a power of 1
easeIn — Static Property, class com.greensock.easing.Power2
Eases in with a power of 2
easeIn — Static Property, class com.greensock.easing.Power3
Eases in with a power of 3
easeIn — Static Property, class com.greensock.easing.Power4
Eases in with a power of 4
easeIn — Static Property, class com.greensock.easing.Quad
Eases in with a power of 1.
easeIn — Static Property, class com.greensock.easing.Quart
Eases in with a power of 3.
easeIn — Static Property, class com.greensock.easing.Quint
Eases in with a power of 4
easeIn — Static Property, class com.greensock.easing.Sine
Eases in with slight acceleration.
easeIn — Static Property, class com.greensock.easing.Strong
Eases in with a power of 4
easeInOut — Static Property, class com.greensock.easing.Back
Eases in and out with an overshoot, initially dipping below the starting value before accelerating towards the end, overshooting it and easing out.
easeInOut — Static Property, class com.greensock.easing.Bounce
Bounces in increasing degree towards the center of the ease, then eases out, bouncing to the end (decreasing in degree at the end).
easeInOut — Static Property, class com.greensock.easing.Circ
Eases in and out with an abrupt change in velocity.
easeInOut — Static Property, class com.greensock.easing.Cubic
eases in and then out with a power of 2
easeInOut — Static Property, class com.greensock.easing.Elastic
Eases using a sine wave that starts slowly, then accelerates and then decelerates over time.
easeInOut — Static Property, class com.greensock.easing.Expo
+ Eases in a strong fashion starting out slowly and then accelerating, then decelerating at the end.
easeInOut — Static Property, class com.greensock.easing.Linear
Linear ease with no acceleration or deceleration
easeInOut — Static Property, class com.greensock.easing.Power0
eases in and then out with a power of 0 (linear).
easeInOut — Static Property, class com.greensock.easing.Power1
Eases in and then out with a power of 1
easeInOut — Static Property, class com.greensock.easing.Power2
Eases in and then out with a power of 2
easeInOut — Static Property, class com.greensock.easing.Power3
Eases in and then out with a power of 3
easeInOut — Static Property, class com.greensock.easing.Power4
Eases in and then out with a power of 4
easeInOut — Static Property, class com.greensock.easing.Quad
Eases in and then out with a power of 1.
easeInOut — Static Property, class com.greensock.easing.Quart
Eases in and then out with a power of 3.
easeInOut — Static Property, class com.greensock.easing.Quint
Eases in and then out with a power of 4
easeInOut — Static Property, class com.greensock.easing.Sine
Eases in and then out with slight acceleration/deceleration.
easeInOut — Static Property, class com.greensock.easing.Strong
Eases in and then out with a power of 4
EaseLookup — class, package com.greensock.easing
+ EaseLookup enables you to find the easing function associated with a particular name (String), + like "strongEaseOut" which can be useful when loading in XML data that comes in as Strings but + needs to be translated to native function references.
EaselPlugin — class, package com.greensock.plugins
+ Tweens special EaselJS-related properties like ColorFilter (see http://www.createjs.com/#!/EaselJS + for more information about EaselJS).
easeNone — Static Property, class com.greensock.easing.Linear
Linear ease with no acceleration or deceleration (for backwards compatibility)
easeOut — Static Property, class com.greensock.easing.Back
Eases out with an overshoot.
easeOut — Static Property, class com.greensock.easing.Bounce
Eases out, bouncing at the end.
easeOut — Static Property, class com.greensock.easing.Circ
Eases out with an abrupt change in velocity.
easeOut — Static Property, class com.greensock.easing.Cubic
Eases out with a power of 2
easeOut — Static Property, class com.greensock.easing.Elastic
Eases using a sine wave that starts fast and then decelerates over time.
easeOut — Static Property, class com.greensock.easing.Expo
+ Eases out in a strong fashion starting out fast and then decelerating.
easeOut — Static Property, class com.greensock.easing.Linear
Linear ease with no acceleration or deceleration
easeOut — Static Property, class com.greensock.easing.Power0
Eases out with a power of 0 (linear).
easeOut — Static Property, class com.greensock.easing.Power1
Eases out with a power of 1
easeOut — Static Property, class com.greensock.easing.Power2
Eases out with a power of 2
easeOut — Static Property, class com.greensock.easing.Power3
Eases out with a power of 3
easeOut — Static Property, class com.greensock.easing.Power4
Eases out with a power of 4
easeOut — Static Property, class com.greensock.easing.Quad
Eases out with a power of 1.
easeOut — Static Property, class com.greensock.easing.Quart
Eases out with a power of 3.
easeOut — Static Property, class com.greensock.easing.Quint
Eases out with a power of 4
easeOut — Static Property, class com.greensock.easing.Sine
Eases out with slight deceleration.
easeOut — Static Property, class com.greensock.easing.Strong
Eases out with a power of 4
Elastic — final class, package com.greensock.easing
+ Eases with an elastic effect either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
eventCallback(type:String, callback:Function, params:Array, scope:any) — method, class com.greensock.core.Animation
+ Gets or sets an event callback like "onComplete", "onUpdate", "onStart", "onReverseComplete" + or "onRepeat" (onRepeat only applies to TweenMax or TimelineMax instances) + along with any parameters that should be passed to that callback.
Expo — final class, package com.greensock.easing
+ Eases in a strong fashion either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
exportRoot(vars:Object, omitDelayedCalls:Boolean) — Static Method , class com.greensock.TimelineLite
+ Seamlessly transfers all tweens, timelines, and [optionally] delayed calls from the root + timeline into a new TimelineLite so that you can perform advanced tasks on a seemingly global + basis without affecting tweens/timelines that you create after the export.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-F.html b/duo/js/greensock-v12-js/docs/all-index-F.html new file mode 100755 index 0000000..021c64b --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-F.html @@ -0,0 +1,36 @@ +F +

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  
find(name:String) — Static Method , class com.greensock.easing.EaseLookup
+ Finds the easing function associated with a particular name (String), like "strongEaseOut".
from(target:Object, duration:Number, vars:Object, offsetOrLabel:any, baseTimeOrLabel:any) — method, class com.greensock.TimelineLite
+ Appends a TweenLite.from() tween to the end of the timeline (or elsewhere) + - this is a convenience method that accomplishes exactly the same thing as + append( TweenLite.from(...) ) but with less code.
from(target:Object, duration:Number, vars:Object) — Static Method , class com.greensock.TweenLite
+ Static method for creating a TweenLite instance that tweens backwards - + you define the BEGINNING values and the current values are used + as the destination values which is great for doing things like animating objects + onto the screen because you can set them up initially the way you want them to look + at the end of the tween and then animate in from elsewhere.
from(target:Object, duration:Number, vars:Object) — Static Method , class com.greensock.TweenMax
+ Static method for creating a TweenMax instance that tweens backwards - + you define the BEGINNING values and the current values are used + as the destination values which is great for doing things like animating objects + onto the screen because you can set them up initially the way you want them to look + at the end of the tween and then animate in from elsewhere.
fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object, offsetOrLabel:any, baseTimeOrLabel:any) — method, class com.greensock.TimelineLite
+ Appends a TweenLite.fromTo() tween to the end of the timeline - this is + a convenience method that accomplishes exactly the same thing as + append( TweenLite.fromTo(...) ) but with less code.
fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object) — Static Method , class com.greensock.TweenLite
+ Static method for creating a TweenLite instance that allows you to define both the starting + and ending values (as opposed to to() and from() tweens which are + based on the target's current values at one end or the other).
fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object) — Static Method , class com.greensock.TweenMax
+ Static method for creating a TweenMax instance that allows you to define both the starting + and ending values (as opposed to to() and from() tweens which are + based on the target's current values at one end or the other).
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-G.html b/duo/js/greensock-v12-js/docs/all-index-G.html new file mode 100755 index 0000000..59cdd73 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-G.html @@ -0,0 +1,30 @@ +G +

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  
getActive(nested:Boolean, tweens:Boolean, timelines:Boolean) — method, class com.greensock.TimelineMax
+ Returns the tweens/timelines that are currently active in the timeline, meaning the timeline's + playhead is positioned on the child tween/timeline and the child isn't paused.
getAllTweens(includeTimelines:Boolean) — Static Method , class com.greensock.TweenMax
+ Returns an array containing all tweens (and optionally timelines too, excluding the root timelines).
getChildren(nested:Boolean, tweens:Boolean, timelines:Boolean, ignoreBeforeTime:Number) — method, class com.greensock.TimelineLite
+ Returns an array containing all the tweens and/or timelines nested in this timeline.
getLabelAfter(time:Number) — method, class com.greensock.TimelineMax
+ Returns the next label (if any) that occurs after the time parameter.
getLabelBefore(time:Number) — method, class com.greensock.TimelineMax
+ Returns the previous label (if any) that occurs before the time parameter.
getLabelsArray() — method, class com.greensock.TimelineMax
+ Returns an Array of label objects, each with a "time" and "name" property, in the order that they occur in the timeline.
getLabelTime(label:String) — method, class com.greensock.TimelineLite
+ Returns the time associated with a particular label.
getRatio(p:Number) — method, class com.greensock.easing.Ease
+ Translates the tween's progress ratio into the corresponding ease ratio.
getRatio(p:Number) — method, class com.greensock.easing.SlowMo
+ Translates the tween's progress ratio into the corresponding ease ratio.
getRatio(p:Number) — method, class com.greensock.easing.SteppedEase
+ Translates the tween's progress ratio into the corresponding ease ratio.
getRule(selector:String) — Static Method , class com.greensock.plugins.CSSRulePlugin
+ Provides a simple way to find the style sheet object associated with a particular selector like ".myClass" or "#myID".
getTweensOf(target:Object, nested:Boolean) — method, class com.greensock.TimelineLite
+ Returns the tweens of a particular object that are inside this timeline.
getTweensOf(target:any) — Static Method , class com.greensock.TweenLite
+ Returns an array containing all the tweens of a particular target (or group of targets) that have not + been released for garbage collection yet which typically happens within a few seconds after the tween completes.
getTweensOf(target:any) — Static Method , class com.greensock.TweenMax
+ Returns an array containing all the tweens of a particular target (or group of targets) that have not + been released for garbage collection yet which typically happens within a few seconds after the tween completes.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-H.html b/duo/js/greensock-v12-js/docs/all-index-H.html new file mode 100755 index 0000000..f6938c2 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-H.html @@ -0,0 +1,13 @@ +H +

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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-I.html b/duo/js/greensock-v12-js/docs/all-index-I.html new file mode 100755 index 0000000..89ffd44 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-I.html @@ -0,0 +1,29 @@ +I +

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  
insert(value:any, timeOrLabel:any) — method, class com.greensock.TimelineLite
+ Inserts a tween, timeline, callback, or label into the timeline at a specific time, frame, + or label.
insert(tween:any, time:any) — method, class com.greensock.core.SimpleTimeline
+ Inserts a TweenLite, TweenMax, TimelineLite, or TimelineMax instance into the timeline at a specific time.
insertMultiple(tweens:Array, timeOrLabel:any, align:String, stagger:Number) — method, class com.greensock.TimelineLite
+ Inserts multiple tweens/timelines/callbacks/labels into the timeline at once, optionally aligning them + (as a sequence for example) and/or staggering the timing.
invalidate() — method, class com.greensock.TimelineLite
+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
invalidate() — method, class com.greensock.TimelineMax
+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
invalidate() — method, class com.greensock.TweenLite
+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
invalidate() — method, class com.greensock.TweenMax
+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
invalidate() — method, class com.greensock.core.Animation
+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
isTweening(target:Object) — Static Method , class com.greensock.TweenMax
+ Reports whether or not a particular object is actively tweening.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-J.html b/duo/js/greensock-v12-js/docs/all-index-J.html new file mode 100755 index 0000000..6c061ca --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-J.html @@ -0,0 +1,13 @@ +J +

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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-K.html b/duo/js/greensock-v12-js/docs/all-index-K.html new file mode 100755 index 0000000..00b9978 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-K.html @@ -0,0 +1,23 @@ +K +

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  
kill(vars:Object, target:Object) — method, class com.greensock.core.Animation
+ Kills the animation entirely or in part depending on the parameters.
killAll(complete:Boolean, tweens:Boolean, delayedCalls:Boolean, timelines:Boolean) — Static Method , class com.greensock.TweenMax
+ Kills all tweens and/or delayedCalls/callbacks, and/or timelines, optionally forcing them to + completion first.
killChildTweensOf(parent:Object, complete:Boolean) — Static Method , class com.greensock.TweenMax
+ Kills all tweens of the children of a particular DOM element, optionally forcing them to completion first.
killDelayedCallsTo(func:Function) — Static Method , class com.greensock.TweenLite
+ Immediately kills all of the delayedCalls to a particular function.
killDelayedCallsTo(func:Function) — Static Method , class com.greensock.TweenMax
+ Immediately kills all of the delayedCalls to a particular function.
killTweensOf(target:any, vars:Object) — Static Method , class com.greensock.TweenLite
+ Kills all the tweens (or specific tweening properties) of a particular object or delayedCalls + to a particular function.
killTweensOf(target:any, vars:Object) — Static Method , class com.greensock.TweenMax
+ Kills all the tweens (or specific tweening properties) of a particular object or + the delayedCalls to a particular function.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-L.html b/duo/js/greensock-v12-js/docs/all-index-L.html new file mode 100755 index 0000000..329792c --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-L.html @@ -0,0 +1,14 @@ +L +

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  
Linear — final class, package com.greensock.easing
+ Linear ease with no acceleration or deceleration.
Linear() — Constructor, class com.greensock.easing.Linear
Constructor
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-M.html b/duo/js/greensock-v12-js/docs/all-index-M.html new file mode 100755 index 0000000..9f15bff --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-M.html @@ -0,0 +1,13 @@ +M +

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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-N.html b/duo/js/greensock-v12-js/docs/all-index-N.html new file mode 100755 index 0000000..2fb7464 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-N.html @@ -0,0 +1,13 @@ +N +

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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-O.html b/duo/js/greensock-v12-js/docs/all-index-O.html new file mode 100755 index 0000000..486dafd --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-O.html @@ -0,0 +1,13 @@ +O +

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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-P.html b/duo/js/greensock-v12-js/docs/all-index-P.html new file mode 100755 index 0000000..63499a5 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-P.html @@ -0,0 +1,37 @@ +P +

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  
pause(atTime:any, suppressEvents:Boolean) — method, class com.greensock.core.Animation
+ Pauses the instance, optionally jumping to a specific time.
pauseAll(tweens:Boolean, delayedCalls:Boolean, timelines:Boolean) — Static Method , class com.greensock.TweenMax
+ [deprecated] Pauses all tweens and/or delayedCalls/callbacks and/or timelines.
paused(value:Boolean) — method, class com.greensock.core.Animation
+ Gets or sets the animation's paused state which indicates whether or not the animation + is currently paused.
play(from:any, suppressEvents:Boolean) — method, class com.greensock.core.Animation
+ Begins playing forward, optionally from a specific time (by default playback begins from + wherever the playhead currently is).
Power0 — final class, package com.greensock.easing
+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 0 which is identical to Linear but with a more intuitive name.
Power1 — final class, package com.greensock.easing
+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 1 which is identical to Quad but with a more intuitive name.
Power2 — final class, package com.greensock.easing
+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to Cubic but with a more intuitive name.
Power3 — final class, package com.greensock.easing
+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 3 which is identical to Quart but with a more intuitive name.
Power4 — final class, package com.greensock.easing
+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to Quint and Strong but with a more intuitive name.
progress(value:Number) — method, class com.greensock.TimelineLite
+ Gets or sets the animation's progress which is a value between 0 and 1 indicating the position + of the virtual playhead where 0 is at the beginning, 0.5 is halfway complete, and 1 is complete.
progress(value:Number) — method, class com.greensock.TimelineMax
+ Gets or sets the timeline's progress which is a value between 0 and 1 indicating the position + of the virtual playhead (excluding repeats) where 0 is at the beginning, 0.5 is halfway complete, + and 1 is complete.
progress(value:Number) — method, class com.greensock.TweenMax
+ Gets or sets the tween's progress which is a value between 0 and 1 indicating the position + of the virtual playhead (excluding repeats) where 0 is at the beginning, 0.5 is halfway complete, + and 1 is complete.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-Q.html b/duo/js/greensock-v12-js/docs/all-index-Q.html new file mode 100755 index 0000000..b6e9e47 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-Q.html @@ -0,0 +1,20 @@ +Q +

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  
Quad — final class, package com.greensock.easing
+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 1 which is identical to the Power1 ease.
quadraticToCubic(a:Number, b:Number, c:Number) — Static Method , class com.greensock.plugins.BezierPlugin
+ Returns the Cubic equivalent of a Quadratic Bezier.
Quart — final class, package com.greensock.easing
+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to the Power2 ease.
Quint — final class, package com.greensock.easing
+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to the Power4 ease.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-R.html b/duo/js/greensock-v12-js/docs/all-index-R.html new file mode 100755 index 0000000..e5967f6 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-R.html @@ -0,0 +1,32 @@ +R +

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  
RaphaelPlugin — class, package com.greensock.plugins
+ Enables TweenLite and TweenMax to animate properties of Raphael JavaScript objects (see + http://www.raphaeljs.com/).
remove(value:any) — method, class com.greensock.TimelineLite
+ Removes a tween, timeline, callback, or label from the timeline.
removeCallback(callback:Function, timeOrLabel:any) — method, class com.greensock.TimelineMax
+ Removes a callback from a particular time or label.
removeLabel(label:String) — method, class com.greensock.TimelineLite
+ + Removes a label from the timeline and returns the time of that label.
render(time:Number, suppressEvents:Boolean, force:Boolean) — method, class com.greensock.core.SimpleTimeline
repeat(value:Number) — method, class com.greensock.TimelineMax
+ Gets or sets the number of times that the timeline should repeat after its first iteration.
repeat(value:int) — method, class com.greensock.TweenMax
+ Gets or sets the number of times that the tween should repeat after its first iteration.
repeatDelay(value:Number) — method, class com.greensock.TimelineMax
+ Gets or sets the amount of time in seconds (or frames for frames-based timelines) between repeats.
repeatDelay(value:Number) — method, class com.greensock.TweenMax
+ Gets or sets the amount of time in seconds (or frames for frames-based tweens) between repeats.
restart(includeDelay:Boolean, suppressEvents:Boolean) — method, class com.greensock.core.Animation
+ Restarts and begins playing forward from the beginning.
resume(from:any, suppressEvents:Boolean) — method, class com.greensock.core.Animation
+ Resumes playing without altering direction (forward or reversed), optionally jumping to a specific time first.
resumeAll(tweens:Boolean, delayedCalls:Boolean, timelines:Boolean) — Static Method , class com.greensock.TweenMax
+ [deprecated] Resumes all paused tweens and/or delayedCalls/callbacks and/or timelines.
reverse(from:any, suppressEvents:Boolean) — method, class com.greensock.core.Animation
+ Reverses playback so that all aspects of the animation are oriented backwards including, for example, + a tween's ease.
reversed(value:Boolean) — method, class com.greensock.core.Animation
+ Gets or sets the animation's reversed state which indicates whether or not the animation + should be played backwards.
RoundPropsPlugin — class, package com.greensock.plugins
+ If you'd like the inbetween values in a tween to always get rounded to the nearest integer, use the roundProps + special property.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-S.html b/duo/js/greensock-v12-js/docs/all-index-S.html new file mode 100755 index 0000000..70e8fdd --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-S.html @@ -0,0 +1,71 @@ +S +

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  
ScrollToPlugin — class, package com.greensock.plugins
+ Allows TweenLite and TweenMax to animate the scroll position of either the window (like doing window.scrollTo(x, y)) or + a <div> DOM element's content (like doing myDiv.scrollTop = y; myDiv.scrollLeft = x;).
seek(timeOrLabel:any, suppressEvents:Boolean) — method, class com.greensock.TimelineLite
+ Jumps to a specific time (or label) without affecting whether or not the instance + is paused or reversed.
seek(time:any, suppressEvents:Boolean) — method, class com.greensock.core.Animation
+ Jumps to a specific time without affecting whether or not the instance is paused or reversed.
set(target:Object, vars:Object, offsetOrLabel:any, baseTimeOrLabel:any) — method, class com.greensock.TimelineLite
+ Appends a zero-duration tween to the end of the timeline that + sets values immediately (when the virtual playhead reaches that position + on the timeline) - this is a convenience method that accomplishes exactly + the same thing as append( TweenLite.to(target, 0, {...}) ) but + with less code.
set(target:Object, vars:Object) — Static Method , class com.greensock.TweenLite
+ Immediately sets properties of the target accordingly - essentially a zero-duration to() tween with a more + intuitive name.
set(target:Object, vars:Object) — Static Method , class com.greensock.TweenMax
+ Immediately sets properties of the target accordingly - essentially a zero-duration to() tween with a more + intuitive name.
shiftChildren(amount:Number, adjustLabels:Boolean, ignoreBeforeTime:Number) — method, class com.greensock.TimelineLite
+ Shifts the startTime of the timeline's children by a certain amount and optionally adjusts labels too.
SimpleTimeline — class, package com.greensock.core
+ SimpleTimeline is the base class for TimelineLite and TimelineMax, providing the + most basic timeline functionality and it is used for the root timelines in TweenLite but is only + intended for internal use in the GreenSock tweening platform.
SimpleTimeline(vars:Object) — Constructor, class com.greensock.core.SimpleTimeline
+ Constructor + +
Sine — final class, package com.greensock.easing
+ Eases with a relatively low power either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
SlowMo — class, package com.greensock.easing
+ SlowMo is a configurable ease that produces a slow-motion effect that decelerates initially, then moves + linearly for a certain portion of the ease (which you can choose) and then accelerates again at the end; + it's great for effects like zooming text onto the screen, smoothly moving it long enough for people to + read it, and then zooming it off the screen.
SlowMo(linearRatio:Number, power:Number, yoyoMode:Boolean) — Constructor, class com.greensock.easing.SlowMo
+ Constructor + +
smoothChildTiming — Property, class com.greensock.core.SimpleTimeline
+ Controls whether or not child tweens/timelines are repositioned automatically (changing their startTime) + in order to maintain smooth playback when properties are changed on-the-fly.
staggerFrom(targets:Array, duration:Number, vars:Object, stagger:Number, offsetOrLabel:any, baseTimeOrLabel:any, onCompleteAll:Function, onCompleteAllParams:Array, onCompleteAllScope:Object) — method, class com.greensock.TimelineLite
+ Tweens an array of targets from a common set of destination values (using the current + values as the destination), but staggers their start times by a specified amount of time, + creating an evenly-spaced sequence with a surprisingly small amount of code.
staggerFrom(targets:Array, duration:Number, vars:Object, stagger:Number, onCompleteAll:Function, onCompleteAllParams:Array, onCompleteAllScope:any) — Static Method , class com.greensock.TweenMax
+ Tweens an array of targets from a common set of destination values (using the current + values as the destination), but staggers their start times by a specified amount of time, + creating an evenly-spaced sequence with a surprisingly small amount of code.
staggerFromTo(targets:Array, duration:Number, fromVars:Object, toVars:Object, stagger:Number, offsetOrLabel:any, baseTimeOrLabel:any, onCompleteAll:Function, onCompleteAllParams:Array, onCompleteAllScope:Object) — method, class com.greensock.TimelineLite
+ Tweens an array of targets from and to a common set of values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code.
staggerFromTo(targets:Array, duration:Number, fromVars:Object, toVars:Object, stagger:Number, onCompleteAll:Function, onCompleteAllParams:Array, onCompleteAllScope:any) — Static Method , class com.greensock.TweenMax
+ Tweens an array of targets from and to a common set of values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code.
staggerTo(targets:Array, duration:Number, vars:Object, stagger:Number, offsetOrLabel:any, baseTimeOrLabel:any, onCompleteAll:Function, onCompleteAllParams:Array, onCompleteAllScope:Object) — method, class com.greensock.TimelineLite
+ Tweens an array of targets to a common set of destination values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code.
staggerTo(targets:Array, duration:Number, vars:Object, stagger:Number, onCompleteAll:Function, onCompleteAllParams:Array, onCompleteAllScope:any) — Static Method , class com.greensock.TweenMax
+ Tweens an array of targets to a common set of destination values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code.
startTime(value:Number) — method, class com.greensock.core.Animation
+ Gets or sets the time at which the animation begins on its parent timeline (after any delay + that was defined).
SteppedEase — class, package com.greensock.easing
+ Most easing equations give a smooth, gradual transition between the start and end values, but SteppedEase provides + an easy way to define a specific number of steps that the transition should take.
SteppedEase(steps:int) — Constructor, class com.greensock.easing.SteppedEase
+ Constructor + +
stop() — method, class com.greensock.TimelineLite
[deprecated] Pauses the timeline (used for consistency with Flash's MovieClip.stop() functionality, but essentially accomplishes the same thing as pause() without the parameter)
Strong — final class, package com.greensock.easing
+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to the Power4 ease.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-T.html b/duo/js/greensock-v12-js/docs/all-index-T.html new file mode 100755 index 0000000..fbb9f7a --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-T.html @@ -0,0 +1,76 @@ +T +

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  
target — Property, class com.greensock.TweenLite
[READ-ONLY] Target object (or array of objects) whose properties the tween affects.
ticker — Static Property, class com.greensock.TweenLite
+ The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers).
ticker — Static Property, class com.greensock.TweenMax
+ The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers).
ticker — Static Property, class com.greensock.core.Animation
+ The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers).
time(value:Number, suppressEvents:Boolean) — method, class com.greensock.TimelineMax
+ Gets or sets the local position of the playhead (essentially the current time), not + including any repeats or repeatDelays.
time(value:Number, suppressEvents:Boolean) — method, class com.greensock.TweenMax
+ Gets or sets the local position of the playhead (essentially the current time), not + including any repeats or repeatDelays.
time(value:Number, suppressEvents:Boolean) — method, class com.greensock.core.Animation
+ Gets or sets the local position of the playhead (essentially the current time), + described in seconds (or frames for frames-based animations) which + will never be less than 0 or greater than the animation's duration.
timeline — Property, class com.greensock.core.Animation
[Read-only] Parent timeline.
TimelineLite — class, package com.greensock
+ TimelineLite is a powerful sequencing tool that acts as a container for tweens and + other timelines, making it simple to control them as a whole and precisely manage their + timing.
TimelineLite(vars:Object) — Constructor, class com.greensock.TimelineLite
+ Constructor.
TimelineMax — class, package com.greensock
+ TimelineMax extends TimelineLite, offering exactly the same functionality plus useful + (but non-essential) features like repeat, repeatDelay, yoyo, currentLabel(), addCallback(), + removeCallback(), tweenTo(), tweenFromTo(), getLabelAfter(), getLabelBefore(), + getActive() (and probably more in the future).
TimelineMax(vars:Object) — Constructor, class com.greensock.TimelineMax
+ Constructor.
timeScale(value:Number) — method, class com.greensock.core.Animation
+ Factor that's used to scale time in the animation where 1 = normal speed (the default), + 0.5 = half speed, 2 = double speed, etc.
to(target:Object, duration:Number, vars:Object, offsetOrLabel:any, baseTimeOrLabel:any) — method, class com.greensock.TimelineLite
+ Appends a TweenLite.to() tween to the end of the timeline (or elsewhere) + - this is a convenience method that accomplishes exactly the same thing as + append( TweenLite.to(...) ) but with less code.
to(target:Object, duration:Number, vars:Object) — Static Method , class com.greensock.TweenLite
+ Static method for creating a TweenLite instance that animates to the specified destination values + (from the current values).
to(target:Object, duration:Number, vars:Object) — Static Method , class com.greensock.TweenMax
+ Static method for creating a TweenMax instance that animates to the specified destination values + (from the current values).
totalDuration(value:Number) — method, class com.greensock.TimelineLite
+ Gets the timeline's total duration or, if used as a setter, adjusts the timeline's + timeScale to fit it within the specified duration.
totalDuration(value:Number) — method, class com.greensock.TimelineMax
+ Gets or sets the total duration of the timeline in seconds (or frames for frames-based timelines) + including any repeats or repeatDelays.
totalDuration(value:Number) — method, class com.greensock.TweenMax
+ Gets or sets the total duration of the tween in seconds (or frames for frames-based tweens) + including any repeats or repeatDelays.
totalDuration(value:Number) — method, class com.greensock.core.Animation
+ Gets or sets the animation's total duration including + any repeats or repeatDelays (which are only available in TweenMax and TimelineMax).
totalProgress(value:Number) — method, class com.greensock.TimelineMax
+ Gets or sets the timeline's totalProgress which is a value between 0 and 1 indicating the position + of the virtual playhead (including repeats) where 0 is at the beginning, 0.5 is + halfway complete, and 1 is complete.
totalProgress(value:Number) — method, class com.greensock.TweenMax
+ Gets or sets the tween's totalProgress which is a value between 0 and 1 indicating the position + of the virtual playhead (including repeats) where 0 is at the beginning, 0.5 is halfway complete, + and 1 is complete.
totalTime(time:Number, suppressEvents:Boolean) — method, class com.greensock.core.Animation
+ Gets or sets the position of the playhead according to the totalDuration + which includes any repeats and repeatDelays (only available + in TweenMax and TimelineMax).
tweenFromTo(fromTimeOrLabel:any, toTimeOrLabel:any, vars:Object) — method, class com.greensock.TimelineMax
+ Creates a linear tween that essentially scrubs the playhead from a particular time or label + to another time or label and then stops.
TweenLite — class, package com.greensock
+ TweenLite is an extremely fast, lightweight, and flexible animation tool that serves as the foundation of + the GreenSock Animation Platform (GSAP), available in AS2, AS3, and JavaScript.
TweenLite(target:Object, duration:Number, vars:Object) — Constructor, class com.greensock.TweenLite
+ Constructor + +
TweenMax — class, package com.greensock
+ TweenMax extends TweenLite, adding many useful (but non-essential) features like timeScale(), repeat(), + repeatDelay(), yoyo(), updateTo(), and more.
TweenMax(target:Object, duration:Number, vars:Object) — Constructor, class com.greensock.TweenMax
+ Constructor + +
TweenPlugin — class, package com.greensock.plugins
+ TweenPlugin is the base class for all TweenLite and TweenMax plugins, but generally isn't used directly.
tweenTo(timeOrLabel:any, vars:Object) — method, class com.greensock.TimelineMax
+ Creates a linear tween that essentially scrubs the playhead to a particular time or label and + then stops.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-U.html b/duo/js/greensock-v12-js/docs/all-index-U.html new file mode 100755 index 0000000..8de494d --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-U.html @@ -0,0 +1,17 @@ +U +

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  
updateTo(vars:Object, resetDuration:Boolean) — method, class com.greensock.TweenMax
+ Updates tweening values on the fly so that they appear to seamlessly change course even if + the tween is in-progress.
usesFrames() — method, class com.greensock.TimelineLite
+ [READ-ONLY] If true, the timeline's timing mode is frames-based instead of + seconds.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-V.html b/duo/js/greensock-v12-js/docs/all-index-V.html new file mode 100755 index 0000000..eaef383 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-V.html @@ -0,0 +1,13 @@ +V +

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  
vars — Property, class com.greensock.core.Animation
The vars object passed into the constructor which stores configuration variables like onComplete, onUpdate, etc.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-W.html b/duo/js/greensock-v12-js/docs/all-index-W.html new file mode 100755 index 0000000..7bbf09f --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-W.html @@ -0,0 +1,13 @@ +W +

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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-X.html b/duo/js/greensock-v12-js/docs/all-index-X.html new file mode 100755 index 0000000..a548a95 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-X.html @@ -0,0 +1,13 @@ +X +

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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-Y.html b/duo/js/greensock-v12-js/docs/all-index-Y.html new file mode 100755 index 0000000..52562d6 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-Y.html @@ -0,0 +1,19 @@ +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  
yoyo(value:Boolean) — method, class com.greensock.TimelineMax
+ Gets or sets the timeline's yoyo state, where true causes + the timeline to go back and forth, alternating backward and forward on each + repeat.
yoyo(value:Boolean) — method, class com.greensock.TweenMax
+ Gets or sets the tween's yoyo state, where true causes + the tween to go back and forth, alternating backward and forward on each + repeat.
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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/all-index-Z.html b/duo/js/greensock-v12-js/docs/all-index-Z.html new file mode 100755 index 0000000..234e0c9 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/all-index-Z.html @@ -0,0 +1,13 @@ +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  

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/asdoc.js b/duo/js/greensock-v12-js/docs/asdoc.js new file mode 100755 index 0000000..19416a6 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/asdoc.js @@ -0,0 +1,286 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// ADOBE SYSTEMS INCORPORATED +// Copyright 2006-2008 Adobe Systems Incorporated +// All Rights Reserved. +// +// NOTICE: Adobe permits you to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// +//////////////////////////////////////////////////////////////////////////////// +var ECLIPSE_FRAME_NAME = "ContentViewFrame"; +var eclipseBuild = false; +var liveDocsBaseUrl = "http://livedocs.adobe.com/flex/3"; +var liveDocsBookName = "langref"; +function findObject(objId) { + if (document.getElementById) + return document.getElementById(objId); + if (document.all) + return document.all[objId]; +} +function isEclipse() { + return eclipseBuild; +// return (window.name == ECLIPSE_FRAME_NAME) || (parent.name == ECLIPSE_FRAME_NAME) || (parent.parent.name == ECLIPSE_FRAME_NAME); +} +function configPage() { + setRowColorsInitial(true, "Property"); + setRowColorsInitial(true, "Method"); + setRowColorsInitial(true, "ProtectedMethod"); + setRowColorsInitial(true, "Event"); + setRowColorsInitial(true, "Style"); + + setRowColorsInitial(true, "SkinPart"); + setRowColorsInitial(true, "SkinState"); + + setRowColorsInitial(true, "Constant"); + if (isEclipse()) { + if (window.name != "classFrame") + { + var localRef = window.location.href.indexOf('?') != -1 ? window.location.href.substring(0, window.location.href.indexOf('?')) : window.location.href; + localRef = localRef.substring(localRef.indexOf("langref/") + 8); + if (window.location.search != "") + localRef += ("#" + window.location.search.substring(1)); + window.location.replace(baseRef + "index.html?" + localRef); + return; + } + else + { + setStyle(".eclipseBody", "display", "block"); +// var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false; +// if (isIE == false && window.location.hash != "") + if (window.location.hash != "") + window.location.hash=window.location.hash.substring(1); + } + } + else if (window == top) { // no frames + findObject("titleTable").style.display = ""; + } + else { // frames + findObject("titleTable").style.display = "none"; + } + showTitle(asdocTitle); +} +function loadFrames(classFrameURL, classListFrameURL) { + var classListFrame = findObject("classListFrame"); + if(classListFrame != null && classListFrameContent!='') + classListFrame.document.location.href=classListFrameContent; + if (isEclipse()) { + var contentViewFrame = findObject(ECLIPSE_FRAME_NAME); + if (contentViewFrame != null && classFrameURL != '') + contentViewFrame.document.location.href=classFrameURL; + } + else { + var classFrame = findObject("classFrame"); + if(classFrame != null && classFrameContent!='') + classFrame.document.location.href=classFrameContent; + } +} +function showTitle(title) { + if (!isEclipse()) + top.document.title = title; +} +function loadClassListFrame(classListFrameURL) { + if (parent.frames["classListFrame"] != null) { + parent.frames["classListFrame"].location = classListFrameURL; + } + else if (parent.frames["packageFrame"] != null) { + if (parent.frames["packageFrame"].frames["classListFrame"] != null) { + parent.frames["packageFrame"].frames["classListFrame"].location = classListFrameURL; + } + } +} +function gotoLiveDocs(primaryURL, secondaryURL, locale) { + if (locale == "en-us") { + locale = ""; + } + else { + locale = "_" + locale.substring(3); + } + var url = liveDocsBaseUrl + locale + "/" + liveDocsBookName + "/index.html?" + primaryURL; + if (secondaryURL != null && secondaryURL != "") + url += ("&" + secondaryURL); + window.open(url, "mm_livedocs", "menubar=1,toolbar=1,status=1,scrollbars=1,resizable=yes"); +} +function findTitleTableObject(id) +{ + if (isEclipse()) + return parent.titlebar.document.getElementById(id); + else if (top.titlebar) + return top.titlebar.document.getElementById(id); + else + return document.getElementById(id); +} +function titleBar_setSubTitle(title) +{ + if (isEclipse() || top.titlebar) + findTitleTableObject("subTitle").childNodes.item(0).data = title; +} +function titleBar_setSubNav(showConstants,showProperties,showStyles,showSkinPart,showSkinState,showEffects,showEvents,showConstructor,showMethods,showExamples, + showPackageConstants,showPackageProperties,showPackageFunctions,showInterfaces,showClasses,showPackageUse) +{ + if (isEclipse() || top.titlebar) + { + findTitleTableObject("propertiesLink").style.display = showProperties ? "inline" : "none"; + findTitleTableObject("propertiesBar").style.display = (showProperties && (showPackageProperties || showConstructor || showMethods || showPackageFunctions || showEvents || showStyles || showSkinPart || showSkinState || showEffects || showConstants || showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("packagePropertiesLink").style.display = showPackageProperties ? "inline" : "none"; + findTitleTableObject("packagePropertiesBar").style.display = (showPackageProperties && (showConstructor || showMethods || showPackageFunctions || showEvents || showStyles || showSkinPart || showSkinState || showConstants || showEffects || showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("constructorLink").style.display = showConstructor ? "inline" : "none"; + findTitleTableObject("constructorBar").style.display = (showConstructor && (showMethods || showPackageFunctions || showEvents || showStyles || showSkinPart || showSkinState || showEffects || showConstants || showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("methodsLink").style.display = showMethods ? "inline" : "none"; + findTitleTableObject("methodsBar").style.display = (showMethods && (showPackageFunctions || showEvents || showStyles || showSkinPart || showSkinState || showEffects || showConstants || showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("packageFunctionsLink").style.display = showPackageFunctions ? "inline" : "none"; + findTitleTableObject("packageFunctionsBar").style.display = (showPackageFunctions && (showEvents || showStyles || showSkinPart || showSkinState || showEffects || showConstants || showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("eventsLink").style.display = showEvents ? "inline" : "none"; + findTitleTableObject("eventsBar").style.display = (showEvents && (showStyles || showSkinPart || showSkinState || showEffects || showConstants || showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("stylesLink").style.display = showStyles ? "inline" : "none"; + findTitleTableObject("stylesBar").style.display = (showStyles && (showSkinPart || showSkinState || showEffects || showConstants || showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + + findTitleTableObject("SkinPartLink").style.display = showSkinPart ? "inline" : "none"; + findTitleTableObject("SkinPartBar").style.display = (showSkinPart && (showSkinState || showEffects || showConstants || showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + + findTitleTableObject("SkinStateLink").style.display = showSkinState ? "inline" : "none"; + findTitleTableObject("SkinStateBar").style.display = (showSkinState && (showEffects || showConstants || showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + + findTitleTableObject("effectsLink").style.display = showEffects ? "inline" : "none"; + findTitleTableObject("effectsBar").style.display = (showEffects && (showConstants || showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("constantsLink").style.display = showConstants ? "inline" : "none"; + findTitleTableObject("constantsBar").style.display = (showConstants && (showPackageConstants || showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("packageConstantsLink").style.display = showPackageConstants ? "inline" : "none"; + findTitleTableObject("packageConstantsBar").style.display = (showPackageConstants && (showInterfaces || showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("interfacesLink").style.display = showInterfaces ? "inline" : "none"; + findTitleTableObject("interfacesBar").style.display = (showInterfaces && (showClasses || showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("classesLink").style.display = showClasses ? "inline" : "none"; + findTitleTableObject("classesBar").style.display = (showClasses && (showPackageUse || showExamples)) ? "inline" : "none"; + findTitleTableObject("packageUseLink").style.display = showPackageUse ? "inline" : "none"; + findTitleTableObject("packageUseBar").style.display = (showPackageUse && showExamples) ? "inline" : "none"; + findTitleTableObject("examplesLink").style.display = showExamples ? "inline" : "none"; + } +} +function titleBar_gotoClassFrameAnchor(anchor) +{ + if (isEclipse()) + parent.classFrame.location = parent.classFrame.location.toString().split('#')[0] + "#" + anchor; + else + top.classFrame.location = top.classFrame.location.toString().split('#')[0] + "#" + anchor; +} +function setMXMLOnly() +{ + if (getCookie("showMXML") == "false") + { + toggleMXMLOnly(); + } +} +function toggleMXMLOnly() +{ + var mxmlDiv = findObject("mxmlSyntax"); + var mxmlShowLink = findObject("showMxmlLink"); + var mxmlHideLink = findObject("hideMxmlLink"); + if (mxmlDiv && mxmlShowLink && mxmlHideLink) + { + if (mxmlDiv.style.display == "none") + { + mxmlDiv.style.display = "block"; + mxmlShowLink.style.display = "none"; + mxmlHideLink.style.display = "inline"; + setCookie("showMXML","true", new Date(3000,1,1,1,1), "/", document.location.domain); + } + else + { + mxmlDiv.style.display = "none"; + mxmlShowLink.style.display = "inline"; + mxmlHideLink.style.display = "none"; + setCookie("showMXML","false", new Date(3000,1,1,1,1), "/", document.location.domain); + } + } +} +function showHideInherited() +{ + setInheritedVisible(getCookie("showInheritedConstant") == "true", "Constant"); + setInheritedVisible(getCookie("showInheritedProtectedConstant") == "true", "ProtectedConstant"); + setInheritedVisible(getCookie("showInheritedProperty") == "true", "Property"); + setInheritedVisible(getCookie("showInheritedProtectedProperty") == "true", "ProtectedProperty"); + setInheritedVisible(getCookie("showInheritedMethod") == "true", "Method"); + setInheritedVisible(getCookie("showInheritedProtectedMethod") == "true", "ProtectedMethod"); + setInheritedVisible(getCookie("showInheritedEvent") == "true", "Event"); + setInheritedVisible(getCookie("showInheritedStyle") == "true", "Style"); + + setInheritedVisible(getCookie("showInheritedSkinPart") == "true", "SkinPart"); + setInheritedVisible(getCookie("showInheritedSkinState") == "true", "SkinState"); + + setInheritedVisible(getCookie("showInheritedEffect") == "true", "Effect"); +} +function setInheritedVisible(show, selectorText) +{ + if (document.styleSheets[0].cssRules != undefined) + { + var rules = document.styleSheets[0].cssRules; + for (var i = 0; i < rules.length; i++) + { + if (rules[i].selectorText == ".hideInherited" + selectorText) + rules[i].style.display = show ? "" : "none"; + + if (rules[i].selectorText == ".showInherited" + selectorText) + rules[i].style.display = show ? "none" : ""; + } + } + else + { + document.styleSheets[0].addRule(".hideInherited" + selectorText, show ? "display:inline" : "display:none"); + document.styleSheets[0].addRule(".showInherited" + selectorText, show ? "display:none" : "display:inline"); + } + setCookie("showInherited" + selectorText, show ? "true" : "false", new Date(3000,1,1,1,1), "/", document.location.domain); + setRowColors(show, selectorText); +} +function setRowColors(show, selectorText) +{ + var rowColor = "#F2F2F2"; + var table = findObject("summaryTable" + selectorText); + if (table != null) + { + var rowNum = 0; + for (var i = 1; i < table.rows.length; i++) + { + if (table.rows[i].className.indexOf("hideInherited") == -1 || show) + { + rowNum++; + table.rows[i].bgColor = (rowNum % 2 == 0) ? rowColor : "#FFFFFF"; + } + } + } +} +function setRowColorsInitial(show, selectorText) +{ + var rowColor = "#F2F2F2"; + var table = findObject("summaryTable" + selectorText); + if (table != null) + { + var rowNum = 0; + for (var i = 1; i < table.rows.length; i++) + { + if (table.rows[i].className.indexOf("hideInherited") == -1 && show) + { + rowNum++; + table.rows[i].bgColor = (rowNum % 2 == 0) ? rowColor : "#FFFFFF"; + } + } + } +} +function setStyle(selectorText, styleName, newValue) +{ + if (document.styleSheets[0].cssRules != undefined) + { + var rules = document.styleSheets[0].cssRules; + for (var i = 0; i < rules.length; i++) + { + if (rules[i].selectorText == selectorText) + { + rules[i].style[styleName] = newValue; + break; + } + } + } + else + { + document.styleSheets[0].addRule(selectorText, styleName + ":" + newValue); + } +} diff --git a/duo/js/greensock-v12-js/docs/class-summary.html b/duo/js/greensock-v12-js/docs/class-summary.html new file mode 100755 index 0000000..0fc75d5 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/class-summary.html @@ -0,0 +1,90 @@ +All Classes +

Documentation for classes includes syntax, usage information, and code samples for methods, properties, and event handlers and listeners for those APIs that belong to a specific class in ActionScript. The classes are listed alphabetically. If you are not sure to which class a certain method or property belongs, you can look it up in the Index.


 ClassPackageDescription
 Animation
com.greensock.core + Base class for all TweenLite, TweenMax, TimelineLite, and TimelineMax classes, providing + core methods/properties/functionality, but there is no reason to create an instance of this + class directly.
 Back
com.greensock.easing + Eases with an overshoot either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 BezierPlugin
com.greensock.plugins + Animate virtually any property (or properties) along a Bezier (curved) path which you define + as an array of points/values that can be interpreted 4 different ways (described as the Bezier's "type", like type:"quadratic"): + + + "thru" (the default) - the plugin figures out how to draw the Bezier naturally through + the supplied values using a proprietary algorithm.
 Bounce
com.greensock.easing + Eases, bouncing either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 Circ
com.greensock.easing + Eases with an abrupt change in velocity either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 ColorPropsPlugin
com.greensock.plugins + Tweens any color-related property of any object, like myObject.borderColor from "rgb(255,0,51)" + to "rgb(102,204,0)" (and you can define the initial color in almost any format like "#FF00CC" + or "rgba(255,0,51,0.5)" or "red" or "#f0c" or 0xFF00CC).
 CSSPlugin
com.greensock.plugins + With the help of the CSSPlugin, GSAP can animate almost any css-related property of DOM elements + including the obvious things like width, height, margins, padding, top, left, and more plus more interesting things like transforms + (rotation, scaleX, scaleY, skewX, skewY, x, y, rotationX, and rotationY), colors, opacity, and lots more.
 CSSRulePlugin
com.greensock.plugins + Allows TweenLite and TweenMax to animate the raw style sheet rules which affect all objects of a particular selector + rather than affecting an individual DOM element's style (that's what the CSSPlugin is for).
 Cubic
com.greensock.easing + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to the Power2 ease.
 Ease
com.greensock.easing + Base class for all GreenSock easing equations.
 EaseLookup
com.greensock.easing + EaseLookup enables you to find the easing function associated with a particular name (String), + like "strongEaseOut" which can be useful when loading in XML data that comes in as Strings but + needs to be translated to native function references.
 EaselPlugin
com.greensock.plugins + Tweens special EaselJS-related properties like ColorFilter (see http://www.createjs.com/#!/EaselJS + for more information about EaselJS).
 Elastic
com.greensock.easing + Eases with an elastic effect either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 Expo
com.greensock.easing + Eases in a strong fashion either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 Linear
com.greensock.easing + Linear ease with no acceleration or deceleration.
 Power0
com.greensock.easing + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 0 which is identical to Linear but with a more intuitive name.
 Power1
com.greensock.easing + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 1 which is identical to Quad but with a more intuitive name.
 Power2
com.greensock.easing + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to Cubic but with a more intuitive name.
 Power3
com.greensock.easing + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 3 which is identical to Quart but with a more intuitive name.
 Power4
com.greensock.easing + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to Quint and Strong but with a more intuitive name.
 Quad
com.greensock.easing + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 1 which is identical to the Power1 ease.
 Quart
com.greensock.easing + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to the Power2 ease.
 Quint
com.greensock.easing + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to the Power4 ease.
 RaphaelPlugin
com.greensock.plugins + Enables TweenLite and TweenMax to animate properties of Raphael JavaScript objects (see + http://www.raphaeljs.com/).
 RoundPropsPlugin
com.greensock.plugins + If you'd like the inbetween values in a tween to always get rounded to the nearest integer, use the roundProps + special property.
 ScrollToPlugin
com.greensock.plugins + Allows TweenLite and TweenMax to animate the scroll position of either the window (like doing window.scrollTo(x, y)) or + a <div> DOM element's content (like doing myDiv.scrollTop = y; myDiv.scrollLeft = x;).
 SimpleTimeline
com.greensock.core + SimpleTimeline is the base class for TimelineLite and TimelineMax, providing the + most basic timeline functionality and it is used for the root timelines in TweenLite but is only + intended for internal use in the GreenSock tweening platform.
 Sine
com.greensock.easing + Eases with a relatively low power either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 SlowMo
com.greensock.easing + SlowMo is a configurable ease that produces a slow-motion effect that decelerates initially, then moves + linearly for a certain portion of the ease (which you can choose) and then accelerates again at the end; + it's great for effects like zooming text onto the screen, smoothly moving it long enough for people to + read it, and then zooming it off the screen.
 SteppedEase
com.greensock.easing + Most easing equations give a smooth, gradual transition between the start and end values, but SteppedEase provides + an easy way to define a specific number of steps that the transition should take.
 Strong
com.greensock.easing + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to the Power4 ease.
 TimelineLite
com.greensock + TimelineLite is a powerful sequencing tool that acts as a container for tweens and + other timelines, making it simple to control them as a whole and precisely manage their + timing.
 TimelineMax
com.greensock + TimelineMax extends TimelineLite, offering exactly the same functionality plus useful + (but non-essential) features like repeat, repeatDelay, yoyo, currentLabel(), addCallback(), + removeCallback(), tweenTo(), tweenFromTo(), getLabelAfter(), getLabelBefore(), + getActive() (and probably more in the future).
 TweenLite
com.greensock + TweenLite is an extremely fast, lightweight, and flexible animation tool that serves as the foundation of + the GreenSock Animation Platform (GSAP), available in AS2, AS3, and JavaScript.
 TweenMax
com.greensock + TweenMax extends TweenLite, adding many useful (but non-essential) features like timeScale(), repeat(), + repeatDelay(), yoyo(), updateTo(), and more.
 TweenPlugin
com.greensock.plugins + TweenPlugin is the base class for all TweenLite and TweenMax plugins, but generally isn't used directly.

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/TimelineLite.html b/duo/js/greensock-v12-js/docs/com/greensock/TimelineLite.html new file mode 100755 index 0000000..01f19ba --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/TimelineLite.html @@ -0,0 +1,1392 @@ +com.greensock.TimelineLite +
Packagecom.greensock
Classpublic class TimelineLite
InheritanceTimelineLite Inheritance SimpleTimeline Inheritance Animation Inheritance Object
Subclasses TimelineMax

+ TimelineLite is a powerful sequencing tool that acts as a container for tweens and + other timelines, making it simple to control them as a whole and precisely manage their + timing. Without TimelineLite (or its big brother TimelineMax), building complex sequences + would be far more cumbersome because you'd need to use the delay special property + for everything which would make future edits far more tedius. Here is a basic example of a + sequence without using TimelineLite (the tedius way): +
+TweenLite.to(element, 1, {css:{left:100}});
+TweenLite.to(element, 1, {css:{top:50}, delay:1});
+TweenLite.to(element, 1, {css:{opacity:0}, delay:2});
+
+ The above code animates the element's "left" css property to 100, then "top" to 50, and finally + "opacity" to 0 (notice the delay in all but the first tween). But + imagine if you wanted to increase the duration of the first tween to 1.5 - you'd need to + adjust every delay thereafter. And what if you want to pause() the whole + sequence or restart() it or reverse() it on-the-fly or jump to + a specific point in the whole animation? This becomes quite messy (or flat-out impossible), + but TimelineLite makes it incredibly simple: + +
+var tl = new TimelineLite();
+tl.append( TweenLite.to(element, 1, {css:{left:100}}) );
+tl.append( TweenLite.to(element, 1, {css:{top:50}}) );
+tl.append( TweenLite.to(element, 1, {css:{opacity:0}}) );
+ 
+//then later, control the whole thing...
+tl.pause();
+tl.resume();
+tl.seek(1.5);
+tl.reverse();
+...
+
+ Or use the convenient to() method and chaining to make it much more concise: +
+var tl = new TimelineLite();
+tl.to(element, 1, {css:{left:100}}).to(element, 1, {css:{top:50}}).to(element, 1, {css:{opacity:0}});
+
+ +

Now you can feel free to adjust any of the tweens without worrying about trickle-down + changes to delays. Increase the duration of that first tween and everything automatically + adjusts.

+ +

Here are some other benefits and features of TimelineLite:

+ +
    +
  • Things can overlap on the timeline as much as you want. You have complete control + over where tweens/timelines are placed. Most other animation tools can only do basic + one-after-the-other sequencing but can't allow things to overlap. Imagine appending + a tween that moves an object and you want it to start fading out 0.5 seconds before the + end of that tween? With TimelineLite it's easy.
  • + +
  • Add labels, play(), stop(), seek(), restart(), and even reverse() smoothly anytime.
  • + +
  • Nest timelines within timelines as deeply as you want. This means you can modularize + your code and make it far more efficient. Imagine building your app with common animateIn() + and animateOut() methods that return a tween or timeline instance, then you can string + things together like + myTimeline.append( myObject.animateIn() ).append( myObject.animateOut(), 4).append( myObject2.animateIn(), -0.5)... +
  • + +
  • Speed up or slow down the entire timeline with its timeScale() method. + You can even tween it to gradually speed up or slow down the animation smoothly.
  • + +
  • Get or set the progress of the timeline using its progress() method. + For example, to skip to the halfway point, set myTimeline.progress(0.5); +
  • + +
  • Tween the time or progress to fastforward/rewind + the timeline. You could even attach a slider to one of these properties to give the + user the ability to drag forward/backward through the timeline.
  • + +
  • Add onComplete, onStart, onUpdate, and/or onReverseComplete + callbacks using the constructor's vars object like + var tl = new TimelineLite({onComplete:myFunction}); +
  • + +
  • Kill the tweens of a particular object inside the timeline with killTweensOf() + or get the tweens of an object with getTweensOf() or get all the tweens/timelines + in the timeline with getChildren() +
  • + +
  • By passing useFrames:true in the vars parameter, you can + base the timing on frames instead of seconds. Please note, however, that + the timeline's timing mode dictates its childrens' timing mode as well.
  • + +
  • You can export all the tween/timelines from the root (master) timeline anytime into + a TimelineLite instance using TimelineLite.exportRoot() so that + you can pause() them all or reverse() or alter their + timeScale, etc. without affecting tweens/timelines that you create in + the future. Imagine a game that has all its animation driven by the GreenSock + Animation Platform and it needs to pause or slow down while a status screen pops up. + Very easy.
  • + +
  • If you need even more features like repeat, repeatDelay, yoyo, currentLabel(), + getLabelAfter(), getLabelBefore(), addCallback(), removeCallback(), getActive(), + AS3 event listeners and more, check out TimelineMax which extends TimelineLite.
  • +
+ + +

+ SPECIAL PROPERTIES: +

+

You can optionally use the constructor's vars parameter to define any of + the special properties below (syntax example: new TimelineLite({onComplete:myFunction, delay:2}); +

+ +
    +
  • + delay : Number - + Amount of delay in seconds (or frames for frames-based tweens) before the timeline should begin.
  • + +
  • + paused : Boolean - + If true, the timeline will pause itself immediately upon creation (by default, + timelines automatically begin playing immediately). If you plan to create a TimelineLite and + then populate it later (after one or more frames elapse), it is typically best to set + paused:true and then play() after you populate it.
  • + +
  • + onComplete : Function - + A function that should be called when the timeline has completed
  • + +
  • + onCompleteParams : Array - + An Array of parameters to pass the onComplete function. For example, + new TimelineLite({onComplete:myFunction, onCompleteParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onCompleteParams:["{self}", "param2"] +
  • + +
  • + onCompleteScope : Object - + Defines the scope of the onComplete function (what "this" refers to inside that function).
  • + +
  • + useFrames : Boolean - + If useFrames is true, the timelines's timing will be + based on frames instead of seconds because it is intially added to the root + frames-based timeline. This causes both its duration + and delay to be based on frames. An animations's timing mode is + always determined by its parent timeline.
  • + +
  • + tweens : Array - + To immediately insert several tweens into the timeline, use the tweens + special property to pass in an Array of TweenLite/TweenMax/TimelineLite/TimelineMax + instances. You can use this in conjunction with the align and + stagger special properties to set up complex sequences with minimal code. + These values simply get passed to the insertMultiple() method.
  • + +
  • + align : String - + Only used in conjunction with the tweens special property when multiple + tweens are to be inserted immediately. The value simply gets passed to the + insertMultiple() method. The default is "normal". + Options are: +
      +
    • + + "sequence" + : aligns the tweens one-after-the-other in a sequence
    • +
    • + + "start" + : aligns the start times of all of the tweens (ignores delays)
    • +
    • + + "normal" + : aligns the start times of all the tweens (honors delays)
    • +
    + The align special property does not force all child + tweens/timelines to maintain relative positioning, so for example, if you use + "sequence" and then later change the duration of one of the nested tweens, + it does not force all subsequent timelines to change their position. + The align special property only affects the alignment of the tweens that are + initially placed into the timeline through the tweens special property of + the vars object.
  • + +
  • + stagger : Number - + Only used in conjunction with the tweens special property when multiple + tweens are to be inserted immediately. It staggers the tweens by a set amount of time + in seconds (or in frames if useFrames is true). For example, if the + stagger value is 0.5 and the "align" property is set to "start", the + second tween will start 0.5 seconds after the first one starts, then 0.5 seconds + later the third one will start, etc. If the align property is "sequence", + there would be 0.5 seconds added between each tween. This value simply gets + passed to the insertMultiple() method. Default is 0.
  • + +
  • + onStart : Function - + A function that should be called when the timeline begins (when its time + changes from 0 to some other value which can happen more than once if the + timeline is restarted multiple times).
  • + +
  • + onStartParams : Array - + An Array of parameters to pass the onStart function. For example, + new TimelineLite({onStart:myFunction, onStartParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onStartParams:["{self}", "param2"] +
  • + +
  • + onStartScope : Object - + Defines the scope of the onStart function (what "this" refers to inside that function).
  • + +
  • + onUpdate : Function - + A function that should be called every time the timeline updates + (on every frame while the timeline is active)
  • + +
  • + onUpdateParams : Array - + An Array of parameters to pass the onUpdate function. For example, + new TimelineLite({onUpdate:myFunction, onUpdateParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onUpdateParams:["{self}", "param2"] +
  • + +
  • + onUpdateScope : Object - + Defines the scope of the onUpdate function (what "this" refers to inside that function).
  • + +
  • + onReverseComplete : Function - + A function that should be called when the timeline has reached its beginning again from the + reverse direction. For example, if reverse() is called, the timeline will move + back towards its beginning and when its time reaches 0, onReverseComplete + will be called. This can also happen if the timeline is placed in a TimelineLite or TimelineMax + instance that gets reversed and plays the timeline backwards to (or past) the beginning.
  • + +
  • + onReverseCompleteParams : Array - + An Array of parameters to pass the onReverseComplete function. For example, + new TimelineLite({onReverseComplete:myFunction, onReverseCompleteParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onReverseCompleteParams:["{self}", "param2"] +
  • + +
  • + onReverseCompleteScope : Object - + Defines the scope of the onReverseComplete function (what "this" refers to inside that function).
  • + +
  • + autoRemoveChildren : Boolean - + If autoRemoveChildren is set to true, as soon as child + tweens/timelines complete, they will automatically get killed/removed. This is normally + undesireable because it prevents going backwards in time (like if you want to + reverse() or set the progress lower, etc.). It can, however, + improve speed and memory management. The root timelines use autoRemoveChildren:true.
  • + +
  • + smoothChildTiming : Boolean - + Controls whether or not child tweens/timelines are repositioned automatically + (changing their startTime) in order to maintain smooth playback when + properties are changed on-the-fly. For example, imagine that the timeline's playhead is + on a child tween that is 75% complete, moving mc.x from 0 to 100 and then that tween's + reverse() method is called. If smoothChildTiming is false + (the default except for the root timelines), the tween would flip in place, keeping its + startTime consistent. Therefore the playhead of the timeline would now be + at the tween's 25% completion point instead of 75%. Remember, the timeline's playhead + position and direction are unaffected by child tween/timeline changes. mc.x would jump + from 75 to 25, but the tween's position in the timeline would remain consistent. However, + if smoothChildTiming is true, that child tween's + startTime would be adjusted so that the timeline's playhead intersects + with the same spot on the tween (75% complete) as it had immediately before + reverse() was called, thus playback appears perfectly smooth. mc.x + would still be 75 and it would continue from there as the playhead moves on, but + since the tween is reversed now mc.x will travel back towards 0 instead of 100. + Ultimately it's a decision between prioritizing smooth on-the-fly playback + (true) or consistent position(s) of child tweens/timelines + (false). + + Some examples of on-the-fly changes to child tweens/timelines that could cause their + startTime to change when smoothChildTiming is true + are: reversed, timeScale, progress, totalProgress, time, totalTime, delay, pause, + resume, duration, and totalDuration.
  • + +
+ +

View the examples



Public Properties
 PropertyDefined By
 InheritedautoRemoveChildren : Boolean
If true, child tweens/timelines will be removed as soon as they complete.
SimpleTimeline
 Inheriteddata : *
A place to store any data you want (initially populated with vars.data if it exists).
Animation
 InheritedsmoothChildTiming : Boolean
+ Controls whether or not child tweens/timelines are repositioned automatically (changing their startTime) + in order to maintain smooth playback when properties are changed on-the-fly.
SimpleTimeline
 Inheritedticker : Shape
[static] + The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers).
Animation
 Inheritedtimeline : SimpleTimeline
[Read-only] Parent timeline.
Animation
 Inheritedvars : Object
The vars object passed into the constructor which stores configuration variables like onComplete, onUpdate, etc.
Animation
Public Methods
 MethodDefined By
  
TimelineLite(vars:Object = null)
+ Constructor.
TimelineLite
  
addLabel(label:String, time:Number):*
+ Adds a label to the timeline, making it easy to mark important positions/times.
TimelineLite
  
append(value:*, offsetOrLabel:* = 0):*
+ Appends a tween, timeline, callback, or label to the end of the timeline, + optionally offsetting its insertion point by a certain amount (to make it overlap with the end of + the timeline or leave a gap before its insertion point).
TimelineLite
  
appendMultiple(tweens:Array, offsetOrLabel:* = 0, align:String = normal, stagger:Number = 0):*
+ Appends multiple tweens/timelines/callbacks/labels to the end of the timeline at once, optionally + offsetting the insertion point by a certain amount, aligning them (as a sequence for example), and/or + staggering their relative timing.
TimelineLite
  
call(callback:Function, params:Array = null, scope:* = null, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*
+ Appends a callback to the end of the timeline - this is + a convenience method that accomplishes exactly the same thing as + append( TweenLite.delayedCall(...) ) but with less code.
TimelineLite
  
clear(labels:Boolean = true):*
+ Empties the timeline of all tweens, timelines, and callbacks (and optionally labels too).
TimelineLite
 Inherited
delay(value:Number):*
+ Gets or sets the animation's initial delay which is the length of time in seconds + (or frames for frames-based tweens) before the animation should begin.
Animation
  
duration(value:Number):*
[override] + Gets the timeline's duration or, if used as a setter, adjusts the timeline's + timeScale to fit it within the specified duration.
TimelineLite
 Inherited
eventCallback(type:String, callback:Function = null, params:Array = null, scope:* = null):*
+ Gets or sets an event callback like "onComplete", "onUpdate", "onStart", "onReverseComplete" + or "onRepeat" (onRepeat only applies to TweenMax or TimelineMax instances) + along with any parameters that should be passed to that callback.
Animation
  
exportRoot(vars:Object = null, omitDelayedCalls:Boolean = true):TimelineLite
[static] + Seamlessly transfers all tweens, timelines, and [optionally] delayed calls from the root + timeline into a new TimelineLite so that you can perform advanced tasks on a seemingly global + basis without affecting tweens/timelines that you create after the export.
TimelineLite
  
from(target:Object, duration:Number, vars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*
+ Appends a TweenLite.from() tween to the end of the timeline (or elsewhere) + - this is a convenience method that accomplishes exactly the same thing as + append( TweenLite.from(...) ) but with less code.
TimelineLite
  
fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*
+ Appends a TweenLite.fromTo() tween to the end of the timeline - this is + a convenience method that accomplishes exactly the same thing as + append( TweenLite.fromTo(...) ) but with less code.
TimelineLite
  
getChildren(nested:Boolean = true, tweens:Boolean = true, timelines:Boolean = true, ignoreBeforeTime:Number = -9999999999):Array
+ Returns an array containing all the tweens and/or timelines nested in this timeline.
TimelineLite
  
getLabelTime(label:String):Number
+ Returns the time associated with a particular label.
TimelineLite
  
getTweensOf(target:Object, nested:Boolean = true):Array
+ Returns the tweens of a particular object that are inside this timeline.
TimelineLite
  
insert(value:*, timeOrLabel:* = 0):*
[override] + Inserts a tween, timeline, callback, or label into the timeline at a specific time, frame, + or label.
TimelineLite
  
insertMultiple(tweens:Array, timeOrLabel:* = 0, align:String = normal, stagger:Number = 0):*
+ Inserts multiple tweens/timelines/callbacks/labels into the timeline at once, optionally aligning them + (as a sequence for example) and/or staggering the timing.
TimelineLite
  
[override] + Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
TimelineLite
 Inherited
kill(vars:Object = null, target:Object = null):*
+ Kills the animation entirely or in part depending on the parameters.
Animation
 Inherited
pause(atTime:* = null, suppressEvents:Boolean = true):*
+ Pauses the instance, optionally jumping to a specific time.
Animation
 Inherited
paused(value:Boolean = false):*
+ Gets or sets the animation's paused state which indicates whether or not the animation + is currently paused.
Animation
 Inherited
play(from:* = null, suppressEvents:Boolean = true):*
+ Begins playing forward, optionally from a specific time (by default playback begins from + wherever the playhead currently is).
Animation
  
progress(value:Number):*
+ Gets or sets the animation's progress which is a value between 0 and 1 indicating the position + of the virtual playhead where 0 is at the beginning, 0.5 is halfway complete, and 1 is complete.
TimelineLite
  
remove(value:*):*
+ Removes a tween, timeline, callback, or label from the timeline.
TimelineLite
  
removeLabel(label:String):*
+ + Removes a label from the timeline and returns the time of that label.
TimelineLite
 Inherited
render(time:Number, suppressEvents:Boolean = false, force:Boolean = false):void
[override]
SimpleTimeline
 Inherited
restart(includeDelay:Boolean = false, suppressEvents:Boolean = true):*
+ Restarts and begins playing forward from the beginning.
Animation
 Inherited
resume(from:* = null, suppressEvents:Boolean = true):*
+ Resumes playing without altering direction (forward or reversed), optionally jumping to a specific time first.
Animation
 Inherited
reverse(from:* = null, suppressEvents:Boolean = true):*
+ Reverses playback so that all aspects of the animation are oriented backwards including, for example, + a tween's ease.
Animation
 Inherited
reversed(value:Boolean = false):*
+ Gets or sets the animation's reversed state which indicates whether or not the animation + should be played backwards.
Animation
  
seek(timeOrLabel:*, suppressEvents:Boolean = true):*
[override] + Jumps to a specific time (or label) without affecting whether or not the instance + is paused or reversed.
TimelineLite
  
set(target:Object, vars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*
+ Appends a zero-duration tween to the end of the timeline that + sets values immediately (when the virtual playhead reaches that position + on the timeline) - this is a convenience method that accomplishes exactly + the same thing as append( TweenLite.to(target, 0, {...}) ) but + with less code.
TimelineLite
  
shiftChildren(amount:Number, adjustLabels:Boolean = false, ignoreBeforeTime:Number = 0):*
+ Shifts the startTime of the timeline's children by a certain amount and optionally adjusts labels too.
TimelineLite
  
staggerFrom(targets:Array, duration:Number, vars:Object, stagger:Number = 0, offsetOrLabel:* = 0, baseTimeOrLabel:* = null, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:Object = null):*
+ Tweens an array of targets from a common set of destination values (using the current + values as the destination), but staggers their start times by a specified amount of time, + creating an evenly-spaced sequence with a surprisingly small amount of code.
TimelineLite
  
staggerFromTo(targets:Array, duration:Number, fromVars:Object, toVars:Object, stagger:Number = 0, offsetOrLabel:* = 0, baseTimeOrLabel:* = null, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:Object = null):*
+ Tweens an array of targets from and to a common set of values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code.
TimelineLite
  
staggerTo(targets:Array, duration:Number, vars:Object, stagger:Number, offsetOrLabel:* = 0, baseTimeOrLabel:* = null, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:Object = null):*
+ Tweens an array of targets to a common set of destination values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code.
TimelineLite
 Inherited
startTime(value:Number):*
+ Gets or sets the time at which the animation begins on its parent timeline (after any delay + that was defined).
Animation
  
stop():*
[deprecated] Pauses the timeline (used for consistency with Flash's MovieClip.stop() functionality, but essentially accomplishes the same thing as pause() without the parameter)
TimelineLite
 Inherited
time(value:Number, suppressEvents:Boolean = false):*
+ Gets or sets the local position of the playhead (essentially the current time), + described in seconds (or frames for frames-based animations) which + will never be less than 0 or greater than the animation's duration.
Animation
 Inherited
timeScale(value:Number):*
+ Factor that's used to scale time in the animation where 1 = normal speed (the default), + 0.5 = half speed, 2 = double speed, etc.
Animation
  
to(target:Object, duration:Number, vars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*
+ Appends a TweenLite.to() tween to the end of the timeline (or elsewhere) + - this is a convenience method that accomplishes exactly the same thing as + append( TweenLite.to(...) ) but with less code.
TimelineLite
  
totalDuration(value:Number):*
[override] + Gets the timeline's total duration or, if used as a setter, adjusts the timeline's + timeScale to fit it within the specified duration.
TimelineLite
 Inherited
totalTime(time:Number, suppressEvents:Boolean = false):*
+ Gets or sets the position of the playhead according to the totalDuration + which includes any repeats and repeatDelays (only available + in TweenMax and TimelineMax).
Animation
  
usesFrames():Boolean
+ [READ-ONLY] If true, the timeline's timing mode is frames-based instead of + seconds.
TimelineLite
Constructor Detail
TimelineLite()Constructor
public function TimelineLite(vars:Object = null)

+ Constructor. + +

SPECIAL PROPERTIES

+

The following special properties may be passed in via the constructor's vars parameter, like + new TimelineLite({paused:true, onComplete:myFunction})

+ +
    +
  • delay : Number - + Amount of delay in seconds (or frames for frames-based tweens) before the timeline should begin.
  • + +
  • paused : Boolean - + If true, the timeline will pause itself immediately upon creation (by default, + timelines automatically begin playing immediately). If you plan to create a TimelineLite and + then populate it later (after one or more frames elapse), it is typically best to set + paused:true and then play() after you populate it.
  • + +
  • onComplete : Function - + A function that should be called when the timeline has completed
  • + +
  • onCompleteParams : Array - + An Array of parameters to pass the onComplete function. For example, + new TimelineLite({onComplete:myFunction, onCompleteParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onCompleteParams:["{self}", "param2"]
  • + +
  • onCompleteScope : Object - + Defines the scope of the onComplete function (what "this" refers to inside that function).
  • + +
  • useFrames : Boolean - + If useFrames is true, the timelines's timing will be + based on frames instead of seconds because it is intially added to the root + frames-based timeline. This causes both its duration + and delay to be based on frames. An animations's timing mode is + always determined by its parent timeline.
  • + +
  • tweens : Array - + To immediately insert several tweens into the timeline, use the tweens + special property to pass in an Array of TweenLite/TweenMax/TimelineLite/TimelineMax + instances. You can use this in conjunction with the align and + stagger special properties to set up complex sequences with minimal code. + These values simply get passed to the insertMultiple() method.
  • + +
  • align : String - + Only used in conjunction with the tweens special property when multiple + tweens are to be inserted immediately. The value simply gets passed to the + insertMultiple() method. The default is "normal". + Options are: +
      +
    • "sequence": aligns the tweens one-after-the-other in a sequence
    • +
    • "start": aligns the start times of all of the tweens (ignores delays)
    • +
    • "normal": aligns the start times of all the tweens (honors delays)
    • +
    + The align special property does not force all child + tweens/timelines to maintain relative positioning, so for example, if you use + "sequence" and then later change the duration of one of the nested tweens, + it does not force all subsequent timelines to change their position. + The align special property only affects the alignment of the tweens that are + initially placed into the timeline through the tweens special property of + the vars object.
  • + +
  • stagger : Number - + Only used in conjunction with the tweens special property when multiple + tweens are to be inserted immediately. It staggers the tweens by a set amount of time + in seconds (or in frames if useFrames is true). For example, if the + stagger value is 0.5 and the "align" property is set to "start", the + second tween will start 0.5 seconds after the first one starts, then 0.5 seconds + later the third one will start, etc. If the align property is "sequence", + there would be 0.5 seconds added between each tween. This value simply gets + passed to the insertMultiple() method. Default is 0.
  • + +
  • onStart : Function - + A function that should be called when the timeline begins (when its time + changes from 0 to some other value which can happen more than once if the + timeline is restarted multiple times).
  • + +
  • onStartParams : Array - + An Array of parameters to pass the onStart function. For example, + new TimelineLite({onStart:myFunction, onStartParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onStartParams:["{self}", "param2"]
  • + +
  • onStartScope : Object - + Defines the scope of the onStart function (what "this" refers to inside that function).
  • + +
  • onUpdate : Function - + A function that should be called every time the timeline updates + (on every frame while the timeline is active)
  • + +
  • onUpdateParams : Array - + An Array of parameters to pass the onUpdate function. For example, + new TimelineLite({onUpdate:myFunction, onUpdateParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onUpdateParams:["{self}", "param2"]
  • + +
  • onUpdateScope : Object - + Defines the scope of the onUpdate function (what "this" refers to inside that function).
  • + +
  • onReverseComplete : Function - + A function that should be called when the timeline has reached its beginning again from the + reverse direction. For example, if reverse() is called, the timeline will move + back towards its beginning and when its time reaches 0, onReverseComplete + will be called. This can also happen if the timeline is placed in a TimelineLite or TimelineMax + instance that gets reversed and plays the timeline backwards to (or past) the beginning.
  • + +
  • onReverseCompleteParams : Array - + An Array of parameters to pass the onReverseComplete function. For example, + new TimelineLite({onReverseComplete:myFunction, onReverseCompleteParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onReverseCompleteParams:["{self}", "param2"]
  • + +
  • onReverseCompleteScope : Object - + Defines the scope of the onReverseComplete function (what "this" refers to inside that function).
  • + +
  • autoRemoveChildren : Boolean - + If autoRemoveChildren is set to true, as soon as child + tweens/timelines complete, they will automatically get killed/removed. This is normally + undesireable because it prevents going backwards in time (like if you want to + reverse() or set the progress lower, etc.). It can, however, + improve speed and memory management. The root timelines use autoRemoveChildren:true.
  • + +
  • smoothChildTiming : Boolean - + Controls whether or not child tweens/timelines are repositioned automatically + (changing their startTime) in order to maintain smooth playback when + properties are changed on-the-fly. For example, imagine that the timeline's playhead is + on a child tween that is 75% complete, moving mc.x from 0 to 100 and then that tween's + reverse() method is called. If smoothChildTiming is false + (the default except for the root timelines), the tween would flip in place, keeping its + startTime consistent. Therefore the playhead of the timeline would now be + at the tween's 25% completion point instead of 75%. Remember, the timeline's playhead + position and direction are unaffected by child tween/timeline changes. mc.x would jump + from 75 to 25, but the tween's position in the timeline would remain consistent. However, + if smoothChildTiming is true, that child tween's + startTime would be adjusted so that the timeline's playhead intersects + with the same spot on the tween (75% complete) as it had immediately before + reverse() was called, thus playback appears perfectly smooth. mc.x + would still be 75 and it would continue from there as the playhead moves on, but + since the tween is reversed now mc.x will travel back towards 0 instead of 100. + Ultimately it's a decision between prioritizing smooth on-the-fly playback + (true) or consistent position(s) of child tweens/timelines + (false). + + Some examples of on-the-fly changes to child tweens/timelines that could cause their + startTime to change when smoothChildTiming is true + are: reversed, timeScale, progress, totalProgress, time, totalTime, delay, pause, + resume, duration, and totalDuration.
  • + +
+ +

Parameters
vars:Object (default = null) — optionally pass in special properties like onComplete, onCompleteParams, onUpdate, onUpdateParams, onStart, onStartParams, tweens, align, stagger, delay, useFrames, and/or autoRemoveChildren. +
Method Detail
addLabel()method
public function addLabel(label:String, time:Number):*

+ Adds a label to the timeline, making it easy to mark important positions/times. You can then + reference that label in other methods, like seek("myLabel") or insert(myTween, "myLabel") + or reverse("myLabel"). You could also use the append() or + insert() methods to insert/append a label. + +

Parameters
label:String — The name of the label +
 
time:Number — The time in seconds (or frames for frames-based timelines) at which the label should be inserted. For example, myTimeline.addLabel("myLabel", 3) adds the label "myLabel" at 3 seconds into the timeline. +

Returns
*
append()method 
public function append(value:*, offsetOrLabel:* = 0):*

+ Appends a tween, timeline, callback, or label to the end of the timeline, + optionally offsetting its insertion point by a certain amount (to make it overlap with the end of + the timeline or leave a gap before its insertion point). + This makes it easy to build sequences by continuing to append() tweens or timelines. You can + chain append() calls together or use the convenience methods like to(), from(), fromTo(), + call(), set(), staggerTo(), staggerFrom(), and staggerFromTo() to build + sequences with minimal code. + +

To insert the tween/timeline/callback/label at a specific position on the timeline + rather than appending it to the end, use the insert() method.

+ +

If you define a label (string) as the offsetOrLabel parameter, + the tween/timeline/callback will be inserted wherever that label is, but if the + label doesn't exist yet, it will be added to the end of the timeline first and + then the tween/timeline/callback will be inserted there. This makes it easier + to build things as you go with concise code, adding labels as things get appended.

+ +
+//append a tween
+myTimeline.append(TweenLite.to(mc, 1, {x:100}));
+
+//use the to() convenience method to add several sequenced tweens
+myTimeline.to(mc, 1, {x:50}).to(mc, 1, {y:100}).to(mc2, 1, {alpha:0});
+ 
+//append a callback
+myTimeline.append(myFunction);
+
+//append a label
+myTimeline.append("myLabel");
+
+//create another timeline and then append it
+var nested = new TimelineLite();
+myTimeline.append(nested);
+
+ +

Parameters
value:* — The tween, timeline, callback, or label to append. You can even pass in an array of them. +
 
offsetOrLabel:* (default = 0) — Either a number indicating how many seconds (or frames for frames-based timelines) to offset the insertion point from the end of the timeline (positive values create a gap, negative values create an overlap) or a string indicating the label at which the tween/timeline/callback should be inserted. If you define a label that doesn't exist yet, it will automatically be added to the end of the timeline before the tween/timeline/callback gets appended there. For example, to append a tween 3 seconds after the end of the timeline (leaving a 3-second gap), set the offsetOrLabel to 3. Or to have the tween appended so that it overlaps with the last 2 seconds of the timeline, set the offsetOrLabel to -2. The default is 0 so that the insertion point is exactly at the end of the timeline. +

Returns
* — self (makes chaining easier) +

See also

appendMultiple()method 
public function appendMultiple(tweens:Array, offsetOrLabel:* = 0, align:String = normal, stagger:Number = 0):*

+ Appends multiple tweens/timelines/callbacks/labels to the end of the timeline at once, optionally + offsetting the insertion point by a certain amount, aligning them (as a sequence for example), and/or + staggering their relative timing. You can use the append() method + instead if you are not defining a stagger or align (either way works). + Check out the staggerTo() method for an even easier way to create and append + a sequence of evenly-spaced tweens. + +

Parameters
tweens:Array — An array containing the tweens, timelines, callbacks, and/or labels that should be appended +
 
offsetOrLabel:* (default = 0) — Either a number indicating how many seconds (or frames for frames-based timelines) to offset the insertion point from the end of the timeline (positive values create a gap, negative values create an overlap) or a string indicating the label at which the tween should be inserted. If you define a label that doesn't exist yet, it will automatically be added to the end of the timeline before the tweens/timelines/callbacks gets appended there. For example, to begin appending the tweens 3 seconds after the end of the timeline (leaving a 3-second gap), set the offsetOrLabel to 3. Or to begin appending the tweens/timelines/callbacks so that they overlap with the last 2 seconds of the timeline, set the offsetOrLabel to -2. The default is 0 so that the insertion point is exactly at the end of the timeline. +
 
align:String (default = normal) — Determines how the objects will be aligned in relation to each other before getting appended. Options are: TweenAlign.SEQUENCE (aligns the tweens one-after-the-other in a sequence), TweenAlign.START (aligns the start times of all of the tweens (ignores delays)), and TweenAlign.NORMAL (aligns the start times of all the tweens (honors delays)). The default is NORMAL. +
 
stagger:Number (default = 0) — Staggers the tweens by a set amount of time (in seconds) (or in frames for frames-based timelines). For example, if the stagger value is 0.5 and the "align" parameter is set to "start", the second one will start 0.5 seconds after the first one starts, then 0.5 seconds later the third one will start, etc. If the align property is "sequence", there would be 0.5 seconds added between each tween. Default is 0. +

Returns
* — The array of tweens that were appended +
call()method 
public function call(callback:Function, params:Array = null, scope:* = null, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*

+ Appends a callback to the end of the timeline - this is + a convenience method that accomplishes exactly the same thing as + append( TweenLite.delayedCall(...) ) but with less code. In other + words, the following two lines produce identical results: + +

+myTimeline.append( TweenLite.delayedCall(0, myFunction, ["param1", "param2"]) );
+myTimeline.call(myFunction, ["param1", "param2"]);
+
+

This is different than using the onComplete special property + on the TimelineLite itself because once you append the callback, it stays in + place whereas an onComplete is always called at the very end of + the timeline. For example, if a timeline is populated with a 1-second tween and + then you call(myFunction), it is placed at the 1-second spot. Then + if you append another 1-second tween, the timeline's duration will now be 2 seconds + but the myFunction callback will still be called at the 1-second spot. An + onComplete would be called at the end (2 seconds).

+ +

Keep in mind that you can chain these calls together and use other convenience + methods like to(), fromTo(), set(), staggerTo(), etc. to build out + sequences very quickly:

+ +
+//create a timeline that calls myFunction() when it completes
+var tl:TimelineLite = new TimelineLite({onComplete:myFunction});
+
+//now we'll use chaining, but break each step onto a different line for readability...
+tl.to(mc, 1, {x:100})    //tween mc.x to 100
+  .call(myCallback)        //then call myCallback()
+  .set(mc, {alpha:0})    //then set mc.alpha to 0.5 immediately
+  .call(otherFunction, ["param1", "param2"])    //then call otherFunction("param1", "param2")
+  .staggerTo([mc1, mc2, mc3], 1.5, {rotation:45}, 0.25); //finally tween the rotation of mc1, mc2, and mc3 to 45 and stagger the start times by 0.25 seconds
+
+ +

The 4th parameter is the offsetOrLabel which can be either a number + indicating how many seconds (or frames for frames-based timelines) to offset the insertion + point from the end of the timeline (positive values create a gap, negative values + create an overlap) or a string indicating the label at which the callback should be inserted. + If you define a label that doesn't exist yet, it will automatically be added to the end + of the timeline before the callback gets appended there.

+ +

Also note that the 5th parameter (baseTimeOrLabel) allows you to define a different + reference point from which to offset, but since sequencing is so common, the default + reference point is the end of the timeline). For example, an offset of 2 would cause + there to be a 2-second gap/delay before the callback is triggered. An offset of -0.5 would mean + the new callback gets inserted 0.5 seconds before the end of the timeline, so it will overlap + the previous tween(s) by 0.5 seconds.

+ +

If you prefer to define a specific time or label to serve as the reference point + from which to offset, use the baseTimeOrLabel (5th) parameter. For example, + 0 would be the beginning of the timeline. So myTimeline.call(myFunction, null, this, 0, 0) + would insert the callback at the very beginning of the timeline and + myTimeline.call(myFunction, null, this, 2, "myLabel") would insert the callback + 2 seconds after the "myLabel" label. Again, the default is the end of + the timeline for easy sequencing which is the same as using the timeline's duration() + (i.e. omitting the 5th parameter, myTimeline.call(myFunction, null, this, 3) is identical + to defining it as the duration, like myTimeline.call(myFunction, null, this, 3, myTimeline.duration())).

+ +
+tl.call(myFunction, [mc]);  //appends to the end of the timeline
+tl.call(myFunction, [mc], this, 2);  //appends it with a gap of 2 seconds
+tl.call(myFunction, [mc], this, 0, 0);  //places it at the very beginning of the timeline
+tl.call(myFunction, [mc], this, 2, "myLabel");  //places it 2 seconds after "myLabel"
+
+ +

Parameters
callback:Function — Function to call +
 
params:Array (default = null) — An Array of parameters to pass the function. +
 
scope:* (default = null) — The scope in which the callback should be called (basically, what "this" refers to in the function). NOTE: this parameter only exists in the JavaScript and AS2 versions. +
 
offsetOrLabel:* (default = 0) — Amount of seconds (or frames for frames-based timelines) to offset the insertion point of the callback from the end of the timeline. For example, to append the callback 3 seconds after the end of the timeline (leaving a 3-second gap), set the offset to 3. Or to have the callback appended so that it overlaps with the last 2 seconds of the timeline, set the offset to -2. The default is 0 so that the insertion point is exactly at the end of the timeline. +
 
baseTimeOrLabel:* (default = null) — By default, the callback is inserted at the end of the timeline plus the offset (which is 0 by default), but you can define a specific time or label to serve as the reference point using baseTimeOrLabel. For example, 0 would be the beginning of the timeline. So myTimeline.call(myFunction, null, 0, 0) would insert the callback at the very beginning of the timeline and myTimeline.call(myFunction, null, 2, "myLabel") would insert the callback 2 seconds after the "myLabel" label. Again, the default is the end of the timeline (for easy sequencing) which is the same as using the timeline's duration() (i.e. myTimeline.call(myFunction, null, 0, myTimeline.duration())). +

Returns
* — self (makes chaining easier) +

See also

clear()method 
public function clear(labels:Boolean = true):*

+ Empties the timeline of all tweens, timelines, and callbacks (and optionally labels too). + Event callbacks (like onComplete, onUpdate, onStart, etc.) are not removed. If you need + to remove event callbacks, use the eventCallback() method and set them to null + like myTimeline.eventCallback("onComplete", null); + +

Parameters
labels:Boolean (default = true) — If true (the default), labels will be cleared too. +

Returns
* — self (makes chaining easier) +
duration()method 
override public function duration(value:Number):*

+ Gets the timeline's duration or, if used as a setter, adjusts the timeline's + timeScale to fit it within the specified duration. For example, if a TimelineMax instance has + a duration of 2 and a repeat of 3, its totalDuration + would be 8 (one standard play plus 3 repeats equals 4 total cycles). + +

Due to the fact that a timeline's duration is dictated by its contents, + using this method as a setter will simply cause the timeScale to be adjusted + to fit the current contents into the specified duration. For example, + if there are 20-seconds worth of tweens in the timeline and you do myTimeline.duration(10), + the timeScale would be changed to 2. If you checked the duration again + immediately after that, it would still return 20 because technically that is how long all the + child tweens/timelines are but upon playback the speed would be doubled because of the timeScale.

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myAnimation.duration(2).play(1);

+ +
+ var currentDuration = myAnimation.duration(); //gets current duration
+ myAnimation.duration( 10 ); //adjusts the timeScale of myAnimation so that it fits into exactly 10 seconds on its parent timeline
+         
+

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

exportRoot()method 
public static function exportRoot(vars:Object = null, omitDelayedCalls:Boolean = true):TimelineLite

+ Seamlessly transfers all tweens, timelines, and [optionally] delayed calls from the root + timeline into a new TimelineLite so that you can perform advanced tasks on a seemingly global + basis without affecting tweens/timelines that you create after the export. For example, imagine + a game that uses the GreenSock Animation Platform for all of its animations and at some point + during the game, you want to slow everything down to a stop (tweening the + timeScale) while at the same time animating a new popup window into place: + +

+var tl = TimelineLite.exportRoot();
+TweenLite.to(tl, 0.5, {timeScale:0});
+
+//this tween isn't affected because it's created after the export.
+TweenLite.fromTo(myWindow, 1, {scaleX:0, scaleY:0}, {scaleX:1, scaleY:1});
+
+

You could then re-animate things when you're ready by tweening the timeScale + back to 1. Or you could use exportRoot() to collect all the animations and + pause() them and then animate the popup screen (or whatever). Then resume() + that instance or even reverse().

+ +

You can exportRoot() as many times as you want; all it does is wrap all the + loose tweens/timelines/delayedCalls into a TimelineLite which itself gets placed onto the root, + so if you exportRoot() again, that TimelineLite would get wrapped into another one, + etc. Things can be nested as deeply as you want.

+ +

Keep in mind, however, that completed tweens/timelines are removed from the root (for automatic + garbage collection), so if you exportRoot() after a tween completes, it won't be + included in the export. The only way around that is to set autoRemoveChildren + property of the Animation._rootTimeline and Animation._rootFramesTimeline + to false, but that is NOT recommended because you'd need to + manually kill() your tweens/timelines manually to make them eligible for + garbage collection.

+ +

Parameters
vars:Object (default = null) — The vars parameter that's passed to the TimelineLite's constructor which allows you to define things like onUpdate, onComplete, etc. The useFrames special property determines which root timeline gets exported. There are two distinct root timelines - one for frames-based animations (useFrames:true) and one for time-based ones. By default, the time-based timeline is exported. +
 
omitDelayedCalls:Boolean (default = true) — If true (the default), delayed calls will be left on the root rather than wrapped into the new TimelineLite. That way, if you pause() or alter the timeScale, or reverse(), they won't be affected. However, in some situations it might be very useful to have them included. +

Returns
TimelineLite — A new TimelineLite instance containing the root tweens/timelines +
from()method 
public function from(target:Object, duration:Number, vars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*

+ Appends a TweenLite.from() tween to the end of the timeline (or elsewhere) + - this is a convenience method that accomplishes exactly the same thing as + append( TweenLite.from(...) ) but with less code. In other + words, the following two lines produce identical results: + +

+myTimeline.append( TweenLite.from(mc, 1, {x:100, alpha:0.5}) );
+myTimeline.from(mc, 1, {x:100, alpha:0.5});
+
+

Keep in mind that you can chain these calls together and use other convenience + methods like to(), call(), set(), staggerTo(), etc. to build out + sequences very quickly:

+ +
+//create a timeline that calls myFunction() when it completes
+var tl:TimelineLite = new TimelineLite({onComplete:myFunction});
+
+//now we'll use chaining, but break each step onto a different line for readability...
+tl.from(mc, 1, {x:-100})    //tween mc.x from -100
+  .to(mc, 1, {y:50})    //then tween mc.y to 50
+  .set(mc, {alpha:0})    //then set mc.alpha to 0.5 immediately
+  .call(otherFunction)    //then call otherFunction()
+  .staggerTo([mc1, mc2, mc3], 1.5, {rotation:45}, 0.25); //finally tween the rotation of mc1, mc2, and mc3 to 45 and stagger the start times by 0.25 seconds
+
+

If you don't want to append the tween and would rather have precise control + of the insertion point, you can use the additional offset and/or + baseTimeOrLabel parameters. Or use a regular insert() like + myTimeline.insert( TweenLite.from(mc, 1, {x:100}), 2.75).

+ +

The 4th parameter is the offsetOrLabel which can be either a number + indicating how many seconds (or frames for frames-based timelines) to offset the insertion + point from the end of the timeline (positive values create a gap, negative values + create an overlap) or a string indicating the label at which the tween should be inserted. + If you define a label that doesn't exist yet, it will automatically be added to the end + of the timeline before the tween gets appended there.

+ +

Also note that the 5th parameter (baseTimeOrLabel) allows you to define a different + reference point from which to offset, but since sequencing is so common, the default + reference point is the end of the timeline). For example, an offset of 2 would cause + there to be a 2-second gap/delay before the tween starts. An offset of -0.5 would mean + the new tween gets inserted 0.5 seconds before the end of the timeline, so it will overlap + the previous tween(s) by 0.5 seconds.

+ +

If you prefer to define a specific time or label to serve as the reference point + from which to offset, use the baseTimeOrLabel (5th) parameter. For example, + 0 would be the beginning of the timeline. So myTimeline.from(mc, 1, {x:100}, 0, 0) + would insert the tween at the very beginning of the timeline and + myTimeline.from(mc, 1, {x:100}, 2, "myLabel") would insert the tween 2 seconds + after the "myLabel" label. Again, the default is the end of the timeline + for easy sequencing which is the same as using the timeline's duration() + (i.e. omitting the 5th parameter, myTimeline.from(mc, 1, {x:100}, 3) is identical + to defining it as the duration, like myTimeline.from(mc, 1, {x:100}, 3, myTimeline.duration())).

+ +
+tl.from(mc, 1, {x:100});  //appends to the end of the timeline
+tl.from(mc, 1, {x:100}, 2);  //appends it with a gap of 2 seconds
+tl.from(mc, 1, {x:100}, 0, 0);  //places it at the very beginning of the timeline
+tl.from(mc, 1, {x:100}, 2, "myLabel");  //places it 2 seconds after "myLabel"
+
+ +

NOTE: By default, immediateRender is true in + from() tweens, meaning that they immediately render their starting state + regardless of any delay that is specified. You can override this behavior by passing + immediateRender:false in the vars parameter so that it will + wait to render until the tween actually begins.

+ +

Parameters
target:Object — Target object (or array of objects) whose properties the tween affects +
 
duration:Number — Duration in seconds (or frames if the timeline is frames-based) +
 
vars:Object — An object defining the starting value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x from 100 and mc.y from 200 and then call myFunction, do this: myTimeline.from(mc, 1, {x:100, y:200, onComplete:myFunction}); +
 
offsetOrLabel:* (default = 0) — Either a number indicating how many seconds (or frames for frames-based timelines) to offset the insertion point from the end of the timeline (positive values create a gap, negative values create an overlap) or a string indicating the label at which the tween should be inserted. If you define a label that doesn't exist yet, it will automatically be added to the end of the timeline before the tween gets appended there. For example, to append a tween 3 seconds after the end of the timeline (leaving a 3-second gap), set the offsetOrLabel to 3. Or to have the tween appended so that it overlaps with the last 2 seconds of the timeline, set the offsetOrLabel to -2. The default is 0 so that the insertion point is exactly at the end of the timeline. +
 
baseTimeOrLabel:* (default = null) — By default, the tween is inserted at the end of the timeline plus the offset (which is 0 by default), but you can define a specific time or label to serve as the reference point using baseTimeOrLabel. For example, 0 would be the beginning of the timeline. So myTimeline.from(mc, 1, {x:100}, 0, 0) would insert the tween at the very beginning of the timeline and myTimeline.from(mc, 1, {x:100}, 2, "myLabel") would insert the tween 2 seconds after the "myLabel" label. Again, the default is the end of the timeline (for easy sequencing) which is the same as using the timeline's duration() (i.e. myTimeline.from(mc, 1, {x:100}, 0, myTimeline.duration())). +

Returns
* — self (makes chaining easier) +

See also

fromTo()method 
public function fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*

+ Appends a TweenLite.fromTo() tween to the end of the timeline - this is + a convenience method that accomplishes exactly the same thing as + append( TweenLite.fromTo(...) ) but with less code. In other + words, the following two lines produce identical results: + +

+myTimeline.append( TweenLite.fromTo(mc, 1, {x:0, alpha:1}, {x:100, alpha:0.5}) );
+myTimeline.fromTo(mc, 1, {x:0, alpha:1}, {x:100, alpha:0.5});
+
+

Keep in mind that you can chain these calls together and use other convenience + methods like to(), call(), set(), staggerTo(), etc. to build out + sequences very quickly:

+ +
+//create a timeline that calls myFunction() when it completes
+var tl:TimelineLite = new TimelineLite({onComplete:myFunction});
+
+//now we'll use chaining, but break each step onto a different line for readability...
+tl.fromTo(mc, 1, {x:0}, {x:-100})    //tween mc.x from 0 to -100
+  .to(mc, 1, {y:50}, -0.25)        //then tween mc.y to 50, starting it 0.25 seconds before the previous tween ends
+  .set(mc, {alpha:0})            //then set mc.alpha to 0.5 immediately
+  .call(otherFunction)            //then call otherFunction()
+  .staggerTo([mc1, mc2, mc3], 1.5, {rotation:45}, 0.25); //finally tween the rotation of mc1, mc2, and mc3 to 45 and stagger the start times by 0.25 seconds
+
+

If you don't want to append the tween and would rather have precise control + of the insertion point, you can use the additional offset and/or + baseTimeOrLabel parameters. Or use a regular insert() like + myTimeline.insert( TweenLite.fromTo(mc, 1, {x:0}, {x:100}), 2.75).

+ +

The 5th parameter is the offsetOrLabel which can be either a number + indicating how many seconds (or frames for frames-based timelines) to offset the insertion + point from the end of the timeline (positive values create a gap, negative values + create an overlap) or a string indicating the label at which the tween should be inserted. + If you define a label that doesn't exist yet, it will automatically be added to the end + of the timeline before the tween gets appended there.

+ +

Also note that the 6th parameter (baseTimeOrLabel) allows you to define a different + reference point from which to offset, but since sequencing is so common, the default + reference point is the end of the timeline). For example, an offset of 2 would cause + there to be a 2-second gap/delay before the tween starts. An offset of -0.5 would mean + the new tween gets inserted 0.5 seconds before the end of the timeline, so it will overlap + the previous tween(s) by 0.5 seconds.

+ +

If you prefer to define a specific time or label to serve as the reference point + from which to offset, use the baseTimeOrLabel (6th) parameter. For example, + 0 would be the beginning of the timeline. So myTimeline.fromTo(mc, 1, {x:0}, {x:100}, 0, 0) + would insert the tween at the very beginning of the timeline and + myTimeline.fromTo(mc, 1, {x:0}, {x:100}, 2, "myLabel") would insert the tween 2 seconds + after the "myLabel" label. Again, the default is the end of the timeline + for easy sequencing which is the same as using the timeline's duration() + (i.e. omitting the 6th parameter, myTimeline.fromTo(mc, 1, {x:0}, {x:100}, 3) is identical + to defining it as the duration, like myTimeline.fromTo(mc, 1, {x:0}, {x:100}, 3, myTimeline.duration())).

+ +
+tl.fromTo(mc, 1, {x:0}, {x:100});  //appends to the end of the timeline
+tl.fromTo(mc, 1, {x:0}, {x:100}, 2);  //appends it with a gap of 2 seconds
+tl.fromTo(mc, 1, {x:0}, {x:100}, 0, 0);  //places it at the very beginning of the timeline
+tl.fromTo(mc, 1, {x:0}, {x:100}, 2, "myLabel");  //places it 2 seconds after "myLabel"
+
+ +

Parameters
target:Object — Target object (or array of objects) whose properties the tween affects +
 
duration:Number — Duration in seconds (or frames if the timeline is frames-based) +
 
fromVars:Object — An object defining the starting value for each property that should be tweened. For example, to tween mc.x from 100 and mc.y from 200, fromVars would look like this: {x:100, y:200}. +
 
toVars:Object — An object defining the end value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x from 0 to 100 and mc.y from 0 to 200 and then call myFunction, do this: myTimeline.fromTo(mc, 1, {x:0, y:0}, {x:100, y:200, onComplete:myFunction}); +
 
offsetOrLabel:* (default = 0) — Either a number indicating how many seconds (or frames for frames-based timelines) to offset the insertion point from the end of the timeline (positive values create a gap, negative values create an overlap) or a string indicating the label at which the tween should be inserted. If you define a label that doesn't exist yet, it will automatically be added to the end of the timeline before the tween gets appended there. For example, to append a tween 3 seconds after the end of the timeline (leaving a 3-second gap), set the offsetOrLabel to 3. Or to have the tween appended so that it overlaps with the last 2 seconds of the timeline, set the offsetOrLabel to -2. The default is 0 so that the insertion point is exactly at the end of the timeline. +
 
baseTimeOrLabel:* (default = null) — By default, the tween is inserted at the end of the timeline plus the offset (which is 0 by default), but you can define a specific time or label to serve as the reference point using baseTimeOrLabel. For example, 0 would be the beginning of the timeline. So myTimeline.fromTo(mc, 1, {x:0}, {x:100}, 0, 0) would insert the tween at the very beginning of the timeline and myTimeline.fromTo(mc, 1, {x:0}, {x:100}, 2, "myLabel") would insert the tween 2 seconds after the "myLabel" label. Again, the default is the end of the timeline (for easy sequencing) which is the same as using the timeline's duration() (i.e. myTimeline.fromTo(mc, 1, {x:0}, {x:100}, 0, myTimeline.duration())). +

Returns
* — self (makes chaining easier) +

See also

getChildren()method 
public function getChildren(nested:Boolean = true, tweens:Boolean = true, timelines:Boolean = true, ignoreBeforeTime:Number = -9999999999):Array

+ Returns an array containing all the tweens and/or timelines nested in this timeline. + Callbacks (delayed calls) are considered zero-duration tweens. + +

Parameters
nested:Boolean (default = true) — Determines whether or not tweens and/or timelines that are inside nested timelines should be returned. If you only want the "top level" tweens/timelines, set this to false. +
 
tweens:Boolean (default = true) — Determines whether or not tweens (TweenLite and TweenMax instances) should be included in the results +
 
timelines:Boolean (default = true) — Determines whether or not timelines (TimelineLite and TimelineMax instances) should be included in the results +
 
ignoreBeforeTime:Number (default = -9999999999) — All children with start times that are less than this value will be ignored. +

Returns
Array — an Array containing the child tweens/timelines. +
getLabelTime()method 
public function getLabelTime(label:String):Number

+ Returns the time associated with a particular label. If the label isn't found, -1 is returned. + +

Parameters
label:String — Label name +

Returns
Number — Time associated with the label (or -1 if there is no such label) +
getTweensOf()method 
public function getTweensOf(target:Object, nested:Boolean = true):Array

+ Returns the tweens of a particular object that are inside this timeline. + +

Parameters
target:Object — The target object of the tweens +
 
nested:Boolean (default = true) — Determines whether or not tweens that are inside nested timelines should be returned. If you only want the "top level" tweens/timelines, set this to false. +

Returns
Array — an Array of TweenLite and/or TweenMax instances +
insert()method 
override public function insert(value:*, timeOrLabel:* = 0):*

+ Inserts a tween, timeline, callback, or label into the timeline at a specific time, frame, + or label. This gives you complete control over the insertion point (append() + always puts things at the end). + +

+ //insert a tween so that it starts at 1 second into the timeline
+ myAnimation.insert(TweenLite.to(mc, 2, {x:100}), 1);
+ 
+ //insert a callback at 1.5 seconds
+ myAnimation.insert(myFunction, 1.5);
+ 
+ //insert a label at 3 seconds
+ myAnimation.insert("myLabel", 3);
+ 
+ //create another timeline that we will insert
+ var nested = new TimelineLite();
+  
+ //insert the timeline where the "myLabel" label is
+ myAnimation.insert(nested, "myLabel");
+         
+ +

Parameters
value:* — The tween, timeline, callback, or label to insert +
 
timeOrLabel:* (default = 0) — The time in seconds (or frames for frames-based timelines) or label at which to insert. For example, myTimeline.insert(myTween, 3) would insert myTween 3-seconds into the timeline, and myTimeline.insert(myTween, "myLabel") would insert it at the "myLabel" label. If you define a label that doesn't exist yet, one is appended to the end of the timeline. +

Returns
* — self (makes chaining easier) +

See also

insertMultiple()method 
public function insertMultiple(tweens:Array, timeOrLabel:* = 0, align:String = normal, stagger:Number = 0):*

+ Inserts multiple tweens/timelines/callbacks/labels into the timeline at once, optionally aligning them + (as a sequence for example) and/or staggering the timing. You can use the insert() method + instead if you are not defining a stagger or align (either way works). + +

Parameters
tweens:Array — An array containing the tweens, timelines, callbacks, or labels that should be inserted +
 
timeOrLabel:* (default = 0) — Time in seconds (or frame if the timeline is frames-based) or label that serves as the insertion point. For example, the number 2 would insert the first object in the array at 2-seconds into the timeline, or "myLabel" would ihsert them wherever "myLabel" is. +
 
align:String (default = normal) — Determines how the tweens/timelines/callbacks/labels will be aligned in relation to each other before getting inserted. Options are: "sequence" (aligns them one-after-the-other in a sequence), "start" (aligns the start times of all of the objects (ignoring delays)), and "normal" (aligns the start times of all the tweens (honoring delays)). The default is "normal". +
 
stagger:Number (default = 0) — Staggers the tweens by a set amount of time (in seconds) (or in frames for frames-based timelines). For example, if the stagger value is 0.5 and the "align" parameter is set to "start", the second one will start 0.5 seconds after the first one starts, then 0.5 seconds later the third one will start, etc. If the align property is "sequence", there would be 0.5 seconds added between each tween. Default is 0. +

Returns
* — self (makes chaining easier) +

See also

invalidate()method 
override public function invalidate():*

+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values. When you invalidate() + an animation, it will be re-initialized the next time it renders and its vars object will be re-parsed. + The timing of the animation (duration, startTime, delay) will not be affected. + +

Another example would be if you have a TweenMax(mc, 1, {x:100, y:100}) that ran when mc.x and mc.y + were initially at 0, but now mc.x and mc.y are 200 and you want them tween to 100 again, you could simply + invalidate() the tween and restart() it. Without invalidating first, restarting it + would cause the values jump back to 0 immediately (where they started when the tween originally began). + When you invalidate a TimelineLite/TimelineMax, it automatically invalidates all of its children.

+

Returns
* — self (makes chaining easier) +
progress()method 
public function progress(value:Number):*

+ Gets or sets the animation's progress which is a value between 0 and 1 indicating the position + of the virtual playhead where 0 is at the beginning, 0.5 is halfway complete, and 1 is complete. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myAnimation.progress(0.5).play();

+ +
+ var progress = myAnimation.progress(); //gets current progress
+ myAnimation.progress( 0.25 ); //sets progress to one quarter finished
+         
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

remove()method 
public function remove(value:*):*

+ Removes a tween, timeline, callback, or label from the timeline. + +

Parameters
value:* — The tween, timeline, callback, or label that should be removed from the timeline +

Returns
* — self (makes chaining easier) +
removeLabel()method 
public function removeLabel(label:String):*

+ + Removes a label from the timeline and returns the time of that label. You could + also use the remove() method to accomplish the same task. + +

Parameters
label:String — The name of the label to remove +

Returns
* — Time associated with the label that was removed +
seek()method 
override public function seek(timeOrLabel:*, suppressEvents:Boolean = true):*

+ Jumps to a specific time (or label) without affecting whether or not the instance + is paused or reversed. + +

If there are any events/callbacks inbetween where the playhead was and the new time, + they will not be triggered because by default suppressEvents (the 2nd parameter) + is true. Think of it like picking the needle up on a record player and moving it + to a new position before placing it back on the record. If, however, you do not want the + events/callbacks suppressed during that initial move, simply set the suppressEvents + parameter to false.

+ +
+//jumps to exactly 2 seconds
+myAnimation.seek(2);
+ 
+//jumps to exactly 2 seconds but doesn't suppress events during the initial move:
+myAnimation.seek(2, false);
+
+//jumps to the "myLabel" label
+myAnimation.seek("myLabel");
+         
+ +

Parameters
timeOrLabel:* — The time or label to go to. +
 
suppressEvents:Boolean (default = true) — If true (the default), no events or callbacks will be triggered when the playhead moves to the new position defined in the time parameter. +

Returns
* — self (makes chaining easier) +

See also

set()method 
public function set(target:Object, vars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*

+ Appends a zero-duration tween to the end of the timeline that + sets values immediately (when the virtual playhead reaches that position + on the timeline) - this is a convenience method that accomplishes exactly + the same thing as append( TweenLite.to(target, 0, {...}) ) but + with less code. In other words, the following two lines produce identical results: + +

+myTimeline.append( TweenLite.to(mc, 0, {x:100, alpha:0.5}) );
+myTimeline.set(mc, {x:100, alpha:0.5});
+
+

Keep in mind that you can chain these calls together and use other convenience + methods like to(), call(), fromTo(), staggerTo(), etc. to build out + sequences very quickly:

+ +
+//create a timeline that calls myFunction() when it completes
+var tl:TimelineLite = new TimelineLite({onComplete:myFunction});
+
+//now we'll use chaining, but break each step onto a different line for readability...
+tl.to(mc, 1, {x:100})    //tween mc.x to 100
+  .set(mc, {alpha:0})    //then set mc.alpha to 0.5 immediately
+  .to(mc, 1, {y:50})    //then tween mc.y to 50
+  .call(otherFunction)    //then call otherFunction()
+  .staggerTo([mc1, mc2, mc3], 1.5, {rotation:45}, 0.25); //finally tween the rotation of mc1, mc2, and mc3 to 45 and stagger the start times by 0.25 seconds
+
+

The 3rd parameter is the offsetOrLabel which can be either a number + indicating how many seconds (or frames for frames-based timelines) to offset the insertion + point from the end of the timeline (positive values create a gap, negative values + create an overlap) or a string indicating the label at which the set() should be inserted. + If you define a label that doesn't exist yet, it will automatically be added to the end + of the timeline before the set() gets appended there.

+ +

Also note that the 4th parameter (baseTimeOrLabel) allows you to define a different + reference point from which to offset, but since sequencing is so common, the default + reference point is the end of the timeline). For example, an offset of 2 would cause + there to be a 2-second gap/delay before the set() runs. An offset of -0.5 would mean + the new set() gets inserted 0.5 seconds before the end of the timeline, so it will overlap + the previous tween(s) by 0.5 seconds.

+ +

If you prefer to define a specific time or label to serve as the reference point + from which to offset, use the baseTimeOrLabel (4th) parameter. For example, + 0 would be the beginning of the timeline. So myTimeline.set(obj, {x:100, y:0}, 0, 0) + would insert the tween at the very beginning of the timeline and + myTimeline.set(obj, {x:100, y:0}, 2, "myLabel") would insert the tween + 2 seconds after the "myLabel" label. Again, the default is the end of + the timeline for easy sequencing which is the same as using the timeline's duration() + (i.e. omitting the 4th parameter, myTimeline.set(obj, {x:100, y:0}, 3) is identical + to defining it as the duration, like myTimeline.set(obj, {x:100, y:0}, 3, myTimeline.duration())).

+ +

Parameters
target:Object — Target object (or array of objects) whose properties will be set. +
 
vars:Object — An object defining the value to which each property should be set. For example, to set mc.x to 100 and mc.y to 200, do this: myTimeline.set(mc, {x:100, y:200}); +
 
offsetOrLabel:* (default = 0) — Either a number indicating how many seconds (or frames for frames-based timelines) to offset the insertion point from the end of the timeline (positive values create a gap, negative values create an overlap) or a string indicating the label at which the zero-duration tween should be inserted. If you define a label that doesn't exist yet, it will automatically be added to the end of the timeline before the zero-duration tween gets appended there. For example, to append a tween 3 seconds after the end of the timeline (leaving a 3-second gap), set the offsetOrLabel to 3. Or to have the zero-duration tween appended so that it overlaps with the last 2 seconds of the timeline, set the offsetOrLabel to -2. The default is 0 so that the insertion point is exactly at the end of the timeline. +
 
baseTimeOrLabel:* (default = null) — By default, the zero-duration tween is inserted at the end of the timeline plus the offset (which is 0 by default), but you can define a specific time or label to serve as the reference point using baseTimeOrLabel. For example, 0 would be the beginning of the timeline. So myTimeline.set(obj, {x:100, y:0}, 0, 0) would insert the tween at the very beginning of the timeline and myTimeline.set(obj, {x:100, y:0}, 2, "myLabel") would insert the tween 2 seconds after the "myLabel" label. Again, the default is the end of the timeline (for easy sequencing) which is the same as using the timeline's duration() (i.e. myTimeline.set(obj, {x:100, y:0}, 0, myTimeline.duration())). +

Returns
* — self (makes chaining easier) +

See also

shiftChildren()method 
public function shiftChildren(amount:Number, adjustLabels:Boolean = false, ignoreBeforeTime:Number = 0):*

+ Shifts the startTime of the timeline's children by a certain amount and optionally adjusts labels too. + This can be useful when you want to prepend children or splice them into a certain spot, moving existing + ones back to make room for the new ones. + +

Parameters
amount:Number — Number of seconds (or frames for frames-based timelines) to move each child. +
 
adjustLabels:Boolean (default = false) — If true, the timing of all labels will be adjusted as well. +
 
ignoreBeforeTime:Number (default = 0) — All children that begin at or after the startAtTime will be affected by the shift (the default is 0, causing all children to be affected). This provides an easy way to splice children into a certain spot on the timeline, pushing only the children after that point back to make room. +

Returns
* — self (makes chaining easier) +
staggerFrom()method 
public function staggerFrom(targets:Array, duration:Number, vars:Object, stagger:Number = 0, offsetOrLabel:* = 0, baseTimeOrLabel:* = null, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:Object = null):*

+ Tweens an array of targets from a common set of destination values (using the current + values as the destination), but staggers their start times by a specified amount of time, + creating an evenly-spaced sequence with a surprisingly small amount of code. For example, + let's say you have an array containing references to a bunch of text fields that you'd + like to drop into place while fading in, all in a staggered fashion with 0.2 seconds + between each tween's start time: + +

+var textFields = [tf1, tf2, tf3, tf4, tf5];
+myTimeline.staggerFrom(textFields, 1, {y:"+150"}, 0.2);
+
+

staggerFrom() simply loops through the targets array and creates + a from() tween for each object and then inserts it at the appropriate place on a + new TimelineLite instance whose onComplete corresponds to the onCompleteAll + (if you define one) and then appends that TimelineLite to the timeline (as a nested child).

+ +

Note that if you define an onComplete (or any callback for that matter) + in the vars parameter, it will be called for each tween rather than the whole + sequence. This can be very useful, but if you want to call a function after the entire + sequence of tweens has completed, use the onCompleteAll parameter (the 7th parameter).

+ +

The 5th parameter is the offsetOrLabel which can be either a number + indicating how many seconds (or frames for frames-based timelines) to offset the insertion + point of the first tween from the end of the timeline (positive values create a gap, negative values + create an overlap) or a string indicating the label at which the tween should be inserted. + If you define a label that doesn't exist yet, it will automatically be added to the end + of the timeline before the staggered tweens gets appended there.

+ +

Also note that the 6th parameter (baseTimeOrLabel) allows you to define a different + reference point from which to offset, but since sequencing is so common, the default + reference point is the end of the timeline). For example, an offset of 2 would cause + there to be a 2-second gap/delay before the first staggered tween starts. An offset of -0.5 would mean + the first staggered tween gets inserted 0.5 seconds before the end of the timeline, so it will overlap + the previous tween(s) by 0.5 seconds.

+ +

If you prefer to define a specific time or label to serve as the reference point + from which to offset, use the baseTimeOrLabel (6th) parameter. For example, + 0 would be the beginning of the timeline. So myTimeline.staggerFrom([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 0, 0) + would insert the first tween at the very beginning of the timeline and + myTimeline.staggerFrom([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 3, "myLabel") + would insert the first tween 3 seconds after the "myLabel" label. Again, the default + is the end of the timeline for easy sequencing which is the same as + using the timeline's duration() (i.e. omitting the 6th parameter, + myTimeline.staggerFrom([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 3) is identical + to defining it as the duration, like + myTimeline.staggerFrom([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 3, myTimeline.duration())).

+ +

By default, immediateRender is true in + from() tweens, meaning that they immediately render their starting state + regardless of any delay that is specified. You can override this behavior by passing + immediateRender:false in the vars parameter so that it will + wait to render until the tween actually begins.

+ +

JavaScript and AS2 note: - Due to the way JavaScript and AS2 don't + maintain scope (what "this" refers to, or the context) in function calls, + it can be useful to define the scope specifically. Therefore, in the JavaScript and AS2 + versions accept a 9th parameter for onCompleteAllScope, but that parameter + is omitted in the AS3 version.

+ +

Parameters
targets:Array — An array of target objects whose properties should be affected +
 
duration:Number — Duration in seconds (or frames if the timeline is frames-based) +
 
vars:Object — An object defining the beginning value for each property that should be tweened as well as any special properties like ease. For example, to tween x from 100 and y from 200 for mc1, mc2, and mc3, staggering their start time by 0.25 seconds and then call myFunction when they last one has finished, do this: myTimeline.staggerFrom([mc1, mc2, mc3], 1, {x:100, y:200}, 0.25, 0, null, myFunction}). +
 
stagger:Number (default = 0) — Amount of time in seconds (or frames if the timeline is frames-based) to stagger the start time of each tween. For example, you might want to have 5 objects move down 100 pixels while fading out, and stagger the start times by 0.2 seconds - you could do: myTimeline.staggerTo([mc1, mc2, mc3, mc4, mc5], 1, {y:"+100", alpha:0}, 0.2). +
 
offsetOrLabel:* (default = 0) — Either a number indicating how many seconds (or frames for frames-based timelines) to offset the insertion point from the end of the timeline (positive values create a gap, negative values create an overlap) or a string indicating the label at which the tweens should start being inserted. If you define a label that doesn't exist yet, it will automatically be added to the end of the timeline before the tweens get appended there. For example, to start appending the tweens 3 seconds after the end of the timeline (leaving a 3-second gap), set the offsetOrLabel to 3. Or to have the tweens appended so that they overlaps with the last 2 seconds of the timeline, set the offsetOrLabel to -2. The default is 0 so that the insertion point is exactly at the end of the timeline. +
 
baseTimeOrLabel:* (default = null) — By default, the tweens are inserted at the end of the timeline plus the offset (which is 0 by default), but you can define a specific time or label to serve as the reference point using baseTimeOrLabel. For example, 0 would be the beginning of the timeline. So myTimeline.staggerFrom([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 0, 0) would insert the tweens beginning at the very start of the timeline and myTimeline.staggerFrom([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 3, "myLabel") would insert the tweens beginning 3 seconds after the "myLabel" label. Again, the default is the end of the timeline (for easy sequencing) which is the same as using the timeline's duration() (i.e. myTimeline.staggerFrom([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 0, myTimeline.duration())). +
 
onCompleteAll:Function (default = null) — A function to call as soon as the entire sequence of tweens has completed +
 
onCompleteAllParams:Array (default = null) — An array of parameters to pass the onCompleteAll method. +
 
onCompleteAllScope:Object (default = null) — The scope for the onCompleteAll call (what "this" should refer to inside that function) +

Returns
* — self (makes chaining easier) +

See also

staggerFromTo()method 
public function staggerFromTo(targets:Array, duration:Number, fromVars:Object, toVars:Object, stagger:Number = 0, offsetOrLabel:* = 0, baseTimeOrLabel:* = null, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:Object = null):*

+ Tweens an array of targets from and to a common set of values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code. For example, let's say you have an array containing + references to a bunch of text fields that you'd like to fade from alpha:1 to alpha:0 in a + staggered fashion with 0.2 seconds between each tween's start time: + +

+var textFields = [tf1, tf2, tf3, tf4, tf5];
+myTimeline.staggerFromTo(textFields, 1, {alpha:1}, {alpha:0}, 0.2);
+
+

staggerFromTo() simply loops through the targets array and creates + a fromTo() tween for each object and then inserts it at the appropriate place on + a new TimelineLite instance whose onComplete corresponds to the onCompleteAll + (if you define one) and then appends that TimelineLite to the timeline (as a nested child).

+ +

Note that if you define an onComplete (or any callback for that matter) + in the vars parameter, it will be called for each tween rather than the whole + sequence. This can be very useful, but if you want to call a function after the entire + sequence of tweens has completed, use the onCompleteAll parameter (the 8th parameter).

+ +

The 6th parameter is the offsetOrLabel which can be either a number + indicating how many seconds (or frames for frames-based timelines) to offset the insertion + point of the first tween from the end of the timeline (positive values create a gap, negative values + create an overlap) or a string indicating the label at which the tween should be inserted. + If you define a label that doesn't exist yet, it will automatically be added to the end + of the timeline before the staggered tweens gets appended there.

+ +

Also note that the 7th parameter (baseTimeOrLabel) allows you to define a different + reference point from which to offset, but since sequencing is so common, the default + reference point is the end of the timeline). For example, an offset of 2 would cause + there to be a 2-second gap/delay before the first staggered tween starts. An offset of -0.5 would mean + the first staggered tween gets inserted 0.5 seconds before the end of the timeline, so it will overlap + the previous tween(s) by 0.5 seconds.

+ +

If you prefer to define a specific time or label to serve as the reference point + from which to offset, use the baseTimeOrLabel (7th) parameter. For example, + 0 would be the beginning of the timeline. So myTimeline.staggerFromTo([mc1, mc2, mc3], 1, {x:0}, {x:100}, 0.2, 0, 0) + would insert the first tween at the very beginning of the timeline and + myTimeline.staggerFromTo([mc1, mc2, mc3], 1, {x:0}, {x:100}, 0.2, 3, "myLabel") + would insert the first tween 3 seconds after the "myLabel" label. Again, the default + is the end of the timeline for easy sequencing which is the same as + using the timeline's duration() (i.e. omitting the 7th parameter, + myTimeline.staggerFromTo([mc1, mc2, mc3], 1, {x:0}, {x:100}, 0.2, 3) is identical + to defining it as the duration, like + myTimeline.staggerFromTo([mc1, mc2, mc3], 1, {x:0}, {x:100}, 0.2, 3, myTimeline.duration())).

+ +

JavaScript and AS2 note: - Due to the way JavaScript and AS2 don't + maintain scope (what "this" refers to, or the context) in function calls, + it can be useful to define the scope specifically. Therefore, in the JavaScript and AS2 + versions accept a 10th parameter for onCompleteAllScope, but that + parameter is omitted in the AS3 version.

+ +

Parameters
targets:Array — An array of target objects whose properties should be affected +
 
duration:Number — Duration in seconds (or frames if the timeline is frames-based) +
 
fromVars:Object — An object defining the starting value for each property that should be tweened. For example, to tween x from 100 and y from 200, fromVars would look like this: {x:100, y:200}. +
 
toVars:Object — An object defining the end value for each property that should be tweened as well as any special properties like ease. For example, to tween x from 0 to 100 and y from 0 to 200, staggering the start times by 0.2 seconds and then call myFunction when they all complete, do this: myTimeline.staggerFromTo([mc1, mc2, mc3], 1, {x:0, y:0}, {x:100, y:200}, 0.2, 0, null, myFunction}); +
 
stagger:Number (default = 0) — Amount of time in seconds (or frames if the timeline is frames-based) to stagger the start time of each tween. For example, you might want to have 5 objects move down 100 pixels while fading out, and stagger the start times by 0.2 seconds - you could do: myTimeline.staggerTo([mc1, mc2, mc3, mc4, mc5], 1, {y:"+100", alpha:0}, 0.2). +
 
offsetOrLabel:* (default = 0) — Either a number indicating how many seconds (or frames for frames-based timelines) to offset the insertion point from the end of the timeline (positive values create a gap, negative values create an overlap) or a string indicating the label at which the tweens should start being inserted. If you define a label that doesn't exist yet, it will automatically be added to the end of the timeline before the tweens get appended there. For example, to start appending the tweens 3 seconds after the end of the timeline (leaving a 3-second gap), set the offsetOrLabel to 3. Or to have the tweens appended so that they overlaps with the last 2 seconds of the timeline, set the offsetOrLabel to -2. The default is 0 so that the insertion point is exactly at the end of the timeline. +
 
baseTimeOrLabel:* (default = null) — By default, the tweens are inserted at the end of the timeline plus the offset (which is 0 by default), but you can define a specific time or label to serve as the reference point using baseTimeOrLabel. For example, 0 would be the beginning of the timeline. So myTimeline.staggerFromTo([mc1, mc2, mc3], 1, {x:0}, {x:100}, 0.2, 0, 0) would insert the tweens beginning at the very start of the timeline and myTimeline.staggerFromTo([mc1, mc2, mc3], 1, {x:0}, {x:100}, 0.2, 3, "myLabel") would insert the tweens beginning 3 seconds after the "myLabel" label. Again, the default is the end of the timeline (for easy sequencing) which is the same as using the timeline's duration() (i.e. myTimeline.staggerFromTo([mc1, mc2, mc3], 1, {x:0}, {x:100}, 0.2, 0, myTimeline.duration())). +
 
onCompleteAll:Function (default = null) — A function to call as soon as the entire sequence of tweens has completed +
 
onCompleteAllParams:Array (default = null) — An array of parameters to pass the onCompleteAll method. +
 
onCompleteAllScope:Object (default = null) — The scope for the onCompleteAll call (what "this" should refer to inside that function) +

Returns
* — self (makes chaining easier) +

See also

staggerTo()method 
public function staggerTo(targets:Array, duration:Number, vars:Object, stagger:Number, offsetOrLabel:* = 0, baseTimeOrLabel:* = null, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:Object = null):*

+ Tweens an array of targets to a common set of destination values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code. For example, let's say you have an array containing + references to a bunch of text fields that you'd like to fall away and fade out in a + staggered fashion with 0.2 seconds between each tween's start time: + +

+var textFields = [tf1, tf2, tf3, tf4, tf5];
+myTimeline.staggerTo(textFields, 1, {y:"+150", ease:CubicIn.ease}, 0.2);
+
+

staggerTo() simply loops through the targets array and creates + a to() tween for each object and then inserts it at the appropriate place on a + new TimelineLite instance whose onComplete corresponds to the onCompleteAll + (if you define one) and then appends that TimelineLite to the timeline (as a nested child).

+ +

Note that if you define an onComplete (or any callback for that matter) + in the vars parameter, it will be called for each tween rather than the whole + sequence. This can be very useful, but if you want to call a function after the entire + sequence of tweens has completed, use the onCompleteAll parameter (the 7th parameter).

+ +

The 5th parameter is the offsetOrLabel which can be either a number + indicating how many seconds (or frames for frames-based timelines) to offset the insertion + point of the first tween from the end of the timeline (positive values create a gap, negative values + create an overlap) or a string indicating the label at which the tween should be inserted. + If you define a label that doesn't exist yet, it will automatically be added to the end + of the timeline before the staggered tweens gets appended there.

+ +

Also note that the 6th parameter (baseTimeOrLabel) allows you to define a different + reference point from which to offset, but since sequencing is so common, the default + reference point is the end of the timeline). For example, an offset of 2 would cause + there to be a 2-second gap/delay before the first staggered tween starts. An offset of -0.5 would mean + the first staggered tween gets inserted 0.5 seconds before the end of the timeline, so it will overlap + the previous tween(s) by 0.5 seconds.

+ +

If you prefer to define a specific time or label to serve as the reference point + from which to offset, use the baseTimeOrLabel (6th) parameter. For example, + 0 would be the beginning of the timeline. So myTimeline.staggerTo([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 0, 0) + would insert the first tween at the very beginning of the timeline and + myTimeline.staggerTo([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 3, "myLabel") + would insert the first tween 3 seconds after the "myLabel" label. Again, the default + is the end of the timeline for easy sequencing which is the same as + using the timeline's duration() (i.e. omitting the 6th parameter, + myTimeline.staggerTo([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 3) is identical + to defining it as the duration, like + myTimeline.staggerTo([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 3, myTimeline.duration())).

+ +

JavaScript and AS2 note: - Due to the way JavaScript and AS2 don't + maintain scope (what "this" refers to, or the context) in function calls, + it can be useful to define the scope specifically. Therefore, in the JavaScript and AS2 + versions accept an extra (9th) parameter for onCompleteAllScope.

+ +

Parameters
targets:Array — An array of target objects whose properties should be affected +
 
duration:Number — Duration in seconds (or frames if the timeline is frames-based) +
 
vars:Object — An object defining the end value for each property that should be tweened as well as any special properties like ease. For example, to tween x to 100 and y to 200 for mc1, mc2, and mc3, staggering their start time by 0.25 seconds and then call myFunction when they last one has finished, do this: myTimeline.staggerTo([mc1, mc2, mc3], 1, {x:100, y:200}, 0.25, 0, null, myFunction}). +
 
stagger:Number — Amount of time in seconds (or frames if the timeline is frames-based) to stagger the start time of each tween. For example, you might want to have 5 objects move down 100 pixels while fading out, and stagger the start times by 0.2 seconds - you could do: myTimeline.staggerTo([mc1, mc2, mc3, mc4, mc5], 1, {y:"+100", alpha:0}, 0.2). +
 
offsetOrLabel:* (default = 0) — Either a number indicating how many seconds (or frames for frames-based timelines) to offset the insertion point from the end of the timeline (positive values create a gap, negative values create an overlap) or a string indicating the label at which the tweens should start being inserted. If you define a label that doesn't exist yet, it will automatically be added to the end of the timeline before the tweens get appended there. For example, to start appending the tweens 3 seconds after the end of the timeline (leaving a 3-second gap), set the offsetOrLabel to 3. Or to have the tweens appended so that they overlaps with the last 2 seconds of the timeline, set the offsetOrLabel to -2. The default is 0 so that the insertion point is exactly at the end of the timeline. +
 
baseTimeOrLabel:* (default = null) — By default, the tweens are inserted at the end of the timeline plus the offset (which is 0 by default), but you can define a specific time or label to serve as the reference point using baseTimeOrLabel. For example, 0 would be the beginning of the timeline. So myTimeline.staggerTo([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 0, 0) would insert the tweens beginning at the very start of the timeline and myTimeline.staggerTo([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 3, "myLabel") would insert the tweens beginning 3 seconds after the "myLabel" label. Again, the default is the end of the timeline (for easy sequencing) which is the same as using the timeline's duration() (i.e. myTimeline.staggerTo([mc1, mc2, mc3], 1, {x:"+=100"}, 0.2, 0, myTimeline.duration())). +
 
onCompleteAll:Function (default = null) — A function to call as soon as the entire sequence of tweens has completed +
 
onCompleteAllParams:Array (default = null) — An array of parameters to pass the onCompleteAll method. +
 
onCompleteAllScope:Object (default = null) — The scope for the onCompleteAll call (what "this" should refer to inside that function) +

Returns
* — self (makes chaining easier) +

See also

stop()method 
public function stop():*

[deprecated] Pauses the timeline (used for consistency with Flash's MovieClip.stop() functionality, but essentially accomplishes the same thing as pause() without the parameter)

Returns
* — self (makes chaining easier)
to()method 
public function to(target:Object, duration:Number, vars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*

+ Appends a TweenLite.to() tween to the end of the timeline (or elsewhere) + - this is a convenience method that accomplishes exactly the same thing as + append( TweenLite.to(...) ) but with less code. In other + words, the following two lines produce identical results: + +

+myTimeline.append( TweenLite.to(mc, 1, {x:100, alpha:0.5}) );
+myTimeline.to(mc, 1, {x:100, alpha:0.5});
+
+

Keep in mind that you can chain these calls together and use other convenience + methods like fromTo(), call(), set(), staggerTo(), etc. to build out + sequences very quickly:

+ +
+//create a timeline that calls myFunction() when it completes
+var tl:TimelineLite = new TimelineLite({onComplete:myFunction});
+
+//now we'll use chaining, but break each step onto a different line for readability...
+tl.to(mc, 1, {x:100})        //tween mc.x to 100
+  .to(mc, 1, {y:50}, -0.25)    //then tween mc.y to 50, starting the tween 0.25 seconds before the previous one ends
+  .set(mc, {alpha:0})        //then set mc.alpha to 0.5 immediately
+  .call(otherFunction)        //then call otherFunction()
+  .staggerTo([mc1, mc2, mc3], 1.5, {rotation:45}, 0.25); //finally tween the rotation of mc1, mc2, and mc3 to 45 and stagger the start times by 0.25 seconds
+
+

If you don't want to append the tween and would rather have precise control + of the insertion point, you can use the additional offset and/or + baseTimeOrLabel parameters. Or use a regular insert() like + myTimeline.insert( TweenLite.to(mc, 1, {x:100}), 2.75).

+ +

The 4th parameter is the offsetOrLabel which can be either a number + indicating how many seconds (or frames for frames-based timelines) to offset the insertion + point from the end of the timeline (positive values create a gap, negative values + create an overlap) or a string indicating the label at which the tween should be inserted. + If you define a label that doesn't exist yet, it will automatically be added to the end + of the timeline before the tween gets appended there.

+ +

Also note that the 5th parameter (baseTimeOrLabel) allows you to define a different + reference point from which to offset, but since sequencing is so common, the default + reference point is the end of the timeline). For example, an offset of 2 would cause + there to be a 2-second gap/delay before the tween starts. An offset of -0.5 would mean + the new tween gets inserted 0.5 seconds before the end of the timeline, so it will overlap + the previous tween(s) by 0.5 seconds.

+ +

If you prefer to define a specific time or label to serve as the reference point + from which to offset, use the baseTimeOrLabel parameter. For example, + 0 would be the beginning of the timeline. So myTimeline.to(mc, 1, {x:100}, 0, 0) + would insert the tween at the very beginning of the timeline and + myTimeline.to(mc, 1, {x:100}, 2, "myLabel") would insert the tween 2 seconds + after the "myLabel" label. Again, the default is the end of the timeline + for easy sequencing which is the same as using the timeline's duration() + (i.e. omitting the 5th parameter, myTimeline.to(mc, 1, {x:100}, 3) is identical + to defining it as the duration, like myTimeline.to(mc, 1, {x:100}, 3, myTimeline.duration())).

+ +
+tl.to(mc, 1, {x:100});  //appends to the end of the timeline
+tl.to(mc, 1, {x:100}, 2);  //appends it with a gap of 2 seconds
+tl.to(mc, 1, {x:100}, 0, 0);  //places it at the very beginning of the timeline
+tl.to(mc, 1, {x:100}, 2, "myLabel");  //places it 2 seconds after "myLabel"
+
+ +

Parameters
target:Object — Target object (or array of objects) whose properties the tween affects +
 
duration:Number — Duration in seconds (or frames if the timeline is frames-based) +
 
vars:Object — An object defining the end value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x to 100 and mc.y to 200 and then call myFunction, do this: myTimeline.to(mc, 1, {x:100, y:200, onComplete:myFunction}). +
 
offsetOrLabel:* (default = 0) — Either a number indicating how many seconds (or frames for frames-based timelines) to offset the insertion point from the end of the timeline (positive values create a gap, negative values create an overlap) or a string indicating the label at which the tween should be inserted. If you define a label that doesn't exist yet, it will automatically be added to the end of the timeline before the tween gets appended there. For example, to append a tween 3 seconds after the end of the timeline (leaving a 3-second gap), set the offsetOrLabel to 3. Or to have the tween appended so that it overlaps with the last 2 seconds of the timeline, set the offsetOrLabel to -2. The default is 0 so that the insertion point is exactly at the end of the timeline. +
 
baseTimeOrLabel:* (default = null) — By default, the tween is inserted at the end of the timeline plus the offsetOrLabel (which is 0 by default), but you can define a specific time or label to serve as the reference point using baseTimeOrLabel. For example, 0 would be the beginning of the timeline. So myTimeline.to(mc, 1, {x:100}, 0, 0) would insert the tween at the very beginning of the timeline and myTimeline.to(mc, 1, {x:100}, 2, "myLabel") would insert the tween 2 seconds after the "myLabel" label. Again, the default is the end of the timeline (for easy sequencing) which is the same as using the timeline's duration() (i.e. myTimeline.to(mc, 1, {x:100}, 0, myTimeline.duration())). +

Returns
* — self (makes chaining easier) +

See also

totalDuration()method 
override public function totalDuration(value:Number):*

+ Gets the timeline's total duration or, if used as a setter, adjusts the timeline's + timeScale to fit it within the specified duration. For example, if a TimelineMax instance has + a duration of 2 and a repeat of 3, its totalDuration + would be 8 (one standard play plus 3 repeats equals 4 total cycles). + +

Due to the fact that a timeline's totalDuration is dictated by its contents, + using this method as a setter will simply cause the timeScale to be adjusted + to fit the current contents into the specified totalDuration. For example, + if there are 20-seconds worth of tweens in the timeline and you do myTimeline.totalDuration(10), + the timeScale would be changed to 2. If you checked the totalDuration again + immediately after that, it would still return 20 because technically that is how long all the + child tweens/timelines are but upon playback the speed would be doubled because of the + timeScale.

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myAnimation.totalDuration(2).play(1);

+ +
+var ctd = myAnimation.totalDuration(); //gets current total duration
+myAnimation.totalDuration( 20 ); //adjusts the timeScale so that myAnimation fits into exactly 20 seconds on its parent timeline
+
+

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

usesFrames()method 
public function usesFrames():Boolean

+ [READ-ONLY] If true, the timeline's timing mode is frames-based instead of + seconds. This can only be set to true by passing useFrames:true in + the vars parameter of the constructor, or by nesting this timeline in another whose + timing mode is frames-based. An animation's timing mode is always determined by its parent timeline). +

Returns
Boolean
Examples
Sample code:
+//create the timeline with an onComplete callback that calls myFunction() when the timeline completes
+var tl = new TimelineLite({onComplete:myFunction});
+
+//add a tween
+tl.append( new TweenLite(mc, 1, {x:200, y:100}) );
+        
+//add another tween at the end of the timeline (makes sequencing easy)
+tl.append( new TweenLite(mc, 0.5, {alpha:0}) );
+ 
+//append a tween using the convenience method (shorter syntax) and offset it by 0.5 seconds
+tl.to(mc, 1, {rotation:30}, 0.5);
+         
+//reverse anytime
+tl.reverse();
+
+//Add a "spin" label 3-seconds into the timeline
+tl.addLabel("spin", 3);
+
+//insert a rotation tween at the "spin" label (you could also define the insertion point as the time instead of a label)
+tl.insert( new TweenLite(mc, 2, {rotation:"360"}), "spin");
+    
+//go to the "spin" label and play the timeline from there
+tl.play("spin");
+
+//nest another TimelineLite inside your timeline...
+var nested = new TimelineLite();
+nested.to(mc2, 1, {x:200}));
+tl.append(nested);
+
+ +

Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +




\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/TimelineMax.html b/duo/js/greensock-v12-js/docs/com/greensock/TimelineMax.html new file mode 100755 index 0000000..1bbe9dc --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/TimelineMax.html @@ -0,0 +1,1021 @@ +com.greensock.TimelineMax +
Packagecom.greensock
Classpublic class TimelineMax
InheritanceTimelineMax Inheritance TimelineLite Inheritance SimpleTimeline Inheritance Animation Inheritance Object

+ TimelineMax extends TimelineLite, offering exactly the same functionality plus useful + (but non-essential) features like repeat, repeatDelay, yoyo, currentLabel(), addCallback(), + removeCallback(), tweenTo(), tweenFromTo(), getLabelAfter(), getLabelBefore(), + getActive() (and probably more in the future). It is the ultimate + sequencing tool that acts like a container for tweens and other timelines, making it + simple to control them as a whole and precisely manage their timing. Without TimelineMax + (or its little brother TimelineLite), building complex sequences would be far more cumbersome + because you'd need to use the delay special property for everything which would + make future edits far more tedius. Here is a basic example: +
+TweenLite.to(element, 1, {css:{left:100}});
+TweenLite.to(element, 1, {css:{top:50}, delay:1});
+TweenLite.to(element, 1, {css:{opacity:0}, delay:2});
+
+ The above code animates the element's "left" css property to 100, then "top" to 50, and finally + "opacity" to 0 (notice the delay in all but the first tween). But + imagine if you wanted to increase the duration of the first tween to 1.5 - you'd need to + adjust every delay thereafter. And what if you want to pause() the whole + sequence or restart() it or reverse() it on-the-fly or repeat + it twice? This becomes quite messy (or flat-out impossible), but TimelineMax makes it + incredibly simple: + +
+var tl = new TimelineMax({repeat:2, repeatDelay:1});
+tl.append( TweenLite.to(element, 1, {css:{left:100}}) );
+tl.append( TweenLite.to(element, 1, {css:{top:50}}) );
+tl.append( TweenLite.to(element, 1, {css:{opacity:0}}) );
+ 
+//then later, control the whole thing...
+tl.pause();
+tl.resume();
+tl.seek(1.5);
+tl.reverse();
+...
+
+ Or use the convenient to() method and chaining to make it even shorter: +
+var tl = new TimelineMax();
+tl.to(element, 1, {css:{left:100}}).to(element, 1, {css:{top:50}}).to(element, 1, {css:{opacity:0}});
+
+ +

Now you can feel free to adjust any of the tweens without worrying about trickle-down + changes to delays. Increase the duration of that first tween and everything automatically + adjusts.

+ +

Here are some other benefits and features of TimelineMax:

+ +
    +
  • Things can overlap on the timeline as much as you want. You have complete control + over where tweens/timelines are placed. Most other animation tools can only do basic + one-after-the-other sequencing but can't allow things to overlap. Imagine appending + a tween that moves an object and you want it to start fading out 0.5 seconds before the + end of that tween? With TimelineMax it's easy.
  • + +
  • Add labels, callbacks, play(), stop(), seek(), restart(), and even reverse() smoothly anytime.
  • + +
  • Nest timelines within timelines as deeply as you want. This means you can modularize + your code and make it far more efficient. Imagine building your app with common animateIn() + and animateOut() methods that return a tween or timeline instance, then you can string + things together like + myTimeline.append( myObject.animateIn() ).append( myObject.animateOut(), 4).append( myObject2.animateIn(), -0.5)... +
  • + +
  • Speed up or slow down the entire timeline with its timeScale() method. + You can even tween it to gradually speed up or slow down the animation smoothly.
  • + +
  • Get or set the progress of the timeline using its progress() or + totalProgress() methods. For example, to skip to the halfway point, + set myTimeline.progress(0.5); +
  • + +
  • Tween the time, totalTime, progress, or totalProgress to + fastforward/rewind the timeline. You could even attach a slider to one of these to give the + user the ability to drag forward/backward through the timeline.
  • + +
  • Add onComplete, onStart, onUpdate, onRepeat and/or onReverseComplete + callbacks using the constructor's vars object like + var tl = new TimelineMax({onComplete:myFunction}); +
  • + +
  • Kill the tweens of a particular object inside the timeline with killTweensOf() + or get the tweens of an object with getTweensOf() or get all the tweens/timelines + in the timeline with getChildren() +
  • + +
  • Set the timeline to repeat any number of times or indefinitely. You can even set a delay + between each repeat cycle and/or cause the repeat cycles to yoyo, appearing to reverse direction + every other cycle.
  • + +
  • listen for START, UPDATE, REPEAT, REVERSE_COMPLETE, and COMPLETE events.
  • + +
  • get the active tweens in the timeline with getActive().
  • + +
  • By passing useFrames:true in the vars parameter, you can + base the timing on frames instead of seconds. Please note, however, that + the timeline's timing mode dictates its childrens' timing mode as well.
  • + +
  • Get the currentLabel() or find labels at various positions in the timeline + using getLabelAfter() and getLabelBefore() +
  • + +
  • You can export all the tween/timelines from the root (master) timeline anytime into + a TimelineLite instance using TimelineLite.exportRoot() so that + you can pause() them all or reverse() or alter their + timeScale, etc. without affecting tweens/timelines that you create in + the future. Imagine a game that has all its animation driven by the GreenSock + Animation Platform and it needs to pause or slow down while a status screen pops up. + Very easy.
  • + +
+ + +

+ SPECIAL PROPERTIES: +

+

You can optionally use the constructor's vars parameter to define any of + the special properties below (syntax example: new TimelineMax({onComplete:myFunction, repeat:2, repeatDelay:1, yoyo:true}); +

+ +
    +
  • + delay : Number - + Amount of delay in seconds (or frames for frames-based tweens) before the timeline should begin.
  • + +
  • + paused : Boolean - + If true, the timeline will pause itself immediately upon creation (by default, + timelines automatically begin playing immediately). If you plan to create a TimelineMax and + then populate it later (after one or more frames elapse), it is typically best to set + paused:true and then play() after you populate it.
  • + +
  • + onComplete : Function - + A function that should be called when the timeline has completed
  • + +
  • + onCompleteParams : Array - + An Array of parameters to pass the onComplete function. For example, + new TimelineMax({onComplete:myFunction, onCompleteParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onCompleteParams:["{self}", "param2"] +
  • + +
  • + onCompleteScope : Object - + Defines the scope of the onComplete function (what "this" refers to inside that function).
  • + +
  • + useFrames : Boolean - + If useFrames is true, the timelines's timing will be + based on frames instead of seconds because it is intially added to the root + frames-based timeline. This causes both its duration + and delay to be based on frames. An animations's timing mode is + always determined by its parent timeline.
  • + +
  • + tweens : Array - + To immediately insert several tweens into the timeline, use the tweens + special property to pass in an Array of TweenLite/TweenMax/TimelineLite/TimelineMax + instances. You can use this in conjunction with the align and + stagger special properties to set up complex sequences with minimal code. + These values simply get passed to the insertMultiple() method.
  • + +
  • + align : String - + Only used in conjunction with the tweens special property when multiple + tweens are to be inserted immediately. The value simply gets passed to the + insertMultiple() method. The default is "normal". + Options are: +
      +
    • + + "sequence" + : aligns the tweens one-after-the-other in a sequence
    • +
    • + + "start" + : aligns the start times of all of the tweens (ignores delays)
    • +
    • + + "normal" + : aligns the start times of all the tweens (honors delays)
    • +
    + The align special property does not force all child + tweens/timelines to maintain relative positioning, so for example, if you use + "sequence" and then later change the duration of one of the nested tweens, + it does not force all subsequent timelines to change their position. + The align special property only affects the alignment of the tweens that are + initially placed into the timeline through the tweens special property of + the vars object.
  • + +
  • + stagger : Number - + Only used in conjunction with the tweens special property when multiple + tweens are to be inserted immediately. It staggers the tweens by a set amount of time + in seconds (or in frames if useFrames is true). For example, if the + stagger value is 0.5 and the "align" property is set to "start", the + second tween will start 0.5 seconds after the first one starts, then 0.5 seconds + later the third one will start, etc. If the align property is "sequence", + there would be 0.5 seconds added between each tween. This value simply gets + passed to the insertMultiple() method. Default is 0.
  • + +
  • + onStart : Function - + A function that should be called when the timeline begins (when its time + changes from 0 to some other value which can happen more than once if the + timeline is restarted multiple times).
  • + +
  • + onStartParams : Array - + An Array of parameters to pass the onStart function. For example, + new TimelineMax({onStart:myFunction, onStartParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onStartParams:["{self}", "param2"] +
  • + +
  • + onStartScope : Object - + Defines the scope of the onStart function (what "this" refers to inside that function).
  • + +
  • + onUpdate : Function - + A function that should be called every time the timeline updates + (on every frame while the timeline is active)
  • + +
  • + onUpdateParams : Array - + An Array of parameters to pass the onUpdate function. For example, + new TimelineMax({onUpdate:myFunction, onUpdateParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onUpdateParams:["{self}", "param2"] +
  • + +
  • + onUpdateScope : Object - + Defines the scope of the onUpdate function (what "this" refers to inside that function).
  • + +
  • + onReverseComplete : Function - + A function that should be called when the timeline has reached its beginning again from the + reverse direction. For example, if reverse() is called, the timeline will move + back towards its beginning and when its time reaches 0, onReverseComplete + will be called. This can also happen if the timeline is placed in a TimelineLite or TimelineMax + instance that gets reversed and plays the timeline backwards to (or past) the beginning.
  • + +
  • + onReverseCompleteParams : Array - + An Array of parameters to pass the onReverseComplete function. For example, + new TimelineMax({onReverseComplete:myFunction, onReverseCompleteParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onReverseCompleteParams:["{self}", "param2"] +
  • + +
  • + onReverseCompleteScope : Object - + Defines the scope of the onReverseComplete function (what "this" refers to inside that function).
  • + +
  • + autoRemoveChildren : Boolean - + If autoRemoveChildren is set to true, as soon as child + tweens/timelines complete, they will automatically get killed/removed. This is normally + undesireable because it prevents going backwards in time (like if you want to + reverse() or set the progress lower, etc.). It can, however, + improve speed and memory management. The root timelines use autoRemoveChildren:true.
  • + +
  • + smoothChildTiming : Boolean - + Controls whether or not child tweens/timelines are repositioned automatically + (changing their startTime) in order to maintain smooth playback when + properties are changed on-the-fly. For example, imagine that the timeline's playhead is + on a child tween that is 75% complete, moving mc.x from 0 to 100 and then that tween's + reverse() method is called. If smoothChildTiming is false + (the default except for the root timelines), the tween would flip in place, keeping its + startTime consistent. Therefore the playhead of the timeline would now be + at the tween's 25% completion point instead of 75%. Remember, the timeline's playhead + position and direction are unaffected by child tween/timeline changes. mc.x would jump + from 75 to 25, but the tween's position in the timeline would remain consistent. However, + if smoothChildTiming is true, that child tween's + startTime would be adjusted so that the timeline's playhead intersects + with the same spot on the tween (75% complete) as it had immediately before + reverse() was called, thus playback appears perfectly smooth. mc.x + would still be 75 and it would continue from there as the playhead moves on, but + since the tween is reversed now mc.x will travel back towards 0 instead of 100. + Ultimately it's a decision between prioritizing smooth on-the-fly playback + (true) or consistent position(s) of child tweens/timelines + (false). + + Some examples of on-the-fly changes to child tweens/timelines that could cause their + startTime to change when smoothChildTiming is true + are: reversed, timeScale, progress, totalProgress, time, totalTime, delay, pause, + resume, duration, and totalDuration.
  • + +
  • + repeat : Number - + Number of times that the timeline should repeat after its first iteration. For example, + if repeat is 1, the timeline will play a total of twice (the initial play + plus 1 repeat). To repeat indefinitely, use -1. repeat should always be an integer.
  • + +
  • + repeatDelay : Number - + Amount of time in seconds (or frames for frames-based timelines) between repeats. For example, + if repeat is 2 and repeatDelay is 1, the timeline will play initially, + then wait for 1 second before it repeats, then play again, then wait 1 second again before + doing its final repeat.
  • + +
  • + yoyo : Boolean - + If true, every other repeat cycle will run in the opposite + direction so that the timeline appears to go back and forth (forward then backward). + This has no affect on the "reversed" property though. So if repeat + is 2 and yoyo is false, it will look like: + start - 1 - 2 - 3 - 1 - 2 - 3 - 1 - 2 - 3 - end. But if yoyo is true, + it will look like: start - 1 - 2 - 3 - 3 - 2 - 1 - 1 - 2 - 3 - end.
  • + +
  • + onRepeat : Function - + A function that should be called each time the timeline repeats
  • + +
  • + onRepeatParams : Array - + An Array of parameters to pass the onRepeat function. For example, + new TimelineMax({repeat:3, onRepeat:myFunction, onRepeatParams:[mc, "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onRepeatParams:["{self}", "param2"] +
  • + +
  • + onRepeatScope : Object - + Defines the scope of the onRepeat function (what "this" refers to inside that function).
  • + +
+ +

View the examples



Public Properties
 PropertyDefined By
 InheritedautoRemoveChildren : Boolean
If true, child tweens/timelines will be removed as soon as they complete.
SimpleTimeline
 Inheriteddata : *
A place to store any data you want (initially populated with vars.data if it exists).
Animation
 InheritedsmoothChildTiming : Boolean
+ Controls whether or not child tweens/timelines are repositioned automatically (changing their startTime) + in order to maintain smooth playback when properties are changed on-the-fly.
SimpleTimeline
 Inheritedticker : Shape
[static] + The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers).
Animation
 Inheritedtimeline : SimpleTimeline
[Read-only] Parent timeline.
Animation
 Inheritedvars : Object
The vars object passed into the constructor which stores configuration variables like onComplete, onUpdate, etc.
Animation
Public Methods
 MethodDefined By
  
TimelineMax(vars:Object = null)
+ Constructor.
TimelineMax
  
addCallback(callback:Function, timeOrLabel:*, params:Array = null, scope:* = null):TimelineMax
+ Inserts a callback at a particular time or label.
TimelineMax
 Inherited
addLabel(label:String, time:Number):*
+ Adds a label to the timeline, making it easy to mark important positions/times.
TimelineLite
 Inherited
append(value:*, offsetOrLabel:* = 0):*
+ Appends a tween, timeline, callback, or label to the end of the timeline, + optionally offsetting its insertion point by a certain amount (to make it overlap with the end of + the timeline or leave a gap before its insertion point).
TimelineLite
 Inherited
appendMultiple(tweens:Array, offsetOrLabel:* = 0, align:String = normal, stagger:Number = 0):*
+ Appends multiple tweens/timelines/callbacks/labels to the end of the timeline at once, optionally + offsetting the insertion point by a certain amount, aligning them (as a sequence for example), and/or + staggering their relative timing.
TimelineLite
 Inherited
call(callback:Function, params:Array = null, scope:* = null, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*
+ Appends a callback to the end of the timeline - this is + a convenience method that accomplishes exactly the same thing as + append( TweenLite.delayedCall(...) ) but with less code.
TimelineLite
 Inherited
clear(labels:Boolean = true):*
+ Empties the timeline of all tweens, timelines, and callbacks (and optionally labels too).
TimelineLite
  
currentLabel(value:String = null):*
+ Gets the closest label that is at or before the current time, or jumps to a provided label + (behavior depends on whether or not you pass a parameter to the method).
TimelineMax
 Inherited
delay(value:Number):*
+ Gets or sets the animation's initial delay which is the length of time in seconds + (or frames for frames-based tweens) before the animation should begin.
Animation
 Inherited
duration(value:Number):*
[override] + Gets the timeline's duration or, if used as a setter, adjusts the timeline's + timeScale to fit it within the specified duration.
TimelineLite
 Inherited
eventCallback(type:String, callback:Function = null, params:Array = null, scope:* = null):*
+ Gets or sets an event callback like "onComplete", "onUpdate", "onStart", "onReverseComplete" + or "onRepeat" (onRepeat only applies to TweenMax or TimelineMax instances) + along with any parameters that should be passed to that callback.
Animation
 Inherited
exportRoot(vars:Object = null, omitDelayedCalls:Boolean = true):TimelineLite
[static] + Seamlessly transfers all tweens, timelines, and [optionally] delayed calls from the root + timeline into a new TimelineLite so that you can perform advanced tasks on a seemingly global + basis without affecting tweens/timelines that you create after the export.
TimelineLite
 Inherited
from(target:Object, duration:Number, vars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*
+ Appends a TweenLite.from() tween to the end of the timeline (or elsewhere) + - this is a convenience method that accomplishes exactly the same thing as + append( TweenLite.from(...) ) but with less code.
TimelineLite
 Inherited
fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*
+ Appends a TweenLite.fromTo() tween to the end of the timeline - this is + a convenience method that accomplishes exactly the same thing as + append( TweenLite.fromTo(...) ) but with less code.
TimelineLite
  
getActive(nested:Boolean = true, tweens:Boolean = true, timelines:Boolean = false):Array
+ Returns the tweens/timelines that are currently active in the timeline, meaning the timeline's + playhead is positioned on the child tween/timeline and the child isn't paused.
TimelineMax
 Inherited
getChildren(nested:Boolean = true, tweens:Boolean = true, timelines:Boolean = true, ignoreBeforeTime:Number = -9999999999):Array
+ Returns an array containing all the tweens and/or timelines nested in this timeline.
TimelineLite
  
getLabelAfter(time:Number):String
+ Returns the next label (if any) that occurs after the time parameter.
TimelineMax
  
getLabelBefore(time:Number):String
+ Returns the previous label (if any) that occurs before the time parameter.
TimelineMax
  
+ Returns an Array of label objects, each with a "time" and "name" property, in the order that they occur in the timeline.
TimelineMax
 Inherited
getLabelTime(label:String):Number
+ Returns the time associated with a particular label.
TimelineLite
 Inherited
getTweensOf(target:Object, nested:Boolean = true):Array
+ Returns the tweens of a particular object that are inside this timeline.
TimelineLite
 Inherited
insert(value:*, timeOrLabel:* = 0):*
[override] + Inserts a tween, timeline, callback, or label into the timeline at a specific time, frame, + or label.
TimelineLite
 Inherited
insertMultiple(tweens:Array, timeOrLabel:* = 0, align:String = normal, stagger:Number = 0):*
+ Inserts multiple tweens/timelines/callbacks/labels into the timeline at once, optionally aligning them + (as a sequence for example) and/or staggering the timing.
TimelineLite
  
[override] + Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
TimelineMax
 Inherited
kill(vars:Object = null, target:Object = null):*
+ Kills the animation entirely or in part depending on the parameters.
Animation
 Inherited
pause(atTime:* = null, suppressEvents:Boolean = true):*
+ Pauses the instance, optionally jumping to a specific time.
Animation
 Inherited
paused(value:Boolean = false):*
+ Gets or sets the animation's paused state which indicates whether or not the animation + is currently paused.
Animation
 Inherited
play(from:* = null, suppressEvents:Boolean = true):*
+ Begins playing forward, optionally from a specific time (by default playback begins from + wherever the playhead currently is).
Animation
  
progress(value:Number):*
[override] + Gets or sets the timeline's progress which is a value between 0 and 1 indicating the position + of the virtual playhead (excluding repeats) where 0 is at the beginning, 0.5 is halfway complete, + and 1 is complete.
TimelineMax
 Inherited
remove(value:*):*
+ Removes a tween, timeline, callback, or label from the timeline.
TimelineLite
  
removeCallback(callback:Function, timeOrLabel:* = null):TimelineMax
+ Removes a callback from a particular time or label.
TimelineMax
 Inherited
removeLabel(label:String):*
+ + Removes a label from the timeline and returns the time of that label.
TimelineLite
 Inherited
render(time:Number, suppressEvents:Boolean = false, force:Boolean = false):void
[override]
SimpleTimeline
  
repeat(value:Number = 0):*
+ Gets or sets the number of times that the timeline should repeat after its first iteration.
TimelineMax
  
repeatDelay(value:Number = 0):*
+ Gets or sets the amount of time in seconds (or frames for frames-based timelines) between repeats.
TimelineMax
 Inherited
restart(includeDelay:Boolean = false, suppressEvents:Boolean = true):*
+ Restarts and begins playing forward from the beginning.
Animation
 Inherited
resume(from:* = null, suppressEvents:Boolean = true):*
+ Resumes playing without altering direction (forward or reversed), optionally jumping to a specific time first.
Animation
 Inherited
reverse(from:* = null, suppressEvents:Boolean = true):*
+ Reverses playback so that all aspects of the animation are oriented backwards including, for example, + a tween's ease.
Animation
 Inherited
reversed(value:Boolean = false):*
+ Gets or sets the animation's reversed state which indicates whether or not the animation + should be played backwards.
Animation
 Inherited
seek(timeOrLabel:*, suppressEvents:Boolean = true):*
[override] + Jumps to a specific time (or label) without affecting whether or not the instance + is paused or reversed.
TimelineLite
 Inherited
set(target:Object, vars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*
+ Appends a zero-duration tween to the end of the timeline that + sets values immediately (when the virtual playhead reaches that position + on the timeline) - this is a convenience method that accomplishes exactly + the same thing as append( TweenLite.to(target, 0, {...}) ) but + with less code.
TimelineLite
 Inherited
shiftChildren(amount:Number, adjustLabels:Boolean = false, ignoreBeforeTime:Number = 0):*
+ Shifts the startTime of the timeline's children by a certain amount and optionally adjusts labels too.
TimelineLite
 Inherited
staggerFrom(targets:Array, duration:Number, vars:Object, stagger:Number = 0, offsetOrLabel:* = 0, baseTimeOrLabel:* = null, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:Object = null):*
+ Tweens an array of targets from a common set of destination values (using the current + values as the destination), but staggers their start times by a specified amount of time, + creating an evenly-spaced sequence with a surprisingly small amount of code.
TimelineLite
 Inherited
staggerFromTo(targets:Array, duration:Number, fromVars:Object, toVars:Object, stagger:Number = 0, offsetOrLabel:* = 0, baseTimeOrLabel:* = null, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:Object = null):*
+ Tweens an array of targets from and to a common set of values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code.
TimelineLite
 Inherited
staggerTo(targets:Array, duration:Number, vars:Object, stagger:Number, offsetOrLabel:* = 0, baseTimeOrLabel:* = null, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:Object = null):*
+ Tweens an array of targets to a common set of destination values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code.
TimelineLite
 Inherited
startTime(value:Number):*
+ Gets or sets the time at which the animation begins on its parent timeline (after any delay + that was defined).
Animation
 Inherited
stop():*
[deprecated] Pauses the timeline (used for consistency with Flash's MovieClip.stop() functionality, but essentially accomplishes the same thing as pause() without the parameter)
TimelineLite
  
time(value:Number, suppressEvents:Boolean = false):*
[override] + Gets or sets the local position of the playhead (essentially the current time), not + including any repeats or repeatDelays.
TimelineMax
 Inherited
timeScale(value:Number):*
+ Factor that's used to scale time in the animation where 1 = normal speed (the default), + 0.5 = half speed, 2 = double speed, etc.
Animation
 Inherited
to(target:Object, duration:Number, vars:Object, offsetOrLabel:* = 0, baseTimeOrLabel:* = null):*
+ Appends a TweenLite.to() tween to the end of the timeline (or elsewhere) + - this is a convenience method that accomplishes exactly the same thing as + append( TweenLite.to(...) ) but with less code.
TimelineLite
  
totalDuration(value:Number):*
[override] + Gets or sets the total duration of the timeline in seconds (or frames for frames-based timelines) + including any repeats or repeatDelays.
TimelineMax
  
totalProgress(value:Number):*
+ Gets or sets the timeline's totalProgress which is a value between 0 and 1 indicating the position + of the virtual playhead (including repeats) where 0 is at the beginning, 0.5 is + halfway complete, and 1 is complete.
TimelineMax
 Inherited
totalTime(time:Number, suppressEvents:Boolean = false):*
+ Gets or sets the position of the playhead according to the totalDuration + which includes any repeats and repeatDelays (only available + in TweenMax and TimelineMax).
Animation
  
tweenFromTo(fromTimeOrLabel:*, toTimeOrLabel:*, vars:Object = null):TweenLite
+ Creates a linear tween that essentially scrubs the playhead from a particular time or label + to another time or label and then stops.
TimelineMax
  
tweenTo(timeOrLabel:*, vars:Object = null):TweenLite
+ Creates a linear tween that essentially scrubs the playhead to a particular time or label and + then stops.
TimelineMax
 Inherited
usesFrames():Boolean
+ [READ-ONLY] If true, the timeline's timing mode is frames-based instead of + seconds.
TimelineLite
  
yoyo(value:Boolean = false):*
+ Gets or sets the timeline's yoyo state, where true causes + the timeline to go back and forth, alternating backward and forward on each + repeat.
TimelineMax
Constructor Detail
TimelineMax()Constructor
public function TimelineMax(vars:Object = null)

+ Constructor. + +

SPECIAL PROPERTIES

+

The following special properties may be passed in via the constructor's vars parameter, like + new TimelineMax({paused:true, onComplete:myFunction, repeat:2, yoyo:true})

+ +
    +
  • delay : Number - + Amount of delay in seconds (or frames for frames-based tweens) before the timeline should begin.
  • + +
  • paused : Boolean - + If true, the timeline will pause itself immediately upon creation (by default, + timelines automatically begin playing immediately). If you plan to create a TimelineMax and + then populate it later (after one or more frames elapse), it is typically best to set + paused:true and then play() after you populate it.
  • + +
  • onComplete : Function - + A function that should be called when the timeline has completed
  • + +
  • onCompleteParams : Array - + An Array of parameters to pass the onComplete function. For example, + new TimelineMax({onComplete:myFunction, onCompleteParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onCompleteParams:["{self}", "param2"]
  • + +
  • onCompleteScope : Object - + Defines the scope of the onComplete function (what "this" refers to inside that function).
  • + +
  • useFrames : Boolean - + If useFrames is true, the timelines's timing will be + based on frames instead of seconds because it is intially added to the root + frames-based timeline. This causes both its duration + and delay to be based on frames. An animations's timing mode is + always determined by its parent timeline.
  • + +
  • tweens : Array - + To immediately insert several tweens into the timeline, use the tweens + special property to pass in an Array of TweenLite/TweenMax/TimelineLite/TimelineMax + instances. You can use this in conjunction with the align and + stagger special properties to set up complex sequences with minimal code. + These values simply get passed to the insertMultiple() method.
  • + +
  • align : String - + Only used in conjunction with the tweens special property when multiple + tweens are to be inserted immediately. The value simply gets passed to the + insertMultiple() method. The default is "normal". + Options are: +
      +
    • "sequence": aligns the tweens one-after-the-other in a sequence
    • +
    • "start": aligns the start times of all of the tweens (ignores delays)
    • +
    • "normal": aligns the start times of all the tweens (honors delays)
    • +
    + The align special property does not force all child + tweens/timelines to maintain relative positioning, so for example, if you use + "sequence" and then later change the duration of one of the nested tweens, + it does not force all subsequent timelines to change their position. + The align special property only affects the alignment of the tweens that are + initially placed into the timeline through the tweens special property of + the vars object.
  • + +
  • stagger : Number - + Only used in conjunction with the tweens special property when multiple + tweens are to be inserted immediately. It staggers the tweens by a set amount of time + in seconds (or in frames if useFrames is true). For example, if the + stagger value is 0.5 and the "align" property is set to "start", the + second tween will start 0.5 seconds after the first one starts, then 0.5 seconds + later the third one will start, etc. If the align property is "sequence", + there would be 0.5 seconds added between each tween. This value simply gets + passed to the insertMultiple() method. Default is 0.
  • + +
  • onStart : Function - + A function that should be called when the timeline begins (when its time + changes from 0 to some other value which can happen more than once if the + timeline is restarted multiple times).
  • + +
  • onStartParams : Array - + An Array of parameters to pass the onStart function. For example, + new TimelineMax({onStart:myFunction, onStartParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onStartParams:["{self}", "param2"]
  • + +
  • onStartScope : Object - + Defines the scope of the onStart function (what "this" refers to inside that function).
  • + +
  • onUpdate : Function - + A function that should be called every time the timeline updates + (on every frame while the timeline is active)
  • + +
  • onUpdateParams : Array - + An Array of parameters to pass the onUpdate function. For example, + new TimelineMax({onUpdate:myFunction, onUpdateParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onUpdateParams:["{self}", "param2"]
  • + +
  • onUpdateScope : Object - + Defines the scope of the onUpdate function (what "this" refers to inside that function).
  • + +
  • onReverseComplete : Function - + A function that should be called when the timeline has reached its beginning again from the + reverse direction. For example, if reverse() is called, the timeline will move + back towards its beginning and when its time reaches 0, onReverseComplete + will be called. This can also happen if the timeline is placed in a TimelineLite or TimelineMax + instance that gets reversed and plays the timeline backwards to (or past) the beginning.
  • + +
  • onReverseCompleteParams : Array - + An Array of parameters to pass the onReverseComplete function. For example, + new TimelineMax({onReverseComplete:myFunction, onReverseCompleteParams:["param1", "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onReverseCompleteParams:["{self}", "param2"]
  • + +
  • onReverseCompleteScope : Object - + Defines the scope of the onReverseComplete function (what "this" refers to inside that function).
  • + +
  • autoRemoveChildren : Boolean - + If autoRemoveChildren is set to true, as soon as child + tweens/timelines complete, they will automatically get killed/removed. This is normally + undesireable because it prevents going backwards in time (like if you want to + reverse() or set the progress lower, etc.). It can, however, + improve speed and memory management. The root timelines use autoRemoveChildren:true.
  • + +
  • smoothChildTiming : Boolean - + Controls whether or not child tweens/timelines are repositioned automatically + (changing their startTime) in order to maintain smooth playback when + properties are changed on-the-fly. For example, imagine that the timeline's playhead is + on a child tween that is 75% complete, moving mc.x from 0 to 100 and then that tween's + reverse() method is called. If smoothChildTiming is false + (the default except for the root timelines), the tween would flip in place, keeping its + startTime consistent. Therefore the playhead of the timeline would now be + at the tween's 25% completion point instead of 75%. Remember, the timeline's playhead + position and direction are unaffected by child tween/timeline changes. mc.x would jump + from 75 to 25, but the tween's position in the timeline would remain consistent. However, + if smoothChildTiming is true, that child tween's + startTime would be adjusted so that the timeline's playhead intersects + with the same spot on the tween (75% complete) as it had immediately before + reverse() was called, thus playback appears perfectly smooth. mc.x + would still be 75 and it would continue from there as the playhead moves on, but + since the tween is reversed now mc.x will travel back towards 0 instead of 100. + Ultimately it's a decision between prioritizing smooth on-the-fly playback + (true) or consistent position(s) of child tweens/timelines + (false). + + Some examples of on-the-fly changes to child tweens/timelines that could cause their + startTime to change when smoothChildTiming is true + are: reversed, timeScale, progress, totalProgress, time, totalTime, delay, pause, + resume, duration, and totalDuration.
  • + +
  • repeat : Number - + Number of times that the timeline should repeat after its first iteration. For example, + if repeat is 1, the timeline will play a total of twice (the initial play + plus 1 repeat). To repeat indefinitely, use -1. repeat should always be an integer.
  • + +
  • repeatDelay : Number - + Amount of time in seconds (or frames for frames-based timelines) between repeats. For example, + if repeat is 2 and repeatDelay is 1, the timeline will play initially, + then wait for 1 second before it repeats, then play again, then wait 1 second again before + doing its final repeat.
  • + +
  • yoyo : Boolean - + If true, every other repeat cycle will run in the opposite + direction so that the timeline appears to go back and forth (forward then backward). + This has no affect on the "reversed" property though. So if repeat + is 2 and yoyo is false, it will look like: + start - 1 - 2 - 3 - 1 - 2 - 3 - 1 - 2 - 3 - end. But if yoyo is true, + it will look like: start - 1 - 2 - 3 - 3 - 2 - 1 - 1 - 2 - 3 - end.
  • + +
  • onRepeat : Function - + A function that should be called each time the timeline repeats
  • + +
  • onRepeatParams : Array - + An Array of parameters to pass the onRepeat function. For example, + new TimelineMax({repeat:3, onRepeat:myFunction, onRepeatParams:[mc, "param2"]}); + To self-reference the timeline instance itself in one of the parameters, use "{self}", + like: onRepeatParams:["{self}", "param2"]
  • + +
  • onRepeatScope : Object - + Defines the scope of the onRepeat function (what "this" refers to inside that function).
  • + +
+ +

Parameters
vars:Object (default = null) — optionally pass in special properties like useFrames, onComplete, onCompleteParams, onUpdate, onUpdateParams, onStart, onStartParams, tweens, align, stagger, delay, autoRemoveChildren, onCompleteListener, onStartListener, onUpdateListener, repeat, repeatDelay, and/or yoyo. +
Method Detail
addCallback()method
public function addCallback(callback:Function, timeOrLabel:*, params:Array = null, scope:* = null):TimelineMax

+ Inserts a callback at a particular time or label. The callback is technically considered a + zero-duration tween, so if you getChildren() there will be a tween returned for each callback. + You can discern a callback from other tweens by the fact that its target is a function matching + its vars.onComplete and its duration is zero. + +

If your goal is to append the callback to the end of the timeline, it would be easier + (more concise) to use the call() method. Technically the insert() and + append() methods can accommodate adding a callback (like myTimeline.insert(myFunction, 2) + or myTimeline.append(myFunction)) but they don't accommodate parameters.

+ +

JavaScript and AS2 note: - Due to the way JavaScript and AS2 don't + maintain scope (what "this" refers to, or the context) in function calls, + it can be useful to define the scope specifically. Therefore, the JavaScript and AS2 + versions accept a 4th parameter to [optionally] define the scope, but it + is omitted in AS3.

+ +

Parameters
callback:Function — The function to be called +
 
timeOrLabel:* — The time in seconds (or frames for frames-based timelines) or label at which the callback should be inserted. For example, myTimeline.addCallback(myFunction, 3) would call myFunction() 3 seconds into the timeline, and myTimeline.addCallback(myFunction, "myLabel") would call it at the "myLabel" label. +
 
params:Array (default = null) — An Array of parameters to pass the callback +
 
scope:* (default = null) — The scope in which the callback should be called (basically, what "this" refers to in the function). NOTE: this parameter only pertains to the JavaScript and AS2 versions; it is omitted in AS3. +

Returns
TimelineMax — self (makes chaining easier) + +

See also

currentLabel()method 
public function currentLabel(value:String = null):*

+ Gets the closest label that is at or before the current time, or jumps to a provided label + (behavior depends on whether or not you pass a parameter to the method). + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining.

+ +

Parameters
value:String (default = null) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

getActive()method 
public function getActive(nested:Boolean = true, tweens:Boolean = true, timelines:Boolean = false):Array

+ Returns the tweens/timelines that are currently active in the timeline, meaning the timeline's + playhead is positioned on the child tween/timeline and the child isn't paused. + +

Parameters
nested:Boolean (default = true) — Determines whether or not tweens and/or timelines that are inside nested timelines should be returned. If you only want the "top level" tweens/timelines, set this to false. +
 
tweens:Boolean (default = true) — Determines whether or not tweens (TweenLite and TweenMax instances) should be included in the results +
 
timelines:Boolean (default = false) — Determines whether or not child timelines (TimelineLite and TimelineMax instances) should be included in the results +

Returns
Array — an Array of active tweens/timelines +
getLabelAfter()method 
public function getLabelAfter(time:Number):String

+ Returns the next label (if any) that occurs after the time parameter. + It makes no difference if the timeline is reversed ("after" means later in the timeline's local time zone). + A label that is positioned exactly at the same time as the time parameter will be ignored. + +

You could use getLabelAfter() in conjunction with tweenTo() to make + the timeline tween to the next label like this:

+ +

+ myTimeline.tweenTo( myTimeline.getLabelAfter() ); +

+ +

Parameters
time:Number (default = NaN) — Time after which the label is searched for. If you do not pass a time in, the current time will be used. +

Returns
String — Name of the label that is after the time passed to getLabelAfter() + +

See also

getLabelBefore()method 
public function getLabelBefore(time:Number):String

+ Returns the previous label (if any) that occurs before the time parameter. + It makes no difference if the timeline is reversed ("before" means earlier in the timeline's local time zone). + A label that is positioned exactly at the same time as the time parameter will be ignored. + +

You could use getLabelBefore() in conjunction with tweenTo() to make + the timeline tween back to the previous label like this:

+ +

+ myTimeline.tweenTo( myTimeline.getLabelBefore() ); +

+ +

Parameters
time:Number (default = NaN) — Time before which the label is searched for. If you do not pass a time in, the current time will be used. +

Returns
String — Name of the label that is before the time passed to getLabelBefore() + +

See also

getLabelsArray()method 
public function getLabelsArray():Array

+ Returns an Array of label objects, each with a "time" and "name" property, in the order that they occur in the timeline. + For example, to loop through all the labels in order and trace() them to the screen (or console.log() in JavaScript): + +

+var labels = myTimeline.getLabelsArray();
+for (var i = 0; i < labels.length; i++) {
+    trace("label name: " + labels[i].name + ", time: " + labels[i].time); //or in JS, console.log("label name: " + labels[i].name + ", time: " + labels[i].time);
+}
+
+

Note: changing the values in this array will have no effect on the actual labels inside the TimelineMax. To add/remove labels, + use the corresponding methods (addLabel(), removeLabel()).

+ +

Returns
Array — An array of generic objects (one for each label) with a "name" property and a "time" property in the order they occur in the TimelineMax. +
invalidate()method 
override public function invalidate():*

+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values. When you invalidate() + an animation, it will be re-initialized the next time it renders and its vars object will be re-parsed. + The timing of the animation (duration, startTime, delay) will not be affected. + +

Another example would be if you have a TweenMax(mc, 1, {x:100, y:100}) that ran when mc.x and mc.y + were initially at 0, but now mc.x and mc.y are 200 and you want them tween to 100 again, you could simply + invalidate() the tween and restart() it. Without invalidating first, restarting it + would cause the values jump back to 0 immediately (where they started when the tween originally began). + When you invalidate a TimelineLite/TimelineMax, it automatically invalidates all of its children.

+

Returns
* — self (makes chaining easier) +
progress()method 
override public function progress(value:Number):*

+ Gets or sets the timeline's progress which is a value between 0 and 1 indicating the position + of the virtual playhead (excluding repeats) where 0 is at the beginning, 0.5 is halfway complete, + and 1 is complete. If the timeline has a non-zero repeat defined, progress + and totalProgress will be different because progress doesn't include any + repeats or repeatDelays whereas totalProgress does. For example, if a TimelineMax instance + is set to repeat once, at the end of the first cycle totalProgress would only be 0.5 + whereas progress would be 1. If you watched both properties over the course of the entire + animation, you'd see progress go from 0 to 1 twice (once for each cycle) in the + same time it takes the totalProgress to go from 0 to 1 once. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myTimeline.progress(0.5).play();

+ +
+var progress = myTimeline.progress(); //gets current progress
+myTimeline.progress( 0.25 ); //sets progress to one quarter finished
+
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

removeCallback()method 
public function removeCallback(callback:Function, timeOrLabel:* = null):TimelineMax

+ Removes a callback from a particular time or label. If the timeOrLabel parameter + is null, all callbacks of that function are removed from the timeline. + +

Parameters
callback:Function — callback function to be removed +
 
timeOrLabel:* (default = null) — the time in seconds (or frames for frames-based timelines) or label from which the callback should be removed. For example, myTimeline.removeCallback(myFunction, 3) would remove the callback from 3-seconds into the timeline, and myTimeline.removeCallback(myFunction, "myLabel") would remove it from the "myLabel" label, and myTimeline.removeCallback(myFunction, null) would remove ALL callbacks of that function regardless of where they are on the timeline. +

Returns
TimelineMax — self (makes chaining easier) + +

See also

repeat()method 
public function repeat(value:Number = 0):*

+ Gets or sets the number of times that the timeline should repeat after its first iteration. For + example, if repeat is 1, the timeline will play a total of twice (the initial play + plus 1 repeat). To repeat indefinitely, use -1. repeat should always be an integer. + +

To cause the repeats to alternate between forward and backward, set yoyo to + true. To add a time gap between repeats, use repeatDelay. You can + set the initial repeat value via the vars parameter, like:

+ +

+ var tl = new TimelineMax({repeat:2}); +

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myTimeline.repeat(2).yoyo(true).play();

+ +
+var repeat = myTimeline.repeat(); //gets current repeat value
+myTimeline.repeat(2); //sets repeat to 2
+
+ +

Parameters
value:Number (default = 0) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

repeatDelay()method 
public function repeatDelay(value:Number = 0):*

+ Gets or sets the amount of time in seconds (or frames for frames-based timelines) between repeats. + For example, if repeat is 2 and repeatDelay is 1, the timeline will + play initially, then wait for 1 second before it repeats, then play again, then wait 1 second + again before doing its final repeat. You can set the initial repeatDelay value + via the vars parameter, like: + +

+ var tl = new TimelineMax({repeat:2, repeatDelay:1}); +

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myTimeline.repeat(2).yoyo(true).repeatDelay(0.5).play();

+ +
+var repeatDelay = myTimeline.repeatDelay(); //gets current repeatDelay value
+myTimeline.repeatDelay(2); //sets repeatDelay to 2
+
+ +

Parameters
value:Number (default = 0) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

time()method 
override public function time(value:Number, suppressEvents:Boolean = false):*

+ Gets or sets the local position of the playhead (essentially the current time), not + including any repeats or repeatDelays. If the timeline has a non-zero repeat, its time + goes back to zero upon repeating even though the totalTime continues forward linearly + (or if yoyo is true, the time alternates between moving forward + and backward). time never exceeds the duration whereas the totalTime reflects + the overall time including any repeats and repeatDelays. + +

For example, if a TimelineMax instance has a duration of 2 and a repeat of 3, + totalTime will go from 0 to 8 during the course of the timeline (plays once then + repeats 3 times, making 4 total cycles) whereas time would go from 0 to 2 a + total of 4 times.

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining.

+ +
+var currentTime = myTimeline.time(); //gets current time
+myTimeline.time(2); //sets time, jumping to new value just like seek().
+         
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. Negative values will be interpreted from the END of the animation. +
 
suppressEvents:Boolean (default = false) — If true, no events or callbacks will be triggered when the playhead moves to the new position defined in the value parameter. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

totalDuration()method 
override public function totalDuration(value:Number):*

+ Gets or sets the total duration of the timeline in seconds (or frames for frames-based timelines) + including any repeats or repeatDelays. duration, by contrast, does + NOT include repeats and repeatDelays. For example, if the timeline has a + duration of 10, a repeat of 1 and a repeatDelay of 2, + the totalDuration would be 22. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining.

+ +
+var total = myTimeline.totalDuration(); //gets total duration
+myTimeline.totalDuration(10); //sets the total duration
+         
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. Negative values will be interpreted from the END of the animation. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

totalProgress()method 
public function totalProgress(value:Number):*

+ Gets or sets the timeline's totalProgress which is a value between 0 and 1 indicating the position + of the virtual playhead (including repeats) where 0 is at the beginning, 0.5 is + halfway complete, and 1 is complete. If the timeline has a non-zero repeat defined, + progress and totalProgress will be different because progress + doesn't include any repeats or repeatDelays whereas totalProgress does. For example, + if a TimelineMax instance is set to repeat once, at the end of the first cycle totalProgress + would only be 0.5 whereas progress would be 1. If you watched both properties over the + course of the entire animation, you'd see progress go from 0 to 1 twice (once for + each cycle) in the same time it takes the totalProgress to go from 0 to 1 once. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myTimeline.totalProgress(0.5).play();

+ +
+var progress = myTimeline.totalProgress(); //gets total progress
+myTimeline.totalProgress( 0.25 ); //sets total progress to one quarter finished
+
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

tweenFromTo()method 
public function tweenFromTo(fromTimeOrLabel:*, toTimeOrLabel:*, vars:Object = null):TweenLite

+ Creates a linear tween that essentially scrubs the playhead from a particular time or label + to another time or label and then stops. If you plan to sequence multiple playhead tweens + one-after-the-other, tweenFromTo() is better to use than tweenTo() + because it allows the duration to be determined immediately, ensuring that subsequent tweens + that are appended to a sequence are positioned appropriately. For example, to make the + TimelineMax play from the label "myLabel1" to the "myLabel2" label, and then from "myLabel2" + back to the beginning (a time of 0), simply do: + +

+var tl:TimelineMax = new TimelineMax(); 
+tl.append( myTimeline.tweenFromTo("myLabel1", "myLabel2") );
+tl.append( myTimeline.tweenFromTo("myLabel2", 0);
+
+ +

If you want advanced control over the tween, like adding an onComplete or changing the ease + or adding a delay, just pass in a vars object with the appropriate properties. For example, + to tween from the start (0) to the 5-second point on the timeline and then call a function + named myFunction and pass in a parameter that references this TimelineMax and + use a StrongOut ease, you'd do:

+ +

+ myTimeline.tweenFromTo(0, 5, {onComplete:myFunction, onCompleteParams:[myTimeline], ease:StrongOut.ease}); +

+ +

Remember, this method simply creates a TweenLite instance that tweens the time() + of your timeline. So you can store a reference to that tween if you want, and you can kill() + it anytime. Also note that tweenFromTo() does NOT affect the timeline's + reversed property. So if your timeline is oriented normally (not reversed) and you + tween to a time/label that precedes the current time, it will appear to go backwards but the + reversed property will not change to true. Also note that + tweenFromTo() pauses the timeline immediately before tweening its time(), + and it does not automatically resume after the tween completes. If you need to resume playback, + you can always use an onComplete to call the resume() method.

+ +

Parameters
fromTimeOrLabel:* — The beginning time in seconds (or frame if the timeline is frames-based) or label from which the timeline should play. For example, myTimeline.tweenTo(0, 5) would play from 0 (the beginning) to the 5-second point whereas myTimeline.tweenFromTo("myLabel1", "myLabel2") would play from "myLabel1" to "myLabel2". +
 
toTimeOrLabel:* — The destination time in seconds (or frame if the timeline is frames-based) or label to which the timeline should play. For example, myTimeline.tweenTo(0, 5) would play from 0 (the beginning) to the 5-second point whereas myTimeline.tweenFromTo("myLabel1", "myLabel2") would play from "myLabel1" to "myLabel2". +
 
vars:Object (default = null) — An optional vars object that will be passed to the TweenLite instance. This allows you to define an onComplete, ease, delay, or any other TweenLite special property. onInit is the only special property that is not available (tweenFromTo() sets it internally) +

Returns
TweenLite — TweenLite instance that handles tweening the timeline between the desired times/labels. + +

See also

tweenTo()method 
public function tweenTo(timeOrLabel:*, vars:Object = null):TweenLite

+ Creates a linear tween that essentially scrubs the playhead to a particular time or label and + then stops. For example, to make the TimelineMax play to the "myLabel2" label, simply do: + +

+ myTimeline.tweenTo("myLabel2"); +

+ +

If you want advanced control over the tween, like adding an onComplete or changing the ease or + adding a delay, just pass in a vars object with the appropriate properties. For example, + to tween to the 5-second point on the timeline and then call a function named myFunction + and pass in a parameter that's references this TimelineMax and use a StrongOut ease, you'd do:

+ +

+ myTimeline.tweenTo(5, {onComplete:myFunction, onCompleteParams:[myTimeline], ease:StrongOut.ease}); +

+ +

Remember, this method simply creates a TweenLite instance that pauses the timeline and then tweens + the time() of the timeline. So you can store a reference to that tween if you want, and + you can kill() it anytime. Also note that tweenTo() does NOT affect the timeline's + reversed state. So if your timeline is oriented normally (not reversed) and you tween to + a time/label that precedes the current time, it will appear to go backwards but the reversed + state will not change to true. Also note that tweenTo() + pauses the timeline immediately before tweening its time(), and it does not automatically + resume after the tween completes. If you need to resume playback, you could always use an onComplete + to call the timeline's resume() method.

+ +

If you plan to sequence multiple playhead tweens one-after-the-other, it is typically better to use + tweenFromTo() so that you can define the starting point and ending point, allowing the + duration to be accurately determined immediately.

+ +

Parameters
timeOrLabel:* — The destination time in seconds (or frame if the timeline is frames-based) or label to which the timeline should play. For example, myTimeline.tweenTo(5) would play from wherever the timeline is currently to the 5-second point whereas myTimeline.tweenTo("myLabel") would play to wherever "myLabel" is on the timeline. +
 
vars:Object (default = null) — An optional vars object that will be passed to the TweenLite instance. This allows you to define an onComplete, ease, delay, or any other TweenLite special property. +

Returns
TweenLite — A TweenLite instance that handles tweening the timeline to the desired time/label. + +

See also

yoyo()method 
public function yoyo(value:Boolean = false):*

+ Gets or sets the timeline's yoyo state, where true causes + the timeline to go back and forth, alternating backward and forward on each + repeat. yoyo works in conjunction with repeat, + where repeat controls how many times the timeline repeats, and yoyo + controls whether or not each repeat alternates direction. So in order to make a timeline yoyo, + you must set its repeat to a non-zero value. + Yoyo-ing, has no affect on the timeline's "reversed" property. For example, + if repeat is 2 and yoyo is false, it will look like: + start - 1 - 2 - 3 - 1 - 2 - 3 - 1 - 2 - 3 - end. But if yoyo is true, + it will look like: start - 1 - 2 - 3 - 3 - 2 - 1 - 1 - 2 - 3 - end. + +

You can set the yoyo property initially by passing yoyo:true + in the vars parameter, like: new TimelineMax({repeat:1, yoyo:true});

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myTimeline.yoyo(true).repeat(3).timeScale(2).play(0.5);

+ +
+var yoyo = myTimeline.yoyo(); //gets current yoyo state
+myTimeline.yoyo( true ); //sets yoyo to true
+
+

Parameters
value:Boolean (default = false) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

Examples
Sample code:
+//create the timeline that repeats 3 times with 1 second between each repeat and then calls myFunction() when it completes
+var tl = new TimelineMax({repeat:3, repeatDelay:1, onComplete:myFunction});
+
+//add a tween
+tl.append( new TweenLite(mc, 1, {x:200, y:100}) );
+        
+//add another tween at the end of the timeline (makes sequencing easy)
+tl.append( new TweenLite(mc, 0.5, {alpha:0}) );
+ 
+//append a tween using the convenience method (shorter syntax) and offset it by 0.5 seconds
+tl.to(mc, 1, {rotation:30}, 0.5);
+         
+//reverse anytime
+tl.reverse();
+
+//Add a "spin" label 3-seconds into the timeline
+tl.addLabel("spin", 3);
+
+//insert a rotation tween at the "spin" label (you could also define the insertion point as the time instead of a label)
+tl.insert( new TweenLite(mc, 2, {rotation:"360"}), "spin");
+    
+//go to the "spin" label and play the timeline from there
+tl.play("spin");
+
+//nest another TimelineMax inside your timeline...
+var nested = new TimelineMax();
+nested.to(mc2, 1, {x:200}));
+tl.append(nested);
+
+ +

Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +




\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/TweenLite.html b/duo/js/greensock-v12-js/docs/com/greensock/TweenLite.html new file mode 100755 index 0000000..2ebeeab --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/TweenLite.html @@ -0,0 +1,747 @@ +com.greensock.TweenLite +
Packagecom.greensock
Classpublic class TweenLite
InheritanceTweenLite Inheritance Animation Inheritance Object
Subclasses TweenMax

+ TweenLite is an extremely fast, lightweight, and flexible animation tool that serves as the foundation of + the GreenSock Animation Platform (GSAP), available in AS2, AS3, and JavaScript. A TweenLite instance handles + tweening one or more properties of any object (or array of objects) over time. TweenLite + can be used on its own to accomplish most animation chores with minimal file size or it can be use in + conjuction with advanced sequencing tools like TimelineLite or TimelineMax to make complex tasks much + simpler. With scores of other animation frameworks to choose from, why consider the GreenSock Animation Platform?: + +
    +
  • + SPEED - The platform has been highly optimized for maximum performance. See some + speed comparisons yourself at http://www.greensock.com/js/speed.html +
  • + +
  • + Freakishly robust feature set - In addition to tweening any numeric property of any object, + TweenLite has plugins that give it the ability to tween hex colors, beziers, css, plus + LOTS more. It can round values, use relative values, smoothly reverse() on the + fly, automatically detect and accommodate getter/setter functions, employ virtually any easing + equation, pause()/resume() anytime, and intelligently manage conflicting tweens of + the same object with various overwrite modes. TweenMax extends TweenLite and adds even + more capabilities like repeat, yoyo, repeatDelay, on-the-fly destination value + updates and more.
  • + +
  • + Sequencing, grouping, and management features - TimelineLite and TimelineMax + make it surprisingly simple to create complex sequences or groups of tweens that you can + control as a whole. play(), pause(), restart(), or reverse(). You can even tween a timeline's + time or progress to fastforward or rewind the entire timeline. Add + labels, change the timeline's timeScale, nest timelines within timelines, and much more. + This can revolutionize your animation workflow, making it more modular and concise.
  • + +
  • + AS3, AS2, and JavaScript - Most other engines are only developed for one language, + but the GreenSock Animation Platform allows you to use a consistent API across all your Flash and + HTML5 projects.
  • + +
  • + Ease of use - Designers and Developers alike rave about how intuitive the platform is.
  • + +
  • + Support and reliability - With frequent updates, dedicated forums, + committed authorship, a solid track record, a proven funding mechansim, and a thriving community of users, + the platform is a safe long-term bet (unlike many open source projects).
  • + +
  • + Expandability - With its plugin architecture, you can activate as many (or as few) + extra features as your project requires. Write your own plugin to handle particular special + properties in custom ways. Minimize bloat and maximize performance.
  • + +
+ +

+ USAGE +

+

+ To get up and running quickly, check out the Jump Start tour + which covers the basics in a fun, interactive way. +

+ +

The most common type of tween is a to() tween which allows you + to define the destination values:

+ +

+ + TweenLite.to(document.getElementById("photo"), 2, {width:200, height:150}); + +

+ +

The above code will tween the width and height properties of the <img> DOM element with + an id of "photo" from whatever the current values are to 200 and 150 respectively over the course + of 2 seconds. Notice the width and height values are defined inside a generic object (between curly braces). + Put as many properties there as you want. Also note that <img> elements are one of the few DOM + elements that have width and height properties whereas most others + (like <div> elements) require css properties to be applied in order to control their width/height + (among other properties). To animate those css properties, you'll need to use the CSSPlugin. The CSSPlugin + contains special code for deciphering css-related properties and handling them in unique ways, + like recognizing colors, transforms, etc. and managing the necessary suffixes ("px", "%", etc.). + Once you load the CSSPlugin JavaScript file, you can animate css-related properties by wrapping + them in a generic object that you name "css" like this:

+ +

+ + TweenLite.to(document.getElementById("div1"), 2, {css:{backgroundColor:"#ff0000", width:"50%", top:"100px"}, ease:Power2.easeInOut}); + +

+ +

Just tuck all the css-related properties inside the "css" object. The other special properties + like ease, delay, onComplete, etc. stay outside the css object (we'll discuss special + properties later).

+ +

By default, tweens begin immediately, although you can delay them using the delay + special property or pause them initially using the paused special property (see below).

+ +

The target can also be an array of objects. For example, the following tween will + tween the opacity css property to 0.5 and the rotation transform property to 45 for + obj1, obj2, and obj3:

+ +

+ + TweenLite.to([obj1, obj2, obj3], 1, {css:{opacity:0.5, rotation:45}}); + +

+ +

You can also use a from() tween if you want to define the + starting values instead of the ending values so that the target tweens from + the defined values to wherever they currently are. Or a fromTo() + lets you define both starting and ending values.

+ +

Although the to(), from(), and fromTo() static methods + are popular because they're quick and can avoid some garbage collection hassles, you can also + use the more object-oriented syntax like this:

+ +

+ + var tween = new TweenLite(myObject, 2, {width:200, height:150}); + +

+ +

or even:

+ +

+ + var tween = TweenLite.to(myObject, 2, {width:200, height:150}); + +

+ + +

+ SPECIAL PROPERTIES (no plugins required): +

+

Typically the vars parameter is used to define ending values for tweening + properties of the target (or beginning values for from() tweens) + like {x:100, y:200, alpha:0}, but the following optional special properties + serve other purposes:

+ +
    +
  • + delay : Number - + Amount of delay in seconds (or frames for frames-based tweens) before the tween should begin.
  • + +
  • + ease : Ease (or Function) - + You can choose from various eases to control the rate of change during + the animation, giving it a specific "feel". For example, ElasticOut.ease + or StrongInOut.ease. For best performance, use one of the GreenSock eases + (which are in the com.greensock.easing package). TweenLite also works with + any standard easing equation that uses the typical 4 parameters (time, start, + change, duration) like Adobe's fl.motion.easing eases. + The default is Power1.easeOut. For linear animation, use the GreenSock + Linear.ease ease
  • + +
  • + onComplete : Function - + A function that should be called when the tween has completed
  • + +
  • + onCompleteParams : Array - + An Array of parameters to pass the onComplete function. For example, + TweenLite.to(mc, 1, {x:100, onComplete:myFunction, onCompleteParams:[mc, "param2"]}); + To self-reference the tween instance itself in one of the parameters, use "{self}", + like: onCompleteParams:["{self}", "param2"] +
  • + +
  • + onCompleteScope : Object - + Defines the scope of the onComplete function (what "this" refers to inside that function).
  • + +
  • + useFrames : Boolean - + If useFrames is true, the tweens's timing will be + based on frames instead of seconds because it is intially added to the root + frames-based timeline. This causes both its duration + and delay to be based on frames. An animations's timing mode is + always determined by its parent timeline.
  • + +
  • + immediateRender : Boolean - + Normally when you create a tween, it begins rendering on the very next frame (update cycle) + unless you specify a delay. However, if you prefer to force the tween to + render immediately when it is created, set immediateRender to true. + Or to prevent a from() from rendering immediately, set immediateRender + to false. By default, from() tweens set immediateRender to true.
  • + +
  • + onStart : Function - + A function that should be called when the tween begins (when its time + changes from 0 to some other value which can happen more than once if the + tween is restarted multiple times).
  • + +
  • + onStartParams : Array - + An Array of parameters to pass the onStart function. For example, + TweenLite.to(mc, 1, {x:100, delay:1, onStart:myFunction, onStartParams:[mc, "param2"]}); + To self-reference the tween instance itself in one of the parameters, use "{self}", + like: onStartParams:["{self}", "param2"] +
  • + +
  • + onStartScope : Object - + Defines the scope of the onStart function (what "this" refers to inside that function).
  • + +
  • + onUpdate : Function - + A function that should be called every time the tween updates + (on every frame while the tween is active)
  • + +
  • + onUpdateParams : Array - + An Array of parameters to pass the onUpdate function. For example, + TweenLite.to(mc, 1, {x:100, onUpdate:myFunction, onUpdateParams:[mc, "param2"]}); + To self-reference the tween instance itself in one of the parameters, use "{self}", + like: onUpdateParams:["{self}", "param2"] +
  • + +
  • + onUpdateScope : Object - + Defines the scope of the onUpdate function (what "this" refers to inside that function).
  • + +
  • + onReverseComplete : Function - + A function that should be called when the tween has reached its beginning again from the + reverse direction. For example, if reverse() is called the tween will move + back towards its beginning and when its time reaches 0, onReverseComplete + will be called. This can also happen if the tween is placed in a TimelineLite or TimelineMax instance + that gets reversed and plays the tween backwards to (or past) the beginning.
  • + +
  • + onReverseCompleteParams : Array - + An Array of parameters to pass the onReverseComplete function. For example, + TweenLite.to(mc, 1, {x:100, onReverseComplete:myFunction, onReverseCompleteParams:[mc, "param2"]}); + To self-reference the tween instance itself in one of the parameters, use "{self}", + like: onReverseCompleteParams:["{self}", "param2"] +
  • + +
  • + onReverseCompleteScope : Object - + Defines the scope of the onReverseComplete function (what "this" refers to inside that function).
  • + +
  • + paused : Boolean - + If true, the tween will pause itself immediately upon creation.
  • + +
  • + overwrite : String (or integer) - + Controls how (and if) other tweens of the same target are overwritten. + There are several modes to choose from, but "auto" is the default (although + you can change the default mode using the TweenLite.defaultOverwrite property): +
      +
    • + "none" (0) (or false) - no overwriting will occur.
    • + +
    • + "all" (1) (or true) - immediately overwrites all existing + tweens of the same target even if they haven't started yet or don't have + conflicting properties.
    • + +
    • + "auto" (2) - when the tween renders for the first time, it will analyze + tweens of the same target that are currently active/running and only overwrite + individual tweening properties that overlap/conflict. Tweens that haven't begun + yet are ignored. For example, if another active tween is found that is tweening + 3 properties, only 1 of which it shares in common with the new tween, the other + 2 properties will be left alone. Only the conflicting property gets overwritten/killed. + This is the default mode and typically the most intuitive for developers.
    • + +
    • + "concurrent" (3) - when the tween renders for the first time, it kills + only the active (in-progress) tweens of the same target regardless of whether + or not they contain conflicting properties. Like a mix of "all" + and "auto". Good for situations where you only want one tween + controling the target at a time.
    • + +
    • + "allOnStart" (4) - Identical to "all" but waits to run + the overwrite logic until the tween begins (after any delay). Kills + tweens of the same target even if they don't contain conflicting properties + or haven't started yet.
    • + +
    • + "preexisting" (5) - when the tween renders for the first time, it kills + only the tweens of the same target that existed BEFORE this tween was created + regardless of their scheduled start times. So, for example, if you create a tween + with a delay of 10 and then a tween with a delay of 1 and then a tween with a + delay of 2 (all of the same target), the 2nd tween would overwrite the first + but not the second even though scheduling might seem to dictate otherwise. + "preexisting" only cares about the order in which the instances + were actually created. This can be useful when the order in which your code runs + plays a critical role.
    • + +
    +
  • +
+ + +

+ PLUGINS: +

+ +

Think of plugins like special properties that are dynamically added, delivering extra abilities without + forcing them to be baked into the core engine, keeping it relatively lean and mean. Each plugin is associated + with a property name and it takes responsibility for handling that property. For example, the CSSPlugin + is associated with the "css" property name so if it is activated it will intercept the "css" property + in the following tween and manage it in a special way so that the tweens affect the element's style object + (for manipulating DOM elements):

+ +

+ + TweenLite.to(element, 1, {css:{top:"100px", left:"50px", backgroundColor:"#ff0000", fontSize:"12px"}, delay:0.5}); + +

+ +

If the CSSPlugin wasn't activated (loaded), TweenLite would act as though you were trying to literally tween the + element.css property (and there is no such thing).

+ +

In the JavaScript version of TweenLite, activating a plugin is as simple as loading the associated .js file. + No extra activation code is necessary. In the ActionScript version, activating a plugin requires a single line + of code and you only need to do it once, so it's pretty easy. Simply pass an Array containing the names of all + the plugins you'd like to activate to the TweenPlugin.activate() method, like this:

+ +

+ + TweenPlugin.activate([FrameLabelPlugin, ColorTransformPlugin, TintPlugin]); + +

+ +

To make it even easier, there is a Plugin Explorer + which writes the code for you. All you need to do is select the plugins and copy/paste the code + from the bottom of the tool. It also displays interactive examples of each plugin and the assocaited + code so that it’s easy to see the correct syntax.

+ + +

+ EXAMPLES: +

+ +

Please see http://www.greensock.com for examples, tutorials, and interactive demos.

+ + NOTES / TIPS: +
    +
  • Passing values as Strings and a preceding "+=" or "-=" will make the tween relative to the + current value. For example, if you do TweenLite.to(mc, 2, {x:"-=20"}); it'll + tween mc.x to the left 20 pixels. {x:"+=20"} would move it to the right.
  • + +
  • You can change the TweenLite.defaultEase if you prefer something other + than Power1.easeOut.
  • + +
  • Kill all tweens of a particular object anytime with TweenLite.killTweensOf(myObject); +
  • + +
  • You can kill all delayedCalls to a particular function using TweenLite.killDelayedCallsTo(myFunction); + or TweenLite.killTweensOf(myFunction); +
  • + +
  • Use the TweenLite.from() method to animate things into place. For example, + if you have things set up on the stage in the spot where they should end up, and you + just want to animate them into place, you can pass in the beginning x and/or y and/or + alpha (or whatever properties you want).
  • + +
  • If you find this class useful, please consider joining Club GreenSock + which not only helps to sustain ongoing development, but also gets you bonus plugins, classes + and other benefits that are ONLY available to members. Learn more at + http://www.greensock.com/club/ +
  • +
+ +

+ Copyright 2006-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
 Inheriteddata : *
A place to store any data you want (initially populated with vars.data if it exists).
Animation
  defaultEase : Ease
[static] Provides An easy way to change the default easing equation.
TweenLite
  defaultOverwrite : String = auto
[static] Provides An easy way to change the default overwrite mode.
TweenLite
  target : Object
[READ-ONLY] Target object (or array of objects) whose properties the tween affects.
TweenLite
  ticker : Object
[static] + The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers).
TweenLite
 Inheritedtimeline : SimpleTimeline
[Read-only] Parent timeline.
Animation
 Inheritedvars : Object
The vars object passed into the constructor which stores configuration variables like onComplete, onUpdate, etc.
Animation
Public Methods
 MethodDefined By
  
TweenLite(target:Object, duration:Number, vars:Object)
+ Constructor + +
TweenLite
 Inherited
delay(value:Number):*
+ Gets or sets the animation's initial delay which is the length of time in seconds + (or frames for frames-based tweens) before the animation should begin.
Animation
  
delayedCall(delay:Number, callback:Function, params:Array = null, scope:* = null, useFrames:Boolean = false):TweenLite
[static] + Provides a simple way to call a function after a set amount of time (or frames).
TweenLite
 Inherited
duration(value:Number):*
+ Gets or sets the animation's duration, not including any repeats or repeatDelays + (which are only available in TweenMax and TimelineMax).
Animation
 Inherited
eventCallback(type:String, callback:Function = null, params:Array = null, scope:* = null):*
+ Gets or sets an event callback like "onComplete", "onUpdate", "onStart", "onReverseComplete" + or "onRepeat" (onRepeat only applies to TweenMax or TimelineMax instances) + along with any parameters that should be passed to that callback.
Animation
  
from(target:Object, duration:Number, vars:Object):TweenLite
[static] + Static method for creating a TweenLite instance that tweens backwards - + you define the BEGINNING values and the current values are used + as the destination values which is great for doing things like animating objects + onto the screen because you can set them up initially the way you want them to look + at the end of the tween and then animate in from elsewhere.
TweenLite
  
fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object):TweenLite
[static] + Static method for creating a TweenLite instance that allows you to define both the starting + and ending values (as opposed to to() and from() tweens which are + based on the target's current values at one end or the other).
TweenLite
  
getTweensOf(target:*):Array
[static] + Returns an array containing all the tweens of a particular target (or group of targets) that have not + been released for garbage collection yet which typically happens within a few seconds after the tween completes.
TweenLite
  
[override] + Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
TweenLite
 Inherited
kill(vars:Object = null, target:Object = null):*
+ Kills the animation entirely or in part depending on the parameters.
Animation
  
killDelayedCallsTo(func:Function):void
[static] + Immediately kills all of the delayedCalls to a particular function.
TweenLite
  
killTweensOf(target:*, vars:Object = null):void
[static] + Kills all the tweens (or specific tweening properties) of a particular object or delayedCalls + to a particular function.
TweenLite
 Inherited
pause(atTime:* = null, suppressEvents:Boolean = true):*
+ Pauses the instance, optionally jumping to a specific time.
Animation
 Inherited
paused(value:Boolean = false):*
+ Gets or sets the animation's paused state which indicates whether or not the animation + is currently paused.
Animation
 Inherited
play(from:* = null, suppressEvents:Boolean = true):*
+ Begins playing forward, optionally from a specific time (by default playback begins from + wherever the playhead currently is).
Animation
 Inherited
restart(includeDelay:Boolean = false, suppressEvents:Boolean = true):*
+ Restarts and begins playing forward from the beginning.
Animation
 Inherited
resume(from:* = null, suppressEvents:Boolean = true):*
+ Resumes playing without altering direction (forward or reversed), optionally jumping to a specific time first.
Animation
 Inherited
reverse(from:* = null, suppressEvents:Boolean = true):*
+ Reverses playback so that all aspects of the animation are oriented backwards including, for example, + a tween's ease.
Animation
 Inherited
reversed(value:Boolean = false):*
+ Gets or sets the animation's reversed state which indicates whether or not the animation + should be played backwards.
Animation
 Inherited
seek(time:*, suppressEvents:Boolean = true):*
+ Jumps to a specific time without affecting whether or not the instance is paused or reversed.
Animation
  
set(target:Object, vars:Object):TweenLite
[static] + Immediately sets properties of the target accordingly - essentially a zero-duration to() tween with a more + intuitive name.
TweenLite
 Inherited
startTime(value:Number):*
+ Gets or sets the time at which the animation begins on its parent timeline (after any delay + that was defined).
Animation
 Inherited
time(value:Number, suppressEvents:Boolean = false):*
+ Gets or sets the local position of the playhead (essentially the current time), + described in seconds (or frames for frames-based animations) which + will never be less than 0 or greater than the animation's duration.
Animation
 Inherited
timeScale(value:Number):*
+ Factor that's used to scale time in the animation where 1 = normal speed (the default), + 0.5 = half speed, 2 = double speed, etc.
Animation
  
to(target:Object, duration:Number, vars:Object):TweenLite
[static] + Static method for creating a TweenLite instance that animates to the specified destination values + (from the current values).
TweenLite
 Inherited
totalDuration(value:Number):*
+ Gets or sets the animation's total duration including + any repeats or repeatDelays (which are only available in TweenMax and TimelineMax).
Animation
 Inherited
totalTime(time:Number, suppressEvents:Boolean = false):*
+ Gets or sets the position of the playhead according to the totalDuration + which includes any repeats and repeatDelays (only available + in TweenMax and TimelineMax).
Animation
Property Detail
defaultEaseproperty
public static var defaultEase:Ease

Provides An easy way to change the default easing equation. Choose from any of the GreenSock eases in the com.greensock.easing package.

The default value is Power1.easeOut.

defaultOverwriteproperty 
public static var defaultOverwrite:String = auto

Provides An easy way to change the default overwrite mode. Choose from any of the following: "auto", "all", "none", "allOnStart", "concurrent", "preexisting".

The default value is "auto".

targetproperty 
public var target:Object

[READ-ONLY] Target object (or array of objects) whose properties the tween affects.

tickerproperty 
public static var ticker:Object

+ The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers). + Add as many listeners as you want. The basic syntax is the same for all versions (AS2, AS3, and JavaScript): + +

Basic example (AS2, AS3, and JavaScript):

+ //add listener
+ TweenLite.ticker.addEventListener("tick", myFunction);
+ 
+ function myFunction(event) {
+     //executes on every tick after the core engine updates
+ }
+ 
+ //to remove the listener later...
+ TweenLite.ticker.removeEventListener("tick", myFunction);
+         
+ +

Due to differences in the core languages (and to maximize efficiency), the advanced syntax is slightly different + for the AS3 version compared to AS2 and JavaScript. The parameters beyond the first 2 in the addEventListener() + method are outlined below:

+ +

JavaScript and AS2

+

addEventListener(type, callback, scope, useParam, priority)

+

Parameters: +

    +
  1. type : String - type of listener, should always be "tick"
  2. +
  3. callback : Function - the function to call when the event occurs
  4. +
  5. scope : Object - binds the scope to a particular object (scope is basically what "this" refers to in your function). This can be very useful in JavaScript and AS2 because scope isn't generally maintained.
  6. +
  7. useParam : Boolean - if true, an event object will be generated and fed to the callback each time the event occurs. The event is a generic object and has two properties: type (always "tick") and target which refers to the ticker instance. The default for useParam is false because it improves performance.
  8. +
  9. priority : Integer - influences the order in which the listeners are called. Listeners with lower priorities are called after ones with higher priorities.
  10. +
+

+ +

Advanced example (JavaScript and AS2):

+ //add listener that requests an event object parameter, binds scope to the current scope (this), and sets priority to 1 so that it is called before any other listeners that had a priority lower than 1...
+ TweenLite.ticker.addEventListener("tick", myFunction, this, true, 1);
+ 
+ function myFunction(event) {
+     //executes on every tick after the core engine updates
+ }
+ 
+ //to remove the listener later...
+ TweenLite.ticker.removeEventListener("tick", myFunction);
+         
+ +

AS3

+

The AS3 version uses the standard EventDispatcher.addEventListener() syntax which + basically allows you to define a priority and whether or not to use weak references (see Adobe's + docs for details).

+ +

Advanced example [AS3 only]:

+ import flash.events.Event;
+ 
+ //add listener with weak reference (standard syntax - notice the 5th parameter is true)
+ TweenLite.ticker.addEventListener("tick", myFunction, false, 0, true);
+ 
+ function myFunction(event:Event):void {
+     //executes on every tick after the core engine updates
+ }
+ 
+ //to remove the listener later...
+ TweenLite.ticker.removeEventListener("tick", myFunction);
+         
+

Constructor Detail
TweenLite()Constructor
public function TweenLite(target:Object, duration:Number, vars:Object)

+ Constructor + +

Parameters
target:Object — Target object (or array of objects) whose properties this tween affects +
 
duration:Number — Duration in seconds (or frames if useFrames:true is set in the vars parameter) +
 
vars:Object — An object defining the end value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x to 100 and mc.y to 200 and then call myFunction, do this: new TweenLite(mc, 1, {x:100, y:200, onComplete:myFunction}). +
Method Detail
delayedCall()method
public static function delayedCall(delay:Number, callback:Function, params:Array = null, scope:* = null, useFrames:Boolean = false):TweenLite

+ Provides a simple way to call a function after a set amount of time (or frames). You can + optionally pass any number of parameters to the function too. + +

JavaScript and AS2 note: - Due to the way JavaScript and AS2 don't + maintain scope (what "this" refers to, or the context) in function calls, + it can be useful to define the scope specifically. Therefore, the JavaScript and AS2 + versions accept a 4th parameter to [optionally] define the scope, but it + is omitted in AS3:

+ +

TweenLite.delayedCall(delay, callback, params, scope, useFrames) [JavaScript and AS2 only]

+ +
+//calls myFunction after 1 second and passes 2 parameters:
+TweenLite.delayedCall(1, myFunction, ["param1", 2]);
+ 
+function myFunction(param1, param2) {
+    //do stuff
+}
+
+ +

Parameters
delay:Number — Delay in seconds (or frames if useFrames is true) before the function should be called +
 
callback:Function — Function to call +
 
params:Array (default = null) — An Array of parameters to pass the function (optional). +
 
scope:* (default = null) — The scope in which the callback should be called (basically, what "this" refers to in the function). NOTE: this parameter only exists in the JavaScript and AS2 versions. +
 
useFrames:Boolean (default = false) — If the delay should be measured in frames instead of seconds, set useFrames to true (default is false) +

Returns
TweenLite — TweenLite instance +

See also

from()method 
public static function from(target:Object, duration:Number, vars:Object):TweenLite

+ Static method for creating a TweenLite instance that tweens backwards - + you define the BEGINNING values and the current values are used + as the destination values which is great for doing things like animating objects + onto the screen because you can set them up initially the way you want them to look + at the end of the tween and then animate in from elsewhere. + +

NOTE: By default, immediateRender is true in + from() tweens, meaning that they immediately render their starting state + regardless of any delay that is specified. You can override this behavior by passing + immediateRender:false in the vars parameter so that it will + wait to render until the tween actually begins (often the desired behavior when inserting + into TimelineLite or TimelineMax instances). To illustrate the default behavior, the + following code will immediately set the alpha of mc + to 0 and then wait 2 seconds before tweening the alpha back to 1 over + the course of 1.5 seconds:

+ +

+ TweenLite.from(mc, 1.5, {alpha:0, delay:2}); +

+ +

Since the target parameter can also be an array of objects, the following + code will tween the alpha property of mc1, mc2, and mc3 from a value of 0 simultaneously:

+ +
+TweenLite.from([mc1, mc2, mc3], 1.5, {alpha:0});
+
+

Even though 3 objects are animating, there is still only one tween created. + In order to stagger or offset the start times of each object animating, please see + the staggerFrom() method of TimelineLite or TweenMax.

+ +

For simple sequencing, you can use the delay special property + (like TweenLite.from(mc, 1, {alpha:0, delay:0.5})), + but it is highly recommended that you consider using TimelineLite (or TimelineMax) + for all but the simplest sequencing tasks. It has an identical from() method + that allows you to append tweens one-after-the-other and then control the entire sequence + as a whole. You can even have the tweens overlap as much as you want.

+ +

Parameters
target:Object — Target object (or array of objects) whose properties this tween affects. +
 
duration:Number — Duration in seconds (or frames if useFrames:true is set in the vars parameter) +
 
vars:Object — An object defining the starting value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x from 100 and mc.y from 200 and then call myFunction, do this: TweenLite.from(mc, 1, {x:100, y:200, onComplete:myFunction}); +

Returns
TweenLite — TweenLite instance +

See also

fromTo()method 
public static function fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object):TweenLite

+ Static method for creating a TweenLite instance that allows you to define both the starting + and ending values (as opposed to to() and from() tweens which are + based on the target's current values at one end or the other). + +

NOTE: Only put starting values in the fromVars parameter - all + special properties for the tween (like onComplete, onUpdate, delay, etc.) belong in the toVars + parameter.

+ +

Since the target parameter can also be an array of objects, the following + code will tween the x property of mc1, mc2, and mc3 from 0 to 100 simultaneously:

+ +
+TweenLite.fromTo([mc1, mc2, mc3], 1, {x:0}, {x:100});
+
+

Even though 3 objects are animating, there is still only one tween created. + In order to stagger or offset the start times of each object animating, please see + the staggerFromTo() method of TimelineLite or TweenMax.

+ +

For simple sequencing, you can use the delay special property + (like TweenLite.fromTo(mc, 1, {x:0}, {x:100, delay:0.5})), + but it is highly recommended that you consider using TimelineLite (or TimelineMax) + for all but the simplest sequencing tasks. It has an identical fromTo() method + that allows you to append tweens one-after-the-other and then control the entire sequence + as a whole. You can even have the tweens overlap as much as you want.

+ +

Parameters
target:Object — Target object (or array of objects) whose properties this tween affects. +
 
duration:Number — Duration in seconds (or frames if useFrames:true is set in the vars parameter) +
 
fromVars:Object — An object defining the starting value for each property that should be tweened. For example, to tween mc.x from 100 and mc.y from 200, fromVars would look like this: {x:100, y:200}. +
 
toVars:Object — An object defining the end value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x from 0 to 100 and mc.y from 0 to 200 and then call myFunction, do this: TweenLite.fromTo(mc, 1, {x:0, y:0}, {x:100, y:200, onComplete:myFunction}); +

Returns
TweenLite — TweenLite instance +

See also

getTweensOf()method 
public static function getTweensOf(target:*):Array

+ Returns an array containing all the tweens of a particular target (or group of targets) that have not + been released for garbage collection yet which typically happens within a few seconds after the tween completes. + For example, TweenLite.getTweensOf(myObject) returns an array of all tweens + of myObject, even tweens that haven't begun yet. TweenLite.getTweensOf([myObject1, myObject2]); + will return a condensed array of the tweens of myObject1 plus all the tweens + of myObject2 combined into one array with duplicates removed. + +

Since the method only finds tweens that haven't been released for garbage collection, if you create a tween + and then let it finish and then a while later try to find it with getTweensOf(), it may not be found + because it was released by the engine for garbage collection. Remember, one of the best parts of GSAP is that it + saves you from the headache of managing gc. Otherwise, you'd need to manually dispose each tween you create, making + things much more cumbersome.

+ +
+TweenLite.to(myObject1, 1, {x:100});
+TweenLite.to(myObject2, 1, {x:100});
+TweenLite.to([myObject1, myObject2], 1, {alpha:0});
+
+var a1 = TweenLite.getTweensOf(myObject1); //finds 2 tweens
+var a2 = TweenLite.getTweensOf([myObject1, myObject2]); //finds 3 tweens
+
+

Parameters
target:* — The target whose tweens should be returned, or an array of such targets +

Returns
Array — An array of tweens +
invalidate()method 
override public function invalidate():*

+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values. When you invalidate() + an animation, it will be re-initialized the next time it renders and its vars object will be re-parsed. + The timing of the animation (duration, startTime, delay) will not be affected. + +

Another example would be if you have a TweenMax(mc, 1, {x:100, y:100}) that ran when mc.x and mc.y + were initially at 0, but now mc.x and mc.y are 200 and you want them tween to 100 again, you could simply + invalidate() the tween and restart() it. Without invalidating first, restarting it + would cause the values jump back to 0 immediately (where they started when the tween originally began). + When you invalidate a TimelineLite/TimelineMax, it automatically invalidates all of its children.

+

Returns
* — self (makes chaining easier) +
killDelayedCallsTo()method 
public static function killDelayedCallsTo(func:Function):void

+ Immediately kills all of the delayedCalls to a particular function. If, for example, + you want to kill all delayedCalls to myFunction, you'd do this: + +

+ TweenLite.killDelayedCallsTo(myFunction); +

+ +

Since a delayedCall is just a tween that uses the function/callback as both its target + and its onComplete, TweenLite.killTweensOf(myFunction) produces exactly the + same result as TweenLite.killDelayedCallsTo(myFunction).

+ +

This method affects all delayedCalls that were created using TweenLite.delayedCall() + or TweenMax.delayedCall() or the call() or addCallback() methods + of TimelineLite or TimelineMax. Basically, any tween whose target is the function you supply will + be killed.

+ +

Parameters
func:Function — The function for which all delayedCalls should be killed/cancelled. +

killTweensOf()method 
public static function killTweensOf(target:*, vars:Object = null):void

+ Kills all the tweens (or specific tweening properties) of a particular object or delayedCalls + to a particular function. If, for example, you want to kill all tweens of myObject, + you'd do this: + +

+ TweenLite.killTweensOf(myObject); +

+ +

To kill only particular tweening properties of the object, use the second parameter. + For example, if you only want to kill all the tweens of myObject.alpha and + myObject.x, you'd do this:

+ +

+ TweenLite.killTweensOf(myObject, {alpha:true, x:true}); +

+ +

To kill all the delayedCalls that were created like TweenLite.delayedCall(5, myFunction);, + you can simply call TweenLite.killTweensOf(myFunction); because delayedCalls + are simply tweens that have their target and onComplete set to + the same function (as well as a delay of course).

+ +

killTweensOf() affects tweens that haven't begun yet too. If, for example, + a tween of myObject has a delay of 5 seconds and + TweenLite.killTweensOf(mc) is called 2 seconds after the tween was created, + it will still be killed even though it hasn't started yet.

+ +

Parameters
target:* — Object whose tweens should be killed immediately +
 
vars:Object (default = null) — To kill only specific properties, use a generic object containing enumerable properties corresponding to the ones that should be killed like {x:true, y:true}. The values assigned to each property of the object don't matter - the sole purpose of the object is for iteration over the named properties (in this case, x and y). If no object (or null) is defined, all matched tweens will be killed in their entirety. +

set()method 
public static function set(target:Object, vars:Object):TweenLite

+ Immediately sets properties of the target accordingly - essentially a zero-duration to() tween with a more + intuitive name. So the following lines produce identical results: + +

+TweenLite.set(myObject, {x:100, y:50, alpha:0});
+TweenLite.to(myObject, 0, {x:100, y:50, alpha:0});
+
+ +

And of course you can use an array to set the properties of multiple targets at the same time, like:

+ +
+TweenLite.set([obj1, obj2, obj3], {x:100, y:50, alpha:0});
+
+ +

Parameters
target:Object — Target object (or array of objects) whose properties will be affected. +
 
vars:Object — An object defining the value for each property that should be set. For example, to set mc.x to 100 and mc.y to 200, do this: TweenLite.set(mc, {x:100, y:200}); +

Returns
TweenLite — A TweenLite instance (with a duration of 0) which can optionally be inserted into a TimelineLite/Max instance (although it's typically more concise to just use the timeline's set() method). +
to()method 
public static function to(target:Object, duration:Number, vars:Object):TweenLite

+ Static method for creating a TweenLite instance that animates to the specified destination values + (from the current values). The following lines of code all produce identical results: + +

+TweenLite.to(mc, 1, {x:100});
+var myTween = new TweenLite(mc, 1, {x:100});
+var myTween = TweenLite.to(mc, 1, {x:100});
+
+ +

Each line above will tween the "x" property of the mc object + to a value of 100 over the coarse of 1 second. They each use a slightly different syntax, + all of which are valid. If you don't need to store a reference of the tween, just use the + static TweenLite.to( ) call.

+ +

Since the target parameter can also be an array of objects, the following + code will tween the x property of mc1, mc2, and mc3 to a value of 100 simultaneously:

+ +
+TweenLite.to([mc1, mc2, mc3], 1, {x:100});
+
+

Even though 3 objects are animating, there is still only one tween created. + In order to stagger or offset the start times of each object animating, please see + the staggerTo() method of TimelineLite or TweenMax.

+ +

For simple sequencing, you can use the delay special property + (like TweenLite.to(mc, 1, {x:100, delay:0.5})), + but it is highly recommended that you consider using TimelineLite (or TimelineMax) + for all but the simplest sequencing tasks. It has an identical to() method + that allows you to append tweens one-after-the-other and then control the entire sequence + as a whole. You can even have the tweens overlap as much as you want.

+ +

Parameters
target:Object — Target object (or array of objects) whose properties this tween affects. +
 
duration:Number — Duration in seconds (or frames if useFrames:true is set in the vars parameter) +
 
vars:Object — An object defining the end value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x to 100 and mc.y to 200 and then call myFunction, do this: TweenLite.to(mc, 1, {x:100, y:200, onComplete:myFunction}); +

Returns
TweenLite — TweenLite instance +

See also





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/TweenMax.html b/duo/js/greensock-v12-js/docs/com/greensock/TweenMax.html new file mode 100755 index 0000000..1b1f0a1 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/TweenMax.html @@ -0,0 +1,1279 @@ +com.greensock.TweenMax +
Packagecom.greensock
Classpublic class TweenMax
InheritanceTweenMax Inheritance TweenLite Inheritance Animation Inheritance Object

+ TweenMax extends TweenLite, adding many useful (but non-essential) features like timeScale(), repeat(), + repeatDelay(), yoyo(), updateTo(), and more. It also activates many extra plugins by default, + making it extremely full-featured. Any of the plugins can work with TweenLite too, but TweenMax saves + you the step of activating the common ones like CSSPlugin and RoundPropsPlugin. Since TweenMax extends + TweenLite, it can do ANYTHING + TweenLite can do plus more. The syntax is identical. You can mix and match TweenLite and TweenMax in your + project as you please, but if file size is a concern it is best to stick with TweenLite unless you need + a particular TweenMax-only feature. + +

Like TweenLite, a TweenMax instance handles tweening one or more properties of any object + (or array of objects) over time. TweenMax can be used on its own or in conjuction with advanced sequencing + tools like TimelineLite or TimelineMax to make complex tasks much simpler. With scores of other animation + frameworks to choose from, why consider the GreenSock Animation Platform?:

+ +
    +
  • + SPEED - The platform has been highly optimized for maximum performance. + See some speed comparisons yourself at + http://www.greensock.com/js/speed.html +
  • + +
  • + Freakishly robust feature set - In addition to tweening any numeric property + of any object, plugins can be activated to tween hex colors, beziers, css, plus + LOTS more. It can round values, use relative values, smoothly reverse() on the + fly, automatically detect and accommodate getter/setter functions, employ virtually any easing + equation, pause()/resume() anytime, and intelligently manage conflicting tweens of + the same object with various overwrite modes. TweenMax extends TweenLite and adds even + more capabilities like repeat, yoyo, repeatDelay, on-the-fly destination value + updates and more.
  • + +
  • + Sequencing, grouping, and management features - TimelineLite and TimelineMax + make it surprisingly simple to create complex sequences or groups of tweens that you can + control as a whole. play(), pause(), restart(), or reverse(). You can even tween a timeline's + time or progress to fastforward or rewind the entire timeline. Add + labels, change the timeline's timeScale, nest timelines within timelines, and much more. + This can revolutionize your animation workflow, making it more modular and concise.
  • + +
  • + AS3, AS2, and JavaScript - Most other engines are only developed for one language, + but the GreenSock Animation Platform allows you to use a consistent API across all your Flash and + HTML5 projects.
  • + +
  • + Ease of use - Designers and developers alike rave about how intuitive the platform is.
  • + +
  • + Support and reliability - With frequent updates, dedicated forums, + committed authorship, a solid track record, a proven funding mechansim, and a thriving community of users, + the platform is a safe long-term bet (unlike many open source projects).
  • + +
  • + Expandability - With its plugin architecture, you can activate as many (or as few) + extra features as your project requires. Write your own plugin to handle particular special + properties in custom ways. Minimize bloat and maximize performance.
  • + +
+ +

+ USAGE +

+

+ To get up and running quickly, check out the Jump Start tour + which covers the basics in a fun, interactive way. +

+ +

The most common type of tween is a to() tween which allows you + to define the destination values:

+ +

+ + TweenMax.to(document.getElementById("photo"), 2, {width:200, height:150}); + +

+ +

The above code will tween the width and height properties of the <img> DOM element with + an id of "photo" from whatever the current values are to 200 and 150 respectively over the course + of 2 seconds. Notice the width and height values are defined inside a generic object (between curly braces). + Put as many properties there as you want. Also note that <img> elements are one of the few DOM + elements that have width and height properties whereas most others + (like <div> elements) require css properties to be applied in order to control their width/height + (among other properties). To animate those css properties, you'll need to use the CSSPlugin. The CSSPlugin + contains special code for deciphering css-related properties and handling them in unique ways, + like recognizing colors, transforms, etc. and managing the necessary suffixes ("px", "%", etc.). + Once you load the CSSPlugin JavaScript file, you can animate css-related properties by wrapping + them in a generic object that you name "css" like this:

+ +

+ + TweenMax.to(document.getElementById("div1"), 2, {css:{backgroundColor:"#ff0000", width:"50%", top:"100px"}, ease:Power2.easeInOut}); + +

+ +

Just tuck all the css-related properties inside the "css" object. The other special properties + like ease, delay, onComplete, etc. stay outside the css object (we'll discuss special + properties later).

+ +

By default, tweens begin immediately, although you can delay them using the delay + special property or pause them initially using the paused special property (see below).

+ +

The target can also be an array of objects. For example, the following tween will + tween the opacity css property to 0.5 and the rotation transform property to 45 for + obj1, obj2, and obj3:

+ +

+ + TweenMax.to([obj1, obj2, obj3], 1, {css:{opacity:0.5, rotation:45}}); + +

+ +

Notice that we want to tween css-related properties, so we're using the CSSPlugin in this tween. + That's why we define the properties inside an object we call "css" (telling the engine to use the CSSPlugin). + The CSSPlugin contains special code for deciphering css-related properties and handling them in unique ways, + like recognizing colors, transforms, etc. and managing the necessary suffixes ("px", "%", etc.). More on that later...

+ +

You can also use a from() tween if you want to define the + starting values instead of the ending values so that the target tweens from + the defined values to wherever they currently are. Or a fromTo() + lets you define both starting and ending values.

+ +

Although the to(), from(), and fromTo() static methods + are popular because they're quick and can avoid some garbage collection hassles, you can also + use the more object-oriented syntax like this:

+ +

+ + var tween = new TweenMax(myObject, 2, {width:200, height:150}); + +

+ +

or even:

+ +

+ + var tween = TweenMax.to(myObject, 2, {width:200, height:150}); + +

+ + +

+ SPECIAL PROPERTIES: +

+

Typically the vars parameter is used to define ending values for tweening + properties of the target (or beginning values for from() tweens) + like {x:100, y:200, alpha:0}, but the following optional special properties + serve other purposes:

+ +
    +
  • + delay : Number - + Amount of delay in seconds (or frames for frames-based tweens) before the tween should begin.
  • + +
  • + ease : Ease (or Function) - + You can choose from various eases to control the rate of change during + the animation, giving it a specific "feel". For example, ElasticOut.ease + or StrongInOut.ease. For best performance, use one of the GreenSock eases + (which are in the com.greensock.easing package). TweenMax also works with + any standard easing equation that uses the typical 4 parameters (time, start, + change, duration) like Adobe's fl.motion.easing eases. + The default is Power1.easeOut. For linear animation, use the GreenSock + Linear.ease ease
  • + +
  • + onComplete : Function - + A function that should be called when the tween has completed
  • + +
  • + onCompleteParams : Array - + An Array of parameters to pass the onComplete function. For example, + TweenMax.to(mc, 1, {x:100, onComplete:myFunction, onCompleteParams:[mc, "param2"]}); + To self-reference the tween instance itself in one of the parameters, use "{self}", + like: onCompleteParams:["{self}", "param2"] +
  • + +
  • + onCompleteScope : Object - + Defines the scope of the onComplete function (what "this" refers to inside that function).
  • + +
  • + useFrames : Boolean - + If useFrames is true, the tweens's timing will be + based on frames instead of seconds because it is intially added to the root + frames-based timeline. This causes both its duration + and delay to be based on frames. An animations's timing mode is + always determined by its parent timeline.
  • + +
  • + immediateRender : Boolean - + Normally when you create a tween, it begins rendering on the very next frame (update cycle) + unless you specify a delay. However, if you prefer to force the tween to + render immediately when it is created, set immediateRender to true. + Or to prevent a from() from rendering immediately, set immediateRender + to false. By default, from() tweens set immediateRender to true.
  • + +
  • + onStart : Function - + A function that should be called when the tween begins (when its time + changes from 0 to some other value which can happen more than once if the + tween is restarted multiple times).
  • + +
  • + onStartParams : Array - + An Array of parameters to pass the onStart function. For example, + TweenMax.to(mc, 1, {x:100, delay:1, onStart:myFunction, onStartParams:[mc, "param2"]}); + To self-reference the tween instance itself in one of the parameters, use "{self}", + like: onStartParams:["{self}", "param2"] +
  • + +
  • + onStartScope : Object - + Defines the scope of the onStart function (what "this" refers to inside that function).
  • + +
  • + onUpdate : Function - + A function that should be called every time the tween updates + (on every frame while the tween is active)
  • + +
  • + onUpdateParams : Array - + An Array of parameters to pass the onUpdate function. For example, + TweenMax.to(mc, 1, {x:100, onUpdate:myFunction, onUpdateParams:[mc, "param2"]}); + To self-reference the tween instance itself in one of the parameters, use "{self}", + like: onUpdateParams:["{self}", "param2"] +
  • + +
  • + onUpdateScope : Object - + Defines the scope of the onUpdate function (what "this" refers to inside that function).
  • + +
  • + onReverseComplete : Function - + A function that should be called when the tween has reached its beginning again from the + reverse direction. For example, if reverse() is called the tween will move + back towards its beginning and when its time reaches 0, onReverseComplete + will be called. This can also happen if the tween is placed in a TimelineLite or TimelineMax instance + that gets reversed and plays the tween backwards to (or past) the beginning.
  • + +
  • + onReverseCompleteParams : Array - + An Array of parameters to pass the onReverseComplete function. For example, + TweenMax.to(mc, 1, {x:100, onReverseComplete:myFunction, onReverseCompleteParams:[mc, "param2"]}); + To self-reference the tween instance itself in one of the parameters, use "{self}", + like: onReverseCompleteParams:["{self}", "param2"] +
  • + +
  • + onReverseCompleteScope : Object - + Defines the scope of the onReverseComplete function (what "this" refers to inside that function).
  • + +
  • + paused : Boolean - + If true, the tween will pause itself immediately upon creation.
  • + +
  • + overwrite : String (or integer) - + Controls how (and if) other tweens of the same target are overwritten. + There are several modes to choose from, but "auto" is the default (although + you can change the default mode using the TweenLite.defaultOverwrite property): +
      +
    • + "none" (0) (or false) - no overwriting will occur.
    • + +
    • + "all" (1) (or true) - immediately overwrites all existing + tweens of the same target even if they haven't started yet or don't have + conflicting properties.
    • + +
    • + "auto" (2) - when the tween renders for the first time, it will analyze + tweens of the same target that are currently active/running and only overwrite + individual tweening properties that overlap/conflict. Tweens that haven't begun + yet are ignored. For example, if another active tween is found that is tweening + 3 properties, only 1 of which it shares in common with the new tween, the other + 2 properties will be left alone. Only the conflicting property gets overwritten/killed. + This is the default mode and typically the most intuitive for developers.
    • + +
    • + "concurrent" (3) - when the tween renders for the first time, it kills + only the active (in-progress) tweens of the same target regardless of whether + or not they contain conflicting properties. Like a mix of "all" + and "auto". Good for situations where you only want one tween + controling the target at a time.
    • + +
    • + "allOnStart" (4) - Identical to "all" but waits to run + the overwrite logic until the tween begins (after any delay). Kills + tweens of the same target even if they don't contain conflicting properties + or haven't started yet.
    • + +
    • + "preexisting" (5) - when the tween renders for the first time, it kills + only the tweens of the same target that existed BEFORE this tween was created + regardless of their scheduled start times. So, for example, if you create a tween + with a delay of 10 and then a tween with a delay of 1 and then a tween with a + delay of 2 (all of the same target), the 2nd tween would overwrite the first + but not the second even though scheduling might seem to dictate otherwise. + "preexisting" only cares about the order in which the instances + were actually created. This can be useful when the order in which your code runs + plays a critical role.
    • + +
    +
  • + +
  • + repeat : Number - + Number of times that the tween should repeat after its first iteration. For example, + if repeat is 1, the tween will play a total of twice (the initial play + plus 1 repeat). To repeat indefinitely, use -1. repeat should always be an integer.
  • + +
  • + repeatDelay : Number - + Amount of time in seconds (or frames for frames-based tweens) between repeats. For example, + if repeat is 2 and repeatDelay is 1, the tween will play initially, + then wait for 1 second before it repeats, then play again, then wait 1 second again before + doing its final repeat.
  • + +
  • + yoyo : Boolean - + If true, every other repeat cycle will run in the opposite + direction so that the tween appears to go back and forth (forward then backward). + This has no affect on the "reversed" property though. So if repeat + is 2 and yoyo is false, it will look like: + start - 1 - 2 - 3 - 1 - 2 - 3 - 1 - 2 - 3 - end. But if yoyo is true, + it will look like: start - 1 - 2 - 3 - 3 - 2 - 1 - 1 - 2 - 3 - end.
  • + +
  • + onRepeat : Function - + A function that should be called each time the tween repeats
  • + +
  • + onRepeatParams : Array - + An Array of parameters to pass the onRepeat function. For example, + TweenMax.to(mc, 1, {x:100, onRepeat:myFunction, onRepeatParams:[mc, "param2"]}); + To self-reference the tween instance itself in one of the parameters, use "{self}", + like: onRepeatParams:["{self}", "param2"] +
  • + +
  • + onRepeatScope : Object - + Defines the scope of the onRepeat function (what "this" refers to inside that function).
  • + +
  • + startAt : Object - + Allows you to define the starting values for tweening properties. Typically, TweenMax uses + the current value (whatever it happens to be at the time the tween begins) as the starting + value, but startAt allows you to override that behavior. Simply pass an object + in with whatever properties you'd like to set just before the tween begins. For example, + if mc.x is currently 100, and you'd like to tween it from 0 to 500, do + TweenMax.to(mc, 2, {x:500, startAt:{x:0}}); +
  • +
+ + + +

+ PLUGINS: +

+ +

Think of plugins like special properties that are dynamically added, delivering extra abilities without + forcing them to be baked into the core engine, keeping it relatively lean and mean. Each plugin is associated + with a property name and it takes responsibility for handling that property. For example, the CSSPlugin + is associated with the "css" property name so if it is activated it will intercept the "css" property + in the following tween and manage it in a special way so that the tweens affect the element's style object + (for manipulating DOM elements):

+ +

+ + TweenMax.to(element, 1, {css:{top:"100px", left:"50px", backgroundColor:"#ff0000", fontSize:"12px"}, delay:0.5}); + +

+ +

If the CSSPlugin wasn't activated (loaded), TweenMax would act as though you were trying to literally tween the + element.css property (and there is no such thing).

+ +

In the JavaScript version of TweenMax, activating a plugin is as simple as loading the associated .js file. + No extra activation code is necessary. And by default, the JavaScript version of TweenMax includes the CSSPlugin + and RoundPropsPlugin so you don't need to load those separately. In the ActionScript version, activating a plugin + requires a single line of code and you only need to do it once, so it's pretty easy. Simply pass an Array containing + the names of all the plugins you'd like to activate to the TweenPlugin.activate() method, like this:

+ +

+ + TweenPlugin.activate([FrameLabelPlugin, ColorTransformPlugin, TintPlugin]); + +

+ +

The following plugins are automatically activated by TweenMax:

+ +
    +
  • + css : Object - + handles tweening almost any css-related value including backgroundColor, + width, height, fontSize, color, top, left, marginTop, etc. Plus it can do transformations like + rotation, scaleX, scaleY, skewX, skewY, x, y, and even shortRotation and autoAlpha. It recognizes + transformOrigin and backgroundPosition too. Transformations work in IE7 and later (although those + browsers are rather slow at rendering transformations). Don't forget to pass your values in + as an object, like: + TweenMax.to(myElement, 1, {css:{width:"50%", height:"300px", backgroundColor:"#ff0000"}, delay:1}); +
  • + + +
  • + roundProps : String - + A comma-delimited list of property names whose value should be rounded to the nearest integer + anytime they are updated during the tween. For example, if you're tweening the + x, y, and alpha properties of mc and you want to round the x and y values (not alpha) + every time the tween is rendered, do: + TweenMax.to(mc, 2, {x:300, y:200, alpha:0.5, roundProps:"x,y"}); +
  • + +
+ + +

+ EXAMPLES: +

+

Please see http://www.greensock.com for + examples, tutorials, and interactive demos.

+ + NOTES / TIPS: +
    +
  • Passing values as Strings and a preceding "+=" or "-=" will make the tween relative to the + current value. For example, if you do TweenMax.to(mc, 2, {x:"-=20"}); it'll + tween mc.x to the left 20 pixels. {x:"+=20"} would move it to the right.
  • + +
  • You can change the default ease by setting the TweenLite.defaultEase static property. + The default is Power1.easeOut.
  • + +
  • You can kill all tweens of a particular object anytime with TweenMax.killTweensOf(myObject); +
  • + +
  • You can kill all delayedCalls to a particular function with TweenMax.killDelayedCallsTo(myFunction) + or TweenMax.killTweensOf(myFunction); +
  • + +
  • Use the TweenMax.from() method to animate things into place. For example, + if you have things set up on the stage in the spot where they should end up, and you + just want to animate them into place, you can pass in the beginning x and/or y and/or + alpha (or whatever properties you want).
  • + +
  • If you find this class useful, please consider joining Club GreenSock + which not only helps to sustain ongoing development, but also gets you bonus plugins, classes + and other benefits that are ONLY available to members. Learn more at + http://www.greensock.com/club/ +
  • +
+ +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
 Inheriteddata : *
A place to store any data you want (initially populated with vars.data if it exists).
Animation
 InheriteddefaultEase : Ease
[static] Provides An easy way to change the default easing equation.
TweenLite
 InheriteddefaultOverwrite : String = auto
[static] Provides An easy way to change the default overwrite mode.
TweenLite
 Inheritedtarget : Object
[READ-ONLY] Target object (or array of objects) whose properties the tween affects.
TweenLite
  ticker : Object
[static] + The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers).
TweenMax
 Inheritedtimeline : SimpleTimeline
[Read-only] Parent timeline.
Animation
 Inheritedvars : Object
The vars object passed into the constructor which stores configuration variables like onComplete, onUpdate, etc.
Animation
Public Methods
 MethodDefined By
  
TweenMax(target:Object, duration:Number, vars:Object)
+ Constructor + +
TweenMax
 Inherited
delay(value:Number):*
+ Gets or sets the animation's initial delay which is the length of time in seconds + (or frames for frames-based tweens) before the animation should begin.
Animation
  
delayedCall(delay:Number, callback:Function, params:Array = null, scope:* = null, useFrames:Boolean = false):TweenMax
[static] + Provides a simple way to call a function after a set amount of time (or frames).
TweenMax
 Inherited
duration(value:Number):*
+ Gets or sets the animation's duration, not including any repeats or repeatDelays + (which are only available in TweenMax and TimelineMax).
Animation
 Inherited
eventCallback(type:String, callback:Function = null, params:Array = null, scope:* = null):*
+ Gets or sets an event callback like "onComplete", "onUpdate", "onStart", "onReverseComplete" + or "onRepeat" (onRepeat only applies to TweenMax or TimelineMax instances) + along with any parameters that should be passed to that callback.
Animation
  
from(target:Object, duration:Number, vars:Object):TweenMax
[static] + Static method for creating a TweenMax instance that tweens backwards - + you define the BEGINNING values and the current values are used + as the destination values which is great for doing things like animating objects + onto the screen because you can set them up initially the way you want them to look + at the end of the tween and then animate in from elsewhere.
TweenMax
  
fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object):TweenMax
[static] + Static method for creating a TweenMax instance that allows you to define both the starting + and ending values (as opposed to to() and from() tweens which are + based on the target's current values at one end or the other).
TweenMax
  
getAllTweens(includeTimelines:Boolean = false):Array
[static] + Returns an array containing all tweens (and optionally timelines too, excluding the root timelines).
TweenMax
  
getTweensOf(target:*):Array
[static] + Returns an array containing all the tweens of a particular target (or group of targets) that have not + been released for garbage collection yet which typically happens within a few seconds after the tween completes.
TweenMax
  
[override] + Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
TweenMax
  
isTweening(target:Object):Boolean
[static] + Reports whether or not a particular object is actively tweening.
TweenMax
 Inherited
kill(vars:Object = null, target:Object = null):*
+ Kills the animation entirely or in part depending on the parameters.
Animation
  
killAll(complete:Boolean = false, tweens:Boolean = true, delayedCalls:Boolean = true, timelines:Boolean = true):void
[static] + Kills all tweens and/or delayedCalls/callbacks, and/or timelines, optionally forcing them to + completion first.
TweenMax
  
killChildTweensOf(parent:Object, complete:Boolean = false):void
[static] + Kills all tweens of the children of a particular DOM element, optionally forcing them to completion first.
TweenMax
  
killDelayedCallsTo(func:Function):void
[static] + Immediately kills all of the delayedCalls to a particular function.
TweenMax
  
killTweensOf(target:*, vars:Object = null):void
[static] + Kills all the tweens (or specific tweening properties) of a particular object or + the delayedCalls to a particular function.
TweenMax
 Inherited
pause(atTime:* = null, suppressEvents:Boolean = true):*
+ Pauses the instance, optionally jumping to a specific time.
Animation
  
pauseAll(tweens:Boolean = true, delayedCalls:Boolean = true, timelines:Boolean = true):void
[static] + [deprecated] Pauses all tweens and/or delayedCalls/callbacks and/or timelines.
TweenMax
 Inherited
paused(value:Boolean = false):*
+ Gets or sets the animation's paused state which indicates whether or not the animation + is currently paused.
Animation
 Inherited
play(from:* = null, suppressEvents:Boolean = true):*
+ Begins playing forward, optionally from a specific time (by default playback begins from + wherever the playhead currently is).
Animation
  
progress(value:Number):*
+ Gets or sets the tween's progress which is a value between 0 and 1 indicating the position + of the virtual playhead (excluding repeats) where 0 is at the beginning, 0.5 is halfway complete, + and 1 is complete.
TweenMax
  
repeat(value:int = 0):*
+ Gets or sets the number of times that the tween should repeat after its first iteration.
TweenMax
  
repeatDelay(value:Number):*
+ Gets or sets the amount of time in seconds (or frames for frames-based tweens) between repeats.
TweenMax
 Inherited
restart(includeDelay:Boolean = false, suppressEvents:Boolean = true):*
+ Restarts and begins playing forward from the beginning.
Animation
 Inherited
resume(from:* = null, suppressEvents:Boolean = true):*
+ Resumes playing without altering direction (forward or reversed), optionally jumping to a specific time first.
Animation
  
resumeAll(tweens:Boolean = true, delayedCalls:Boolean = true, timelines:Boolean = true):void
[static] + [deprecated] Resumes all paused tweens and/or delayedCalls/callbacks and/or timelines.
TweenMax
 Inherited
reverse(from:* = null, suppressEvents:Boolean = true):*
+ Reverses playback so that all aspects of the animation are oriented backwards including, for example, + a tween's ease.
Animation
 Inherited
reversed(value:Boolean = false):*
+ Gets or sets the animation's reversed state which indicates whether or not the animation + should be played backwards.
Animation
 Inherited
seek(time:*, suppressEvents:Boolean = true):*
+ Jumps to a specific time without affecting whether or not the instance is paused or reversed.
Animation
  
set(target:Object, vars:Object):TweenMax
[static] + Immediately sets properties of the target accordingly - essentially a zero-duration to() tween with a more + intuitive name.
TweenMax
  
staggerFrom(targets:Array, duration:Number, vars:Object, stagger:Number = 0, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:* = null):Array
[static] + Tweens an array of targets from a common set of destination values (using the current + values as the destination), but staggers their start times by a specified amount of time, + creating an evenly-spaced sequence with a surprisingly small amount of code.
TweenMax
  
staggerFromTo(targets:Array, duration:Number, fromVars:Object, toVars:Object, stagger:Number = 0, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:* = null):Array
[static] + Tweens an array of targets from and to a common set of values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code.
TweenMax
  
staggerTo(targets:Array, duration:Number, vars:Object, stagger:Number = 0, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:* = null):Array
[static] + Tweens an array of targets to a common set of destination values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code.
TweenMax
 Inherited
startTime(value:Number):*
+ Gets or sets the time at which the animation begins on its parent timeline (after any delay + that was defined).
Animation
  
time(value:Number, suppressEvents:Boolean = false):*
[override] + Gets or sets the local position of the playhead (essentially the current time), not + including any repeats or repeatDelays.
TweenMax
 Inherited
timeScale(value:Number):*
+ Factor that's used to scale time in the animation where 1 = normal speed (the default), + 0.5 = half speed, 2 = double speed, etc.
Animation
  
to(target:Object, duration:Number, vars:Object):TweenMax
[static] + Static method for creating a TweenMax instance that animates to the specified destination values + (from the current values).
TweenMax
  
totalDuration(value:Number):*
[override] + Gets or sets the total duration of the tween in seconds (or frames for frames-based tweens) + including any repeats or repeatDelays.
TweenMax
  
totalProgress(value:Number):*
+ Gets or sets the tween's totalProgress which is a value between 0 and 1 indicating the position + of the virtual playhead (including repeats) where 0 is at the beginning, 0.5 is halfway complete, + and 1 is complete.
TweenMax
 Inherited
totalTime(time:Number, suppressEvents:Boolean = false):*
+ Gets or sets the position of the playhead according to the totalDuration + which includes any repeats and repeatDelays (only available + in TweenMax and TimelineMax).
Animation
  
updateTo(vars:Object, resetDuration:Boolean = false):*
+ Updates tweening values on the fly so that they appear to seamlessly change course even if + the tween is in-progress.
TweenMax
  
yoyo(value:Boolean = false):*
+ Gets or sets the tween's yoyo state, where true causes + the tween to go back and forth, alternating backward and forward on each + repeat.
TweenMax
Property Detail
tickerproperty
public static var ticker:Object

+ The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers). + Add as many listeners as you want. The basic syntax is the same for all versions (AS2, AS3, and JavaScript): + +

Basic example (AS2, AS3, and JavaScript):

+ //add listener
+ TweenMax.ticker.addEventListener("tick", myFunction);
+ 
+ function myFunction(event) {
+     //executes on every tick after the core engine updates
+ }
+ 
+ //to remove the listener later...
+ TweenMax.ticker.removeEventListener("tick", myFunction);
+         
+ +

Due to differences in the core languages (and to maximize efficiency), the advanced syntax is slightly different + for the AS3 version compared to AS2 and JavaScript. The parameters beyond the first 2 in the addEventListener() + method are outlined below:

+ +

JavaScript and AS2

+

addEventListener(type, callback, scope, useParam, priority)

+

Parameters: +

    +
  1. type : String - type of listener, should always be "tick"
  2. +
  3. callback : Function - the function to call when the event occurs
  4. +
  5. scope : Object - binds the scope to a particular object (scope is basically what "this" refers to in your function). This can be very useful in JavaScript and AS2 because scope isn't generally maintained.
  6. +
  7. useParam : Boolean - if true, an event object will be generated and fed to the callback each time the event occurs. The event is a generic object and has two properties: type (always "tick") and target which refers to the ticker instance. The default for useParam is false because it improves performance.
  8. +
  9. priority : Integer - influences the order in which the listeners are called. Listeners with lower priorities are called after ones with higher priorities.
  10. +
+

+ +

Advanced example (JavaScript and AS2):

+ //add listener that requests an event object parameter, binds scope to the current scope (this), and sets priority to 1 so that it is called before any other listeners that had a priority lower than 1...
+ TweenMax.ticker.addEventListener("tick", myFunction, this, true, 1);
+ 
+ function myFunction(event) {
+     //executes on every tick after the core engine updates
+ }
+ 
+ //to remove the listener later...
+ TweenMax.ticker.removeEventListener("tick", myFunction);
+         
+ +

AS3

+

The AS3 version uses the standard EventDispatcher.addEventListener() syntax which + basically allows you to define a priority and whether or not to use weak references (see Adobe's + docs for details).

+ +

Advanced example [AS3 only]:

+ import flash.events.Event;
+ 
+ //add listener with weak reference (standard syntax - notice the 5th parameter is true)
+ TweenMax.ticker.addEventListener("tick", myFunction, false, 0, true);
+ 
+ function myFunction(event:Event):void {
+     //executes on every tick after the core engine updates
+ }
+ 
+ //to remove the listener later...
+ TweenMax.ticker.removeEventListener("tick", myFunction);
+         
+

Constructor Detail
TweenMax()Constructor
public function TweenMax(target:Object, duration:Number, vars:Object)

+ Constructor + +

Parameters
target:Object — Target object (or array of objects) whose properties this tween affects +
 
duration:Number — Duration in seconds (or frames if useFrames:true is set in the vars parameter) +
 
vars:Object — An object defining the end value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x to 100 and mc.y to 200 and then call myFunction, do this: new TweenMax(mc, 1, {x:100, y:200, onComplete:myFunction}). +
Method Detail
delayedCall()method
public static function delayedCall(delay:Number, callback:Function, params:Array = null, scope:* = null, useFrames:Boolean = false):TweenMax

+ Provides a simple way to call a function after a set amount of time (or frames). You can + optionally pass any number of parameters to the function too. + +

JavaScript and AS2 note: - Due to the way JavaScript and AS2 don't + maintain scope (what "this" refers to, or the context) in function calls, + it can be useful to define the scope specifically. Therefore, the JavaScript and AS2 + versions accept a 4th parameter to [optionally] define the scope, but it + is omitted in AS3:

+ +

TweenMax.delayedCall(delay, callback, params, scope, useFrames) [JavaScript and AS2 only]

+ +
+//calls myFunction after 1 second and passes 2 parameters:
+TweenMax.delayedCall(1, myFunction, ["param1", 2]);
+         
+function myFunction(param1, param2) {
+    //do stuff
+}
+
+ +

Parameters
delay:Number — Delay in seconds (or frames if useFrames is true) before the function should be called +
 
callback:Function — Function to call +
 
params:Array (default = null) — An Array of parameters to pass the function (optional). +
 
scope:* (default = null) — The scope in which the callback should be called (basically, what "this" refers to in the function). NOTE: this parameter only pertains to the JavaScript and AS2 versions; it is omitted in AS3. +
 
useFrames:Boolean (default = false) — If the delay should be measured in frames instead of seconds, set useFrames to true (default is false) +

Returns
TweenMax — TweenMax instance +
from()method 
public static function from(target:Object, duration:Number, vars:Object):TweenMax

+ Static method for creating a TweenMax instance that tweens backwards - + you define the BEGINNING values and the current values are used + as the destination values which is great for doing things like animating objects + onto the screen because you can set them up initially the way you want them to look + at the end of the tween and then animate in from elsewhere. + +

NOTE: By default, immediateRender is true in + from() tweens, meaning that they immediately render their starting state + regardless of any delay that is specified. You can override this behavior by passing + immediateRender:false in the vars parameter so that it will + wait to render until the tween actually begins (often the desired behavior when inserting + into TimelineLite or TimelineMax instances). To illustrate the default behavior, the + following code will immediately set the alpha of mc + to 0 and then wait 2 seconds before tweening the alpha back to 1 over + the course of 1.5 seconds:

+ +

+ TweenMax.from(mc, 1.5, {alpha:0, delay:2}); +

+ +

Since the target parameter can also be an array of objects, the following + code will tween the alpha property of mc1, mc2, and mc3 from a value of 0 simultaneously:

+ +
+TweenMax.from([mc1, mc2, mc3], 1.5, {alpha:0});
+
+

Even though 3 objects are animating, there is still only one tween that is created. + In order to stagger or offset the start times of each object animating, please see + the staggerFrom() method (TimelineLite has one too).

+ +

For simple sequencing, you can use the delay special property + (like TweenMax.from(mc, 1, {alpha:0, delay:0.5})), + but it is highly recommended that you consider using TimelineLite (or TimelineMax) + for all but the simplest sequencing tasks. It has an identical from() method + that allows you to append tweens one-after-the-other and then control the entire sequence + as a whole. You can even have the tweens overlap as much as you want.

+ +

Parameters
target:Object — Target object (or array of objects) whose properties this tween affects. +
 
duration:Number — Duration in seconds (or frames if useFrames:true is set in the vars parameter) +
 
vars:Object — An object defining the starting value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x from 100 and mc.y from 200 and then call myFunction, do this: TweenMax.from(mc, 1, {x:100, y:200, onComplete:myFunction}); +

Returns
TweenMax — TweenMax instance +

See also

fromTo()method 
public static function fromTo(target:Object, duration:Number, fromVars:Object, toVars:Object):TweenMax

+ Static method for creating a TweenMax instance that allows you to define both the starting + and ending values (as opposed to to() and from() tweens which are + based on the target's current values at one end or the other). + +

NOTE: Only put starting values in the fromVars parameter - all + special properties for the tween (like onComplete, onUpdate, delay, etc.) belong in the toVars + parameter.

+ +

Since the target parameter can also be an array of objects, the following + code will tween the x property of mc1, mc2, and mc3 from 0 to 100 simultaneously:

+ +
+TweenMax.fromTo([mc1, mc2, mc3], 1, {x:0}, {x:100});
+
+

Even though 3 objects are animating, there is still only one tween created. + In order to stagger or offset the start times of each object animating, please see + the staggerFromTo() method (TimelineLite has one too).

+ +

For simple sequencing, you can use the delay special property + (like TweenMax.fromTo(mc, 1, {x:0}, {x:100, delay:0.5})), + but it is highly recommended that you consider using TimelineLite (or TimelineMax) + for all but the simplest sequencing tasks. It has an identical fromTo() method + that allows you to append tweens one-after-the-other and then control the entire sequence + as a whole. You can even have the tweens overlap as much as you want.

+ +

Parameters
target:Object — Target object (or array of objects) whose properties this tween affects. +
 
duration:Number — Duration in seconds (or frames if useFrames:true is set in the vars parameter) +
 
fromVars:Object — An object defining the starting value for each property that should be tweened. For example, to tween mc.x from 100 and mc.y from 200, fromVars would look like this: {x:100, y:200}. +
 
toVars:Object — An object defining the end value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x from 0 to 100 and mc.y from 0 to 200 and then call myFunction, do this: TweenMax.fromTo(mc, 1, {x:0, y:0}, {x:100, y:200, onComplete:myFunction}); +

Returns
TweenMax — TweenMax instance +

See also

getAllTweens()method 
public static function getAllTweens(includeTimelines:Boolean = false):Array

+ Returns an array containing all tweens (and optionally timelines too, excluding the root timelines). + If your goal is to affect all of the tweens/timelines/delayedCalls (like to pause() them + or reverse() or alter their timeScale), you might want to consider using the + static TimelineLite.exportRoot() method instead because it provides a single instance + that you can use to control everything. + +

Parameters
includeTimelines:Boolean (default = false) — If true, TimelineLite and TimelineMax instances will also be included. +

Returns
Array — Array of tweens/timelines +

See also

getTweensOf()method 
public static function getTweensOf(target:*):Array

+ Returns an array containing all the tweens of a particular target (or group of targets) that have not + been released for garbage collection yet which typically happens within a few seconds after the tween completes. + For example, TweenMax.getTweensOf(myObject) returns an array of all tweens + of myObject, even tweens that haven't begun yet. TweenMax.getTweensOf([myObject1, myObject2]); + will return a condensed array of the tweens of myObject1 plus all the tweens + of myObject2 combined into one array with duplicates removed. + +

Since the method only finds tweens that haven't been released for garbage collection, if you create a tween + and then let it finish and then a while later try to find it with getTweensOf(), it may not be found + because it was released by the engine for garbage collection. Remember, one of the best parts of GSAP is that it + saves you from the headache of managing gc. Otherwise, you'd need to manually dispose each tween you create, making + things much more cumbersome.

+ +
+         TweenMax.to(myObject1, 1, {x:100});
+         TweenMax.to(myObject2, 1, {x:100});
+         TweenMax.to([myObject1, myObject2], 1, {alpha:0});
+         
+         var a1 = TweenMax.getTweensOf(myObject1); //finds 2 tweens
+         var a2 = TweenMax.getTweensOf([myObject1, myObject2]); //finds 3 tweens
+         
+

Parameters
target:* — The target whose tweens should be returned, or an array of such targets +

Returns
Array — An array of tweens +
invalidate()method 
override public function invalidate():*

+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values. When you invalidate() + an animation, it will be re-initialized the next time it renders and its vars object will be re-parsed. + The timing of the animation (duration, startTime, delay) will not be affected. + +

Another example would be if you have a TweenMax(mc, 1, {x:100, y:100}) that ran when mc.x and mc.y + were initially at 0, but now mc.x and mc.y are 200 and you want them tween to 100 again, you could simply + invalidate() the tween and restart() it. Without invalidating first, restarting it + would cause the values jump back to 0 immediately (where they started when the tween originally began). + When you invalidate a TimelineLite/TimelineMax, it automatically invalidates all of its children.

+

Returns
* — self (makes chaining easier) +
isTweening()method 
public static function isTweening(target:Object):Boolean

+ Reports whether or not a particular object is actively tweening. If a tween + is paused, is completed, or hasn't started yet, it isn't considered active. + +

Parameters
target:Object — Target object whose tweens you're checking +

Returns
Boolean — Boolean value indicating whether or not any active tweens were found +
killAll()method 
public static function killAll(complete:Boolean = false, tweens:Boolean = true, delayedCalls:Boolean = true, timelines:Boolean = true):void

+ Kills all tweens and/or delayedCalls/callbacks, and/or timelines, optionally forcing them to + completion first. The various parameters provide a way to specify exactly which types you want + to kill + +

+//kill everything
+TweenMax.killAll();
+
+//kill only tweens, but not delayedCalls or timelines
+TweenMax.killAll(false, true, false, false);
+
+//kill only delayedCalls
+TweenMax.killAll(false, false, true, false);
+
+ +

Parameters
complete:Boolean (default = false) — Determines whether or not the tweens/delayedCalls/timelines should be forced to completion before being killed. +
 
tweens:Boolean (default = true) — If true, all tweens will be killed (TweenLite and TweenMax instances) +
 
delayedCalls:Boolean (default = true) — If true, all delayedCalls will be killed. TimelineMax callbacks are treated the same as delayedCalls. +
 
timelines:Boolean (default = true) — If true, all TimelineLite and TimelineMax instances will be killed. +

killChildTweensOf()method 
public static function killChildTweensOf(parent:Object, complete:Boolean = false):void

+ Kills all tweens of the children of a particular DOM element, optionally forcing them to completion first. + For example, if you have the following HTML: +

+<div id="d1">
+    <div id="d2">
+        <img src="photo.jpg" id="image" />
+    </div>
+</div>
+<div id="d3"></div>
+
+ And then let's say you create a tween of each of the elements (d1, d2, image, and d3) + and then later you want to kill only the tweens of DOM elements that are children of + d1 (which would be d2 and image in this example), you'd call TweenMax.killChildTweensOf( document.getElementById("d1") ). + +
+TweenMax.to( document.getElementById("d2"), 1, {css:{left:100}});
+TweenMax.to( document.getElementById("image"), 1, {css:{left:100}});
+TweenMax.to( document.getElementById("d3"), 1, {css:{left:100}});
+
+//only kills the first 2 tweens because those targets are child elements of the "d1" DOM element. 
+TweenMax.killChildTweensOf( document.getElementById("d1") ); 
+
+ +

Parameters
parent:Object — The parent DOM element whose children's tweens should be killed. +
 
complete:Boolean (default = false) — If true, the tweens will be forced to completion before being killed. +

killDelayedCallsTo()method 
public static function killDelayedCallsTo(func:Function):void

+ Immediately kills all of the delayedCalls to a particular function. If, for example, + you want to kill all delayedCalls to myFunction, you'd do this: + +

+ TweenMax.killDelayedCallsTo(myFunction); +

+ +

Since a delayedCall is just a tween that uses the function/callback as both its target + and its onComplete, TweenMax.killTweensOf(myFunction) produces exactly the + same result as TweenMax.killDelayedCallsTo(myFunction).

+ +

This method affects all delayedCalls that were created using TweenLite.delayedCall() + or TweenMax.delayedCall() or the call() or addCallback() methods + of TimelineLite or TimelineMax. Basically, any tween whose target is the function you supply will + be killed.

+ +

Parameters
func:Function — The function for which all delayedCalls should be killed/cancelled. +

killTweensOf()method 
public static function killTweensOf(target:*, vars:Object = null):void

+ Kills all the tweens (or specific tweening properties) of a particular object or + the delayedCalls to a particular function. If, for example, you want to kill all + tweens of myObject, you'd do this: + +

+ TweenMax.killTweensOf(myObject); +

+ +

To kill only particular tweening properties of the object, use the second parameter. + For example, if you only want to kill all the tweens of myObject.alpha and + myObject.x, you'd do this:

+ +

+ TweenMax.killTweensOf(myObject, {alpha:true, x:true}); +

+ +

To kill all the delayedCalls (like ones created using TweenMax.delayedCall(5, myFunction);), + you can simply call TweenMax.killTweensOf(myFunction); because delayedCalls + are simply tweens that have their target and onComplete set to + the same function (as well as a delay of course).

+ +

killTweensOf() affects tweens that haven't begun yet too. If, for example, + a tween of myObject has a delay of 5 seconds and + TweenLite.killTweensOf(mc) is called 2 seconds after the tween was created, + it will still be killed even though it hasn't started yet.

+ +

Parameters
target:* — Object whose tweens should be killed immediately +
 
vars:Object (default = null) — To kill only specific properties, use a generic object containing enumerable properties corresponding to the ones that should be killed like {x:true, y:true}. The values assigned to each property of the object don't matter - the sole purpose of the object is for iteration over the named properties (in this case, x and y). If no object (or null) is defined, all matched tweens will be killed in their entirety. +

pauseAll()method 
public static function pauseAll(tweens:Boolean = true, delayedCalls:Boolean = true, timelines:Boolean = true):void

+ [deprecated] Pauses all tweens and/or delayedCalls/callbacks and/or timelines. This literally + changes the paused state of all affected tweens/delayedCalls/timelines, but a + more flexible way to globally control things is to use the TimelineLite.exportRoot() method + which essentially wraps all of the tweens/timelines/delayedCalls on the root timeline into a + TimelineLite instance so that you can pause(), resume(), or even reverse() + or alter the timeScale without affecting animations that you create after the export. + This also avoids having to alter the paused state of every individual + tween/delayedCall/timeline - controlling the TimelineLite that contains the exported animations + delivers the same effect visually, but does so in a more elegant and flexible way. + +

Parameters
tweens:Boolean (default = true) — If true, all tweens will be paused. +
 
delayedCalls:Boolean (default = true) — If true, all delayedCalls will be paused. timeline callbacks are treated the same as delayedCalls. +
 
timelines:Boolean (default = true) — If true, all TimelineLite and TimelineMax instances will be paused (at least the ones who haven't finished and been removed from their parent timeline) + +

See also

progress()method 
public function progress(value:Number):*

+ Gets or sets the tween's progress which is a value between 0 and 1 indicating the position + of the virtual playhead (excluding repeats) where 0 is at the beginning, 0.5 is halfway complete, + and 1 is complete. If the tween has a non-zero repeat defined, progress + and totalProgress will be different because progress doesn't include any + repeats or repeatDelays whereas totalProgress does. For example, if a TweenMax instance + is set to repeat once, at the end of the first cycle totalProgress would only be 0.5 + whereas progress would be 1. If you watched both properties over the course of the entire + animation, you'd see progress go from 0 to 1 twice (once for each cycle) in the + same time it takes the totalProgress to go from 0 to 1 once. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myTween.progress(0.5).play();

+ +
+var progress = myTween.progress(); //gets current progress
+myTween.progress( 0.25 ); //sets progress to one quarter finished
+
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

repeat()method 
public function repeat(value:int = 0):*

+ Gets or sets the number of times that the tween should repeat after its first iteration. For example, + if repeat is 1, the tween will play a total of twice (the initial play + plus 1 repeat). To repeat indefinitely, use -1. repeat should always be an integer. + +

To cause the repeats to alternate between forward and backward, set yoyo to + true. To add a time gap between repeats, use repeatDelay. You can + set the initial repeat value via the vars parameter, like:

+ +

+ TweenMax.to(mc, 1, {x:100, repeat:2}); +

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myTween.repeat(2).yoyo(true).play();

+ +
+var repeat = myTween.repeat(); //gets current repeat value
+myTween.repeat(2); //sets repeat to 2
+
+ +

Parameters
value:int (default = 0) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

repeatDelay()method 
public function repeatDelay(value:Number):*

+ Gets or sets the amount of time in seconds (or frames for frames-based tweens) between repeats. + For example, if repeat is 2 and repeatDelay is 1, the tween will + play initially, then wait for 1 second before it repeats, then play again, then wait 1 second + again before doing its final repeat. You can set the initial repeatDelay value + via the vars parameter, like: + +

+ TweenMax.to(mc, 1, {x:100, repeat:2, repeatDelay:1}); +

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myTween.repeat(2).yoyo(true).repeatDelay(0.5).play();

+ +
+var repeatDelay = myTween.repeatDelay(); //gets current repeatDelay value
+myTween.repeatDelay(2); //sets repeatDelay to 2
+
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

resumeAll()method 
public static function resumeAll(tweens:Boolean = true, delayedCalls:Boolean = true, timelines:Boolean = true):void

+ [deprecated] Resumes all paused tweens and/or delayedCalls/callbacks and/or timelines. This literally + changes the paused state of all affected tweens/delayedCalls/timelines, but a + more flexible way to globally control things is to use the TimelineLite.exportRoot() method + which essentially wraps all of the tweens/timelines/delayedCalls on the root timeline into a + TimelineLite instance so that you can pause(), resume(), or even reverse() + or alter the timeScale without affecting animations that you create after the export. + This also avoids having to alter the paused state of every individual + tween/delayedCall/timeline - controlling the TimelineLite that contains the exported animations + delivers the same effect visually, but does so in a more elegant and flexible way. + +

Parameters
tweens:Boolean (default = true) — If true, all tweens will be resumed. +
 
delayedCalls:Boolean (default = true) — If true, all delayedCalls will be resumed. timeline callbacks are treated the same as delayedCalls. +
 
timelines:Boolean (default = true) — If true, all TimelineLite and TimelineMax instances will be resumed (at least the ones who haven't finished and been removed from their parent timeline) +

See also

set()method 
public static function set(target:Object, vars:Object):TweenMax

+ Immediately sets properties of the target accordingly - essentially a zero-duration to() tween with a more + intuitive name. So the following lines produce identical results: + +

+TweenMax.set(myObject, {x:100, y:50, alpha:0});
+TweenMax.to(myObject, 0, {x:100, y:50, alpha:0});
+
+ +

And of course you can use an array to set the properties of multiple targets at the same time, like:

+ +
+TweenMax.set([obj1, obj2, obj3], {x:100, y:50, alpha:0});
+         
+ +

Parameters
target:Object — Target object (or array of objects) whose properties will be affected. +
 
vars:Object — An object defining the value for each property that should be set. For example, to set mc.x to 100 and mc.y to 200, do this: TweenMax.set(mc, {x:100, y:200}); +

Returns
TweenMax — A TweenMax instance (with a duration of 0) which can optionally be inserted into a TimelineLite/Max instance (although it's typically more concise to just use the timeline's set() method). +
staggerFrom()method 
public static function staggerFrom(targets:Array, duration:Number, vars:Object, stagger:Number = 0, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:* = null):Array

+ Tweens an array of targets from a common set of destination values (using the current + values as the destination), but staggers their start times by a specified amount of time, + creating an evenly-spaced sequence with a surprisingly small amount of code. For example, + let's say you have an array containing references to a bunch of text fields that you'd + like to drop into place while fading in, all in a staggered fashion with 0.2 seconds + between each tween's start time: + +

+var textFields = [tf1, tf2, tf3, tf4, tf5];
+TweenMax.staggerFrom(textFields, 1, {y:"+150"}, 0.2);
+
+

staggerFrom() simply loops through the targets array and creates + a from() tween for each object and then returns an array containing all of + the resulting tweens (one for each object).

+ +

If you can afford the slight increase in file size, it is usually better to use + TimelineLite's staggerFrom() method because it wraps the tweens in a + TimelineLite instead of an array which makes controlling the group as a whole much + easier. That way you could pause(), resume(), reverse(), restart() or change the timeScale + of everything at once.

+ +

Note that if you define an onComplete (or any callback for that matter) + in the vars parameter, it will be called for each tween rather than the whole + sequence. This can be very useful, but if you want to call a function after the entire + sequence of tweens has completed, use the onCompleteAll parameter (the 5th parameter).

+ +

By default, immediateRender is true in + from() tweens, meaning that they immediately render their starting state + regardless of any delay that is specified. You can override this behavior by passing + immediateRender:false in the vars parameter so that it will + wait to render until the tween actually begins.

+ +

JavaScript and AS2 note: - Due to the way JavaScript and AS2 don't + maintain scope (what "this" refers to, or the context) in function calls, + it can be useful to define the scope specifically. Therefore, in the JavaScript and AS2 + versions accept a 7th parameter for onCompleteAllScope, but that parameter + is omitted in the AS3 version.

+ +

Parameters
targets:Array — An array of target objects whose properties should be affected +
 
duration:Number — Duration in seconds (or frames if useFrames:true is defined in the vars parameter) +
 
vars:Object — An object defining the end value for each property that should be tweened as well as any special properties like ease. For example, to tween x to 100 and y to 200 for mc1, mc2, and mc3, staggering their start time by 0.25 seconds and then call myFunction when they last one has finished, do this: TweenMax.staggerTo([mc1, mc2, mc3], 1, {x:100, y:200}, 0.25, myFunction}). +
 
stagger:Number (default = 0) — Amount of time in seconds (or frames for frames-based tweens) to stagger the start time of each tween. For example, you might want to have 5 objects move down 100 pixels while fading out, and stagger the start times by 0.2 seconds - you could do: TweenMax.staggerTo([mc1, mc2, mc3, mc4, mc5], 1, {y:"+100", alpha:0}, 0.2). +
 
onCompleteAll:Function (default = null) — A function to call as soon as the entire sequence of tweens has completed +
 
onCompleteAllParams:Array (default = null) — An array of parameters to pass the onCompleteAll method. +
 
onCompleteAllScope:* (default = null) — The scope in which the onCompleteAll callback should be called (basically, what "this" refers to in the function). NOTE: this parameter only pertains to the JavaScript and AS2 versions; it is omitted in AS3. +

Returns
Array — An array of TweenMax instances (one for each object in the targets array) +

See also

staggerFromTo()method 
public static function staggerFromTo(targets:Array, duration:Number, fromVars:Object, toVars:Object, stagger:Number = 0, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:* = null):Array

+ Tweens an array of targets from and to a common set of values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code. For example, let's say you have an array containing + references to a bunch of text fields that you'd like to fade from alpha:1 to alpha:0 in a + staggered fashion with 0.2 seconds between each tween's start time: + +

+var textFields = [tf1, tf2, tf3, tf4, tf5];
+TweenMax.staggerFromTo(textFields, 1, {alpha:1}, {alpha:0}, 0.2);
+
+

staggerFromTo() simply loops through the targets array and creates + a fromTo() tween for each object and then returns an array containing all of + the resulting tweens (one for each object).

+ +

If you can afford the slight increase in file size, it is usually better to use + TimelineLite's staggerFromTo() method because it wraps the tweens in a + TimelineLite instead of an array which makes controlling the group as a whole much + easier. That way you could pause(), resume(), reverse(), restart() or change the timeScale + of everything at once.

+ +

Note that if you define an onComplete (or any callback for that matter) + in the vars parameter, it will be called for each tween rather than the whole + sequence. This can be very useful, but if you want to call a function after the entire + sequence of tweens has completed, use the onCompleteAll parameter (the 6th parameter).

+ +

JavaScript and AS2 note: - Due to the way JavaScript and AS2 don't + maintain scope (what "this" refers to, or the context) in function calls, + it can be useful to define the scope specifically. Therefore, in the JavaScript and AS2 + versions accept an 8th parameter for onCompleteAllScope, but that parameter + is omitted in the AS3 version.

+ +

Parameters
targets:Array — An array of target objects whose properties should be affected +
 
duration:Number — Duration in seconds (or frames if useFrames:true is defined in the vars parameter) +
 
fromVars:Object — An object defining the starting value for each property that should be tweened. For example, to tween x from 100 and y from 200, fromVars would look like this: {x:100, y:200}. +
 
toVars:Object — An object defining the end value for each property that should be tweened as well as any special properties like ease. For example, to tween x from 0 to 100 and y from 0 to 200, staggering the start times by 0.2 seconds and then call myFunction when they all complete, do this: TweenMax.staggerFromTo([mc1, mc2, mc3], 1, {x:0, y:0}, {x:100, y:200}, 0.2, myFunction}); +
 
stagger:Number (default = 0) — Amount of time in seconds (or frames if the timeline is frames-based) to stagger the start time of each tween. For example, you might want to have 5 objects move down 100 pixels while fading out, and stagger the start times by 0.2 seconds - you could do: TweenMax.staggerTo([mc1, mc2, mc3, mc4, mc5], 1, {y:"+100", alpha:0}, 0.2). +
 
onCompleteAll:Function (default = null) — A function to call as soon as the entire sequence of tweens has completed +
 
onCompleteAllParams:Array (default = null) — An array of parameters to pass the onCompleteAll method. +
 
onCompleteAllScope:* (default = null) — The scope in which the onCompleteAll callback should be called (basically, what "this" refers to in the function). NOTE: this parameter only pertains to the JavaScript and AS2 versions; it is omitted in AS3. +

Returns
Array — An array of TweenMax instances (one for each object in the targets array) +

See also

staggerTo()method 
public static function staggerTo(targets:Array, duration:Number, vars:Object, stagger:Number = 0, onCompleteAll:Function = null, onCompleteAllParams:Array = null, onCompleteAllScope:* = null):Array

+ Tweens an array of targets to a common set of destination values, but staggers their + start times by a specified amount of time, creating an evenly-spaced sequence with a + surprisingly small amount of code. For example, let's say you have an array containing + references to a bunch of text fields that you'd like to fall away and fade out in a + staggered fashion with 0.2 seconds between each tween's start time: + +

+var textFields = [tf1, tf2, tf3, tf4, tf5];
+TweenMax.staggerTo(textFields, 1, {y:"+150", ease:CubicIn.ease}, 0.2);
+
+

staggerTo() simply loops through the targets array and creates + a to() tween for each object and then returns an array containing all of + the resulting tweens (one for each object).

+ +

If you can afford the slight increase in file size, it is usually better to use + TimelineLite's staggerTo() method because it wraps the tweens in a + TimelineLite instead of an array which makes controlling the group as a whole much + easier. That way you could pause(), resume(), reverse(), restart() or change the timeScale + of everything at once.

+ +

Note that if you define an onComplete (or any callback for that matter) + in the vars parameter, it will be called for each tween rather than the whole + sequence. This can be very useful, but if you want to call a function after the entire + sequence of tweens has completed, use the onCompleteAll parameter (the 5th parameter).

+ +

JavaScript and AS2 note: - Due to the way JavaScript and AS2 don't + maintain scope (what "this" refers to, or the context) in function calls, + it can be useful to define the scope specifically. Therefore, in the JavaScript and AS2 + versions accept a 7th parameter for onCompleteAllScope, but that parameter + is omitted in the AS3 version.

+ +

Parameters
targets:Array — An array of target objects whose properties should be affected +
 
duration:Number — Duration in seconds (or frames if useFrames:true is defined in the vars parameter) +
 
vars:Object — An object defining the end value for each property that should be tweened as well as any special properties like ease. For example, to tween x to 100 and y to 200 for mc1, mc2, and mc3, staggering their start time by 0.25 seconds and then call myFunction when they last one has finished, do this: TweenMax.staggerTo([mc1, mc2, mc3], 1, {x:100, y:200}, 0.25, myFunction}). +
 
stagger:Number (default = 0) — Amount of time in seconds (or frames for frames-based tweens) to stagger the start time of each tween. For example, you might want to have 5 objects move down 100 pixels while fading out, and stagger the start times by 0.2 seconds - you could do: TweenMax.staggerTo([mc1, mc2, mc3, mc4, mc5], 1, {y:"+100", alpha:0}, 0.2). +
 
onCompleteAll:Function (default = null) — A function to call as soon as the entire sequence of tweens has completed. +
 
onCompleteAllParams:Array (default = null) — An array of parameters to pass the onCompleteAll method. +
 
onCompleteAllScope:* (default = null) — The scope in which the onCompleteAll callback should be called (basically, what "this" refers to in the function). NOTE: this parameter only pertains to the JavaScript and AS2 versions; it is omitted in AS3. +

Returns
Array — Array of TweenMax tweens (one for each object in the targets array) +

See also

time()method 
override public function time(value:Number, suppressEvents:Boolean = false):*

+ Gets or sets the local position of the playhead (essentially the current time), not + including any repeats or repeatDelays. If the tween has a non-zero repeat, its time + goes back to zero upon repeating even though the totalTime continues forward linearly + (or if yoyo is true, the time alternates between moving forward + and backward). time never exceeds the duration whereas the totalTime reflects + the overall time including any repeats and repeatDelays. + +

For example, if a TweenMax instance has a duration of 2 and a repeat of 3, + totalTime will go from 0 to 8 during the course of the tween (plays once then + repeats 3 times, making 4 total cycles) whereas time would go from 0 to 2 a + total of 4 times.

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining.

+ +
+var currentTime = myTween.time(); //gets current time
+myTween.time(2); //sets time, jumping to new value just like seek().
+
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. Negative values will be interpreted from the END of the animation. +
 
suppressEvents:Boolean (default = false) — If true, no events or callbacks will be triggered when the playhead moves to the new position defined in the value parameter. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

to()method 
public static function to(target:Object, duration:Number, vars:Object):TweenMax

+ Static method for creating a TweenMax instance that animates to the specified destination values + (from the current values). This static method can be more intuitive for some developers + and shields them from potential garbage collection issues that could arise when assigning a + tween instance to a persistent variable. The following lines of code produce identical results: + +

+TweenMax.to(mc, 1, {x:100});
+var myTween = new TweenMax(mc, 1, {x:100});
+var myTween = TweenMax.to(mc, 1, {x:100});
+
+

Each line above will tween the "x" property of the mc object + to a value of 100 over the coarse of 1 second. They each use a slightly different syntax, + all of which are valid. If you don't need to store a reference of the tween, just use the + static TweenMax.to( ) call.

+ +

Since the target parameter can also be an array of objects, the following + code will tween the x property of mc1, mc2, and mc3 to a value of 100 simultaneously:

+ +
+TweenMax.to([mc1, mc2, mc3], 1, {x:100});
+
+

Even though 3 objects are animating, there is still only one tween created. + In order to stagger or offset the start times of each object animating, please see + the staggerTo() method (TimelineLite has one too).

+ +

For simple sequencing, you can use the delay special property + (like TweenMax.to(mc, 1, {x:100, delay:0.5})), + but it is highly recommended that you consider using TimelineLite (or TimelineMax) + for all but the simplest sequencing tasks. It has an identical to() method + that allows you to append tweens one-after-the-other and then control the entire sequence + as a whole. You can even have the tweens overlap as much as you want.

+ +

Parameters
target:Object — Target object (or array of objects) whose properties this tween affects. +
 
duration:Number — Duration in seconds (or frames if useFrames:true is set in the vars parameter) +
 
vars:Object — An object defining the end value for each property that should be tweened as well as any special properties like onComplete, ease, etc. For example, to tween mc.x to 100 and mc.y to 200 and then call myFunction, do this: TweenMax.to(mc, 1, {x:100, y:200, onComplete:myFunction}); +

Returns
TweenMax — TweenMax instance +

See also

totalDuration()method 
override public function totalDuration(value:Number):*

+ Gets or sets the total duration of the tween in seconds (or frames for frames-based tweens) + including any repeats or repeatDelays. duration, by contrast, does + NOT include repeats and repeatDelays. For example, if the tween has a + duration of 10, a repeat of 1 and a repeatDelay of 2, + the totalDuration would be 22. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining.

+ +
+var total = myTween.totalDuration(); //gets total duration
+myTween.totalDuration(10); //sets the total duration
+
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. Negative values will be interpreted from the END of the animation. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

totalProgress()method 
public function totalProgress(value:Number):*

+ Gets or sets the tween's totalProgress which is a value between 0 and 1 indicating the position + of the virtual playhead (including repeats) where 0 is at the beginning, 0.5 is halfway complete, + and 1 is complete. If the tween has a non-zero repeat defined, progress + and totalProgress will be different because progress doesn't include + any repeats or repeatDelays whereas totalProgress does. For example, if a TweenMax + instance is set to repeat once, at the end of the first cycle totalProgress would + only be 0.5 whereas progress would be 1. If you watched both properties over the + course of the entire animation, you'd see progress go from 0 to 1 twice (once for + each cycle) in the same time it takes the totalProgress to go from 0 to 1 once. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myTween.totalProgress(0.5).play();

+ +
+var progress = myTween.totalProgress(); //gets total progress
+myTween.totalProgress( 0.25 ); //sets total progress to one quarter finished
+
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

updateTo()method 
public function updateTo(vars:Object, resetDuration:Boolean = false):*

+ Updates tweening values on the fly so that they appear to seamlessly change course even if + the tween is in-progress. Think of it like dynamically updating the vars object + that was passed in to the tween when it was originally created. You do NOT + need to redefine all of the vars properties/values - only the ones that you want + to update. You can even define new properties that you didn't define in the original vars + object. + +

If the resetDuration parameter is true and the tween has already + started (or finished), updateTo() will restart the tween. Otherwise, the tween's + timing will be honored. And if resetDuration is false and the tween + is in-progress, the starting values of each property will be adjusted so that the tween appears + to seamlessly redirect to the new destination values. This is typically not advisable if you + plan to reverse the tween later on or jump to a previous point because the starting values would + have been adjusted.

+ +

updateTo() is only meant for non-plugin values. It's much more complicated to + dynamically update values that are being handled inside plugins - that is not what this method + is intended to do.

+ +

Note: If you plan to constantly update values, please look into using the DynamicPropsPlugin.

+ +
+//create the tween
+var tween:TweenMax = new TweenMax(mc, 2, {x:100, y:200, alpha:0.5});
+
+//then later, update the destination x and y values, restarting the tween
+tween.updateTo({x:300, y:0}, true);
+
+//or to update the values mid-tween without restarting, do this:
+tween.updateTo({x:300, y:0}, false);
+
+ +

Parameters
vars:Object — Object containing properties with the destination values that should be udpated. You do NOT need to redefine all of the original vars values - only the ones that should be updated (although if you change a plugin value, you will need to fully define it). For example, to update the destination x value to 300 and the destination y value to 500, pass: {x:300, y:500}. +
 
resetDuration:Boolean (default = false) — If the tween has already started (or finished) and resetDuration is true, the tween will restart. If resetDuration is false, the tween's timing will be honored (no restart) and each tweening property's starting value will be adjusted so that it appears to seamlessly redirect to the new destination value. +

Returns
* — self (makes chaining easier) +
yoyo()method 
public function yoyo(value:Boolean = false):*

+ Gets or sets the tween's yoyo state, where true causes + the tween to go back and forth, alternating backward and forward on each + repeat. yoyo works in conjunction with repeat, + where repeat controls how many times the tween repeats, and yoyo + controls whether or not each repeat alternates direction. So in order to make a tween yoyo, + you must set its repeat to a non-zero value. + Yoyo-ing, has no affect on the tween's "reversed" property. For example, + if repeat is 2 and yoyo is false, it will look like: + start - 1 - 2 - 3 - 1 - 2 - 3 - 1 - 2 - 3 - end. But if yoyo is true, + it will look like: start - 1 - 2 - 3 - 3 - 2 - 1 - 1 - 2 - 3 - end. + +

You can set the yoyo property initially by passing yoyo:true + in the vars parameter, like: TweenMax.to(mc, 1, {x:100, repeat:1, yoyo:true});

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myAnimation.yoyo(true).repeat(3).timeScale(2).play(0.5);

+ +
+var yoyo = myAnimation.yoyo(); //gets current yoyo state
+myAnimation.yoyo( true ); //sets yoyo to true
+
+

Parameters
value:Boolean (default = false) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/class-list.html b/duo/js/greensock-v12-js/docs/com/greensock/class-list.html new file mode 100755 index 0000000..9612f97 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/class-list.html @@ -0,0 +1 @@ +com.greensock - GreenSock JavaScript Documentation

Package com.greensock

Classes
TimelineLite
TimelineMax
TweenLite
TweenMax
\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/core/Animation.html b/duo/js/greensock-v12-js/docs/com/greensock/core/Animation.html new file mode 100755 index 0000000..88912c3 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/core/Animation.html @@ -0,0 +1,610 @@ +com.greensock.core.Animation +
Packagecom.greensock.core
Classpublic class Animation
InheritanceAnimation Inheritance Object
Subclasses SimpleTimeline, TweenLite

+ Base class for all TweenLite, TweenMax, TimelineLite, and TimelineMax classes, providing + core methods/properties/functionality, but there is no reason to create an instance of this + class directly. It can be very useful, however, as a data type in AS3/AS2 for methods/properties that + can contain tweens or timelines. For example, maybe you build an animateIn() and + animateOut() method for many of your own custom classes, and they each return an + Animation instance which could be a tween or a timeline: + +
+function animateIn():Animation {
+    return TweenLite.to(this, 1, {scaleX:1, scaleY:1, autoAlpha:1});
+}
+ 
+function animateOut():Animation {
+    var tl:TimelineLite = new TimelineLite();
+    tl.to(this, 1, {scaleX:0.5, scaleY:0.5});
+    tl.to(this, 0.5, {autoAlpha:0}, -0.25);
+    return tl;
+}
+
+var anim:Animation = animateIn();
+
+//now we can control the animation with the common methods:
+anim.pause();
+anim.play();
+anim.reverse();
+
+//or somewhere else, we could build a sequence like this:
+var tl:TimelineLite = new TimelineLite();
+tl.append( animateIn() );
+tl.append( animateOut(), 3);
+
+ +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  data : *
A place to store any data you want (initially populated with vars.data if it exists).
Animation
  ticker : Shape
[static] + The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers).
Animation
  timeline : SimpleTimeline
[Read-only] Parent timeline.
Animation
  vars : Object
The vars object passed into the constructor which stores configuration variables like onComplete, onUpdate, etc.
Animation
Public Methods
 MethodDefined By
  
Animation(duration:Number = 0, vars:Object = null)
+ Constructor + +
Animation
  
delay(value:Number):*
+ Gets or sets the animation's initial delay which is the length of time in seconds + (or frames for frames-based tweens) before the animation should begin.
Animation
  
duration(value:Number):*
+ Gets or sets the animation's duration, not including any repeats or repeatDelays + (which are only available in TweenMax and TimelineMax).
Animation
  
eventCallback(type:String, callback:Function = null, params:Array = null, scope:* = null):*
+ Gets or sets an event callback like "onComplete", "onUpdate", "onStart", "onReverseComplete" + or "onRepeat" (onRepeat only applies to TweenMax or TimelineMax instances) + along with any parameters that should be passed to that callback.
Animation
  
+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
Animation
  
kill(vars:Object = null, target:Object = null):*
+ Kills the animation entirely or in part depending on the parameters.
Animation
  
pause(atTime:* = null, suppressEvents:Boolean = true):*
+ Pauses the instance, optionally jumping to a specific time.
Animation
  
paused(value:Boolean = false):*
+ Gets or sets the animation's paused state which indicates whether or not the animation + is currently paused.
Animation
  
play(from:* = null, suppressEvents:Boolean = true):*
+ Begins playing forward, optionally from a specific time (by default playback begins from + wherever the playhead currently is).
Animation
  
restart(includeDelay:Boolean = false, suppressEvents:Boolean = true):*
+ Restarts and begins playing forward from the beginning.
Animation
  
resume(from:* = null, suppressEvents:Boolean = true):*
+ Resumes playing without altering direction (forward or reversed), optionally jumping to a specific time first.
Animation
  
reverse(from:* = null, suppressEvents:Boolean = true):*
+ Reverses playback so that all aspects of the animation are oriented backwards including, for example, + a tween's ease.
Animation
  
reversed(value:Boolean = false):*
+ Gets or sets the animation's reversed state which indicates whether or not the animation + should be played backwards.
Animation
  
seek(time:*, suppressEvents:Boolean = true):*
+ Jumps to a specific time without affecting whether or not the instance is paused or reversed.
Animation
  
startTime(value:Number):*
+ Gets or sets the time at which the animation begins on its parent timeline (after any delay + that was defined).
Animation
  
time(value:Number, suppressEvents:Boolean = false):*
+ Gets or sets the local position of the playhead (essentially the current time), + described in seconds (or frames for frames-based animations) which + will never be less than 0 or greater than the animation's duration.
Animation
  
timeScale(value:Number):*
+ Factor that's used to scale time in the animation where 1 = normal speed (the default), + 0.5 = half speed, 2 = double speed, etc.
Animation
  
totalDuration(value:Number):*
+ Gets or sets the animation's total duration including + any repeats or repeatDelays (which are only available in TweenMax and TimelineMax).
Animation
  
totalTime(time:Number, suppressEvents:Boolean = false):*
+ Gets or sets the position of the playhead according to the totalDuration + which includes any repeats and repeatDelays (only available + in TweenMax and TimelineMax).
Animation
Property Detail
dataproperty
public var data:*

A place to store any data you want (initially populated with vars.data if it exists).

tickerproperty 
public static var ticker:Shape

+ The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers). + Add as many listeners as you want. The basic syntax is the same for all versions (AS2, AS3, and JavaScript): + +

Basic example (AS2, AS3, and JavaScript):

+//add listener
+Animation.ticker.addEventListener("tick", myFunction);
+
+function myFunction(event) {
+    //executes on every tick after the core engine updates
+}
+
+//to remove the listener later...
+Animation.ticker.removeEventListener("tick", myFunction);
+
+ +

Due to differences in the core languages (and to maximize efficiency), the advanced syntax is slightly different + for the AS3 version compared to AS2 and JavaScript. The parameters beyond the first 2 in the addEventListener() + method are outlined below:

+ +

JavaScript and AS2

+

addEventListener(type, callback, scope, useParam, priority)

+

Parameters: +

    +
  1. type : String - type of listener, should always be "tick"
  2. +
  3. callback : Function - the function to call when the event occurs
  4. +
  5. scope : Object - binds the scope to a particular object (scope is basically what "this" refers to in your function). This can be very useful in JavaScript and AS2 because scope isn't generally maintained.
  6. +
  7. useParam : Boolean - if true, an event object will be generated and fed to the callback each time the event occurs. The event is a generic object and has two properties: type (always "tick") and target which refers to the ticker instance. The default for useParam is false because it improves performance.
  8. +
  9. priority : Integer - influences the order in which the listeners are called. Listeners with lower priorities are called after ones with higher priorities.
  10. +
+

+ +

In JavaScript, the Animation object/class is located at com.greensock.core.Animation - it is not added to the global namespace in order to avoid polluting it (developers rarely directly access the Animation class)

+ +

Advanced example (JavaScript and AS2):

+//add listener that requests an event object parameter, binds scope to the current scope (this), and sets priority to 1 so that it is called before any other listeners that had a priority lower than 1...
+Animation.ticker.addEventListener("tick", myFunction, this, true, 1);
+
+function myFunction(event) {
+    //executes on every tick after the core engine updates
+}
+
+//to remove the listener later...
+Animation.ticker.removeEventListener("tick", myFunction);
+
+ +

AS3

+

The AS3 version uses the standard EventDispatcher.addEventListener() syntax which + basically allows you to define a priority and whether or not to use weak references (see Adobe's + docs for details).

+ +

Advanced example [AS3 only]:

+import flash.events.Event;
+
+//add listener with weak reference (standard syntax - notice the 5th parameter is true)
+Animation.ticker.addEventListener("tick", myFunction, false, 0, true);
+
+function myFunction(event:Event):void {
+    //executes on every tick after the core engine updates
+}
+
+//to remove the listener later...
+Animation.ticker.removeEventListener("tick", myFunction);
+
+

timelineproperty 
public var timeline:SimpleTimeline

[Read-only] Parent timeline. Every animation is placed onto a timeline (the root timeline by default) and can only have one parent. An instance cannot exist in multiple timelines at once.

varsproperty 
public var vars:Object

The vars object passed into the constructor which stores configuration variables like onComplete, onUpdate, etc. as well as tweening properties like alpha, x, y or whatever.

Constructor Detail
Animation()Constructor
public function Animation(duration:Number = 0, vars:Object = null)

+ Constructor + +

Parameters
duration:Number (default = 0) — duration in seconds (or frames for frames-based tweens) +
 
vars:Object (default = null) — configuration variables (for example, {x:100, y:0, alpha:0.5, onComplete:myFunction}) +
Method Detail
delay()method
public function delay(value:Number):*

+ Gets or sets the animation's initial delay which is the length of time in seconds + (or frames for frames-based tweens) before the animation should begin. + A tween's starting values are not recorded until after the delay has expired (except in + from() tweens which render immediately by default unless immediateRender:false + is set in the vars parameter). An animation's delay is unaffected + by its timeScale, so if you were to change timeScale from 1 to 10, + for example, it wouldn't cause the delay to grow tenfold. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myAnimation.delay(2).timeScale(0.5).play(1);

+ +
+ var currentDelay = myAnimation.delay(); //gets current delay
+ myAnimation.delay(2); //sets delay
+
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +
duration()method 
public function duration(value:Number):*

+ Gets or sets the animation's duration, not including any repeats or repeatDelays + (which are only available in TweenMax and TimelineMax). For example, if a TweenMax instance has + a duration of 2 and a repeat of 3, its totalDuration + would be 8 (one standard play plus 3 repeats equals 4 total cycles). + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myAnimation.duration(2).delay(0.5).play(1);

+ +
+ var currentDuration = myAnimation.duration(); //gets current duration
+ myAnimation.duration(2); //sets duration
+
+

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

eventCallback()method 
public function eventCallback(type:String, callback:Function = null, params:Array = null, scope:* = null):*

+ Gets or sets an event callback like "onComplete", "onUpdate", "onStart", "onReverseComplete" + or "onRepeat" (onRepeat only applies to TweenMax or TimelineMax instances) + along with any parameters that should be passed to that callback. This is the same as defining + the values directly in the constructor's vars parameter initially, so the following + two lines are functionally equivalent: + +

+//the following two lines produce IDENTICAL results:
+var myAnimation = new TweenLite(mc, 1, {x:100, onComplete:myFunction, onCompleteParams:["param1","param2"]});
+myAnimation.eventCallback("onComplete", myFunction, ["param1","param2"]);
+
+

The benefit of using eventCallback() is that it allows you to set callbacks + even after the animation instance has been created and it also allows you to inspect the + callback references or even delete them on-the-fly (use null to delete the + event callback).

+ +
+//deletes the onUpdate
+myAnimation.eventCallback("onUpdate", null);
+
+ +

IMPORTANT:Animation instances can only have one callback associated with each + event type (one onComplete, one onUpdate, one onStart, etc.). + So setting a new value will overwrite the old one. All of the values populate the vars + object too which was originally passed into the constructor (think of that like a storage place for + configuration data).

+ +

This method serves as both a getter and setter. Omitting all but the first parameter returns + the current value (getter), whereas defining more than the first parameter sets the value (setter) + and returns the instance itself for easier chaining, like + myAnimation.eventCallback("onComplete", completeHandler).eventCallback("onUpdate", updateHandler, ["param1","{self}"]).play(1);

+ +
+var currentOnComplete = myAnimation.eventCallback("onComplete"); //gets current onComplete
+myAnimation.eventCallback("onComplete", myFunction); //sets the onComplete
+
+ +

JavaScript and AS2 note: - Due to the way JavaScript and AS2 don't + maintain scope (what "this" refers to, or the context) in function calls, + it can be useful to define the scope specifically. Therefore, the JavaScript and AS2 + versions accept a 4th parameter to [optionally] define the scope, but it + is omitted in AS3.

+ +

Parameters
type:String — The type of event callback, like "onComplete", "onUpdate", "onStart" or "onRepeat". This is case-sensitive. +
 
callback:Function (default = null) — The function that should be called when the event occurs. +
 
params:Array (default = null) — An array of parameters to pass the callback. Use "{self}" to refer to the animation instance itself. Example: ["param1","{self}"] +
 
scope:* (default = null) — The scope in which the callback should be called (basically, what "this" refers to in the function). NOTE: this parameter only pertains to the JavaScript and AS2 versions; it is omitted in AS3. +

Returns
* — Omitting the all but the first parameter returns the current value (getter), whereas defining more than the first parameter sets the callback (setter) and returns the instance itself for easier chaining. +
invalidate()method 
public function invalidate():*

+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values. When you invalidate() + an animation, it will be re-initialized the next time it renders and its vars object will be re-parsed. + The timing of the animation (duration, startTime, delay) will not be affected. + +

Another example would be if you have a TweenMax(mc, 1, {x:100, y:100}) that ran when mc.x and mc.y + were initially at 0, but now mc.x and mc.y are 200 and you want them tween to 100 again, you could simply + invalidate() the tween and restart() it. Without invalidating first, restarting it + would cause the values jump back to 0 immediately (where they started when the tween originally began). + When you invalidate a TimelineLite/TimelineMax, it automatically invalidates all of its children.

+

Returns
* — self (makes chaining easier) +
kill()method 
public function kill(vars:Object = null, target:Object = null):*

+ Kills the animation entirely or in part depending on the parameters. Simply calling kill() + (omitting the parameters) will immediately stop the animation and release it for garbage collection. + To kill only particular tweening properties of the animation, use the first parameter which should + be a generic object with enumerable properties corresponding to those that should be killed, + like {x:true, y:true}. The second parameter allows you to define a target + (or array of targets) to affect. + +

Note: the values assigned to each property of the vars parameter object don't + matter - the sole purpose of the object is for iteration over the named properties. In other + words, {x:true, y:true} would produce the same results as {x:false, y:false}.

+ +
+ //kill the entire animation:
+ myAnimation.kill();
+ 
+ //kill only the "x" and "y" properties of the animation (all targets):
+ myAnimation.kill({x:true, y:true});
+ 
+ //kill all parts of the animation related to the target "myObject" (if the tween has multiple targets, the others will not be affected):
+ myAnimation.kill(null, myObject);
+ 
+ //kill only the "x" and "y" properties of animations of the target "myObject":
+ myAnimation.kill({x:true, y:true}, myObject);
+  
+ //kill only the "alpha" properties of animations of the targets "myObject1" and "myObject2":
+ myAnimation.kill({alpha:true}, [myObject1, myObject2]);
+         
+ +

Parameters
vars:Object (default = null) — To kill only specific properties, use a generic object containing enumerable properties corresponding to the ones that should be killed, like {x:true, y:true}. The values assigned to each property of the object don't matter - the sole purpose of the object is for iteration over the named properties (in this case, x and y). If no object (or null) is defined, ALL properties will be killed. +
 
target:Object (default = null) — To kill only aspects of the animation related to a particular target (or targets), reference it here. For example, to kill only parts having to do with myObject, do kill(null, myObject) or to kill only parts having to do with myObject1 and myObject2, do kill(null, [myObject1, myObject2]). If no target is defined, ALL targets will be affected. +

Returns
* — self (makes chaining easier) +
pause()method 
public function pause(atTime:* = null, suppressEvents:Boolean = true):*

+ Pauses the instance, optionally jumping to a specific time. + +

If you define a time to jump to (the first parameter, which could also be a label for TimelineLite + or TimelineMax instances), the playhead moves there immediately and if there are any + events/callbacks inbetween where the playhead was and the new time, they will not be triggered + because by default suppressEvents (the 2nd parameter) is true. + Think of it like picking the needle up on a record player and moving it to a new position + before placing it back on the record. If, however, you do not want the events/callbacks suppressed + during that initial move, simply set the suppressEvents parameter to false.

+ +
+ //pauses wherever the playhead currently is:
+ myAnimation.pause();
+ 
+ //jumps to exactly 2-seconds into the animation and then pauses:
+ myAnimation.pause(2);
+ 
+ //jumps to exactly 2-seconds into the animation and pauses but doesn't suppress events during the initial move:
+ myAnimation.pause(2, false);
+ 
+ +

Parameters
atTime:* (default = null) — The time (or label for TimelineLite/TimelineMax instances) that the instance should jump to before pausing (if none is defined, it will pause wherever the playhead is currently located). +
 
suppressEvents:Boolean (default = true) — If true (the default), no events or callbacks will be triggered when the playhead moves to the new position defined in the atTime parameter. +

Returns
* — self (makes chaining easier) +
paused()method 
public function paused(value:Boolean = false):*

+ Gets or sets the animation's paused state which indicates whether or not the animation + is currently paused. This does not take into account anscestor timelines. So for example, + a tween that is not paused might appear paused if its parent timeline (or any ancenstor + timeline) is paused. Pausing an animation doesn't remove it from its parent timeline, + but it does cause it not to be factored into the parent timeline's + duration/totalDuration. When an animation completes, it does + NOT alter its paused state. + +

In most cases, it is easiest to use the pause() method to pause + the animation, and resume() to resume it. But to check the current + state, you must use the paused() method. It can also be useful for + toggling like myAnimation.paused( !myAnimation.paused() );

+ +

You can set the paused state initially by passing paused:true + in the vars parameter.

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myAnimation.paused(true).delay(2).timeScale(0.5);

+ +
+ var paused = myAnimation.paused(); //gets current paused state
+ myAnimation.paused( true ); //sets paused state to true (just like pause())
+ myAnimation.paused( !myAnimation.paused() ); //toggles the paused state
+         
+

Parameters
value:Boolean (default = false) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

play()method 
public function play(from:* = null, suppressEvents:Boolean = true):*

+ Begins playing forward, optionally from a specific time (by default playback begins from + wherever the playhead currently is). This also ensures that the instance is neither paused + nor reversed. + +

If you define a "from" time (the first parameter, which could also be a label for TimelineLite + or TimelineMax instances), the playhead moves there immediately and if there are any + events/callbacks inbetween where the playhead was and the new time, they will not be triggered + because by default suppressEvents (the 2nd parameter) is true. + Think of it like picking the needle up on a record player and moving it to a new position + before placing it back on the record. If, however, you do not want the events/callbacks suppressed + during that initial move, simply set the suppressEvents parameter to false.

+ +
+//begins playing from wherever the playhead currently is:
+myAnimation.play();
+
+//begins playing from exactly 2-seconds into the animation:
+myAnimation.play(2);
+
+//begins playing from exactly 2-seconds into the animation but doesn't suppress events during the initial move:
+myAnimation.play(2, false);
+
+ +

Parameters
from:* (default = null) — The time (or label for TimelineLite/TimelineMax instances) from which the animation should begin playing (if none is defined, it will begin playing from wherever the playhead currently is). +
 
suppressEvents:Boolean (default = true) — If true (the default), no events or callbacks will be triggered when the playhead moves to the new position defined in the from parameter. +

Returns
* — self (makes chaining easier) +
restart()method 
public function restart(includeDelay:Boolean = false, suppressEvents:Boolean = true):*

+ Restarts and begins playing forward from the beginning. + +

+ //restarts, not including any delay that was defined
+ myAnimation.restart();
+ 
+ //restarts, including any delay, and doesn't suppress events during the initial move back to time:0
+ myAnimation.restart(true, false);
+         
+ +

Parameters
includeDelay:Boolean (default = false) — Determines whether or not the delay (if any) is honored when restarting. For example, if a tween has a delay of 1 second, like new TweenLite(mc, 2, {x:100, delay:1}); and then later restart() is called, it will begin immediately, but restart(true) will cause the delay to be honored so that it won't begin for another 1 second. +
 
suppressEvents:Boolean (default = true) — If true (the default), no events or callbacks will be triggered when the playhead moves to the new position defined in the time parameter. +

Returns
* — self (makes chaining easier) +
resume()method 
public function resume(from:* = null, suppressEvents:Boolean = true):*

+ Resumes playing without altering direction (forward or reversed), optionally jumping to a specific time first. + +

If you define a time to jump to (the first parameter, which could also be a label for TimelineLite + or TimelineMax instances), the playhead moves there immediately and if there are any + events/callbacks inbetween where the playhead was and the new time, they will not be triggered + because by default suppressEvents (the 2nd parameter) is true. + Think of it like picking the needle up on a record player and moving it to a new position + before placing it back on the record. If, however, you do not want the events/callbacks suppressed + during that initial move, simply set the suppressEvents parameter to false.

+ +
+ //resumes from wherever the playhead currently is:
+ myAnimation.resume();
+ 
+ //jumps to exactly 2-seconds into the animation and then resumes playback:
+ myAnimation.resume(2);
+ 
+ //jumps to exactly 2-seconds into the animation and resumes playbck but doesn't suppress events during the initial move:
+ myAnimation.resume(2, false);
+         
+ +

Parameters
from:* (default = null) — The time (or label for TimelineLite/TimelineMax instances) that the instance should jump to before resuming playback (if none is defined, it will resume wherever the playhead is currently located). +
 
suppressEvents:Boolean (default = true) — If true (the default), no events or callbacks will be triggered when the playhead moves to the new position defined in the from parameter. +

Returns
* — self (makes chaining easier) +
reverse()method 
public function reverse(from:* = null, suppressEvents:Boolean = true):*

+ Reverses playback so that all aspects of the animation are oriented backwards including, for example, + a tween's ease. This will cause the instance's time and totalTime to move + back towards zero as well. You can optionally define a specific time to jump to before reversing + (by default it begins playing in reverse from wherever the playhead currently is). + Calling reverse() also ensures that the instance is neither paused nor reversed. + +

To jump to the very end of the animation and play in reverse from there, use 0 as the + "from" parameter, like reverse(0).

+ +

To check whether or not the instance is reversed, use the reversed() method, like + if (myAnimation.reversed()) {...}

+ +

If you define a "from" time (the first parameter, which could also be a label for TimelineLite + or TimelineMax instances), the playhead moves there immediately and if there are any + events/callbacks inbetween where the playhead was and the new time, they will not be triggered + because by default suppressEvents (the 2nd parameter) is true. + Think of it like picking the needle up on a record player and moving it to a new position + before placing it back on the record. If, however, you do not want the events/callbacks suppressed + during that initial move, simply set the suppressEvents parameter to false.

+ +
+ //reverses playback from wherever the playhead currently is:
+ myAnimation.reverse();
+ 
+ //reverses playback from exactly 2 seconds into the animation:
+ myAnimation.reverse(2);
+ 
+ //reverses playback from exactly 2 seconds into the animation but doesn't suppress events during the initial move:
+ myAnimation.reverse(2, false);
+ 
+ //reverses playback from the very END of the animation:
+ myAnimation.reverse(0);
+  
+ //reverses playback starting from exactly 1 second before the end of the animation:
+ myAnimation.reverse(-1);
+ 
+ //flips the orientation (if it's forward, it will go backward, if it is backward, it will go forward):
+ if (myAnimation.reversed()) {
+     myAnimation.play();
+ } else {
+     myAnimation.reverse();
+ }
+ 
+ //flips the orientation using the reversed() method instead (shorter version of the code above):
+ myAnimation.reversed( !myAnimation.reversed() );
+         
+ +

Parameters
from:* (default = null) — The time (or label for TimelineLite/TimelineMax instances) from which the animation should begin playing in reverse (if none is defined, it will begin playing from wherever the playhead currently is). To begin at the very end of the animation, use 0. Negative numbers are relative to the end of the animation, so -1 would be 1 second from the end. +
 
suppressEvents:Boolean (default = true) — If true (the default), no events or callbacks will be triggered when the playhead moves to the new position defined in the from parameter. +

Returns
* — self (makes chaining easier) +
reversed()method 
public function reversed(value:Boolean = false):*

+ Gets or sets the animation's reversed state which indicates whether or not the animation + should be played backwards. This value is not affected by yoyo repeats + (TweenMax and TimelineMax only) and it does not take into account the reversed state of + anscestor timelines. So for example, a tween that is not reversed might appear reversed + if its parent timeline (or any ancenstor timeline) is reversed. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining.

+ +
+var rev = myAnimation.reversed(); //gets current orientation
+myAnimation.reversed( true ); //sets the orientation to reversed
+myAnimation.reversed( !myAnimation.reversed() ); //toggles the orientation
+
+ +

Parameters
value:Boolean (default = false) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

seek()method 
public function seek(time:*, suppressEvents:Boolean = true):*

+ Jumps to a specific time without affecting whether or not the instance is paused or reversed. + +

If there are any events/callbacks inbetween where the playhead was and the new time, + they will not be triggered because by default suppressEvents (the 2nd parameter) + is true. Think of it like picking the needle up on a record player and moving it + to a new position before placing it back on the record. If, however, you do not want the + events/callbacks suppressed during that initial move, simply set the suppressEvents + parameter to false.

+ +
+ //jumps to exactly 2 seconds
+ myAnimation.seek(2);
+ 
+ //jumps to exactly 2 seconds but doesn't suppress events during the initial move:
+ myAnimation.seek(2, false);
+         
+ +

Parameters
time:* — The time (or label for TimelineLite/TimelineMax instances) to go to. +
 
suppressEvents:Boolean (default = true) — If true (the default), no events or callbacks will be triggered when the playhead moves to the new position defined in the time parameter. +

Returns
* — self (makes chaining easier) +
startTime()method 
public function startTime(value:Number):*

+ Gets or sets the time at which the animation begins on its parent timeline (after any delay + that was defined). For example, if a tween starts at exactly 3 seconds into the timeline + on which it is placed, the tween's startTime would be 3. + +

The startTime may be automatically adjusted to make the timing appear + seamless if the parent timeline's smoothChildTiming property is true + and a timing-dependent change is made on-the-fly, like reverse() is called or + timeScale() is changed, etc. See the documentation for the smoothChildTiming + property of timelines for more details.

+ +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining.

+ +
+var start = myAnimation.startTime(); //gets current start time
+myAnimation.startTime(2); //sets the start time
+
+

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +
time()method 
public function time(value:Number, suppressEvents:Boolean = false):*

+ Gets or sets the local position of the playhead (essentially the current time), + described in seconds (or frames for frames-based animations) which + will never be less than 0 or greater than the animation's duration. + For example, if the duration is 10 and you were to watch the + time during the course of the animation, you'd see it go from 0 + at the beginning to 10 at the end. Setting time to 5 would cause the + animation to jump to its midway point (because it's half of the duration). + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining.

+ +
+var currentTime = myAnimation.time(); //gets current time
+myAnimation.time(2); //sets time, jumping to new value just like seek().
+
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. Negative values will be interpreted from the END of the animation. +
 
suppressEvents:Boolean (default = false) — If true, no events or callbacks will be triggered when the playhead moves to the new position defined in the value parameter. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

timeScale()method 
public function timeScale(value:Number):*

+ Factor that's used to scale time in the animation where 1 = normal speed (the default), + 0.5 = half speed, 2 = double speed, etc. For example, if an animation's duration + is 2 but its timeScale is 0.5, it will take 4 seconds to finish. If you nest that + animation in a timeline whose timeScale is 0.5 as well, it would take 8 seconds + to finish. You can even tween the timeScale to gradually slow it down or speed it up. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myAnimation.timeScale(2).play(1);

+ +
+var currentTimeScale = myAnimation.timeScale(); //gets current timeScale
+myAnimation.timeScale( 0.5 ); //sets timeScale to half-speed
+
+ +

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

totalDuration()method 
public function totalDuration(value:Number):*

+ Gets or sets the animation's total duration including + any repeats or repeatDelays (which are only available in TweenMax and TimelineMax). + For example, if a TweenMax instance has a duration of 2 and a repeat of 3, + its totalDuration would be 8 (one standard play plus 3 repeats equals 4 total cycles). + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining, like myAnimation.totalDuration(2).delay(0.5).play(1);

+ +
+ var ctd = myAnimation.totalDuration(); //gets current total duration
+ myAnimation.totalDuration(2); //sets total duration
+         
+

Parameters
value:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also

totalTime()method 
public function totalTime(time:Number, suppressEvents:Boolean = false):*

+ Gets or sets the position of the playhead according to the totalDuration + which includes any repeats and repeatDelays (only available + in TweenMax and TimelineMax). For example, if a TweenMax instance has a + duration of 2 and a repeat of 3, totalTime + will go from 0 to 8 during the course of the tween (plays once then repeats 3 times, + making 4 total cycles) whereas time will go from 0 to 2 a total of 4 times. + If you added a repeatDelay of 1, that would make the totalTime + go from 0 to 11 over the course of the tween. + +

This method serves as both a getter and setter. Omitting the parameter returns the current + value (getter), whereas defining the parameter sets the value (setter) and returns the instance + itself for easier chaining.

+ +

totalTime will never exceed the totalDuration, nor will it be + less than 0 (values will be clipped appropriately). Negative values will be interpreted from + the END of the animation. For example, -2 would be 2 seconds before the end. If the + animation's totalDuration is 6 and you do myAnimation.totalTime(-2), + it will jump to a totalTime of 4.

+ +
+ var tt = myAnimation.totalTime(); //gets total time
+ myAnimation.totalTime(2); //sets total time, jumping to new value just like seek().
+         
+ +

Parameters
time:Number (default = NaN) — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. Negative values will be interpreted from the END of the animation. +
 
suppressEvents:Boolean (default = false) — If true, no events or callbacks will be triggered when the playhead moves to the new position defined in the time parameter. +

Returns
* — Omitting the parameter returns the current value (getter), whereas defining the parameter sets the value (setter) and returns the instance itself for easier chaining. + +

See also





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/core/SimpleTimeline.html b/duo/js/greensock-v12-js/docs/com/greensock/core/SimpleTimeline.html new file mode 100755 index 0000000..81af951 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/core/SimpleTimeline.html @@ -0,0 +1,97 @@ +com.greensock.core.SimpleTimeline +
Packagecom.greensock.core
Classpublic class SimpleTimeline
InheritanceSimpleTimeline Inheritance Animation Inheritance Object
Subclasses TimelineLite

+ SimpleTimeline is the base class for TimelineLite and TimelineMax, providing the + most basic timeline functionality and it is used for the root timelines in TweenLite but is only + intended for internal use in the GreenSock tweening platform. It is meant to be very fast and lightweight. + +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  autoRemoveChildren : Boolean
If true, child tweens/timelines will be removed as soon as they complete.
SimpleTimeline
 Inheriteddata : *
A place to store any data you want (initially populated with vars.data if it exists).
Animation
  smoothChildTiming : Boolean
+ Controls whether or not child tweens/timelines are repositioned automatically (changing their startTime) + in order to maintain smooth playback when properties are changed on-the-fly.
SimpleTimeline
 Inheritedticker : Shape
[static] + The object that dispatches a "tick" event each time the engine updates, making it easy for + you to add your own listener(s) to run custom logic after each update (great for game developers).
Animation
 Inheritedtimeline : SimpleTimeline
[Read-only] Parent timeline.
Animation
 Inheritedvars : Object
The vars object passed into the constructor which stores configuration variables like onComplete, onUpdate, etc.
Animation
Public Methods
 MethodDefined By
  
SimpleTimeline(vars:Object = null)
+ Constructor + +
SimpleTimeline
 Inherited
delay(value:Number):*
+ Gets or sets the animation's initial delay which is the length of time in seconds + (or frames for frames-based tweens) before the animation should begin.
Animation
 Inherited
duration(value:Number):*
+ Gets or sets the animation's duration, not including any repeats or repeatDelays + (which are only available in TweenMax and TimelineMax).
Animation
 Inherited
eventCallback(type:String, callback:Function = null, params:Array = null, scope:* = null):*
+ Gets or sets an event callback like "onComplete", "onUpdate", "onStart", "onReverseComplete" + or "onRepeat" (onRepeat only applies to TweenMax or TimelineMax instances) + along with any parameters that should be passed to that callback.
Animation
  
insert(tween:*, time:* = 0):*
+ Inserts a TweenLite, TweenMax, TimelineLite, or TimelineMax instance into the timeline at a specific time.
SimpleTimeline
 Inherited
+ Clears any initialization data (like starting/ending values in tweens) which can be useful if, for example, + you want to restart a tween without reverting to any previously recorded starting values.
Animation
 Inherited
kill(vars:Object = null, target:Object = null):*
+ Kills the animation entirely or in part depending on the parameters.
Animation
 Inherited
pause(atTime:* = null, suppressEvents:Boolean = true):*
+ Pauses the instance, optionally jumping to a specific time.
Animation
 Inherited
paused(value:Boolean = false):*
+ Gets or sets the animation's paused state which indicates whether or not the animation + is currently paused.
Animation
 Inherited
play(from:* = null, suppressEvents:Boolean = true):*
+ Begins playing forward, optionally from a specific time (by default playback begins from + wherever the playhead currently is).
Animation
  
render(time:Number, suppressEvents:Boolean = false, force:Boolean = false):void
[override]
SimpleTimeline
 Inherited
restart(includeDelay:Boolean = false, suppressEvents:Boolean = true):*
+ Restarts and begins playing forward from the beginning.
Animation
 Inherited
resume(from:* = null, suppressEvents:Boolean = true):*
+ Resumes playing without altering direction (forward or reversed), optionally jumping to a specific time first.
Animation
 Inherited
reverse(from:* = null, suppressEvents:Boolean = true):*
+ Reverses playback so that all aspects of the animation are oriented backwards including, for example, + a tween's ease.
Animation
 Inherited
reversed(value:Boolean = false):*
+ Gets or sets the animation's reversed state which indicates whether or not the animation + should be played backwards.
Animation
 Inherited
seek(time:*, suppressEvents:Boolean = true):*
+ Jumps to a specific time without affecting whether or not the instance is paused or reversed.
Animation
 Inherited
startTime(value:Number):*
+ Gets or sets the time at which the animation begins on its parent timeline (after any delay + that was defined).
Animation
 Inherited
time(value:Number, suppressEvents:Boolean = false):*
+ Gets or sets the local position of the playhead (essentially the current time), + described in seconds (or frames for frames-based animations) which + will never be less than 0 or greater than the animation's duration.
Animation
 Inherited
timeScale(value:Number):*
+ Factor that's used to scale time in the animation where 1 = normal speed (the default), + 0.5 = half speed, 2 = double speed, etc.
Animation
 Inherited
totalDuration(value:Number):*
+ Gets or sets the animation's total duration including + any repeats or repeatDelays (which are only available in TweenMax and TimelineMax).
Animation
 Inherited
totalTime(time:Number, suppressEvents:Boolean = false):*
+ Gets or sets the position of the playhead according to the totalDuration + which includes any repeats and repeatDelays (only available + in TweenMax and TimelineMax).
Animation
Property Detail
autoRemoveChildrenproperty
public var autoRemoveChildren:Boolean

If true, child tweens/timelines will be removed as soon as they complete. (false by default except on the root timeline(s))

smoothChildTimingproperty 
public var smoothChildTiming:Boolean

+ Controls whether or not child tweens/timelines are repositioned automatically (changing their startTime) + in order to maintain smooth playback when properties are changed on-the-fly. For example, imagine that + the timeline's playhead is on a child tween that is 75% complete, moving mc.x from 0 to 100 and then + that tween's reverse() method is called. If smoothChildTiming is false + (the default except for the root timelines), the tween would flip in place, keeping its startTime + consistent. Therefore the playhead of the timeline would now be at the tween's 25% completion point instead + of 75%. Remember, the timeline's playhead position and direction are unaffected by child tween/timeline changes. + mc.x would jump from 75 to 25, but the tween's position in the timeline would remain consistent. + However, if smoothChildTiming is true, that child tween's startTime would + be adjusted so that the timeline's playhead intersects with the same spot on the tween (75% complete) as it had + immediately before reverse() was called, thus playback appears perfectly smooth. mc.x would + still be 75 and it would continue from there as the playhead moves on, but since the tween is reversed now + mc.x will travel back towards 0 instead of 100. Ultimately it's a decision between prioritizing smooth + on-the-fly playback (true) or consistent position(s) of child tweens/timelines (false). + +

Some examples of on-the-fly changes to child tweens/timelines that could cause their startTime + to change when smoothChildTiming is true are: reversed, timeScale, progress, + totalProgress, time, totalTime, delay, pause, resume, duration, and totalDuration.

+

Constructor Detail
SimpleTimeline()Constructor
public function SimpleTimeline(vars:Object = null)

+ Constructor + +

Parameters
vars:Object (default = null) — Object containing configuration variables like onComplete, onUpdate, onStart, data, etc. +
Method Detail
insert()method
public function insert(tween:*, time:* = 0):*

+ Inserts a TweenLite, TweenMax, TimelineLite, or TimelineMax instance into the timeline at a specific time. + In classes like TimelineLite and TimelineMax that override this method, it allows things like callbacks, + labels, and arrays of tweens/timelines/callbacks/labels to be inserted too. They also allow the time to + be defined in terms of either a numeric time or a label (String). + +

Parameters
tween:* — TweenLite, TweenMax, TimelineLite, or TimelineMax instance to insert +
 
time:* (default = 0) — The time in seconds (or frames for frames-based timelines) at which the tween/timeline should be inserted. For example, myTimeline.insert(myTween, 3) would insert myTween 3 seconds into the timeline. +

Returns
* — this timeline instance (useful for chaining like myTimeline.insert(...).insert(...)) +
render()method 
override public function render(time:Number, suppressEvents:Boolean = false, force:Boolean = false):void

Parameters
time:Number
 
suppressEvents:Boolean (default = false)
 
force:Boolean (default = false)





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/core/class-list.html b/duo/js/greensock-v12-js/docs/com/greensock/core/class-list.html new file mode 100755 index 0000000..31e7005 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/core/class-list.html @@ -0,0 +1 @@ +com.greensock.core - GreenSock JavaScript Documentation

Package com.greensock.core

Classes
Animation
SimpleTimeline
\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/core/package-detail.html b/duo/js/greensock-v12-js/docs/com/greensock/core/package-detail.html new file mode 100755 index 0000000..fda7fa3 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/core/package-detail.html @@ -0,0 +1,19 @@ +com.greensock.core Summary +



Classes
 ClassDescription
 Animation + Base class for all TweenLite, TweenMax, TimelineLite, and TimelineMax classes, providing + core methods/properties/functionality, but there is no reason to create an instance of this + class directly.
 SimpleTimeline + SimpleTimeline is the base class for TimelineLite and TimelineMax, providing the + most basic timeline functionality and it is used for the root timelines in TweenLite but is only + intended for internal use in the GreenSock tweening platform.

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Back.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Back.html new file mode 100755 index 0000000..112c740 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Back.html @@ -0,0 +1,28 @@ +com.greensock.easing.Back +
Packagecom.greensock.easing
Classpublic final class Back
InheritanceBack Inheritance Object

+ Eases with an overshoot either at the beginning (easeIn), the end (easeOut), or both (easeInOut). + Back is a convenience class that congregates the 3 types of Back eases (BackIn, BackOut, + and BackInOut) as static properties so that they can be referenced using the standard synatax, like + Back.easeIn, Back.easeOut, and Back.easeInOut. + +

You can configure the amount of overshoot using the config() method, like + TweenLite.to(obj, 1, {x:100, ease:Back.easeOut.config(3)}); +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : BackIn
[static] Eases in with an overshoot, initially dipping below the starting value before accelerating towards the end.
Back
  easeInOut : BackInOut
[static] Eases in and out with an overshoot, initially dipping below the starting value before accelerating towards the end, overshooting it and easing out.
Back
  easeOut : BackOut
[static] Eases out with an overshoot.
Back
Property Detail
easeInproperty
public static var easeIn:BackIn

Eases in with an overshoot, initially dipping below the starting value before accelerating towards the end.

easeInOutproperty 
public static var easeInOut:BackInOut

Eases in and out with an overshoot, initially dipping below the starting value before accelerating towards the end, overshooting it and easing out.

easeOutproperty 
public static var easeOut:BackOut

Eases out with an overshoot.





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Bounce.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Bounce.html new file mode 100755 index 0000000..7704773 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Bounce.html @@ -0,0 +1,24 @@ +com.greensock.easing.Bounce +
Packagecom.greensock.easing
Classpublic final class Bounce
InheritanceBounce Inheritance Object

+ Eases, bouncing either at the beginning (easeIn), the end (easeOut), or both (easeInOut). + Bounce is a convenience class that congregates the 3 types of Bounce eases (BounceIn, BounceOut, + and BounceInOut) as static properties so that they can be referenced using the standard synatax, like + Bounce.easeIn, Bounce.easeOut, and Bounce.easeInOut. + +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : BounceIn
[static] Bounces slightly at first, then to a greater degree over time, accelerating as the ease progresses.
Bounce
  easeInOut : BounceInOut
[static] Bounces in increasing degree towards the center of the ease, then eases out, bouncing to the end (decreasing in degree at the end).
Bounce
  easeOut : BounceOut
[static] Eases out, bouncing at the end.
Bounce
Property Detail
easeInproperty
public static var easeIn:BounceIn

Bounces slightly at first, then to a greater degree over time, accelerating as the ease progresses.

easeInOutproperty 
public static var easeInOut:BounceInOut

Bounces in increasing degree towards the center of the ease, then eases out, bouncing to the end (decreasing in degree at the end).

easeOutproperty 
public static var easeOut:BounceOut

Eases out, bouncing at the end.





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Circ.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Circ.html new file mode 100755 index 0000000..f450584 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Circ.html @@ -0,0 +1,24 @@ +com.greensock.easing.Circ +
Packagecom.greensock.easing
Classpublic final class Circ
InheritanceCirc Inheritance Object

+ Eases with an abrupt change in velocity either at the beginning (easeIn), the end (easeOut), or both (easeInOut). + Circ is a convenience class that congregates the 3 types of Circ eases (CircIn, CircOut, + and CircInOut) as static properties so that they can be referenced using the standard synatax, like + Circ.easeIn, Circ.easeOut, and Circ.easeInOut. + +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : CircIn
[static] Eases in with an abrupt change in velocity.
Circ
  easeInOut : CircInOut
[static] Eases in and out with an abrupt change in velocity.
Circ
  easeOut : CircOut
[static] Eases out with an abrupt change in velocity.
Circ
Property Detail
easeInproperty
public static var easeIn:CircIn

Eases in with an abrupt change in velocity.

easeInOutproperty 
public static var easeInOut:CircInOut

Eases in and out with an abrupt change in velocity.

easeOutproperty 
public static var easeOut:CircOut

Eases out with an abrupt change in velocity.





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Cubic.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Cubic.html new file mode 100755 index 0000000..20e9ef9 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Cubic.html @@ -0,0 +1,37 @@ +com.greensock.easing.Cubic +
Packagecom.greensock.easing
Classpublic final class Cubic
InheritanceCubic Inheritance Object

+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to the Power2 ease. The more power, the more + exaggerated the easing effect. Using a numeric approach like Power2 instead of Cubic makes experimenting + easier and the code reads more intuitively. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) are + accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Cubic.easeOut}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : Ease
[static] Eases in with a power of 2
Cubic
  easeInOut : Ease
[static] eases in and then out with a power of 2
Cubic
  easeOut : Ease
[static] Eases out with a power of 2
Cubic
Property Detail
easeInproperty
public static var easeIn:Ease

Eases in with a power of 2

easeInOutproperty 
public static var easeInOut:Ease

eases in and then out with a power of 2

easeOutproperty 
public static var easeOut:Ease

Eases out with a power of 2





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Ease.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Ease.html new file mode 100755 index 0000000..3ba33be --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Ease.html @@ -0,0 +1,74 @@ +com.greensock.easing.Ease +
Packagecom.greensock.easing
Classpublic class Ease
InheritanceEase Inheritance Object
Subclasses Linear, SlowMo, SteppedEase

+ Base class for all GreenSock easing equations. In its simplest form, an Ease + is responsible for translating linear time (typically represented as a number + between 0 and 1 where 0 is the beginning, 0.5 is halfway complete, and 1 is + the end) into a value that has a different rate of change but still starts + at 0 and ends at 1. In the GreenSock platform, eases are used to give + tweens/animations the look and feel that the animator desires. For example, + a ball rolling to a stop would decelerate over time (easeOut) rather than using + a linear velocity. An Elastic ease could be used to make an object appear as + though it is loosely attached somewhere and is snapping into place with loose + (or tight) tension. + +

All Ease instances have a getRatio() method that is responsible + for the translation of the progress ratio which the tween typically feeds in. + End users almost never need to directly feed any values to or get any values from + an Ease instance - the tweens will do that internally.

+ +

The base Ease class handles most of the common power-based easeIn/easeOut/eaesInOut + calculations (like Linear, Quad, Cubic, Quart, Quint, and Strong) internally. + You can define a separate function that uses what was considered the 4 standard + easing parameters by Adobe and many others (time, start, change, duration) and + Ease will serve as a proxy in order to maximize backwards compatibility and usability. + For example, if you have a custom method that you created like this:

+
+function myEase(t:Number, s:Number, c:Number, d:Number):Number {
+    return s+(t=t/d);
+}
+
+ You could still use that by wrapping Ease around it like this: +
+import com.greensock.*;
+import com.greensock.easing.*;
+ 
+TweenLite.to(mc, 5, {x:600, ease:new Ease(myEase)});
+
+

In the above example, the anytime the Ease's getRatio() method is called, it + would feed the first parameter as a ratio between 0 and 1 and the rest of the 3 parameters + would always be 0, 1, 1. This is all done transparently by TweenLite/TweenMax, so you + really shouldn't need to worry about this.

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Methods
 MethodDefined By
  
Ease(func:Function = null, extraParams:Array = null, type:Number = 0, power:Number = 0)
+ Constructor + +
Ease
  
getRatio(p:Number):Number
+ Translates the tween's progress ratio into the corresponding ease ratio.
Ease
Constructor Detail
Ease()Constructor
public function Ease(func:Function = null, extraParams:Array = null, type:Number = 0, power:Number = 0)

+ Constructor + +

Parameters
func:Function (default = null) — Function (if any) that should be proxied. This is completely optional and is in fact rarely used except when you have your own custom ease function that follows the standard ease parameter pattern like time, start, change, duration. +
 
extraParams:Array (default = null) — If any extra parameters beyond the standard 4 (time, start, change, duration) need to be fed to the func function, define them as an array here. For example, the old Elastic.easeOut accepts 2 extra parameters in its standard equation (although the newer GreenSock version uses the more modern config() method for configuring the ease and doesn't require any extraPrams here) +
 
type:Number (default = 0) — Integer indicating the type of ease where 1 is easeOut, 2 is easeIn, 3 is easeInOut, and 0 is none of these. +
 
power:Number (default = 0) — Power of the ease where Linear is 0, Quad is 1, Cubic is 2, Quart is 3, Quint (and Strong) is 4, etc. +
Method Detail
getRatio()method
public function getRatio(p:Number):Number

+ Translates the tween's progress ratio into the corresponding ease ratio. This is the heart of the Ease, where it does all its work. + +

Parameters
p:Number — progress ratio (a value between 0 and 1 indicating the progress of the tween/ease) +

Returns
Number — translated number +




\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/EaseLookup.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/EaseLookup.html new file mode 100755 index 0000000..fcc2107 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/EaseLookup.html @@ -0,0 +1,41 @@ +com.greensock.easing.EaseLookup +
Packagecom.greensock.easing
Classpublic class EaseLookup
InheritanceEaseLookup Inheritance Object

+ EaseLookup enables you to find the easing function associated with a particular name (String), + like "strongEaseOut" which can be useful when loading in XML data that comes in as Strings but + needs to be translated to native function references. + +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Methods
 MethodDefined By
  
find(name:String):Ease
[static] + Finds the easing function associated with a particular name (String), like "strongEaseOut".
EaseLookup
Method Detail
find()method
public static function find(name:String):Ease

+ Finds the easing function associated with a particular name (String), like "strongEaseOut". This can be useful when + loading in XML data that comes in as Strings but needs to be translated to native function references. You can pass in + the name with or without the period, and it is case insensitive, so any of the following will find the Strong.easeOut function: + +

EaseLookup.find("Strong.easeOut")

+

EaseLookup.find("strongEaseOut")

+

EaseLookup.find("strongeaseout")

+ +

You can translate strings directly when tweening, like this:

+ +

+ TweenLite.to(mc, 1, {x:100, ease:EaseLookup.find(myString)}); +

+ +

Parameters
name:String — The name of the easing function, with or without the period and case insensitive (i.e. "Strong.easeOut" or "strongEaseOut") +

Returns
Ease — The easing function associated with the name +




\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Elastic.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Elastic.html new file mode 100755 index 0000000..29c7f1c --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Elastic.html @@ -0,0 +1,28 @@ +com.greensock.easing.Elastic +
Packagecom.greensock.easing
Classpublic final class Elastic
InheritanceElastic Inheritance Object

+ Eases with an elastic effect either at the beginning (easeIn), the end (easeOut), or both (easeInOut). + Elastic is a convenience class that congregates the 3 types of Elastic eases (ElasticIn, ElasticOut, + and ElasticInOut) as static properties so that they can be referenced using the standard synatax, like + Elastic.easeIn, Elastic.easeOut, and Elastic.easeInOut. + +

You can configure the amplitude and period of the sine wave using the config() method, like + TweenLite.to(obj, 1, {x:100, ease:Elastic.easeOut.config(0.5, 2)}); +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : ElasticIn
[static] Eases using a sine wave that starts slowly and then accelerates over time
Elastic
  easeInOut : ElasticInOut
[static] Eases using a sine wave that starts slowly, then accelerates and then decelerates over time.
Elastic
  easeOut : ElasticOut
[static] Eases using a sine wave that starts fast and then decelerates over time.
Elastic
Property Detail
easeInproperty
public static var easeIn:ElasticIn

Eases using a sine wave that starts slowly and then accelerates over time

easeInOutproperty 
public static var easeInOut:ElasticInOut

Eases using a sine wave that starts slowly, then accelerates and then decelerates over time.

easeOutproperty 
public static var easeOut:ElasticOut

Eases using a sine wave that starts fast and then decelerates over time.





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Expo.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Expo.html new file mode 100755 index 0000000..edf5274 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Expo.html @@ -0,0 +1,39 @@ +com.greensock.easing.Expo +
Packagecom.greensock.easing
Classpublic final class Expo
InheritanceExpo Inheritance Object

+ Eases in a strong fashion either at the beginning (easeIn), the end (easeOut), or both (easeInOut). + Expo is a convenience class that congregates the 3 types of Expo eases (ExpoIn, ExpoOut, + and ExpoInOut) as static properties so that they can be referenced using the standard synatax, like + Expo.easeIn, Expo.easeOut, and Expo.easeInOut. + +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : ExpoIn
[static] + Eases in a strong fashion starting out slowly and then accelerating.
Expo
  easeInOut : ExpoInOut
[static] + Eases in a strong fashion starting out slowly and then accelerating, then decelerating at the end.
Expo
  easeOut : ExpoOut
[static] + Eases out in a strong fashion starting out fast and then decelerating.
Expo
Property Detail
easeInproperty
public static var easeIn:ExpoIn

+ Eases in a strong fashion starting out slowly and then accelerating. Produces an effect similar to the + popular "Zeno's paradox" style of scripted easing, where each interval of time decreases the remaining + distance by a constant proportion. +

easeInOutproperty 
public static var easeInOut:ExpoInOut

+ Eases in a strong fashion starting out slowly and then accelerating, then decelerating at the end. + Produces an effect similar to the popular "Zeno's paradox" style of scripted easing, where each + interval of time decreases the remaining distance by a constant proportion. +

easeOutproperty 
public static var easeOut:ExpoOut

+ Eases out in a strong fashion starting out fast and then decelerating. Produces an effect similar to the + popular "Zeno's paradox" style of scripted easing, where each interval of time decreases the remaining + distance by a constant proportion. +





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Linear.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Linear.html new file mode 100755 index 0000000..c6d537a --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Linear.html @@ -0,0 +1,35 @@ +com.greensock.easing.Linear +
Packagecom.greensock.easing
Classpublic final class Linear
InheritanceLinear Inheritance Ease Inheritance Object

+ Linear ease with no acceleration or deceleration. Linear is identical to Power0. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) are + accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Linear.easeNone}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  ease : Linear
[static] The default ease instance which can be reused many times in various tweens in order to conserve memory and improve performance slightly compared to creating a new instance each time.
Linear
  easeIn : Linear
[static] Linear ease with no acceleration or deceleration
Linear
  easeInOut : Linear
[static] Linear ease with no acceleration or deceleration
Linear
  easeNone : Linear
[static] Linear ease with no acceleration or deceleration (for backwards compatibility)
Linear
  easeOut : Linear
[static] Linear ease with no acceleration or deceleration
Linear
Public Methods
 MethodDefined By
  
Constructor
Linear
 Inherited
getRatio(p:Number):Number
+ Translates the tween's progress ratio into the corresponding ease ratio.
Ease
Property Detail
easeproperty
public static var ease:Linear

The default ease instance which can be reused many times in various tweens in order to conserve memory and improve performance slightly compared to creating a new instance each time.

easeInproperty 
public static var easeIn:Linear

Linear ease with no acceleration or deceleration

easeInOutproperty 
public static var easeInOut:Linear

Linear ease with no acceleration or deceleration

easeNoneproperty 
public static var easeNone:Linear

Linear ease with no acceleration or deceleration (for backwards compatibility)

easeOutproperty 
public static var easeOut:Linear

Linear ease with no acceleration or deceleration

Constructor Detail
Linear()Constructor
public function Linear()

Constructor





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Power0.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Power0.html new file mode 100755 index 0000000..bdab684 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Power0.html @@ -0,0 +1,36 @@ +com.greensock.easing.Power0 +
Packagecom.greensock.easing
Classpublic final class Power0
InheritancePower0 Inheritance Object

+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 0 which is identical to Linear but with a more intuitive name. The more power, the more + exaggerated the easing effect. So Power0 actually has no power at all, providing a linear transition. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) are + accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Power0.easeOut}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : Ease
[static] Eases in with a power of 0 (linear).
Power0
  easeInOut : Ease
[static] eases in and then out with a power of 0 (linear).
Power0
  easeOut : Ease
[static] Eases out with a power of 0 (linear).
Power0
Property Detail
easeInproperty
public static var easeIn:Ease

Eases in with a power of 0 (linear). Power0.easeIn, Power0.easeOut, and Power0.easeInOut are all identical because there is no power - they're all linear but use the common naming convention for ease of use.

easeInOutproperty 
public static var easeInOut:Ease

eases in and then out with a power of 0 (linear). Power0.easeIn, Power0.easeOut, and Power0.easeInOut are all identical because there is no power - they're all linear but use the common naming convention for ease of use.

easeOutproperty 
public static var easeOut:Ease

Eases out with a power of 0 (linear). Power0.easeIn, Power0.easeOut, and Power0.easeInOut are all identical because there is no power - they're all linear but use the common naming convention for ease of use.





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Power1.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Power1.html new file mode 100755 index 0000000..e74201d --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Power1.html @@ -0,0 +1,36 @@ +com.greensock.easing.Power1 +
Packagecom.greensock.easing
Classpublic final class Power1
InheritancePower1 Inheritance Object

+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 1 which is identical to Quad but with a more intuitive name. The more power, the more + exaggerated the easing effect. Using a numeric approach like this in the name makes experimenting easier. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) + are accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Power1.easeOut}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : Ease
[static] Eases in with a power of 1
Power1
  easeInOut : Ease
[static] Eases in and then out with a power of 1
Power1
  easeOut : Ease
[static] Eases out with a power of 1
Power1
Property Detail
easeInproperty
public static var easeIn:Ease

Eases in with a power of 1

easeInOutproperty 
public static var easeInOut:Ease

Eases in and then out with a power of 1

easeOutproperty 
public static var easeOut:Ease

Eases out with a power of 1





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Power2.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Power2.html new file mode 100755 index 0000000..23e785d --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Power2.html @@ -0,0 +1,36 @@ +com.greensock.easing.Power2 +
Packagecom.greensock.easing
Classpublic final class Power2
InheritancePower2 Inheritance Object

+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to Cubic but with a more intuitive name. The more power, the more + exaggerated the easing effect. Using a numeric approach like this in the name makes experimenting easier. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) are + accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Power2.easeOut}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : Ease
[static] Eases in with a power of 2
Power2
  easeInOut : Ease
[static] Eases in and then out with a power of 2
Power2
  easeOut : Ease
[static] Eases out with a power of 2
Power2
Property Detail
easeInproperty
public static var easeIn:Ease

Eases in with a power of 2

easeInOutproperty 
public static var easeInOut:Ease

Eases in and then out with a power of 2

easeOutproperty 
public static var easeOut:Ease

Eases out with a power of 2





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Power3.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Power3.html new file mode 100755 index 0000000..579539d --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Power3.html @@ -0,0 +1,36 @@ +com.greensock.easing.Power3 +
Packagecom.greensock.easing
Classpublic final class Power3
InheritancePower3 Inheritance Object

+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 3 which is identical to Quart but with a more intuitive name. The more power, the more + exaggerated the easing effect. Using a numeric approach like this in the name makes experimenting easier. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) + are accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Power3.easeOut}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : Ease
[static] Eases in with a power of 3
Power3
  easeInOut : Ease
[static] Eases in and then out with a power of 3
Power3
  easeOut : Ease
[static] Eases out with a power of 3
Power3
Property Detail
easeInproperty
public static var easeIn:Ease

Eases in with a power of 3

easeInOutproperty 
public static var easeInOut:Ease

Eases in and then out with a power of 3

easeOutproperty 
public static var easeOut:Ease

Eases out with a power of 3





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Power4.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Power4.html new file mode 100755 index 0000000..b548bf9 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Power4.html @@ -0,0 +1,37 @@ +com.greensock.easing.Power4 +
Packagecom.greensock.easing
Classpublic final class Power4
InheritancePower4 Inheritance Object

+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to Quint and Strong but with a more intuitive name. + The more power, the more exaggerated the easing effect. Using a numeric approach like this in the name + makes experimenting easier. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) + are accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Power4.easeOut}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : Ease
[static] Eases in with a power of 4
Power4
  easeInOut : Ease
[static] Eases in and then out with a power of 4
Power4
  easeOut : Ease
[static] Eases out with a power of 4
Power4
Property Detail
easeInproperty
public static var easeIn:Ease

Eases in with a power of 4

easeInOutproperty 
public static var easeInOut:Ease

Eases in and then out with a power of 4

easeOutproperty 
public static var easeOut:Ease

Eases out with a power of 4





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Quad.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Quad.html new file mode 100755 index 0000000..5f5fec6 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Quad.html @@ -0,0 +1,37 @@ +com.greensock.easing.Quad +
Packagecom.greensock.easing
Classpublic final class Quad
InheritanceQuad Inheritance Object

+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 1 which is identical to the Power1 ease. The more power, the more + exaggerated the easing effect. Using a numeric approach like Power1 instead of Quad makes experimenting + easier and the code reads more intuitively. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) are + accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Quad.easeOut}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : Ease
[static] Eases in with a power of 1.
Quad
  easeInOut : Ease
[static] Eases in and then out with a power of 1.
Quad
  easeOut : Ease
[static] Eases out with a power of 1.
Quad
Property Detail
easeInproperty
public static var easeIn:Ease

Eases in with a power of 1.

easeInOutproperty 
public static var easeInOut:Ease

Eases in and then out with a power of 1.

easeOutproperty 
public static var easeOut:Ease

Eases out with a power of 1.





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Quart.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Quart.html new file mode 100755 index 0000000..8772def --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Quart.html @@ -0,0 +1,37 @@ +com.greensock.easing.Quart +
Packagecom.greensock.easing
Classpublic final class Quart
InheritanceQuart Inheritance Object

+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to the Power2 ease. The more power, the more + exaggerated the easing effect. Using a numeric approach like Power2 instead of Quart makes experimenting + easier and the code reads more intuitively. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) are + accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Quart.easeOut}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : Ease
[static] Eases in with a power of 3.
Quart
  easeInOut : Ease
[static] Eases in and then out with a power of 3.
Quart
  easeOut : Ease
[static] Eases out with a power of 3.
Quart
Property Detail
easeInproperty
public static var easeIn:Ease

Eases in with a power of 3.

easeInOutproperty 
public static var easeInOut:Ease

Eases in and then out with a power of 3.

easeOutproperty 
public static var easeOut:Ease

Eases out with a power of 3.





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Quint.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Quint.html new file mode 100755 index 0000000..b3c13fa --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Quint.html @@ -0,0 +1,37 @@ +com.greensock.easing.Quint +
Packagecom.greensock.easing
Classpublic final class Quint
InheritanceQuint Inheritance Object

+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to the Power4 ease. The more power, the more + exaggerated the easing effect. Using a numeric approach like Power4 instead of Quint makes experimenting + easier and the code reads more intuitively. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) are + accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Quint.easeOut}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : Ease
[static] Eases in with a power of 4
Quint
  easeInOut : Ease
[static] Eases in and then out with a power of 4
Quint
  easeOut : Ease
[static] Eases out with a power of 4
Quint
Property Detail
easeInproperty
public static var easeIn:Ease

Eases in with a power of 4

easeInOutproperty 
public static var easeInOut:Ease

Eases in and then out with a power of 4

easeOutproperty 
public static var easeOut:Ease

Eases out with a power of 4





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Sine.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Sine.html new file mode 100755 index 0000000..de0b2b8 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Sine.html @@ -0,0 +1,24 @@ +com.greensock.easing.Sine +
Packagecom.greensock.easing
Classpublic final class Sine
InheritanceSine Inheritance Object

+ Eases with a relatively low power either at the beginning (easeIn), the end (easeOut), or both (easeInOut). + Sine is a convenience class that congregates the 3 types of Sine eases (SineIn, SineOut, + and SineInOut) as static properties so that they can be referenced using the standard synatax, like + Sine.easeIn, Sine.easeOut, and Sine.easeInOut. + +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : SineIn
[static] Eases in with slight acceleration.
Sine
  easeInOut : SineInOut
[static] Eases in and then out with slight acceleration/deceleration.
Sine
  easeOut : SineOut
[static] Eases out with slight deceleration.
Sine
Property Detail
easeInproperty
public static var easeIn:SineIn

Eases in with slight acceleration.

easeInOutproperty 
public static var easeInOut:SineInOut

Eases in and then out with slight acceleration/deceleration.

easeOutproperty 
public static var easeOut:SineOut

Eases out with slight deceleration.





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/SlowMo.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/SlowMo.html new file mode 100755 index 0000000..edfb7e5 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/SlowMo.html @@ -0,0 +1,89 @@ +com.greensock.easing.SlowMo +
Packagecom.greensock.easing
Classpublic class SlowMo
InheritanceSlowMo Inheritance Ease Inheritance Object

+ SlowMo is a configurable ease that produces a slow-motion effect that decelerates initially, then moves + linearly for a certain portion of the ease (which you can choose) and then accelerates again at the end; + it's great for effects like zooming text onto the screen, smoothly moving it long enough for people to + read it, and then zooming it off the screen. Without SlowMo, animators would often try to get the same + effect by sequencing 3 tweens, one with an easeOut, then another with a Linear.easeNone, and finally + an easeIn but the problem was that the eases didn't smoothly transition into one another, so you'd see + sudden shifts in velocity at the joints. SlowMo solves this problem and gives you complete control over + how strong the eases are on each end and what portion of the movement in the middle is linear. + +

The first parameter, linearRatio, determines the proportion of the ease during which + the rate of change will be linear (steady pace). This should be a number between 0 and 1. For example, + 0.5 would be half, so the first 25% of the ease would be easing out (decelerating), then 50% would be + linear, then the final 25% would be easing in (accelerating). If you choose 0.8, that would mean 80% + of the ease would be linear, leaving 10% on each end to ease. The default is 0.7.

+ +

The second parameter, power, determines the strength of the ease at each end. + If you define a value greater than 1, it will actually reverse the linear portion in the middle + which can create interesting effects. The default is 0.7.

+ +

The third parameter, yoyoMode, provides an easy way to create companion tweens that + sync with normal SlowMo tweens. For example, let's say you have a SlowMo tween that is zooming some + text onto the screen and moving it linearly for a while and then zooming off, but you want to + tween that alpha of the text at the beginning and end of the positional tween. Normally, you'd need + to create 2 separate alpha tweens, 1 for the fade-in at the beginning and 1 for the fade-out at the + end and you'd need to calculate their durations manually to ensure that they finish fading in + by the time the linear motion begins and then they start fading out at the end right when the linear + motion completes. But to make this whole process much easier, all you'd need to do is create a separate + tween for the alpha and use the same duration but a SlowMo ease that has its yoyoMode + parameter set to true.

+ +

View the examples



Public Properties
 PropertyDefined By
  ease : SlowMo
[static] The default ease instance which can be reused many times in various tweens in order to conserve memory and improve performance slightly compared to creating a new instance each time.
SlowMo
Public Methods
 MethodDefined By
  
SlowMo(linearRatio:Number = 0.7, power:Number = 0.7, yoyoMode:Boolean = false)
+ Constructor + +
SlowMo
  
config(linearRatio:Number = 0.7, power:Number = 0.7, yoyoMode:Boolean = false):SlowMo
+ Permits customization of the ease with various parameters.
SlowMo
  
getRatio(p:Number):Number
[override] + Translates the tween's progress ratio into the corresponding ease ratio.
SlowMo
Property Detail
easeproperty
public static var ease:SlowMo

The default ease instance which can be reused many times in various tweens in order to conserve memory and improve performance slightly compared to creating a new instance each time.

Constructor Detail
SlowMo()Constructor
public function SlowMo(linearRatio:Number = 0.7, power:Number = 0.7, yoyoMode:Boolean = false)

+ Constructor + +

Parameters
linearRatio:Number (default = 0.7) — the proportion of the ease during which the rate of change will be linear (steady pace). This should be a number between 0 and 1. For example, 0.5 would be half, so the first 25% of the ease would be easing out (decelerating), then 50% would be linear, then the final 25% would be easing in (accelerating). If you choose 0.8, that would mean 80% of the ease would be linear, leaving 10% on each end to ease. The default is 0.7. +
 
power:Number (default = 0.7) — The strength of the ease at each end. If you define a value above 1, it will actually reverse the linear portion in the middle which can create interesting effects. The default is 0.7. +
 
yoyoMode:Boolean (default = false) — If true, the ease will reach its destination value mid-tween and maintain it during the entire linear mode and then go back to the original value at the end (like a yoyo of sorts). This can be very useful if, for example, you want the alpha (or some other property) of some text to fade at the front end of a SlowMo positional ease and then back down again at the end of that positional SlowMo tween. Otherwise you would need to create separate tweens for the beginning and ending fades that match up with that positional tween. Example: TweenLite.to(myText, 5, {x:600, ease:SlowMo.ease.config(0.7, 0.7, false)}); TweenLite.from(myText, 5, {alpha:0, ease:SlowMo.ease.config(0.7, 0.7, true)}); +
Method Detail
config()method
public function config(linearRatio:Number = 0.7, power:Number = 0.7, yoyoMode:Boolean = false):SlowMo

+ Permits customization of the ease with various parameters. + +

Parameters
linearRatio:Number (default = 0.7) — the proportion of the ease during which the rate of change will be linear (steady pace). This should be a number between 0 and 1. For example, 0.5 would be half, so the first 25% of the ease would be easing out (decelerating), then 50% would be linear, then the final 25% would be easing in (accelerating). If you choose 0.8, that would mean 80% of the ease would be linear, leaving 10% on each end to ease. The default is 0.7. +
 
power:Number (default = 0.7) — The strength of the ease at each end. If you define a value above 1, it will actually reverse the linear portion in the middle which can create interesting effects. The default is 0.7. +
 
yoyoMode:Boolean (default = false) — If true, the ease will reach its destination value mid-tween and maintain it during the entire linear mode and then go back to the original value at the end (like a yoyo of sorts). This can be very useful if, for example, you want the alpha (or some other property) of some text to fade at the front end of a SlowMo positional ease and then back down again at the end of that positional SlowMo tween. Otherwise you would need to create separate tweens for the beginning and ending fades that match up with that positional tween. Example: TweenLite.to(myText, 5, {x:600, ease:SlowMo.ease.config(0.7, 0.7, false)}); TweenLite.from(myText, 5, {alpha:0, ease:SlowMo.ease.config(0.7, 0.7, true)}); +

Returns
SlowMo — new SlowMo instance that is configured according to the parameters provided +
getRatio()method 
override public function getRatio(p:Number):Number

+ Translates the tween's progress ratio into the corresponding ease ratio. This is the heart of the Ease, where it does all its work. + +

Parameters
p:Number — progress ratio (a value between 0 and 1 indicating the progress of the tween/ease) +

Returns
Number — translated number +
Examples
Example AS3 example:
+import com.greensock.*;
+import com.greensock.easing.*;
+
+//use the default SlowMo ease (linearRatio of 0.7 and power of 0.7)
+TweenLite.to(myText, 5, {x:600, ease:SlowMo.ease});
+
+//use a new SlowMo ease with 50% of the tween being linear (2.5 seconds) and a power of 0.8
+TweenLite.to(myText, 5, {x:600, ease:new SlowMo(0.5, 0.8)});
+ 
+//this gives the exact same effect as the line above, but uses a different syntax
+TweenLite.to(myText, 5, {x:600, ease:SlowMo.ease.config(0.5, 0.8)});
+ 
+//now let's create an alpha tween that syncs with the above positional tween, fading it in at the beginning and out at the end
+myText.alpha = 0;
+TweenLite.to(myText, 5, {alpha:1, ease:SlowMo.ease.config(0.5, 0.8, true)});
+
+ +

Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +




\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/SteppedEase.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/SteppedEase.html new file mode 100755 index 0000000..d1c4022 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/SteppedEase.html @@ -0,0 +1,53 @@ +com.greensock.easing.SteppedEase +
Packagecom.greensock.easing
Classpublic class SteppedEase
InheritanceSteppedEase Inheritance Ease Inheritance Object

+ Most easing equations give a smooth, gradual transition between the start and end values, but SteppedEase provides + an easy way to define a specific number of steps that the transition should take. For example, if mc.x is 0 and you + want to tween it to 100 with 5 steps (20, 40, 60, 80, and 100) over the course of 2 seconds, you'd do: + +
+TweenLite.to(mc, 2, {x:100, ease:SteppedEase.config(5)});
+
+//or create an instance directly
+var steppedEase = new SteppedEase(5);
+TweenLite.to(mc, 3, {y:300, ease:steppedEase});
+
+ +

Note: SteppedEase is optimized for use with the GreenSock tweenining platform, so it isn't intended to be used with other engines. + Specifically, its easing equation always returns values between 0 and 1.

+ +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Methods
 MethodDefined By
  
SteppedEase(steps:int)
+ Constructor + +
SteppedEase
  
config(steps:int):SteppedEase
[static] + Permits customization of the ease (defining a number of steps).
SteppedEase
  
getRatio(p:Number):Number
[override] + Translates the tween's progress ratio into the corresponding ease ratio.
SteppedEase
Constructor Detail
SteppedEase()Constructor
public function SteppedEase(steps:int)

+ Constructor + +

Parameters
steps:int — Number of steps between the start and the end values. +
Method Detail
config()method
public static function config(steps:int):SteppedEase

+ Permits customization of the ease (defining a number of steps). + +

Parameters
steps:int — Number of steps between the start and the end values. +

Returns
SteppedEase — new SteppedEase instance that is configured according to the parameters provided +
getRatio()method 
override public function getRatio(p:Number):Number

+ Translates the tween's progress ratio into the corresponding ease ratio. This is the heart of the Ease, where it does all its work. + +

Parameters
p:Number — progress ratio (a value between 0 and 1 indicating the progress of the tween/ease) +

Returns
Number — translated number +




\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/Strong.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/Strong.html new file mode 100755 index 0000000..75dd317 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/Strong.html @@ -0,0 +1,37 @@ +com.greensock.easing.Strong +
Packagecom.greensock.easing
Classpublic final class Strong
InheritanceStrong Inheritance Object

+ Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to the Power4 ease. The more power, the more + exaggerated the easing effect. Using a numeric approach like Power4 instead of Strong makes experimenting + easier and the code reads more intuitively. + +

This is one of the eases that is natively accelerated in TweenLite and TweenMax. All of the + "Power" eases and their counterparts (Linear (0), Quad (1), Cubic (2), Quart (3), Quint (4), and Strong (4)) are + accelerated.

+ +

+ Example usage: +

+

+ + TweenLite.to(obj, 1, {x:100, ease:Strong.easeOut}); + +

+ +

+ Copyright 2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Properties
 PropertyDefined By
  easeIn : Ease
[static] Eases in with a power of 4
Strong
  easeInOut : Ease
[static] Eases in and then out with a power of 4
Strong
  easeOut : Ease
[static] Eases out with a power of 4
Strong
Property Detail
easeInproperty
public static var easeIn:Ease

Eases in with a power of 4

easeInOutproperty 
public static var easeInOut:Ease

Eases in and then out with a power of 4

easeOutproperty 
public static var easeOut:Ease

Eases out with a power of 4





\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/class-list.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/class-list.html new file mode 100755 index 0000000..a2dcfcb --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/class-list.html @@ -0,0 +1 @@ +com.greensock.easing - GreenSock JavaScript Documentation

Package com.greensock.easing

Classes
Back
Bounce
Circ
Cubic
Ease
EaseLookup
Elastic
Expo
Linear
Power0
Power1
Power2
Power3
Power4
Quad
Quart
Quint
Sine
SlowMo
SteppedEase
Strong
\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/easing/package-detail.html b/duo/js/greensock-v12-js/docs/com/greensock/easing/package-detail.html new file mode 100755 index 0000000..99917b5 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/easing/package-detail.html @@ -0,0 +1,50 @@ +com.greensock.easing Summary +



Classes
 ClassDescription
 Back + Eases with an overshoot either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 Bounce + Eases, bouncing either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 Circ + Eases with an abrupt change in velocity either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 Cubic + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to the Power2 ease.
 Ease + Base class for all GreenSock easing equations.
 EaseLookup + EaseLookup enables you to find the easing function associated with a particular name (String), + like "strongEaseOut" which can be useful when loading in XML data that comes in as Strings but + needs to be translated to native function references.
 Elastic + Eases with an elastic effect either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 Expo + Eases in a strong fashion either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 Linear + Linear ease with no acceleration or deceleration.
 Power0 + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 0 which is identical to Linear but with a more intuitive name.
 Power1 + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 1 which is identical to Quad but with a more intuitive name.
 Power2 + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to Cubic but with a more intuitive name.
 Power3 + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 3 which is identical to Quart but with a more intuitive name.
 Power4 + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to Quint and Strong but with a more intuitive name.
 Quad + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 1 which is identical to the Power1 ease.
 Quart + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 2 which is identical to the Power2 ease.
 Quint + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to the Power4 ease.
 Sine + Eases with a relatively low power either at the beginning (easeIn), the end (easeOut), or both (easeInOut).
 SlowMo + SlowMo is a configurable ease that produces a slow-motion effect that decelerates initially, then moves + linearly for a certain portion of the ease (which you can choose) and then accelerates again at the end; + it's great for effects like zooming text onto the screen, smoothly moving it long enough for people to + read it, and then zooming it off the screen.
 SteppedEase + Most easing equations give a smooth, gradual transition between the start and end values, but SteppedEase provides + an easy way to define a specific number of steps that the transition should take.
 Strong + Provides an easeIn, easeOut, and easeInOut with a power (or strength) + of 4 which is identical to the Power4 ease.

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/package-detail.html b/duo/js/greensock-v12-js/docs/com/greensock/package-detail.html new file mode 100755 index 0000000..8fa9165 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/package-detail.html @@ -0,0 +1,24 @@ +com.greensock Summary +



Classes
 ClassDescription
 TimelineLite + TimelineLite is a powerful sequencing tool that acts as a container for tweens and + other timelines, making it simple to control them as a whole and precisely manage their + timing.
 TimelineMax + TimelineMax extends TimelineLite, offering exactly the same functionality plus useful + (but non-essential) features like repeat, repeatDelay, yoyo, currentLabel(), addCallback(), + removeCallback(), tweenTo(), tweenFromTo(), getLabelAfter(), getLabelBefore(), + getActive() (and probably more in the future).
 TweenLite + TweenLite is an extremely fast, lightweight, and flexible animation tool that serves as the foundation of + the GreenSock Animation Platform (GSAP), available in AS2, AS3, and JavaScript.
 TweenMax + TweenMax extends TweenLite, adding many useful (but non-essential) features like timeScale(), repeat(), + repeatDelay(), yoyo(), updateTo(), and more.

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/BezierPlugin.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/BezierPlugin.html new file mode 100755 index 0000000..e915334 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/BezierPlugin.html @@ -0,0 +1,240 @@ +com.greensock.plugins.BezierPlugin +
Packagecom.greensock.plugins
Classpublic class BezierPlugin
InheritanceBezierPlugin Inheritance TweenPlugin Inheritance Object

+ Animate virtually any property (or properties) along a Bezier (curved) path which you define + as an array of points/values that can be interpreted 4 different ways (described as the Bezier's "type", like type:"quadratic"): + +
    +
  • + "thru" (the default) - the plugin figures out how to draw the Bezier naturally through + the supplied values using a proprietary algorithm. The values you provide in the array are essentially + treated as anchors on the Bezier and the plugin calculates the control points. The target's current/starting + values are used as the initial anchor. You can define a curviness special property that + allows you to adjust the tension on the Bezier where 0 has no curviness (straight lines), 1 is normal + curviness, 2 is twice the normal curviness, etc. Since "thru" is the default Bezier type, you don't + need to define a type at all if this is the one you want.
  • + +
  • + "soft" - the values that you provide in the array act almost like magnets that attract the + curve towards them, but the Bezier doesn't typically travel through them. They are treated + as control points on a Quadratic Bezier and the plugin creates the necessary intermediate anchors. + The target's current/starting values are used as the initial anchor.
  • + +
  • + "quadratic" - allows you to define standard Quadratic Bezier data (Quadratic Beziers have + 1 control point between each anchor). The array should start with the first anchor, then control point, + then anchor, control point, etc. for as many iterations as you want, but obviously make sure that it + starts and ends with anchors.
  • + +
  • + "cubic" - allows you to define standard Cubic Bezier data (Cubic Beziers have + 2 control points between each anchor). The array should start with the first anchor, then 2 control points, + then anchor, 2 control points, anchor, etc. for as many iterations as you want, but obviously make sure that it + starts and ends with anchors.
  • +
+ +

While it is most common to use x and y (or left and top) properties for + Bezier tweens, you can use any properties (even ones that are function-based getters/setters).

+ +

Inside the bezier object, you must define at least a values property, and there are + several other optional special properties that the BezierPlugin will recognize. Here is a list of them all:

+ +
    +
  • + values : Array [REQUIRED] - the array of your Bezier values as generic objects. + Each object in the array should have matching property names (like "x" and "y"). For example, the array might look like: + [{x:100, y:250}, {x:300, y:0}, {x:500, y:400}] +
  • + +
  • + type : String (default:"thru") - Either "thru", "soft", "quadratic", + or "cubic" as described above, indicating how the values should be interpreted.
  • + +
  • + timeResolution : Number (default:6) - due to the nature of Beziers, plotting the progression + of an object on the path over time can make it appear to speed up or slow down based on the placement + of the control points and the length of each successive segment on the path, so BezierPlugin implements + a technique that reduces or eliminates that variance, but it involves breaking the segments down into + a certain number of pieces which is what timeResolution controls. The greater the number, + the more accurate the time remapping but there is a processing price to pay for greater precision. + The default value of 6 is typically fine, but if you notice slight pace changes on the path you can increase + the timeResolution value. Or, if you want to prioritize speed you could reduce the number. + If you use a timeResolution value of 0, no length measurements will take place internally which + delivers maximum processing speed, but you may notice changes in speed during the animation.
  • + +
  • + curviness : Number (default:1) (only applies to type:"thru") - allows you to adjust the + tension on the Bezier where 0 has no curviness (straight lines), 1 is normal curviness, 2 is twice + the normal curviness, etc. Use any number, not just integers
  • + +
  • + autoRotate : Boolean, Number, or Array (default:false) - to automatically rotate the target according + to its position on the Bezier path, you can use the autoRotate feature. If your Bezier is + affecting the "x" and "y" (or "left" and "top") properties of your target and you don't need to offset the rotation by a certain + amount more than normal, then you can simply set autoRotate:true. Or if you want to offset + the rotation by a certain amount (in degrees), you can define a number like autoRotate:90 (adding + 90 degrees in this example). Or for more advanced controls, you can define autoRotate as an array. + In order to adjust a rotation property accurately, the plugin needs 5 pieces of information: +
      +
    1. Position property 1 (typically "x" or "left")
    2. +
    3. Position property 2 (typically "y" or "top")
    4. +
    5. Rotational property (typically "rotation")
    6. +
    7. Number of degrees (or radians) to add to the new rotation (optional - makes it easy to orient your target properly)
    8. +
    9. Boolean value indicating whether or not the rotational property should be defined in radians rather than degrees (default is false which results in degrees)
    10. +
    + The autoRotate property should be an Array containing these values, like + ["x","y","rotation",90*Math.PI/180,true]. And if you need to affect multiple rotational + properties (like in 3D tweens where the Bezier is going through x,y,z points which could affect rotationX, rotationY, and rotationZ), + you can use an array of arrays, like + [["x","y","rotationZ",0,false], ["z","x","rotationY",0,false], ["z","y","rotationX",0,false]]. + Note: 3D CSS animations aren't supported yet, but you if you're using a canvas-based framework that + recognizes 3D properties, it should certainly be compatible with BezierPlugin.
  • + +
  • + correlate : String (default:"x,y,z,left,top,right,bottom,marginLeft,marginTop,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom") (only applies to type:"thru") - + a comma-delimited list of property names whose relative distances should be correlated when calculating + the Bezier that travels through the points. Since x, y, z, left, top, etc. are all spacial, it is almost always good + to correlate them, but properties like scaleX, scaleY, etc. don't typically need to be correlated. + It is rarely necessary to alter the default correlate value, so there's typically no need to even define one + at all (let the plugin use its defaults).
  • +
+ +

+ IMPORTANT: if you are trying to do a bezier tween of css-related properties, make sure you utilize the + CSSPlugin and put your bezier data inside the css object. BezierPlugin is not + just for css-related properties - it can handle virtually any property of any object.

+ + + SYNTAX +
+//tween the "left" and "top" css properties through the supplied values (notice we put bezier inside the css object and we're passing the array directly to the bezier rather than creating an object with "values" because we're accepting the defaults)
+TweenMax.to(document.getElementById("myDiv"), 5, {css:{bezier:[{left:100, top:250}, {left:300, top:0}, {left:500, top:400}]}, ease:Power1.easeInOut});
+ 
+//if we want to customize things, like the curviness and setting autoRotate:true, we need to define the bezier as an object instead, and pass our array as the "values" property
+TweenMax.to(document.getElementById("myDiv"), 5, {css:{bezier:{curviness:1.25, values:[{x:100, y:250}, {x:300, y:0}, {x:500, y:400}], autoRotate:true}, backgroundColor:"#f00"}, ease:Power1.easeInOut});
+
+//let's define the type as "soft" instead of using the default "thru"
+TweenMax.to(document.getElementById("myDiv"), 5, {css:{bezier:{type:"soft", values:[{x:100, y:250}, {x:300, y:0}, {x:500, y:400}], autoRotate:true}}, ease:Power1.easeInOut});
+ 
+//now we'll do a cubic Bezier and make our target auto rotate but add 45 degrees to the rotation
+TweenMax.to(document.getElementById("myDiv"), 5, {css:{bezier:{type:"cubic", values:[{x:100, y:250}, {x:150, y:100}, {x:300, y:500}, {x:500, y:400}], autoRotate:["x","y","rotation",45,false]}}, ease:Power1.easeInOut});
+
+//NON-CSS, generic x/y property tween: animate obj through the points in the array (notice we're passing the array directly to the bezier rather than creating an object with "values" because we're accepting the defaults)
+TweenMax.to(obj, 5, {bezier:[{x:100, y:250}, {x:300, y:0}, {x:500, y:400}], ease:Power1.easeInOut});
+
+ +

You can tap into BezierPlugin's Bezier drawing algorithm by passing its bezierThrough() method your + array of points/objects and it will spit back and object with all the necessary data, either in Cubic Bezier + form or in Quadratic Bezier form so that you could, for example, draw the path using the canvas's drawing API. + It also has some useful static cubicToQuadratic() and quadraticToCubic() conversion methods.

+ +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Methods
 MethodDefined By
  
bezierThrough(values:Array, curviness:Number = 1, quadratic:Boolean = false, correlate:String = x,y,z, prepend:Object = null, calcDifs:Boolean = false):Object
[static] + Takes an array that contains objects (could be Points, could be generic objects with + any number of properties but they should all match in terms of the names of properties like + [{x:0, y:0, scaleX:0.5}, {x:100, y:-200, scaleX:1.2}, {x:300, y:20, scaleX:0.8}]) and plots Bezier + segments THROUGH those values and returns an array containing a generic object for each Bezier segment.
BezierPlugin
  
cubicToQuadratic(a:Number, b:Number, c:Number, d:Number):Array
[static] + Using the fixed midpoint approach, we return an array of 4 quadratic Beziers that + closely approximates the cubic Bezier data provided.
BezierPlugin
  
quadraticToCubic(a:Number, b:Number, c:Number):Object
[static] + Returns the Cubic equivalent of a Quadratic Bezier.
BezierPlugin
Method Detail
bezierThrough()method
public static function bezierThrough(values:Array, curviness:Number = 1, quadratic:Boolean = false, correlate:String = x,y,z, prepend:Object = null, calcDifs:Boolean = false):Object

+ Takes an array that contains objects (could be Points, could be generic objects with + any number of properties but they should all match in terms of the names of properties like + [{x:0, y:0, scaleX:0.5}, {x:100, y:-200, scaleX:1.2}, {x:300, y:20, scaleX:0.8}]) and plots Bezier + segments THROUGH those values and returns an array containing a generic object for each Bezier segment. By default + Cubic Beziers (which use 2 control points per segment) are used but you can optionally request Quadratic Beziers (1 control + point per segment) instead using the quadratic parameter. + +

For Cubic Beziers (the default), each segment object will have a, b, c, and d properties:

+ +
    +
  • a - the starting anchor value of the Cubic Bezier segment. For example, + bezierThrough([{x:0, y:0, scaleX:0.5}, {x:100, y:-200, scaleX:1.2}, {x:300, y:20, scaleX:0.8}]); + would return an object with "x", "y", and "scaleX" properties, each containing an array of objects, one per Bezier segment and you could + access the first Bezier's initial anchor values like: + myReturnedObject.x[0].a, myReturnedObject.y[0].a, and myReturnedObject.scaleX[0].a
  • +
  • b - the first control point value of the Cubic Bezier segment. For example, + bezierThrough([{x:0, y:0, scaleX:0.5}, {x:100, y:-200, scaleX:1.2}, {x:300, y:20, scaleX:0.8}]); + would return an object with "x", "y", and "scaleX" properties, each containing an array of objects, one per Bezier segment and you could + access the first Bezier's first control point values like: + myReturnedObject.x[0].b, myReturnedObject.y[0].b, and myReturnedObject.scaleX[0].b
  • +
  • c - the second control point value of the Cubic Bezier segment. For example, + bezierThrough([{x:0, y:0, scaleX:0.5}, {x:100, y:-200, scaleX:1.2}, {x:300, y:20, scaleX:0.8}]); + would return an object with "x", "y", and "scaleX" properties, each containing an array of objects, one per Bezier segment and you could + access the first Bezier's second control point values like: + myReturnedObject.x[0].c, myReturnedObject.y[0].c, and myReturnedObject.scaleX[0].c
  • +
  • d - the final anchor value of the Cubic Bezier segment. For example, + bezierThrough([{x:0, y:0, scaleX:0.5}, {x:100, y:-200, scaleX:1.2}, {x:300, y:20, scaleX:0.8}]); + would return an object with "x", "y", and "scaleX" properties, each containing an array of objects, one per Bezier segment and you could + access the first Bezier's final anchor values like: + myReturnedObject.x[0].d, myReturnedObject.y[0].d, and myReturnedObject.scaleX[0].d
  • +
+ + +

If you set the quadratic parameter to true, all of the Bezier segments will contain a, b, + and c properties (NOT d) where b is the only control point. This can be + very useful because some drawing APIs only understand Quadratic Beziers. There are 4 times as many Quadratic Beziers returned as + Cubic Beziers, though, due to the fact that the internal algorithm uses Cubic Beziers to plot the points (they're much more flexible) + and then splits each into 4 Quadratic ones.

+ +
+ //input:
+ var beziers = BezierPlugin.bezierThrough([{x:0, y:0}, {x:250, y:400}, {x:500, y:0}]);
+ 
+ //output:
+ {
+     x:[{a:0, b:0, c:125, d:250}, {a:250, b:375, c:500, d:500}],
+     y:[{a:0, b:0, c:400, d:400}, {a:400, b:400, c:0, d:0}]
+ }
+ + +
+ //get quadratic beziers so that we can use the canvas's drawing API...
+ var beziers = BezierPlugin.bezierThrough([{x:0, y:0}, {x:250, y:400}, {x:500, y:0}], 1, true);
+ 
+ var bx = beziers.x; //the "x" Beziers
+ var by = beziers.y; //the "y" Beziers
+
+ + +

Parameters
values:Array — An array containing generic objects with matching properties (or Point instances) through which the Beziers should be plotted, like [{x:0, y:0, scaleX:0.5}, {x:100, y:-200, scaleX:1.2}, {x:300, y:20, scaleX:0.8}] +
 
curviness:Number (default = 1) — A number (default: 1) that controls the strength of the curves that are plotted through the values. A curviness of 0 would be result in straight lines, 1 is normal curviness, and 2 would be extreme curves. Use any value. +
 
quadratic:Boolean (default = false) — if true, quadratic Bezier information will be returned instead of cubic Bezier data, thus each object in the returned array will only contain a, b, and c properties where b is the control point. +
 
correlate:String (default = x,y,z) — a comma-delimited list of property names whose relative distances should be correlated with each other when calculating the curvature of the Bezier through the values (the default is "x,y,z" because those are almost always properties that should be correlated). +
 
prepend:Object (default = null) — [optional] an object to treat as though it is the first element in the values array (typically only used internally for adding a tween's starting values) +
 
calcDifs:Boolean (default = false) — if true, da, ca, and ba properties will be added to each bezier segment indicating (d - a), (c - a), and (b - a) which is typically only useful for improving animation performance slightly by precalculating those values instead of doing it each time the tween updates. +

Returns
Object — An object with properties matching those from the objects in the values array, with an array assigned to each property populated with an object for each Bezier. The Bezier objects will contain a, b, c (and d if quadratic is not true) properties for the anchors and control points. +
cubicToQuadratic()method 
public static function cubicToQuadratic(a:Number, b:Number, c:Number, d:Number):Array

+ Using the fixed midpoint approach, we return an array of 4 quadratic Beziers that + closely approximates the cubic Bezier data provided. Each quadratic Bezier object contains + a, b, and c properties where a is the starting anchor value, + b is the control point, and c is the ending anchor value. + +

Parameters
a:Number — starting anchor of the cubic Bezier +
 
b:Number — first control point of the cubic Bezier +
 
c:Number — second control point of the cubic Bezier +
 
d:Number — final anchor of the cubic Bezier +

Returns
Array — an array of 4 objects, one for each quadratic Bezier with a, b, and c properties +
quadraticToCubic()method 
public static function quadraticToCubic(a:Number, b:Number, c:Number):Object

+ Returns the Cubic equivalent of a Quadratic Bezier. This method returns an object with a, b, c, and d properties + representing the starting anchor value (a), first control point (b), second control point (c), and ending anchor value (d) + of a Cubic Bezier matching the Quadratic Bezier data passed in. + +

Parameters
a:Number — The starting anchor value +
 
b:Number — The control point value +
 
c:Number — The ending anchor value +

Returns
Object — An object with a, b, c, and d properties representing the starting anchor value (a), first control point (b), second control point (c), and ending anchor value (d) of a Cubic Bezier matching the Quadratic Bezier data passed in. +




\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/CSSPlugin.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/CSSPlugin.html new file mode 100755 index 0000000..4a9122b --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/CSSPlugin.html @@ -0,0 +1,302 @@ +com.greensock.plugins.CSSPlugin +
Packagecom.greensock.plugins
Classpublic class CSSPlugin
InheritanceCSSPlugin Inheritance TweenPlugin Inheritance Object

+ With the help of the CSSPlugin, GSAP can animate almost any css-related property of DOM elements + including the obvious things like width, height, margins, padding, top, left, and more plus more interesting things like transforms + (rotation, scaleX, scaleY, skewX, skewY, x, y, rotationX, and rotationY), colors, opacity, and lots more. Load the CSSPlugin js + file to enable these capabilities and then make sure you define your values (in camel case form) inside a "css" property of + the vars parameter, like this: + +
+//notice the css-related values are inside the "css" object but the ease is not:
+TweenLite.to(element, 1, {css:{top:"20px", left:"100px", backgroundColor:"#FF0000"}, ease:Power2.easeOut});
+
+ +

+ + Note: a common mistake is to forget to wrap css-related properties in a css object which is essential for + specifying your intent. Remember, GSAP (GreenSock Animation Platform) isn't just for tweening css properties. And always use camel case + representations of the properties, so instead of "font-size", you'd use "fontSize". +

+ +

+ To get up and running quickly with GSAP, check out the Jump Start tour + which covers the basics in a fun, interactive way. To see the CSS3-specific features (like 3D transforms, boxShadow, textShadow, borderRadius, and clip) + demonstrated and explained, see http://www.greensock.com/css3/. +

+ +

You can even define properties that are not generally tweenable and GSAP will apply the property for you (like + position:"absolute" or borderStyle:"solid"). These non-tweenable properties will be set at the beginning of the + tween (except display:"none" which will be applied at the end of the tween for obvious reasons).

+ +

It is typically + a good idea to define a unit of measurement (like "24px" instead of "24" or "50%" rather than "50") but the default in most + cases is pixels (px), so you can omit the unit if you prefer. In fact, you can define your own defaults using the + CSSPlugin.suffixMap object. And even if the unit of measurement doesn't match the current one, GSAP will + attempt to convert them for you. So, for example, you could tween a width from "50%" to "200px".

+ +

CSSPlugin can even animate complex values like + boxShadow:"0px 0px 20px 20px red" + and + + borderRadius:"50% 50%" + and + border:"5px solid rgb(0,255,0)" + . + When necessary, it attempts to figure out if the property needs a vendor prefix and applies it accordingly. There + may be a small subset of complex or bleeding-edge css properties that CSSPlugin can't handle yet, but the vast majority work great.

+ +

In addition to almost all of the standard css properties, CSSPlugin recognizes some special ones that can be quite convenient:

+ +
    +
  • 2D transforms: rotation, scaleX, scaleY, scale, skewX, skewY, + x, and y - one of the most convenient things about the CSSPlugin is that it greatly simplifies transforms in the various + browsers including IE back through version 6! No need to mess with various browser prefixes or funky matrix filters in IE. You can animate + 2D transform properties inuitively: +
    //much simpler
    +TweenLite.to(element, 2, {css:{rotation:30, scaleX:0.8}});
    +
    + + By default, rotation, skewX, and skewY use degrees but you can use radians if you prefer. Simply append one of the standard suffixes ("rad" or "deg") like this: +
    //use "deg" or "rad"
    +TweenLite.to(element, 2, {css:{rotation:"1.25rad", skewX:"30deg"}});
    +
    + + To be clear, this is like setting the element's css to: transform:rotate(1.25rad) skewX(30deg) along with all the other browser prefix + values and the necessary IE filter which would be much more verbose. And CSSPlugin will affect the skewX/skewY values in a slightly different (arguably more intuitive) + way than some browsers because visually the object isn't stretched. For example, if you set transform:skewX(85deg) in the browser + via CSS, the object would become EXTREMELY long (stretched) whereas with CSSPlugin, it would look more like it sheared in 3D space. Again + this was a purposeful design decision because this behavior is more likely what animators desire. You can certainly get the same effect + as the default browser behavior by tweening the scaleX/scaleY accordingly, using trigonometry. + +

    + + Notes about 2D transforms: + +

    +
      +
    1. + It is typically best to set the element's position to "absolute" to avoid clipping in the browsers. +
    2. +
    3. + You can use "scale" as a shortcut to control both the "scaleX" and "scaleY" properties identically. +
    4. +
    5. + You can define relative values, like rotate:"+=30deg" + +
    6. +
    7. + The order in which you declare the transform properties makes no difference. +
    8. +
    9. + If your goal is to animate the x/y position of the element, browsers seem to perform slightly better if you just animate the regular "top" and "left" properties instead of "x" and "y". +
    10. +
    11. + TweenLite has nothing to do with the rendering quality of the element in the browser. Some browsers seem to render transformed elements beautifully while others don't handle anti-aliasing as well. +
    12. +
    13. + IE6, IE7, and IE8 transforms don't apply to child elements (it's a browser limitation). +
    14. +
    + +
  • + + +
  • + 3D transforms: in addition to all of the regular 2D properties (x, y, scaleX, scaleY, scale, rotation, skewX, and skewY) that work in almost all browsers, + you can animate 3D properties too like rotationX, rotationY, rotationZ (identical to regular "rotation"), + z, perspective, and transformPerspective in most modern browsers (see + http://caniuse.com/transforms3d for details about browser support for 3D transforms). + To see 3D transforms demonstrated visually in GSAP, see http://www.greensock.com/css3/. Again, there is no need to use + browser prefixes; CSSPlugin handles all of that for you under the hood. You can animate 3D transform properties and 2D properties (except skew) together inuitively: +
    +TweenLite.to(element, 2, {css:{rotationX:45, scaleX:0.8, z:-300}});
    +
    + + To get your elements to have a true 3D visual perspective applied, you must either set the "perspective" property of the parent element + or set the special "transformPerspective" of the element itself (common values range from around 200 to 1000, the lower the number the + stronger the perspective distortion). The "transformPerspective" is like adding a perspective() directly inside the css "transform" style, like: + transform:perspective(500px) rotateX(45deg) which only applies to that specific element whereas if you want to a + group of elements share a common perspective (the same vanishing point), you should set the regular "perspective" property on the + parent/container of those elements. For more information about perspective, see this article. + +
    //apply a perspective to the PARENT element (the container) to make the perspective apply to all child elements (typically best)
    +TweenLite.set(container, {css:{perspective:500}});
    +
    +//or set a default perspective that will be applied to every individual element that you tween in 3D:
    +CSSPlugin.defaultTransformPerspective = 500;
    +
    +//or apply perspective to a single element using "transformPerspective"
    +TweenLite.set(element, {css:{transformPerspective:500}});
    +
    + + In regular CSS, the order that you list the transforms matters but GSAP always applies them in the same order for consistency: + scale, then rotation (same as rotationZ), then rotationY, then rotationX, then translation (x, y, z). If you want to rotate + the element around a point in 3D space other than its center, use the transformOrigin property (see below). + +
    //sample css:
    +.myClass {
    +    transform: scale(1.5, 1.5) rotateY(45deg) translate3d(10px, 0px, -200px)
    +}
    + 
    +//corresponding GSAP transform (tweened over 2 seconds):
    +TweenLite.to(element, 2, {css:{scale:1.5, rotationY:45, x:10, y:0, z:-200}});
    +
    +//sample css that uses a perspective():
    +.myClass {
    +    transform: perspective(500px) rotate(120deg) translateY(50px)
    +}
    +
    +//corresponding GSAP transform (set, not tweened):
    +TweenLite.set(element, {css:{transformPerspective:500, rotation:120, y:50}});
    +
    + +

    + + Notes about 3D transforms: + +

    +
      +
    1. + In browsers that don't support 3D transforms, they'll be ignored. For example, rotationX may not work, but rotation would. See http://caniuse.com/transforms3d for a chart of which browser versions support 3D transforms. +
    2. +
    3. + All transforms are remembered, so you can tween individual properties without worrying that they'll be lost. You don't need to define all of the transform properties on every tween - only the ones you want to animate. +
    4. +
    5. + TweenLite has nothing to do with the rendering quality of the element in the browser. Some browsers seem to render transformed elements beautifully while others don't handle anti-aliasing as well. +
    6. +
    7. + To learn more about css 3D transforms, see this article + +
    8. +
    9. + IE10 supports 3D transforms, but it does not support transformStyle of "preserve-3d" (see Microsoft's site for details). +
    10. +
    + +
  • + + +
  • + transformOrigin - Sets the origin around which all transforms (2D and/or 3D) occur. By default, it is in the center + of the element ("50% 50%"). You can define the values using the keywords "top", "left", "right", + or "bottom" or you can use percentages (bottom right corner would be "100% 100%") or pixels. If, + for example, you want an object to spin around its top left corner you can do this: + +
    //spins around the element's top left corner
    +TweenLite.to(element, 2, {css:{rotation:360, transformOrigin:"left top"}});
    +
    + +

    The first value in the quotes corresponds to the x-axis and the second corresponds to the y-axis, so to make the object transform + around exactly 50px in from its left edge and 20px from its top edge, you could do:

    + +
    +//spins/scales around a point offset from the top left by 50px, 20px
    +TweenLite.to(element, 2, {css:{rotation:270, scale:0.5, transformOrigin:"50px 20px"}});
    +
    + + You can define a transformOrigin as a 3D value by adding a 3rd number, like to rotate around the y-axis from + a point that is offset 400px in the distance, you could do: + +
    +//rotates around a point that is 400px back in 3D space, creating an interesting effect:
    +TweenLite.to(element, 2, {css:{rotationY:360, transformOrigin:"50% 50% -400px"}});
    +
    +

    + + Notes about transformOrigin: + +

    +
      +
    1. + CSSPlugin automatically works around a bug in Safari that causes 3D transformOrigin values to incorrectly act as though they affect translateZ(). To work around the bug, when you perform a 3D tween that has a transformOrigin with a non-zero z component (like transformOrigin:"50% 50% -100px"), CSSPlugin will record the z-component (-100px in this example) internally and remove it from the transformOrigin that gets applied to the css. Everything will render correctly because the z-axis origin offset is calculated internally and applied to the matrix3d(). Just keep in mind that if you check the css value of the transformOrigin after the tween has started, it won't have the z component but that's by design. +
    2. +
    3. + transformOrigin even works in Internet Explorer back to version 6 in 2D, although it is recommended that you set the element's position to "absolute" to avoid clipping. +
    4. +
    + +
  • + +
  • + shortRotation - tweens the rotation property in the shortest direction. For example, if the element's rotation + is currently 170 degrees and you want to tween it to -170 degrees, a normal rotation tween would travel a total of 340 degrees in the + counter-clockwise direction, but if you use shortRotation, it would travel 20 degrees in the clockwise direction instead. Example: + +
    TweenLite.to(element, 2, {css:{shortRotation:-170}});
    + + For 3D rotations, you may also use shortRotationX and shortRotationY. + +
  • + +
  • + autoAlpha - the same thing as "opacity" except that when the value hits "0", the + "visibility" property will be set to "hidden" in order to improve browser rendering performance and + prevent clicks/interactivity on the target. When the value is anything other than 0, "visibility" will be set to + "visible". And if the element's visibility is initially set to "hidden" and opacity is 1, it will assume opacity + should also start at 0. This makes it simple to start things out on your page as invisible (set your css visibility:hidden) + and then fade them in whenever you want. + +
    //fade out and set visibility:hidden
    +TweenLite.to(element, 2, {css:{autoAlpha:0}});
    +
    +//in 2 seconds, fade back in with visibility:visible
    +TweenLite.to(element, 2, {css:{autoAlpha:1}, delay:2});
    +
    +
  • + +
  • + className - allows you to morph between classes on an element. For example, let's say myElement has a class of "class1" currently and you want to change to "class2" and animate the differences, you could do this: + +
    TweenLite.to(myElement, 1, {css:{className:"class2"}});
    + +

    And if you want to ADD the class to the existing one, you can simply use the "+=" prefix. To remove a class, use the "-=" prefix like this:

    + +
    TweenLite.to(myElement, 1, {css:{className:"+=class2"}});
    + +

    + Note: there are some css-related properties that don't tween like IE filters and 3D transforms (support for those may come in the future). + Also, there is a slight speed penalty when using className because the engine needs to loop through all of the css properties to see which + ones are different. +

    + +
  • + +
  • + bezier - Animate virtually any property (or properties) along a Bezier (curved) path which you define + as an array of points/values that can be interpreted in several different ways, like as points through which a Bezier should + be drawn, or cubic or quadratic Bezier control and anchor points, etc. See the + BezierPlugin's documentation for details and + an explanation of all the features available. Don't forget to load the BezierPlugin JavaScript file in order to utilize + its features from within CSSPlugin. Here is an example of a bezier tween that makes an element curve through 3 points + using x and y transform properties and also automatically rotates it along the path as it goes: + +
    TweenLite.to(element, 5, {css:{bezier:{curviness:1.25, values:[{x:100, y:200}, {x:250, y:400}, {x:500, y:50}], autoRotate:true}}, ease:Power1.easeOut});
    + +
  • + +
  • + autoRound - By default, CSSPlugin will round pixel values and zIndex to the closest integer during the tween (the inbetween + values) because it improves browser performance, but if you'd rather disable that behavior, pass autoRound:false in the css object. + You can still use the RoundPropsPlugin to manually define properties that you want rounded.
  • + +
+ + +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +







\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/CSSRulePlugin.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/CSSRulePlugin.html new file mode 100755 index 0000000..ebca472 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/CSSRulePlugin.html @@ -0,0 +1,98 @@ +com.greensock.plugins.CSSRulePlugin +
Packagecom.greensock.plugins
Classpublic class CSSRulePlugin
InheritanceCSSRulePlugin Inheritance TweenPlugin Inheritance Object

+ Allows TweenLite and TweenMax to animate the raw style sheet rules which affect all objects of a particular selector + rather than affecting an individual DOM element's style (that's what the CSSPlugin is for). For example, if you have + a CSS class named ".myClass" that sets background-color to "#FF0000", you could tween that + to a different color and ALL of the objects on the page that use ".myClass" would have their background color change. + Typically it is best to use the regular CSSPlugin to animate css-related properties of individual elements so that you can get + very precise control over each object, but sometimes it can be useful to tween the global rules themselves instead. For example, + pseudo elements (like :after, :before, etc. are impossible to reference directly in JavaScript, but you can animate + them using CSSRulePlugin. + NOTE: CSSRulePlugin requires the CSSPlugin, so please make sure it is loaded too. + + +

The plugin itself actually has a static + getRule() + method that you can use to grab a reference to the style sheet + itself based on the selector you used in your CSS. For example, let's say you have CSS like this:

+ + +
+.myClass {
+    color:#FF0000;
+}
+.myClass:before {
+    content:"This content is before.";
+    color:#00FF00;
+}
+
+ +

Now let's say you want to tween the color of the .myClass:before to blue. Make sure you load the + CSSRulePlugin and CSSPlugin JavaScript files and then you can do this:

+ +
+var rule = CSSRulePlugin.getRule(".myClass:before"); //get the rule
+TweenLite.to(rule, 3, {cssRule:{color:"#0000FF"}});
+
+ +

And if you want to get ALL of the :before pseudo elements, the getRule() will return an array of them, so I could do this:

+ +
+TweenLite.to( CSSRulePlugin.getRule(":before"), 3, {cssRule:{color:"#0000CC"}});
+
+ +

Keep in mind that it is typically best to tween a property that has already been defined in the specific rule that you're selecting + because it cannot perform a calculated style (the combination of styles from other selectors that might pertain to similar elements). + For example, if we didn't define any color initially for the .myClass:before and tried to tween its color to blue, it would + start transparent and go to blue. One way around this is to simply set your starting values explicitly in the tween by doing a + fromTo(). That way there's no having to guess what the starting value should be when it isn't defined previously.

+ +

Don't forget to wrap the values in a cssRule:{} object.

+ +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +



Public Methods
 MethodDefined By
  
getRule(selector:String):Object
[static] + Provides a simple way to find the style sheet object associated with a particular selector like ".myClass" or "#myID".
CSSRulePlugin
Method Detail
getRule()method
public static function getRule(selector:String):Object

+ Provides a simple way to find the style sheet object associated with a particular selector like ".myClass" or "#myID". + You'd use this method to determine the target of your tween. For example, let's say you have CSS like this: + +

+.myClass {
+    color:#FF0000;
+}
+.myClass:before {
+    content:"This content is before.";
+    color:#00FF00;
+}
+
+ +

And you want to tween the color of the .myClass:before to blue. Make sure you load the + CSSRulePlugin.js file and then you can do this:

+ +
+var rule = CSSRulePlugin.getRule(".myClass:before"); //get the rule
+TweenLite.to(rule, 3, {cssRule:{color:"#0000FF"}});
+
+ +

Or you can feed the value directly into the tween like this:

+
+TweenLite.to( CSSRulePlugin.getRule(".myClass:before"), 3, {cssRule:{color:"#0000FF"}});
+
+ +

Parameters
selector:String — The name that exactly matches the selector you want to animate (like ".myClassName"). +

Returns
Object — The style sheet object (or an array of them if you define only a pseudo element selector like :before) +




\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/ColorPropsPlugin.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/ColorPropsPlugin.html new file mode 100755 index 0000000..4422d08 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/ColorPropsPlugin.html @@ -0,0 +1,65 @@ +com.greensock.plugins.ColorPropsPlugin +
Packagecom.greensock.plugins
Classpublic class ColorPropsPlugin
InheritanceColorPropsPlugin Inheritance TweenPlugin Inheritance Object

+ Tweens any color-related property of any object, like myObject.borderColor from "rgb(255,0,51)" + to "rgb(102,204,0)" (and you can define the initial color in almost any format like "#FF00CC" + or "rgba(255,0,51,0.5)" or "red" or "#f0c" or 0xFF00CC). New values + are always set in the format "rgb(...)" (or rgba(...) for values that include alpha). + +

You can tween an unlimited number of color properties simultaneously. Just use the associated property name inside + the colorProps:{} object like this:

+ +
+//tweens myObject.borderColor and myObject.myCustomProp 
+TweenLite.to(myObject, 1, {colorProps:{borderColor:"red", myCustomProp:"rgb(204,51,0)"}, ease:Linear.easeNone});
+
+ +

ColorPropsPlugin is NOT generally intended to be used with css-related color properties because + the CSSPlugin already handles those. ColorPropsPlugin is meant to tween other color-related properties directly + on your JavaScript object(s).

+ +

You may even use getter and setter functions on your JavasScript object if you want, so for example let's + say your JavaScript object has a getColor() and setColor() method; tweening the + value would be as simple as:

+ +
+//tween a getter/setter-based value
+TweenLite.to(myObject, 1, {colorProps:{setColor:"rgb(102,255,51)"}, ease:Linear.easeNone});
+
+ +

This even works for single-method getters/setters (like the ones in jQuery). For example, maybe + you have a lineColor() method that serves as a getter and a setter based on whether or + not you pass in a parameter like this:

+ +
+//gets
+var color = myObject.lineColor(); 
+ 
+//sets
+myObject.lineColor("rgb(255,0,51)"); 
+ 
+//tweens
+TweenLite.to(myObject, 1, {colorProps:{lineColor:"rgb(102,255,51)"}, ease:Linear.easeNone});
+
+ +

+ Note: a common mistake is to forget to wrap color-related properties in a colorProps + object which is essential for specifying your intent.

+ + +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +







\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/EaselPlugin.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/EaselPlugin.html new file mode 100755 index 0000000..b10acd7 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/EaselPlugin.html @@ -0,0 +1,77 @@ +com.greensock.plugins.EaselPlugin +
Packagecom.greensock.plugins
Classpublic class EaselPlugin
InheritanceEaselPlugin Inheritance TweenPlugin Inheritance Object

+ Tweens special EaselJS-related properties like ColorFilter (see http://www.createjs.com/#!/EaselJS + for more information about EaselJS). Of course you don't need the plugin to tween normal numeric properties of + EaselJS objects, but some filters or effects require special manipulation like ColorFilters (which is currently + the only filter supported by EaselPlugin but more will be added in the future). + +

GreenSock's EaselPlugin exposes convenient properties that aren't a part of EaselJS's API like + "tint", "tintAmount", "exposure", and "brightness". Simply wrap the values + that you'd like to tween in an "easel" object. Here are some examples:

+ +
+//setup stage and create a Shape into which we'll draw a circle later...
+var canvas = document.getElementById('myCanvas'), 
+    stage = new createjs.Stage(canvas),
+    circle = new createjs.Shape(),
+    g = circle.graphics;
+
+//draw a red circle in the Shape
+g.beginFill(createjs.Graphics.getRGB(255, 0, 0));
+g.drawCircle(0, 0, 100);
+g.endFill();
+
+//in order for the ColorFilter to work, we must cache() the circle
+circle.cache(-100, -100, 200, 200);
+
+//place the circle at 200,200
+circle.x = 200;
+circle.y = 200;
+
+//add the circle to the stage
+stage.addChild(circle);
+
+//setup a "tick" event listener so that the EaselJS stage gets updated on every frame/tick
+TweenLite.ticker.addEventListener("tick", stage.update, stage);
+stage.update();
+
+//tween the tint of the circle to green and scale it to half-size
+TweenLite.to(circle, 2, {scaleX:.5, scaleY:.5, easel:{tint:0x00FF00}});
+
+//tween to a different tint that is only 50% (mixing with half of the original color) and animate the scale, position, and rotation simultaneously.
+TweenLite.to(circle, 3, {scaleX:1.5, scaleY:0.8, x:250, y:150, rotation:180, easel:{tint:"#0000FF", tintAmount:0.5}, delay:3, ease:Elastic.easeOut});
+
+ + +

You can tween any individual properties of the ColorFilter object like this:

+ +
+TweenLite.to(circle, 3, {easel:{colorFilter:{redMultiplier:0.5, blueMultiplier:0.8, greenOffset:100}}});
+
+ +

Or you can tween things like the "exposure" of an image which is a value from 0-2 where 1 is normal exposure, 2 + is completely overexposed (white) and 0 is completely underexposed (black). Or define a "brightness" value + which uses the same concept: a value from 0-2. These effects can be very useful for images in particular.

+ +

+ Note: a common mistake is to forget to wrap EaselJS-related properties in an easel + object which is essential for specifying your intent.

+ + +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +







\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/RaphaelPlugin.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/RaphaelPlugin.html new file mode 100755 index 0000000..3188803 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/RaphaelPlugin.html @@ -0,0 +1,67 @@ +com.greensock.plugins.RaphaelPlugin +
Packagecom.greensock.plugins
Classpublic class RaphaelPlugin
InheritanceRaphaelPlugin Inheritance TweenPlugin Inheritance Object

+ Enables TweenLite and TweenMax to animate properties of Raphael JavaScript objects (see + http://www.raphaeljs.com/). Raphael is a JavaScript + framework that simplifies work with vector graphics on the web. For example: + +
+// creates canvas 550 × 400 at 10, 50
+var paper = Raphael(10, 50, 550, 400);
+
+// creates rectangle at x = 50, y = 40, with a width of 200 and height of 100
+var rect = paper.rect(50, 40, 200, 100);
+
+// sets the fill attribute of the rectangle to red (#f00)
+rect.attr("fill", "#f00");
+
+// tween the fill to blue (#00f) and x to 100, y to 100, width to 100 and height to 50 over the course of 3 seconds using an ease of Power1.easeInOut
+TweenLite.to(rect, 3, {raphael:{fill:"#00f", x:100, y:100, width:100, height:50}, ease:Power1.easeInOut});
+
+ +

+ + Note: a common mistake is to forget to wrap Raphael-related properties in a "raphael" + object which is essential for helping TweenLite/Max understand your intent. +

+ +

You can tween any of the properties that you would normally set using raphael's attr() method as well + as the following transformation properties: rotation, scaleX, scaleY, skewX, skewY, tx and ty and even + shortRotation which will rotate in the shortest direction to the destination value. tx and + ty refer to the translation x and y properties (e and f from the element's matrix). + This gives you a lot of control, even beyond what's easily accomplished through Raphael's own methods.

+ +

+ globalPivot or localPivot - You can define a custom pivot point around which transforms will be made + (rotation, skewX, skewY, scaleX, scaleY, tx, and ty) using either globalPivot or localPivot. The difference + between the two is that localPivot uses coordinates according to the object's local coordinate system which is + always the same regardless of its scale/rotation/position. Think of it like a point "inside" the object. globalPivot, + on the other hand, uses global coordinates according to the Raphael object that contains the tween's target. You can define the pivot point + either as an object with x and y properties like: globalPivot:{x:50, y:25} or a comma-delimited string like globalPivot:"50,25".

+ +
+// tween the rotation to 270 degrees and scaleX to 0.5 using a global pivot point of x:120, y:80 over the course of 3 seconds using an ease of Power1.easeInOut
+TweenLite.to(rect, 3, {raphael:{rotation:270, scaleX:0.5, globalPivot:{x:120, y:80}}, ease:Power1.easeInOut});
+
+ +

Note that tx and ty are automatically adjusted to accommodate any rotation or skew during the tween. + So, for example, if you tween the rotation and tx and ty, it will work fine but at the end, tx and ty may be slightly different + than what you defined for the tween because they had to be adjusted to prevent the object's rotation from throwing off the visual + position.

+ +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +







\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/RoundPropsPlugin.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/RoundPropsPlugin.html new file mode 100755 index 0000000..a561768 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/RoundPropsPlugin.html @@ -0,0 +1,26 @@ +com.greensock.plugins.RoundPropsPlugin +
Packagecom.greensock.plugins
Classpublic class RoundPropsPlugin
InheritanceRoundPropsPlugin Inheritance TweenPlugin Inheritance Object

+ If you'd like the inbetween values in a tween to always get rounded to the nearest integer, use the roundProps + special property. Just pass in a comma-delimited String containing the property names that you'd like rounded. For example, + if you're tweening the x, y, and alpha properties of mc and you want to round the x and y values (not alpha) + every time the tween is rendered, you'd do: + + TweenMax.to(mc, 2, {x:300, y:200, alpha:0.5, roundProps:"x,y"}); + +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +







\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/ScrollToPlugin.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/ScrollToPlugin.html new file mode 100755 index 0000000..c3886bd --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/ScrollToPlugin.html @@ -0,0 +1,66 @@ +com.greensock.plugins.ScrollToPlugin +
Packagecom.greensock.plugins
Classpublic class ScrollToPlugin
InheritanceScrollToPlugin Inheritance TweenPlugin Inheritance Object

+ Allows TweenLite and TweenMax to animate the scroll position of either the window (like doing window.scrollTo(x, y)) or + a <div> DOM element's content (like doing myDiv.scrollTop = y; myDiv.scrollLeft = x;). To scroll the window to a + particular position, use the window as the target of the tween like this: + +
+//scroll to 400 pixels down from the top
+TweenLite.to(window, 2, {scrollTo:{y:400}, ease:Power2.easeOut});
+
+ +

Or to tween the content of a div, make sure you've set the overflow:scroll on the div and then + do this:

+ +
+//scroll to 250 pixels down from the top of the content in the div
+TweenLite.to(myDiv, 2, {scrollTo:{y:250}, ease:Power2.easeOut});
+
+ +

You can define an x or y value or both (to scroll on both the x- and y-axis). For example, + to scroll to 400 pixels from the top and 200 pixels from the left, do this:

+ +
+TweenLite.to(myDiv, 2, {scrollTo:{y:400, x:200}, ease:Power2.easeOut});
+
+ +

The ScrollToPlugin will automatically sense if the scroll position was changed outside of itself (like if the + user manually started dragging the scrollbar mid-tween) and cancel that portion of the tween. It won't kill the + entire tween - just the scrolling portion of the tween. That means, for example, that the tween's onComplete + would still fire at the end of the tween. If, however, you'd like to kill the entire tween if another force + changes the scroll position, set autoKill:true inside the scrollTo object, like:

+ +
+TweenLite.to(myDiv, 2, {scrollTo:{y:400, autoKill:true}, ease:Power2.easeOut});
+
+ + To scroll to the maximum scroll position, use the string "max" as the value, like this: + +
+TweenLite.to(myDiv, 2, {scrollTo:{y:"max"}});
+
+ + If you don't wrap the value in an object, it will assume you want to scroll in the "y" direction, so these two lines are funtionally equivalent: + +
+TweenLite.to(myDiv, 2, {scrollTo:{y:"max"}});
+TweenLite.to(myDiv, 2, {scrollTo:"max"});
+
+ +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +







\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/TweenPlugin.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/TweenPlugin.html new file mode 100755 index 0000000..3f7ed2d --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/TweenPlugin.html @@ -0,0 +1,98 @@ +com.greensock.plugins.TweenPlugin +
Packagecom.greensock.plugins
Classpublic class TweenPlugin
InheritanceTweenPlugin Inheritance Object
Subclasses BezierPlugin, ColorPropsPlugin, CSSPlugin, CSSRulePlugin, EaselPlugin, RaphaelPlugin, RoundPropsPlugin, ScrollToPlugin

+ TweenPlugin is the base class for all TweenLite and TweenMax plugins, but generally isn't used directly. + +

+ USAGE: +

+ +

To create your own plugin, extend TweenPlugin and override whichever methods you need (typically + _onInitTween() and setRatio()). To make things easier, we have included a + file named TEMPLATE_Plugin.js in the plugins directory that serves as a jumping-off point + and it has some comments in the code. _onInitTween() is called when the tween renders for + the first time and setRatio() is called on every update and passes a ratio parameter which + is typically a value between 0 and 1, and it changes according to the ease). There are a few + key concepts to keep in mind:

+ +
    +
  1. Pass the TweenPlugin constructor a comma-delimited list of property names that the plugin should + overwrite, the first of which should be the property name that the plugin intercepts. For example, + the ScrollToPlugin handles any tweens of "scrollTo" and it also overwrites other concurrent + tweens that are handling the "scrollTo" but you may have a ScalePlugin that handles both "scaleX" and + "scaleY" properties, thus the comma-delimited list would look like "scale,scaleX,scaleY". + The first name in the list must be unique - two plugins cannot handle the same primary property.
  2. + +
  3. When a tween that uses your plugin initializes its tween values (normally when it renders for the + first time), a new instance of your plugin will be created and its _onInitTween() method + is called. That's where you'll want to record any initial values and prepare for the tween. + _onInitTween() should return a Boolean value that essentially indicates whether + or not the plugin initted successfully. If you return false, TweenLite/Max will just use a + normal tween for the value, ignoring the plugin for that particular tween. For example, + maybe your tween only works with DOM elements, so if the target isn't one you could + return false +
  4. + +
  5. The setRatio() method will be called on every frame during the course of the tween + and it will be passed a single parameter that's a multiplier (typically between 0 and 1, according + to the ease) describing the total amount of change from the beginning of the tween (0). It is normally + zero at the beginning of the tween and 1 at the end, and inbetween it could be any value based on the + ease applied (for example, an ElasticOut ease would cause the value to shoot past 1 and + back again before the end of the tween). So if the tween uses the Linear.ease, when it's + halfway finished, setRatio(0.5) would be called
  6. + +
  7. The _overwriteProps is an array that should contain the properties that your + plugin should overwrite in "auto" overwrite mode. For example, an autoAlpha + plugin could control the "visible" and "alpha" properties of an object, + so if another tween is created that controls the alpha of the target object, + your plugin's _kill() method will be called which should handle killing the + "alpha" part of the tween. It is your responsibility to populate (and depopulate) + the _overwriteProps Array. Failure to do so properly can cause odd overwriting + behavior.
  8. + +
  9. There's a _roundProps() method that gets called by the RoundPropsPlugin if the + user requests that certain properties get rounded to the nearest integer. If you use + _addTween() method to add property tweens, rounding will happen automatically + (if necessary), but if you don't use _addTween() and prefer to manually calculate + tween values in your setRatio() method, just remember to override the _roundProps() + method if that makes sense in your plugin (some plugins wouldn't need to accommodate rounding, like color + plugins, in which case you can ignore the method altogether).
  10. + +
  11. If you need to run a function when the tween gets disabled, add an _onDisable() method + (named exactly that) to your plugin. It will automatically be called when the tween gets disabled (typically + when it finishes and is removed from its parent timeline). Same for _onEnable() if you + need to run code when a tween is enabled. These methods should return a Boolean value indicating + whether or not they changed any properties on the target becaues if so (true), it helps + notify any initting tweens of the same target to re-init. It is very rare that an _onDisable() + or _onEnable() method is necessary, but it can be useful for things like MotionBlurPlugin + which must do some very advanced things, hiding the target, changing its alpha to almost 0, etc. only + while the tween occurs. If another alpha tween of that same target overwrites an existing motionBlur + of the same target, the alpha would be at the wrong value normally, but the if the _onDisable() + returns true, it would force the new tween to re-init AFTER the alpha was fixed inside + the _onDisable(). Again, this is VERY rare.
  12. + +
  13. Please use the same naming convention as the rest of the plugins, like MySpecialPropertyNamePlugin.
  14. + +
  15. If you are handling more than one property in your plugin (like RoundPropsPlugin or ShortRotationPlugin), + and you're not using _addTween() to create property tweens internally, make sure you override + the _kill() method which will be passed a vars parameter with properties that need + to be killed (typically for overwriting).
  16. + +
+ +

+ Copyright 2008-2012, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for Club GreenSock members, the software agreement that was issued with the membership.

+ +







\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/class-list.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/class-list.html new file mode 100755 index 0000000..b8f1423 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/class-list.html @@ -0,0 +1 @@ +com.greensock.plugins - GreenSock JavaScript Documentation

Package com.greensock.plugins

Classes
BezierPlugin
ColorPropsPlugin
CSSPlugin
CSSRulePlugin
EaselPlugin
RaphaelPlugin
RoundPropsPlugin
ScrollToPlugin
TweenPlugin
\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/com/greensock/plugins/package-detail.html b/duo/js/greensock-v12-js/docs/com/greensock/plugins/package-detail.html new file mode 100755 index 0000000..36b6e76 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/com/greensock/plugins/package-detail.html @@ -0,0 +1,36 @@ +com.greensock.plugins Summary +



Classes
 ClassDescription
 BezierPlugin + Animate virtually any property (or properties) along a Bezier (curved) path which you define + as an array of points/values that can be interpreted 4 different ways (described as the Bezier's "type", like type:"quadratic"): + + + "thru" (the default) - the plugin figures out how to draw the Bezier naturally through + the supplied values using a proprietary algorithm.
 ColorPropsPlugin + Tweens any color-related property of any object, like myObject.borderColor from "rgb(255,0,51)" + to "rgb(102,204,0)" (and you can define the initial color in almost any format like "#FF00CC" + or "rgba(255,0,51,0.5)" or "red" or "#f0c" or 0xFF00CC).
 CSSPlugin + With the help of the CSSPlugin, GSAP can animate almost any css-related property of DOM elements + including the obvious things like width, height, margins, padding, top, left, and more plus more interesting things like transforms + (rotation, scaleX, scaleY, skewX, skewY, x, y, rotationX, and rotationY), colors, opacity, and lots more.
 CSSRulePlugin + Allows TweenLite and TweenMax to animate the raw style sheet rules which affect all objects of a particular selector + rather than affecting an individual DOM element's style (that's what the CSSPlugin is for).
 EaselPlugin + Tweens special EaselJS-related properties like ColorFilter (see http://www.createjs.com/#!/EaselJS + for more information about EaselJS).
 RaphaelPlugin + Enables TweenLite and TweenMax to animate properties of Raphael JavaScript objects (see + http://www.raphaeljs.com/).
 RoundPropsPlugin + If you'd like the inbetween values in a tween to always get rounded to the nearest integer, use the roundProps + special property.
 ScrollToPlugin + Allows TweenLite and TweenMax to animate the scroll position of either the window (like doing window.scrollTo(x, y)) or + a <div> DOM element's content (like doing myDiv.scrollTop = y; myDiv.scrollLeft = x;).
 TweenPlugin + TweenPlugin is the base class for all TweenLite and TweenMax plugins, but generally isn't used directly.

\ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/cookies.js b/duo/js/greensock-v12-js/docs/cookies.js new file mode 100755 index 0000000..f12362f --- /dev/null +++ b/duo/js/greensock-v12-js/docs/cookies.js @@ -0,0 +1,84 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// ADOBE SYSTEMS INCORPORATED +// Copyright 2006-2008 Adobe Systems Incorporated +// All Rights Reserved. +// +// NOTICE: Adobe permits you to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// +//////////////////////////////////////////////////////////////////////////////// + +/** + * Read the JavaScript cookies tutorial at: + * http://www.netspade.com/articles/javascript/cookies.xml + */ + +/** + * Sets a Cookie with the given name and value. + * + * name Name of the cookie + * value Value of the cookie + * [expires] Expiration date of the cookie (default: end of current session) + * [path] Path where the cookie is valid (default: path of calling document) + * [domain] Domain where the cookie is valid + * (default: domain of calling document) + * [secure] Boolean value indicating if the cookie transmission requires a + * secure transmission + */ +function setCookie(name, value, expires, path, domain, secure) +{ + document.cookie= name + "=" + escape(value) + + ((expires) ? "; expires=" + expires.toGMTString() : "") + + ((path) ? "; path=" + path : "") + + ((domain) ? "; domain=" + domain : "") + + ((secure) ? "; secure" : ""); +} + +/** + * Gets the value of the specified cookie. + * + * name Name of the desired cookie. + * + * Returns a string containing value of specified cookie, + * or null if cookie does not exist. + */ +function getCookie(name) +{ + var dc = document.cookie; + var prefix = name + "="; + var begin = dc.indexOf("; " + prefix); + if (begin == -1) + { + begin = dc.indexOf(prefix); + if (begin != 0) return null; + } + else + { + begin += 2; + } + var end = document.cookie.indexOf(";", begin); + if (end == -1) + { + end = dc.length; + } + return unescape(dc.substring(begin + prefix.length, end)); +} + +/** + * Deletes the specified cookie. + * + * name name of the cookie + * [path] path of the cookie (must be same as path used to create cookie) + * [domain] domain of the cookie (must be same as domain used to create cookie) + */ +function deleteCookie(name, path, domain) +{ + if (getCookie(name)) + { + document.cookie = name + "=" + + ((path) ? "; path=" + path : "") + + ((domain) ? "; domain=" + domain : "") + + "; expires=Thu, 01-Jan-70 00:00:01 GMT"; + } +} diff --git a/duo/js/greensock-v12-js/docs/help.js b/duo/js/greensock-v12-js/docs/help.js new file mode 100755 index 0000000..1b6ba80 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/help.js @@ -0,0 +1,941 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// ADOBE SYSTEMS INCORPORATED +// Copyright 2008 Adobe Systems Incorporated +// All Rights Reserved. +// +// NOTICE: Adobe permits you to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// +//////////////////////////////////////////////////////////////////////////////// + + +function closePopup() +{ + window.close(); +} +function scrollToNameAnchor() +{ + var nameAnchor = window.location.href; + var value = nameAnchor.split("nameAnchor="); + + if (value[1] != null) { + document.location =value[0]+"#"+ value[1]; + } +} +// HIDES AND SHOWS LARGE GRAPHICS IN THE CONTENT PAGES +function showHideImage(thisID, obj) +{ + + var imgElement = document.getElementById(thisID); + var imgText = obj; + + if( imgElement.className == "largeImage" ) + { + imgElement.src = "images/" + thisID + ".png"; + imgElement.className="smallImage"; + obj.className="showImageLink"; + obj.href="#"; + obj.firstChild.nodeValue = terms_AHV_LARGE_GRAPHIC; + window.focus(); + } + else + { + imgElement.src = "images/" + thisID + "_popup.png"; + imgElement.className="largeImage"; + obj.className="hideImageLink"; + obj.href="#"; + obj.firstChild.nodeValue = terms_AHV_SMALL_GRAPHIC; + window.focus(); + } +} +// js function for expand collapse menu functionality +function KeyCheck(e, tree, idx) +{ + var KeyID = (window.event) ? event.keyCode : e.keyCode; + var node = YAHOO.widget.TreeView.getNode(tree, idx); + switch(KeyID) + { + case 37: + // alert("Arrow Left"); + node.collapse(); + break; + case 39: + // alert("Arrow Right"); + node.expand(); + break; + } +} +// js function for hide/display mini-elements functionality +function toggleLayer(whichLayer) { + if (document.getElementById) { + // this is the way the standards work + var obj=document.getElementById(whichLayer); + var img = obj.previousSibling.firstChild.firstChild; + img.setAttribute("src","images/on.gif"); + var styleatt = obj.style; + styleatt.display = styleatt.display? "":"block"; + + //change the class of the h3 per design + if (obj.previousSibling.className === "topictitle3") { + obj.previousSibling.className ="topictitle3off"; + img.setAttribute("src","images/on.gif"); + } else if (obj.previousSibling.className === "topictitle3off") { + obj.previousSibling.className ="topictitle3"; + img.setAttribute("src","images/off.gif"); + } + } + else if (document.all) { + // this is the way old msie versions work + var style2 = document.all[whichLayer].style; + style2.display = style2.display? "":"block"; + } +} + function addBookmark( bm_url_str, bm_str_label ) { + parent.navigation.flashProxy.call('addBookmark', bm_url_str, bm_str_label ); +} + +var upperAsciiXlatTbl = new Array( +223,"ss", +230,"ae", +198,"ae", +156,"oe", +140,"oe", +240,"eth", +208,"eth", +141,"y", +159,"y" +); + +var maxNumberOfShownSearchHits = 30; +var showInputStringAlerts = 0; +var navigationCookie = ""; + +////////////// COOKIE-RELATED FUNCTIONS ///////////////////////////////////////// +// test the navigator object for cookie enabling +// additional code would need to be added for +// to support browsers pre navigator 4 or IE5 or +// other browsers that dont support +// the navigator object if any .. + function cookiesNotEnabled() +{ + return true; // We're not going to use cookies +} +/* + * This function parses comma-separated name=value + * argument pairs from the query string of the URL. + * It stores the name=value pairs in + * properties of an object and returns that object. + */ +function getArgs() +{ + var args = new Object(); + var query = window.location.search.substring(1); + // Get query string + if (query.length > 0) { + var pairs = query.split(","); + // Break at comma + for(var i = 0; i < pairs.length; i++) + { + var pos = pairs[i].indexOf('='); + // Look for "name=value" + if (pos == -1) continue; + // If not found, skip + var argname = pairs[i].substring(0,pos); + // Extract the name + var value = pairs[i].substring(pos+1); + // Extract the value + args[argname] = unescape(value); + // Store as a property + // In JavaScript 1.5, use decodeURIComponent( ) + // instead of escape( ) + } + } else { + args[name] = false; + } + return args; // Return the object +} + +/////////////////////////////// COOKIE-RELATED FUNCTIONS //////////////////////// +// Bill Dortch getCookieVal and GetCookie routines +function getCookieVal(offset) { + var endstr=document.cookie.indexOf(";",offset); + if (endstr==-1)endstr=document.cookie.length; + return unescape(document.cookie.substring(offset, endstr)); +} +function GetCookie(name) { + var arg=name+"="; + var alen=arg.length; + var clen=document.cookie.length; + var i=0; + + if (cookiesNotEnabled()) + { + var args = getArgs(); + if (args[name] !== false) { + return args[name]; + } + } else { + while(i maxNumberOfShownSearchHits ) ? maxNumberOfShownSearchHits : matchesArrIndices.length; + + for(var ndx=0, resultsArr = new Array(); ndx < ndxEnd; ndx++) { + resultsArr[resultsArr.length] = buildResultsStrOneLine(matchesArrIndices[ndx],matchesArrHits[ndx]); + } + + // Convert this 'resultsArr' into a single string that will be injected into this search page. + innerHTMLstring = "
    "; + for( var ndx=0; ndx < resultsArr.length; ndx++ ) { + innerHTMLstring = innerHTMLstring + resultsArr[ndx]; + } + innerHTMLstring = innerHTMLstring + "
"; + return innerHTMLstring; +} +//--------------------------------------------------- +function buildResultsStrOneLine(a,b) +{ + var retStr; + retStr = "
  • "; + + // for debug... + //retStr += "target=\"content\" "; + //retStr += "title=\"" + top.fileArr[a] + ".html-"; + //retStr += a + "-" + b + "\">"; + + // for production... + //retStr += "target=\"AdobeHelp\" >"; + + retStr += titleArr[a] + "
  • "; + return retStr; +} +//--------------------------------------------------- +// checkForHits +// Break up the search term into words. +// Check each of those words against... +// (a) cached titles and +// (b) cached content lines +// Perform the hit detection for each one, +// storing the results into (hits-ordered) +// 'matchesArrIndices' and +// 'matchesArrHits'. +//--------------------------------------------------- +function checkForHits() +{ + var inputWords = new Array(); + var tempArr = new Array(); + + // Split the search term into individual search words + tempArr = searchTerm.split(" "); + for(var ndx=0; ndx < tempArr.length; ndx++) { + if( tempArr[ndx].length ) { + inputWords[inputWords.length] = tempArr[ndx]; + } + } + + // Initialization + matchesArrHits = new Array(); + matchesArrIndices = new Array(); + + // Initialize the 'maskArr' and the 'hitsArr' + maskArr = new Array(); + hitsArr = new Array(); + for( var ndx = 0; ndx < fileArr.length; ndx++ ) { + maskArr[maskArr.length] = 1; + hitsArr[hitsArr.length] = 0; + } + + // Do checking for matches on EACH OF THE INPUT WORDS + for( var ndx = 0; ndx < inputWords.length; ndx++ ) { + + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + if( ! checkForHitsWordAgainstPages( inputWords[ndx] ) ) { + return; // No sense in continuing, match has failed. + } + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + for( var ndx2 = 0; ndx2 < hitsArr.length; ndx2++ ) { + if( hitsArr[ndx2] == 0 ) { + maskArr[ndx2] = 0; + } + else { + if( maskArr[ndx2] != 0 ) { + maskArr[ndx2] += hitsArr[ndx2]; + } + } + } + } + + // From the final 'maskArr', generate 'matchesArrHits' and 'matchesArrIndices' + for( var ndx = 0; ndx < maskArr.length; ndx++ ) { + if( maskArr[ndx] ) { + matchesArrHits[matchesArrHits.length] = maskArr[ndx]; + matchesArrIndices[matchesArrIndices.length] = ndx; + } + } + + // If there were any hits, then sort them by highest hits first + if( matchesArrIndices.length ) { + bubbleSortWithShadow(matchesArrHits, matchesArrIndices); + } +} +//--------------------------------------------------- +function checkForHitsWordAgainstPages(w) +{ + var hitAnywhere = 0; + + if(showInputStringAlerts){alert( "Length of sc2: " + sc2.length );} + + // Process each of the content lines (one per file/page) + for(var ndx=0; ndx < sc2.length; ndx++) { + + // Put the cached title into glob_title + glob_title = sc1[ndx]; + + // Put the cached content line into glob_phrase + glob_phrase = sc2[ndx]; + + if( maskArr[ndx] ) { + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + if( document.isDblByte ) { + hitsArr[ndx] = checkForHitsWordAgainstTitleAndLine2(w,ndx); + } + else { + hitsArr[ndx] = checkForHitsWordAgainstTitleAndLine(w,ndx); + } + if( hitsArr[ndx] ) { + hitAnywhere = 1; + } + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + } + } + return hitAnywhere; +} +//--------------------------------------------------- +function checkForHitsWordAgainstTitleAndLine(w, lineNdx) +{ + var words; + var titleHitCnt = 0; + var contentHitCnt = 0; + var regex = new RegExp(w, "i"); + + // TITLE ......................................... + words = new Array(); + if(glob_title!=null){ + words = glob_title.split(" "); + } + // EXECUTE TITLE MATCH TEST + for( var ndx = 0; ndx < words.length; ndx++ ) { + if( w == words[ndx] ) { + titleHitCnt += 100; + break; + } + } + + // CONTENT ......................................... + words = new Array(); + if(glob_phrase!=null){ + words = glob_phrase.split(" "); + } + // EXECUTE CONTENT MATCH TEST + if( regex.test(glob_phrase) ) { // See if word is anywhere within the phrase first. + for( var ndx = 0; ndx < words.length; ndx++ ) { + if( w == words[ndx] ) { + contentHitCnt += getInstanceCount(lineNdx,ndx); + break; + } + //else if( w < words[ndx] ) { // If word is greater than the remaining words, leave + // break; + //} + } + } + + return titleHitCnt + contentHitCnt; +} +//--------------------------------------------------- +function checkForHitsWordAgainstTitleAndLine2(w, lineNdx) +{ + var titleHitCnt = 0; + var contentHitCnt = 0; + + // TITLE ......................................... + if( glob_title.indexOf(w) != -1 ) { + titleHitCnt = 100; + } + + // CONTENT ......................................... + contentHitCnt = indexesOf(glob_phrase,w); + + return titleHitCnt + contentHitCnt; +} +//--------------------------------------------------- +// checkTheInputString +// +// returns... +// empty string - if there is valid input to search +// message string - if there is NO VALID INPUT to search +//--------------------------------------------------- +function checkTheInputString() +{ + var myArr = new Array(); + var tempArr = new Array(); + var foundStopOrShortWord = 0; + var ptn1 = /\d\D/; + var ptn2 = /\D\d/; + + handleWhitespaceRemoval(); + searchTerm = searchTerm.replace (/(%20)+/g," ") ; + searchTerm = searchTerm.toLowerCase(); + + searchTerm = filterTheChars(searchTerm); + + handleWhitespaceRemoval(); + + if( searchTerm.length ) { + + // Split the searchTerm + tempArr = searchTerm.split(" ",100); + if(showInputStringAlerts){alert( "size of tempArr: " + tempArr.length );} + + // Handle periods + for( var ndx = 0; ndx < tempArr.length; ndx++ ) { + if( tempArr[ndx].charCodeAt(0) == 46 ) { // periods at the start of word + //tempArr[ndx] = tempArr[ndx].substr(1); // NOTE: We don't want to do this. (e.g. ".txt") + } + if( tempArr[ndx].charCodeAt(tempArr[ndx].length-1) == 46 ) { // end of word + tempArr[ndx] = tempArr[ndx].substr(0,tempArr[ndx].length-1); + } + } + + // Do stopwords and shortwords removal + for( var ndx = 0; ndx < tempArr.length; ndx++ ) { + var word = tempArr[ndx]; + if(showInputStringAlerts){alert( "Checking word: " + word );} + + if( ! sw[word] ) { + if( word.length < 2 ) { + foundStopOrShortWord = 1; + } + else if( (word.length > 2) || (ptn1.test(word) || ptn2.test(word)) ) { + myArr[myArr.length] = tempArr[ndx]; + } + else { + foundStopOrShortWord = 1; + } + } + else { + foundStopOrShortWord = 1; + } + } + + // Now reconstruct the searchTerm, based upon the 'myArr' + searchTerm = ""; + for( var ndx = 0; ndx < myArr.length; ndx++ ) { + searchTerm = searchTerm + myArr[ndx] + " "; + } + + handleWhitespaceRemoval(); + + if(showInputStringAlerts){alert( "FINAL SEARCH TERM: *" + searchTerm + "*" );} + + if( foundStopOrShortWord && ! searchTerm.length ) { + return MSG_stopAndShortWords; + } + srch_input_massaged = searchTerm; + return ""; + } + else { + return MSG_noSearchTermEntered; + } +} +//--------------------------------------------------- +function checkTheInputString2() // double-byte version +{ + var tempArr = new Array(); + + handleWhitespaceRemoval(); + searchTerm = searchTerm.toLowerCase(); + + if( searchTerm.length ) { + + // Split the searchTerm + tempArr = searchTerm.split(" ",100); + if(showInputStringAlerts){alert( "number of search terms: " + tempArr.length );} + + // Now reconstruct the searchTerm, based upon the 'tempArr' + searchTerm = ""; + for( var ndx = 0; ndx < tempArr.length; ndx++ ) { + searchTerm = searchTerm + tempArr[ndx] + " "; + } + handleWhitespaceRemoval(); + +if(showInputStringAlerts){alert( "Massaged search term: " + searchTerm );} + + srch_input_massaged = searchTerm; + return ""; + } + else { + return MSG_noSearchTermEntered; + } +} +//--------------------------------------------------- +function doIEsearch() +{ + var stStr = ""; + + document.forms[0].sh_term.value = srch_input_verbatim; + + if( srch_message.length ) { + document.getElementById("results").innerHTML = srch_message; + srch_message = ""; + } + else if( srch_1_shot ) { + srch_1_shot = 0; + + searchTerm = srch_input_massaged; + checkForHits(); // Sets: 'matchesArrIndices' and 'matchesArrHits' + + if( matchesArrIndices.length ) { // If there were matches/hits... /* Changed for CS4 */ + + stStr = "
    " + MSG_pagesContaining + "" + srch_input_massaged + "


    \n"; + + document.getElementById("results").innerHTML = stStr + buildHtmlResultsStr(); + } + else { /* Changed for CS4 */ + document.getElementById("results").innerHTML = MSG_noPagesContain + "" + srch_input_massaged + "

    "; + + } + //searching_message.style.visibility="visible"; + } + srch_input_verbatim = ""; +} +//--------------------------------------------------- +function getInstanceCount( lineIndex, wordIndex ) +{ + var instancesStr = instances[lineIndex]; // e.g. "1432931" + var ch = instancesStr.substr(wordIndex,1); + + return parseInt(ch); +} +//--------------------------------------------------- +function handleWhitespaceRemoval() +{ + var re_1 = /^\s/; + var re_2 = /\s$/; + var re_3 = /\s\s/; + var temp; + + // Remove leading whitespace + while( true ) { + temp = searchTerm.replace(re_1,""); + if( temp == searchTerm ) { + break; + } + searchTerm = temp; + } + // Remove trailing whitespace + while( true ) { + temp = searchTerm.replace(re_2,""); + if( temp == searchTerm ) { + break; + } + searchTerm = temp; + } + // Replace multiple contiguous spaces with a single space + while( searchTerm.search(re_3) != -1 ) { + temp = searchTerm.replace(re_3," "); + searchTerm = temp; + } +} +//-------------------------------------------------- +function isAcceptableChar(chrNdx) +{ + var acceptableChars = new Array( 32, 46, 95 ); // space, period, underscore + + for( var ndx = 0; ndx < acceptableChars.length; ndx++ ) { + if( chrNdx == acceptableChars[ndx] ) { + return true; + } + } + return false; +} +//-------------------------------------------------- +function indexesOf(str,ptn) +{ + var position = 0; + var hits = -1; + var start = -1; + + while( position != -1 ) { + position = str.indexOf(ptn, start+1); + hits += 1; + start = position; + } + return hits; +} +//-------------------------------------------------- +function filterTheChars(line) +{ + var retStr = "",tempStr; + var ch, chCode, retChr; + var ndx; + + for( ndx = 0; ndx < line.length; ndx++ ) { + ch = line.substr(ndx,1); + chCode = ch.charCodeAt(0); + + + if( (chCode >= 192) && (chCode <= 221) ) { // Handle capital upper-ASCII characters + chCode = chCode + 32; + retChr = ASCII_to_char(chCode); + } + else if( withinAcceptableRanges(chCode) || isAcceptableChar(chCode) ) { // Acceptable characters + retChr = ch; + } + else { + tempStr = isLigatureChar(chCode); + + if( tempStr.length ) { //Don't replace ligatures. + retChr = ch; + } + else { // Turn all else into space + retChr = " "; + } + } + + // Grow the return string + retStr += retChr; + } + + return retStr; +} +//-------------------------------------------------- +function isLigatureChar(codeToCheck) { + var xlatTblNdx, code, replStr = ""; + + for( xlatTblNdx = 0; xlatTblNdx < upperAsciiXlatTbl.length; xlatTblNdx+=2 ) { + + code = upperAsciiXlatTbl[xlatTblNdx]; + if( code == codeToCheck ) { + replStr = upperAsciiXlatTbl[xlatTblNdx+1]; + break; + } + } + + return replStr; +} +//-------------------------------------------------- +function respondToSearchButton() +{ + var myStr; + document.getElementById("results").innerHTML = ""; //We don't expect this to be slow enough to need a message. + srch_input_verbatim = document.forms[0].sh_term.value; + searchTerm = document.forms[0].sh_term.value; + + if( document.isDblByte ) { + myStr = checkTheInputString2(); + } + else { + myStr = checkTheInputString(); + } + + srch_message = myStr; + srch_1_shot = srch_message.length ? 0 : 1; + + doIEsearch(); +} +//-------------------------------------------------- +function respondToSearchLoad() +{ + var externalQuery = GetCookie("externalQuery"); + if (externalQuery == null) { + externalQuery = GetCookie("sh_term"); + } + + if (externalQuery != null) { + var myStr; + srch_input_verbatim = externalQuery; + searchTerm = externalQuery; + + if(document.isDblByte ) { + myStr = checkTheInputString2(); + } + else { + myStr = checkTheInputString(); + } + + srch_message = myStr; + srch_1_shot = srch_message.length ? 0 : 1; + + doIEsearch(); + } +} +//--------------------------------------------------- +function strReplace(orig,src,dest) +{ + var startPos=0; + var matchPos = orig.indexOf(src,startPos); + var retLine=""; + + while(matchPos != -1) { + retLine = retLine + orig.substring(startPos,matchPos) + dest; + startPos = matchPos+1; + matchPos = orig.indexOf(src,startPos); + } + if(! retLine.length) {return orig;} + else {return retLine+orig.substring(startPos,orig.length);} +} +//-------------------------------------------------- +function withinAcceptableRanges(chrNdx) +{ + var acceptableRanges = new Array( "48-57","65-90","97-122","224-229","231-239","241-246","248-253","255-255"); + + for( var ndx = 0; ndx < acceptableRanges.length; ndx++ ) { + var start_finish = new Array(); + + start_finish = acceptableRanges[ndx].split("-"); + + if( (chrNdx >= start_finish[0]) && (chrNdx <= start_finish[1]) ) { + return true; + } + } + return false; +} +//-------------------------------------------------- +function ASCII_to_char(num_in) +{ + var str_out = ""; + var num_out = parseInt(num_in); + + num_out = unescape('%' + num_out.toString(16)); + str_out += num_out; + + return unescape(str_out); +} +//-------------------------------------------------- +var agt=navigator.userAgent.toLowerCase(); +var use_ie_behavior = false; +var use_ie_6_behavior = false; +if (agt.indexOf("msie") != -1) { + use_ie_behavior = true; +} +if ((agt.indexOf("msie 5") != -1) || (agt.indexOf("msie 6") != -1)) { + use_ie_6_behavior = true; +} + +//-------------------------------------------------- + +var Url = { + + // public method for url encoding + encode : function (string) { + return escape(this._utf8_encode(string)); + }, + + // public method for url decoding + decode : function (string) { + return this._utf8_decode(unescape(string)); + }, + + // private method for UTF-8 encoding + _utf8_encode : function (string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + + for (var n = 0; n < string.length; n++) { + + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + + return utftext; + }, + + // private method for UTF-8 decoding + _utf8_decode : function (utftext) { + var string = ""; + var i = 0; + var c = c1 = c2 = 0; + + while ( i < utftext.length ) { + + c = utftext.charCodeAt(i); + + if (c < 128) { + string += String.fromCharCode(c); + i++; + } + else if((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i+1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } + else { + c2 = utftext.charCodeAt(i+1); + c3 = utftext.charCodeAt(i+2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + + } + + return string; + } + +} diff --git a/duo/js/greensock-v12-js/docs/images/AirIcon12x12.gif b/duo/js/greensock-v12-js/docs/images/AirIcon12x12.gif new file mode 100755 index 0000000..bc9ce69 Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/AirIcon12x12.gif differ diff --git a/duo/js/greensock-v12-js/docs/images/collapsed.gif b/duo/js/greensock-v12-js/docs/images/collapsed.gif new file mode 100755 index 0000000..f803408 Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/collapsed.gif differ diff --git a/duo/js/greensock-v12-js/docs/images/detailHeaderRule.jpg b/duo/js/greensock-v12-js/docs/images/detailHeaderRule.jpg new file mode 100755 index 0000000..e73a03b Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/detailHeaderRule.jpg differ diff --git a/duo/js/greensock-v12-js/docs/images/detailSectionHeader.jpg b/duo/js/greensock-v12-js/docs/images/detailSectionHeader.jpg new file mode 100755 index 0000000..4979b55 Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/detailSectionHeader.jpg differ diff --git a/duo/js/greensock-v12-js/docs/images/expanded.gif b/duo/js/greensock-v12-js/docs/images/expanded.gif new file mode 100755 index 0000000..33779b0 Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/expanded.gif differ diff --git a/duo/js/greensock-v12-js/docs/images/inherit-arrow.gif b/duo/js/greensock-v12-js/docs/images/inherit-arrow.gif new file mode 100755 index 0000000..bfb4ea7 Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/inherit-arrow.gif differ diff --git a/duo/js/greensock-v12-js/docs/images/inheritedSummary.gif b/duo/js/greensock-v12-js/docs/images/inheritedSummary.gif new file mode 100755 index 0000000..800b34b Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/inheritedSummary.gif differ diff --git a/duo/js/greensock-v12-js/docs/images/logo.jpg b/duo/js/greensock-v12-js/docs/images/logo.jpg new file mode 100755 index 0000000..01d0a14 Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/logo.jpg differ diff --git a/duo/js/greensock-v12-js/docs/images/titleTableBottom.jpg b/duo/js/greensock-v12-js/docs/images/titleTableBottom.jpg new file mode 100755 index 0000000..5c7c510 Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/titleTableBottom.jpg differ diff --git a/duo/js/greensock-v12-js/docs/images/titleTableMiddle.jpg b/duo/js/greensock-v12-js/docs/images/titleTableMiddle.jpg new file mode 100755 index 0000000..c878113 Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/titleTableMiddle.jpg differ diff --git a/duo/js/greensock-v12-js/docs/images/titleTableTop.jpg b/duo/js/greensock-v12-js/docs/images/titleTableTop.jpg new file mode 100755 index 0000000..f858cdf Binary files /dev/null and b/duo/js/greensock-v12-js/docs/images/titleTableTop.jpg differ diff --git a/duo/js/greensock-v12-js/docs/index-list.html b/duo/js/greensock-v12-js/docs/index-list.html new file mode 100755 index 0000000..774abd5 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/index-list.html @@ -0,0 +1,70 @@ + + + GreenSock JavaScript API Docs + + + + + +

    Index

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AN
    BO
    CP
    DQ
    ER
    FS
    GT
    HU
    IV
    JW
    KX
    LY
    MZ
    + \ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/index.html b/duo/js/greensock-v12-js/docs/index.html new file mode 100755 index 0000000..ab4f7fc --- /dev/null +++ b/duo/js/greensock-v12-js/docs/index.html @@ -0,0 +1,63 @@ + + + + + + +GreenSock Tweening Platform Language Reference + + + + + + + + + + + + + + + + + + + +<body> + +<h2>Frame Alert</h2> + +<p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + <br> + Link to <a href="package-summary.html">Non-frame version.</a> + +</p> + +</body> + + + + + + + diff --git a/duo/js/greensock-v12-js/docs/override.css b/duo/js/greensock-v12-js/docs/override.css new file mode 100755 index 0000000..fa359d7 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/override.css @@ -0,0 +1,12 @@ +/* +//////////////////////////////////////////////////////////////////////////////// +// +// ADOBE SYSTEMS INCORPORATED +// Copyright 2008 Adobe Systems Incorporated +// All Rights Reserved. +// +// NOTICE: Adobe permits you to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// +//////////////////////////////////////////////////////////////////////////////// +*/ \ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/package-frame.html b/duo/js/greensock-v12-js/docs/package-frame.html new file mode 100755 index 0000000..b6a8218 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/package-frame.html @@ -0,0 +1,36 @@ + + + + + + +GreenSock Tweening Platform Language Reference + + + + + + + + + + + +<body> + +<h2>Frame Alert</h2> + +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + <br> + Link to<a href="package-summary.html">Non-frame version.</a> + +</p> + +</body> + + + + + + + diff --git a/duo/js/greensock-v12-js/docs/package-list.html b/duo/js/greensock-v12-js/docs/package-list.html new file mode 100755 index 0000000..0ec4a3a --- /dev/null +++ b/duo/js/greensock-v12-js/docs/package-list.html @@ -0,0 +1 @@ +Package List - GreenSock JavaScript Documentation

    Packages

    com.greensock
    com.greensock.core
    com.greensock.easing
    com.greensock.plugins
    \ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/package-summary.html b/duo/js/greensock-v12-js/docs/package-summary.html new file mode 100755 index 0000000..d9f613d --- /dev/null +++ b/duo/js/greensock-v12-js/docs/package-summary.html @@ -0,0 +1,13 @@ +All Packages +


     packageDescription
     com.greensock
     com.greensock.core
     com.greensock.easing
     com.greensock.plugins

    \ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/print.css b/duo/js/greensock-v12-js/docs/print.css new file mode 100755 index 0000000..a8b83f5 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/print.css @@ -0,0 +1,110 @@ +/* +//////////////////////////////////////////////////////////////////////////////// +// +// ADOBE SYSTEMS INCORPORATED +// Copyright 2005-2008 Adobe Systems Incorporated +// All Rights Reserved. +// +// NOTICE: Adobe permits you to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// +//////////////////////////////////////////////////////////////////////////////// +*/ + +body { + color: #000000; + background: #ffffff; + font-family: "Times New Roman", Times, serif; + font-size: 12pt; +} +a { + text-decoration: none; + color: #000000; +} +pre { + white-space: -moz-pre-wrap; /* Mozilla */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* IE */ +} +.titleTableTopNav, .titleTableSubNav, .logoImage { + display: none; +} +.packageFrame { + display: none; +} +.titleTableSubTitle { + font-weight: bold; +} +.classHeaderTableLabel { + padding-right: 10px; + vertical-align: top; +} +.showHideLinks { + display: none; +} +html>body code { + font-size: 10pt; +} +.summaryTableTitle, .detailSectionHeader { + font-size: 14pt; + font-weight: bold; + padding-top: 15px; + padding-bottom: 5px; +} +.summaryTable { + border: 1px solid #000000; + border-collapse: collapse; + width: 100%; +} +.summaryTableDescription { + padding-bottom: 20px; +} +.summaryTableSignatureCol, .summaryTableOwnerCol, .summaryTableLastCol, .summaryTableCol { + border: 1px solid #000000; +} +.summaryTablePaddingCol { + border: 1px solid #000000; + border-right: 0px; +} +.summaryTableInheritanceCol, .summaryTableOperatorCol, .summaryTableStatementCol, .summaryTableSecondCol { + border: 1px solid #000000; + border-left: 0px; +} +.summaryTableLastCol { + vertical-align: top; +} +.detailHeader { + font-size: 13pt; + padding-top: 100px; +} +.detailHeaderName { + font-weight: bold; +} +.detailHeaderType { + padding-left: 5px; +} +.detailHeaderRule { + background: #FF0000; +} +.seeAlso { + padding-bottom: 20px; + margin-top: -20px; +} +.innertable { + border-collapse: collapse; +} +.innertable td,.innertable th { + border: 1px solid #000000; + padding-left: 5px; + padding-right: 5px; +} +.listing { + font-size: 10pt; +} +.feedbackLink { + display: none; +} +.copyright { + font-size: 10pt; +} \ No newline at end of file diff --git a/duo/js/greensock-v12-js/docs/style.css b/duo/js/greensock-v12-js/docs/style.css new file mode 100755 index 0000000..ffc01c9 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/style.css @@ -0,0 +1,578 @@ +/* +//////////////////////////////////////////////////////////////////////////////// +// +// ADOBE SYSTEMS INCORPORATED +// Copyright 2005-2008 Adobe Systems Incorporated +// All Rights Reserved. +// +// NOTICE: Adobe permits you to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// +//////////////////////////////////////////////////////////////////////////////// +*/ + +.titleTable { + width: 100%; +} +.titleTableTitle { + white-space: nowrap; + padding-left: 15px; + padding-right: 5px; + font-size: 13px; + height: 44px; + background-image: url(images/titleTableTop.jpg); + background-repeat: repeat-x; +} +.titleTableSearch { + white-space: nowrap; + background-image: url(images/titleTableTop.jpg); + background-repeat: repeat-x; + padding-right: 10px; + width: 220; +} +.searchForm { + margin-top: 0px; + margin-bottom: 0px; +} +.titleTableTopNav { + font-size: 12px; + background-image: url(images/titleTableTop.jpg); + background-repeat: repeat-x; +} +.titleTableLogo { + width: 76px; + height: 80px; + vertical-align: top; +} +.titleTableRow2 { + color: #000000; + height: 31px; + background-image: url(images/titleTableMiddle.jpg); + background-repeat: repeat-x; +} +.titleTableSubTitle { + font-size: 20px; + padding-left: 15px; + padding-right: 5px; +} +.titleTableSubNav { + //white-space: nowrap; + font-size: 12px; +} +.titleTableRow3 { + height: 5px; + background-image: url(images/titleTableBottom.jpg); + background-repeat: repeat-x; +} +.logoImage { + width: 76px; + height: 80px; +} + +.classHeaderTable { + margin-top: 20px; +} +.classHeaderTable td { + vertical-align: top; + padding-bottom: 4px; +} +.classHeaderTableLabel { + font-weight: bold; + padding-right: 15px; +} +.classSignature { + text-indent: -20px; + padding-left: 20px; +} +.inheritanceList { + text-indent: -20px; + padding-left: 20px; +} +.inheritArrow { + width: 15px; + height: 9px; +} +.mxmlSyntax { + margin-bottom: -13px; +} +.collapsedImage { + width: 9px; + height: 9px; + border: 0; +} +.expandedImage { + width: 9px; + height: 9px; + border: 0; +} +.classFrameContent { + margin-right: 5px; + margin-left: 10px; + margin-top: 10px; + margin-bottom: 10px; +} +.classFrameContent td { + white-space: nowrap; + padding-right: 5px; +} + +.eclipseBody { + display: none; +} + +/** html { + overflow-y:scroll; +}*/ + +img { + border:0; +} + +.annotation { + font-size: 20px; + margin-top: 20px; +} + +.label { + color: #444444; + font-weight: bold; +} + +strong { + color: #444444; +} + +.summarySection { + margin-left: 20px; + margin-right: 10px; +} +.summaryTableTitle { + font-weight: bold; + font-size: 18px; + padding-top: 20px; + padding-bottom: 5px; +} +* .summaryTable { + margin-top: 10px; + border: #999999 1px solid; + width: 100%; + margin-bottom: 20px; +} +html>body .summaryTable { + margin-top: 10px; + border: #999999 1px solid; + width: 100%; + margin-bottom: 20px; + margin-right: 10px; +} +.summaryTable th { + color: #FFFFFF; + background-color: #627C9D; + white-space: nowrap; +} +.summaryTable td { + border-top: #999999 1px solid; + vertical-align: top; +} +.summaryTablePaddingCol { + width: 5px; +} +.summaryTableInheritanceCol { + width: 14px; +} +.summaryTableSignatureCol { + padding-right: 10px; +} +.summaryTableOperatorCol { + padding-left: 10px; + padding-right: 10px; + font-weight: bold; +} +.summaryTableStatementCol { + padding-left: 10px; + padding-right: 10px; + font-weight: bold; + white-space: nowrap; +} +.summarySignature { + text-indent: -20px; + padding-left: 20px; +} +.summaryTableOwnerCol { + padding-right: 10px; + width: 10px; +} +.summaryTableCol, .summaryTableSecondCol { +} +.signatureLink { + font-weight: bold; +} +.summaryTableDescription { + color: #333333; +} +.summaryTableLastCol { + padding-right: 10px; +} +.inheritedSummaryImage { + width: 14px; + height: 14px; +} + +.showHideLink { +} +.showHideLinkImage { + width: 9px; + height: 9px; +} +.hideInheritedConstant { + display: none; +} +.showInheritedConstant { + display: inline; +} +.hideInheritedProtectedConstant { + display: none; +} +.showInheritedProtectedConstant { + display: inline; +} +.hideInheritedProperty { + display: none; +} +.showInheritedProperty { + display: inline; +} +.hideInheritedProtectedProperty { + display: none; +} +.showInheritedProtectedProperty { + display: inline; +} +.hideInheritedMethod { + display: none; +} +.showInheritedMethod { + display: inline; +} +.hideInheritedProtectedMethod { + display: none; +} +.showInheritedProtectedMethod { + display: inline; +} +.hideInheritedEvent { + display: none; +} +.showInheritedEvent { + display: inline; +} +.hideInheritedStyle { + display: none; +} +.showInheritedStyle { + display: inline; +} +.hideInheritedEffect { + display: none; +} +.showInheritedEffect { + display: inline; +} + + +.detailSectionHeader { + color: #434343; + font-size: 18px; + padding-left: 10px; + padding-top: 4px; + padding-bottom: 4px; + margin-top: 40px; + margin-bottom: 3px; + background-image: url(images/detailSectionHeader.jpg); + background-repeat: repeat-x; +} +.detailHeader { + margin-left: 20px; + margin-top: 10px; + margin-bottom: 3px; +} +.detailHeaderName { + font-weight: bold; + font-size: 16px; + vertical-align: baseline; + white-space: nowrap; +} +.detailHeaderType { + font-size: 12px; + vertical-align: baseline; + padding-right: 10px; + padding-left: 7px; + white-space: nowrap; +} +.detailHeaderParens { + font-size: 14px; + font-weight: bold; + padding-left: 1px; + padding-bottom: 2px; +} +.detailHeaderRule { + background-image: url(images/detailHeaderRule.jpg); + background-repeat: repeat-x; + width: 100%; + background-position: 50%; +} +.detailBody { + margin-left: 20px; + margin-right: 15px; + margin-bottom: 20px; +} +.exampleHeader { + background-color: #C8D1DF; + padding-left: 10px; + padding-top: 3px; + padding-bottom: 3px; +} + +.seeAlso { + margin-top: -13px; + padding-left: 20px; +} + +/* +#header { + padding: 0; + margin: 0; + border: 2px solid +} +*/ + +body { + font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; + color: #000000; + background-color:#FFFFFF; + margin: 0px; + padding: 0px; +} + +body, td, th { + font-size: 13px; +} + +.MainContent { + margin-left: 20px; + margin-right: 10px; + margin-bottom: 10px; +} + +code { + font-family: "Lucida Console", "Courier New", Courier, monospace; + font-size: 12px; +} +pre { + font-family: "Lucida Console", "Courier New", Courier, monospace; + font-size: 12px; +} + +th { + text-align: left; + font-weight: bold; + vertical-align: bottom; +} + +table { + background-color: white; +} + +table.withBorder { + border-color: #BBBBBB; + border-width: 1px; + border-style: solid; +} + +.innertable { + border-collapse: collapse; /* to eliminate the default table cellspacing=2 */ +} + +.innertable th { + border: 1px solid #000000; + background:#DDDDDD; + padding: 2px 3px 2px 3px; +} + +.innertable td { + border: 1px solid #000000; + padding: 2px 3px 2px 3px; +} + +.paramSpacer { + font-size: 5px; +} + +/* Custom Classes */ +.row0 { + background-color: #F2F2F2; +} + +.row1 { + background-color: #FFFFFF; +} + +.prow0 { + background-color: #F2F2F2; +} + +.prow1 { + background-color: #FFFFFF; +} + +.idxrow { + padding-top: 5px; +} + +.SummaryTableHeader { + background-color: #CCCCCC; +} + +.InheritedTableHeader { + background-color: #EEEEEE; +} + +.PackageTableHeader { + background-color: #EEEEEE; +} + + +/* Links */ +a:link { + color: #0000CC; + text-decoration: none; +} + +a:visited { + color: #0000CC; + text-decoration: none; +} + +a:hover { + text-decoration: underline; + color: #0000CC; +} + +a:active { + text-decoration: none; + color: #CC0000; +} + +/* Headings */ +h1, h2, h3, h4, h5, h6 { + font-family: "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; + font-weight: bold; + margin-top: 3px; + margin-bottom: 3px; + letter-spacing: 1px; + width: 90%; +} + +h1 { + font-size: 18px; +} + +h2 { + font-size: 16px; +} + +h3 { + font-size: 14px; +} + +h4 { + font-size: 12px; + color: #666666; +} + +h5 { + font-size: 11px; +} +.copyright { + margin-top: 30px; + color: #777777; + font-size: 10px; + padding-bottom: 5px; +} +.inheritanceList { + line-height: 19px; +} +.private { + color: #999999; +} +.flashonly { + color: #000000; +} +.flexonly { + display:none; + color: #000000; +} +.hide { + display:none; +} +.feedbackLink { +/* display:none; */ +} + +/* IE */ +* html .listing { + width: 93%; + padding-left: 6%; + padding-right: 5px; + padding-top: 5px; + padding-bottom: 5px; + overflow-x: auto; + background-color: #F2F2F2; + margin-bottom: 10px; + margin-top: 10px; + font-family: "Lucida Console", "Courier New", Courier, monospace; + font-size: 12px; +} + +/* Firefox, Netscape */ +html>body .listing pre +{ + overflow: auto; + padding-left: 40px; + padding-right: 5px; + padding-top: 5px; + padding-bottom: 5px; + background-color: #F2F2F2; + margin-top: 10px; + margin-bottom: 10px; + font-family: "Lucida Console", "Courier New", Courier, monospace; + font-size: 12px; +} + +.listingIcons +{ + padding: 0px; + margin-top: 10px; + height: 15px; +} + +.pageTop +{ + height:10px; +} + +.hideInheritedSkinState { + display: none; +} + +.showInheritedSkinState { + display: inline; +} + +.hideInheritedSkinPart { + display: none; +} + +.showInheritedSkinPart { + display: inline; +} diff --git a/duo/js/greensock-v12-js/docs/title-bar.html b/duo/js/greensock-v12-js/docs/title-bar.html new file mode 100755 index 0000000..0011073 --- /dev/null +++ b/duo/js/greensock-v12-js/docs/title-bar.html @@ -0,0 +1,41 @@ + + + GreenSock JavaScript API Docs + + + + + + + + + + + + + + +
    + + + + + +
    GreenSock JavaScript API Docs  + All Packages  |  All Classes  |  Index  |  No Frames +
    +
    + + + + + + + + +
     
     
    +
    + + \ No newline at end of file diff --git a/duo/js/greensock-v12-js/documentation.html b/duo/js/greensock-v12-js/documentation.html new file mode 100755 index 0000000..d23059b --- /dev/null +++ b/duo/js/greensock-v12-js/documentation.html @@ -0,0 +1,10 @@ + + + + + +Documentation + + + + diff --git a/duo/js/greensock-v12-js/examples/.DS_Store b/duo/js/greensock-v12-js/examples/.DS_Store new file mode 100755 index 0000000..bf83ae7 Binary files /dev/null and b/duo/js/greensock-v12-js/examples/.DS_Store differ diff --git a/duo/js/greensock-v12-js/examples/beatbox.html b/duo/js/greensock-v12-js/examples/beatbox.html new file mode 100755 index 0000000..ff4a895 --- /dev/null +++ b/duo/js/greensock-v12-js/examples/beatbox.html @@ -0,0 +1,281 @@ + + + + + TweenLite.js Beatbox Demo + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    Tap the button and it will animate the bars below according to your click speed/pattern.
    +
    + + diff --git a/duo/js/greensock-v12-js/examples/bouncing_ball.html b/duo/js/greensock-v12-js/examples/bouncing_ball.html new file mode 100755 index 0000000..9b7e4a6 --- /dev/null +++ b/duo/js/greensock-v12-js/examples/bouncing_ball.html @@ -0,0 +1,65 @@ + + + + + + + + Carnation Bouncing Ball Demo + + + + + + + + +
    + +
    + + + diff --git a/duo/js/greensock-v12-js/examples/carousel.html b/duo/js/greensock-v12-js/examples/carousel.html new file mode 100755 index 0000000..5e186ab --- /dev/null +++ b/duo/js/greensock-v12-js/examples/carousel.html @@ -0,0 +1,121 @@ + + + + + Carnation Carousel Demo (from, to, ease) + + + + + + + +
    +
    1
    +
    2
    +
    3
    +
    4
    +
    + + + diff --git a/duo/js/greensock-v12-js/examples/css/beatbox.css b/duo/js/greensock-v12-js/examples/css/beatbox.css new file mode 100755 index 0000000..589f219 --- /dev/null +++ b/duo/js/greensock-v12-js/examples/css/beatbox.css @@ -0,0 +1,50 @@ +html, body { + overflow: hidden; } + +body { + background-color: #000000; + margin: 0px; + padding: 0px; + color: #CCCCCC; + font-family: Verdana, Geneva, sans-serif; } + +.barwrapper { + width: 5%; + float: left; } + +.bar { + position: relative; + background-color: #333; + width: 95%; + margin-left: 2.5%; } + +#bars { + position: absolute; + top: 100%; + width: 100%; + height: 100%; } + +#trigger { + position: absolute; + top: 20%; + width: 100%; } + +#button { + display: block; + margin: 0 auto; + background-image: url("../img/tap_button.png"); + width: 100px; + height: 100px; } + +#hit { + position: absolute; + width: 100%; + height: 100%; } + +#instructions { + display: block; + margin: 0 auto; + text-align:center; + margin-top:20px; + color:#999999; +} diff --git a/duo/js/greensock-v12-js/examples/falling_text.html b/duo/js/greensock-v12-js/examples/falling_text.html new file mode 100755 index 0000000..087525a --- /dev/null +++ b/duo/js/greensock-v12-js/examples/falling_text.html @@ -0,0 +1,138 @@ + + + + + + Falling Text + + + + + + +
    +
    +

    + Enter some text: +

    + + +
    + + + + + + + + diff --git a/duo/js/greensock-v12-js/examples/img/carnation_background_pattern_1.gif b/duo/js/greensock-v12-js/examples/img/carnation_background_pattern_1.gif new file mode 100755 index 0000000..ff250d4 Binary files /dev/null and b/duo/js/greensock-v12-js/examples/img/carnation_background_pattern_1.gif differ diff --git a/duo/js/greensock-v12-js/examples/js/mootools-core-1.4.5-full-compat-yc.js b/duo/js/greensock-v12-js/examples/js/mootools-core-1.4.5-full-compat-yc.js new file mode 100755 index 0000000..288f2a8 --- /dev/null +++ b/duo/js/greensock-v12-js/examples/js/mootools-core-1.4.5-full-compat-yc.js @@ -0,0 +1,527 @@ +/* +--- +MooTools: the javascript framework + +web build: + - http://mootools.net/core/76bf47062d6c1983d66ce47ad66aa0e0 + +packager build: + - packager build Core/Core Core/Array Core/String Core/Number Core/Function Core/Object Core/Event Core/Browser Core/Class Core/Class.Extras Core/Slick.Parser Core/Slick.Finder Core/Element Core/Element.Style Core/Element.Event Core/Element.Delegation Core/Element.Dimensions Core/Fx Core/Fx.CSS Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request Core/Request.HTML Core/Request.JSON Core/Cookie Core/JSON Core/DOMReady Core/Swiff + +copyrights: + - [MooTools](http://mootools.net) + +licenses: + - [MIT License](http://mootools.net/license.txt) +... +*/ + +(function(){this.MooTools={version:"1.4.5",build:"ab8ea8824dc3b24b6666867a2c4ed58ebb762cf0"};var e=this.typeOf=function(i){if(i==null){return"null";}if(i.$family!=null){return i.$family(); +}if(i.nodeName){if(i.nodeType==1){return"element";}if(i.nodeType==3){return(/\S/).test(i.nodeValue)?"textnode":"whitespace";}}else{if(typeof i.length=="number"){if(i.callee){return"arguments"; +}if("item" in i){return"collection";}}}return typeof i;};var u=this.instanceOf=function(w,i){if(w==null){return false;}var v=w.$constructor||w.constructor; +while(v){if(v===i){return true;}v=v.parent;}if(!w.hasOwnProperty){return false;}return w instanceof i;};var f=this.Function;var r=true;for(var q in {toString:1}){r=null; +}if(r){r=["hasOwnProperty","valueOf","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","constructor"];}f.prototype.overloadSetter=function(v){var i=this; +return function(x,w){if(x==null){return this;}if(v||typeof x!="string"){for(var y in x){i.call(this,y,x[y]);}if(r){for(var z=r.length;z--;){y=r[z];if(x.hasOwnProperty(y)){i.call(this,y,x[y]); +}}}}else{i.call(this,x,w);}return this;};};f.prototype.overloadGetter=function(v){var i=this;return function(x){var y,w;if(typeof x!="string"){y=x;}else{if(arguments.length>1){y=arguments; +}else{if(v){y=[x];}}}if(y){w={};for(var z=0;z>>0; +b>>0;b>>0;for(var a=(d<0)?Math.max(0,b+d):d||0;a>>0,b=Array(d);for(var a=0;a>>0; +b-1:String(this).indexOf(a)>-1;},trim:function(){return String(this).replace(/^\s+|\s+$/g,""); +},clean:function(){return String(this).replace(/\s+/g," ").trim();},camelCase:function(){return String(this).replace(/-\D/g,function(a){return a.charAt(1).toUpperCase(); +});},hyphenate:function(){return String(this).replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase());});},capitalize:function(){return String(this).replace(/\b[a-z]/g,function(a){return a.toUpperCase(); +});},escapeRegExp:function(){return String(this).replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");},toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this); +},hexToRgb:function(b){var a=String(this).match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=String(this).match(/\d{1,3}/g); +return(a)?a.rgbToHex(b):null;},substitute:function(a,b){return String(this).replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1); +}return(a[c]!=null)?a[c]:"";});}});Number.implement({limit:function(b,a){return Math.min(a,Math.max(b,this));},round:function(a){a=Math.pow(10,a||0).toFixed(a<0?-a:0); +return Math.round(this*a)/a;},times:function(b,c){for(var a=0;a1?Array.slice(arguments,1):null,d=function(){};var c=function(){var g=e,h=arguments.length;if(this instanceof c){d.prototype=a.prototype; +g=new d;}var f=(!b&&!h)?a.call(g):a.apply(g,b&&h?b.concat(Array.slice(arguments)):b||arguments);return g==e?f:g;};return c;},pass:function(b,c){var a=this; +if(b!=null){b=Array.from(b);}return function(){return a.apply(c,b||arguments);};},delay:function(b,c,a){return setTimeout(this.pass((a==null?[]:a),c),b); +},periodical:function(c,b,a){return setInterval(this.pass((a==null?[]:a),b),c);}});delete Function.prototype.bind;Function.implement({create:function(b){var a=this; +b=b||{};return function(d){var c=b.arguments;c=(c!=null)?Array.from(c):Array.slice(arguments,(b.event)?1:0);if(b.event){c=[d||window.event].extend(c);}var e=function(){return a.apply(b.bind||null,c); +};if(b.delay){return setTimeout(e,b.delay);}if(b.periodical){return setInterval(e,b.periodical);}if(b.attempt){return Function.attempt(e);}return e();}; +},bind:function(c,b){var a=this;if(b!=null){b=Array.from(b);}return function(){return a.apply(c,b||arguments);};},bindWithEvent:function(c,b){var a=this; +if(b!=null){b=Array.from(b);}return function(d){return a.apply(c,(b==null)?arguments:[d].concat(b));};},run:function(a,b){return this.apply(b,Array.from(a)); +}});if(Object.create==Function.prototype.create){Object.create=null;}var $try=Function.attempt;(function(){var a=Object.prototype.hasOwnProperty;Object.extend({subset:function(d,g){var f={}; +for(var e=0,b=g.length;e]*>([\s\S]*?)<\/script>/gi,function(r,s){e+=s+"\n"; +return"";});if(p===true){o.exec(e);}else{if(typeOf(p)=="function"){p(e,q);}}return q;});o.extend({Document:this.Document,Window:this.Window,Element:this.Element,Event:this.Event}); +this.Window=this.$constructor=new Type("Window",function(){});this.$family=Function.from("window").hide();Window.mirror(function(e,p){h[e]=p;});this.Document=k.$constructor=new Type("Document",function(){}); +k.$family=Function.from("document").hide();Document.mirror(function(e,p){k[e]=p;});k.html=k.documentElement;if(!k.head){k.head=k.getElementsByTagName("head")[0]; +}if(k.execCommand){try{k.execCommand("BackgroundImageCache",false,true);}catch(g){}}if(this.attachEvent&&!this.addEventListener){var c=function(){this.detachEvent("onunload",c); +k.head=k.html=k.window=null;};this.attachEvent("onunload",c);}var m=Array.from;try{m(k.html.childNodes);}catch(g){Array.from=function(p){if(typeof p!="string"&&Type.isEnumerable(p)&&typeOf(p)!="array"){var e=p.length,q=new Array(e); +while(e--){q[e]=p[e];}return q;}return m(p);};var l=Array.prototype,n=l.slice;["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice"].each(function(e){var p=l[e]; +Array[e]=function(q){return p.apply(Array.from(q),n.call(arguments,1));};});}if(o.Platform.ios){o.Platform.ipod=true;}o.Engine={};var d=function(p,e){o.Engine.name=p; +o.Engine[p+e]=true;o.Engine.version=e;};if(o.ie){o.Engine.trident=true;switch(o.version){case 6:d("trident",4);break;case 7:d("trident",5);break;case 8:d("trident",6); +}}if(o.firefox){o.Engine.gecko=true;if(o.version>=3){d("gecko",19);}else{d("gecko",18);}}if(o.safari||o.chrome){o.Engine.webkit=true;switch(o.version){case 2:d("webkit",419); +break;case 3:d("webkit",420);break;case 4:d("webkit",525);}}if(o.opera){o.Engine.presto=true;if(o.version>=9.6){d("presto",960);}else{if(o.version>=9.5){d("presto",950); +}else{d("presto",925);}}}if(o.name=="unknown"){switch((a.match(/(?:webkit|khtml|gecko)/)||[])[0]){case"webkit":case"khtml":o.Engine.webkit=true;break;case"gecko":o.Engine.gecko=true; +}}this.$exec=o.exec;})();(function(){var b={};var a=this.DOMEvent=new Type("DOMEvent",function(c,g){if(!g){g=window;}c=c||g.event;if(c.$extended){return c; +}this.event=c;this.$extended=true;this.shift=c.shiftKey;this.control=c.ctrlKey;this.alt=c.altKey;this.meta=c.metaKey;var i=this.type=c.type;var h=c.target||c.srcElement; +while(h&&h.nodeType==3){h=h.parentNode;}this.target=document.id(h);if(i.indexOf("key")==0){var d=this.code=(c.which||c.keyCode);this.key=b[d]||Object.keyOf(Event.Keys,d); +if(i=="keydown"){if(d>111&&d<124){this.key="f"+(d-111);}else{if(d>95&&d<106){this.key=d-96;}}}if(this.key==null){this.key=String.fromCharCode(d).toLowerCase(); +}}else{if(i=="click"||i=="dblclick"||i=="contextmenu"||i=="DOMMouseScroll"||i.indexOf("mouse")==0){var j=g.document;j=(!j.compatMode||j.compatMode=="CSS1Compat")?j.html:j.body; +this.page={x:(c.pageX!=null)?c.pageX:c.clientX+j.scrollLeft,y:(c.pageY!=null)?c.pageY:c.clientY+j.scrollTop};this.client={x:(c.pageX!=null)?c.pageX-g.pageXOffset:c.clientX,y:(c.pageY!=null)?c.pageY-g.pageYOffset:c.clientY}; +if(i=="DOMMouseScroll"||i=="mousewheel"){this.wheel=(c.wheelDelta)?c.wheelDelta/120:-(c.detail||0)/3;}this.rightClick=(c.which==3||c.button==2);if(i=="mouseover"||i=="mouseout"){var k=c.relatedTarget||c[(i=="mouseover"?"from":"to")+"Element"]; +while(k&&k.nodeType==3){k=k.parentNode;}this.relatedTarget=document.id(k);}}else{if(i.indexOf("touch")==0||i.indexOf("gesture")==0){this.rotation=c.rotation; +this.scale=c.scale;this.targetTouches=c.targetTouches;this.changedTouches=c.changedTouches;var f=this.touches=c.touches;if(f&&f[0]){var e=f[0];this.page={x:e.pageX,y:e.pageY}; +this.client={x:e.clientX,y:e.clientY};}}}}if(!this.client){this.client={};}if(!this.page){this.page={};}});a.implement({stop:function(){return this.preventDefault().stopPropagation(); +},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault(); +}else{this.event.returnValue=false;}return this;}});a.defineKey=function(d,c){b[d]=c;return this;};a.defineKeys=a.defineKey.overloadSetter(true);a.defineKeys({"38":"up","40":"down","37":"left","39":"right","27":"esc","32":"space","8":"backspace","9":"tab","46":"delete","13":"enter"}); +})();var Event=DOMEvent;Event.Keys={};Event.Keys=new Hash(Event.Keys);(function(){var a=this.Class=new Type("Class",function(h){if(instanceOf(h,Function)){h={initialize:h}; +}var g=function(){e(this);if(g.$prototyping){return this;}this.$caller=null;var i=(this.initialize)?this.initialize.apply(this,arguments):this;this.$caller=this.caller=null; +return i;}.extend(this).implement(h);g.$constructor=a;g.prototype.$constructor=g;g.prototype.parent=c;return g;});var c=function(){if(!this.$caller){throw new Error('The method "parent" cannot be called.'); +}var g=this.$caller.$name,h=this.$caller.$owner.parent,i=(h)?h.prototype[g]:null;if(!i){throw new Error('The method "'+g+'" has no parent.');}return i.apply(this,arguments); +};var e=function(g){for(var h in g){var j=g[h];switch(typeOf(j)){case"object":var i=function(){};i.prototype=j;g[h]=e(new i);break;case"array":g[h]=j.clone(); +break;}}return g;};var b=function(g,h,j){if(j.$origin){j=j.$origin;}var i=function(){if(j.$protected&&this.$caller==null){throw new Error('The method "'+h+'" cannot be called.'); +}var l=this.caller,m=this.$caller;this.caller=m;this.$caller=i;var k=j.apply(this,arguments);this.$caller=m;this.caller=l;return k;}.extend({$owner:g,$origin:j,$name:h}); +return i;};var f=function(h,i,g){if(a.Mutators.hasOwnProperty(h)){i=a.Mutators[h].call(this,i);if(i==null){return this;}}if(typeOf(i)=="function"){if(i.$hidden){return this; +}this.prototype[h]=(g)?i:b(this,h,i);}else{Object.merge(this.prototype,h,i);}return this;};var d=function(g){g.$prototyping=true;var h=new g;delete g.$prototyping; +return h;};a.implement("implement",f.overloadSetter());a.Mutators={Extends:function(g){this.parent=g;this.prototype=d(g);},Implements:function(g){Array.from(g).each(function(j){var h=new j; +for(var i in h){f.call(this,i,h[i],true);}},this);}};})();(function(){this.Chain=new Class({$chain:[],chain:function(){this.$chain.append(Array.flatten(arguments)); +return this;},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){this.$chain.empty(); +return this;}});var a=function(b){return b.replace(/^on([A-Z])/,function(c,d){return d.toLowerCase();});};this.Events=new Class({$events:{},addEvent:function(d,c,b){d=a(d); +if(c==$empty){return this;}this.$events[d]=(this.$events[d]||[]).include(c);if(b){c.internal=true;}return this;},addEvents:function(b){for(var c in b){this.addEvent(c,b[c]); +}return this;},fireEvent:function(e,c,b){e=a(e);var d=this.$events[e];if(!d){return this;}c=Array.from(c);d.each(function(f){if(b){f.delay(b,this,c);}else{f.apply(this,c); +}},this);return this;},removeEvent:function(e,d){e=a(e);var c=this.$events[e];if(c&&!d.internal){var b=c.indexOf(d);if(b!=-1){delete c[b];}}return this; +},removeEvents:function(d){var e;if(typeOf(d)=="object"){for(e in d){this.removeEvent(e,d[e]);}return this;}if(d){d=a(d);}for(e in this.$events){if(d&&d!=e){continue; +}var c=this.$events[e];for(var b=c.length;b--;){if(b in c){this.removeEvent(e,c[b]);}}}return this;}});this.Options=new Class({setOptions:function(){var b=this.options=Object.merge.apply(null,[{},this.options].append(arguments)); +if(this.addEvent){for(var c in b){if(typeOf(b[c])!="function"||!(/^on[A-Z]/).test(c)){continue;}this.addEvent(c,b[c]);delete b[c];}}return this;}});})(); +(function(){var k,n,l,g,a={},c={},m=/\\/g;var e=function(q,p){if(q==null){return null;}if(q.Slick===true){return q;}q=(""+q).replace(/^\s+|\s+$/g,"");g=!!p; +var o=(g)?c:a;if(o[q]){return o[q];}k={Slick:true,expressions:[],raw:q,reverse:function(){return e(this.raw,true);}};n=-1;while(q!=(q=q.replace(j,b))){}k.length=k.expressions.length; +return o[k.raw]=(g)?h(k):k;};var i=function(o){if(o==="!"){return" ";}else{if(o===" "){return"!";}else{if((/^!/).test(o)){return o.replace(/^!/,"");}else{return"!"+o; +}}}};var h=function(u){var r=u.expressions;for(var p=0;p+)\\s*|(\\s+)|(+|\\*)|\\#(+)|\\.(+)|\\[\\s*(+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)".replace(//,"["+f(">+~`!@$%^&={}\\;/g,"(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])").replace(//g,"(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])")); +function b(x,s,D,z,r,C,q,B,A,y,u,F,G,v,p,w){if(s||n===-1){k.expressions[++n]=[];l=-1;if(s){return"";}}if(D||z||l===-1){D=D||" ";var t=k.expressions[n]; +if(g&&t[l]){t[l].reverseCombinator=i(D);}t[++l]={combinator:D,tag:"*"};}var o=k.expressions[n][l];if(r){o.tag=r.replace(m,"");}else{if(C){o.id=C.replace(m,""); +}else{if(q){q=q.replace(m,"");if(!o.classList){o.classList=[];}if(!o.classes){o.classes=[];}o.classList.push(q);o.classes.push({value:q,regexp:new RegExp("(^|\\s)"+f(q)+"(\\s|$)")}); +}else{if(G){w=w||p;w=w?w.replace(m,""):null;if(!o.pseudos){o.pseudos=[];}o.pseudos.push({key:G.replace(m,""),value:w,type:F.length==1?"class":"element"}); +}else{if(B){B=B.replace(m,"");u=(u||"").replace(m,"");var E,H;switch(A){case"^=":H=new RegExp("^"+f(u));break;case"$=":H=new RegExp(f(u)+"$");break;case"~=":H=new RegExp("(^|\\s)"+f(u)+"(\\s|$)"); +break;case"|=":H=new RegExp("^"+f(u)+"(-|$)");break;case"=":E=function(I){return u==I;};break;case"*=":E=function(I){return I&&I.indexOf(u)>-1;};break; +case"!=":E=function(I){return u!=I;};break;default:E=function(I){return !!I;};}if(u==""&&(/^[*$^]=$/).test(A)){E=function(){return false;};}if(!E){E=function(I){return I&&H.test(I); +};}if(!o.attributes){o.attributes=[];}o.attributes.push({key:B,operator:A,value:u,test:E});}}}}}return"";}var d=(this.Slick||{});d.parse=function(o){return e(o); +};d.escapeRegExp=f;if(!this.Slick){this.Slick=d;}}).apply((typeof exports!="undefined")?exports:this);(function(){var k={},m={},d=Object.prototype.toString; +k.isNativeCode=function(c){return(/\{\s*\[native code\]\s*\}/).test(""+c);};k.isXML=function(c){return(!!c.xmlVersion)||(!!c.xml)||(d.call(c)=="[object XMLDocument]")||(c.nodeType==9&&c.documentElement.nodeName!="HTML"); +};k.setDocument=function(w){var p=w.nodeType;if(p==9){}else{if(p){w=w.ownerDocument;}else{if(w.navigator){w=w.document;}else{return;}}}if(this.document===w){return; +}this.document=w;var A=w.documentElement,o=this.getUIDXML(A),s=m[o],r;if(s){for(r in s){this[r]=s[r];}return;}s=m[o]={};s.root=A;s.isXMLDocument=this.isXML(w); +s.brokenStarGEBTN=s.starSelectsClosedQSA=s.idGetsName=s.brokenMixedCaseQSA=s.brokenGEBCN=s.brokenCheckedQSA=s.brokenEmptyAttributeQSA=s.isHTMLDocument=s.nativeMatchesSelector=false; +var q,u,y,z,t;var x,v="slick_uniqueid";var c=w.createElement("div");var n=w.body||w.getElementsByTagName("body")[0]||A;n.appendChild(c);try{c.innerHTML=''; +s.isHTMLDocument=!!w.getElementById(v);}catch(C){}if(s.isHTMLDocument){c.style.display="none";c.appendChild(w.createComment(""));u=(c.getElementsByTagName("*").length>1); +try{c.innerHTML="foo";x=c.getElementsByTagName("*");q=(x&&!!x.length&&x[0].nodeName.charAt(0)=="/");}catch(C){}s.brokenStarGEBTN=u||q;try{c.innerHTML=''; +s.idGetsName=w.getElementById(v)===c.firstChild;}catch(C){}if(c.getElementsByClassName){try{c.innerHTML='';c.getElementsByClassName("b").length; +c.firstChild.className="b";z=(c.getElementsByClassName("b").length!=2);}catch(C){}try{c.innerHTML='';y=(c.getElementsByClassName("a").length!=2); +}catch(C){}s.brokenGEBCN=z||y;}if(c.querySelectorAll){try{c.innerHTML="foo";x=c.querySelectorAll("*");s.starSelectsClosedQSA=(x&&!!x.length&&x[0].nodeName.charAt(0)=="/"); +}catch(C){}try{c.innerHTML='';s.brokenMixedCaseQSA=!c.querySelectorAll(".MiX").length;}catch(C){}try{c.innerHTML=''; +s.brokenCheckedQSA=(c.querySelectorAll(":checked").length==0);}catch(C){}try{c.innerHTML='';s.brokenEmptyAttributeQSA=(c.querySelectorAll('[class*=""]').length!=0); +}catch(C){}}try{c.innerHTML='
    ';t=(c.firstChild.getAttribute("action")!="s");}catch(C){}s.nativeMatchesSelector=A.matchesSelector||A.mozMatchesSelector||A.webkitMatchesSelector; +if(s.nativeMatchesSelector){try{s.nativeMatchesSelector.call(A,":slick");s.nativeMatchesSelector=null;}catch(C){}}}try{A.slick_expando=1;delete A.slick_expando; +s.getUID=this.getUIDHTML;}catch(C){s.getUID=this.getUIDXML;}n.removeChild(c);c=x=n=null;s.getAttribute=(s.isHTMLDocument&&t)?function(G,E){var H=this.attributeGetters[E]; +if(H){return H.call(G);}var F=G.getAttributeNode(E);return(F)?F.nodeValue:null;}:function(F,E){var G=this.attributeGetters[E];return(G)?G.call(F):F.getAttribute(E); +};s.hasAttribute=(A&&this.isNativeCode(A.hasAttribute))?function(F,E){return F.hasAttribute(E);}:function(F,E){F=F.getAttributeNode(E);return !!(F&&(F.specified||F.nodeValue)); +};var D=A&&this.isNativeCode(A.contains),B=w&&this.isNativeCode(w.contains);s.contains=(D&&B)?function(E,F){return E.contains(F);}:(D&&!B)?function(E,F){return E===F||((E===w)?w.documentElement:E).contains(F); +}:(A&&A.compareDocumentPosition)?function(E,F){return E===F||!!(E.compareDocumentPosition(F)&16);}:function(E,F){if(F){do{if(F===E){return true;}}while((F=F.parentNode)); +}return false;};s.documentSorter=(A.compareDocumentPosition)?function(F,E){if(!F.compareDocumentPosition||!E.compareDocumentPosition){return 0;}return F.compareDocumentPosition(E)&4?-1:F===E?0:1; +}:("sourceIndex" in A)?function(F,E){if(!F.sourceIndex||!E.sourceIndex){return 0;}return F.sourceIndex-E.sourceIndex;}:(w.createRange)?function(H,F){if(!H.ownerDocument||!F.ownerDocument){return 0; +}var G=H.ownerDocument.createRange(),E=F.ownerDocument.createRange();G.setStart(H,0);G.setEnd(H,0);E.setStart(F,0);E.setEnd(F,0);return G.compareBoundaryPoints(Range.START_TO_END,E); +}:null;A=null;for(r in s){this[r]=s[r];}};var f=/^([#.]?)((?:[\w-]+|\*))$/,h=/\[.+[*$^]=(?:""|'')?\]/,g={};k.search=function(U,z,H,s){var p=this.found=(s)?null:(H||[]); +if(!U){return p;}else{if(U.navigator){U=U.document;}else{if(!U.nodeType){return p;}}}var F,O,V=this.uniques={},I=!!(H&&H.length),y=(U.nodeType==9);if(this.document!==(y?U:U.ownerDocument)){this.setDocument(U); +}if(I){for(O=p.length;O--;){V[this.getUID(p[O])]=true;}}if(typeof z=="string"){var r=z.match(f);simpleSelectors:if(r){var u=r[1],v=r[2],A,E;if(!u){if(v=="*"&&this.brokenStarGEBTN){break simpleSelectors; +}E=U.getElementsByTagName(v);if(s){return E[0]||null;}for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}else{if(u=="#"){if(!this.isHTMLDocument||!y){break simpleSelectors; +}A=U.getElementById(v);if(!A){return p;}if(this.idGetsName&&A.getAttributeNode("id").nodeValue!=v){break simpleSelectors;}if(s){return A||null;}if(!(I&&V[this.getUID(A)])){p.push(A); +}}else{if(u=="."){if(!this.isHTMLDocument||((!U.getElementsByClassName||this.brokenGEBCN)&&U.querySelectorAll)){break simpleSelectors;}if(U.getElementsByClassName&&!this.brokenGEBCN){E=U.getElementsByClassName(v); +if(s){return E[0]||null;}for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}else{var T=new RegExp("(^|\\s)"+e.escapeRegExp(v)+"(\\s|$)");E=U.getElementsByTagName("*"); +for(O=0;A=E[O++];){className=A.className;if(!(className&&T.test(className))){continue;}if(s){return A;}if(!(I&&V[this.getUID(A)])){p.push(A);}}}}}}if(I){this.sort(p); +}return(s)?null:p;}querySelector:if(U.querySelectorAll){if(!this.isHTMLDocument||g[z]||this.brokenMixedCaseQSA||(this.brokenCheckedQSA&&z.indexOf(":checked")>-1)||(this.brokenEmptyAttributeQSA&&h.test(z))||(!y&&z.indexOf(",")>-1)||e.disableQSA){break querySelector; +}var S=z,x=U;if(!y){var C=x.getAttribute("id"),t="slickid__";x.setAttribute("id",t);S="#"+t+" "+S;U=x.parentNode;}try{if(s){return U.querySelector(S)||null; +}else{E=U.querySelectorAll(S);}}catch(Q){g[z]=1;break querySelector;}finally{if(!y){if(C){x.setAttribute("id",C);}else{x.removeAttribute("id");}U=x;}}if(this.starSelectsClosedQSA){for(O=0; +A=E[O++];){if(A.nodeName>"@"&&!(I&&V[this.getUID(A)])){p.push(A);}}}else{for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}if(I){this.sort(p); +}return p;}F=this.Slick.parse(z);if(!F.length){return p;}}else{if(z==null){return p;}else{if(z.Slick){F=z;}else{if(this.contains(U.documentElement||U,z)){(p)?p.push(z):p=z; +return p;}else{return p;}}}}this.posNTH={};this.posNTHLast={};this.posNTHType={};this.posNTHTypeLast={};this.push=(!I&&(s||(F.length==1&&F.expressions[0].length==1)))?this.pushArray:this.pushUID; +if(p==null){p=[];}var M,L,K;var B,J,D,c,q,G,W;var N,P,o,w,R=F.expressions;search:for(O=0;(P=R[O]);O++){for(M=0;(o=P[M]);M++){B="combinator:"+o.combinator; +if(!this[B]){continue search;}J=(this.isXMLDocument)?o.tag:o.tag.toUpperCase();D=o.id;c=o.classList;q=o.classes;G=o.attributes;W=o.pseudos;w=(M===(P.length-1)); +this.bitUniques={};if(w){this.uniques=V;this.found=p;}else{this.uniques={};this.found=[];}if(M===0){this[B](U,J,D,q,G,W,c);if(s&&w&&p.length){break search; +}}else{if(s&&w){for(L=0,K=N.length;L1)){this.sort(p);}return(s)?(p[0]||null):p;};k.uidx=1;k.uidk="slick-uniqueid";k.getUIDXML=function(n){var c=n.getAttribute(this.uidk); +if(!c){c=this.uidx++;n.setAttribute(this.uidk,c);}return c;};k.getUIDHTML=function(c){return c.uniqueNumber||(c.uniqueNumber=this.uidx++);};k.sort=function(c){if(!this.documentSorter){return c; +}c.sort(this.documentSorter);return c;};k.cacheNTH={};k.matchNTH=/^([+-]?\d*)?([a-z]+)?([+-]\d+)?$/;k.parseNTHArgument=function(q){var o=q.match(this.matchNTH); +if(!o){return false;}var p=o[2]||false;var n=o[1]||1;if(n=="-"){n=-1;}var c=+o[3]||0;o=(p=="n")?{a:n,b:c}:(p=="odd")?{a:2,b:1}:(p=="even")?{a:2,b:0}:{a:0,b:n}; +return(this.cacheNTH[q]=o);};k.createNTHPseudo=function(p,n,c,o){return function(s,q){var u=this.getUID(s);if(!this[c][u]){var A=s.parentNode;if(!A){return false; +}var r=A[p],t=1;if(o){var z=s.nodeName;do{if(r.nodeName!=z){continue;}this[c][this.getUID(r)]=t++;}while((r=r[n]));}else{do{if(r.nodeType!=1){continue; +}this[c][this.getUID(r)]=t++;}while((r=r[n]));}}q=q||"n";var v=this.cacheNTH[q]||this.parseNTHArgument(q);if(!v){return false;}var y=v.a,x=v.b,w=this[c][u]; +if(y==0){return x==w;}if(y>0){if(w":function(p,c,r,o,n,q){if((p=p.firstChild)){do{if(p.nodeType==1){this.push(p,c,r,o,n,q); +}}while((p=p.nextSibling));}},"+":function(p,c,r,o,n,q){while((p=p.nextSibling)){if(p.nodeType==1){this.push(p,c,r,o,n,q);break;}}},"^":function(p,c,r,o,n,q){p=p.firstChild; +if(p){if(p.nodeType==1){this.push(p,c,r,o,n,q);}else{this["combinator:+"](p,c,r,o,n,q);}}},"~":function(q,c,s,p,n,r){while((q=q.nextSibling)){if(q.nodeType!=1){continue; +}var o=this.getUID(q);if(this.bitUniques[o]){break;}this.bitUniques[o]=true;this.push(q,c,s,p,n,r);}},"++":function(p,c,r,o,n,q){this["combinator:+"](p,c,r,o,n,q); +this["combinator:!+"](p,c,r,o,n,q);},"~~":function(p,c,r,o,n,q){this["combinator:~"](p,c,r,o,n,q);this["combinator:!~"](p,c,r,o,n,q);},"!":function(p,c,r,o,n,q){while((p=p.parentNode)){if(p!==this.document){this.push(p,c,r,o,n,q); +}}},"!>":function(p,c,r,o,n,q){p=p.parentNode;if(p!==this.document){this.push(p,c,r,o,n,q);}},"!+":function(p,c,r,o,n,q){while((p=p.previousSibling)){if(p.nodeType==1){this.push(p,c,r,o,n,q); +break;}}},"!^":function(p,c,r,o,n,q){p=p.lastChild;if(p){if(p.nodeType==1){this.push(p,c,r,o,n,q);}else{this["combinator:!+"](p,c,r,o,n,q);}}},"!~":function(q,c,s,p,n,r){while((q=q.previousSibling)){if(q.nodeType!=1){continue; +}var o=this.getUID(q);if(this.bitUniques[o]){break;}this.bitUniques[o]=true;this.push(q,c,s,p,n,r);}}};for(var i in j){k["combinator:"+i]=j[i];}var l={empty:function(c){var n=c.firstChild; +return !(n&&n.nodeType==1)&&!(c.innerText||c.textContent||"").length;},not:function(c,n){return !this.matchNode(c,n);},contains:function(c,n){return(c.innerText||c.textContent||"").indexOf(n)>-1; +},"first-child":function(c){while((c=c.previousSibling)){if(c.nodeType==1){return false;}}return true;},"last-child":function(c){while((c=c.nextSibling)){if(c.nodeType==1){return false; +}}return true;},"only-child":function(o){var n=o;while((n=n.previousSibling)){if(n.nodeType==1){return false;}}var c=o;while((c=c.nextSibling)){if(c.nodeType==1){return false; +}}return true;},"nth-child":k.createNTHPseudo("firstChild","nextSibling","posNTH"),"nth-last-child":k.createNTHPseudo("lastChild","previousSibling","posNTHLast"),"nth-of-type":k.createNTHPseudo("firstChild","nextSibling","posNTHType",true),"nth-last-of-type":k.createNTHPseudo("lastChild","previousSibling","posNTHTypeLast",true),index:function(n,c){return this["pseudo:nth-child"](n,""+(c+1)); +},even:function(c){return this["pseudo:nth-child"](c,"2n");},odd:function(c){return this["pseudo:nth-child"](c,"2n+1");},"first-of-type":function(c){var n=c.nodeName; +while((c=c.previousSibling)){if(c.nodeName==n){return false;}}return true;},"last-of-type":function(c){var n=c.nodeName;while((c=c.nextSibling)){if(c.nodeName==n){return false; +}}return true;},"only-of-type":function(o){var n=o,p=o.nodeName;while((n=n.previousSibling)){if(n.nodeName==p){return false;}}var c=o;while((c=c.nextSibling)){if(c.nodeName==p){return false; +}}return true;},enabled:function(c){return !c.disabled;},disabled:function(c){return c.disabled;},checked:function(c){return c.checked||c.selected;},focus:function(c){return this.isHTMLDocument&&this.document.activeElement===c&&(c.href||c.type||this.hasAttribute(c,"tabindex")); +},root:function(c){return(c===this.root);},selected:function(c){return c.selected;}};for(var b in l){k["pseudo:"+b]=l[b];}var a=k.attributeGetters={"for":function(){return("htmlFor" in this)?this.htmlFor:this.getAttribute("for"); +},href:function(){return("href" in this)?this.getAttribute("href",2):this.getAttribute("href");},style:function(){return(this.style)?this.style.cssText:this.getAttribute("style"); +},tabindex:function(){var c=this.getAttributeNode("tabindex");return(c&&c.specified)?c.nodeValue:null;},type:function(){return this.getAttribute("type"); +},maxlength:function(){var c=this.getAttributeNode("maxLength");return(c&&c.specified)?c.nodeValue:null;}};a.MAXLENGTH=a.maxLength=a.maxlength;var e=k.Slick=(this.Slick||{}); +e.version="1.1.7";e.search=function(n,o,c){return k.search(n,o,c);};e.find=function(c,n){return k.search(c,n,null,true);};e.contains=function(c,n){k.setDocument(c); +return k.contains(c,n);};e.getAttribute=function(n,c){k.setDocument(n);return k.getAttribute(n,c);};e.hasAttribute=function(n,c){k.setDocument(n);return k.hasAttribute(n,c); +};e.match=function(n,c){if(!(n&&c)){return false;}if(!c||c===n){return true;}k.setDocument(n);return k.matchNode(n,c);};e.defineAttributeGetter=function(c,n){k.attributeGetters[c]=n; +return this;};e.lookupAttributeGetter=function(c){return k.attributeGetters[c];};e.definePseudo=function(c,n){k["pseudo:"+c]=function(p,o){return n.call(p,o); +};return this;};e.lookupPseudo=function(c){var n=k["pseudo:"+c];if(n){return function(o){return n.call(this,o);};}return null;};e.override=function(n,c){k.override(n,c); +return this;};e.isXML=k.isXML;e.uidOf=function(c){return k.getUIDHTML(c);};if(!this.Slick){this.Slick=e;}}).apply((typeof exports!="undefined")?exports:this); +var Element=function(b,g){var h=Element.Constructors[b];if(h){return h(g);}if(typeof b!="string"){return document.id(b).set(g);}if(!g){g={};}if(!(/^[\w-]+$/).test(b)){var e=Slick.parse(b).expressions[0][0]; +b=(e.tag=="*")?"div":e.tag;if(e.id&&g.id==null){g.id=e.id;}var d=e.attributes;if(d){for(var a,f=0,c=d.length;f=this.length){delete this[g--];}return e;}.protect());}Array.forEachMethod(function(g,e){Elements.implement(e,g);});Array.mirror(Elements);var d; +try{d=(document.createElement("").name=="x");}catch(b){}var c=function(e){return(""+e).replace(/&/g,"&").replace(/"/g,""");};Document.implement({newElement:function(e,g){if(g&&g.checked!=null){g.defaultChecked=g.checked; +}if(d&&g){e="<"+e;if(g.name){e+=' name="'+c(g.name)+'"';}if(g.type){e+=' type="'+c(g.type)+'"';}e+=">";delete g.name;delete g.type;}return this.id(this.createElement(e)).set(g); +}});})();(function(){Slick.uidOf(window);Slick.uidOf(document);Document.implement({newTextNode:function(e){return this.createTextNode(e);},getDocument:function(){return this; +},getWindow:function(){return this.window;},id:(function(){var e={string:function(E,D,l){E=Slick.find(l,"#"+E.replace(/(\W)/g,"\\$1"));return(E)?e.element(E,D):null; +},element:function(D,E){Slick.uidOf(D);if(!E&&!D.$family&&!(/^(?:object|embed)$/i).test(D.tagName)){var l=D.fireEvent;D._fireEvent=function(F,G){return l(F,G); +};Object.append(D,Element.Prototype);}return D;},object:function(D,E,l){if(D.toElement){return e.element(D.toElement(l),E);}return null;}};e.textnode=e.whitespace=e.window=e.document=function(l){return l; +};return function(D,F,E){if(D&&D.$family&&D.uniqueNumber){return D;}var l=typeOf(D);return(e[l])?e[l](D,F,E||document):null;};})()});if(window.$==null){Window.implement("$",function(e,l){return document.id(e,l,this.document); +});}Window.implement({getDocument:function(){return this.document;},getWindow:function(){return this;}});[Document,Element].invoke("implement",{getElements:function(e){return Slick.search(this,e,new Elements); +},getElement:function(e){return document.id(Slick.find(this,e));}});var m={contains:function(e){return Slick.contains(this,e);}};if(!document.contains){Document.implement(m); +}if(!document.createElement("div").contains){Element.implement(m);}Element.implement("hasChild",function(e){return this!==e&&this.contains(e);});(function(l,E,e){this.Selectors={}; +var F=this.Selectors.Pseudo=new Hash();var D=function(){for(var G in F){if(F.hasOwnProperty(G)){Slick.definePseudo(G,F[G]);delete F[G];}}};Slick.search=function(H,I,G){D(); +return l.call(this,H,I,G);};Slick.find=function(G,H){D();return E.call(this,G,H);};Slick.match=function(H,G){D();return e.call(this,H,G);};})(Slick.search,Slick.find,Slick.match); +var r=function(E,D){if(!E){return D;}E=Object.clone(Slick.parse(E));var l=E.expressions;for(var e=l.length;e--;){l[e][0].combinator=D;}return E;};Object.forEach({getNext:"~",getPrevious:"!~",getParent:"!"},function(e,l){Element.implement(l,function(D){return this.getElement(r(D,e)); +});});Object.forEach({getAllNext:"~",getAllPrevious:"!~",getSiblings:"~~",getChildren:">",getParents:"!"},function(e,l){Element.implement(l,function(D){return this.getElements(r(D,e)); +});});Element.implement({getFirst:function(e){return document.id(Slick.search(this,r(e,">"))[0]);},getLast:function(e){return document.id(Slick.search(this,r(e,">")).getLast()); +},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument;},getElementById:function(e){return document.id(Slick.find(this,"#"+(""+e).replace(/(\W)/g,"\\$1"))); +},match:function(e){return !e||Slick.match(this,e);}});if(window.$$==null){Window.implement("$$",function(e){var H=new Elements;if(arguments.length==1&&typeof e=="string"){return Slick.search(this.document,e,H); +}var E=Array.flatten(arguments);for(var F=0,D=E.length;F(?![^<]*<['"])/)).indexOf(F)<0){return null;}E[F]=true;}}var e=Slick.getAttribute(this,F); +return(!e&&!Slick.hasAttribute(this,F))?null:e;},getProperties:function(){var e=Array.from(arguments);return e.map(this.getProperty,this).associate(e); +},removeProperty:function(e){return this.setProperty(e,null);},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;},set:function(D,l){var e=Element.Properties[D]; +(e&&e.set)?e.set.call(this,l):this.setProperty(D,l);}.overloadSetter(),get:function(l){var e=Element.Properties[l];return(e&&e.get)?e.get.apply(this):this.getProperty(l); +}.overloadGetter(),erase:function(l){var e=Element.Properties[l];(e&&e.erase)?e.erase.apply(this):this.removeProperty(l);return this;},hasClass:function(e){return this.className.clean().contains(e," "); +},addClass:function(e){if(!this.hasClass(e)){this.className=(this.className+" "+e).clean();}return this;},removeClass:function(e){this.className=this.className.replace(new RegExp("(^|\\s)"+e+"(?:\\s|$)"),"$1"); +return this;},toggleClass:function(e,l){if(l==null){l=!this.hasClass(e);}return(l)?this.addClass(e):this.removeClass(e);},adopt:function(){var E=this,e,G=Array.flatten(arguments),F=G.length; +if(F>1){E=e=document.createDocumentFragment();}for(var D=0;D";var a=(t.childNodes.length==1);if(!a){var s="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "),b=document.createDocumentFragment(),u=s.length; +while(u--){b.createElement(s[u]);}}t=null;var g=Function.attempt(function(){var e=document.createElement("table");e.innerHTML="";return true; +});var c=document.createElement("tr"),o="";c.innerHTML=o;var y=(c.innerHTML==o);c=null;if(!g||!y||!a){Element.Properties.html.set=(function(l){var e={table:[1,"","
    "],select:[1,""],tbody:[2,"","
    "],tr:[3,"","
    "]}; +e.thead=e.tfoot=e.tbody;return function(D){var E=e[this.get("tag")];if(!E&&!a){E=[0,"",""];}if(!E){return l.call(this,D);}var H=E[0],G=document.createElement("div"),F=G; +if(!a){b.appendChild(G);}G.innerHTML=[E[1],D,E[2]].flatten().join("");while(H--){F=F.firstChild;}this.empty().adopt(F.childNodes);if(!a){b.removeChild(G); +}G=null;};})(Element.Properties.html.set);}var n=document.createElement("form");n.innerHTML="";if(n.firstChild.value!="s"){Element.Properties.value={set:function(G){var l=this.get("tag"); +if(l!="select"){return this.setProperty("value",G);}var D=this.getElements("option");for(var E=0;E0||k==null?"visible":"hidden";};var f=(h?function(l,k){l.style.opacity=k;}:(e?function(l,k){var n=l.style; +if(!l.currentStyle||!l.currentStyle.hasLayout){n.zoom=1;}if(k==null||k==1){k="";}else{k="alpha(opacity="+(k*100).limit(0,100).round()+")";}var m=n.filter||l.getComputedStyle("filter")||""; +n.filter=j.test(m)?m.replace(j,k):m+k;if(!n.filter){n.removeAttribute("filter");}}:a));var g=(h?function(l){var k=l.style.opacity||l.getComputedStyle("opacity"); +return(k=="")?1:k.toFloat();}:(e?function(l){var m=(l.style.filter||l.getComputedStyle("filter")),k;if(m){k=m.match(j);}return(k==null||m==null)?1:(k[1]/100); +}:function(l){var k=l.retrieve("$opacity");if(k==null){k=(l.style.visibility=="hidden"?0:1);}return k;}));var b=(i.style.cssFloat==null)?"styleFloat":"cssFloat"; +Element.implement({getComputedStyle:function(m){if(this.currentStyle){return this.currentStyle[m.camelCase()];}var l=Element.getDocument(this).defaultView,k=l?l.getComputedStyle(this,null):null; +return(k)?k.getPropertyValue((m==b)?"float":m.hyphenate()):null;},setStyle:function(l,k){if(l=="opacity"){if(k!=null){k=parseFloat(k);}f(this,k);return this; +}l=(l=="float"?b:l).camelCase();if(typeOf(k)!="string"){var m=(Element.Styles[l]||"@").split(" ");k=Array.from(k).map(function(o,n){if(!m[n]){return""; +}return(typeOf(o)=="number")?m[n].replace("@",Math.round(o)):o;}).join(" ");}else{if(k==String(Number(k))){k=Math.round(k);}}this.style[l]=k;if((k==""||k==null)&&c&&this.style.removeAttribute){this.style.removeAttribute(l); +}return this;},getStyle:function(q){if(q=="opacity"){return g(this);}q=(q=="float"?b:q).camelCase();var k=this.style[q];if(!k||q=="zIndex"){k=[];for(var p in Element.ShortStyles){if(q!=p){continue; +}for(var o in Element.ShortStyles[p]){k.push(this.getStyle(o));}return k.join(" ");}k=this.getComputedStyle(q);}if(k){k=String(k);var m=k.match(/rgba?\([\d\s,]+\)/); +if(m){k=k.replace(m[0],m[0].rgbToHex());}}if(Browser.opera||Browser.ie){if((/^(height|width)$/).test(q)&&!(/px$/.test(k))){var l=(q=="width")?["left","right"]:["top","bottom"],n=0; +l.each(function(r){n+=this.getStyle("border-"+r+"-width").toInt()+this.getStyle("padding-"+r).toInt();},this);return this["offset"+q.capitalize()]-n+"px"; +}if(Browser.ie&&(/^border(.+)Width|margin|padding/).test(q)&&isNaN(parseFloat(k))){return"0px";}}return k;},setStyles:function(l){for(var k in l){this.setStyle(k,l[k]); +}return this;},getStyles:function(){var k={};Array.flatten(arguments).each(function(l){k[l]=this.getStyle(l);},this);return k;}});Element.Styles={left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"}; +Element.implement({setOpacity:function(k){f(this,k);return this;},getOpacity:function(){return g(this);}});Element.Properties.opacity={set:function(k){f(this,k); +a(this,k);},get:function(){return g(this);}};Element.Styles=new Hash(Element.Styles);Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}}; +["Top","Right","Bottom","Left"].each(function(q){var p=Element.ShortStyles;var l=Element.Styles;["margin","padding"].each(function(r){var s=r+q;p[r][s]=l[s]="@px"; +});var o="border"+q;p.border[o]=l[o]="@px @ rgb(@, @, @)";var n=o+"Width",k=o+"Style",m=o+"Color";p[o]={};p.borderWidth[n]=p[o][n]=l[n]="@px";p.borderStyle[k]=p[o][k]=l[k]="@"; +p.borderColor[m]=p[o][m]=l[m]="rgb(@, @, @)";});})();(function(){Element.Properties.events={set:function(b){this.addEvents(b);}};[Element,Window,Document].invoke("implement",{addEvent:function(f,h){var i=this.retrieve("events",{}); +if(!i[f]){i[f]={keys:[],values:[]};}if(i[f].keys.contains(h)){return this;}i[f].keys.push(h);var g=f,b=Element.Events[f],d=h,j=this;if(b){if(b.onAdd){b.onAdd.call(this,h,f); +}if(b.condition){d=function(k){if(b.condition.call(this,k,f)){return h.call(this,k);}return true;};}if(b.base){g=Function.from(b.base).call(this,f);}}var e=function(){return h.call(j); +};var c=Element.NativeEvents[g];if(c){if(c==2){e=function(k){k=new DOMEvent(k,j.getWindow());if(d.call(j,k)===false){k.stop();}};}this.addListener(g,e,arguments[2]); +}i[f].values.push(e);return this;},removeEvent:function(e,d){var c=this.retrieve("events");if(!c||!c[e]){return this;}var h=c[e];var b=h.keys.indexOf(d); +if(b==-1){return this;}var g=h.values[b];delete h.keys[b];delete h.values[b];var f=Element.Events[e];if(f){if(f.onRemove){f.onRemove.call(this,d,e);}if(f.base){e=Function.from(f.base).call(this,e); +}}return(Element.NativeEvents[e])?this.removeListener(e,g,arguments[2]):this;},addEvents:function(b){for(var c in b){this.addEvent(c,b[c]);}return this; +},removeEvents:function(b){var d;if(typeOf(b)=="object"){for(d in b){this.removeEvent(d,b[d]);}return this;}var c=this.retrieve("events");if(!c){return this; +}if(!b){for(d in c){this.removeEvents(d);}this.eliminate("events");}else{if(c[b]){c[b].keys.each(function(e){this.removeEvent(b,e);},this);delete c[b]; +}}return this;},fireEvent:function(e,c,b){var d=this.retrieve("events");if(!d||!d[e]){return this;}c=Array.from(c);d[e].keys.each(function(f){if(b){f.delay(b,this,c); +}else{f.apply(this,c);}},this);return this;},cloneEvents:function(e,d){e=document.id(e);var c=e.retrieve("events");if(!c){return this;}if(!d){for(var b in c){this.cloneEvents(e,b); +}}else{if(c[d]){c[d].keys.each(function(f){this.addEvent(d,f);},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,orientationchange:2,touchstart:2,touchmove:2,touchend:2,touchcancel:2,gesturestart:2,gesturechange:2,gestureend:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,paste:2,input:2,load:2,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1}; +Element.Events={mousewheel:{base:(Browser.firefox)?"DOMMouseScroll":"mousewheel"}};if("onmouseenter" in document.documentElement){Element.NativeEvents.mouseenter=Element.NativeEvents.mouseleave=2; +}else{var a=function(b){var c=b.relatedTarget;if(c==null){return true;}if(!c){return false;}return(c!=this&&c.prefix!="xul"&&typeOf(this)!="document"&&!this.contains(c)); +};Element.Events.mouseenter={base:"mouseover",condition:a};Element.Events.mouseleave={base:"mouseout",condition:a};}if(!window.addEventListener){Element.NativeEvents.propertychange=2; +Element.Events.change={base:function(){var b=this.type;return(this.get("tag")=="input"&&(b=="radio"||b=="checkbox"))?"propertychange":"change";},condition:function(b){return this.type!="radio"||(b.event.propertyName=="checked"&&this.checked); +}};}Element.Events=new Hash(Element.Events);})();(function(){var c=!!window.addEventListener;Element.NativeEvents.focusin=Element.NativeEvents.focusout=2; +var k=function(l,m,n,o,p){while(p&&p!=l){if(m(p,o)){return n.call(p,o,p);}p=document.id(p.parentNode);}};var a={mouseenter:{base:"mouseover"},mouseleave:{base:"mouseout"},focus:{base:"focus"+(c?"":"in"),capture:true},blur:{base:c?"blur":"focusout",capture:true}}; +var b="$delegation:";var i=function(l){return{base:"focusin",remove:function(m,o){var p=m.retrieve(b+l+"listeners",{})[o];if(p&&p.forms){for(var n=p.forms.length; +n--;){p.forms[n].removeEvent(l,p.fns[n]);}}},listen:function(x,r,v,n,t,s){var o=(t.get("tag")=="form")?t:n.target.getParent("form");if(!o){return;}var u=x.retrieve(b+l+"listeners",{}),p=u[s]||{forms:[],fns:[]},m=p.forms,w=p.fns; +if(m.indexOf(o)!=-1){return;}m.push(o);var q=function(y){k(x,r,v,y,t);};o.addEvent(l,q);w.push(q);u[s]=p;x.store(b+l+"listeners",u);}};};var d=function(l){return{base:"focusin",listen:function(m,n,p,q,r){var o={blur:function(){this.removeEvents(o); +}};o[l]=function(s){k(m,n,p,s,r);};q.target.addEvents(o);}};};if(!c){Object.append(a,{submit:i("submit"),reset:i("reset"),change:d("change"),select:d("select")}); +}var h=Element.prototype,f=h.addEvent,j=h.removeEvent;var e=function(l,m){return function(r,q,n){if(r.indexOf(":relay")==-1){return l.call(this,r,q,n); +}var o=Slick.parse(r).expressions[0][0];if(o.pseudos[0].key!="relay"){return l.call(this,r,q,n);}var p=o.tag;o.pseudos.slice(1).each(function(s){p+=":"+s.key+(s.value?"("+s.value+")":""); +});l.call(this,r,q);return m.call(this,p,o.pseudos[0].value,q);};};var g={addEvent:function(v,q,x){var t=this.retrieve("$delegates",{}),r=t[v];if(r){for(var y in r){if(r[y].fn==x&&r[y].match==q){return this; +}}}var p=v,u=q,o=x,n=a[v]||{};v=n.base||p;q=function(B){return Slick.match(B,u);};var w=Element.Events[p];if(w&&w.condition){var l=q,m=w.condition;q=function(C,B){return l(C,B)&&m.call(C,B,v); +};}var z=this,s=String.uniqueID();var A=n.listen?function(B,C){if(!C&&B&&B.target){C=B.target;}if(C){n.listen(z,q,x,B,C,s);}}:function(B,C){if(!C&&B&&B.target){C=B.target; +}if(C){k(z,q,x,B,C);}};if(!r){r={};}r[s]={match:u,fn:o,delegator:A};t[p]=r;return f.call(this,v,A,n.capture);},removeEvent:function(r,n,t,u){var q=this.retrieve("$delegates",{}),p=q[r]; +if(!p){return this;}if(u){var m=r,w=p[u].delegator,l=a[r]||{};r=l.base||m;if(l.remove){l.remove(this,u);}delete p[u];q[m]=p;return j.call(this,r,w);}var o,v; +if(t){for(o in p){v=p[o];if(v.match==n&&v.fn==t){return g.removeEvent.call(this,r,n,t,o);}}}else{for(o in p){v=p[o];if(v.match==n){g.removeEvent.call(this,r,n,v.fn,o); +}}}return this;}};[Element,Window,Document].invoke("implement",{addEvent:e(f,g.addEvent),removeEvent:e(j,g.removeEvent)});})();(function(){var h=document.createElement("div"),e=document.createElement("div"); +h.style.height="0";h.appendChild(e);var d=(e.offsetParent===h);h=e=null;var l=function(m){return k(m,"position")!="static"||a(m);};var i=function(m){return l(m)||(/^(?:table|td|th)$/i).test(m.tagName); +};Element.implement({scrollTo:function(m,n){if(a(this)){this.getWindow().scrollTo(m,n);}else{this.scrollLeft=m;this.scrollTop=n;}return this;},getSize:function(){if(a(this)){return this.getWindow().getSize(); +}return{x:this.offsetWidth,y:this.offsetHeight};},getScrollSize:function(){if(a(this)){return this.getWindow().getScrollSize();}return{x:this.scrollWidth,y:this.scrollHeight}; +},getScroll:function(){if(a(this)){return this.getWindow().getScroll();}return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var n=this.parentNode,m={x:0,y:0}; +while(n&&!a(n)){m.x+=n.scrollLeft;m.y+=n.scrollTop;n=n.parentNode;}return m;},getOffsetParent:d?function(){var m=this;if(a(m)||k(m,"position")=="fixed"){return null; +}var n=(k(m,"position")=="static")?i:l;while((m=m.parentNode)){if(n(m)){return m;}}return null;}:function(){var m=this;if(a(m)||k(m,"position")=="fixed"){return null; +}try{return m.offsetParent;}catch(n){}return null;},getOffsets:function(){if(this.getBoundingClientRect&&!Browser.Platform.ios){var r=this.getBoundingClientRect(),o=document.id(this.getDocument().documentElement),q=o.getScroll(),t=this.getScrolls(),s=(k(this,"position")=="fixed"); +return{x:r.left.toInt()+t.x+((s)?0:q.x)-o.clientLeft,y:r.top.toInt()+t.y+((s)?0:q.y)-o.clientTop};}var n=this,m={x:0,y:0};if(a(this)){return m;}while(n&&!a(n)){m.x+=n.offsetLeft; +m.y+=n.offsetTop;if(Browser.firefox){if(!c(n)){m.x+=b(n);m.y+=g(n);}var p=n.parentNode;if(p&&k(p,"overflow")!="visible"){m.x+=b(p);m.y+=g(p);}}else{if(n!=this&&Browser.safari){m.x+=b(n); +m.y+=g(n);}}n=n.offsetParent;}if(Browser.firefox&&!c(this)){m.x-=b(this);m.y-=g(this);}return m;},getPosition:function(p){var q=this.getOffsets(),n=this.getScrolls(); +var m={x:q.x-n.x,y:q.y-n.y};if(p&&(p=document.id(p))){var o=p.getPosition();return{x:m.x-o.x-b(p),y:m.y-o.y-g(p)};}return m;},getCoordinates:function(o){if(a(this)){return this.getWindow().getCoordinates(); +}var m=this.getPosition(o),n=this.getSize();var p={left:m.x,top:m.y,width:n.x,height:n.y};p.right=p.left+p.width;p.bottom=p.top+p.height;return p;},computePosition:function(m){return{left:m.x-j(this,"margin-left"),top:m.y-j(this,"margin-top")}; +},setPosition:function(m){return this.setStyles(this.computePosition(m));}});[Document,Window].invoke("implement",{getSize:function(){var m=f(this);return{x:m.clientWidth,y:m.clientHeight}; +},getScroll:function(){var n=this.getWindow(),m=f(this);return{x:n.pageXOffset||m.scrollLeft,y:n.pageYOffset||m.scrollTop};},getScrollSize:function(){var o=f(this),n=this.getSize(),m=this.getDocument().body; +return{x:Math.max(o.scrollWidth,m.scrollWidth,n.x),y:Math.max(o.scrollHeight,m.scrollHeight,n.y)};},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var m=this.getSize(); +return{top:0,left:0,bottom:m.y,right:m.x,height:m.y,width:m.x};}});var k=Element.getComputedStyle;function j(m,n){return k(m,n).toInt()||0;}function c(m){return k(m,"-moz-box-sizing")=="border-box"; +}function g(m){return j(m,"border-top-width");}function b(m){return j(m,"border-left-width");}function a(m){return(/^(?:body|html)$/i).test(m.tagName); +}function f(m){var n=m.getDocument();return(!n.compatMode||n.compatMode=="CSS1Compat")?n.html:n.body;}})();Element.alias({position:"setPosition"});[Window,Document,Element].invoke("implement",{getHeight:function(){return this.getSize().y; +},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;},getScrollLeft:function(){return this.getScroll().x; +},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;},getTop:function(){return this.getPosition().y; +},getLeft:function(){return this.getPosition().x;}});(function(){var f=this.Fx=new Class({Implements:[Chain,Events,Options],options:{fps:60,unit:false,duration:500,frames:null,frameSkip:true,link:"ignore"},initialize:function(g){this.subject=this.subject||this; +this.setOptions(g);},getTransition:function(){return function(g){return -(Math.cos(Math.PI*g)-1)/2;};},step:function(g){if(this.options.frameSkip){var h=(this.time!=null)?(g-this.time):0,i=h/this.frameInterval; +this.time=g;this.frame+=i;}else{this.frame++;}if(this.frame=(7-4*d)/11){e=c*c-Math.pow((11-6*d-11*f)/4,2);break;}}return e;},Elastic:function(b,a){return Math.pow(2,10*--b)*Math.cos(20*b*Math.PI*(a&&a[0]||1)/3); +}});["Quad","Cubic","Quart","Quint"].each(function(b,a){Fx.Transitions[b]=new Fx.Transition(function(c){return Math.pow(c,a+2);});});(function(){var d=function(){},a=("onprogress" in new Browser.Request); +var c=this.Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false,timeout:0,noCache:false},initialize:function(e){this.xhr=new Browser.Request(); +this.setOptions(e);this.headers=this.options.headers;},onStateChange:function(){var e=this.xhr;if(e.readyState!=4||!this.running){return;}this.running=false; +this.status=0;Function.attempt(function(){var f=e.status;this.status=(f==1223)?204:f;}.bind(this));e.onreadystatechange=d;if(a){e.onprogress=e.onloadstart=d; +}clearTimeout(this.timer);this.response={text:this.xhr.responseText||"",xml:this.xhr.responseXML};if(this.options.isSuccess.call(this,this.status)){this.success(this.response.text,this.response.xml); +}else{this.failure();}},isSuccess:function(){var e=this.status;return(e>=200&&e<300);},isRunning:function(){return !!this.running;},processScripts:function(e){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return Browser.exec(e); +}return e.stripScripts(this.options.evalScripts);},success:function(f,e){this.onSuccess(this.processScripts(f),e);},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain(); +},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr);},loadstart:function(e){this.fireEvent("loadstart",[e,this.xhr]); +},progress:function(e){this.fireEvent("progress",[e,this.xhr]);},timeout:function(){this.fireEvent("timeout",this.xhr);},setHeader:function(e,f){this.headers[e]=f; +return this;},getHeader:function(e){return Function.attempt(function(){return this.xhr.getResponseHeader(e);}.bind(this));},check:function(){if(!this.running){return true; +}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.pass(arguments,this));return false;}return false;},send:function(o){if(!this.check(o)){return this; +}this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.running=true;var l=typeOf(o);if(l=="string"||l=="element"){o={data:o};}var h=this.options; +o=Object.append({data:h.data,url:h.url,method:h.method},o);var j=o.data,f=String(o.url),e=o.method.toLowerCase();switch(typeOf(j)){case"element":j=document.id(j).toQueryString(); +break;case"object":case"hash":j=Object.toQueryString(j);}if(this.options.format){var m="format="+this.options.format;j=(j)?m+"&"+j:m;}if(this.options.emulation&&!["get","post"].contains(e)){var k="_method="+e; +j=(j)?k+"&"+j:k;e="post";}if(this.options.urlEncoded&&["post","put"].contains(e)){var g=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers["Content-type"]="application/x-www-form-urlencoded"+g; +}if(!f){f=document.location.pathname;}var i=f.lastIndexOf("/");if(i>-1&&(i=f.indexOf("#"))>-1){f=f.substr(0,i);}if(this.options.noCache){f+=(f.contains("?")?"&":"?")+String.uniqueID(); +}if(j&&e=="get"){f+=(f.contains("?")?"&":"?")+j;j=null;}var n=this.xhr;if(a){n.onloadstart=this.loadstart.bind(this);n.onprogress=this.progress.bind(this); +}n.open(e.toUpperCase(),f,this.options.async,this.options.user,this.options.password);if(this.options.user&&"withCredentials" in n){n.withCredentials=true; +}n.onreadystatechange=this.onStateChange.bind(this);Object.each(this.headers,function(q,p){try{n.setRequestHeader(p,q);}catch(r){this.fireEvent("exception",[p,q]); +}},this);this.fireEvent("request");n.send(j);if(!this.options.async){this.onStateChange();}else{if(this.options.timeout){this.timer=this.timeout.delay(this.options.timeout,this); +}}return this;},cancel:function(){if(!this.running){return this;}this.running=false;var e=this.xhr;e.abort();clearTimeout(this.timer);e.onreadystatechange=d; +if(a){e.onprogress=e.onloadstart=d;}this.xhr=new Browser.Request();this.fireEvent("cancel");return this;}});var b={};["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(e){b[e]=function(g){var f={method:e}; +if(g!=null){f.data=g;}return this.send(f);};});c.implement(b);Element.Properties.send={set:function(e){var f=this.get("send").cancel();f.setOptions(e); +return this;},get:function(){var e=this.retrieve("send");if(!e){e=new c({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")}); +this.store("send",e);}return e;}};Element.implement({send:function(e){var f=this.get("send");f.send({data:this,url:e||f.options.url});return this;}});})(); +Request.HTML=new Class({Extends:Request,options:{update:false,append:false,evalScripts:true,filter:false,headers:{Accept:"text/html, application/xml, text/xml, */*"}},success:function(f){var e=this.options,c=this.response; +c.html=f.stripScripts(function(h){c.javascript=h;});var d=c.html.match(/]*>([\s\S]*?)<\/body>/i);if(d){c.html=d[1];}var b=new Element("div").set("html",c.html); +c.tree=b.childNodes;c.elements=b.getElements(e.filter||"*");if(e.filter){c.tree=c.elements;}if(e.update){var g=document.id(e.update).empty();if(e.filter){g.adopt(c.elements); +}else{g.set("html",c.html);}}else{if(e.append){var a=document.id(e.append);if(e.filter){c.elements.reverse().inject(a);}else{a.adopt(b.getChildren());}}}if(e.evalScripts){Browser.exec(c.javascript); +}this.onSuccess(c.tree,c.elements,c.html,c.javascript);}});Element.Properties.load={set:function(a){var b=this.get("load").cancel();b.setOptions(a);return this; +},get:function(){var a=this.retrieve("load");if(!a){a=new Request.HTML({data:this,link:"cancel",update:this,method:"get"});this.store("load",a);}return a; +}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Type.isObject,url:Type.isString}));return this;}});if(typeof JSON=="undefined"){this.JSON={}; +}JSON=new Hash({stringify:JSON.stringify,parse:JSON.parse});(function(){var special={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"}; +var escape=function(chr){return special[chr]||"\\u"+("0000"+chr.charCodeAt(0).toString(16)).slice(-4);};JSON.validate=function(string){string=string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""); +return(/^[\],:{}\s]*$/).test(string);};JSON.encode=JSON.stringify?function(obj){return JSON.stringify(obj);}:function(obj){if(obj&&obj.toJSON){obj=obj.toJSON(); +}switch(typeOf(obj)){case"string":return'"'+obj.replace(/[\x00-\x1f\\"]/g,escape)+'"';case"array":return"["+obj.map(JSON.encode).clean()+"]";case"object":case"hash":var string=[]; +Object.each(obj,function(value,key){var json=JSON.encode(value);if(json){string.push(JSON.encode(key)+":"+json);}});return"{"+string+"}";case"number":case"boolean":return""+obj; +case"null":return"null";}return null;};JSON.decode=function(string,secure){if(!string||typeOf(string)!="string"){return null;}if(secure||JSON.secure){if(JSON.parse){return JSON.parse(string); +}if(!JSON.validate(string)){throw new Error("JSON could not decode the input; security is enabled and the value is not secure.");}}return eval("("+string+")"); +};})();Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(a){this.parent(a);Object.append(this.headers,{Accept:"application/json","X-Request":"JSON"}); +},success:function(c){var b;try{b=this.response.json=JSON.decode(c,this.options.secure);}catch(a){this.fireEvent("error",[c,a]);return;}if(b==null){this.onFailure(); +}else{this.onSuccess(b,c);}}});var Cookie=new Class({Implements:Options,options:{path:"/",domain:false,duration:false,secure:false,document:document,encode:true},initialize:function(b,a){this.key=b; +this.setOptions(a);},write:function(b){if(this.options.encode){b=encodeURIComponent(b);}if(this.options.domain){b+="; domain="+this.options.domain;}if(this.options.path){b+="; path="+this.options.path; +}if(this.options.duration){var a=new Date();a.setTime(a.getTime()+this.options.duration*24*60*60*1000);b+="; expires="+a.toGMTString();}if(this.options.secure){b+="; secure"; +}this.options.document.cookie=this.key+"="+b;return this;},read:function(){var a=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)"); +return(a)?decodeURIComponent(a[1]):null;},dispose:function(){new Cookie(this.key,Object.merge({},this.options,{duration:-1})).write("");return this;}}); +Cookie.write=function(b,c,a){return new Cookie(b,a).write(c);};Cookie.read=function(a){return new Cookie(a).read();};Cookie.dispose=function(b,a){return new Cookie(b,a).dispose(); +};(function(i,k){var l,f,e=[],c,b,d=k.createElement("div");var g=function(){clearTimeout(b);if(l){return;}Browser.loaded=l=true;k.removeListener("DOMContentLoaded",g).removeListener("readystatechange",a); +k.fireEvent("domready");i.fireEvent("domready");};var a=function(){for(var m=e.length;m--;){if(e[m]()){g();return true;}}return false;};var j=function(){clearTimeout(b); +if(!a()){b=setTimeout(j,10);}};k.addListener("DOMContentLoaded",g);var h=function(){try{d.doScroll();return true;}catch(m){}return false;};if(d.doScroll&&!h()){e.push(h); +c=true;}if(k.readyState){e.push(function(){var m=k.readyState;return(m=="loaded"||m=="complete");});}if("onreadystatechange" in k){k.addListener("readystatechange",a); +}else{c=true;}if(c){j();}Element.Events.domready={onAdd:function(m){if(l){m.call(this);}}};Element.Events.load={base:"load",onAdd:function(m){if(f&&this==i){m.call(this); +}},condition:function(){if(this==i){g();delete Element.Events.load;}return true;}};i.addEvent("load",function(){f=true;});})(window,document);(function(){var Swiff=this.Swiff=new Class({Implements:Options,options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"window",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object; +},initialize:function(path,options){this.instance="Swiff_"+String.uniqueID();this.setOptions(options);options=this.options;var id=this.id=options.id||this.instance; +var container=document.id(options.container);Swiff.CallBacks[this.instance]={};var params=options.params,vars=options.vars,callBacks=options.callBacks; +var properties=Object.append({height:options.height,width:options.width},options.properties);var self=this;for(var callBack in callBacks){Swiff.CallBacks[this.instance][callBack]=(function(option){return function(){return option.apply(self.object,arguments); +};})(callBacks[callBack]);vars[callBack]="Swiff.CallBacks."+this.instance+"."+callBack;}params.flashVars=Object.toQueryString(vars);if(Browser.ie){properties.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"; +params.movie=path;}else{properties.type="application/x-shockwave-flash";}properties.data=path;var build='';}}build+="";this.object=((container)?container.empty():new Element("div")).set("html",build).firstChild; +},replaces:function(element){element=document.id(element,true);element.parentNode.replaceChild(this.toElement(),element);return this;},inject:function(element){document.id(element,true).appendChild(this.toElement()); +return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].append(arguments));}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction(''+__flash__argumentsToXML(arguments,2)+""); +return eval(rs);};})(); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/examples/js/tweenjs/CSSPlugin.js b/duo/js/greensock-v12-js/examples/js/tweenjs/CSSPlugin.js new file mode 100755 index 0000000..0f49931 --- /dev/null +++ b/duo/js/greensock-v12-js/examples/js/tweenjs/CSSPlugin.js @@ -0,0 +1,117 @@ +/* +* CSSPlugin by Grant Skinner. Mar 7, 2011 +* Visit http://easeljs.com/ for documentation, updates and examples. +* +* +* Copyright (c) 2010 Grant Skinner +* +* 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. +*/ + +/** + * The Tween Javascript library provides a retained graphics mode for canvas + * including a full, hierarchical display list, a core interaction model, and + * helper classes to make working with Canvas much easier. + * @module TweenJS + **/ + +(function(window) { +/** + * A plugin to help TweenJS tween CSS properties. + * @class CSSPlugin + * @constructor + * @protected + **/ +var CSSPlugin = function() { + throw("CSSPlugin cannot be instantiated.") +} +var p = CSSPlugin.prototype; + +// static interface: + /** + * Defines the default suffix map for CSS tweens. This can be overridden on a per tween basis by specifying a + * cssSuffixMap value for the individual tween. The object maps CSS property names to the suffix to use when + * reading or setting those properties. For example a map in the form {top:"px"} specifies that when tweening + * the "top" CSS property, it should use the "px" suffix (ex. target.style.top = "20.5px"). This only applies + * to tweens with the "css" config property set to true. + * @property cssSuffixMap + * @type Object + * @static + **/ + CSSPlugin.cssSuffixMap = {top:"px",left:"px",bottom:"px",right:"px",width:"px",height:"px",opacity:""}; + + CSSPlugin.priority = -100; // very low priority, should run last + + /** + * Install the plugin + * @method install + * @protected + **/ + CSSPlugin.install = function() { + var arr = [], map = CSSPlugin.cssSuffixMap; + for (var n in map) { arr.push(n); } + Tween.installPlugin(CSSPlugin, arr); + } + + /** + * Initialize the plugin + * @method init + * @protected + **/ + CSSPlugin.init = function(tween, prop, value) { + var sfx0,sfx1,style,map = CSSPlugin.cssSuffixMap; + if ((sfx0 = map[prop]) == null || !(style = tween._target.style)) { return value; } + var str = style[prop]; + if (!str) { return 0; } // no style set. + var i = str.length-sfx0.length; + if ((sfx1 = str.substr(i)) != sfx0) { + throw("CSSPlugin Error: Suffixes do not match. ("+sfx0+":"+sfx1+")"); + } else { + return parseInt(str.substr(0,i)); + } + } + + /** + * Apply the plugin properties on a tween + * @method tween + * @protected + **/ + CSSPlugin.tween = function(tween, prop, value, startValues, endValues, ratio, position, end) { + var style,map = CSSPlugin.cssSuffixMap; + if (map[prop] == null || !(style = tween._target.style)) { return value; } + style[prop] = value+map[prop]; + return value; + } + +// public properties: + +// private properties: + +// constructor: + +// public methods: + + +// private methods: + +window.CSSPlugin = CSSPlugin; +}(window)); diff --git a/duo/js/greensock-v12-js/examples/js/tweenjs/Ease.js b/duo/js/greensock-v12-js/examples/js/tweenjs/Ease.js new file mode 100755 index 0000000..1d56464 --- /dev/null +++ b/duo/js/greensock-v12-js/examples/js/tweenjs/Ease.js @@ -0,0 +1,401 @@ +/* +* Ease by Grant Skinner. Oct 27, 2011 +* Visit http://easeljs.com/ for documentation, updates and examples. +* +* Equations derived from work by Robert Penner. +* +* Copyright (c) 2011 Grant Skinner +* +* 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. +*/ + +/** +* The Tween Javascript library provides a retained graphics mode for canvas +* including a full, hierarchical display list, a core interaction model, and +* helper classes to make working with Canvas much easier. +* @module TweenJS +**/ + + +(function(window) { + +// constructor: +/** + * The Ease class provides a collection of easing functions for use with TweenJS. + * It does not use the standard 4 param easing signature. Instead it uses a single param + * which indicates the current linear ratio (0 to 1) of the tween.
    + *
    + * Most methods on Ease can be passed directly as easing functions:
    + * Tween.get(target).to({x:100}, 500, Ease.linear);
    + *
    + * However, methods beginning with "get" will return an easing function based on parameter values:
    + * Tween.get(target).to({y:200}, 500, Ease.getPowIn(2.2));
    + *
    + * Equations derived from work by Robert Penner. + * @class Ease + * @static + **/ +var Ease = function() { + throw "Ease cannot be instantiated."; +} + +// public static methods: + /** + * @method linear + * @static + **/ + Ease.linear = function(t) { return t; } + + /** + * Identical to linear. + * @method none + * @static + **/ + Ease.none = Ease.linear; + + /** + * Mimics the simple -100 to 100 easing in Flash Pro. + * @method get + * @param amount A value from -1 (ease in) to 1 (ease out) indicating the strength and direction of the ease. + * @static + **/ + Ease.get = function(amount) { + if (amount < -1) { amount = -1; } + if (amount > 1) { amount = 1; } + return function(t) { + if (amount==0) { return t; } + if (amount<0) { return t*(t*-amount+1+amount); } + return t*((2-t)*amount+(1-amount)); + } + } + + /** + * Configurable exponential ease. + * @method getPowIn + * @param pow The exponent to use (ex. 3 would return a cubic ease). + * @static + **/ + Ease.getPowIn = function(pow) { + return function(t) { + return Math.pow(t,pow); + } + } + + + /** + * Configurable exponential ease. + * @method getPowOut + * @param pow The exponent to use (ex. 3 would return a cubic ease). + * @static + **/ + Ease.getPowOut = function(pow) { + return function(t) { + return 1-Math.pow(1-t,pow); + } + } + + + /** + * Configurable exponential ease. + * @method getPowInOut + * @param pow The exponent to use (ex. 3 would return a cubic ease). + * @static + **/ + Ease.getPowInOut = function(pow) { + return function(t) { + if ((t*=2)<1) return 0.5*Math.pow(t,pow); + return 1-0.5*Math.abs(Math.pow(2-t,pow)); + } + } + + + /** + * @method quadIn + * @static + **/ + Ease.quadIn = Ease.getPowIn(2); + /** + * @method quadOut + * @static + **/ + Ease.quadOut = Ease.getPowOut(2); + /** + * @method quadInOut + * @static + **/ + Ease.quadInOut = Ease.getPowInOut(2); + + + /** + * @method cubicIn + * @static + **/ + Ease.cubicIn = Ease.getPowIn(3); + /** + * @method cubicOut + * @static + **/ + Ease.cubicOut = Ease.getPowOut(3); + /** + * @method cubicInOut + * @static + **/ + Ease.cubicInOut = Ease.getPowInOut(3); + + + /** + * @method quartIn + * @static + **/ + Ease.quartIn = Ease.getPowIn(4); + /** + * @method quartOut + * @static + **/ + Ease.quartOut = Ease.getPowOut(4); + /** + * @method quartInOut + * @static + **/ + Ease.quartInOut = Ease.getPowInOut(4); + + + /** + * @method quintIn + * @static + **/ + Ease.quintIn = Ease.getPowIn(5); + /** + * @method quintOut + * @static + **/ + Ease.quintOut = Ease.getPowOut(5); + /** + * @method quintInOut + * @static + **/ + Ease.quintInOut = Ease.getPowInOut(5); + + + /** + * @method sineIn + * @static + **/ + Ease.sineIn = function(t) { + return 1-Math.cos(t*Math.PI/2); + } + + /** + * @method sineOut + * @static + **/ + Ease.sineOut = function(t) { + return Math.sin(t*Math.PI/2); + } + + /** + * @method sineInOut + * @static + **/ + Ease.sineInOut = function(t) { + return -0.5*(Math.cos(Math.PI*t) - 1) + } + + + /** + * Configurable "back in" ease. + * @method getBackIn + * @param amount The strength of the ease. + * @static + **/ + Ease.getBackIn = function(amount) { + return function(t) { + return t*t*((amount+1)*t-amount); + } + } + /** + * @method backIn + * @static + **/ + Ease.backIn = Ease.getBackIn(1.7); + + /** + * Configurable "back out" ease. + * @method getBackOut + * @param amount The strength of the ease. + * @static + **/ + Ease.getBackOut = function(amount) { + return function(t) { + return (--t*t*((amount+1)*t + amount) + 1); + } + } + /** + * @method backOut + * @static + **/ + Ease.backOut = Ease.getBackOut(1.7); + + /** + * Configurable "back in out" ease. + * @method getBackInOut + * @param amount The strength of the ease. + * @static + **/ + Ease.getBackInOut = function(amount) { + amount*=1.525; + return function(t) { + if ((t*=2)<1) return 0.5*(t*t*((amount+1)*t-amount)); + return 0.5*((t-=2)*t*((amount+1)*t+amount)+2); + } + } + /** + * @method backInOut + * @static + **/ + Ease.backInOut = Ease.getBackInOut(1.7); + + + /** + * @method circIn + * @static + **/ + Ease.circIn = function(t) { + return -(Math.sqrt(1-t*t)- 1); + } + + /** + * @method circOut + * @static + **/ + Ease.circOut = function(t) { + return Math.sqrt(1-(--t)*t); + } + + /** + * @method circInOut + * @static + **/ + Ease.circInOut = function(t) { + if ((t*=2) < 1) return -0.5*(Math.sqrt(1-t*t)-1); + return 0.5*(Math.sqrt(1-(t-=2)*t)+1); + } + + /** + * @method bounceIn + * @static + **/ + Ease.bounceIn = function(t) { + return 1-Ease.bounceOut(1-t); + } + + /** + * @method bounceOut + * @static + **/ + Ease.bounceOut = function(t) { + if (t < 1/2.75) { + return (7.5625*t*t); + } else if (t < 2/2.75) { + return (7.5625*(t-=1.5/2.75)*t+0.75); + } else if (t < 2.5/2.75) { + return (7.5625*(t-=2.25/2.75)*t+0.9375); + } else { + return (7.5625*(t-=2.625/2.75)*t +0.984375); + } + } + + /** + * @method bounceInOut + * @static + **/ + Ease.bounceInOut = function(t) { + if (t<0.5) return Ease.bounceIn (t*2) * .5; + return Ease.bounceOut(t*2-1)*0.5+0.5; + } + + + /** + * Configurable elastic ease. + * @method getElasticIn + * @param amplitude + * @param period + * @static + **/ + Ease.getElasticIn = function(amplitude,period) { + var pi2 = Math.PI*2; + return function(t) { + if (t==0 || t==1) return t; + var s = period/pi2*Math.asin(1/amplitude); + return -(amplitude*Math.pow(2,10*(t-=1))*Math.sin((t-s)*pi2/period)); + } + } + /** + * @method elasticIn + * @static + **/ + Ease.elasticIn = Ease.getElasticIn(1,0.3); + + /** + * Configurable elastic ease. + * @method getElasticOut + * @param amplitude + * @param period + * @static + **/ + Ease.getElasticOut = function(amplitude,period) { + var pi2 = Math.PI*2; + return function(t) { + if (t==0 || t==1) return t; + var s = period/pi2 * Math.asin(1/amplitude); + return (amplitude*Math.pow(2,-10*t)*Math.sin((t-s)*pi2/period )+1); + } + } + /** + * @method elasticOut + * @static + **/ + Ease.elasticOut = Ease.getElasticOut(1,0.3); + + /** + * Configurable elastic ease. + * @method getElasticInOut + * @param amplitude + * @param period + * @static + **/ + Ease.getElasticInOut = function(amplitude,period) { + var pi2 = Math.PI*2; + return function(t) { + var s = period/pi2 * Math.asin(1/amplitude); + if ((t*=2)<1) return -0.5*(amplitude*Math.pow(2,10*(t-=1))*Math.sin( (t-s)*pi2/period )); + return amplitude*Math.pow(2,-10*(t-=1))*Math.sin((t-s)*pi2/period)*0.5+1; + } + } + /** + * @method elasticInOut + * @static + **/ + Ease.elasticInOut = Ease.getElasticInOut(1,0.3*1.5); + +window.Ease = Ease; +}(window)); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/examples/js/zepto.min.js b/duo/js/greensock-v12-js/examples/js/zepto.min.js new file mode 100755 index 0000000..428f84a --- /dev/null +++ b/duo/js/greensock-v12-js/examples/js/zepto.min.js @@ -0,0 +1,2 @@ +/* Zepto v1.0rc1 - polyfill zepto event detect fx ajax form touch - zeptojs.com/license */ +(function(a){String.prototype.trim===a&&(String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}),Array.prototype.reduce===a&&(Array.prototype.reduce=function(b){if(this===void 0||this===null)throw new TypeError;var c=Object(this),d=c.length>>>0,e=0,f;if(typeof b!="function")throw new TypeError;if(d==0&&arguments.length==1)throw new TypeError;if(arguments.length>=2)f=arguments[1];else do{if(e in c){f=c[e++];break}if(++e>=d)throw new TypeError}while(!0);while(e0?[].concat.apply([],a):a}function H(a){return a.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function I(a){return a in i?i[a]:i[a]=new RegExp("(^|\\s)"+a+"(\\s|$)")}function J(a,b){return typeof b=="number"&&!k[H(a)]?b+"px":b}function K(a){var b,c;return h[a]||(b=g.createElement(a),g.body.appendChild(b),c=j(b,"").getPropertyValue("display"),b.parentNode.removeChild(b),c=="none"&&(c="block"),h[a]=c),h[a]}function L(b,d){return d===a?c(b):c(b).filter(d)}function M(a,b,c,d){return A(b)?b.call(a,c,d):b}function N(a,b,d){var e=a%2?b:b.parentNode;e?e.insertBefore(d,a?a==1?e.firstChild:a==2?b:null:b.nextSibling):c(d).remove()}function O(a,b){b(a);for(var c in a.childNodes)O(a.childNodes[c],b)}var a,b,c,d,e=[],f=e.slice,g=window.document,h={},i={},j=g.defaultView.getComputedStyle,k={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},l=/^\s*<(\w+|!)[^>]*>/,m=[1,3,8,9,11],n=["after","prepend","before","append"],o=g.createElement("table"),p=g.createElement("tr"),q={tr:g.createElement("tbody"),tbody:o,thead:o,tfoot:o,td:p,th:p,"*":g.createElement("div")},r=/complete|loaded|interactive/,s=/^\.([\w-]+)$/,t=/^#([\w-]+)$/,u=/^[\w-]+$/,v={}.toString,w={},x,y,z=g.createElement("div");return w.matches=function(a,b){if(!a||a.nodeType!==1)return!1;var c=a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.matchesSelector;if(c)return c.call(a,b);var d,e=a.parentNode,f=!e;return f&&(e=z).appendChild(a),d=~w.qsa(e,b).indexOf(a),f&&z.removeChild(a),d},x=function(a){return a.replace(/-+(.)?/g,function(a,b){return b?b.toUpperCase():""})},y=function(a){return a.filter(function(b,c){return a.indexOf(b)==c})},w.fragment=function(b,d){d===a&&(d=l.test(b)&&RegExp.$1),d in q||(d="*");var e=q[d];return e.innerHTML=""+b,c.each(f.call(e.childNodes),function(){e.removeChild(this)})},w.Z=function(a,b){return a=a||[],a.__proto__=arguments.callee.prototype,a.selector=b||"",a},w.isZ=function(a){return a instanceof w.Z},w.init=function(b,d){if(!b)return w.Z();if(A(b))return c(g).ready(b);if(w.isZ(b))return b;var e;if(D(b))e=F(b);else if(C(b))e=[c.extend({},b)],b=null;else if(m.indexOf(b.nodeType)>=0||b===window)e=[b],b=null;else if(l.test(b))e=w.fragment(b.trim(),RegExp.$1),b=null;else{if(d!==a)return c(d).find(b);e=w.qsa(g,b)}return w.Z(e,b)},c=function(a,b){return w.init(a,b)},c.extend=function(c){return f.call(arguments,1).forEach(function(d){for(b in d)d[b]!==a&&(c[b]=d[b])}),c},w.qsa=function(a,b){var c;return a===g&&t.test(b)?(c=a.getElementById(RegExp.$1))?[c]:e:a.nodeType!==1&&a.nodeType!==9?e:f.call(s.test(b)?a.getElementsByClassName(RegExp.$1):u.test(b)?a.getElementsByTagName(b):a.querySelectorAll(b))},c.isFunction=A,c.isObject=B,c.isArray=D,c.isPlainObject=C,c.inArray=function(a,b,c){return e.indexOf.call(b,a,c)},c.trim=function(a){return a.trim()},c.uuid=0,c.map=function(a,b){var c,d=[],e,f;if(E(a))for(e=0;e0&&w.matches(this[0],a)},not:function(b){var d=[];if(A(b)&&b.call!==a)this.each(function(a){b.call(this,a)||d.push(this)});else{var e=typeof b=="string"?this.filter(b):E(b)&&A(b.item)?f.call(b):c(b);this.forEach(function(a){e.indexOf(a)<0&&d.push(a)})}return c(d)},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){var a=this[0];return a&&!B(a)?a:c(a)},last:function(){var a=this[this.length-1];return a&&!B(a)?a:c(a)},find:function(a){var b;return this.length==1?b=w.qsa(this[0],a):b=this.map(function(){return w.qsa(this,a)}),c(b)},closest:function(a,b){var d=this[0];while(d&&!w.matches(d,a))d=d!==b&&d!==g&&d.parentNode;return c(d)},parents:function(a){var b=[],d=this;while(d.length>0)d=c.map(d,function(a){if((a=a.parentNode)&&a!==g&&b.indexOf(a)<0)return b.push(a),a});return L(b,a)},parent:function(a){return L(y(this.pluck("parentNode")),a)},children:function(a){return L(this.map(function(){return f.call(this.children)}),a)},siblings:function(a){return L(this.map(function(a,b){return f.call(b.parentNode.children).filter(function(a){return a!==b})}),a)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(a){return this.map(function(){return this[a]})},show:function(){return this.each(function(){this.style.display=="none"&&(this.style.display=null),j(this,"").getPropertyValue("display")=="none"&&(this.style.display=K(this.nodeName))})},replaceWith:function(a){return this.before(a).remove()},wrap:function(a){return this.each(function(){c(this).wrapAll(c(a)[0].cloneNode(!1))})},wrapAll:function(a){return this[0]&&(c(this[0]).before(a=c(a)),a.append(this)),this},unwrap:function(){return this.parent().each(function(){c(this).replaceWith(c(this).children())}),this},clone:function(){return c(this.map(function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(b){return(b===a?this.css("display")=="none":b)?this.show():this.hide()},prev:function(){return c(this.pluck("previousElementSibling"))},next:function(){return c(this.pluck("nextElementSibling"))},html:function(b){return b===a?this.length>0?this[0].innerHTML:null:this.each(function(a){var d=this.innerHTML;c(this).empty().append(M(this,b,a,d))})},text:function(b){return b===a?this.length>0?this[0].textContent:null:this.each(function(){this.textContent=b})},attr:function(c,d){var e;return typeof c=="string"&&d===a?this.length==0||this[0].nodeType!==1?a:c=="value"&&this[0].nodeName=="INPUT"?this.val():!(e=this[0].getAttribute(c))&&c in this[0]?this[0][c]:e:this.each(function(a){if(this.nodeType!==1)return;if(B(c))for(b in c)this.setAttribute(b,c[b]);else this.setAttribute(c,M(this,d,a,this.getAttribute(c)))})},removeAttr:function(a){return this.each(function(){this.nodeType===1&&this.removeAttribute(a)})},prop:function(b,c){return c===a?this[0]?this[0][b]:a:this.each(function(a){this[b]=M(this,c,a,this[b])})},data:function(b,c){var d=this.attr("data-"+H(b),c);return d!==null?d:a},val:function(b){return b===a?this.length>0?this[0].value:a:this.each(function(a){this.value=M(this,b,a,this.value)})},offset:function(){if(this.length==0)return null;var a=this[0].getBoundingClientRect();return{left:a.left+window.pageXOffset,top:a.top+window.pageYOffset,width:a.width,height:a.height}},css:function(c,d){if(d===a&&typeof c=="string")return this.length==0?a:this[0].style[x(c)]||j(this[0],"").getPropertyValue(c);var e="";for(b in c)typeof c[b]=="string"&&c[b]==""?this.each(function(){this.style.removeProperty(H(b))}):e+=H(b)+":"+J(b,c[b])+";";return typeof c=="string"&&(d==""?this.each(function(){this.style.removeProperty(H(c))}):e=H(c)+":"+J(c,d)),this.each(function(){this.style.cssText+=";"+e})},index:function(a){return a?this.indexOf(c(a)[0]):this.parent().children().indexOf(this[0])},hasClass:function(a){return this.length<1?!1:I(a).test(this[0].className)},addClass:function(a){return this.each(function(b){d=[];var e=this.className,f=M(this,a,b,e);f.split(/\s+/g).forEach(function(a){c(this).hasClass(a)||d.push(a)},this),d.length&&(this.className+=(e?" ":"")+d.join(" "))})},removeClass:function(b){return this.each(function(c){if(b===a)return this.className="";d=this.className,M(this,b,c,d).split(/\s+/g).forEach(function(a){d=d.replace(I(a)," ")}),this.className=d.trim()})},toggleClass:function(b,d){return this.each(function(e){var f=M(this,b,e,this.className);(d===a?!c(this).hasClass(f):d)?c(this).addClass(f):c(this).removeClass(f)})}},["width","height"].forEach(function(b){c.fn[b]=function(d){var e,f=b.replace(/./,function(a){return a[0].toUpperCase()});return d===a?this[0]==window?window["inner"+f]:this[0]==g?g.documentElement["offset"+f]:(e=this.offset())&&e[b]:this.each(function(a){var e=c(this);e.css(b,M(this,d,a,e[b]()))})}}),n.forEach(function(a,b){c.fn[a]=function(){var a=c.map(arguments,function(a){return B(a)?a:w.fragment(a)});if(a.length<1)return this;var d=this.length,e=d>1,f=b<2;return this.each(function(c,g){for(var h=0;h0&&this.bind(o,n),setTimeout(function(){m.css(i),e<=0&&setTimeout(function(){m.each(function(){n.call(this)})},0)},0),this},i=null}(Zepto),function($){function triggerAndReturn(a,b,c){var d=$.Event(b);return $(a).trigger(d,c),!d.defaultPrevented}function triggerGlobal(a,b,c,d){if(a.global)return triggerAndReturn(b||document,c,d)}function ajaxStart(a){a.global&&$.active++===0&&triggerGlobal(a,null,"ajaxStart")}function ajaxStop(a){a.global&&!--$.active&&triggerGlobal(a,null,"ajaxStop")}function ajaxBeforeSend(a,b){var c=b.context;if(b.beforeSend.call(c,a,b)===!1||triggerGlobal(b,c,"ajaxBeforeSend",[a,b])===!1)return!1;triggerGlobal(b,c,"ajaxSend",[a,b])}function ajaxSuccess(a,b,c){var d=c.context,e="success";c.success.call(d,a,e,b),triggerGlobal(c,d,"ajaxSuccess",[b,c,a]),ajaxComplete(e,b,c)}function ajaxError(a,b,c,d){var e=d.context;d.error.call(e,c,b,a),triggerGlobal(d,e,"ajaxError",[c,d,a]),ajaxComplete(b,c,d)}function ajaxComplete(a,b,c){var d=c.context;c.complete.call(d,b,a),triggerGlobal(c,d,"ajaxComplete",[b,c]),ajaxStop(c)}function empty(){}function mimeToDataType(a){return a&&(a==htmlType?"html":a==jsonType?"json":scriptTypeRE.test(a)?"script":xmlTypeRE.test(a)&&"xml")||"text"}function appendQuery(a,b){return(a+"&"+b).replace(/[&?]{1,2}/,"?")}function serializeData(a){isObject(a.data)&&(a.data=$.param(a.data)),a.data&&(!a.type||a.type.toUpperCase()=="GET")&&(a.url=appendQuery(a.url,a.data))}function serialize(a,b,c,d){var e=$.isArray(b);$.each(b,function(b,f){d&&(b=c?d:d+"["+(e?"":b)+"]"),!d&&e?a.add(f.name,f.value):(c?$.isArray(f):isObject(f))?serialize(a,f,c,b):a.add(b,f)})}var jsonpID=0,isObject=$.isObject,document=window.document,key,name,rscript=/)<[^<]*)*<\/script>/gi,scriptTypeRE=/^(?:text|application)\/javascript/i,xmlTypeRE=/^(?:text|application)\/xml/i,jsonType="application/json",htmlType="text/html",blankRE=/^\s*$/;$.active=0,$.ajaxJSONP=function(a){var b="jsonp"+ ++jsonpID,c=document.createElement("script"),d=function(){$(c).remove(),b in window&&(window[b]=empty),ajaxComplete("abort",e,a)},e={abort:d},f;return a.error&&(c.onerror=function(){e.abort(),a.error()}),window[b]=function(d){clearTimeout(f),$(c).remove(),delete window[b],ajaxSuccess(d,e,a)},serializeData(a),c.src=a.url.replace(/=\?/,"="+b),$("head").append(c),a.timeout>0&&(f=setTimeout(function(){e.abort(),ajaxComplete("timeout",e,a)},a.timeout)),e},$.ajaxSettings={type:"GET",beforeSend:empty,success:empty,error:empty,complete:empty,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript",json:jsonType,xml:"application/xml, text/xml",html:htmlType,text:"text/plain"},crossDomain:!1,timeout:0},$.ajax=function(options){var settings=$.extend({},options||{});for(key in $.ajaxSettings)settings[key]===undefined&&(settings[key]=$.ajaxSettings[key]);ajaxStart(settings),settings.crossDomain||(settings.crossDomain=/^([\w-]+:)?\/\/([^\/]+)/.test(settings.url)&&RegExp.$2!=window.location.host);var dataType=settings.dataType,hasPlaceholder=/=\?/.test(settings.url);if(dataType=="jsonp"||hasPlaceholder)return hasPlaceholder||(settings.url=appendQuery(settings.url,"callback=?")),$.ajaxJSONP(settings);settings.url||(settings.url=window.location.toString()),serializeData(settings);var mime=settings.accepts[dataType],baseHeaders={},protocol=/^([\w-]+:)\/\//.test(settings.url)?RegExp.$1:window.location.protocol,xhr=$.ajaxSettings.xhr(),abortTimeout;settings.crossDomain||(baseHeaders["X-Requested-With"]="XMLHttpRequest"),mime&&(baseHeaders.Accept=mime,mime.indexOf(",")>-1&&(mime=mime.split(",",2)[0]),xhr.overrideMimeType&&xhr.overrideMimeType(mime));if(settings.contentType||settings.data&&settings.type.toUpperCase()!="GET")baseHeaders["Content-Type"]=settings.contentType||"application/x-www-form-urlencoded";settings.headers=$.extend(baseHeaders,settings.headers||{}),xhr.onreadystatechange=function(){if(xhr.readyState==4){clearTimeout(abortTimeout);var result,error=!1;if(xhr.status>=200&&xhr.status<300||xhr.status==304||xhr.status==0&&protocol=="file:"){dataType=dataType||mimeToDataType(xhr.getResponseHeader("content-type")),result=xhr.responseText;try{dataType=="script"?(1,eval)(result):dataType=="xml"?result=xhr.responseXML:dataType=="json"&&(result=blankRE.test(result)?null:JSON.parse(result))}catch(e){error=e}error?ajaxError(error,"parsererror",xhr,settings):ajaxSuccess(result,xhr,settings)}else ajaxError(null,"error",xhr,settings)}};var async="async"in settings?settings.async:!0;xhr.open(settings.type,settings.url,async);for(name in settings.headers)xhr.setRequestHeader(name,settings.headers[name]);return ajaxBeforeSend(xhr,settings)===!1?(xhr.abort(),!1):(settings.timeout>0&&(abortTimeout=setTimeout(function(){xhr.onreadystatechange=empty,xhr.abort(),ajaxError(null,"timeout",xhr,settings)},settings.timeout)),xhr.send(settings.data?settings.data:null),xhr)},$.get=function(a,b){return $.ajax({url:a,success:b})},$.post=function(a,b,c,d){return $.isFunction(b)&&(d=d||c,c=b,b=null),$.ajax({type:"POST",url:a,data:b,success:c,dataType:d})},$.getJSON=function(a,b){return $.ajax({url:a,success:b,dataType:"json"})},$.fn.load=function(a,b){if(!this.length)return this;var c=this,d=a.split(/\s/),e;return d.length>1&&(a=d[0],e=d[1]),$.get(a,function(a){c.html(e?$(document.createElement("div")).html(a.replace(rscript,"")).find(e).html():a),b&&b.call(c)}),this};var escape=encodeURIComponent;$.param=function(a,b){var c=[];return c.add=function(a,b){this.push(escape(a)+"="+escape(b))},serialize(c,a,b),c.join("&").replace("%20","+")}}(Zepto),function(a){a.fn.serializeArray=function(){var b=[],c;return a(Array.prototype.slice.call(this.get(0).elements)).each(function(){c=a(this);var d=c.attr("type");this.nodeName.toLowerCase()!="fieldset"&&!this.disabled&&d!="submit"&&d!="reset"&&d!="button"&&(d!="radio"&&d!="checkbox"||this.checked)&&b.push({name:c.attr("name"),value:c.val()})}),b},a.fn.serialize=function(){var a=[];return this.serializeArray().forEach(function(b){a.push(encodeURIComponent(b.name)+"="+encodeURIComponent(b.value))}),a.join("&")},a.fn.submit=function(b){if(b)this.bind("submit",b);else if(this.length){var c=a.Event("submit");this.eq(0).trigger(c),c.defaultPrevented||this.get(0).submit()}return this}}(Zepto),function(a){function d(a){return"tagName"in a?a:a.parentNode}function e(a,b,c,d){var e=Math.abs(a-b),f=Math.abs(c-d);return e>=f?a-b>0?"Left":"Right":c-d>0?"Up":"Down"}function h(){g=null,b.last&&(b.el.trigger("longTap"),b={})}function i(){g&&clearTimeout(g),g=null}var b={},c,f=750,g;a(document).ready(function(){var j,k;a(document.body).bind("touchstart",function(e){j=Date.now(),k=j-(b.last||j),b.el=a(d(e.touches[0].target)),c&&clearTimeout(c),b.x1=e.touches[0].pageX,b.y1=e.touches[0].pageY,k>0&&k<=250&&(b.isDoubleTap=!0),b.last=j,g=setTimeout(h,f)}).bind("touchmove",function(a){i(),b.x2=a.touches[0].pageX,b.y2=a.touches[0].pageY}).bind("touchend",function(a){i(),b.isDoubleTap?(b.el.trigger("doubleTap"),b={}):b.x2&&Math.abs(b.x1-b.x2)>30||b.y2&&Math.abs(b.y1-b.y2)>30?(b.el.trigger("swipe")&&b.el.trigger("swipe"+e(b.x1,b.x2,b.y1,b.y2)),b={}):"last"in b&&(b.el.trigger("tap"),c=setTimeout(function(){c=null,b.el.trigger("singleTap"),b={}},250))}).bind("touchcancel",function(){c&&clearTimeout(c),g&&clearTimeout(g),g=c=null,b={}})}),["swipe","swipeLeft","swipeRight","swipeUp","swipeDown","doubleTap","tap","singleTap","longTap"].forEach(function(b){a.fn[b]=function(a){return this.bind(b,a)}})}(Zepto); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/examples/speed_test.html b/duo/js/greensock-v12-js/examples/speed_test.html new file mode 100755 index 0000000..c0cd6ef --- /dev/null +++ b/duo/js/greensock-v12-js/examples/speed_test.html @@ -0,0 +1,467 @@ + + + + +GreenSock Animation Speed Test + + + + + + + + + + + + + + + + + + +
    +

    Stress test the animation performance of various common Javascript tools and + compare them with TweenLite. This test does not use a canvas element + (although it certainly could) - it simply animates the left, top, + width, and height css properties of standard image elements because those are supported in virtually all browsers. + The goal was to be extremely fair and use the same code for everything except the actual animation. No tricks. + Look at the source for yourself or run your own tests to confirm.

    +

    Choose the number of dots you'd like to animate and then choose the + engine and click the "START" button below. Watch the fps in the lower right + (you want that number high - it is the total average frames per second rendered). + As more dots are animated, you'll see the performance gap widen. Try to push things until the fps drops below 30fps. When the + CPU isn't breaking a sweat, fps should hover around 100fps in most modern browsers.

    +
    + +
    + + + + + diff --git a/duo/js/greensock-v12-js/examples/super_basic_syntax.html b/duo/js/greensock-v12-js/examples/super_basic_syntax.html new file mode 100755 index 0000000..f0dacd5 --- /dev/null +++ b/duo/js/greensock-v12-js/examples/super_basic_syntax.html @@ -0,0 +1,85 @@ + + + + +GreenSock Animation Demo + + + + + + + +

    This is d1

    +

    This is d2

    +

    This is d3

    + + + + + diff --git a/duo/js/greensock-v12-js/src/.DS_Store b/duo/js/greensock-v12-js/src/.DS_Store new file mode 100755 index 0000000..e6dfeb1 Binary files /dev/null and b/duo/js/greensock-v12-js/src/.DS_Store differ diff --git a/duo/js/greensock-v12-js/src/changelog.txt b/duo/js/greensock-v12-js/src/changelog.txt new file mode 100755 index 0000000..fce4a34 --- /dev/null +++ b/duo/js/greensock-v12-js/src/changelog.txt @@ -0,0 +1,165 @@ +CHANGE LOG : GREENSOCK ANIMATION PLATFORM (GSAP) +------------------------------------------------ + +2012-09-30: +--------------------------------------------- + - Moved change log to https://github.com/greensock/GreenSock-JS/commits/master + +2012-09-19: +--------------------------------------------- + - Works around an IE8 (and earlier) bug that renders elements incorrectly when a rotational transform is applied to an object that already has an opacity/alpha filter on it. The matrix filter must come BEFORE the alpha in the "filters" list. + - Minor code refinements + +2012-09-17 +--------------------------------------------- + - Fixed issue in IE8 (and earlier) where reversing a tween that handled "backgroundPosition" (of CSSPlugin) would throw an error when it arrived at its beginning position. + - Reworked transform code (for things like scale, rotation, x, y, skew, etc.) so that it should work with browsers that don't require a browser prefix for "transform". + - Fixed issue that caused TweenMax.killAll() to kill the tweens in the reverse order that they were created. + +2012-09-06 +--------------------------------------------- + - Fixed issue that could cause zIndex:0 to get added to an object only in iOS when a transform property was tweened and the element had a z-index defined in a class instead of directly on the element itself (its style). + +2012-09-04 +--------------------------------------------- + - Added killChildTweensOf() method to TweenMax that kills tweens of the child DOM elements of a particular element. + +2012-08-31 +--------------------------------------------- + - Fixed issue that caused "{self}" references in a TimelineLite.staggerTo() or staggerFrom() or staggerFromTo() to always point at the first tween instead of each individual one. + +2012-08-22 +--------------------------------------------- + - Worked around a bug in Android 4.x default browser that causes it to ignore changes to "top" and "left" CSS properties when they are made on the same frame as any transform property (like scale, rotation, skew, etc.). + +2012-08-16 +--------------------------------------------- + - Fixed error in TimelineMax's onRepeat callback + - Fixed an issue that could cause an error in tween that was controlling a color that was set to "transparent" in IE8 or below and it was reversed and reached its beginning. + +2012-07-28 +--------------------------------------------- + - Fixed issue in CSSPlugin and CSSRulePlugin that caused an error in IE8 and earlier when you try tweening to a color of "transparent". + +2012-07-26 +--------------------------------------------- + - Worked around another Safari (iOS) bug that caused elements to randomly flicker when changing size (related to setting WebkitPerspective, so now we set WebkitBackfaceVisibility to "hidden" instead to work around 2 other Safari bugs previously mentioned) + - Updated the Elastic eases so that you can define an amplitude below 1. + +2012-07-25 +--------------------------------------------- + - Worked around Safari bug that could cause elements to render incorrectly when a WebkitPerspective wasn't defined. Now a default WebkitPerspective value of 500px is applied to any element tweened with CSSPlugin (only in non-Android safari) + - Enhanced ScrollToPlugin so that you can simply pass a number and it will assume you meant "y" (rather than having to pass {y:YOUR_VALUE}) + +2012-07-24 +--------------------------------------------- + - Added code to helpe CSSPlugin handle zero-duration tweens that alter the className of the target so that they skip any parsing of the class and simply apply it which helps when there are transitions applied to the css class. + +2012-07-23 +--------------------------------------------- + - Reworked BezierPlugin's "thru" algorithm to make it more natural and fix a particular scenario when it broke down with the previous algorithm. + - Fixed problem in BezierPlugin that could cause 1 frame to render incorrectly when a tween goes backwards (once for each segment) + - Added "thruBasic" type to BezierPlugin (might remove, pending community feedback) + - Fixed issue in CSSPlugin that could prevent IE8, IE7, and IE6 from interpreting the initial opacity of an element if there were spaces in its filter alpha CSS definition (like filter:alpha(opacity = 50)) + - Fixed an issue that could cause animations on the page to act as though they're not starting from exactly 0 when the page loads (like they're skipping the beginning) + - Fixed an issue that could cause color tweens to throw an error in IE8, IE7, and IE6 if the new color is the same as the old color. + +2012-07-18 +--------------------------------------------- + - Added BezierPlugin + - Added hooks in CSSPlugin to recognize Bezier tweens + - Added conditional logic in CSSPlugin and CSSRulePlugin so that display:"none" would be applied at the END of the tween (all other non-tweening properties are applied when the tween starts) + +2012-06-30 +--------------------------------------------- + - Added logic to TimelineLite/Max so that if you insert/append a child that extends the duration and the timeline had already finished, it will adjust its startTime and resume playback (as long as it wasn't paused of course) + +2012-06-19 +--------------------------------------------- + - Fixed issue that could cause RaphaelPlugin to incorrectly render the pivot point of transforms + - Implemented a workaround for a bug in certain (older) versions of the Android browser that could prevent transforms (like rotation) from rendering correctly by the CSSPlugin + - Fixed issue that could cause zero-duration tweens with a delay to prematurely get removed from their parent timeline. + +2012-06-05 +--------------------------------------------- + - Worked around a bug in older versions of IE that could cause marginRight and/or marginBottom to render incorrectly or incorrectly deal with concurrent tweens of one of the margins while rotating the object in old versions of IE. + - Fixed issue that could cause skewX/skewY to affect the objects scaleY in certain browsers when rotation is 0 + - Fixed missing variable in RaphaelPlugin + - Now autoAlpha in CSSPlugin will look to see if the element starts out with a visibility of "hidden" and opacity is 1, and if so it will force opacity to 0 as a convenience. + - Fixed missing variable in TweenMax.killAll() method. + - Added ability for CSSPlugin to parse numeric colors like 0xFF0000 + +2012-06-02 +--------------------------------------------- + - Fixed problem that caused ScrollToPlugin to interpret the starting scrollTop/scrollLeft incorrectly (inverted). + - Added "ticker" to TweenMax for convenience. + +2012-05-29 +--------------------------------------------- + - Fixed issue that could cause rotation to be read as 0 on a new tween when scaleX/scale was tweened to 0 previously. + - Added ability for ScrollToPlugin to control the scroll of a div rather than just the window. + +2012-05-24 +--------------------------------------------- + - Added SteppedEase to the EasePack + - Fixed issue that could cause a tween to be overwritten if it is nested inside a TimelineLite/Max that's nested inside another and both are back-to-back and tween the identical value (very rare). + - Fixed issue that could cause an incorrect conversion from pixels to % or ems (swapping horizontal percentage for vertical in a very rare case) + +2012-05-23 +--------------------------------------------- + - Added RaphaelPlugin that allows you to tween the properties of a Raphael element (see http://www.raphaeljs.com) + +2012-05-22 +--------------------------------------------- + - Fixed issue that could cause a skewY css tween to prevent scale/rotation from working properly in very specific scenarios (rare). + - Implemented code that snaps extremely small decimal values to 0 when being applied to CSS properties in CSSPlugin to avoid issues with a few browsers. + +2012-05-17 +--------------------------------------------- + - Added ability for CSSPlugin to recognize the key word "center" within a transformOrigin value + - Fixed issue in IE8/7/6 that could cause rotations to change the width of the target slightly after a few rotations + - You can now define a window.GreenSockAMDPath variable (a string) that will get prepended to GreenSock-related AMD define() calls. So, for example, if you put the GreenSock .js files in a libs/greensock/ directory, you can set window.GreenSockAMDPath = "libs/greensock" so that when TweenMax is loaded, its definition will be "libs/greensock/TweenMax" instead of simply "TweenMax". This helps to make things compatible with systems like Dojo. + - Added ScrollToPlugin + - Changed behavior when AMD loader like RequireJS or Dojo is found - previously if one was found, the main classes like TweenLite, TweenMax, Power1, strong, etc. were NOT added to the global scope (window). However, since Dojo uses a different define() technique that appears to require only one define() per file which would fail, we now always add the main classes to the global scope so that they can be used regardless. Also added a line of code that looks for a window.GreenSockGlobals and if one is found, it will add all the globals to that object instead of window, thus you can easily control where the globals go. For example, set window.GreenSockGlobals = {} before loading any GreenSock files and none of the GreenSock code will "pollute" the global scope - they will be added to your custom object instead. + - Fixed missing "var" in TweenPlugin's _addTween() method + - Changed name of the internally-used _gsRequre() method to _gsDefine() but that shouldn't affect any code you wrote because it isn't intended to be a public method. Please make sure you update ALL of your GreenSock js files, however, because they all reference that method. + +2012-05-15 +--------------------------------------------- + - Worked around a bug in Chrome that could cause odd transform results when the values hit no transform (translate(0px,0px) scale(1,1) rotate(0) skew(0,0)). Apparently it's a bad idea to set transform to "" after it has been something else. + +2012-05-11 +--------------------------------------------- + - Fixed issue that caused skewY values in CSSPlugin to always be treated as relative. So, for example, if you tweened skewY to 10 and then did another skewY of the same object to 10, it would end up looking like 20. + + +2012-05-06 +--------------------------------------------- + - Fixed issue that could cause jQuery objects not to be tweened properly if the page was subloaded by another page that used jQuery (thus the global jQuery object reference was updated, throwing off detection of jQuery instances using instanceof). + +2012-05-03 +---------------------------------------------- + - Fixed issue that could cause autoAlpha not to function properly in IE7 and IE8 (due to browser bugs) + +2012-05-01 +---------------------------------------------- + - Added static set() method to TweenLite and TweenMax (a simple way to do a zero-duration tween) + - Added a new getLabelsArray() method to TimelineMax + - Fixed issue that caused a relative CSS tween to jump to its end value right away when the starting value matched exactly the amount of relative change (very rare). + +2012-04-26 +---------------------------------------------- + - Improved compatibility with jQuery so that you can pass an array of jQuery instances as the target of a tween (previously you could pass a jQuery object as the target, but not an array of them). + +2012-04-23 +---------------------------------------------- + - Fixed compatibility issue with RequireJS + +2012-04-10 +---------------------------------------------- +beta 1.02 + - Added ability to tween backgroundPosition + - Added ability to tween "border" (like border:"5px solid red") + - Worked around Safari bug that caused "top" and "left" changes to be ignored when they are tweened at the same time as transform values (like rotation or scaleX, etc.) + - Fixed occasional [very slight] misrendering of what should be rotation of 0 (if rounding errors caused it to be extremely small, it could appear slightly askew previously). + - Changed behavior so that tweens with a duration of 0 and delay of 0 will default to immediateRender:true \ No newline at end of file diff --git a/duo/js/greensock-v12-js/src/minified/.DS_Store b/duo/js/greensock-v12-js/src/minified/.DS_Store new file mode 100755 index 0000000..6ef3274 Binary files /dev/null and b/duo/js/greensock-v12-js/src/minified/.DS_Store differ diff --git a/duo/js/greensock-v12-js/src/minified/TimelineLite.min.js b/duo/js/greensock-v12-js/src/minified/TimelineLite.min.js new file mode 100755 index 0000000..fa43058 --- /dev/null +++ b/duo/js/greensock-v12-js/src/minified/TimelineLite.min.js @@ -0,0 +1,30 @@ +/** + * VERSION: beta 1.641 + * DATE: 2012-11-08 + * JavaScript (ActionScript 3 and 2 also available) + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + **/ +(window._gsQueue||(window._gsQueue=[])).push(function(){_gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(m,j,g){var h=function(b){j.call(this,b);this._labels={};this.autoRemoveChildren=!0==this.vars.autoRemoveChildren;this.smoothChildTiming=!0==this.vars.smoothChildTiming;this._sortChildren=!0;this._onUpdate=this.vars.onUpdate;for(var b=n.length,c,a;-1<--b;)if(a=this.vars[n[b]])for(c=a.length;-1<--c;)"{self}"===a[c]&&(a=this.vars[n[b]]=a.concat(),a[c]=this);this.vars.tweens instanceof +Array&&this.insertMultiple(this.vars.tweens,0,this.vars.align||"normal",this.vars.stagger||0)},n=["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams","onRepeatParams"],p=[],q=function(b){var c={},a;for(a in b)c[a]=b[a];return c},d=h.prototype=new j;h.version=1.641;d.constructor=h;d.kill()._gc=!1;d.to=function(b,c,a,f,e){return this.insert(new g(b,c,a),this._parseTimeOrLabel(e,f,!0))};d.from=function(b,c,a,f,e){return this.insert(g.from(b,c,a),this._parseTimeOrLabel(e,f,!0))}; +d.fromTo=function(b,c,a,f,e,d){return this.insert(g.fromTo(b,c,a,f),this._parseTimeOrLabel(d,e,!0))};d.staggerTo=function(b,c,a,f,e,d,i,k,r){i=new h({onComplete:i,onCompleteParams:k,onCompleteScope:r});f=f||0;for(k=0;k=f){this._totalTime=this._time=f;if(!this._reversed&&!this._hasPausedChild()&&(h=!0,l="onComplete",0===this._duration&&(0===b||0>this._rawPrevTime)))this._rawPrevTime!==b&&(a=!0);this._rawPrevTime=b;b=f+1E-6}else if(0>=b){this._totalTime=this._time=0;if(0!==e||0===this._duration&&0b?(this._active=!1,0===this._duration&&0<=this._rawPrevTime&&(a=!0)):this._initted||(a=!0);this._rawPrevTime=b;b=-1E-6}else this._totalTime=this._time=this._rawPrevTime= +b;if(this._time!==e||a){this._initted||(this._initted=!0);0===e&&this.vars.onStart&&0!==this._time&&(c||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||p));if(this._time>e)for(a=this._first;a;){j=a._next;if(this._paused&&!g)break;else if(a._active||a._startTime<=this._time&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())-(b-a._startTime)*a._timeScale,c,!1):a.render((b-a._startTime)*a._timeScale,c,!1);a=j}else for(a=this._last;a;){j= +a._prev;if(this._paused&&!g)break;else if(a._active||a._startTime<=e&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())-(b-a._startTime)*a._timeScale,c,!1):a.render((b-a._startTime)*a._timeScale,c,!1);a=j}this._onUpdate&&(c||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||p));if(l&&!this._gc&&(d===this._startTime||i!=this._timeScale))if(0===this._time||f>=this.totalDuration())h&&(this._timeline.autoRemoveChildren&&this._enabled(!1, +!1),this._active=!1),c||this.vars[l]&&this.vars[l].apply(this.vars[l+"Scope"]||this,this.vars[l+"Params"]||p)}};d._hasPausedChild=function(){for(var b=this._first;b;){if(b._paused||b instanceof h&&b._hasPausedChild())return!0;b=b._next}return!1};d.getChildren=function(b,c,a,f){for(var f=f||-9999999999,e=[],d=this._first,i=0;d;)d._startTime=a&&(d._startTime+=b),d=d._next;if(c)for(var e in this._labels)this._labels[e]>=a&&(this._labels[e]+=b);return this._uncache(!0)};d._kill=function(b,c){if(null==b&&null==c)return this._enabled(!1,!1);for(var a=null==c?this.getChildren(!0, +!0,!1):this.getTweensOf(c),d=a.length,e=!1;-1<--d;)a[d]._kill(b,c)&&(e=!0);return e};d.clear=function(b){var c=this.getChildren(!1,!0,!0),a=c.length;for(this._time=this._totalTime=0;-1<--a;)c[a]._enabled(!1,!1);!1!=b&&(this._labels={});return this._uncache(!0)};d.invalidate=function(){for(var b=this._first;b;)b.invalidate(),b=b._next;return this};d._enabled=function(b,c){if(b===this._gc)for(var a=this._first;a;)a._enabled(b,!0),a=a._next;return j.prototype._enabled.call(this,b,c)};d.progress=function(b){return!arguments.length? +this._time/this.duration():this.totalTime(this.duration()*b,!1)};d.duration=function(b){if(!arguments.length)return this._dirty&&this.totalDuration(),this._duration;0!==this.duration()&&0!==b&&this.timeScale(this._duration/b);return this};d.totalDuration=function(b){if(!arguments.length){if(this._dirty){for(var c=0,a=this._first,d=-999999999999,e;a;)e=a._next,a._startTimea._startTime&&(c-=a._startTime,this.shiftChildren(-a._startTime, +!1,-9999999999)),a=a._startTime+(!a._dirty?a._totalDuration:a.totalDuration())/a._timeScale,a>c&&(c=a),a=e;this._duration=this._totalDuration=c;this._dirty=!1}return this._totalDuration}0!==this.totalDuration()&&0!==b&&this.timeScale(this._totalDuration/b);return this};d.usesFrames=function(){for(var b=this._timeline;b._timeline;)b=b._timeline;return b===m._rootFramesTimeline};d.rawTime=function(){return this._paused||0!==this._totalTime&&this._totalTime!==this._totalDuration?this._totalTime:(this._timeline.rawTime()- +this._startTime)*this._timeScale};return h},!0)});window._gsDefine&&_gsQueue.pop()(); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/src/minified/TimelineMax.min.js b/duo/js/greensock-v12-js/src/minified/TimelineMax.min.js new file mode 100755 index 0000000..2e94bee --- /dev/null +++ b/duo/js/greensock-v12-js/src/minified/TimelineMax.min.js @@ -0,0 +1,44 @@ +/*! + * VERSION: beta 1.641 + * DATE: 2012-11-08 + * JavaScript (ActionScript 3 and 2 also available) + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +(window._gsQueue||(window._gsQueue=[])).push(function(){_gsDefine("TimelineMax",["TimelineLite","TweenLite","easing.Ease"],function(h,p,f){var g=function(d){h.call(this,d);this._repeat=this.vars.repeat||0;this._repeatDelay=this.vars.repeatDelay||0;this._cycle=0;this._yoyo=!0==this.vars.yoyo;this._dirty=!0},q=[],s=new f(null,null,1,0),f=g.prototype=new h;f.constructor=g;f.kill()._gc=!1;g.version=1.641;f.invalidate=function(){this._yoyo=!0===this.vars.yoyo;this._repeat=this.vars.repeat||0;this._repeatDelay= +this.vars.repeatDelay||0;this._uncache(!0);return h.prototype.invalidate.call(this)};f.addCallback=function(d,c,a,e){return this.insert(p.delayedCall(0,d,a,e),c)};f.removeCallback=function(d,c){if(null==c)this._kill(null,d);else for(var a=this.getTweensOf(d,!1),e=a.length,b=this._parseTimeOrLabel(c);-1<--e;)a[e]._startTime===b&&a[e]._enabled(!1,!1);return this};f.tweenTo=function(d,c){var c=c||{},a={ease:s,overwrite:2,useFrames:this.usesFrames(),immediateRender:!1},e,b;for(e in c)a[e]=c[e];a.time= +this._parseTimeOrLabel(d);b=new p(this,Math.abs(Number(a.time)-this._time)/this._timeScale||0.001,a);a.onStart=function(){b.target.paused(!0);b.vars.time!==b.target.time()&&b.duration(Math.abs(b.vars.time-b.target.time())/b.target._timeScale);c.onStart&&c.onStart.apply(c.onStartScope||b,c.onStartParams||q)};return b};f.tweenFromTo=function(d,c,a){a=a||{};a.startAt={time:this._parseTimeOrLabel(d)};d=this.tweenTo(c,a);return d.duration(Math.abs(d.vars.time-d.vars.startAt.time)/this._timeScale||0.001)}; +f.render=function(d,c,a){this._gc&&this._enabled(!0,!1);this._active=!this._paused;var e=!this._dirty?this._totalDuration:this.totalDuration(),b=this._time,j=this._totalTime,i=this._startTime,f=this._timeScale,n=this._rawPrevTime,m=this._paused,k=this._cycle,g,l;if(d>=e){this._locked||(this._totalTime=e,this._cycle=this._repeat);if(!this._reversed&&!this._hasPausedChild()&&(g=!0,l="onComplete",0===this._duration&&(0===d||0>this._rawPrevTime)))this._rawPrevTime!==d&&(a=!0);this._rawPrevTime=d;this._yoyo&& +0!==(this._cycle&1)?(this._time=0,d=-1E-6):(this._time=this._duration,d=this._duration+1E-6)}else if(0>=d){this._locked||(this._totalTime=this._cycle=0);this._time=0;if(0!==b||0===this._duration&&0d?(this._active=!1,0===this._duration&&0<=this._rawPrevTime&&(a=!0)):this._initted||(a=!0);this._rawPrevTime=d;d=0===this._duration?0:-1E-6}else if(this._time=this._rawPrevTime=d,!this._locked&&(this._totalTime=d,0!==this._repeat)){var r= +this._duration+this._repeatDelay;this._cycle=this._totalTime/r>>0;0!==this._cycle&&this._cycle===this._totalTime/r&&this._cycle--;this._time=this._totalTime-this._cycle*r;this._yoyo&&0!==(this._cycle&1)&&(this._time=this._duration-this._time);this._time>this._duration?(this._time=this._duration,d=this._duration+1E-6):0>this._time?this._time=d=0:d=this._time}if(this._cycle!==k&&!this._locked){var r=this._yoyo&&0!==(k&1),h=r===(this._yoyo&&0!==(this._cycle&1)),p=this._totalTime,s=this._cycle,u=this._rawPrevTime, +v=this._time;this._totalTime=k*this._duration;this._cycleb)for(a=this._first;a;){j=a._next;if(this._paused&&!m)break;else if(a._active||a._startTime<=this._time&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())- +(d-a._startTime)*a._timeScale,c,!1):a.render((d-a._startTime)*a._timeScale,c,!1);a=j}else for(a=this._last;a;){j=a._prev;if(this._paused&&!m)break;else if(a._active||a._startTime<=b&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())-(d-a._startTime)*a._timeScale,c,!1):a.render((d-a._startTime)*a._timeScale,c,!1);a=j}this._onUpdate&&(c||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||q));if(l&&!this._locked&&!this._gc&&(i===this._startTime|| +f!==this._timeScale))if(0===this._time||e>=this.totalDuration())g&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),c||this.vars[l]&&this.vars[l].apply(this.vars[l+"Scope"]||this,this.vars[l+"Params"]||q)}};f.getActive=function(d,c,a){null==d&&(d=!0);null==c&&(c=!0);null==a&&(a=!1);var e=[],d=this.getChildren(d,c,a),c=0,a=d.length,b,j;for(b=0;b=j._startTime&&j._timeline._timed)return c[e].name;return null};f.getLabelBefore=function(d){null==d&&(d=this._time);for(var c=this.getLabelsArray(),a=c.length;-1<--a;)if(c[a].timethis._duration&&(d=this._duration);this._yoyo&&0!==(this._cycle&1)?d=this._duration-d+this._cycle*(this._duration+this._repeatDelay):0!==this._repeat&&(d+=this._cycle*(this._duration+this._repeatDelay)); +return this.totalTime(d,c)};f.repeat=function(d){if(!arguments.length)return this._repeat;this._repeat=d;return this._uncache(!0)};f.repeatDelay=function(d){if(!arguments.length)return this._repeatDelay;this._repeatDelay=d;return this._uncache(!0)};f.yoyo=function(d){if(!arguments.length)return this._yoyo;this._yoyo=d;return this};f.currentLabel=function(d){return!arguments.length?this.getLabelBefore(this._time+1E-8):this.seek(d,!0)};return g},!0);_gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline", +"TweenLite"],function(h,p,f){var g=function(a){p.call(this,a);this._labels={};this.autoRemoveChildren=!0==this.vars.autoRemoveChildren;this.smoothChildTiming=!0==this.vars.smoothChildTiming;this._sortChildren=!0;this._onUpdate=this.vars.onUpdate;for(var a=q.length,e,b;-1<--a;)if(b=this.vars[q[a]])for(e=b.length;-1<--e;)"{self}"===b[e]&&(b=this.vars[q[a]]=b.concat(),b[e]=this);this.vars.tweens instanceof Array&&this.insertMultiple(this.vars.tweens,0,this.vars.align||"normal",this.vars.stagger||0)}, +q=["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams","onRepeatParams"],s=[],d=function(a){var e={},b;for(b in a)e[b]=a[b];return e},c=g.prototype=new p;g.version=1.641;c.constructor=g;c.kill()._gc=!1;c.to=function(a,e,b,c,d){return this.insert(new f(a,e,b),this._parseTimeOrLabel(d,c,!0))};c.from=function(a,e,b,c,d){return this.insert(f.from(a,e,b),this._parseTimeOrLabel(d,c,!0))};c.fromTo=function(a,e,b,c,d,t){return this.insert(f.fromTo(a,e,b,c),this._parseTimeOrLabel(t, +d,!0))};c.staggerTo=function(a,e,b,c,i,t,n,m,k){n=new g({onComplete:n,onCompleteParams:m,onCompleteScope:k});c=c||0;for(m=0;m=d){this._totalTime=this._time= +d;if(!this._reversed&&!this._hasPausedChild()&&(k=!0,l="onComplete",0===this._duration&&(0===a||0>this._rawPrevTime)))this._rawPrevTime!==a&&(b=!0);this._rawPrevTime=a;a=d+1E-6}else if(0>=a){this._totalTime=this._time=0;if(0!==c||0===this._duration&&0a?(this._active=!1,0===this._duration&&0<=this._rawPrevTime&&(b=!0)):this._initted||(b=!0);this._rawPrevTime=a;a=-1E-6}else this._totalTime=this._time=this._rawPrevTime=a;if(this._time!==c|| +b){this._initted||(this._initted=!0);0===c&&this.vars.onStart&&0!==this._time&&(e||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||s));if(this._time>c)for(b=this._first;b;){h=b._next;if(this._paused&&!m)break;else if(b._active||b._startTime<=this._time&&!b._paused&&!b._gc)b._reversed?b.render((!b._dirty?b._totalDuration:b.totalDuration())-(a-b._startTime)*b._timeScale,e,!1):b.render((a-b._startTime)*b._timeScale,e,!1);b=h}else for(b=this._last;b;){h=b._prev;if(this._paused&& +!m)break;else if(b._active||b._startTime<=c&&!b._paused&&!b._gc)b._reversed?b.render((!b._dirty?b._totalDuration:b.totalDuration())-(a-b._startTime)*b._timeScale,e,!1):b.render((a-b._startTime)*b._timeScale,e,!1);b=h}this._onUpdate&&(e||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||s));if(l&&!this._gc&&(f===this._startTime||g!=this._timeScale))if(0===this._time||d>=this.totalDuration())k&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),e||this.vars[l]&& +this.vars[l].apply(this.vars[l+"Scope"]||this,this.vars[l+"Params"]||s)}};c._hasPausedChild=function(){for(var a=this._first;a;){if(a._paused||a instanceof g&&a._hasPausedChild())return!0;a=a._next}return!1};c.getChildren=function(a,d,b,c){for(var c=c||-9999999999,i=[],g=this._first,h=0;g;)g._startTime=b&&(c._startTime+=a),c=c._next;if(d)for(var f in this._labels)this._labels[f]>=b&&(this._labels[f]+=a);return this._uncache(!0)};c._kill=function(a,c){if(null==a&&null==c)return this._enabled(!1,!1);for(var b=null==c?this.getChildren(!0,!0,!1):this.getTweensOf(c), +d=b.length,f=!1;-1<--d;)b[d]._kill(a,c)&&(f=!0);return f};c.clear=function(a){var c=this.getChildren(!1,!0,!0),b=c.length;for(this._time=this._totalTime=0;-1<--b;)c[b]._enabled(!1,!1);!1!=a&&(this._labels={});return this._uncache(!0)};c.invalidate=function(){for(var a=this._first;a;)a.invalidate(),a=a._next;return this};c._enabled=function(a,c){if(a===this._gc)for(var b=this._first;b;)b._enabled(a,!0),b=b._next;return p.prototype._enabled.call(this,a,c)};c.progress=function(a){return!arguments.length? +this._time/this.duration():this.totalTime(this.duration()*a,!1)};c.duration=function(a){if(!arguments.length)return this._dirty&&this.totalDuration(),this._duration;0!==this.duration()&&0!==a&&this.timeScale(this._duration/a);return this};c.totalDuration=function(a){if(!arguments.length){if(this._dirty){for(var c=0,b=this._first,d=-999999999999,f;b;)f=b._next,b._startTimeb._startTime&&(c-=b._startTime,this.shiftChildren(-b._startTime, +!1,-9999999999)),b=b._startTime+(!b._dirty?b._totalDuration:b.totalDuration())/b._timeScale,b>c&&(c=b),b=f;this._duration=this._totalDuration=c;this._dirty=!1}return this._totalDuration}0!==this.totalDuration()&&0!==a&&this.timeScale(this._totalDuration/a);return this};c.usesFrames=function(){for(var a=this._timeline;a._timeline;)a=a._timeline;return a===h._rootFramesTimeline};c.rawTime=function(){return this._paused||0!==this._totalTime&&this._totalTime!==this._totalDuration?this._totalTime:(this._timeline.rawTime()- +this._startTime)*this._timeScale};return g},!0)});window._gsDefine&&_gsQueue.pop()(); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/src/minified/TweenLite.min.js b/duo/js/greensock-v12-js/src/minified/TweenLite.min.js new file mode 100755 index 0000000..931f7de --- /dev/null +++ b/duo/js/greensock-v12-js/src/minified/TweenLite.min.js @@ -0,0 +1,52 @@ +/*! + * VERSION: beta 1.668 + * DATE: 2013-01-01 + * JavaScript + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +(function(n){var H=function(a){a=a.split(".");var c=n,b;for(b=0;ba?2*a:2*(1-a);1===b?l*=l:2===b?l*=l*l:3===b?l*=l*l*l:4===b&&(l*=l*l*l*l);return 1===c?1-l:2===c?l:0.5>a?l/2:1-l/2};q=["Linear","Quad","Cubic","Quart","Quint"];for(k=q.length;-1<--k;)d=s("easing."+q[k],null,!0),C=s("easing.Power"+k,null,!0),d.easeOut=C.easeOut=new u(null, +null,1,k),d.easeIn=C.easeIn=new u(null,null,2,k),d.easeInOut=C.easeInOut=new u(null,null,3,k);s("easing.Strong",m.easing.Power4,!0);m.easing.Linear.easeNone=m.easing.Linear.easeIn;var K=s("events.EventDispatcher",function(a){this._listeners={};this._eventTarget=a||this});d=K.prototype;d.addEventListener=function(a,c,b,l,e){e=e||0;var d=this._listeners[a],j=0,f;null==d&&(this._listeners[a]=d=[]);for(f=d.length;-1<--f;)a=d[f],a.c===c?d.splice(f,1):0===j&&a.pr=p||!0===a)b.frame++,p=b.time>p?b.time+h-(b.time-p):b.time+h-0.001,p>0||1)}:z;k();f=j(m)};this.useRAF=function(a){if(!arguments.length)return d;k();d=a;b.fps(g)};b.fps(a);n.setTimeout(function(){d&&!f&&b.useRAF(!1)},1E3)});d=m.Ticker.prototype=new m.events.EventDispatcher;d.constructor=m.Ticker;var r=s("core.Animation",function(a,c){this.vars=c||{};this._duration=this._totalDuration=a||0;this._delay=Number(this.vars.delay)||0;this._timeScale=1;this._active=!0===this.vars.immediateRender; +this.data=this.vars.data;this._reversed=!0===this.vars.reversed;if(v){I||(t.tick(),I=!0);var b=this.vars.useFrames?y:v;b.insert(this,b._time);this.vars.paused&&this.paused(!0)}}),t=r.ticker=new m.Ticker;d=r.prototype;d._dirty=d._gc=d._initted=d._paused=!1;d._totalTime=d._time=0;d._rawPrevTime=-1;d._next=d._last=d._onUpdate=d._timeline=d.timeline=null;d._paused=!1;d.play=function(a,c){arguments.length&&this.seek(a,c);this.reversed(!1);return this.paused(!1)};d.pause=function(a,c){arguments.length&& +this.seek(a,c);return this.paused(!0)};d.resume=function(a,c){arguments.length&&this.seek(a,c);return this.paused(!1)};d.seek=function(a,c){return this.totalTime(Number(a),!1!==c)};d.restart=function(a,c){this.reversed(!1);this.paused(!1);return this.totalTime(a?-this._delay:0,!1!==c)};d.reverse=function(a,c){arguments.length&&this.seek(a||this.totalDuration(),c);this.reversed(!0);return this.paused(!1)};d.render=function(){};d.invalidate=function(){return this};d._enabled=function(a,c){this._gc= +!a;this._active=a&&!this._paused&&0this._duration&&(a=this._duration);return this.totalTime(a,c)};d.totalTime=function(a, +c){if(!arguments.length)return this._totalTime;if(this._timeline){0>a&&(a+=this.totalDuration());if(this._timeline.smoothChildTiming&&(this._dirty&&this.totalDuration(),a>this._totalDuration&&(a=this._totalDuration),this._startTime=(this._paused?this._pauseTime:this._timeline._time)-(!this._reversed?a:this._totalDuration-a)/this._timeScale,this._timeline._dirty||this._uncache(!1),!this._timeline._active))for(var b=this._timeline;b._timeline;)b.totalTime(b._totalTime,!0),b=b._timeline;this._gc&&this._enabled(!0, +!1);this._totalTime!==a&&this.render(a,c,!1)}return this};d.startTime=function(a){if(!arguments.length)return this._startTime;a!==this._startTime&&(this._startTime=a,this.timeline&&this.timeline._sortChildren&&this.timeline.insert(this,a-this._delay));return this};d.timeScale=function(a){if(!arguments.length)return this._timeScale;a=a||1E-6;if(this._timeline&&this._timeline.smoothChildTiming){var c=this._pauseTime||0===this._pauseTime?this._pauseTime:this._timeline._totalTime;this._startTime=c-(c- +this._startTime)*this._timeScale/a}this._timeScale=a;return this._uncache(!1)};d.reversed=function(a){if(!arguments.length)return this._reversed;a!=this._reversed&&(this._reversed=a,this.totalTime(this._totalTime,!0));return this};d.paused=function(a){if(!arguments.length)return this._paused;a!=this._paused&&this._timeline&&(!a&&this._timeline.smoothChildTiming&&(this._startTime+=this._timeline.rawTime()-this._pauseTime,this._uncache(!1)),this._pauseTime=a?this._timeline.rawTime():null,this._paused= +a,this._active=!this._paused&&0d;)b=b._prev;b?(a._next=b._next,b._next=a):(a._next=this._first,this._first=a);a._next?a._next._prev=a:this._last=a;a._prev=b;this._timeline&&this._uncache(!0);return this};d._remove=function(a,c){a.timeline===this&&(c||a._enabled(!1,!0),a.timeline=null,a._prev?a._prev._next=a._next:this._first===a&&(this._first=a._next),a._next?a._next._prev= +a._prev:this._last===a&&(this._last=a._prev),this._timeline&&this._uncache(!0));return this};d.render=function(a,c){var b=this._first,d;for(this._totalTime=this._time=this._rawPrevTime=a;b;){d=b._next;if(b._active||a>=b._startTime&&!b._paused)b._reversed?b.render((!b._dirty?b._totalDuration:b.totalDuration())-(a-b._startTime)*b._timeScale,c,!1):b.render((a-b._startTime)*b._timeScale,c,!1);b=d}};d.rawTime=function(){return this._totalTime};var h=s("TweenLite",function(a,c,b){r.call(this,c,b);if(null== +a)throw"Cannot tween an undefined reference.";this.target=a;this._overwrite=null==this.vars.overwrite?M[h.defaultOverwrite]:"number"===typeof this.vars.overwrite?this.vars.overwrite>>0:M[this.vars.overwrite];if((a instanceof Array||a.jquery)&&"object"===typeof a[0]){this._targets=a.slice(0);this._propLookup=[];this._siblings=[];for(a=0;ah&&((m||!f._initted)&&2E-10>=h-f._startTime||(p[k++]=f));for(g=k;-1<--g;)if(f=p[g],2===d&&f._kill(b,a)&&(j=!0),2!==d||!f._firstPT&&f._initted)f._enabled(!1,!1)&&(j=!0);return j},O=function(a,c,b){for(var d=a._timeline,e=d._timeScale,g=a._startTime;d._timeline;){g+=d._startTime;e*=d._timeScale;if(d._paused)return-100;d=d._timeline}g/=e;return g>c?g-c:b&&g===c||!a._initted&&2E-10> +g-c?1E-10:(g+=a.totalDuration()/a._timeScale/e)>c?0:g-c-1E-10};d._init=function(){this.vars.startAt&&(this.vars.startAt.overwrite=0,this.vars.startAt.immediateRender=!0,h.to(this.target,0,this.vars.startAt));var a,c;this._ease=this.vars.ease instanceof u?this.vars.easeParams instanceof Array?this.vars.ease.config.apply(this.vars.ease,this.vars.easeParams):this.vars.ease:"function"===typeof this.vars.ease?new u(this.vars.ease,this.vars.easeParams):h.defaultEase;this._easeType=this._ease._type;this._easePower= +this._ease._power;this._firstPT=null;if(this._targets)for(a=this._targets.length;-1<--a;){if(this._initProps(this._targets[a],this._propLookup[a]={},this._siblings[a],this._overwrittenProps?this._overwrittenProps[a]:null))c=!0}else c=this._initProps(this.target,this._propLookup,this._siblings,this._overwrittenProps);c&&h._onPluginEvent("_onInitAllProps",this);this._overwrittenProps&&null==this._firstPT&&"function"!==typeof this.target&&this._enabled(!1,!1);if(this.vars.runBackwards)for(a=this._firstPT;a;)a.s+= +a.c,a.c=-a.c,a=a._next;this._onUpdate=this.vars.onUpdate;this._initted=!0};d._initProps=function(a,c,b,d){var e,g,j,f,h,k;if(null==a)return!1;for(e in this.vars){if(Q[e]){if("onStartParams"===e||"onUpdateParams"===e||"onCompleteParams"===e||"onReverseCompleteParams"===e||"onRepeatParams"===e)if(h=this.vars[e])for(g=h.length;-1<--g;)"{self}"===h[g]&&(h=this.vars[e]=h.concat(),h[g]=this)}else if(N[e]&&(f=new N[e])._onInitTween(a,this.vars[e],this)){this._firstPT=k={_next:this._firstPT,t:f,p:"setRatio", +s:0,c:1,f:!0,n:e,pg:!0,pr:f._priority};for(g=f._overwriteProps.length;-1<--g;)c[f._overwriteProps[g]]=this._firstPT;if(f._priority||f._onInitAllProps)j=!0;if(f._onDisable||f._onEnable)this._notifyPluginsOfEnabled=!0}else this._firstPT=c[e]=k={_next:this._firstPT,t:a,p:e,f:"function"===typeof a[e],n:e,pg:!1,pr:0},k.s=!k.f?parseFloat(a[e]):a[e.indexOf("set")||"function"!==typeof a["get"+e.substr(3)]?e:"get"+e.substr(3)](),g=this.vars[e],k.c="number"===typeof g?g-k.s:"string"===typeof g&&"="===g.charAt(1)? +parseInt(g.charAt(0)+"1",10)*Number(g.substr(2)):Number(g)||0;k&&k._next&&(k._next._prev=k)}return d&&this._kill(d,a)?this._initProps(a,c,b,d):1=this._duration){if(this._totalTime=this._time=this._duration,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(e=!0,g="onComplete"),0===this._duration){if(0===a|| +0>this._rawPrevTime)this._rawPrevTime!==a&&(b=!0);this._rawPrevTime=a}}else if(0>=a){this._totalTime=this._time=0;this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0;if(0!==d||0===this._duration&&0a?(this._active=!1,0===this._duration&&(0<=this._rawPrevTime&&(b=!0),this._rawPrevTime=a)):this._initted||(b=!0)}else if(this._totalTime=this._time=a,this._easeType){var j=a/this._duration,f=this._easeType,h=this._easePower;if(1===f||3===f&& +0.5<=j)j=1-j;3===f&&(j*=2);1===h?j*=j:2===h?j*=j*j:3===h?j*=j*j*j:4===h&&(j*=j*j*j*j);this.ratio=1===f?1-j:2===f?j:0.5>a/this._duration?j/2:1-j/2}else this.ratio=this._ease.getRatio(a/this._duration);if(this._time!==d||b){this._initted||(this._init(),!e&&this._time&&(this.ratio=this._ease.getRatio(this._time/this._duration)));!this._active&&!this._paused&&(this._active=!0);if(0===d&&this.vars.onStart&&(0!==this._time||0===this._duration))c||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams|| +E);for(a=this._firstPT;a;){if(a.f)a.t[a.p](a.c*this.ratio+a.s);else a.t[a.p]=a.c*this.ratio+a.s;a=a._next}this._onUpdate&&(c||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||E));g&&!this._gc&&(e&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),c||this.vars[g]&&this.vars[g].apply(this.vars[g+"Scope"]||this,this.vars[g+"Params"]||E))}};d._kill=function(a,c){"all"===a&&(a=null);if(null==a&&(null==c||c===this.target))return this._enabled(!1,!1);c= +c||this._targets||this.target;var b,d,e,g,h,f,k;if((c instanceof Array||c.jquery)&&"object"===typeof c[0])for(b=c.length;-1<--b;)this._kill(a,c[b])&&(h=!0);else{if(this._targets)for(b=this._targets.length;-1<--b;){if(c===this._targets[b]){g=this._propLookup[b]||{};this._overwrittenProps=this._overwrittenProps||[];d=this._overwrittenProps[b]=a?this._overwrittenProps[b]||{}:"all";break}}else{if(c!==this.target)return!1;g=this._propLookup;d=this._overwrittenProps=a?this._overwrittenProps||{}:"all"}if(g)for(e in f= +a||g,k=a!==d&&"all"!==d&&a!==g&&(null==a||!0!==a._tempKill),f){if(b=g[e]){b.pg&&b.t._kill(f)&&(h=!0);if(!b.pg||0===b.t._overwriteProps.length)b._prev?b._prev._next=b._next:b===this._firstPT&&(this._firstPT=b._next),b._next&&(b._next._prev=b._prev),b._next=b._prev=null;delete g[e]}k&&(d[e]=1)}}return h};d.invalidate=function(){this._notifyPluginsOfEnabled&&h._onPluginEvent("_onDisable",this);this._onUpdate=this._overwrittenProps=this._firstPT=null;this._initted=this._active=this._notifyPluginsOfEnabled= +!1;this._propLookup=this._targets?{}:[];return this};d._enabled=function(a,c){if(a&&this._gc)if(this._targets)for(var b=this._targets.length;-1<--b;)this._siblings[b]=A(this._targets[b],this,!0);else this._siblings=A(this.target,this,!0);r.prototype._enabled.call(this,a,c);return this._notifyPluginsOfEnabled&&this._firstPT?h._onPluginEvent(a?"_onEnable":"_onDisable",this):!1};h.to=function(a,c,b){return new h(a,c,b)};h.from=function(a,c,b){b.runBackwards=!0;!1!==b.immediateRender&&(b.immediateRender= +!0);return new h(a,c,b)};h.fromTo=function(a,c,b,d){d.startAt=b;b.immediateRender&&(d.immediateRender=!0);return new h(a,c,d)};h.delayedCall=function(a,c,b,d,e){return new h(c,0,{delay:a,onComplete:c,onCompleteParams:b,onCompleteScope:d,onReverseComplete:c,onReverseCompleteParams:b,onReverseCompleteScope:d,immediateRender:!1,useFrames:e,overwrite:0})};h.set=function(a,c){return new h(a,0,c)};h.killTweensOf=h.killDelayedCallsTo=function(a,c){for(var b=h.getTweensOf(a),d=b.length;-1<--d;)b[d]._kill(c, +a)};h.getTweensOf=function(a){if(null!=a){var c,b,d;if((a instanceof Array||a.jquery)&&"object"===typeof a[0]){c=a.length;for(b=[];-1<--c;)b=b.concat(h.getTweensOf(a[c]));for(c=b.length;-1<--c;){d=b[c];for(a=c;-1<--a;)d===b[a]&&b.splice(c,1)}}else{b=A(a).concat();for(c=b.length;-1<--c;)b[c]._gc&&b.splice(c,1)}return b}};var B=s("plugins.TweenPlugin",function(a,c){this._overwriteProps=(a||"").split(",");this._propName=this._overwriteProps[0];this._priority=c||0},!0);d=B.prototype;B.version=12;B.API= +2;d._firstPT=null;d._addTween=function(a,c,b,d,e,g){var h;if(null!=d&&(h="number"===typeof d||"="!==d.charAt(1)?Number(d)-b:parseInt(d.charAt(0)+"1",10)*Number(d.substr(2))))this._firstPT=a={_next:this._firstPT,t:a,p:c,s:b,c:h,f:"function"===typeof a[c],n:e||c,r:g},a._next&&(a._next._prev=a)};d.setRatio=function(a){for(var c=this._firstPT,b;c;){b=c.c*a+c.s;c.r&&(b=b+(0>0);if(c.f)c.t[c.p](b);else c.t[c.p]=b;c=c._next}};d._kill=function(a){if(null!=a[this._propName])this._overwriteProps= +[];else for(var c=this._overwriteProps.length;-1<--c;)null!=a[this._overwriteProps[c]]&&this._overwriteProps.splice(c,1);for(c=this._firstPT;c;)null!=a[c.n]&&(c._next&&(c._next._prev=c._prev),c._prev?(c._prev._next=c._next,c._prev=null):this._firstPT===c&&(this._firstPT=c._next)),c=c._next;return!1};d._roundProps=function(a,c){for(var b=this._firstPT;b;){if(a[this._propName]||null!=b.n&&a[b.n.split(this._propName+"_").join("")])b.r=c;b=b._next}};h._onPluginEvent=function(a,c){var b=c._firstPT,d;if("_onInitAllProps"=== +a){for(var e,g,h,f;b;){f=b._next;for(e=g;e&&e.pr>b.pr;)e=e._next;(b._prev=e?e._prev:h)?b._prev._next=b:g=b;(b._next=e)?e._prev=b:h=b;b=f}b=c._firstPT=g}for(;b;)b.pg&&"function"===typeof b.t[a]&&b.t[a]()&&(d=!0),b=b._next;return d};B.activate=function(a){for(var c=a.length;-1<--c;)a[c].API===B.API&&(h._plugins[(new a[c])._propName]=a[c]);return!0};if(q=n._gsQueue){for(k=0;k=f){if(this._totalTime=f, +this._cycle=this._repeat,this._yoyo&&0!==(this._cycle&1)?(this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0):(this._time=this._duration,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1),this._reversed||(v=!0,E="onComplete"),0===this._duration){if(0===g||0>this._rawPrevTime)this._rawPrevTime!==g&&(a=!0);this._rawPrevTime=g}}else if(0>=g){this._totalTime=this._time=this._cycle=0;this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0;if(0!==c||0===this._duration&&0g?(this._active=!1,0===this._duration&&(0<=this._rawPrevTime&&(a=!0),this._rawPrevTime=g)):this._initted||(a=!0)}else if(this._totalTime=this._time=g,0!==this._repeat&&(g=this._duration+this._repeatDelay,this._cycle=this._totalTime/g>>0,0!==this._cycle&&this._cycle===this._totalTime/g&&this._cycle--,this._time=this._totalTime-this._cycle*g,this._yoyo&&0!==(this._cycle&1)&&(this._time=this._duration-this._time),this._time>this._duration?this._time=this._duration: +0>this._time&&(this._time=0)),this._easeType){g=this._time/this._duration;var f=this._easeType,s=this._easePower;if(1===f||3===f&&0.5<=g)g=1-g;3===f&&(g*=2);1===s?g*=g:2===s?g*=g*g:3===s?g*=g*g*g:4===s&&(g*=g*g*g*g);this.ratio=1===f?1-g:2===f?g:0.5>this._time/this._duration?g/2:1-g/2}else this.ratio=this._ease.getRatio(this._time/this._duration);if(u===this._time&&!a)c!==this._totalTime&&this._onUpdate&&(d||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||b));else{this._initted|| +(this._init(),!v&&this._time&&(this.ratio=this._ease.getRatio(this._time/this._duration)));!this._active&&!this._paused&&(this._active=!0);if(0===c&&this.vars.onStart&&(0!==this._totalTime||0===this._duration))d||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||b);for(a=this._firstPT;a;){if(a.f)a.t[a.p](a.c*this.ratio+a.s);else a.t[a.p]=a.c*this.ratio+a.s;a=a._next}this._onUpdate&&(d||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||b));this._cycle!== +t&&(d||this._gc||this.vars.onRepeat&&this.vars.onRepeat.apply(this.vars.onRepeatScope||this,this.vars.onRepeatParams||b));E&&!this._gc&&(v&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),d||this.vars[E]&&this.vars[E].apply(this.vars[E+"Scope"]||this,this.vars[E+"Params"]||b))}};q.to=function(a,d,A){return new q(a,d,A)};q.from=function(a,d,A){A.runBackwards=!0;!1!==A.immediateRender&&(A.immediateRender=!0);return new q(a,d,A)};q.fromTo=function(a,d,A,f){f.startAt=A;A.immediateRender&& +(f.immediateRender=!0);return new q(a,d,f)};q.staggerTo=q.allTo=function(a,d,A,f,u,c,b){f=f||0;var t=[],E=a.length,s=A.delay||0,C,n,h;for(n=0;nthis._duration&&(a=this._duration);this._yoyo&&0!==(this._cycle&1)?a=this._duration-a+this._cycle*(this._duration+this._repeatDelay):0!=this._repeat&&(a+=this._cycle*(this._duration+this._repeatDelay));return this.totalTime(a,d)};l.totalDuration=function(a){return!arguments.length?(this._dirty&&(this._totalDuration=-1===this._repeat?999999999999:this._duration*(this._repeat+1)+this._repeatDelay*this._repeat,this._dirty=!1),this._totalDuration):-1===this._repeat? +this:this.duration((a-this._repeat*this._repeatDelay)/(this._repeat+1))};l.repeat=function(a){if(!arguments.length)return this._repeat;this._repeat=a;return this._uncache(!0)};l.repeatDelay=function(a){if(!arguments.length)return this._repeatDelay;this._repeatDelay=a;return this._uncache(!0)};l.yoyo=function(a){if(!arguments.length)return this._yoyo;this._yoyo=a;return this};return q},!0);_gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(r,k,h){var q=function(a){k.call(this, +a);this._labels={};this.autoRemoveChildren=!0===this.vars.autoRemoveChildren;this.smoothChildTiming=!0===this.vars.smoothChildTiming;this._sortChildren=!0;this._onUpdate=this.vars.onUpdate;a=l.length;for(var g,d;-1<--a;)if(d=this.vars[l[a]])for(g=d.length;-1<--g;)"{self}"===d[g]&&(d=this.vars[l[a]]=d.concat(),d[g]=this);this.vars.tweens instanceof Array&&this.insertMultiple(this.vars.tweens,0,this.vars.align||"normal",this.vars.stagger||0)},l=["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams", +"onRepeatParams"],b=[],t=function(a){var g={},d;for(d in a)g[d]=a[d];return g},c=q.prototype=new k;q.version=1.641;c.constructor=q;c.kill()._gc=!1;c.to=function(a,g,d,c,f){return this.insert(new h(a,g,d),this._parseTimeOrLabel(f,c,!0))};c.from=function(a,g,d,c,f){return this.insert(h.from(a,g,d),this._parseTimeOrLabel(f,c,!0))};c.fromTo=function(a,g,d,c,f,u){return this.insert(h.fromTo(a,g,d,c),this._parseTimeOrLabel(u,f,!0))};c.staggerTo=function(a,g,d,c,f,u,b,l,v){b=new q({onComplete:b,onCompleteParams:l, +onCompleteScope:v});c=c||0;for(l=0;l=t){this._totalTime=this._time=t;if(!this._reversed&&!this._hasPausedChild()&&(v=!0,s="onComplete",0===this._duration&&(0===a||0>this._rawPrevTime)))this._rawPrevTime!== +a&&(d=!0);this._rawPrevTime=a;a=t+1E-6}else if(0>=a){this._totalTime=this._time=0;if(0!==f||0===this._duration&&0a?(this._active=!1,0===this._duration&&0<=this._rawPrevTime&&(d=!0)):this._initted||(d=!0);this._rawPrevTime=a;a=-1E-6}else this._totalTime=this._time=this._rawPrevTime=a;if(this._time!==f||d){this._initted||(this._initted=!0);0===f&&this.vars.onStart&&0!==this._time&&(c||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams|| +b));if(this._time>f)for(d=this._first;d;){E=d._next;if(this._paused&&!q)break;else if(d._active||d._startTime<=this._time&&!d._paused&&!d._gc)d._reversed?d.render((!d._dirty?d._totalDuration:d.totalDuration())-(a-d._startTime)*d._timeScale,c,!1):d.render((a-d._startTime)*d._timeScale,c,!1);d=E}else for(d=this._last;d;){E=d._prev;if(this._paused&&!q)break;else if(d._active||d._startTime<=f&&!d._paused&&!d._gc)d._reversed?d.render((!d._dirty?d._totalDuration:d.totalDuration())-(a-d._startTime)*d._timeScale, +c,!1):d.render((a-d._startTime)*d._timeScale,c,!1);d=E}this._onUpdate&&(c||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||b));if(s&&!this._gc&&(u===this._startTime||h!=this._timeScale))if(0===this._time||t>=this.totalDuration())v&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),c||this.vars[s]&&this.vars[s].apply(this.vars[s+"Scope"]||this,this.vars[s+"Params"]||b)}};c._hasPausedChild=function(){for(var a=this._first;a;){if(a._paused||a instanceof +q&&a._hasPausedChild())return!0;a=a._next}return!1};c.getChildren=function(a,c,d,b){b=b||-9999999999;for(var f=[],u=this._first,t=0;u;)u._startTime=d&&(b._startTime+=a),b=b._next;if(c)for(var f in this._labels)this._labels[f]>=d&&(this._labels[f]+=a);return this._uncache(!0)};c._kill=function(a,c){if(null==a&&null==c)return this._enabled(!1,!1);for(var d=null==c?this.getChildren(!0,!0,!1):this.getTweensOf(c),b=d.length,f=!1;-1<--b;)d[b]._kill(a,c)&&(f=!0);return f};c.clear=function(a){var c=this.getChildren(!1,!0,!0),d=c.length;for(this._time=this._totalTime= +0;-1<--d;)c[d]._enabled(!1,!1);!1!=a&&(this._labels={});return this._uncache(!0)};c.invalidate=function(){for(var a=this._first;a;)a.invalidate(),a=a._next;return this};c._enabled=function(a,c){if(a===this._gc)for(var d=this._first;d;)d._enabled(a,!0),d=d._next;return k.prototype._enabled.call(this,a,c)};c.progress=function(a){return!arguments.length?this._time/this.duration():this.totalTime(this.duration()*a,!1)};c.duration=function(a){if(!arguments.length)return this._dirty&&this.totalDuration(), +this._duration;0!==this.duration()&&0!==a&&this.timeScale(this._duration/a);return this};c.totalDuration=function(a){if(!arguments.length){if(this._dirty){for(var c=0,d=this._first,b=-999999999999,f;d;)f=d._next,d._startTimed._startTime&&(c-=d._startTime,this.shiftChildren(-d._startTime,!1,-9999999999)),d=d._startTime+(!d._dirty?d._totalDuration:d.totalDuration())/d._timeScale,d>c&&(c=d),d=f;this._duration=this._totalDuration= +c;this._dirty=!1}return this._totalDuration}0!==this.totalDuration()&&0!==a&&this.timeScale(this._totalDuration/a);return this};c.usesFrames=function(){for(var a=this._timeline;a._timeline;)a=a._timeline;return a===r._rootFramesTimeline};c.rawTime=function(){return this._paused||0!==this._totalTime&&this._totalTime!==this._totalDuration?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale};return q},!0);_gsDefine("TimelineMax",["TimelineLite","TweenLite","easing.Ease"],function(r, +k,h){var q=function(b){r.call(this,b);this._repeat=this.vars.repeat||0;this._repeatDelay=this.vars.repeatDelay||0;this._cycle=0;this._yoyo=!0===this.vars.yoyo;this._dirty=!0},l=[],b=new h(null,null,1,0);h=q.prototype=new r;h.constructor=q;h.kill()._gc=!1;q.version=1.641;h.invalidate=function(){this._yoyo=!0===this.vars.yoyo;this._repeat=this.vars.repeat||0;this._repeatDelay=this.vars.repeatDelay||0;this._uncache(!0);return r.prototype.invalidate.call(this)};h.addCallback=function(b,c,a,g){return this.insert(k.delayedCall(0, +b,a,g),c)};h.removeCallback=function(b,c){if(null==c)this._kill(null,b);else for(var a=this.getTweensOf(b,!1),g=a.length,d=this._parseTimeOrLabel(c);-1<--g;)a[g]._startTime===d&&a[g]._enabled(!1,!1);return this};h.tweenTo=function(t,c){c=c||{};var a={ease:b,overwrite:2,useFrames:this.usesFrames(),immediateRender:!1},g,d;for(g in c)a[g]=c[g];a.time=this._parseTimeOrLabel(t);d=new k(this,Math.abs(Number(a.time)-this._time)/this._timeScale||0.001,a);a.onStart=function(){d.target.paused(!0);d.vars.time!== +d.target.time()&&d.duration(Math.abs(d.vars.time-d.target.time())/d.target._timeScale);c.onStart&&c.onStart.apply(c.onStartScope||d,c.onStartParams||l)};return d};h.tweenFromTo=function(b,c,a){a=a||{};a.startAt={time:this._parseTimeOrLabel(b)};b=this.tweenTo(c,a);return b.duration(Math.abs(b.vars.time-b.vars.startAt.time)/this._timeScale||0.001)};h.render=function(b,c,a){this._gc&&this._enabled(!0,!1);this._active=!this._paused;var g=!this._dirty?this._totalDuration:this.totalDuration(),d=this._time, +h=this._totalTime,f=this._startTime,u=this._timeScale,q=this._rawPrevTime,k=this._paused,v=this._cycle,E,s;if(b>=g){this._locked||(this._totalTime=g,this._cycle=this._repeat);if(!this._reversed&&!this._hasPausedChild()&&(E=!0,s="onComplete",0===this._duration&&(0===b||0>this._rawPrevTime)))this._rawPrevTime!==b&&(a=!0);this._rawPrevTime=b;this._yoyo&&0!==(this._cycle&1)?(this._time=0,b=-1E-6):(this._time=this._duration,b=this._duration+1E-6)}else if(0>=b){this._locked||(this._totalTime=this._cycle= +0);this._time=0;if(0!==d||0===this._duration&&0b?(this._active=!1,0===this._duration&&0<=this._rawPrevTime&&(a=!0)):this._initted||(a=!0);this._rawPrevTime=b;b=0===this._duration?0:-1E-6}else if(this._time=this._rawPrevTime=b,!this._locked&&(this._totalTime=b,0!==this._repeat)){var C=this._duration+this._repeatDelay;this._cycle=this._totalTime/C>>0;0!==this._cycle&&this._cycle===this._totalTime/C&&this._cycle--;this._time= +this._totalTime-this._cycle*C;this._yoyo&&0!==(this._cycle&1)&&(this._time=this._duration-this._time);this._time>this._duration?(this._time=this._duration,b=this._duration+1E-6):0>this._time?this._time=b=0:b=this._time}if(this._cycle!==v&&!this._locked){var C=this._yoyo&&0!==(v&1),n=C===(this._yoyo&&0!==(this._cycle&1)),T=this._totalTime,L=this._cycle,J=this._rawPrevTime,y=this._time;this._totalTime=v*this._duration;this._cycled)for(a=this._first;a;){h=a._next;if(this._paused&&!k)break;else if(a._active||a._startTime<=this._time&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())-(b-a._startTime)*a._timeScale,c,!1):a.render((b-a._startTime)*a._timeScale,c,!1);a=h}else for(a=this._last;a;){h=a._prev; +if(this._paused&&!k)break;else if(a._active||a._startTime<=d&&!a._paused&&!a._gc)a._reversed?a.render((!a._dirty?a._totalDuration:a.totalDuration())-(b-a._startTime)*a._timeScale,c,!1):a.render((b-a._startTime)*a._timeScale,c,!1);a=h}this._onUpdate&&(c||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||l));if(s&&!this._locked&&!this._gc&&(f===this._startTime||u!==this._timeScale))if(0===this._time||g>=this.totalDuration())E&&(this._timeline.autoRemoveChildren&&this._enabled(!1, +!1),this._active=!1),c||this.vars[s]&&this.vars[s].apply(this.vars[s+"Scope"]||this,this.vars[s+"Params"]||l)}};h.getActive=function(b,c,a){null==b&&(b=!0);null==c&&(c=!0);null==a&&(a=!1);var g=[];b=this.getChildren(b,c,a);c=0;a=b.length;var d,h;for(d=0;d=h._startTime&&h._timeline._timeb)return c[g].name;return null};h.getLabelBefore=function(b){null==b&&(b=this._time);for(var c=this.getLabelsArray(),a=c.length;-1<--a;)if(c[a].timethis._duration&&(b=this._duration);this._yoyo&&0!==(this._cycle&1)?b=this._duration-b+this._cycle*(this._duration+this._repeatDelay):0!==this._repeat&&(b+=this._cycle*(this._duration+this._repeatDelay));return this.totalTime(b,c)};h.repeat=function(b){if(!arguments.length)return this._repeat;this._repeat=b;return this._uncache(!0)}; +h.repeatDelay=function(b){if(!arguments.length)return this._repeatDelay;this._repeatDelay=b;return this._uncache(!0)};h.yoyo=function(b){if(!arguments.length)return this._yoyo;this._yoyo=b;return this};h.currentLabel=function(b){return!arguments.length?this.getLabelBefore(this._time+1E-8):this.seek(b,!0)};return q},!0);_gsDefine("plugins.BezierPlugin",["plugins.TweenPlugin"],function(r){var k=function(){r.call(this,"bezier",-1);this._overwriteProps.pop();this._func={};this._round={}},h=k.prototype= +new r("bezier",1),q=180/Math.PI,l=Math.PI/180,b=[],t=[],c=[],a={},g=function(a,c,d,b){this.a=a;this.b=c;this.c=d;this.d=b;this.da=b-a;this.ca=d-a;this.ba=c-a},d=k.bezierThrough=function(d,u,h,q,v,E){var s={},C=[],n,l,k;v="string"===typeof v?","+v+",":",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,";null==u&&(u=1);for(l in d[0])C.push(l);b.length=t.length=c.length=0;for(n=C.length;-1< +--n;){l=C[n];a[l]=-1!==v.indexOf(","+l+",");k=s;var J=l,y;y=d;var j=l,B=a[l],x=E,G=[],z=void 0,w=void 0,r=void 0,e=void 0,m=void 0,z=void 0;if(x){y=[x].concat(y);for(w=y.length;-1<--w;)if("string"===typeof(z=y[w][j]))"="===z.charAt(1)&&(y[w][j]=x[j]+Number(z.charAt(0)+z.substr(2)))}z=y.length-2;if(0>z)G[0]=new g(y[0][j],0,0,y[-1>z?0:1][j]);else{for(w=0;wr)return n;for(j=0;j<=r;j++)x=c(a,g[j],h,n,q,r!==j),t[j]=x.end;for(B in f)y[B]=f[B];y.values=t;n=new b(a,"bezier",0,0,x.pt,2);n.data=x;n.plugin=q;n.setRatio=d;0===y.autoRotate&&(y.autoRotate=!0);y.autoRotate&&!(y.autoRotate instanceof Array)&&(j=!0===y.autoRotate?0:Number(y.autoRotate)*l,y.autoRotate=null!=x.end.left?[["left","top","rotation",j,!0]]:null!=x.end.x?[["x","y","rotation",j,!0]]:!1);y.autoRotate&&(h._transform||h._enableTransforms(!1),x.autoRotate=h._target._gsTransform); +q._onInitTween(x.proxy,y,h._tween);return n})}};h._onInitTween=function(a,c,b){this._target=a;c instanceof Array&&(c={values:c});this._props=[];this._timeRes=null==c.timeResolution?6:parseInt(c.timeResolution,10);var h=c.values||[],q={},l=h[0];b=c.autoRotate||b.vars.orientToBezier;var s,C,n;this._autoRotate=b?b instanceof Array?b:[["x","y","rotation",!0===b?0:Number(b)||0]]:null;for(s in l)this._props.push(s);for(l=this._props.length;-1<--l;)s=this._props[l],this._overwriteProps.push(s),b=this._func[s]= +"function"===typeof a[s],q[s]=!b?parseFloat(a[s]):a[s.indexOf("set")||"function"!==typeof a["get"+s.substr(3)]?s:"get"+s.substr(3)](),n||q[s]!==h[0][s]&&(n=q);if("cubic"!==c.type&&"quadratic"!==c.type&&"soft"!==c.type)q=d(h,isNaN(c.curviness)?1:c.curviness,!1,"thruBasic"===c.type,c.correlate,n);else{b=(b=c.type)||"soft";c={};n="cubic"===b?3:2;b="soft"===b;var l=[],k,r,t,y,j,B,x,G,z;b&&q&&(h=[q].concat(h));if(null==h||h.length>0||6;q=[];r=[];h=t=0;c=s-1;n=[];b= +[];for(C in l){k=l[C];j=q;B=s;x=1/B;G=k.length;for(var w=void 0,A=void 0,e=y=z=A=void 0,m=w=void 0,p=void 0,p=e=void 0;-1<--G;){e=k[G];A=e.a;z=e.d-A;y=e.c-A;e=e.b-A;A=0;for(m=1;m<=B;m++)w=x*m,p=1-w,w=A-(A=(w*w*z+3*p*(w*y+p*e))*w),p=G*B+m-1,j[p]=(j[p]||0)+w*w}}l=q.length;for(C=0;C>0,n[k]=b,r[k]=h,t=0,b=[]);this._length=h;this._lengths=r;this._segments=n;this._l1=this._li=this._s1=this._si=0;this._l2=this._lengths[0];this._curSeg=this._segments[0]; +this._s2=this._curSeg[0];this._prec=1/this._curSeg.length}if(b=this._autoRotate){b[0]instanceof Array||(this._autoRotate=b=[b]);for(l=b.length;-1<--l;)for(C=0;3>C;C++)s=b[l][C],this._func[s]="function"===typeof a[s]?a[s.indexOf("set")||"function"!==typeof a["get"+s.substr(3)]?s:"get"+s.substr(3)]:!1}return!0};h.setRatio=function(a){var c=this._segCount,b=this._func,d=this._target,h,g,l,k,n;if(this._timeRes){h=this._lengths;k=this._curSeg;a*=this._length;g=this._li;if(a>this._l2&&g=a;);0===g&&athis._s2&&g= +a;);0===g&&aa?0:1<=a?c-1:c*a>>0,k=(a-h*(1/c))*c;c=1-k;for(g=this._props.length;-1<--g;)if(a=this._props[g],l=this._beziers[a][h],n=(k*k*l.da+3*c*(k*l.ca+c*l.ba))*k+l.a,this._round[a]&&(n=n+(0>0),b[a])d[a](n);else d[a]=n;if(this._autoRotate){var c=this._autoRotate,r,t,A,y,j;for(g=c.length;-1<--g;)a=c[g][2],y=c[g][3]||0,j=!0===c[g][4]?1:q,l=this._beziers[c[g][0]][h],n=this._beziers[c[g][1]][h], +r=l.a+(l.b-l.a)*k,t=l.b+(l.c-l.b)*k,r+=(t-r)*k,t+=(l.c+(l.d-l.c)*k-t)*k,l=n.a+(n.b-n.a)*k,A=n.b+(n.c-n.b)*k,l+=(A-l)*k,A+=(n.c+(n.d-n.c)*k-A)*k,n=Math.atan2(A-l,t-r)*j+y,b[a]?b[a].call(d,n):d[a]=n}};h._roundProps=function(a,c){for(var b=this._overwriteProps,d=b.length;-1<--d;)if(a[b[d]]||a.bezier||a.bezierThrough)this._round[b[d]]=c};h._kill=function(a){var c=this._props,b,d;for(b in this._beziers)if(b in a){delete this._beziers[b];delete this._func[b];for(d=c.length;-1<--d;)c[d]===b&&c.splice(d, +1)}return r.prototype._kill.call(this,a)};r.activate([k]);return k},!0);_gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(r){var k=function(){r.call(this,"css");this._overwriteProps.length=0},h,q,l,b,t={},c=k.prototype=new r("css");c.constructor=k;k.version=1.667;k.API=2;k.defaultTransformPerspective=0;c="px";k.suffixMap={top:c,right:c,bottom:c,left:c,width:c,height:c,fontSize:c,padding:c,margin:c,perspective:c};var a=/(?:\d|\-\d|\.\d|\-\.\d)+/g,g=/(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g, +d=/(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi,A=/[^\d\-\.]/g,f=/(?:\d|\-|\+|=|#|\.)*/g,u=/opacity *= *([^)]*)/,X=/opacity:([^;]*)/,Q=/alpha\(opacity *=.+?\)/i,v=/([A-Z])/g,E=/-([a-z])/gi,s=/(^(?:url\(\"|url\())|(?:(\"\))$|\)$)/gi,C=function(a,e){return e.toUpperCase()},n=/(?:Left|Right|Width)/i,T=/(M11|M12|M21|M22)=[\d\-\.e]+/gi,L=/progid\:DXImageTransform\.Microsoft\.Matrix\(.+?\)/i,J=Math.PI/180,y=180/Math.PI,j={},B=document,x=B.createElement("div"),G=B.createElement("img"),z=k._internals= +{_specialProps:t},w=navigator.userAgent,R,e,m,p,F,I,D,aa=w.indexOf("Android"),Y=B.createElement("div");F=(m=-1!==w.indexOf("Safari")&&-1===w.indexOf("Chrome")&&(-1===aa||3Number(w.substr(w.indexOf("Version/")+8,1));p=-1!==w.indexOf("Firefox");/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(w);I=parseFloat(RegExp.$1);Y.innerHTML="a";D=(w=Y.getElementsByTagName("a")[0])?/^0.55/.test(w.style.opacity):!1;var la=function(a){return u.test("string"=== +typeof a?a:(a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100:1},ma="",ga="",ba=function(a,e){e=e||x;var c=e.style,b,d;if(void 0!==c[a])return a;a=a.charAt(0).toUpperCase()+a.substr(1);b=["O","Moz","ms","Ms","Webkit"];for(d=5;-1<--d&&void 0===c[b[d]+a];);return 0<=d?(ga=3===d?"ms":b[d],ma="-"+ga.toLowerCase()+"-",ga+a):null},ca=B.defaultView?B.defaultView.getComputedStyle:function(){},M=k.getStyle=function(a,e,c,b,d){var j;if(!D&&"opacity"===e)return la(a);!b&&a.style[e]? +j=a.style[e]:(c=c||ca(a,null))?j=(a=c.getPropertyValue(e.replace(v,"-$1").toLowerCase()))||c.length?a:c[e]:a.currentStyle&&(c=a.currentStyle,j=c[e]);return null!=d&&(!j||"none"===j||"auto"===j||"auto auto"===j)?d:j},ea=function(a,e,c){var b={},d=a._gsOverwrittenClassNamePT,j;if(d&&!c){for(;d;)d.setRatio(0),d=d._next;a._gsOverwrittenClassNamePT=null}if(e=e||ca(a,null))if(j=e.length)for(;-1<--j;)b[e[j].replace(E,C)]=e.getPropertyValue(e[j]);else for(j in e)b[j]=e[j];else if(e=a.currentStyle||a.style)for(j in e)b[j.replace(E, +C)]=e[j];D||(b.opacity=la(a));a=da(a,e,!1);b.rotation=a.rotation*y;b.skewX=a.skewX*y;b.scaleX=a.scaleX;b.scaleY=a.scaleY;b.x=a.x;b.y=a.y;U&&(b.z=a.z,b.rotationX=a.rotationX*y,b.rotationY=a.rotationY*y,b.scaleZ=a.scaleZ);b.filters&&delete b.filters;return b},na=function(a,e,c,b){var d={};a=a.style;var j,H,p;for(H in c)if("cssText"!==H&&"length"!==H&&isNaN(H)&&e[H]!==(j=c[H]))if(-1===H.indexOf("Origin")&&("number"===typeof j||"string"===typeof j))d[H]=(""===j||"auto"===j||"none"===j)&&"string"===typeof e[H]&& +""!==e[H].replace(A,"")?0:j,void 0!==a[H]&&(p=new ha(a,H,a[H],p));if(b)for(H in b)"className"!==H&&(d[H]=b[H]);return{difs:d,firstMPT:p}},ta={width:["Left","Right"],height:["Top","Bottom"]},ua=["marginLeft","marginRight","marginTop","marginBottom"],S=function(a,e,c,b,d){if("px"===b||!b)return c;if("auto"===b||!c)return 0;var j=n.test(e),H=a,p=x.style,m=0>c;m&&(c=-c);"%"===b&&-1!==e.indexOf("border")?j=c/100*(j?a.clientWidth:a.clientHeight):(p.cssText="border-style:solid; border-width:0; position:absolute; line-height:0;", +"%"===b||"em"===b||!H.appendChild?(H=a.parentNode||B.body,p[j?"width":"height"]=c+b):p[j?"borderLeftWidth":"borderTopWidth"]=c+b,H.appendChild(x),j=parseFloat(x[j?"offsetWidth":"offsetHeight"]),H.removeChild(x),0===j&&!d&&(j=S(a,e,c,b,!0)));return m?-j:j},ia=function(a,e){if(null==a||""===a||"auto"===a||"auto auto"===a)a="0 0";var c=a.split(" "),b=-1!==a.indexOf("left")?"0%":-1!==a.indexOf("right")?"100%":c[0],d=-1!==a.indexOf("top")?"0%":-1!==a.indexOf("bottom")?"100%":c[1];null==d?d="0":"center"=== +d&&(d="50%");if("center"===b||isNaN(parseFloat(b)))b="50%";e&&(e.oxp=-1!==b.indexOf("%"),e.oyp=-1!==d.indexOf("%"),e.oxr="="===b.charAt(1),e.oyr="="===d.charAt(1),e.ox=parseFloat(b.replace(A,"")),e.oy=parseFloat(d.replace(A,"")));return b+" "+d+(2c?2:-2));return e+c},$={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255, +255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ka=function(e){if(!e||""===e)return $.black;if($[e])return $[e];if("number"===typeof e)return[e>>16,e>>8&255,e&255];if("#"===e.charAt(0)){if(4===e.length){var c=e.charAt(1),b=e.charAt(2);e=e.charAt(3);e="#"+c+c+b+b+e+e}e=parseInt(e.substr(1),16);return[e>>16,e>>8&255,e&255]}e=e.match(a)||$.transparent;e[0]=Number(e[0]);e[1]=Number(e[1]);e[2]= +Number(e[2]);3c--)for(;++c>0]:p[c];return m+a.join(g)+g+e+H}:function(a){"number"===typeof a&&(a+=f);a=a.match(d)||[];var e=a.length;if(h>e--)for(;++e>0]:p[e];return m+a.join(g)+H}},w=function(a){a=a.split(",");return function(e,c,b,d,j,p,m){c=(c+"").split(" ");m={};for(b=0;4>b;b++)m[a[b]]=c[b]=c[b]||c[(b-1)/2>>0];return d.parse(e,m,j,p)}};z._setPluginRatio=function(a){this.plugin.setRatio(a);for(var e=this.data,c=e.proxy,b=e.firstMPT,d;b;)d=c[b.v], +b.r?d=0>0:d-0.5>>0:1E-6>d&&-1E-6=b.type&&(h=b.p,g[h]=b.s+b.c,m[h]=b.s,p||(l=new ha(b,"s",h,l,b.r),b.c=0),1===b.type))for(c=b.l;0<--c;)f="xn"+c,h=b.p+"_"+f,g[h]=b.data[f],m[h]=b[f],p||(l=new ha(b,f,h,l,b.rxp[f]));b=b._next}return{proxy:m,end:g,firstMPT:l,pt:a}};var N=z.CSSPropTween=function(a,e,c,d,j,p,H,m,g,f,l){this.t=a;this.p=e;this.s=c;this.c=d;this.n=H||"css_"+e;a instanceof N||b.push(this.n);this.r=m;this.type=p||0;g&&(this.pr=g,h=!0); +this.b=void 0===f?c:f;this.e=void 0===l?c+d:l;j&&(this._next=j,j._prev=this)},fa=k.parseComplex=function(e,c,b,d,j,p,m,h,f,l){m=new N(e,c,0,0,m,l?2:1,null,!1,h,b,d);e=b.split(", ").join(",").split(" ");c=(d+"").split(", ").join(",").split(" ");b=e.length;h=!1!==R;var k,q,n,F,I;b!==c.length&&(e=(p||"").split(" "),b=e.length);m.plugin=f;m.setRatio=l;for(p=0;pf.length?1:f[3],m.appendXtra("",f,(4>k.length?1:k[3])-f,")",!1)));else if(l=f.match(a)){n=k.match(g);if(!n||n.length!==l.length)return m;for(k=q=0;kb.scaleX,m=U?parseFloat(M(a,sa,e,!1,"0 0 0").split(" ")[2])||b.zOrigin||0:0,j,p,f,g,h,l,q,n;P?j=M(a,va,e,!0):a.currentStyle&&(j=(j=a.currentStyle.filter.match(T))&&4===j.length?j[0].substr(4)+","+Number(j[2].substr(4))+","+Number(j[1].substr(4))+","+j[3].substr(4)+","+(b?b.x:0)+","+(b?b.y:0):null);p=(j||"").match(/(?:\-|\b)[\d\-\.e]+\b/gi)||[];for(e=p.length;-1<--e;)j=Number(p[e]), +p[e]=(1E5*j+(0>j?-0.5:0.5)>>0)/1E5;if(16===p.length){if(d=p[8],j=p[9],h=p[10],l=p[12],q=p[13],n=p[14],b.zOrigin&&(n=-b.zOrigin,l=d*n-p[12],q=j*n-p[13],n=h*n+b.zOrigin-p[14]),!c||l!==b.x||q!==b.y||n!==b.z){var F=p[0],I=p[1],t=p[2],r=p[3],u=p[4],D=p[5],s=p[6],x=p[7];p=p[11];var w=-Math.PI+1E-4,Y=Math.PI-1E-4,v=b.rotationX=Math.atan2(s,h),aa=vY,y,A,B,z;v&&(B=Math.cos(-v),z=Math.sin(-v),v=u*B+d*z,y=D*B+j*z,A=s*B+h*z,d=u*-z+d*B,j=D*-z+j*B,h=s*-z+h*B,p=x*-z+p*B,u=v,D=y,s=A);if(v=b.rotationY=Math.atan2(d, +F))f=vY,B=Math.cos(-v),z=Math.sin(-v),y=I*B-j*z,A=t*B-h*z,j=I*z+j*B,h=t*z+h*B,p=r*z+p*B,F=F*B-d*z,I=y,t=A;if(v=b.rotation=Math.atan2(I,D))g=vY,B=Math.cos(-v),z=Math.sin(-v),F=F*B+u*z,y=I*B+D*z,D=I*-z+D*B,s=t*-z+s*B,I=y;g&&aa?b.rotation=b.rotationX=0:g&&f?b.rotation=b.rotationY=0:f&&aa&&(b.rotationY=b.rotationX=0);b.scaleX=(1E5*Math.sqrt(F*F+I*I)+0.5>>0)/1E5;b.scaleY=(1E5*Math.sqrt(D*D+j*j)+0.5>>0)/1E5;b.scaleZ=(1E5*Math.sqrt(s*s+h*h)+0.5>>0)/1E5;b.skewX=0;b.perspective=p?1/p:0;b.x=l;b.y= +q;b.z=n}}else if(!U||0===p.length||b.x!==p[4]||b.y!==p[5]||!b.rotationX&&!b.rotationY){j=(f=6<=p.length)?p[0]:1;l=p[1]||0;h=p[2]||0;q=f?p[3]:1;b.x=p[4]||0;b.y=p[5]||0;f=Math.sqrt(j*j+l*l);g=Math.sqrt(q*q+h*h);j=j||l?Math.atan2(l,j):b.rotation||0;h=h||q?Math.atan2(h,q)+j:b.skewX||0;l=f-Math.abs(b.scaleX||0);q=g-Math.abs(b.scaleY||0);Math.abs(h)>Math.PI/2&&Math.abs(h)<1.5*Math.PI&&(d?(f*=-1,h+=0>=j?Math.PI:-Math.PI,j+=0>=j?Math.PI:-Math.PI):(g*=-1,h+=0>=h?Math.PI:-Math.PI));d=(j-b.rotation)%Math.PI; +n=(h-b.skewX)%Math.PI;if(void 0===b.skewX||1E-6l||1E-6q||1E-6d||1E-6n)b.scaleX=f,b.scaleY=g,b.rotation=j,b.skewX=h;U&&(b.rotationX=b.rotationY=b.z=0,b.perspective=parseFloat(k.defaultTransformPerspective)||0,b.scaleZ=1)}b.zOrigin=m;for(e in b)1E-6>b[e]&&-1E-6>0)/1E5,b=(1E5*Math.sin(b)*e.scaleX>>0)/1E5,j=(1E5*Math.sin(c)*-e.scaleY>> +0)/1E5,c=(1E5*Math.cos(c)*e.scaleY>>0)/1E5,p=this.t.style,m=this.t.currentStyle,h,g;if(m){g=b;b=-j;j=-g;h=m.filter;p.filter="";var l=this.t.offsetWidth;g=this.t.offsetHeight;var k="absolute"!==m.position,q="progid:DXImageTransform.Microsoft.Matrix(M11="+d+", M12="+b+", M21="+j+", M22="+c,n=e.x,F=e.y,t,D;null!=e.ox&&(t=(e.oxp?0.01*l*e.ox:e.ox)-l/2,D=(e.oyp?0.01*g*e.oy:e.oy)-g/2,n+=t-(t*d+D*b),F+=D-(t*j+D*c));if(k)t=l/2,D=g/2,q+=", Dx="+(t-(t*d+D*b)+n)+", Dy="+(D-(t*j+D*c)+F)+")";else{var r=8>I?1:-1; +t=e.ieOffsetX||0;D=e.ieOffsetY||0;e.ieOffsetX=Math.round((l-((0>d?-d:d)*l+(0>b?-b:b)*g))/2+n);e.ieOffsetY=Math.round((g-((0>c?-c:c)*g+(0>j?-j:j)*l))/2+F);for(O=0;4>O;O++)l=ua[O],g=m[l],g=-1!==g.indexOf("px")?parseFloat(g):S(this.t,l,parseFloat(g),g.replace(f,""))||0,n=g!==e[l]?2>O?-e.ieOffsetX:-e.ieOffsetY:2>O?t-e.ieOffsetX:D-e.ieOffsetY,p[l]=(e[l]=Math.round(g-n*(0===O||2===O?1:r)))+"px";q+=", sizingMethod='auto expand')"}p.filter=-1!==h.indexOf("DXImageTransform.Microsoft.Matrix(")?h.replace(L, +q):q+" "+h;if(0===a||1===a)if(1===d&&0===b&&0===j&&1===c&&(!k||-1!==q.indexOf("Dx=0, Dy=0")))(!u.test(h)||100===parseFloat(RegExp.$1))&&-1===h.indexOf("gradient(")&&p.removeAttribute("filter")}},xa=function(){var a=this.data,e=this.t.style,b=a.perspective,c=a.scaleX,d=0,j=0,m=0,g=0,h=a.scaleY,f=0,l=0,q=0,k=0,n=a.scaleZ,F=0,I=0,t=0,D=b?-1/b:0,r=a.rotation,u=a.zOrigin,s,v,w,x,B;p&&(v=e.top+"",s=parseFloat(v)||0,v=v.substr((s+"").length),a._ffFix=!a._ffFix,e.top=(a._ffFix?s+0.05:s-0.05)+(""===v?"px": +v));r&&(s=Math.cos(r),r=Math.sin(r),w=h*r,d=c*-r,h*=s,c*=s,g=w);if(r=a.rotationY)s=Math.cos(r),r=Math.sin(r),x=n*-r,B=D*-r,j=c*r,f=g*r,n*=s,D*=s,c*=s,g*=s,q=x,I=B;if(r=a.rotationX)s=Math.cos(r),r=Math.sin(r),v=d*s+j*r,w=h*s+f*r,x=k*s+n*r,B=t*s+D*r,j=d*-r+j*s,f=h*-r+f*s,n=k*-r+n*s,D=t*-r+D*s,d=v,h=w,k=x,t=B;u&&(F-=u,m=j*F,l=f*F,F=n*F+u);m+=a.x;l+=a.y;F=(1E5*(F+a.z)>>0)/1E5;e[P]="matrix3d("+(1E5*c>>0)/1E5+","+(1E5*g>>0)/1E5+","+(1E5*q>>0)/1E5+","+(1E5*I>>0)/1E5+","+(1E5*d>>0)/1E5+","+(1E5*h>>0)/1E5+ +","+(1E5*k>>0)/1E5+","+(1E5*t>>0)/1E5+","+(1E5*j>>0)/1E5+","+(1E5*f>>0)/1E5+","+(1E5*n>>0)/1E5+","+(1E5*D>>0)/1E5+","+(1E5*m>>0)/1E5+","+(1E5*l>>0)/1E5+","+F+","+(b?1+-F/b:1)+")"},ya=function(){var a=this.data;if(!a.rotation&&!a.skewX)this.t.style[P]="matrix("+a.scaleX+",0,0,"+a.scaleY+","+a.x+","+a.y+")";else{var e=a.rotation,b=e-a.skewX,c=(1E5*Math.cos(e)*a.scaleX>>0)/1E5,e=(1E5*Math.sin(e)*a.scaleX>>0)/1E5,d=(1E5*Math.sin(b)*-a.scaleY>>0)/1E5,b=(1E5*Math.cos(b)*a.scaleY>>0)/1E5;this.t.style[P]= +"matrix("+c+","+e+","+d+","+b+","+a.x+","+a.y+")"}};K("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective",null,function(a,e,b,c,d,p,m){if(c._transform)return d;e=c._transform=da(a,l,!0);var g=a.style,h=ra.length,f,q,k,n,F;if("string"===typeof m.transform&&P)q=g[P],g[P]=m.transform,f=da(a,null,!1),g[P]=q;else if("object"===typeof m){q=null!=m.rotation?m.rotation: +null!=m.rotationZ?m.rotationZ:e.rotation*y;f={scaleX:V(null!=m.scaleX?m.scaleX:m.scale,e.scaleX),scaleY:V(null!=m.scaleY?m.scaleY:m.scale,e.scaleY),scaleZ:V(null!=m.scaleZ?m.scaleZ:m.scale,e.scaleZ),x:V(m.x,e.x),y:V(m.y,e.y),z:V(m.z,e.z),perspective:V(m.transformPerspective,e.perspective)};f.rotation=null!=m.shortRotation||null!=m.shortRotationZ?ja(m.shortRotation||m.shortRotationZ||0,e.rotation):"number"===typeof q?q*J:Z(q,e.rotation);U&&(f.rotationX=null!=m.shortRotationX?ja(m.shortRotationX,e.rotationX): +"number"===typeof m.rotationX?m.rotationX*J:Z(m.rotationX,e.rotationX),f.rotationY=null!=m.shortRotationY?ja(m.shortRotationY,e.rotationY):"number"===typeof m.rotationY?m.rotationY*J:Z(m.rotationY,e.rotationY),1E-6>f.rotationX&&-1E-6f.rotationY&&-1E-6f.skewY&&-1E-6f.skewX&&-1E-6f.rotation&&-1E-6k||null!=j[b])F=!0,d=new N(e,b,e[b],k,d),d.xs0=0,d.plugin=p,c._overwriteProps.push(d.n);if((k=m.transformOrigin)||U&&n&&e.zOrigin)P?(F=!0,k=(k||M(a,b,l,!1,"50% 50%"))+"",b=sa,d=new N(g,b,0,0,d, +-1,"css_transformOrigin"),d.b=g[b],d.plugin=p,U?(q=e.zOrigin,k=k.split(" "),e.zOrigin=(2n?1:0))||""):(n=parseFloat(h),D=h.substr((n+"").length)),""=== +D&&(D=q[b]||s),D!==s&&(g=S(a,"borderLeft",k,s),k=S(a,"borderTop",k,s),"%"===D?(g=100*(g/F)+"%",f=100*(k/r)+"%"):"em"===D?(s=S(a,"borderLeft",1,"em"),g=g/s+"em",f=k/s+"em"):(g+="px",f=k+"px"),I&&(h=parseFloat(g)+n+D,p=parseFloat(f)+n+D)),d=fa(m,c[j],g+" "+f,h+" "+p,!1,"0px",d);return d},!0,!1,pa("0px 0px 0px 0px",!1,!0));K("backgroundPosition","0 0",function(a,e,b,c,d,j){b=l||ca(a,null);b=this.format((b?I?b.getPropertyValue("background-position-x")+" "+b.getPropertyValue("background-position-y"):b.getPropertyValue("background-position"): +a.currentStyle.backgroundPositionX+" "+a.currentStyle.backgroundPositionY)||"0 0");e=this.format(e);var m,p,f,g;if(-1!==b.indexOf("%")!==(-1!==e.indexOf("%"))){c=b.split(" ");m=e.split(" ");G.setAttribute("src",M(a,"backgroundImage").replace(s,""));for(p=2;-1<--p;)b=c[p],f=-1!==b.indexOf("%"),f!==(-1!==m[p].indexOf("%"))&&(g=0===p?a.offsetWidth-G.width:a.offsetHeight-G.height,c[p]=f?parseFloat(b)/100*g+"px":100*(parseFloat(b)/g)+"%");b=c.join(" ")}return this.parseComplex(a.style,b,e,d,j)},!1,!1, +ia);K("backgroundSize","0 0",null,!1,!1,ia);K("perspective","0px",null,!0);K("perspectiveOrigin","50% 50%",null,!0);K("transformStyle","preserve-3d",null,!0);K("backfaceVisibility","visible",null,!0);K("margin",null,w("marginTop,marginRight,marginBottom,marginLeft"));K("padding",null,w("paddingTop,paddingRight,paddingBottom,paddingLeft"));K("clip","rect(0px,0px,0px,0px)");K("textShadow","0px 0px 0px #999",null,!1,!0);K("autoRound",null,function(a,e,b,c,d){return d});K("border","0px solid #000",function(a, +e,b,c,d,j){return this.parseComplex(a.style,this.format(M(a,"borderTopWidth",l,!1,"0px")+" "+M(a,"borderTopStyle",l,!1,"solid")+" "+M(a,"borderTopColor",l,!1,"#000")),this.format(e),d,j)},!1,!0,function(a){var e=a.split(" ");return e[0]+" "+(e[1]||"solid")+" "+(a.match(W)||["#000"])[0]});var za=function(a){var e=this.t,b=e.filter;a=this.s+this.c*a>>0;var c;100===a&&(-1===b.indexOf("atrix(")&&-1===b.indexOf("radient(")?(e.removeAttribute("filter"),c=!M(this.data,"filter")):(e.filter=b.replace(Q,""), +c=!0));c||(this.xn1&&(e.filter=b=b||"alpha(opacity=100)"),e.filter=-1===b.indexOf("opacity")?e.filter+(" alpha(opacity="+a+")"):b.replace(u,"opacity="+a))};K("opacity,alpha,autoAlpha","1",function(a,e,b,c,d,j){var m=parseFloat(M(a,"opacity",l,!1,"1")),p=a.style,f;e=parseFloat(e);"autoAlpha"===b&&(f=M(a,"visibility",l),1===m&&("hidden"===f&&0!==e)&&(m=0),d=new N(p,"visibility",0,0,d,-1,null,!1,0,0!==m?"visible":"hidden",0===e?"hidden":"visible"),d.xs0="visible",c._overwriteProps.push(d.n));D?d=new N(p, +"opacity",m,e-m,d):(d=new N(p,"opacity",100*m,100*(e-m),d),d.xn1="autoAlpha"===b?1:0,p.zoom=1,d.type=2,d.b="alpha(opacity="+d.s+")",d.e="alpha(opacity="+(d.s+d.c)+")",d.data=a,d.plugin=j,d.setRatio=za);return d});var Aa=function(a){if(1===a||0===a){this.t.className=1===a?this.e:this.b;a=this.data;for(var e=this.t.style,b=e.removeProperty?"removeProperty":"removeAttribute";a;){if(a.v)e[a.p]=a.v;else e[b](a.p.replace(v,"-$1").toLowerCase());a=a._next}}else this.t.className!==this.b&&(this.t.className= +this.b)};K("className",null,function(a,e,b,c,d,m,j){var p=a.className,f=a.style.cssText;d=c._classNamePT=new N(a,b,0,0,d,2);d.setRatio=Aa;d.b=p;d.e="="!==e.charAt(1)?e:"+"===e.charAt(0)?p+" "+e.substr(2):p.split(e.substr(2)).join("");c._tween._duration&&(e=ea(a,l,!0),a.className=d.e,j=na(a,e,ea(a),j),a.className=p,d.data=j.firstMPT,a.style.cssText=f,d=d.xfirst=c.parse(a,j.difs,d,m));return d});c=["bezier","throwProps","physicsProps","physics2D"];for(O=c.length;O--;)z(c[O]);c=k.prototype;c._firstPT= +null;c._onInitTween=function(a,c,d){if(!a.nodeType)return!1;this._target=a;this._tween=d;this._vars=c;R=c.autoRound;h=!1;q=c.suffixMap||k.suffixMap;l=ca(a,"");b=this._overwriteProps;d=a.style;var j,p,f,g;if(e&&""===d.zIndex&&(j=M(a,"zIndex",l),"auto"===j||""===j))d.zIndex=0;"string"===typeof c&&(p=d.cssText,j=ea(a,l),d.cssText=p+";"+c,j=na(a,j,ea(a)).difs,!D&&X.test(c)&&(j.opacity=parseFloat(RegExp.$1)),c=j,d.cssText=p);this._firstPT=c=this.parse(a,c,null);if(this._transformType){j=3===this._transformType; +if(P){if(m){e=!0;if(""===d.zIndex&&(g=M(a,"zIndex",l),"auto"===g||""===g))d.zIndex=0;F&&(d.WebkitBackfaceVisibility=this._vars.WebkitBackfaceVisibility||(j?"visible":"hidden"))}}else d.zoom=1;for(d=c;d&&d._next;)d=d._next;g=new N(a,"transform",0,0,null,2);this._linkCSSP(g,null,d);g.setRatio=j&&U?xa:P?ya:wa;g.data=this._transform||da(a,l,!0);b.pop()}if(h){for(;c;){a=c._next;for(d=p;d&&d.pr>c.pr;)d=d._next;(c._prev=d?d._prev:f)?c._prev._next=c:p=c;(c._next=d)?d._prev=c:f=c;c=a}this._firstPT=p}return!0}; +c.parse=function(a,e,b,c){var d=a.style,j,m,p,f,g,h,k,n;for(j in e){g=e[j];if(m=t[j])b=m.parse(a,g,j,this,b,c,e);else if(m=M(a,j,l)+"",k="string"===typeof g,"color"===j||"fill"===j||"stroke"===j||-1!==j.indexOf("Color")||k&&!g.indexOf("rgb"))k||(g=ka(g),g=(3f?1:0))||""):(f=parseFloat(g),k=k?g.substr((f+"").length)||"":"");""===k&&(k=q[j]||h);g=f||0===f?(n?f+p:f)+k:e[j];if(h!== +k&&""!==k&&(f||0===f))if(p||0===p)if(p=S(a,j,p,h),"%"===k?(p/=S(a,j,100,"%")/100,100>0:b-0.5>>0:1E-6>b&&-1E-6(a*=2)?0.5*a*a*((this._p2+1)*a-this._p2):0.5*((a-=2)*a*((this._p2+1)*a+this._p2)+2)}),t=h("BounceOut",function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}),c=h("BounceIn",function(a){return(a=1-a)<1/2.75?1-7.5625*a*a:a<2/2.75?1-(7.5625*(a-=1.5/2.75)*a+0.75):a<2.5/2.75? +1-(7.5625*(a-=2.25/2.75)*a+0.9375):1-(7.5625*(a-=2.625/2.75)*a+0.984375)}),a=h("BounceInOut",function(a){var b=0.5>a;a=b?1-2*a:2*a-1;a=a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375;return b?0.5*(1-a):0.5*a+0.5}),g=h("CircOut",function(a){return Math.sqrt(1-(a-=1)*a)}),d=h("CircIn",function(a){return-(Math.sqrt(1-a*a)-1)}),A=h("CircInOut",function(a){return 1>(a*=2)?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-= +2)*a)+1)}),f=2*Math.PI,u=function(a,b,c){var d=k("easing."+a,function(a,b){this._p1=a||1;this._p2=b||c;this._p3=this._p2/f*(Math.asin(1/this._p1)||0)},!0);a=d.prototype=new r;a.constructor=d;a.getRatio=b;a.config=function(a,b){return new d(a,b)};return d},X=u("ElasticOut",function(a){return this._p1*Math.pow(2,-10*a)*Math.sin((a-this._p3)*f/this._p2)+1},0.3),Q=u("ElasticIn",function(a){return-(this._p1*Math.pow(2,10*(a-=1))*Math.sin((a-this._p3)*f/this._p2))},0.3),u=u("ElasticInOut",function(a){return 1> +(a*=2)?-0.5*this._p1*Math.pow(2,10*(a-=1))*Math.sin((a-this._p3)*f/this._p2):0.5*this._p1*Math.pow(2,-10*(a-=1))*Math.sin((a-this._p3)*f/this._p2)+1},0.45),v=h("ExpoOut",function(a){return 1-Math.pow(2,-10*a)}),E=h("ExpoIn",function(a){return Math.pow(2,10*(a-1))-0.001}),s=h("ExpoInOut",function(a){return 1>(a*=2)?0.5*Math.pow(2,10*(a-1)):0.5*(2-Math.pow(2,-10*(a-1)))}),C=Math.PI/2,n=h("SineOut",function(a){return Math.sin(a*C)}),T=h("SineIn",function(a){return-Math.cos(a*C)+1}),h=h("SineInOut",function(a){return-0.5* +(Math.cos(Math.PI*a)-1)}),L=k("easing.SlowMo",function(a,b,c){null==a?a=0.7:1this._p3?this._calcEnd?1-(a=(a-this._p3)/this._p1)*a:b+(a-b)*(a=(a-this._p3)/this._p1)*a*a*a:this._calcEnd?1:b};L.ease=new L(0.7,0.7);J.config= +L.config=function(a,b,c){return new L(a,b,c)};var y=k("easing.SteppedEase",function(a){a=a||1;this._p1=1/a;this._p2=a+1},!0),J=y.prototype=new r;J.constructor=y;J.getRatio=function(a){0>a?a=0:1<=a&&(a=0.999999999);return(this._p2*a>>0)*this._p1};J.config=y.config=function(a){return new y(a)};k("easing.Bounce",{easeOut:new t,easeIn:new c,easeInOut:new a},!0);k("easing.Circ",{easeOut:new g,easeIn:new d,easeInOut:new A},!0);k("easing.Elastic",{easeOut:new X,easeIn:new Q,easeInOut:new u},!0);k("easing.Expo", +{easeOut:new v,easeIn:new E,easeInOut:new s},!0);k("easing.Sine",{easeOut:new n,easeIn:new T,easeInOut:new h},!0);return{easeOut:new l,easeIn:new b,easeInOut:new q}},!0)}); +(function(r){var k=function(a){a=a.split(".");var b=r,c;for(c=0;ca?2*a:2*(1-a);1===c?d*=d:2===c?d*=d*d:3===c?d*=d*d*d:4===c&&(d*=d*d*d*d);return 1===b?1-d:2===b?d:0.5>a?d/2:1-d/2};q=["Linear","Quad","Cubic","Quart","Quint"];for(l=q.length;-1<--l;)b=d("easing."+q[l],null,!0),t=d("easing.Power"+l,null,!0),b.easeOut=t.easeOut=new u(null, +null,1,l),b.easeIn=t.easeIn=new u(null,null,2,l),b.easeInOut=t.easeInOut=new u(null,null,3,l);d("easing.Strong",h.easing.Power4,!0);h.easing.Linear.easeNone=h.easing.Linear.easeIn;var X=d("events.EventDispatcher",function(a){this._listeners={};this._eventTarget=a||this});b=X.prototype;b.addEventListener=function(a,b,c,d,f){f=f||0;var g=this._listeners[a],h=0,j;null==g&&(this._listeners[a]=g=[]);for(j=g.length;-1<--j;)a=g[j],a.c===b?g.splice(j,1):0===h&&a.pr=l||!0===a)c.frame++,l=c.time>l?c.time+k-(c.time-l):c.time+k-0.001,l>0||1)}:Q;n();j=h(q)};this.useRAF=function(a){if(!arguments.length)return f;n();f=a;c.fps(g)};c.fps(a);r.setTimeout(function(){f&&!j&&c.useRAF(!1)},1E3)});b=h.Ticker.prototype=new h.events.EventDispatcher;b.constructor=h.Ticker;var s=d("core.Animation",function(a,b){this.vars=b||{};this._duration=this._totalDuration=a||0;this._delay=Number(this.vars.delay)||0;this._timeScale=1;this._active=!0===this.vars.immediateRender; +this.data=this.vars.data;this._reversed=!0===this.vars.reversed;if(x){c||(C.tick(),c=!0);var d=this.vars.useFrames?B:x;d.insert(this,d._time);this.vars.paused&&this.paused(!0)}}),C=s.ticker=new h.Ticker;b=s.prototype;b._dirty=b._gc=b._initted=b._paused=!1;b._totalTime=b._time=0;b._rawPrevTime=-1;b._next=b._last=b._onUpdate=b._timeline=b.timeline=null;b._paused=!1;b.play=function(a,b){arguments.length&&this.seek(a,b);this.reversed(!1);return this.paused(!1)};b.pause=function(a,b){arguments.length&& +this.seek(a,b);return this.paused(!0)};b.resume=function(a,b){arguments.length&&this.seek(a,b);return this.paused(!1)};b.seek=function(a,b){return this.totalTime(Number(a),!1!==b)};b.restart=function(a,b){this.reversed(!1);this.paused(!1);return this.totalTime(a?-this._delay:0,!1!==b)};b.reverse=function(a,b){arguments.length&&this.seek(a||this.totalDuration(),b);this.reversed(!0);return this.paused(!1)};b.render=function(){};b.invalidate=function(){return this};b._enabled=function(a,b){this._gc= +!a;this._active=a&&!this._paused&&0this._duration&&(a=this._duration);return this.totalTime(a,b)};b.totalTime=function(a, +b){if(!arguments.length)return this._totalTime;if(this._timeline){0>a&&(a+=this.totalDuration());if(this._timeline.smoothChildTiming&&(this._dirty&&this.totalDuration(),a>this._totalDuration&&(a=this._totalDuration),this._startTime=(this._paused?this._pauseTime:this._timeline._time)-(!this._reversed?a:this._totalDuration-a)/this._timeScale,this._timeline._dirty||this._uncache(!1),!this._timeline._active))for(var c=this._timeline;c._timeline;)c.totalTime(c._totalTime,!0),c=c._timeline;this._gc&&this._enabled(!0, +!1);this._totalTime!==a&&this.render(a,b,!1)}return this};b.startTime=function(a){if(!arguments.length)return this._startTime;a!==this._startTime&&(this._startTime=a,this.timeline&&this.timeline._sortChildren&&this.timeline.insert(this,a-this._delay));return this};b.timeScale=function(a){if(!arguments.length)return this._timeScale;a=a||1E-6;if(this._timeline&&this._timeline.smoothChildTiming){var b=this._pauseTime||0===this._pauseTime?this._pauseTime:this._timeline._totalTime;this._startTime=b-(b- +this._startTime)*this._timeScale/a}this._timeScale=a;return this._uncache(!1)};b.reversed=function(a){if(!arguments.length)return this._reversed;a!=this._reversed&&(this._reversed=a,this.totalTime(this._totalTime,!0));return this};b.paused=function(a){if(!arguments.length)return this._paused;a!=this._paused&&this._timeline&&(!a&&this._timeline.smoothChildTiming&&(this._startTime+=this._timeline.rawTime()-this._pauseTime,this._uncache(!1)),this._pauseTime=a?this._timeline.rawTime():null,this._paused= +a,this._active=!this._paused&&0d;)c=c._prev;c?(a._next=c._next,c._next=a):(a._next=this._first,this._first=a);a._next?a._next._prev=a:this._last=a;a._prev=c;this._timeline&&this._uncache(!0);return this};b._remove=function(a,b){a.timeline===this&&(b||a._enabled(!1,!0),a.timeline=null,a._prev?a._prev._next=a._next:this._first===a&&(this._first=a._next),a._next?a._next._prev= +a._prev:this._last===a&&(this._last=a._prev),this._timeline&&this._uncache(!0));return this};b.render=function(a,b){var c=this._first,d;for(this._totalTime=this._time=this._rawPrevTime=a;c;){d=c._next;if(c._active||a>=c._startTime&&!c._paused)c._reversed?c.render((!c._dirty?c._totalDuration:c.totalDuration())-(a-c._startTime)*c._timeScale,b,!1):c.render((a-c._startTime)*c._timeScale,b,!1);c=d}};b.rawTime=function(){return this._totalTime};var n=d("TweenLite",function(a,b,c){s.call(this,b,c);if(null== +a)throw"Cannot tween an undefined reference.";this.target=a;this._overwrite=null==this.vars.overwrite?j[n.defaultOverwrite]:"number"===typeof this.vars.overwrite?this.vars.overwrite>>0:j[this.vars.overwrite];if((a instanceof Array||a.jquery)&&"object"===typeof a[0]){this._targets=a.slice(0);this._propLookup=[];this._siblings=[];for(a=0;ak&&((q||!j._initted)&&2E-10>=k-j._startTime||(l[n++]=j));for(g=n;-1<--g;)if(j=l[g],2===d&&j._kill(c,a)&&(h=!0),2!==d||!j._firstPT&&j._initted)j._enabled(!1,!1)&&(h=!0);return h},w=function(a,b,c){for(var d=a._timeline,f=d._timeScale,g=a._startTime;d._timeline;){g+=d._startTime;f*=d._timeScale;if(d._paused)return-100;d=d._timeline}g/=f;return g>b?g-b:c&&g===b||!a._initted&&2E-10> +g-b?1E-10:(g+=a.totalDuration()/a._timeScale/f)>b?0:g-b-1E-10};b._init=function(){this.vars.startAt&&(this.vars.startAt.overwrite=0,this.vars.startAt.immediateRender=!0,n.to(this.target,0,this.vars.startAt));var a,b;this._ease=this.vars.ease instanceof u?this.vars.easeParams instanceof Array?this.vars.ease.config.apply(this.vars.ease,this.vars.easeParams):this.vars.ease:"function"===typeof this.vars.ease?new u(this.vars.ease,this.vars.easeParams):n.defaultEase;this._easeType=this._ease._type;this._easePower= +this._ease._power;this._firstPT=null;if(this._targets)for(a=this._targets.length;-1<--a;){if(this._initProps(this._targets[a],this._propLookup[a]={},this._siblings[a],this._overwrittenProps?this._overwrittenProps[a]:null))b=!0}else b=this._initProps(this.target,this._propLookup,this._siblings,this._overwrittenProps);b&&n._onPluginEvent("_onInitAllProps",this);this._overwrittenProps&&null==this._firstPT&&"function"!==typeof this.target&&this._enabled(!1,!1);if(this.vars.runBackwards)for(a=this._firstPT;a;)a.s+= +a.c,a.c=-a.c,a=a._next;this._onUpdate=this.vars.onUpdate;this._initted=!0};b._initProps=function(a,b,c,d){var f,g,h,j,k,l;if(null==a)return!1;for(f in this.vars){if(y[f]){if("onStartParams"===f||"onUpdateParams"===f||"onCompleteParams"===f||"onReverseCompleteParams"===f||"onRepeatParams"===f)if(k=this.vars[f])for(g=k.length;-1<--g;)"{self}"===k[g]&&(k=this.vars[f]=k.concat(),k[g]=this)}else if(T[f]&&(j=new T[f])._onInitTween(a,this.vars[f],this)){this._firstPT=l={_next:this._firstPT,t:j,p:"setRatio", +s:0,c:1,f:!0,n:f,pg:!0,pr:j._priority};for(g=j._overwriteProps.length;-1<--g;)b[j._overwriteProps[g]]=this._firstPT;if(j._priority||j._onInitAllProps)h=!0;if(j._onDisable||j._onEnable)this._notifyPluginsOfEnabled=!0}else this._firstPT=b[f]=l={_next:this._firstPT,t:a,p:f,f:"function"===typeof a[f],n:f,pg:!1,pr:0},l.s=!l.f?parseFloat(a[f]):a[f.indexOf("set")||"function"!==typeof a["get"+f.substr(3)]?f:"get"+f.substr(3)](),g=this.vars[f],l.c="number"===typeof g?g-l.s:"string"===typeof g&&"="===g.charAt(1)? +parseInt(g.charAt(0)+"1",10)*Number(g.substr(2)):Number(g)||0;l&&l._next&&(l._next._prev=l)}return d&&this._kill(d,a)?this._initProps(a,b,c,d):1=this._duration){if(this._totalTime=this._time=this._duration,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(g=!0,j="onComplete"),0===this._duration){if(0===a|| +0>this._rawPrevTime)this._rawPrevTime!==a&&(c=!0);this._rawPrevTime=a}}else if(0>=a){this._totalTime=this._time=0;this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0;if(0!==d||0===this._duration&&0a?(this._active=!1,0===this._duration&&(0<=this._rawPrevTime&&(c=!0),this._rawPrevTime=a)):this._initted||(c=!0)}else if(this._totalTime=this._time=a,this._easeType){var h=a/this._duration,k=this._easeType,l=this._easePower;if(1===k||3===k&& +0.5<=h)h=1-h;3===k&&(h*=2);1===l?h*=h:2===l?h*=h*h:3===l?h*=h*h*h:4===l&&(h*=h*h*h*h);this.ratio=1===k?1-h:2===k?h:0.5>a/this._duration?h/2:1-h/2}else this.ratio=this._ease.getRatio(a/this._duration);if(this._time!==d||c){this._initted||(this._init(),!g&&this._time&&(this.ratio=this._ease.getRatio(this._time/this._duration)));!this._active&&!this._paused&&(this._active=!0);if(0===d&&this.vars.onStart&&(0!==this._time||0===this._duration))b||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams|| +f);for(a=this._firstPT;a;){if(a.f)a.t[a.p](a.c*this.ratio+a.s);else a.t[a.p]=a.c*this.ratio+a.s;a=a._next}this._onUpdate&&(b||this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||f));j&&!this._gc&&(g&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),b||this.vars[j]&&this.vars[j].apply(this.vars[j+"Scope"]||this,this.vars[j+"Params"]||f))}};b._kill=function(a,b){"all"===a&&(a=null);if(null==a&&(null==b||b===this.target))return this._enabled(!1,!1);b= +b||this._targets||this.target;var c,d,f,g,h,j,k;if((b instanceof Array||b.jquery)&&"object"===typeof b[0])for(c=b.length;-1<--c;)this._kill(a,b[c])&&(h=!0);else{if(this._targets)for(c=this._targets.length;-1<--c;){if(b===this._targets[c]){g=this._propLookup[c]||{};this._overwrittenProps=this._overwrittenProps||[];d=this._overwrittenProps[c]=a?this._overwrittenProps[c]||{}:"all";break}}else{if(b!==this.target)return!1;g=this._propLookup;d=this._overwrittenProps=a?this._overwrittenProps||{}:"all"}if(g)for(f in j= +a||g,k=a!==d&&"all"!==d&&a!==g&&(null==a||!0!==a._tempKill),j){if(c=g[f]){c.pg&&c.t._kill(j)&&(h=!0);if(!c.pg||0===c.t._overwriteProps.length)c._prev?c._prev._next=c._next:c===this._firstPT&&(this._firstPT=c._next),c._next&&(c._next._prev=c._prev),c._next=c._prev=null;delete g[f]}k&&(d[f]=1)}}return h};b.invalidate=function(){this._notifyPluginsOfEnabled&&n._onPluginEvent("_onDisable",this);this._onUpdate=this._overwrittenProps=this._firstPT=null;this._initted=this._active=this._notifyPluginsOfEnabled= +!1;this._propLookup=this._targets?{}:[];return this};b._enabled=function(a,b){if(a&&this._gc)if(this._targets)for(var c=this._targets.length;-1<--c;)this._siblings[c]=G(this._targets[c],this,!0);else this._siblings=G(this.target,this,!0);s.prototype._enabled.call(this,a,b);return this._notifyPluginsOfEnabled&&this._firstPT?n._onPluginEvent(a?"_onEnable":"_onDisable",this):!1};n.to=function(a,b,c){return new n(a,b,c)};n.from=function(a,b,c){c.runBackwards=!0;!1!==c.immediateRender&&(c.immediateRender= +!0);return new n(a,b,c)};n.fromTo=function(a,b,c,d){d.startAt=c;c.immediateRender&&(d.immediateRender=!0);return new n(a,b,d)};n.delayedCall=function(a,b,c,d,f){return new n(b,0,{delay:a,onComplete:b,onCompleteParams:c,onCompleteScope:d,onReverseComplete:b,onReverseCompleteParams:c,onReverseCompleteScope:d,immediateRender:!1,useFrames:f,overwrite:0})};n.set=function(a,b){return new n(a,0,b)};n.killTweensOf=n.killDelayedCallsTo=function(a,b){for(var c=n.getTweensOf(a),d=c.length;-1<--d;)c[d]._kill(b, +a)};n.getTweensOf=function(a){if(null!=a){var b,c,d;if((a instanceof Array||a.jquery)&&"object"===typeof a[0]){b=a.length;for(c=[];-1<--b;)c=c.concat(n.getTweensOf(a[b]));for(b=c.length;-1<--b;){d=c[b];for(a=b;-1<--a;)d===c[a]&&c.splice(b,1)}}else{c=G(a).concat();for(b=c.length;-1<--b;)c[b]._gc&&c.splice(b,1)}return c}};var R=d("plugins.TweenPlugin",function(a,b){this._overwriteProps=(a||"").split(",");this._propName=this._overwriteProps[0];this._priority=b||0},!0);b=R.prototype;R.version=12;R.API= +2;b._firstPT=null;b._addTween=function(a,b,c,d,f,g){var h;if(null!=d&&(h="number"===typeof d||"="!==d.charAt(1)?Number(d)-c:parseInt(d.charAt(0)+"1",10)*Number(d.substr(2))))this._firstPT=a={_next:this._firstPT,t:a,p:b,s:c,c:h,f:"function"===typeof a[b],n:f||b,r:g},a._next&&(a._next._prev=a)};b.setRatio=function(a){for(var b=this._firstPT,c;b;){c=b.c*a+b.s;b.r&&(c=c+(0>0);if(b.f)b.t[b.p](c);else b.t[b.p]=c;b=b._next}};b._kill=function(a){if(null!=a[this._propName])this._overwriteProps= +[];else for(var b=this._overwriteProps.length;-1<--b;)null!=a[this._overwriteProps[b]]&&this._overwriteProps.splice(b,1);for(b=this._firstPT;b;)null!=a[b.n]&&(b._next&&(b._next._prev=b._prev),b._prev?(b._prev._next=b._next,b._prev=null):this._firstPT===b&&(this._firstPT=b._next)),b=b._next;return!1};b._roundProps=function(a,b){for(var c=this._firstPT;c;){if(a[this._propName]||null!=c.n&&a[c.n.split(this._propName+"_").join("")])c.r=b;c=c._next}};n._onPluginEvent=function(a,b){var c=b._firstPT,d;if("_onInitAllProps"=== +a){for(var f,g,h,j;c;){j=c._next;for(f=g;f&&f.pr>c.pr;)f=f._next;(c._prev=f?f._prev:h)?c._prev._next=c:g=c;(c._next=f)?f._prev=c:h=c;c=j}c=b._firstPT=g}for(;c;)c.pg&&"function"===typeof c.t[a]&&c.t[a]()&&(d=!0),c=c._next;return d};R.activate=function(a){for(var b=a.length;-1<--b;)a[b].API===R.API&&(n._plugins[(new a[b])._propName]=a[b]);return!0};if(q=r._gsQueue){for(l=0;l(a*=2)?0.5*a*a*((this._p2+1)*a-this._p2):0.5*((a-=2)*a*((this._p2+1)*a+this._p2)+2)}),p=b("BounceOut",function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}),q=b("BounceIn",function(a){return(a=1-a)<1/2.75?1-7.5625*a*a:a<2/2.75?1-(7.5625*(a-=1.5/2.75)*a+0.75):a<2.5/2.75?1-(7.5625*(a-= 2.25/2.75)*a+0.9375):1-(7.5625*(a-=2.625/2.75)*a+0.984375)}),r=b("BounceInOut",function(a){var b=0.5>a,a=b?1-2*a:2*a-1,a=a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375;return b?0.5*(1-a):0.5*a+0.5}),s=b("CircOut",function(a){return Math.sqrt(1-(a-=1)*a)}),t=b("CircIn",function(a){return-(Math.sqrt(1-a*a)-1)}),u=b("CircInOut",function(a){return 1>(a*=2)?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-=2)*a)+1)}),i= 2*Math.PI,j=function(a,b,e){var d=c("easing."+a,function(a,b){this._p1=a||1;this._p2=b||e;this._p3=this._p2/i*(Math.asin(1/this._p1)||0)},!0),a=d.prototype=new g;a.constructor=d;a.getRatio=b;a.config=function(a,b){return new d(a,b)};return d},v=j("ElasticOut",function(a){return this._p1*Math.pow(2,-10*a)*Math.sin((a-this._p3)*i/this._p2)+1},0.3),w=j("ElasticIn",function(a){return-(this._p1*Math.pow(2,10*(a-=1))*Math.sin((a-this._p3)*i/this._p2))},0.3),j=j("ElasticInOut",function(a){return 1>(a*=2)? -0.5*this._p1*Math.pow(2,10*(a-=1))*Math.sin((a-this._p3)*i/this._p2):0.5*this._p1*Math.pow(2,-10*(a-=1))*Math.sin((a-this._p3)*i/this._p2)+1},0.45),x=b("ExpoOut",function(a){return 1-Math.pow(2,-10*a)}),y=b("ExpoIn",function(a){return Math.pow(2,10*(a-1))-0.001}),z=b("ExpoInOut",function(a){return 1>(a*=2)?0.5*Math.pow(2,10*(a-1)):0.5*(2-Math.pow(2,-10*(a-1)))}),m=Math.PI/2,A=b("SineOut",function(a){return Math.sin(a*m)}),B=b("SineIn",function(a){return-Math.cos(a*m)+1}),b=b("SineInOut",function(a){return-0.5* (Math.cos(Math.PI*a)-1)}),f=c("easing.SlowMo",function(a,b,c){null==a?a=0.7:1this._p3?this._calcEnd?1-(a=(a-this._p3)/this._p1)*a:b+(a-b)*(a=(a-this._p3)/this._p1)*a*a*a:this._calcEnd?1:b};f.ease=new f(0.7,0.7);e.config= f.config=function(a,b,c){return new f(a,b,c)};var k=c("easing.SteppedEase",function(a){a=a||1;this._p1=1/a;this._p2=a+1},!0),e=k.prototype=new g;e.constructor=k;e.getRatio=function(a){0>a?a=0:1<=a&&(a=0.999999999);return(this._p2*a>>0)*this._p1};e.config=k.config=function(a){return new k(a)};c("easing.Bounce",{easeOut:new p,easeIn:new q,easeInOut:new r},!0);c("easing.Circ",{easeOut:new s,easeIn:new t,easeInOut:new u},!0);c("easing.Elastic",{easeOut:new v,easeIn:new w,easeInOut:new j},!0);c("easing.Expo", {easeOut:new x,easeIn:new y,easeInOut:new z},!0);c("easing.Sine",{easeOut:new A,easeIn:new B,easeInOut:new b},!0);return{easeOut:new n,easeIn:new o,easeInOut:new h}},!0)});window._gsDefine&&_gsQueue.pop()(); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/src/minified/plugins/.DS_Store b/duo/js/greensock-v12-js/src/minified/plugins/.DS_Store new file mode 100755 index 0000000..5008ddf Binary files /dev/null and b/duo/js/greensock-v12-js/src/minified/plugins/.DS_Store differ diff --git a/duo/js/greensock-v12-js/src/minified/plugins/BezierPlugin.min.js b/duo/js/greensock-v12-js/src/minified/plugins/BezierPlugin.min.js new file mode 100755 index 0000000..a09ee69 --- /dev/null +++ b/duo/js/greensock-v12-js/src/minified/plugins/BezierPlugin.min.js @@ -0,0 +1,27 @@ +/*! + * VERSION: beta 1.15 + * DATE: 2012-12-14 + * JavaScript (also available in AS3 and AS2) + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +(window._gsQueue||(window._gsQueue=[])).push(function(){_gsDefine("plugins.BezierPlugin",["plugins.TweenPlugin"],function(F){var z=function(){F.call(this,"bezier",-1);this._overwriteProps.pop();this._func={};this._round={}},E=z.prototype=new F("bezier",1),I=180/Math.PI,J=Math.PI/180,A=[],B=[],C=[],G={},D=function(a,c,g,p){this.a=a;this.b=c;this.c=g;this.d=p;this.da=p-a;this.ca=g-a;this.ba=c-a},K=z.bezierThrough=function(a,c,g,p,j,b){var d={},f=[],e,k,q;j="string"===typeof j?","+j+",":",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,"; +null==c&&(c=1);for(k in a[0])f.push(k);A.length=B.length=C.length=0;for(e=f.length;-1<--e;){k=f[e];G[k]=-1!==j.indexOf(","+k+",");q=d;var s=k,n;n=a;var m=k,w=G[k],l=b,t=[],r=void 0,h=void 0,v=void 0,u=void 0,x=void 0,r=void 0;if(l){n=[l].concat(n);for(h=n.length;-1<--h;)if("string"===typeof(r=n[h][m]))"="===r.charAt(1)&&(n[h][m]=l[m]+Number(r.charAt(0)+r.substr(2)))}r=n.length-2;if(0>r)t[0]=new D(n[0][m],0,0,n[-1>r?0:1][m]);else{for(h=0;hq)return e;for(m=0;m<=q;m++)l=c(a,d[m],f,e,k,q!==m),s[m]=l.end;for(w in b)n[w]=b[w];n.values=s;e=new p(a,"bezier",0,0,l.pt,2);e.data=l;e.plugin=k;e.setRatio=g;0===n.autoRotate&&(n.autoRotate=!0);n.autoRotate&&!(n.autoRotate instanceof Array)&&(m=!0===n.autoRotate?0:Number(n.autoRotate)*J,n.autoRotate=null!=l.end.left?[["left","top","rotation",m,!0]]:null!=l.end.x?[["x","y","rotation",m,!0]]:!1); +n.autoRotate&&(f._transform||f._enableTransforms(!1),l.autoRotate=f._target._gsTransform);k._onInitTween(l.proxy,n,f._tween);return e})}};E._onInitTween=function(a,c,g){this._target=a;c instanceof Array&&(c={values:c});this._props=[];this._timeRes=null==c.timeResolution?6:parseInt(c.timeResolution);var p=c.values||[],j={},b=p[0];g=c.autoRotate||g.vars.orientToBezier;var d,f,e;this._autoRotate=g?g instanceof Array?g:[["x","y","rotation",!0===g?0:Number(g)||0]]:null;for(d in b)this._props.push(d);for(b= +this._props.length;-1<--b;)d=this._props[b],this._overwriteProps.push(d),g=this._func[d]="function"===typeof a[d],j[d]=!g?parseFloat(a[d]):a[d.indexOf("set")||"function"!==typeof a["get"+d.substr(3)]?d:"get"+d.substr(3)](),e||j[d]!==p[0][d]&&(e=j);if("cubic"!==c.type&&"quadratic"!==c.type&&"soft"!==c.type)j=K(p,isNaN(c.curviness)?1:c.curviness,!1,"thruBasic"===c.type,c.correlate,e);else{g=(g=c.type)||"soft";c={};e="cubic"===g?3:2;g="soft"===g;var b=[],k,q,s,n,m,w,l,t,r;g&&j&&(p=[j].concat(p));if(null== +p||p.length>0||6;j=[];q=[];p=s=0;c=d-1;e=[];g=[];for(f in b){k=b[f];m=j;w=d;l=1/w;t=k.length;for(var h=void 0,v=void 0,u=n=r=v=void 0,x=h=void 0,y=void 0,y=u=void 0;-1<--t;){u=k[t];v=u.a;r=u.d-v;n=u.c-v;u=u.b-v;v=0;for(x=1;x<=w;x++)h=l*x,y=1-h,h=v-(v=(h*h*r+3*y*(h*n+y*u))*h),y=t*w+x-1,m[y]=(m[y]||0)+h*h}}b=j.length;for(f=0;f>0,e[k]=g,q[k]=p,s=0,g=[]);this._length=p;this._lengths=q;this._segments=e;this._l1=this._li=this._s1= +this._si=0;this._l2=this._lengths[0];this._curSeg=this._segments[0];this._s2=this._curSeg[0];this._prec=1/this._curSeg.length}if(g=this._autoRotate){g[0]instanceof Array||(this._autoRotate=g=[g]);for(b=g.length;-1<--b;)for(f=0;3>f;f++)d=g[b][f],this._func[d]="function"===typeof a[d]?a[d.indexOf("set")||"function"!==typeof a["get"+d.substr(3)]?d:"get"+d.substr(3)]:!1}return!0};E.setRatio=function(a){var c=this._segCount,g=this._func,p=this._target,j,b,d,f,e;if(this._timeRes){j=this._lengths;f=this._curSeg; +a*=this._length;b=this._li;if(a>this._l2&&b=a;);0===b&&athis._s2&&b=a;);0===b&&aa?0:1<=a?c-1:c*a>>0,f=(a-j*(1/c))*c;c=1-f;for(b=this._props.length;-1<--b;)if(a=this._props[b],d=this._beziers[a][j],e=(f*f*d.da+3*c*(f*d.ca+c*d.ba))*f+d.a,this._round[a]&&(e=e+(0>0),g[a])p[a](e);else p[a]=e;if(this._autoRotate){var c=this._autoRotate,k,q,s,n,m;for(b=c.length;-1<--b;)a=c[b][2],n=c[b][3]|| +0,m=!0===c[b][4]?1:I,d=this._beziers[c[b][0]][j],e=this._beziers[c[b][1]][j],k=d.a+(d.b-d.a)*f,q=d.b+(d.c-d.b)*f,k+=(q-k)*f,q+=(d.c+(d.d-d.c)*f-q)*f,d=e.a+(e.b-e.a)*f,s=e.b+(e.c-e.b)*f,d+=(s-d)*f,s+=(e.c+(e.d-e.c)*f-s)*f,e=Math.atan2(s-d,q-k)*m+n,g[a]?g[a].call(p,e):p[a]=e}};E._roundProps=function(a,c){for(var g=this._overwriteProps,p=g.length;-1<--p;)if(a[g[p]]||a.bezier||a.bezierThrough)this._round[g[p]]=c};E._kill=function(a){var c=this._props,g,p;for(g in this._beziers)if(g in a){delete this._beziers[g]; +delete this._func[g];for(p=c.length;-1<--p;)c[p]===g&&c.splice(p,1)}return F.prototype._kill.call(this,a)};F.activate([z]);return z},!0)});window._gsDefine&&_gsQueue.pop()(); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/src/minified/plugins/CSSPlugin.min.js b/duo/js/greensock-v12-js/src/minified/plugins/CSSPlugin.min.js new file mode 100755 index 0000000..19255b3 --- /dev/null +++ b/duo/js/greensock-v12-js/src/minified/plugins/CSSPlugin.min.js @@ -0,0 +1,65 @@ +/*! + * VERSION: beta 1.667 + * DATE: 2012-12-30 + * JavaScript + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +(window._gsQueue||(window._gsQueue=[])).push(function(){_gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(V){var B=function(){V.call(this,"css");this._overwriteProps.length=0},ba,ca,r,da,L={},m=B.prototype=new V("css");m.constructor=B;B.version=1.667;B.API=2;B.defaultTransformPerspective=0;m="px";B.suffixMap={top:m,right:m,bottom:m,left:m,width:m,height:m,fontSize:m,padding:m,margin:m,perspective:m};var ea=/(?:\d|\-\d|\.\d|\-\.\d)+/g,pa=/(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g, +fa=/(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi,W=/[^\d\-\.]/g,Ha=/(?:\d|\-|\+|=|#|\.)*/g,ga=/opacity *= *([^)]*)/,Ia=/opacity:([^;]*)/,Ja=/alpha\(opacity *=.+?\)/i,qa=/([A-Z])/g,ra=/-([a-z])/gi,Ka=/(^(?:url\(\"|url\())|(?:(\"\))$|\)$)/gi,sa=function(a,b){return b.toUpperCase()},La=/(?:Left|Right|Width)/i,Ma=/(M11|M12|M21|M22)=[\d\-\.e]+/gi,Na=/progid\:DXImageTransform\.Microsoft\.Matrix\(.+?\)/i,E=Math.PI/180,R=180/Math.PI,X={},M=document,S=M.createElement("div"),ha=M.createElement("img"), +N=B._internals={_specialProps:L},A=navigator.userAgent,ia,ta,ua,va,wa,ja,O,xa=A.indexOf("Android"),ya=M.createElement("div");wa=(ua=-1!==A.indexOf("Safari")&&-1===A.indexOf("Chrome")&&(-1===xa||3Number(A.substr(A.indexOf("Version/")+8,1));va=-1!==A.indexOf("Firefox");/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(A);ja=parseFloat(RegExp.$1);ya.innerHTML="a";O=(A=ya.getElementsByTagName("a")[0])?/^0.55/.test(A.style.opacity):!1;var za=function(a){return ga.test("string"=== +typeof a?a:(a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100:1},Aa="",ka="",T=function(a,b){b=b||S;var d=b.style,c,f;if(void 0!==d[a])return a;a=a.charAt(0).toUpperCase()+a.substr(1);c=["O","Moz","ms","Ms","Webkit"];for(f=5;-1<--f&&void 0===d[c[f]+a];);return 0<=f?(ka=3===f?"ms":c[f],Aa="-"+ka.toLowerCase()+"-",ka+a):null},U=M.defaultView?M.defaultView.getComputedStyle:function(){},x=B.getStyle=function(a,b,d,c,f){var j;if(!O&&"opacity"===b)return za(a);!c&&a.style[b]? +j=a.style[b]:(d=d||U(a,null))?j=(a=d.getPropertyValue(b.replace(qa,"-$1").toLowerCase()))||d.length?a:d[b]:a.currentStyle&&(d=a.currentStyle,j=d[b]);return null!=f&&(!j||"none"===j||"auto"===j||"auto auto"===j)?f:j},Z=function(a,b,d){var c={},f=a._gsOverwrittenClassNamePT,j;if(f&&!d){for(;f;)f.setRatio(0),f=f._next;a._gsOverwrittenClassNamePT=null}if(b=b||U(a,null))if(j=b.length)for(;-1<--j;)c[b[j].replace(ra,sa)]=b.getPropertyValue(b[j]);else for(j in b)c[j]=b[j];else if(b=a.currentStyle||a.style)for(j in b)c[j.replace(ra, +sa)]=b[j];O||(c.opacity=za(a));a=Y(a,b,!1);c.rotation=a.rotation*R;c.skewX=a.skewX*R;c.scaleX=a.scaleX;c.scaleY=a.scaleY;c.x=a.x;c.y=a.y;I&&(c.z=a.z,c.rotationX=a.rotationX*R,c.rotationY=a.rotationY*R,c.scaleZ=a.scaleZ);c.filters&&delete c.filters;return c},Ba=function(a,b,d,c){var f={};a=a.style;var j,e,h;for(e in d)if("cssText"!==e&&"length"!==e&&isNaN(e)&&b[e]!==(j=d[e]))if(-1===e.indexOf("Origin")&&("number"===typeof j||"string"===typeof j))f[e]=(""===j||"auto"===j||"none"===j)&&"string"===typeof b[e]&& +""!==b[e].replace(W,"")?0:j,void 0!==a[e]&&(h=new la(a,e,a[e],h));if(c)for(e in c)"className"!==e&&(f[e]=c[e]);return{difs:f,firstMPT:h}},Oa={width:["Left","Right"],height:["Top","Bottom"]},Pa=["marginLeft","marginRight","marginTop","marginBottom"],F=function(a,b,d,c,f){if("px"===c||!c)return d;if("auto"===c||!d)return 0;var j=La.test(b),e=a,h=S.style,k=0>d;k&&(d=-d);"%"===c&&-1!==b.indexOf("border")?j=d/100*(j?a.clientWidth:a.clientHeight):(h.cssText="border-style:solid; border-width:0; position:absolute; line-height:0;", +"%"===c||"em"===c||!e.appendChild?(e=a.parentNode||M.body,h[j?"width":"height"]=d+c):h[j?"borderLeftWidth":"borderTopWidth"]=d+c,e.appendChild(S),j=parseFloat(S[j?"offsetWidth":"offsetHeight"]),e.removeChild(S),0===j&&!f&&(j=F(a,b,d,c,!0)));return k?-j:j},ma=function(a,b){if(null==a||""===a||"auto"===a||"auto auto"===a)a="0 0";var d=a.split(" "),c=-1!==a.indexOf("left")?"0%":-1!==a.indexOf("right")?"100%":d[0],f=-1!==a.indexOf("top")?"0%":-1!==a.indexOf("bottom")?"100%":d[1];null==f?f="0":"center"=== +f&&(f="50%");if("center"===c||isNaN(parseFloat(c)))c="50%";b&&(b.oxp=-1!==c.indexOf("%"),b.oyp=-1!==f.indexOf("%"),b.oxr="="===c.charAt(1),b.oyr="="===f.charAt(1),b.ox=parseFloat(c.replace(W,"")),b.oy=parseFloat(f.replace(W,"")));return c+" "+f+(2d?2:-2));return b+d},Q={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255, +255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},oa=function(a){if(!a||""===a)return Q.black;if(Q[a])return Q[a];if("number"===typeof a)return[a>>16,a>>8&255,a&255];if("#"===a.charAt(0)){if(4===a.length){var b=a.charAt(1),d=a.charAt(2);a=a.charAt(3);a="#"+b+b+d+d+a+a}a=parseInt(a.substr(1),16);return[a>>16,a>>8&255,a&255]}a=a.match(ea)||Q.transparent;a[0]=Number(a[0]);a[1]=Number(a[1]);a[2]= +Number(a[2]);3n--)for(;++n>0]:f[n];return j+a.join(h)+h+b+e}:function(a){"number"===typeof a&&(a+=g);a=a.match(fa)||[];var b=a.length;if(k>b--)for(;++b>0]:f[b];return j+a.join(h)+e}},A=function(a){a=a.split(",");return function(b,d,c,f,j,e,h){d=(d+"").split(" ");h={};for(c=0;4>c;c++)h[a[c]]=d[c]=d[c]||d[(c-1)/2>>0];return f.parse(b,h,j,e)}};N._setPluginRatio=function(a){this.plugin.setRatio(a);for(var b=this.data,d=b.proxy,c=b.firstMPT,f;c;)f=d[c.v], +c.r?f=0>0:f-0.5>>0:1E-6>f&&-1E-6=c.type&&(g=c.p,k[g]=c.s+c.c,h[g]=c.s,j||(p=new la(c,"s",g,p,c.r),c.c=0),1===c.type))for(d=c.l;0<--d;)l="xn"+d,g=c.p+"_"+l,k[g]=c.data[l],h[g]=c[l],j||(p=new la(c,l,g,p,c.rxp[l]));c=c._next}return{proxy:h,end:k,firstMPT:p,pt:a}};var y=N.CSSPropTween=function(a,b,d,c,f,j,e,h,k,g,l){this.t=a;this.p=b;this.s=d;this.c=c;this.n=e||"css_"+b;a instanceof y||da.push(this.n);this.r=h;this.type=j||0;k&&(this.pr=k,ba= +!0);this.b=void 0===g?d:g;this.e=void 0===l?d+c:l;f&&(this._next=f,f._prev=this)},aa=B.parseComplex=function(a,b,d,c,f,j,e,h,k,g){e=new y(a,b,0,0,e,g?2:1,null,!1,h,d,c);a=d.split(", ").join(",").split(" ");b=(c+"").split(", ").join(",").split(" ");d=a.length;h=!1!==ia;var l,p,n,$,m;d!==b.length&&(a=(j||"").split(" "),d=a.length);e.plugin=k;e.setRatio=g;for(j=0;jk.length?1:k[3],e.appendXtra("",k,(4>l.length?1:l[3])-k,")",!1)));else if(g=k.match(ea)){n=l.match(pa);if(!n||n.length!==g.length)return e;for(l=p=0;lc.scaleX,j=I?parseFloat(x(a,Ga,b,!1,"0 0 0").split(" ")[2])||c.zOrigin||0:0,e,h,k,g,l,p,n,m;H?e=x(a,Qa,b,!0):a.currentStyle&&(e=(e=a.currentStyle.filter.match(Ma))&&4===e.length?e[0].substr(4)+","+Number(e[2].substr(4))+","+Number(e[1].substr(4))+","+e[3].substr(4)+","+(c?c.x:0)+","+(c?c.y:0):null);h=(e||"").match(/(?:\-|\b)[\d\-\.e]+\b/gi)||[];for(b=h.length;-1<--b;)e= +Number(h[b]),h[b]=(1E5*e+(0>e?-0.5:0.5)>>0)/1E5;if(16===h.length){if(f=h[8],e=h[9],l=h[10],p=h[12],n=h[13],m=h[14],c.zOrigin&&(m=-c.zOrigin,p=f*m-h[12],n=e*m-h[13],m=l*m+c.zOrigin-h[14]),!d||p!==c.x||n!==c.y||m!==c.z){var K=h[0],s=h[1],w=h[2],q=h[3],t=h[4],r=h[5],u=h[6],y=h[7];h=h[11];var v=-Math.PI+1E-4,A=Math.PI-1E-4,z=c.rotationX=Math.atan2(u,l),F=zA,E,G,C,D;z&&(C=Math.cos(-z),D=Math.sin(-z),z=t*C+f*D,E=r*C+e*D,G=u*C+l*D,f=t*-D+f*C,e=r*-D+e*C,l=u*-D+l*C,h=y*-D+h*C,t=z,r=E,u=G);if(z=c.rotationY= +Math.atan2(f,K))k=zA,C=Math.cos(-z),D=Math.sin(-z),E=s*C-e*D,G=w*C-l*D,e=s*D+e*C,l=w*D+l*C,h=q*D+h*C,K=K*C-f*D,s=E,w=G;if(z=c.rotation=Math.atan2(s,r))g=zA,C=Math.cos(-z),D=Math.sin(-z),K=K*C+t*D,E=s*C+r*D,r=s*-D+r*C,u=w*-D+u*C,s=E;g&&F?c.rotation=c.rotationX=0:g&&k?c.rotation=c.rotationY=0:k&&F&&(c.rotationY=c.rotationX=0);c.scaleX=(1E5*Math.sqrt(K*K+s*s)+0.5>>0)/1E5;c.scaleY=(1E5*Math.sqrt(r*r+e*e)+0.5>>0)/1E5;c.scaleZ=(1E5*Math.sqrt(u*u+l*l)+0.5>>0)/1E5;c.skewX=0;c.perspective=h?1/ +h:0;c.x=p;c.y=n;c.z=m}}else if(!I||0===h.length||c.x!==h[4]||c.y!==h[5]||!c.rotationX&&!c.rotationY){e=(k=6<=h.length)?h[0]:1;p=h[1]||0;l=h[2]||0;n=k?h[3]:1;c.x=h[4]||0;c.y=h[5]||0;k=Math.sqrt(e*e+p*p);g=Math.sqrt(n*n+l*l);e=e||p?Math.atan2(p,e):c.rotation||0;l=l||n?Math.atan2(l,n)+e:c.skewX||0;p=k-Math.abs(c.scaleX||0);n=g-Math.abs(c.scaleY||0);Math.abs(l)>Math.PI/2&&Math.abs(l)<1.5*Math.PI&&(f?(k*=-1,l+=0>=e?Math.PI:-Math.PI,e+=0>=e?Math.PI:-Math.PI):(g*=-1,l+=0>=l?Math.PI:-Math.PI));f=(e-c.rotation)% +Math.PI;m=(l-c.skewX)%Math.PI;if(void 0===c.skewX||1E-6p||1E-6n||1E-6f||1E-6m)c.scaleX=k,c.scaleY=g,c.rotation=e,c.skewX=l;I&&(c.rotationX=c.rotationY=c.z=0,c.perspective=parseFloat(B.defaultTransformPerspective)||0,c.scaleZ=1)}c.zOrigin=j;for(b in c)1E-6>c[b]&&-1E-6>0)/1E5,d=(1E5*Math.sin(d)*b.scaleX>>0)/1E5,j=(1E5*Math.sin(c)* +-b.scaleY>>0)/1E5,c=(1E5*Math.cos(c)*b.scaleY>>0)/1E5,e=this.t.style,h=this.t.currentStyle,k,g;if(h){g=d;d=-j;j=-g;k=h.filter;e.filter="";var l=this.t.offsetWidth;g=this.t.offsetHeight;var p="absolute"!==h.position,n="progid:DXImageTransform.Microsoft.Matrix(M11="+f+", M12="+d+", M21="+j+", M22="+c,m=b.x,r=b.y,s,w;null!=b.ox&&(s=(b.oxp?0.01*l*b.ox:b.ox)-l/2,w=(b.oyp?0.01*g*b.oy:b.oy)-g/2,m+=s-(s*f+w*d),r+=w-(s*j+w*c));if(p)s=l/2,w=g/2,n+=", Dx="+(s-(s*f+w*d)+m)+", Dy="+(w-(s*j+w*c)+r)+")";else{var q= +8>ja?1:-1;s=b.ieOffsetX||0;w=b.ieOffsetY||0;b.ieOffsetX=Math.round((l-((0>f?-f:f)*l+(0>d?-d:d)*g))/2+m);b.ieOffsetY=Math.round((g-((0>c?-c:c)*g+(0>j?-j:j)*l))/2+r);for(v=0;4>v;v++)l=Pa[v],g=h[l],g=-1!==g.indexOf("px")?parseFloat(g):F(this.t,l,parseFloat(g),g.replace(Ha,""))||0,m=g!==b[l]?2>v?-b.ieOffsetX:-b.ieOffsetY:2>v?s-b.ieOffsetX:w-b.ieOffsetY,e[l]=(b[l]=Math.round(g-m*(0===v||2===v?1:q)))+"px";n+=", sizingMethod='auto expand')"}e.filter=-1!==k.indexOf("DXImageTransform.Microsoft.Matrix(")?k.replace(Na, +n):n+" "+k;if(0===a||1===a)if(1===f&&0===d&&0===j&&1===c&&(!p||-1!==n.indexOf("Dx=0, Dy=0")))(!ga.test(k)||100===parseFloat(RegExp.$1))&&-1===k.indexOf("gradient(")&&e.removeAttribute("filter")}},Sa=function(){var a=this.data,b=this.t.style,d=a.perspective,c=a.scaleX,f=0,j=0,e=0,h=0,k=a.scaleY,g=0,l=0,p=0,m=0,r=a.scaleZ,q=0,s=0,w=0,v=d?-1/d:0,t=a.rotation,A=a.zOrigin,u,x,y,B,z;va&&(x=b.top+"",u=parseFloat(x)||0,x=x.substr((u+"").length),a._ffFix=!a._ffFix,b.top=(a._ffFix?u+0.05:u-0.05)+(""===x?"px": +x));t&&(u=Math.cos(t),t=Math.sin(t),y=k*t,f=c*-t,k*=u,c*=u,h=y);if(t=a.rotationY)u=Math.cos(t),t=Math.sin(t),B=r*-t,z=v*-t,j=c*t,g=h*t,r*=u,v*=u,c*=u,h*=u,p=B,s=z;if(t=a.rotationX)u=Math.cos(t),t=Math.sin(t),x=f*u+j*t,y=k*u+g*t,B=m*u+r*t,z=w*u+v*t,j=f*-t+j*u,g=k*-t+g*u,r=m*-t+r*u,v=w*-t+v*u,f=x,k=y,m=B,w=z;A&&(q-=A,e=j*q,l=g*q,q=r*q+A);e+=a.x;l+=a.y;q=(1E5*(q+a.z)>>0)/1E5;b[H]="matrix3d("+(1E5*c>>0)/1E5+","+(1E5*h>>0)/1E5+","+(1E5*p>>0)/1E5+","+(1E5*s>>0)/1E5+","+(1E5*f>>0)/1E5+","+(1E5*k>>0)/1E5+ +","+(1E5*m>>0)/1E5+","+(1E5*w>>0)/1E5+","+(1E5*j>>0)/1E5+","+(1E5*g>>0)/1E5+","+(1E5*r>>0)/1E5+","+(1E5*v>>0)/1E5+","+(1E5*e>>0)/1E5+","+(1E5*l>>0)/1E5+","+q+","+(d?1+-q/d:1)+")"},Ta=function(){var a=this.data;if(!a.rotation&&!a.skewX)this.t.style[H]="matrix("+a.scaleX+",0,0,"+a.scaleY+","+a.x+","+a.y+")";else{var b=a.rotation,d=b-a.skewX,c=(1E5*Math.cos(b)*a.scaleX>>0)/1E5,b=(1E5*Math.sin(b)*a.scaleX>>0)/1E5,f=(1E5*Math.sin(d)*-a.scaleY>>0)/1E5,d=(1E5*Math.cos(d)*a.scaleY>>0)/1E5;this.t.style[H]= +"matrix("+c+","+b+","+f+","+d+","+a.x+","+a.y+")"}};q("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective",null,function(a,b,d,c,f,j,e){if(c._transform)return f;b=c._transform=Y(a,r,!0);var h=a.style,k=Fa.length,g,l,p,m,q;if("string"===typeof e.transform&&H)l=h[H],h[H]=e.transform,g=Y(a,null,!1),h[H]=l;else if("object"===typeof e){l=null!=e.rotation?e.rotation: +null!=e.rotationZ?e.rotationZ:b.rotation*R;g={scaleX:G(null!=e.scaleX?e.scaleX:e.scale,b.scaleX),scaleY:G(null!=e.scaleY?e.scaleY:e.scale,b.scaleY),scaleZ:G(null!=e.scaleZ?e.scaleZ:e.scale,b.scaleZ),x:G(e.x,b.x),y:G(e.y,b.y),z:G(e.z,b.z),perspective:G(e.transformPerspective,b.perspective)};g.rotation=null!=e.shortRotation||null!=e.shortRotationZ?na(e.shortRotation||e.shortRotationZ||0,b.rotation):"number"===typeof l?l*E:P(l,b.rotation);I&&(g.rotationX=null!=e.shortRotationX?na(e.shortRotationX,b.rotationX): +"number"===typeof e.rotationX?e.rotationX*E:P(e.rotationX,b.rotationX),g.rotationY=null!=e.shortRotationY?na(e.shortRotationY,b.rotationY):"number"===typeof e.rotationY?e.rotationY*E:P(e.rotationY,b.rotationY),1E-6>g.rotationX&&-1E-6g.rotationY&&-1E-6g.skewY&&-1E-6g.skewX&&-1E-6g.rotation&&-1E-6p||null!=X[d])q=!0,f=new y(b,d,b[d],p,f),f.xs0=0,f.plugin=j,c._overwriteProps.push(f.n);if((p=e.transformOrigin)||I&&m&&b.zOrigin)H?(q=!0,p=(p||x(a,d,r,!1,"50% 50%"))+"",d=Ga,f=new y(h,d,0,0,f, +-1,"css_transformOrigin"),f.b=h[d],f.plugin=j,I?(l=b.zOrigin,p=p.split(" "),b.zOrigin=(2n?1:0))||""):(n=parseFloat(l),s=l.substr((n+"").length)),""=== +s&&(s=ca[d]||w),s!==w&&(g=F(a,"borderLeft",m,w),m=F(a,"borderTop",m,w),"%"===s?(g=100*(g/q)+"%",k=100*(m/v)+"%"):"em"===s?(w=F(a,"borderLeft",1,"em"),g=g/w+"em",k=m/w+"em"):(g+="px",k=m+"px"),y&&(l=parseFloat(g)+n+s,h=parseFloat(k)+n+s)),f=aa(j,c[e],g+" "+k,l+" "+h,!1,"0px",f);return f},!0,!1,Da("0px 0px 0px 0px",!1,!0));q("backgroundPosition","0 0",function(a,b,d,c,f,j){d=r||U(a,null);d=this.format((d?ja?d.getPropertyValue("background-position-x")+" "+d.getPropertyValue("background-position-y"): +d.getPropertyValue("background-position"):a.currentStyle.backgroundPositionX+" "+a.currentStyle.backgroundPositionY)||"0 0");b=this.format(b);var e,h,k,g;if(-1!==d.indexOf("%")!==(-1!==b.indexOf("%"))){c=d.split(" ");e=b.split(" ");ha.setAttribute("src",x(a,"backgroundImage").replace(Ka,""));for(h=2;-1<--h;)d=c[h],k=-1!==d.indexOf("%"),k!==(-1!==e[h].indexOf("%"))&&(g=0===h?a.offsetWidth-ha.width:a.offsetHeight-ha.height,c[h]=k?parseFloat(d)/100*g+"px":100*(parseFloat(d)/g)+"%");d=c.join(" ")}return this.parseComplex(a.style, +d,b,f,j)},!1,!1,ma);q("backgroundSize","0 0",null,!1,!1,ma);q("perspective","0px",null,!0);q("perspectiveOrigin","50% 50%",null,!0);q("transformStyle","preserve-3d",null,!0);q("backfaceVisibility","visible",null,!0);q("margin",null,A("marginTop,marginRight,marginBottom,marginLeft"));q("padding",null,A("paddingTop,paddingRight,paddingBottom,paddingLeft"));q("clip","rect(0px,0px,0px,0px)");q("textShadow","0px 0px 0px #999",null,!1,!0);q("autoRound",null,function(a,b,d,c,f){return f});q("border","0px solid #000", +function(a,b,d,c,f,j){return this.parseComplex(a.style,this.format(x(a,"borderTopWidth",r,!1,"0px")+" "+x(a,"borderTopStyle",r,!1,"solid")+" "+x(a,"borderTopColor",r,!1,"#000")),this.format(b),f,j)},!1,!0,function(a){var b=a.split(" ");return b[0]+" "+(b[1]||"solid")+" "+(a.match(J)||["#000"])[0]});var Ua=function(a){var b=this.t,d=b.filter;a=this.s+this.c*a>>0;var c;100===a&&(-1===d.indexOf("atrix(")&&-1===d.indexOf("radient(")?(b.removeAttribute("filter"),c=!x(this.data,"filter")):(b.filter=d.replace(Ja, +""),c=!0));c||(this.xn1&&(b.filter=d=d||"alpha(opacity=100)"),b.filter=-1===d.indexOf("opacity")?b.filter+(" alpha(opacity="+a+")"):d.replace(ga,"opacity="+a))};q("opacity,alpha,autoAlpha","1",function(a,b,d,c,f,j){var e=parseFloat(x(a,"opacity",r,!1,"1")),h=a.style,k;b=parseFloat(b);"autoAlpha"===d&&(k=x(a,"visibility",r),1===e&&("hidden"===k&&0!==b)&&(e=0),f=new y(h,"visibility",0,0,f,-1,null,!1,0,0!==e?"visible":"hidden",0===b?"hidden":"visible"),f.xs0="visible",c._overwriteProps.push(f.n));O? +f=new y(h,"opacity",e,b-e,f):(f=new y(h,"opacity",100*e,100*(b-e),f),f.xn1="autoAlpha"===d?1:0,h.zoom=1,f.type=2,f.b="alpha(opacity="+f.s+")",f.e="alpha(opacity="+(f.s+f.c)+")",f.data=a,f.plugin=j,f.setRatio=Ua);return f});var Va=function(a){if(1===a||0===a){this.t.className=1===a?this.e:this.b;a=this.data;for(var b=this.t.style,d=b.removeProperty?"removeProperty":"removeAttribute";a;){if(a.v)b[a.p]=a.v;else b[d](a.p.replace(qa,"-$1").toLowerCase());a=a._next}}else this.t.className!==this.b&&(this.t.className= +this.b)};q("className",null,function(a,b,d,c,f,j,e){var h=a.className,k=a.style.cssText;f=c._classNamePT=new y(a,d,0,0,f,2);f.setRatio=Va;f.b=h;f.e="="!==b.charAt(1)?b:"+"===b.charAt(0)?h+" "+b.substr(2):h.split(b.substr(2)).join("");c._tween._duration&&(b=Z(a,r,!0),a.className=f.e,e=Ba(a,b,Z(a),e),a.className=h,f.data=e.firstMPT,a.style.cssText=k,f=f.xfirst=c.parse(a,e.difs,f,j));return f});m=["bezier","throwProps","physicsProps","physics2D"];for(v=m.length;v--;)N(m[v]);m=B.prototype;m._firstPT= +null;m._onInitTween=function(a,b,d){if(!a.nodeType)return!1;this._target=a;this._tween=d;this._vars=b;ia=b.autoRound;ba=!1;ca=b.suffixMap||B.suffixMap;r=U(a,"");da=this._overwriteProps;d=a.style;var c,f,j,e;if(ta&&""===d.zIndex&&(c=x(a,"zIndex",r),"auto"===c||""===c))d.zIndex=0;"string"===typeof b&&(f=d.cssText,c=Z(a,r),d.cssText=f+";"+b,c=Ba(a,c,Z(a)).difs,!O&&Ia.test(b)&&(c.opacity=parseFloat(RegExp.$1)),b=c,d.cssText=f);this._firstPT=b=this.parse(a,b,null);if(this._transformType){c=3===this._transformType; +if(H){if(ua){ta=!0;if(""===d.zIndex&&(e=x(a,"zIndex",r),"auto"===e||""===e))d.zIndex=0;wa&&(d.WebkitBackfaceVisibility=this._vars.WebkitBackfaceVisibility||(c?"visible":"hidden"))}}else d.zoom=1;for(d=b;d&&d._next;)d=d._next;e=new y(a,"transform",0,0,null,2);this._linkCSSP(e,null,d);e.setRatio=c&&I?Sa:H?Ta:Ra;e.data=this._transform||Y(a,r,!0);da.pop()}if(ba){for(;b;){a=b._next;for(d=f;d&&d.pr>b.pr;)d=d._next;(b._prev=d?d._prev:j)?b._prev._next=b:f=b;(b._next=d)?d._prev=b:j=b;b=a}this._firstPT=f}return!0}; +m.parse=function(a,b,d,c){var f=a.style,j,e,h,k,g,l,m,n;for(j in b){g=b[j];if(e=L[j])d=e.parse(a,g,j,this,d,c,b);else if(e=x(a,j,r)+"",m="string"===typeof g,"color"===j||"fill"===j||"stroke"===j||-1!==j.indexOf("Color")||m&&!g.indexOf("rgb"))m||(g=oa(g),g=(3k?1:0))||""):(k=parseFloat(g),m=m?g.substr((k+"").length)||"":"");""===m&&(m=ca[j]||l);g=k||0===k?(n?k+h:k)+m:b[j];if(l!== +m&&""!==m&&(k||0===k))if(h||0===h)if(h=F(a,j,h,l),"%"===m?(h/=F(a,j,100,"%")/100,100>0:d-0.5>>0:1E-6>d&&-1E-6>16,a>>8&255,a&255]:"#"===a.charAt(0)?(4===a.length&&(a="#"+a.charAt(1)+a.charAt(1)+a.charAt(2)+a.charAt(2)+a.charAt(3)+a.charAt(3)),a=parseInt(a.substr(1), 16),[a>>16,a>>8&255,a&255]):a.match(l)||h.transparent},h={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]};j.constructor=g;g.API=2;j._onInitTween=function(a,b){this._target=a;var d,e,f,c;for(d in b){f= k(b[d]);this._firstPT=c={_next:this._firstPT,p:d,f:"function"===typeof a[d],n:d,r:!1};e=k(!c.f?a[d]:a[d.indexOf("set")||"function"!==typeof a["get"+d.substr(3)]?d:"get"+d.substr(3)]());c.s=Number(e[0]);c.c=Number(f[0])-c.s;c.gs=Number(e[1]);c.gc=Number(f[1])-c.gs;c.bs=Number(e[2]);c.bc=Number(f[2])-c.bs;if(c.rgba=3e.length?1:Number(e[3]),console.log("as "+c.as),c.ac=(4>f.length?1:Number(f[3]))-c.as;c._next&&(c._next._prev=c)}return!0};j.setRatio=function(a){for(var b= this._firstPT,d;b;){d=(b.rgba?"rgba(":"rgb(")+(b.s+a*b.c>>0)+", "+(b.gs+a*b.gc>>0)+", "+(b.bs+a*b.bc>>0)+(b.rgba?", "+(b.as+a*b.ac):"")+")";if(b.f)this._target[b.p](d);else this._target[b.p]=d;b=b._next}};i.activate([g]);return g},!0)});window._gsDefine&&_gsQueue.pop()(); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/src/minified/plugins/EaselPlugin.min.js b/duo/js/greensock-v12-js/src/minified/plugins/EaselPlugin.min.js new file mode 100755 index 0000000..856edab --- /dev/null +++ b/duo/js/greensock-v12-js/src/minified/plugins/EaselPlugin.min.js @@ -0,0 +1,19 @@ +/** + * VERSION: beta 0.11 + * DATE: 2012-10-26 + * JavaScript + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + **/ +(window._gsQueue||(window._gsQueue=[])).push(function(){_gsDefine("plugins.EaselPlugin",["plugins.TweenPlugin"],function(j){var h=function(){j.call(this,"easel",-1);this._overwriteProps.pop()},k=h.prototype=new j("easel",-1),l=/(\d|\.)+/g,i;_colorProps="redMultiplier greenMultiplier blueMultiplier alphaMultiplier redOffset greenOffset blueOffset alphaOffset".split(" ");_parseColorFilter=function(a,c,d){if(!i&&(i=window.ColorFilter||window.createjs.ColorFilter,!i))throw"EaselPlugin error: The EaselJS ColorFilter JavaScript file wasn't loaded."; +for(var b=a.filters||[],f=b.length,g,e;-1<--f;)if(b[f]instanceof i){g=b[f];break}g||(g=new i,b.push(g),a.filters=b);b=g.clone();if(null!=c.tint)f=_parseColor(c.tint),e=null!=c.tintAmount?Number(c.tintAmount):1,b.redOffset=Number(f[0])*e,b.greenOffset=Number(f[1])*e,b.blueOffset=Number(f[2])*e,b.redMultiplier=b.greenMultiplier=b.blueMultiplier=1-e;else for(e in c)"exposure"!==e&&"brightness"!==e&&(b[e]=Number(c[e]));null!=c.exposure?(b.redOffset=b.greenOffset=b.blueOffset=255*(Number(c.exposure)-1), +b.redMultiplier=b.greenMultiplier=b.blueMultiplier=1):null!=c.brightness&&(e=Number(c.brightness)-1,b.redOffset=b.greenOffset=b.blueOffset=0>16,a>>8&255,a&255]:"#"===a.charAt(0)?(4===a.length&&(a="#"+a.charAt(1)+a.charAt(1)+a.charAt(2)+a.charAt(2)+a.charAt(3)+a.charAt(3)),a=parseInt(a.substr(1),16),[a>>16,a>>8&255,a&255]):a.match(l)||_colorLookup.transparent};_colorLookup={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255, +0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]};k.constructor=h;h.API=2;k._onInitTween=function(a,c){this._target=a;var d,b,f;for(d in c)"colorFilter"===d||"tint"===d||"tintAmount"===d||"exposure"===d||"brightness"===d?f||(_parseColorFilter(a,c.colorFilter||c,this),f=!0):null!=a[d]&&(this._firstPT=b={_next:this._firstPT,t:a,p:d,f:"function"===typeof a[d], +n:d,pr:0,type:0},b.s=!b.f?parseFloat(a[d]):a[d.indexOf("set")||"function"!==typeof a["get"+d.substr(3)]?d:"get"+d.substr(3)](),b.c="number"===typeof c[d]?c[d]-b.s:"string"===typeof c[d]?parseFloat(c[d].split("=").join("")):0,b._next&&(b._next._prev=b));return!0};k.setRatio=function(a){for(var c=this._firstPT,d;c;){d=c.c*a+c.s;c.r&&(d=d+(0>0);if(c.f)c.t[c.p](d);else c.t[c.p]=d;c=c._next}this._target.cacheID&&this._target.updateCache()};j.activate([h]);return h},!0)}); +window._gsDefine&&_gsQueue.pop()(); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/src/minified/plugins/RaphaelPlugin.min.js b/duo/js/greensock-v12-js/src/minified/plugins/RaphaelPlugin.min.js new file mode 100755 index 0000000..9032e20 --- /dev/null +++ b/duo/js/greensock-v12-js/src/minified/plugins/RaphaelPlugin.min.js @@ -0,0 +1,13 @@ +/*! + * VERSION: beta 0.14 + * DATE: 2012-06-19 + * JavaScript + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +(window._gsQueue||(window._gsQueue=[])).push(function(){_gsDefine("plugins.RaphaelPlugin",["plugins.TweenPlugin","TweenLite"],function(o){var i=function(){o.call(this,"raphael");this._overwriteProps.pop()},k=i.prototype=new o("raphael");k.constructor=i;i.API=2;var p=/[^\d\-\.]/g,j=Math.PI/180,t=/(\d|\.)+/g,q=function(b){return"number"===typeof b?[b>>16,b>>8&255,b&255]:""===b||null==b||"none"===b||"string"!==typeof b?l.transparent:l[b]?l[b]:"#"===b.charAt(0)?(4===b.length&&(b="#"+b.charAt(1)+b.charAt(1)+ b.charAt(2)+b.charAt(2)+b.charAt(3)+b.charAt(3)),b=parseInt(b.substr(1),16),[b>>16,b>>8&255,b&255]):b.match(t)||l.transparent},r={scaleX:1,scaleY:1,tx:1,ty:1,rotation:1,shortRotation:1,skewX:1,skewY:1,scale:1},s=function(b,a){var c=b.matrix,e=c.a,d=c.b,g=c.c,f=c.d,h=a?b._gsTransform||{skewY:0}:{skewY:0},i=0>h.scaleX;h.tx=c.e-(h.ox||0);h.ty=c.f-(h.oy||0);h.scaleX=Math.sqrt(e*e+d*d);h.scaleY=Math.sqrt(f*f+g*g);h.rotation=e||d?Math.atan2(d,e):h.rotation||0;h.skewX=g||f?Math.atan2(g,f)+h.rotation:h.skewX|| 0;Math.abs(h.skewX)>Math.PI/2&&(i?(h.scaleX*=-1,h.skewX+=0>=h.rotation?Math.PI:-Math.PI,h.rotation+=0>=h.rotation?Math.PI:-Math.PI):(h.scaleY*=-1,h.skewX+=0>=h.skewX?Math.PI:-Math.PI));if(1.0E-6>h.rotation&&-1.0E-6h.skewX&&-1.0E-6d.length?1:Number(d[3]),g.ac=(4>f.length?1: Number(f[3]))-g.as,g.type=2):g.type=1):(d="string"===typeof d?parseFloat(d.replace(p,"")):Number(d),"string"===typeof c?(f="="===c.charAt(1),c=parseFloat(c.replace(p,""))):f=!1,g.e=c||0===c?f?c+d:c:a[e],(d||0===d)&&(c||0===c)&&(g.c=f?c:c-d))?g.s=d:(g.type=-1,g.i=a[e],g.s=g.c=0),this._overwriteProps.push("raphael_"+e),g._next&&(g._next._prev=g));return!0};k._parseTransform=function(b,a){if(!this._transform){var c=this._transform=s(b,!0),e,d,g,f,h;if("object"===typeof a){e={scaleX:m(null!=a.scaleX? a.scaleX:a.scale,c.scaleX),scaleY:m(null!=a.scaleY?a.scaleY:a.scale,c.scaleY),tx:m(a.tx,c.tx),ty:m(a.ty,c.ty)};null!=a.shortRotation?(e.rotation="number"===typeof a.shortRotation?a.shortRotation*j:n(a.shortRotation,c.rotation),d=(e.rotation-c.rotation)%(2*Math.PI),d!==d%Math.PI&&(d+=Math.PI*(0>d?2:-2)),e.rotation=c.rotation+d):e.rotation=null==a.rotation?c.rotation:"number"===typeof a.rotation?a.rotation*j:n(a.rotation,c.rotation);e.skewX=null==a.skewX?c.skewX:"number"===typeof a.skewX?a.skewX*j: n(a.skewX,c.skewX);e.skewY=null==a.skewY?c.skewY:"number"===typeof a.skewY?a.skewY*j:n(a.skewY,c.skewY);if(d=e.skewY-c.skewY)e.skewX+=d,e.rotation+=d;1.0E-6>e.skewY&&-1.0E-6e.skewX&&-1.0E-6e.rotation&&-1.0E-6>0:c-0.5>>0),a.type?1===a.type?a.t[a.p]="rgb("+(c>>0)+", "+(a.gs+b*a.gc>>0)+", "+(a.bs+b*a.bc>>0)+")":2===a.type?a.t[a.p]="rgba("+(c>>0)+", "+(a.gs+b*a.gc>>0)+", "+(a.bs+b*a.bc>>0)+", "+(a.as+b*a.ac)+")":-1===a.type&&(a.t[a.p]=a.i):a.t[a.p]=c,a=a._next;this._target.attr(this._props);if(this._transform){a= this._transform;c=a.rotation;var e=c-a.skewX,b=Math.cos(c)*a.scaleX;c=Math.sin(c)*a.scaleX;var d=Math.sin(e)*-a.scaleY,e=Math.cos(e)*a.scaleY,g=this._pxl,f=this._pyl;1.0E-6>c&&-1.0E-6d&&-1.0E-6d))this.skipX=!0,this._checkAutoKill();if(!this.skipY&&(7b))this.skipY=!0,this._checkAutoKill();this._wdw?g.scrollTo(!this.skipX?this.x:a,!this.skipY?this.y:c):(this.skipY||(this._target.scrollTop=this.y),this.skipX||(this._target.scrollLeft=this.x));this.xPrev=this.x;this.yPrev=this.y};d.activate([e]);return e},!0)});window._gsDefine&&_gsQueue.pop()(); \ No newline at end of file diff --git a/duo/js/greensock-v12-js/src/uncompressed/.DS_Store b/duo/js/greensock-v12-js/src/uncompressed/.DS_Store new file mode 100755 index 0000000..e71f7aa Binary files /dev/null and b/duo/js/greensock-v12-js/src/uncompressed/.DS_Store differ diff --git a/duo/js/greensock-v12-js/src/uncompressed/TimelineLite.js b/duo/js/greensock-v12-js/src/uncompressed/TimelineLite.js new file mode 100755 index 0000000..468f5bf --- /dev/null +++ b/duo/js/greensock-v12-js/src/uncompressed/TimelineLite.js @@ -0,0 +1,560 @@ +/*! + * VERSION: beta 1.641 + * DATE: 2012-11-08 + * JavaScript (ActionScript 3 and 2 also available) + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ + +(window._gsQueue || (window._gsQueue = [])).push( function() { + + _gsDefine("TimelineLite", ["core.Animation","core.SimpleTimeline","TweenLite"], function(Animation, SimpleTimeline, TweenLite) { + + "use strict"; + + var TimelineLite = function(vars) { + SimpleTimeline.call(this, vars); + this._labels = {}; + this.autoRemoveChildren = (this.vars.autoRemoveChildren == true); + this.smoothChildTiming = (this.vars.smoothChildTiming == true); + this._sortChildren = true; + this._onUpdate = this.vars.onUpdate; + var i = _paramProps.length, + j, a; + while (--i > -1) { + if ((a = this.vars[_paramProps[i]])) { + j = a.length; + while (--j > -1) { + if (a[j] === "{self}") { + a = this.vars[_paramProps[i]] = a.concat(); //copy the array in case the user referenced the same array in multiple timelines/tweens (each {self} should be unique) + a[j] = this; + } + } + } + } + if (this.vars.tweens instanceof Array) { + this.insertMultiple(this.vars.tweens, 0, this.vars.align || "normal", this.vars.stagger || 0); + } + }, + _paramProps = ["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams","onRepeatParams"], + _blankArray = [], + _copy = function(vars) { + var copy = {}, p; + for (p in vars) { + copy[p] = vars[p]; + } + return copy; + }, + p = TimelineLite.prototype = new SimpleTimeline(); + + TimelineLite.version = 1.641; + p.constructor = TimelineLite; + p.kill()._gc = false; + + p.to = function(target, duration, vars, offsetOrLabel, baseTimeOrLabel) { + return this.insert( new TweenLite(target, duration, vars), this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + p.from = function(target, duration, vars, offsetOrLabel, baseTimeOrLabel) { + return this.insert( TweenLite.from(target, duration, vars), this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + p.fromTo = function(target, duration, fromVars, toVars, offsetOrLabel, baseTimeOrLabel) { + return this.insert( TweenLite.fromTo(target, duration, fromVars, toVars), this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + p.staggerTo = function(targets, duration, vars, stagger, offsetOrLabel, baseTimeOrLabel, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { + var tl = new TimelineLite({onComplete:onCompleteAll, onCompleteParams:onCompleteAllParams, onCompleteScope:onCompleteAllScope}); + stagger = stagger || 0; + for (var i = 0; i < targets.length; i++) { + if (vars.startAt != null) { + vars.startAt = _copy(vars.startAt); + } + tl.insert( new TweenLite(targets[i], duration, _copy(vars)), i * stagger); + } + return this.insert(tl, this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + p.staggerFrom = function(targets, duration, vars, stagger, offsetOrLabel, baseTimeOrLabel, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { + if (vars.immediateRender == null) { + vars.immediateRender = true; + } + vars.runBackwards = true; + return this.staggerTo(targets, duration, vars, stagger, offsetOrLabel, baseTimeOrLabel, onCompleteAll, onCompleteAllParams, onCompleteAllScope); + }; + + p.staggerFromTo = function(targets, duration, fromVars, toVars, stagger, offsetOrLabel, baseTimeOrLabel, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { + toVars.startAt = fromVars; + if (fromVars.immediateRender) { + toVars.immediateRender = true; + } + return this.staggerTo(targets, duration, toVars, stagger, offsetOrLabel, baseTimeOrLabel, onCompleteAll, onCompleteAllParams, onCompleteAllScope); + }; + + p.call = function(callback, params, scope, offsetOrLabel, baseTimeOrLabel) { + return this.insert( TweenLite.delayedCall(0, callback, params, scope), this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + p.set = function(target, vars, offsetOrLabel, baseTimeOrLabel) { + vars.immediateRender = false; + return this.insert( new TweenLite(target, 0, vars), this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + TimelineLite.exportRoot = function(vars, ignoreDelayedCalls) { + vars = vars || {}; + if (vars.smoothChildTiming == null) { + vars.smoothChildTiming = true; + } + var tl = new TimelineLite(vars), + root = tl._timeline; + if (ignoreDelayedCalls == null) { + ignoreDelayedCalls = true; + } + root._remove(tl, true); + tl._startTime = 0; + tl._rawPrevTime = tl._time = tl._totalTime = root._time; + var tween = root._first, next; + while (tween) { + next = tween._next; + if (!ignoreDelayedCalls || !(tween instanceof TweenLite && tween.target === tween.vars.onComplete)) { + tl.insert(tween, tween._startTime - tween._delay); + } + tween = next; + } + root.insert(tl, 0); + return tl; + }; + + p.insert = function(value, timeOrLabel) { + if (value instanceof Animation) { + //continue... + } else if (value instanceof Array) { + return this.insertMultiple(value, timeOrLabel); + } else if (typeof(value) === "string") { + return this.addLabel(value, this._parseTimeOrLabel(timeOrLabel || 0, 0, true)); + } else if (typeof(value) === "function") { + value = TweenLite.delayedCall(0, value); + } else { + throw ("ERROR: Cannot insert() " + value + " into the TimelineLite/Max because it is neither a tween, timeline, function, nor a String."); + return this; + } + + SimpleTimeline.prototype.insert.call(this, value, this._parseTimeOrLabel(timeOrLabel || 0, 0, true)); + + //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. + if (this._gc) if (!this._paused) if (this._time === this._duration) if (this._time < this.duration()) { + //in case any of the anscestors had completed but should now be enabled... + var tl = this; + while (tl._gc && tl._timeline) { + if (tl._timeline.smoothChildTiming) { + tl.totalTime(tl._totalTime, true); //also enables them + } else { + tl._enabled(true, false); + } + tl = tl._timeline; + } + } + return this; + }; + + p.remove = function(value) { + if (value instanceof Animation) { + return this._remove(value, false); + } else if (value instanceof Array) { + var i = value.length; + while (--i > -1) { + this.remove(value[i]); + } + return this; + } else if (typeof(value) === "string") { + return this.removeLabel(value); + } + return this.kill(null, value); + }; + + p.append = function(value, offsetOrLabel) { + return this.insert(value, this._parseTimeOrLabel(null, offsetOrLabel, true)); + }; + + p.insertMultiple = function(tweens, timeOrLabel, align, stagger) { + align = align || "normal"; + stagger = stagger || 0; + var i, tween, curTime = this._parseTimeOrLabel(timeOrLabel || 0, 0, true), l = tweens.length; + for (i = 0; i < l; i++) { + if ((tween = tweens[i]) instanceof Array) { + tween = new TimelineLite({tweens:tween}); + } + this.insert(tween, curTime); + if (typeof(tween) === "string" || typeof(tween) === "function") { + //do nothing + } else if (align === "sequence") { + curTime = tween._startTime + (tween.totalDuration() / tween._timeScale); + } else if (align === "start") { + tween._startTime -= tween.delay(); + } + curTime += stagger; + } + return this._uncache(true); + }; + + p.appendMultiple = function(tweens, offsetOrLabel, align, stagger) { + return this.insertMultiple(tweens, this._parseTimeOrLabel(null, offsetOrLabel, true), align, stagger); + }; + + p.addLabel = function(label, time) { + this._labels[label] = time; + return this; + }; + + p.removeLabel = function(label) { + delete this._labels[label]; + return this; + }; + + p.getLabelTime = function(label) { + return (this._labels[label] != null) ? this._labels[label] : -1; + }; + + p._parseTimeOrLabel = function(timeOrLabel, offsetOrLabel, appendIfAbsent) { + if (typeof(offsetOrLabel) === "string") { + return this._parseTimeOrLabel(offsetOrLabel, ((appendIfAbsent && typeof(timeOrLabel) === "number" && this._labels[offsetOrLabel] == null) ? timeOrLabel - this.duration() : 0), appendIfAbsent); + } + offsetOrLabel = offsetOrLabel || 0; + if (timeOrLabel == null) { + return this.duration() + offsetOrLabel; + } else if (typeof(timeOrLabel) === "string" && isNaN(timeOrLabel)) { + if (this._labels[timeOrLabel] == null) { + return (appendIfAbsent) ? (this._labels[timeOrLabel] = this.duration() + offsetOrLabel) : offsetOrLabel; + } + return this._labels[timeOrLabel] + offsetOrLabel; + } + return Number(timeOrLabel) + offsetOrLabel; + }; + + p.seek = function(timeOrLabel, suppressEvents) { + return this.totalTime(this._parseTimeOrLabel(timeOrLabel), (suppressEvents != false)); + } + + p.stop = function() { + return this.paused(true); + }; + + p.gotoAndPlay = function(timeOrLabel, suppressEvents) { + return SimpleTimeline.prototype.play.call(this, timeOrLabel, suppressEvents); + }; + + p.gotoAndStop = function(timeOrLabel, suppressEvents) { + return this.pause(timeOrLabel, suppressEvents); + }; + + p.render = function(time, suppressEvents, force) { + if (this._gc) { + this._enabled(true, false); + } + this._active = !this._paused; + var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), + prevTime = this._time, + prevStart = this._startTime, + prevTimeScale = this._timeScale, + prevPaused = this._paused, + tween, isComplete, next, callback; + if (time >= totalDur) { + this._totalTime = this._time = totalDur; + if (!this._reversed) if (!this._hasPausedChild()) { + isComplete = true; + callback = "onComplete"; + if (this._duration === 0) if (time === 0 || this._rawPrevTime < 0) if (this._rawPrevTime !== time) { //In order to accommodate zero-duration timelines, we must discern the momentum/direction of time in order to render values properly when the "playhead" goes past 0 in the forward direction or lands directly on it, and also when it moves past it in the backward direction (from a postitive time to a negative time). + force = true; + } + } + this._rawPrevTime = time; + time = totalDur + 0.000001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off) + + } else if (time <= 0) { + this._totalTime = this._time = 0; + if (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime > 0)) { + callback = "onReverseComplete"; + isComplete = this._reversed; + } + if (time < 0) { + this._active = false; + if (this._duration === 0) if (this._rawPrevTime >= 0) { //zero-duration timelines are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the "playhead" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's "playhead" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered. + force = true; + } + } else if (!this._initted) { + force = true; + } + this._rawPrevTime = time; + time = -0.000001; //to avoid occasional floating point rounding errors in Flash - sometimes child tweens/timelines were not being rendered at the very beginning (their progress might be 0.000000000001 instead of 0 because when Flash performed _time - tween._startTime, floating point errors would return a value that was SLIGHTLY off) + + } else { + this._totalTime = this._time = this._rawPrevTime = time; + } + + if (this._time === prevTime && !force) { + return; + } else if (!this._initted) { + this._initted = true; + } + if (prevTime === 0) if (this.vars.onStart) if (this._time !== 0) if (!suppressEvents) { + this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); + } + + if (this._time > prevTime) { + tween = this._first; + while (tween) { + next = tween._next; //record it here because the value could change after rendering... + if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering + break; + } else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) { + + if (!tween._reversed) { + tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, false); + } else { + tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, false); + } + + } + tween = next; + } + } else { + tween = this._last; + while (tween) { + next = tween._prev; //record it here because the value could change after rendering... + if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering + break; + } else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) { + + if (!tween._reversed) { + tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, false); + } else { + tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, false); + } + + } + tween = next; + } + } + + if (this._onUpdate) if (!suppressEvents) { + this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray); + } + + if (callback) if (!this._gc) if (prevStart === this._startTime || prevTimeScale != this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate + if (isComplete) { + if (this._timeline.autoRemoveChildren) { + this._enabled(false, false); + } + this._active = false; + } + if (!suppressEvents) if (this.vars[callback]) { + this.vars[callback].apply(this.vars[callback + "Scope"] || this, this.vars[callback + "Params"] || _blankArray); + } + } + }; + + p._hasPausedChild = function() { + var tween = this._first; + while (tween) { + if (tween._paused || ((tween instanceof TimelineLite) && tween._hasPausedChild())) { + return true; + } + tween = tween._next; + } + return false; + }; + + p.getChildren = function(nested, tweens, timelines, ignoreBeforeTime) { + ignoreBeforeTime = ignoreBeforeTime || -9999999999; + var a = [], + tween = this._first, + cnt = 0; + while (tween) { + if (tween._startTime < ignoreBeforeTime) { + //do nothing + } else if (tween instanceof TweenLite) { + if (tweens != false) { + a[cnt++] = tween; + } + } else { + if (timelines != false) { + a[cnt++] = tween; + } + if (nested != false) { + a = a.concat(tween.getChildren(true, tweens, timelines)); + cnt = a.length; + } + } + tween = tween._next; + } + return a; + }; + + p.getTweensOf = function(target, nested) { + var tweens = TweenLite.getTweensOf(target), + i = tweens.length, + a = [], + cnt = 0; + while (--i > -1) { + if (tweens[i].timeline === this || (nested && this._contains(tweens[i]))) { + a[cnt++] = tweens[i]; + } + } + return a; + }; + + p._contains = function(tween) { + var tl = tween.timeline; + while (tl) { + if (tl === this) { + return true; + } + tl = tl.timeline; + } + return false; + }; + + p.shiftChildren = function(amount, adjustLabels, ignoreBeforeTime) { + ignoreBeforeTime = ignoreBeforeTime || 0; + var tween = this._first; + while (tween) { + if (tween._startTime >= ignoreBeforeTime) { + tween._startTime += amount; + } + tween = tween._next; + } + if (adjustLabels) { + for (var p in this._labels) { + if (this._labels[p] >= ignoreBeforeTime) { + this._labels[p] += amount; + } + } + } + return this._uncache(true); + }; + + p._kill = function(vars, target) { + if (vars == null) if (target == null) { + return this._enabled(false, false); + } + var tweens = (target == null) ? this.getChildren(true, true, false) : this.getTweensOf(target), + i = tweens.length, + changed = false; + while (--i > -1) { + if (tweens[i]._kill(vars, target)) { + changed = true; + } + } + return changed; + }; + + p.clear = function(labels) { + var tweens = this.getChildren(false, true, true), + i = tweens.length; + this._time = this._totalTime = 0; + while (--i > -1) { + tweens[i]._enabled(false, false); + } + if (labels != false) { + this._labels = {}; + } + return this._uncache(true); + }; + + p.invalidate = function() { + var tween = this._first; + while (tween) { + tween.invalidate(); + tween = tween._next; + } + return this; + }; + + p._enabled = function(enabled, ignoreTimeline) { + if (enabled === this._gc) { + var tween = this._first; + while (tween) { + tween._enabled(enabled, true); + tween = tween._next; + } + } + return SimpleTimeline.prototype._enabled.call(this, enabled, ignoreTimeline); + }; + + p.progress = function(value) { + return (!arguments.length) ? this._time / this.duration() : this.totalTime(this.duration() * value, false); + }; + + p.duration = function(value) { + if (!arguments.length) { + if (this._dirty) { + this.totalDuration(); //just triggers recalculation + } + return this._duration; + } + if (this.duration() !== 0) if (value !== 0) { + this.timeScale(this._duration / value); + } + return this; + }; + + p.totalDuration = function(value) { + if (!arguments.length) { + if (this._dirty) { + var max = 0, + tween = this._first, + prevStart = -999999999999, + next, end; + while (tween) { + next = tween._next; //record it here in case the tween changes position in the sequence... + + if (tween._startTime < prevStart && this._sortChildren) { //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence + this.insert(tween, tween._startTime - tween._delay); + } else { + prevStart = tween._startTime; + } + if (tween._startTime < 0) {//children aren't allowed to have negative startTimes, so adjust here if one is found. + max -= tween._startTime; + this.shiftChildren(-tween._startTime, false, -9999999999); + } + end = tween._startTime + ((!tween._dirty ? tween._totalDuration : tween.totalDuration()) / tween._timeScale); + if (end > max) { + max = end; + } + + tween = next; + } + this._duration = this._totalDuration = max; + this._dirty = false; + } + return this._totalDuration; + } + if (this.totalDuration() !== 0) if (value !== 0) { + this.timeScale(this._totalDuration / value); + } + return this; + }; + + p.usesFrames = function() { + var tl = this._timeline; + while (tl._timeline) { + tl = tl._timeline; + } + return (tl === Animation._rootFramesTimeline); + }; + + p.rawTime = function() { + return (this._paused || (this._totalTime !== 0 && this._totalTime !== this._totalDuration)) ? this._totalTime : (this._timeline.rawTime() - this._startTime) * this._timeScale; + }; + + return TimelineLite; + + }, true); + + +}); if (window._gsDefine) { _gsQueue.pop()(); } \ No newline at end of file diff --git a/duo/js/greensock-v12-js/src/uncompressed/TimelineMax.js b/duo/js/greensock-v12-js/src/uncompressed/TimelineMax.js new file mode 100755 index 0000000..eb77ed0 --- /dev/null +++ b/duo/js/greensock-v12-js/src/uncompressed/TimelineMax.js @@ -0,0 +1,986 @@ +/*! + * VERSION: beta 1.641 + * DATE: 2012-11-07 + * JavaScript (ActionScript 3 and 2 also available) + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ + +(window._gsQueue || (window._gsQueue = [])).push( function() { + + _gsDefine("TimelineMax", ["TimelineLite","TweenLite","easing.Ease"], function(TimelineLite, TweenLite, Ease) { + + var TimelineMax = function(vars) { + TimelineLite.call(this, vars); + this._repeat = this.vars.repeat || 0; + this._repeatDelay = this.vars.repeatDelay || 0; + this._cycle = 0; + this._yoyo = (this.vars.yoyo === true); + this._dirty = true; + }, + _blankArray = [], + _easeNone = new Ease(null, null, 1, 0), + _getGlobalPaused = function(tween) { + while (tween) { + if (tween._paused) { + return true; + } + tween = tween._timeline; + } + return false; + }, + p = TimelineMax.prototype = new TimelineLite(); + + p.constructor = TimelineMax; + p.kill()._gc = false; + TimelineMax.version = 1.641; + + p.invalidate = function() { + this._yoyo = (this.vars.yoyo === true); + this._repeat = this.vars.repeat || 0; + this._repeatDelay = this.vars.repeatDelay || 0; + this._uncache(true); + return TimelineLite.prototype.invalidate.call(this); + }; + + p.addCallback = function(callback, timeOrLabel, params, scope) { + return this.insert( TweenLite.delayedCall(0, callback, params, scope), timeOrLabel); + }; + + p.removeCallback = function(callback, timeOrLabel) { + if (timeOrLabel == null) { + this._kill(null, callback); + } else { + var a = this.getTweensOf(callback, false), + i = a.length, + time = this._parseTimeOrLabel(timeOrLabel); + while (--i > -1) { + if (a[i]._startTime === time) { + a[i]._enabled(false, false); + } + } + } + return this; + }; + + p.tweenTo = function(timeOrLabel, vars) { + vars = vars || {}; + var copy = {ease:_easeNone, overwrite:2, useFrames:this.usesFrames(), immediateRender:false}, p, t; + for (p in vars) { + copy[p] = vars[p]; + } + copy.time = this._parseTimeOrLabel(timeOrLabel); + t = new TweenLite(this, (Math.abs(Number(copy.time) - this._time) / this._timeScale) || 0.001, copy); + copy.onStart = function() { + t.target.paused(true); + if (t.vars.time !== t.target.time()) { //don't make the duration zero - if it's supposed to be zero, don't worry because it's already initting the tween and will complete immediately, effectively making the duration zero anyway. If we make duration zero, the tween won't run at all. + t.duration( Math.abs( t.vars.time - t.target.time()) / t.target._timeScale ); + } + if (vars.onStart) { //in case the user had an onStart in the vars - we don't want to overwrite it. + vars.onStart.apply(vars.onStartScope || t, vars.onStartParams || _blankArray); + } + } + return t; + }; + + p.tweenFromTo = function(fromTimeOrLabel, toTimeOrLabel, vars) { + vars = vars || {}; + vars.startAt = {time:this._parseTimeOrLabel(fromTimeOrLabel)}; + var t = this.tweenTo(toTimeOrLabel, vars); + return t.duration((Math.abs( t.vars.time - t.vars.startAt.time) / this._timeScale) || 0.001); + }; + + p.render = function(time, suppressEvents, force) { + if (this._gc) { + this._enabled(true, false); + } + this._active = !this._paused; + var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), + prevTime = this._time, + prevTotalTime = this._totalTime, + prevStart = this._startTime, + prevTimeScale = this._timeScale, + prevRawPrevTime = this._rawPrevTime, + prevPaused = this._paused, + prevCycle = this._cycle, + tween, isComplete, next, dur, callback; + if (time >= totalDur) { + if (!this._locked) { + this._totalTime = totalDur; + this._cycle = this._repeat; + } + if (!this._reversed) if (!this._hasPausedChild()) { + isComplete = true; + callback = "onComplete"; + if (this._duration === 0) if (time === 0 || this._rawPrevTime < 0) if (this._rawPrevTime !== time) { //In order to accommodate zero-duration timelines, we must discern the momentum/direction of time in order to render values properly when the "playhead" goes past 0 in the forward direction or lands directly on it, and also when it moves past it in the backward direction (from a postitive time to a negative time). + force = true; + } + } + this._rawPrevTime = time; + if (this._yoyo && (this._cycle & 1) !== 0) { + this._time = 0; + time = -0.000001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being rendered at the very beginning (their progress might be 0.000000000001 instead of 0 because when Flash performed _time - tween._startTime, floating point errors would return a value that was SLIGHTLY off) + } else { + this._time = this._duration; + time = this._duration + 0.000001; //to avoid occasional floating point rounding errors in Flash - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when Flash performed _time - tween._startTime, floating point errors would return a value that was SLIGHTLY off) + } + + } else if (time <= 0) { + if (!this._locked) { + this._totalTime = this._cycle = 0; + } + this._time = 0; + if (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime > 0 && !this._locked)) { + callback = "onReverseComplete"; + isComplete = this._reversed; + } + if (time < 0) { + this._active = false; + if (this._duration === 0) if (this._rawPrevTime >= 0) { //zero-duration timelines are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the "playhead" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's "playhead" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered. + force = true; + } + } else if (!this._initted) { + force = true; + } + this._rawPrevTime = time; + time = (this._duration === 0) ? 0 : -0.000001; //to avoid occasional floating point rounding errors - sometimes child tweens/timelines were not being rendered at the very beginning (their progress might be 0.000000000001 instead of 0 because when Flash performed _time - tween._startTime, floating point errors would return a value that was SLIGHTLY off) + + } else { + this._time = this._rawPrevTime = time; + if (!this._locked) { + this._totalTime = time; + if (this._repeat !== 0) { + var cycleDuration = this._duration + this._repeatDelay; + this._cycle = (this._totalTime / cycleDuration) >> 0; //originally _totalTime % cycleDuration but floating point errors caused problems, so I normalized it. (4 % 0.8 should be 0 but Flash reports it as 0.79999999!) + if (this._cycle !== 0) if (this._cycle === this._totalTime / cycleDuration) { + this._cycle--; //otherwise when rendered exactly at the end time, it will act as though it is repeating (at the beginning) + } + this._time = this._totalTime - (this._cycle * cycleDuration); + if (this._yoyo) if ((this._cycle & 1) !== 0) { + this._time = this._duration - this._time; + } + if (this._time > this._duration) { + this._time = this._duration; + time = this._duration + 0.000001; //to avoid occasional floating point rounding errors in Flash - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when Flash performed _time - tween._startTime, floating point errors would return a value that was SLIGHTLY off) + } else if (this._time < 0) { + this._time = time = 0; + } else { + time = this._time; + } + } + } + } + + if (this._cycle !== prevCycle) if (!this._locked) { + /* + make sure children at the end/beginning of the timeline are rendered properly. If, for example, + a 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which + would get transated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there + could be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So + we need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must + ensure that zero-duration tweens at the very beginning or end of the TimelineMax work. + */ + var backwards = (this._yoyo && (prevCycle & 1) !== 0), + wrap = (backwards === (this._yoyo && (this._cycle & 1) !== 0)), + recTotalTime = this._totalTime, + recCycle = this._cycle, + recRawPrevTime = this._rawPrevTime, + recTime = this._time; + + this._totalTime = prevCycle * this._duration; + if (this._cycle < prevCycle) { + backwards = !backwards; + } else { + this._totalTime += this._duration; + } + this._time = prevTime; //temporarily revert _time so that render() renders the children in the correct order. Without this, tweens won't rewind correctly. We could arhictect things in a "cleaner" way by splitting out the rendering queue into a separate method but for performance reasons, we kept it all inside this method. + + this._rawPrevTime = (this._duration === 0) ? prevRawPrevTime - 0.00001 : prevRawPrevTime; + this._cycle = prevCycle; + this._locked = true; //prevents changes to totalTime and skips repeat/yoyo behavior when we recursively call render() + prevTime = (backwards) ? 0 : this._duration; + this.render(prevTime, suppressEvents, (this._duration === 0)); + if (!suppressEvents) if (!this._gc) { + if (this.vars.onRepeat) { + this.vars.onRepeat.apply(this.vars.onRepeatScope || this, this.vars.onRepeatParams || _blankArray); + } + } + if (wrap) { + prevTime = (backwards) ? this._duration + 0.000001 : -0.000001; + this.render(prevTime, true, false); + } + this._time = recTime; + this._totalTime = recTotalTime; + this._cycle = recCycle; + this._rawPrevTime = recRawPrevTime; + this._locked = false; + } + + if (this._time === prevTime && !force) { + if (prevTotalTime !== this._totalTime) if (this._onUpdate) if (!suppressEvents) { //so that onUpdate fires even during the repeatDelay - as long as the totalTime changed, we should trigger onUpdate. + this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray); + } + return; + } else if (!this._initted) { + this._initted = true; + } + + if (prevTotalTime === 0) if (this.vars.onStart) if (this._totalTime !== 0) if (!suppressEvents) { + this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); + } + + if (this._time > prevTime) { + tween = this._first; + while (tween) { + next = tween._next; //record it here because the value could change after rendering... + if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering + break; + } else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) { + if (!tween._reversed) { + tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, false); + } else { + tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, false); + } + + } + tween = next; + } + } else { + tween = this._last; + while (tween) { + next = tween._prev; //record it here because the value could change after rendering... + if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering + break; + } else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) { + if (!tween._reversed) { + tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, false); + } else { + tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, false); + } + + } + tween = next; + } + } + + if (this._onUpdate) if (!suppressEvents) { + this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray); + } + if (callback) if (!this._locked) if (!this._gc) if (prevStart === this._startTime || prevTimeScale !== this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate + if (isComplete) { + if (this._timeline.autoRemoveChildren) { + this._enabled(false, false); + } + this._active = false; + } + if (!suppressEvents) if (this.vars[callback]) { + this.vars[callback].apply(this.vars[callback + "Scope"] || this, this.vars[callback + "Params"] || _blankArray); + } + } + }; + + p.getActive = function(nested, tweens, timelines) { + if (nested == null) { + nested = true; + } + if (tweens == null) { + tweens = true; + } + if (timelines == null) { + timelines = false; + } + var a = [], + all = this.getChildren(nested, tweens, timelines), + cnt = 0, + l = all.length, + i, tween; + for (i = 0; i < l; i++) { + tween = all[i]; + //note: we cannot just check tween.active because timelines that contain paused children will continue to have "active" set to true even after the playhead passes their end point (technically a timeline can only be considered complete after all of its children have completed too, but paused tweens are...well...just waiting and until they're unpaused we don't know where their end point will be). + if (!tween._paused) if (tween._timeline._time >= tween._startTime) if (tween._timeline._time < tween._startTime + tween._totalDuration / tween._timeScale) if (!_getGlobalPaused(tween._timeline)) { + a[cnt++] = tween; + } + } + return a; + }; + + + p.getLabelAfter = function(time) { + if (!time) if (time !== 0) { //faster than isNan() + time = this._time; + } + var labels = this.getLabelsArray(), + l = labels.length, + i; + for (i = 0; i < l; i++) { + if (labels[i].time > time) { + return labels[i].name; + } + } + return null; + }; + + p.getLabelBefore = function(time) { + if (time == null) { + time = this._time; + } + var labels = this.getLabelsArray(), + i = labels.length; + while (--i > -1) { + if (labels[i].time < time) { + return labels[i].name; + } + } + return null; + }; + + p.getLabelsArray = function() { + var a = [], + cnt = 0, + p; + for (p in this._labels) { + a[cnt++] = {time:this._labels[p], name:p}; + } + a.sort(function(a,b) { + return a.time - b.time; + }); + return a; + }; + + +//---- GETTERS / SETTERS ------------------------------------------------------------------------------------------------------- + + p.progress = function(value) { + return (!arguments.length) ? this._time / this.duration() : this.totalTime( this.duration() * ((this._yoyo && (this._cycle & 1) !== 0) ? 1 - value : value) + (this._cycle * (this._duration + this._repeatDelay)), false); + }; + + p.totalProgress = function(value) { + return (!arguments.length) ? this._totalTime / this.totalDuration() : this.totalTime( this.totalDuration() * value, false); + }; + + p.totalDuration = function(value) { + if (!arguments.length) { + if (this._dirty) { + TimelineLite.prototype.totalDuration.call(this); //just forces refresh + //Instead of Infinity, we use 999999999999 so that we can accommodate reverses. + this._totalDuration = (this._repeat === -1) ? 999999999999 : this._duration * (this._repeat + 1) + (this._repeatDelay * this._repeat); + } + return this._totalDuration; + } + return (this._repeat === -1) ? this : this.duration( (value - (this._repeat * this._repeatDelay)) / (this._repeat + 1) ); + }; + + p.time = function(value, suppressEvents) { + if (!arguments.length) { + return this._time; + } + if (this._dirty) { + this.totalDuration(); + } + if (value > this._duration) { + value = this._duration; + } + if (this._yoyo && (this._cycle & 1) !== 0) { + value = (this._duration - value) + (this._cycle * (this._duration + this._repeatDelay)); + } else if (this._repeat !== 0) { + value += this._cycle * (this._duration + this._repeatDelay); + } + return this.totalTime(value, suppressEvents); + }; + + p.repeat = function(value) { + if (!arguments.length) { + return this._repeat; + } + this._repeat = value; + return this._uncache(true); + }; + + p.repeatDelay = function(value) { + if (!arguments.length) { + return this._repeatDelay; + } + this._repeatDelay = value; + return this._uncache(true); + }; + + p.yoyo = function(value) { + if (!arguments.length) { + return this._yoyo; + } + this._yoyo = value; + return this; + }; + + p.currentLabel = function(value) { + if (!arguments.length) { + return this.getLabelBefore(this._time + 0.00000001); + } + return this.seek(value, true); + }; + + return TimelineMax; + + }, true); + + + + + + + +/* + * ---------------------------------------------------------------- + * TimelineLite + * ---------------------------------------------------------------- + */ + + _gsDefine("TimelineLite", ["core.Animation","core.SimpleTimeline","TweenLite"], function(Animation, SimpleTimeline, TweenLite) { + + "use strict"; + + var TimelineLite = function(vars) { + SimpleTimeline.call(this, vars); + this._labels = {}; + this.autoRemoveChildren = (this.vars.autoRemoveChildren == true); + this.smoothChildTiming = (this.vars.smoothChildTiming == true); + this._sortChildren = true; + this._onUpdate = this.vars.onUpdate; + var i = _paramProps.length, + j, a; + while (--i > -1) { + if ((a = this.vars[_paramProps[i]])) { + j = a.length; + while (--j > -1) { + if (a[j] === "{self}") { + a = this.vars[_paramProps[i]] = a.concat(); //copy the array in case the user referenced the same array in multiple timelines/tweens (each {self} should be unique) + a[j] = this; + } + } + } + } + if (this.vars.tweens instanceof Array) { + this.insertMultiple(this.vars.tweens, 0, this.vars.align || "normal", this.vars.stagger || 0); + } + }, + _paramProps = ["onStartParams","onUpdateParams","onCompleteParams","onReverseCompleteParams","onRepeatParams"], + _blankArray = [], + _copy = function(vars) { + var copy = {}, p; + for (p in vars) { + copy[p] = vars[p]; + } + return copy; + }, + p = TimelineLite.prototype = new SimpleTimeline(); + + TimelineLite.version = 1.641; + p.constructor = TimelineLite; + p.kill()._gc = false; + + p.to = function(target, duration, vars, offsetOrLabel, baseTimeOrLabel) { + return this.insert( new TweenLite(target, duration, vars), this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + p.from = function(target, duration, vars, offsetOrLabel, baseTimeOrLabel) { + return this.insert( TweenLite.from(target, duration, vars), this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + p.fromTo = function(target, duration, fromVars, toVars, offsetOrLabel, baseTimeOrLabel) { + return this.insert( TweenLite.fromTo(target, duration, fromVars, toVars), this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + p.staggerTo = function(targets, duration, vars, stagger, offsetOrLabel, baseTimeOrLabel, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { + var tl = new TimelineLite({onComplete:onCompleteAll, onCompleteParams:onCompleteAllParams, onCompleteScope:onCompleteAllScope}); + stagger = stagger || 0; + for (var i = 0; i < targets.length; i++) { + if (vars.startAt != null) { + vars.startAt = _copy(vars.startAt); + } + tl.insert( new TweenLite(targets[i], duration, _copy(vars)), i * stagger); + } + return this.insert(tl, this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + p.staggerFrom = function(targets, duration, vars, stagger, offsetOrLabel, baseTimeOrLabel, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { + if (vars.immediateRender == null) { + vars.immediateRender = true; + } + vars.runBackwards = true; + return this.staggerTo(targets, duration, vars, stagger, offsetOrLabel, baseTimeOrLabel, onCompleteAll, onCompleteAllParams, onCompleteAllScope); + }; + + p.staggerFromTo = function(targets, duration, fromVars, toVars, stagger, offsetOrLabel, baseTimeOrLabel, onCompleteAll, onCompleteAllParams, onCompleteAllScope) { + toVars.startAt = fromVars; + if (fromVars.immediateRender) { + toVars.immediateRender = true; + } + return this.staggerTo(targets, duration, toVars, stagger, offsetOrLabel, baseTimeOrLabel, onCompleteAll, onCompleteAllParams, onCompleteAllScope); + }; + + p.call = function(callback, params, scope, offsetOrLabel, baseTimeOrLabel) { + return this.insert( TweenLite.delayedCall(0, callback, params, scope), this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + p.set = function(target, vars, offsetOrLabel, baseTimeOrLabel) { + vars.immediateRender = false; + return this.insert( new TweenLite(target, 0, vars), this._parseTimeOrLabel(baseTimeOrLabel, offsetOrLabel, true)); + }; + + TimelineLite.exportRoot = function(vars, ignoreDelayedCalls) { + vars = vars || {}; + if (vars.smoothChildTiming == null) { + vars.smoothChildTiming = true; + } + var tl = new TimelineLite(vars), + root = tl._timeline; + if (ignoreDelayedCalls == null) { + ignoreDelayedCalls = true; + } + root._remove(tl, true); + tl._startTime = 0; + tl._rawPrevTime = tl._time = tl._totalTime = root._time; + var tween = root._first, next; + while (tween) { + next = tween._next; + if (!ignoreDelayedCalls || !(tween instanceof TweenLite && tween.target === tween.vars.onComplete)) { + tl.insert(tween, tween._startTime - tween._delay); + } + tween = next; + } + root.insert(tl, 0); + return tl; + }; + + p.insert = function(value, timeOrLabel) { + if (value instanceof Animation) { + //continue... + } else if (value instanceof Array) { + return this.insertMultiple(value, timeOrLabel); + } else if (typeof(value) === "string") { + return this.addLabel(value, this._parseTimeOrLabel(timeOrLabel || 0, 0, true)); + } else if (typeof(value) === "function") { + value = TweenLite.delayedCall(0, value); + } else { + throw ("ERROR: Cannot insert() " + value + " into the TimelineLite/Max because it is neither a tween, timeline, function, nor a String."); + return this; + } + + SimpleTimeline.prototype.insert.call(this, value, this._parseTimeOrLabel(timeOrLabel || 0, 0, true)); + + //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. + if (this._gc) if (!this._paused) if (this._time === this._duration) if (this._time < this.duration()) { + //in case any of the anscestors had completed but should now be enabled... + var tl = this; + while (tl._gc && tl._timeline) { + if (tl._timeline.smoothChildTiming) { + tl.totalTime(tl._totalTime, true); //also enables them + } else { + tl._enabled(true, false); + } + tl = tl._timeline; + } + } + return this; + }; + + p.remove = function(value) { + if (value instanceof Animation) { + return this._remove(value, false); + } else if (value instanceof Array) { + var i = value.length; + while (--i > -1) { + this.remove(value[i]); + } + return this; + } else if (typeof(value) === "string") { + return this.removeLabel(value); + } + return this.kill(null, value); + }; + + p.append = function(value, offsetOrLabel) { + return this.insert(value, this._parseTimeOrLabel(null, offsetOrLabel, true)); + }; + + p.insertMultiple = function(tweens, timeOrLabel, align, stagger) { + align = align || "normal"; + stagger = stagger || 0; + var i, tween, curTime = this._parseTimeOrLabel(timeOrLabel || 0, 0, true), l = tweens.length; + for (i = 0; i < l; i++) { + if ((tween = tweens[i]) instanceof Array) { + tween = new TimelineLite({tweens:tween}); + } + this.insert(tween, curTime); + if (typeof(tween) === "string" || typeof(tween) === "function") { + //do nothing + } else if (align === "sequence") { + curTime = tween._startTime + (tween.totalDuration() / tween._timeScale); + } else if (align === "start") { + tween._startTime -= tween.delay(); + } + curTime += stagger; + } + return this._uncache(true); + }; + + p.appendMultiple = function(tweens, offsetOrLabel, align, stagger) { + return this.insertMultiple(tweens, this._parseTimeOrLabel(null, offsetOrLabel, true), align, stagger); + }; + + p.addLabel = function(label, time) { + this._labels[label] = time; + return this; + }; + + p.removeLabel = function(label) { + delete this._labels[label]; + return this; + }; + + p.getLabelTime = function(label) { + return (this._labels[label] != null) ? this._labels[label] : -1; + }; + + p._parseTimeOrLabel = function(timeOrLabel, offsetOrLabel, appendIfAbsent) { + if (typeof(offsetOrLabel) === "string") { + return this._parseTimeOrLabel(offsetOrLabel, ((appendIfAbsent && typeof(timeOrLabel) === "number" && this._labels[offsetOrLabel] == null) ? timeOrLabel - this.duration() : 0), appendIfAbsent); + } + offsetOrLabel = offsetOrLabel || 0; + if (timeOrLabel == null) { + return this.duration() + offsetOrLabel; + } else if (typeof(timeOrLabel) === "string" && isNaN(timeOrLabel)) { + if (this._labels[timeOrLabel] == null) { + return (appendIfAbsent) ? (this._labels[timeOrLabel] = this.duration() + offsetOrLabel) : offsetOrLabel; + } + return this._labels[timeOrLabel] + offsetOrLabel; + } + return Number(timeOrLabel) + offsetOrLabel; + }; + + p.seek = function(timeOrLabel, suppressEvents) { + return this.totalTime(this._parseTimeOrLabel(timeOrLabel), (suppressEvents != false)); + } + + p.stop = function() { + return this.paused(true); + }; + + p.gotoAndPlay = function(timeOrLabel, suppressEvents) { + return SimpleTimeline.prototype.play.call(this, timeOrLabel, suppressEvents); + }; + + p.gotoAndStop = function(timeOrLabel, suppressEvents) { + return this.pause(timeOrLabel, suppressEvents); + }; + + p.render = function(time, suppressEvents, force) { + if (this._gc) { + this._enabled(true, false); + } + this._active = !this._paused; + var totalDur = (!this._dirty) ? this._totalDuration : this.totalDuration(), + prevTime = this._time, + prevStart = this._startTime, + prevTimeScale = this._timeScale, + prevPaused = this._paused, + tween, isComplete, next, callback; + if (time >= totalDur) { + this._totalTime = this._time = totalDur; + if (!this._reversed) if (!this._hasPausedChild()) { + isComplete = true; + callback = "onComplete"; + if (this._duration === 0) if (time === 0 || this._rawPrevTime < 0) if (this._rawPrevTime !== time) { //In order to accommodate zero-duration timelines, we must discern the momentum/direction of time in order to render values properly when the "playhead" goes past 0 in the forward direction or lands directly on it, and also when it moves past it in the backward direction (from a postitive time to a negative time). + force = true; + } + } + this._rawPrevTime = time; + time = totalDur + 0.000001; //to avoid occassional floating point rounding errors - sometimes child tweens/timelines were not being fully completed (their progress might be 0.999999999999998 instead of 1 because when _time - tween._startTime is performed, floating point errors would return a value that was SLIGHTLY off) + + } else if (time <= 0) { + this._totalTime = this._time = 0; + if (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime > 0)) { + callback = "onReverseComplete"; + isComplete = this._reversed; + } + if (time < 0) { + this._active = false; + if (this._duration === 0) if (this._rawPrevTime >= 0) { //zero-duration timelines are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the "playhead" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's "playhead" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered. + force = true; + } + } else if (!this._initted) { + force = true; + } + this._rawPrevTime = time; + time = -0.000001; //to avoid occassional floating point rounding errors in Flash - sometimes child tweens/timelines were not being rendered at the very beginning (their progress might be 0.000000000001 instead of 0 because when Flash performed _time - tween._startTime, floating point errors would return a value that was SLIGHTLY off) + + } else { + this._totalTime = this._time = this._rawPrevTime = time; + } + + if (this._time === prevTime && !force) { + return; + } else if (!this._initted) { + this._initted = true; + } + if (prevTime === 0) if (this.vars.onStart) if (this._time !== 0) if (!suppressEvents) { + this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); + } + + if (this._time > prevTime) { + tween = this._first; + while (tween) { + next = tween._next; //record it here because the value could change after rendering... + if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering + break; + } else if (tween._active || (tween._startTime <= this._time && !tween._paused && !tween._gc)) { + + if (!tween._reversed) { + tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, false); + } else { + tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, false); + } + + } + tween = next; + } + } else { + tween = this._last; + while (tween) { + next = tween._prev; //record it here because the value could change after rendering... + if (this._paused && !prevPaused) { //in case a tween pauses the timeline when rendering + break; + } else if (tween._active || (tween._startTime <= prevTime && !tween._paused && !tween._gc)) { + + if (!tween._reversed) { + tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, false); + } else { + tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, false); + } + + } + tween = next; + } + } + + if (this._onUpdate) if (!suppressEvents) { + this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray); + } + + if (callback) if (!this._gc) if (prevStart === this._startTime || prevTimeScale != this._timeScale) if (this._time === 0 || totalDur >= this.totalDuration()) { //if one of the tweens that was rendered altered this timeline's startTime (like if an onComplete reversed the timeline), it probably isn't complete. If it is, don't worry, because whatever call altered the startTime would complete if it was necessary at the new time. The only exception is the timeScale property. Also check _gc because there's a chance that kill() could be called in an onUpdate + if (isComplete) { + if (this._timeline.autoRemoveChildren) { + this._enabled(false, false); + } + this._active = false; + } + if (!suppressEvents) if (this.vars[callback]) { + this.vars[callback].apply(this.vars[callback + "Scope"] || this, this.vars[callback + "Params"] || _blankArray); + } + } + }; + + p._hasPausedChild = function() { + var tween = this._first; + while (tween) { + if (tween._paused || ((tween instanceof TimelineLite) && tween._hasPausedChild())) { + return true; + } + tween = tween._next; + } + return false; + }; + + p.getChildren = function(nested, tweens, timelines, ignoreBeforeTime) { + ignoreBeforeTime = ignoreBeforeTime || -9999999999; + var a = [], + tween = this._first, + cnt = 0; + while (tween) { + if (tween._startTime < ignoreBeforeTime) { + //do nothing + } else if (tween instanceof TweenLite) { + if (tweens != false) { + a[cnt++] = tween; + } + } else { + if (timelines != false) { + a[cnt++] = tween; + } + if (nested != false) { + a = a.concat(tween.getChildren(true, tweens, timelines)); + cnt = a.length; + } + } + tween = tween._next; + } + return a; + }; + + p.getTweensOf = function(target, nested) { + var tweens = TweenLite.getTweensOf(target), + i = tweens.length, + a = [], + cnt = 0; + while (--i > -1) { + if (tweens[i].timeline === this || (nested && this._contains(tweens[i]))) { + a[cnt++] = tweens[i]; + } + } + return a; + }; + + p._contains = function(tween) { + var tl = tween.timeline; + while (tl) { + if (tl === this) { + return true; + } + tl = tl.timeline; + } + return false; + }; + + p.shiftChildren = function(amount, adjustLabels, ignoreBeforeTime) { + ignoreBeforeTime = ignoreBeforeTime || 0; + var tween = this._first; + while (tween) { + if (tween._startTime >= ignoreBeforeTime) { + tween._startTime += amount; + } + tween = tween._next; + } + if (adjustLabels) { + for (var p in this._labels) { + if (this._labels[p] >= ignoreBeforeTime) { + this._labels[p] += amount; + } + } + } + return this._uncache(true); + }; + + p._kill = function(vars, target) { + if (vars == null) if (target == null) { + return this._enabled(false, false); + } + var tweens = (target == null) ? this.getChildren(true, true, false) : this.getTweensOf(target), + i = tweens.length, + changed = false; + while (--i > -1) { + if (tweens[i]._kill(vars, target)) { + changed = true; + } + } + return changed; + }; + + p.clear = function(labels) { + var tweens = this.getChildren(false, true, true), + i = tweens.length; + this._time = this._totalTime = 0; + while (--i > -1) { + tweens[i]._enabled(false, false); + } + if (labels != false) { + this._labels = {}; + } + return this._uncache(true); + }; + + p.invalidate = function() { + var tween = this._first; + while (tween) { + tween.invalidate(); + tween = tween._next; + } + return this; + }; + + p._enabled = function(enabled, ignoreTimeline) { + if (enabled === this._gc) { + var tween = this._first; + while (tween) { + tween._enabled(enabled, true); + tween = tween._next; + } + } + return SimpleTimeline.prototype._enabled.call(this, enabled, ignoreTimeline); + }; + + p.progress = function(value) { + return (!arguments.length) ? this._time / this.duration() : this.totalTime(this.duration() * value, false); + }; + + p.duration = function(value) { + if (!arguments.length) { + if (this._dirty) { + this.totalDuration(); //just triggers recalculation + } + return this._duration; + } + if (this.duration() !== 0) if (value !== 0) { + this.timeScale(this._duration / value); + } + return this; + }; + + p.totalDuration = function(value) { + if (!arguments.length) { + if (this._dirty) { + var max = 0, + tween = this._first, + prevStart = -999999999999, + next, end; + while (tween) { + next = tween._next; //record it here in case the tween changes position in the sequence... + + if (tween._startTime < prevStart && this._sortChildren) { //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence + this.insert(tween, tween._startTime - tween._delay); + } else { + prevStart = tween._startTime; + } + if (tween._startTime < 0) {//children aren't allowed to have negative startTimes, so adjust here if one is found. + max -= tween._startTime; + this.shiftChildren(-tween._startTime, false, -9999999999); + } + end = tween._startTime + ((!tween._dirty ? tween._totalDuration : tween.totalDuration()) / tween._timeScale); + if (end > max) { + max = end; + } + + tween = next; + } + this._duration = this._totalDuration = max; + this._dirty = false; + } + return this._totalDuration; + } + if (this.totalDuration() !== 0) if (value !== 0) { + this.timeScale(this._totalDuration / value); + } + return this; + }; + + p.usesFrames = function() { + var tl = this._timeline; + while (tl._timeline) { + tl = tl._timeline; + } + return (tl === Animation._rootFramesTimeline); + }; + + p.rawTime = function() { + return (this._paused || (this._totalTime !== 0 && this._totalTime !== this._totalDuration)) ? this._totalTime : (this._timeline.rawTime() - this._startTime) * this._timeScale; + }; + + return TimelineLite; + + }, true); + +}); if (window._gsDefine) { _gsQueue.pop()(); } \ No newline at end of file diff --git a/duo/js/greensock-v12-js/src/uncompressed/TweenLite.js b/duo/js/greensock-v12-js/src/uncompressed/TweenLite.js new file mode 100755 index 0000000..4871526 --- /dev/null +++ b/duo/js/greensock-v12-js/src/uncompressed/TweenLite.js @@ -0,0 +1,1393 @@ +/*! + * VERSION: beta 1.668 + * DATE: 2013-01-01 + * JavaScript (ActionScript 3 and 2 also available) + * UPDATES AND DOCS AT: http://www.greensock.com + * + * Copyright (c) 2008-2013, GreenSock. All rights reserved. + * This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for + * Club GreenSock members, the software agreement that was issued with your membership. + * + * @author: Jack Doyle, jack@greensock.com + */ +(function(window) { + + "use strict"; + var _namespace = function(ns) { + var a = ns.split("."), + p = window, i; + for (i = 0; i < a.length; i++) { + p[a[i]] = p = p[a[i]] || {}; + } + return p; + }, + gs = _namespace("com.greensock"), + a, i, e, e2, p, _gsInit, + _classLookup = {}, + + //_DepClass is for defining a dependent class. ns = namespace (leaving off "com.greensock." as that's assumed), dep = an array of namespaces that are required, def = the function that will return the class definition (this function will be passed each dependency in order as soon as they arrive), global = if true, the class is added to the global scope (window) or if requirejs is being used, it will tap into that instead. + _DepClass = function(ns, dep, def, global) { + this.sc = (_classLookup[ns]) ? _classLookup[ns].sc : []; //subclasses + _classLookup[ns] = this; + this.gsClass = null; + this.def = def; + var _dep = dep || [], + _classes = []; + this.check = function(init) { + var i = _dep.length, cnt = 0, cur; + while (--i > -1) { + if ((cur = _classLookup[_dep[i]] || new _DepClass(_dep[i])).gsClass) { + _classes[i] = cur.gsClass; + } else { + cnt++; + if (init) { + cur.sc.push(this); + } + } + } + if (cnt === 0 && def) { + var a = ("com.greensock." + ns).split("."), + n = a.pop(), + cl = _namespace(a.join("."))[n] = this.gsClass = def.apply(def, _classes); + + //exports to multiple environments + if (global) { + (window.GreenSockGlobals || window)[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.) + if (typeof(define) === "function" && define.amd){ //AMD + define((window.GreenSockAMDPath ? window.GreenSockAMDPath + "/" : "") + ns.split(".").join("/"), [], function() { return cl; }); + } else if (typeof(module) !== "undefined" && module.exports){ //node + module.exports = cl; + } + } + + for (i = 0; i < this.sc.length; i++) { + this.sc[i].check(false); + } + + } + }; + this.check(true); + }, + //a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class). + _class = gs._class = function(ns, f, g) { + f = f || function() {}; + var c = new _DepClass(ns, [], function(){ return f; }, g); + return f; + }; + + //used to create _DepClass instances (which basically registers a class that has dependencies). ns = namespace, dep = dependencies (array), f = initialization function which should return the class, g = global (whether or not the class should be added to the global namespace (or if RequireJS is used, it will be defined as a named module instead) + window._gsDefine = function(ns, dep, f, g) { + return new _DepClass(ns, dep, f, g); + }; + + + +/* + * ---------------------------------------------------------------- + * Ease + * ---------------------------------------------------------------- + */ + var _baseParams = [0, 0, 1, 1], + _blankArray = [], + Ease = _class("easing.Ease", function(func, extraParams, type, power) { + this._func = func; + this._type = type || 0; + this._power = power || 0; + this._params = extraParams ? _baseParams.concat(extraParams) : _baseParams; + }, true); + + p = Ease.prototype; + p._calcEnd = false; + p.getRatio = function(p) { + if (this._func) { + this._params[0] = p; + return this._func.apply(null, this._params); + } + var t = this._type, + pw = this._power, + r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2; + if (pw === 1) { + r *= r; + } else if (pw === 2) { + r *= r * r; + } else if (pw === 3) { + r *= r * r * r; + } else if (pw === 4) { + r *= r * r * r * r; + } + return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2); + }; + + //create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut) + a = ["Linear","Quad","Cubic","Quart","Quint"]; + i = a.length; + while(--i > -1) { + e = _class("easing." + a[i], null, true); + e2 = _class("easing.Power" + i, null, true); + e.easeOut = e2.easeOut = new Ease(null, null, 1, i); + e.easeIn = e2.easeIn = new Ease(null, null, 2, i); + e.easeInOut = e2.easeInOut = new Ease(null, null, 3, i); + } + _class("easing.Strong", gs.easing.Power4, true); + gs.easing.Linear.easeNone = gs.easing.Linear.easeIn; + + +/* + * ---------------------------------------------------------------- + * EventDispatcher + * ---------------------------------------------------------------- + */ + var EventDispatcher = _class("events.EventDispatcher", function(target) { + this._listeners = {}; + this._eventTarget = target || this; + }); + p = EventDispatcher.prototype; + + p.addEventListener = function(type, callback, scope, useParam, priority) { + priority = priority || 0; + var list = this._listeners[type], + index = 0, + listener, i; + if (list == null) { + this._listeners[type] = list = []; + } + i = list.length; + while (--i > -1) { + listener = list[i]; + if (listener.c === callback) { + list.splice(i, 1); + } else if (index === 0 && listener.pr < priority) { + index = i + 1; + } + } + list.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority}); + }; + + p.removeEventListener = function(type, callback) { + var list = this._listeners[type], i; + if (list) { + i = list.length; + while (--i > -1) { + if (list[i].c === callback) { + list.splice(i, 1); + return; + } + } + } + }; + + p.dispatchEvent = function(type) { + var list = this._listeners[type]; + if (list) { + var i = list.length, + t = this._eventTarget, + listener; + while (--i > -1) { + listener = list[i]; + if (listener.up) { + listener.c.call(listener.s || t, {type:type, target:t}); + } else { + listener.c.call(listener.s || t); + } + } + } + }; + + +/* + * ---------------------------------------------------------------- + * Ticker + * ---------------------------------------------------------------- + */ + var _reqAnimFrame = window.requestAnimationFrame, + _cancelAnimFrame = window.cancelAnimationFrame, + _getTime = Date.now || function() {return new Date().getTime();}; + + //now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill. + a = ["ms","moz","webkit","o"]; + i = a.length; + while (--i > -1 && !_reqAnimFrame) { + _reqAnimFrame = window[a[i] + "RequestAnimationFrame"]; + _cancelAnimFrame = window[a[i] + "CancelAnimationFrame"] || window[a[i] + "CancelRequestAnimationFrame"]; + } + + _class("Ticker", function(fps, useRAF) { + var _self = this, + _startTime = _getTime(), + _useRAF = (useRAF !== false && _reqAnimFrame), + _fps, _req, _id, _gap, _nextTime, + _cancelReq = function() { + if (_id == null) { + return; + } + if (!_useRAF || !_cancelAnimFrame) { + window.clearTimeout(_id); + } else { + _cancelAnimFrame(_id); + } + _id = null; + }, + _tick = function(manual) { + _self.time = (_getTime() - _startTime) / 1000; + if (!_fps || _self.time >= _nextTime || (manual === true)) { + _self.frame++; + _nextTime = (_self.time > _nextTime) ? _self.time + _gap - (_self.time - _nextTime) : _self.time + _gap - 0.001; + if (_nextTime < _self.time + 0.001) { + _nextTime = _self.time + 0.001; + } + _self.dispatchEvent("tick"); + } + if (manual !== true) { + _id = _req(_tick); + } + }; + + EventDispatcher.call(_self); + this.time = this.frame = 0; + this.tick = function() { + _tick(true); + }; + + this.fps = function(value) { + if (!arguments.length) { + return _fps; + } + _fps = value; + _gap = 1 / (_fps || 60); + _nextTime = this.time + _gap; + _req = (_fps === 0) ? function(f){} : (!_useRAF || !_reqAnimFrame) ? function(f) { return window.setTimeout( f, (((_nextTime - _self.time) * 1000 + 1) >> 0) || 1); } : _reqAnimFrame; + _cancelReq(); + _id = _req(_tick); + }; + + this.useRAF = function(value) { + if (!arguments.length) { + return _useRAF; + } + _cancelReq(); + _useRAF = value; + _self.fps(_fps); + }; + _self.fps(fps); + + //a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1-second timeout that automatically falls back to setTimeout() if it senses this condition. + window.setTimeout(function() { + if (_useRAF && !_id) { + _self.useRAF(false); + } + }, 1000); + }); + + p = gs.Ticker.prototype = new gs.events.EventDispatcher(); + p.constructor = gs.Ticker; + + +/* + * ---------------------------------------------------------------- + * Animation + * ---------------------------------------------------------------- + */ + var Animation = _class("core.Animation", function(duration, vars) { + this.vars = vars || {}; + this._duration = this._totalDuration = duration || 0; + this._delay = Number(this.vars.delay) || 0; + this._timeScale = 1; + this._active = (this.vars.immediateRender === true); + this.data = this.vars.data; + this._reversed = (this.vars.reversed === true); + + if (!_rootTimeline) { + return; + } + if (!_gsInit) { + _ticker.tick(); //the first time an animation (tween or timeline) is created, we should refresh the time in order to avoid a gap. The Ticker's initial time that it records might be very early in the load process and the user may have loaded several other large scripts in the mean time, but we want tweens to act as though they started when the page's onload was fired. Also remember that the requestAnimationFrame likely won't be called until the first screen redraw. + _gsInit = true; + } + + var tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline; + tl.insert(this, tl._time); + + if (this.vars.paused) { + this.paused(true); + } + }), + _ticker = Animation.ticker = new gs.Ticker(); + + p = Animation.prototype; + p._dirty = p._gc = p._initted = p._paused = false; + p._totalTime = p._time = 0; + p._rawPrevTime = -1; + p._next = p._last = p._onUpdate = p._timeline = p.timeline = null; + p._paused = false; + + p.play = function(from, suppressEvents) { + if (arguments.length) { + this.seek(from, suppressEvents); + } + this.reversed(false); + return this.paused(false); + }; + + p.pause = function(atTime, suppressEvents) { + if (arguments.length) { + this.seek(atTime, suppressEvents); + } + return this.paused(true); + }; + + p.resume = function(from, suppressEvents) { + if (arguments.length) { + this.seek(from, suppressEvents); + } + return this.paused(false); + }; + + p.seek = function(time, suppressEvents) { + return this.totalTime(Number(time), (suppressEvents !== false)); + }; + + p.restart = function(includeDelay, suppressEvents) { + this.reversed(false); + this.paused(false); + return this.totalTime((includeDelay) ? -this._delay : 0, (suppressEvents !== false)); + }; + + p.reverse = function(from, suppressEvents) { + if (arguments.length) { + this.seek((from || this.totalDuration()), suppressEvents); + } + this.reversed(true); + return this.paused(false); + }; + + p.render = function() { + + }; + + p.invalidate = function() { + return this; + }; + + p._enabled = function (enabled, ignoreTimeline) { + this._gc = !enabled; + this._active = (enabled && !this._paused && this._totalTime > 0 && this._totalTime < this._totalDuration); + if (ignoreTimeline !== true) { + if (enabled && this.timeline == null) { + this._timeline.insert(this, this._startTime - this._delay); + } else if (!enabled && this.timeline != null) { + this._timeline._remove(this, true); + } + } + return false; + }; + + + p._kill = function(vars, target) { + return this._enabled(false, false); + }; + + p.kill = function(vars, target) { + this._kill(vars, target); + return this; + }; + + p._uncache = function(includeSelf) { + var tween = includeSelf ? this : this.timeline; + while (tween) { + tween._dirty = true; + tween = tween.timeline; + } + return this; + }; + +//----Animation getters/setters -------------------------------------------------------- + + p.eventCallback = function(type, callback, params, scope) { + if (type == null) { + return null; + } else if (type.substr(0,2) === "on") { + if (arguments.length === 1) { + return this.vars[type]; + } + if (callback == null) { + delete this.vars[type]; + } else { + this.vars[type] = callback; + this.vars[type + "Params"] = params; + this.vars[type + "Scope"] = scope; + if (params) { + var i = params.length; + while (--i > -1) { + if (params[i] === "{self}") { + params = this.vars[type + "Params"] = params.concat(); //copying the array avoids situations where the same array is passed to multiple tweens/timelines and {self} doesn't correctly point to each individual instance. + params[i] = this; + } + } + } + } + if (type === "onUpdate") { + this._onUpdate = callback; + } + } + return this; + }; + + p.delay = function(value) { + if (!arguments.length) { + return this._delay; + } + if (this._timeline.smoothChildTiming) { + this.startTime( this._startTime + value - this._delay ); + } + this._delay = value; + return this; + }; + + p.duration = function(value) { + if (!arguments.length) { + this._dirty = false; + return this._duration; + } + this._duration = this._totalDuration = value; + this._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration. + if (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) { + this.totalTime(this._totalTime * (value / this._duration), true); + } + return this; + }; + + p.totalDuration = function(value) { + this._dirty = false; + return (!arguments.length) ? this._totalDuration : this.duration(value); + }; + + p.time = function(value, suppressEvents) { + if (!arguments.length) { + return this._time; + } + if (this._dirty) { + this.totalDuration(); + } + if (value > this._duration) { + value = this._duration; + } + return this.totalTime(value, suppressEvents); + }; + + p.totalTime = function(time, suppressEvents) { + if (!arguments.length) { + return this._totalTime; + } + if (this._timeline) { + if (time < 0) { + time += this.totalDuration(); + } + if (this._timeline.smoothChildTiming) { + if (this._dirty) { + this.totalDuration(); + } + if (time > this._totalDuration) { + time = this._totalDuration; + } + this._startTime = (this._paused ? this._pauseTime : this._timeline._time) - ((!this._reversed ? time : this._totalDuration - time) / this._timeScale); + if (!this._timeline._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the anscestors as dirty too, so skip the function call here. + this._uncache(false); + } + if (!this._timeline._active) { + //in case any of the anscestors had completed but should now be enabled... + var tl = this._timeline; + while (tl._timeline) { + tl.totalTime(tl._totalTime, true); + tl = tl._timeline; + } + } + } + if (this._gc) { + this._enabled(true, false); + } + if (this._totalTime !== time) { + this.render(time, suppressEvents, false); + } + } + return this; + }; + + p.startTime = function(value) { + if (!arguments.length) { + return this._startTime; + } + if (value !== this._startTime) { + this._startTime = value; + if (this.timeline) if (this.timeline._sortChildren) { + this.timeline.insert(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct. + } + } + return this; + }; + + p.timeScale = function(value) { + if (!arguments.length) { + return this._timeScale; + } + value = value || 0.000001; //can't allow zero because it'll throw the math off + if (this._timeline && this._timeline.smoothChildTiming) { + var t = (this._pauseTime || this._pauseTime === 0) ? this._pauseTime : this._timeline._totalTime; + this._startTime = t - ((t - this._startTime) * this._timeScale / value); + } + this._timeScale = value; + return this._uncache(false); + }; + + p.reversed = function(value) { + if (!arguments.length) { + return this._reversed; + } + if (value != this._reversed) { + this._reversed = value; + this.totalTime(this._totalTime, true); + } + return this; + }; + + p.paused = function(value) { + if (!arguments.length) { + return this._paused; + } + if (value != this._paused) if (this._timeline) { + if (!value && this._timeline.smoothChildTiming) { + this._startTime += this._timeline.rawTime() - this._pauseTime; + this._uncache(false); + } + this._pauseTime = (value) ? this._timeline.rawTime() : null; + this._paused = value; + this._active = (!this._paused && this._totalTime > 0 && this._totalTime < this._totalDuration); + } + if (this._gc) if (!value) { + this._enabled(true, false); + } + return this; + }; + + +/* + * ---------------------------------------------------------------- + * SimpleTimeline + * ---------------------------------------------------------------- + */ + var SimpleTimeline = _class("core.SimpleTimeline", function(vars) { + Animation.call(this, 0, vars); + this.autoRemoveChildren = this.smoothChildTiming = true; + }); + + p = SimpleTimeline.prototype = new Animation(); + p.constructor = SimpleTimeline; + p.kill()._gc = false; + p._first = p._last = null; + p._sortChildren = false; + + p.insert = function(tween, time) { + tween._startTime = Number(time || 0) + tween._delay; + if (tween._paused) if (this !== tween._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order). + tween._pauseTime = tween._startTime + ((this.rawTime() - tween._startTime) / tween._timeScale); + } + if (tween.timeline) { + tween.timeline._remove(tween, true); //removes from existing timeline so that it can be properly added to this one. + } + tween.timeline = tween._timeline = this; + if (tween._gc) { + tween._enabled(true, true); + } + + var prevTween = this._last; + if (this._sortChildren) { + var st = tween._startTime; + while (prevTween && prevTween._startTime > st) { + prevTween = prevTween._prev; + } + } + if (prevTween) { + tween._next = prevTween._next; + prevTween._next = tween; + } else { + tween._next = this._first; + this._first = tween; + } + if (tween._next) { + tween._next._prev = tween; + } else { + this._last = tween; + } + tween._prev = prevTween; + + if (this._timeline) { + this._uncache(true); + } + return this; + }; + + p._remove = function(tween, skipDisable) { + if (tween.timeline === this) { + if (!skipDisable) { + tween._enabled(false, true); + } + tween.timeline = null; + + if (tween._prev) { + tween._prev._next = tween._next; + } else if (this._first === tween) { + this._first = tween._next; + } + if (tween._next) { + tween._next._prev = tween._prev; + } else if (this._last === tween) { + this._last = tween._prev; + } + + if (this._timeline) { + this._uncache(true); + } + } + return this; + }; + + p.render = function(time, suppressEvents, force) { + var tween = this._first, + next; + this._totalTime = this._time = this._rawPrevTime = time; + while (tween) { + next = tween._next; //record it here because the value could change after rendering... + if (tween._active || (time >= tween._startTime && !tween._paused)) { + if (!tween._reversed) { + tween.render((time - tween._startTime) * tween._timeScale, suppressEvents, false); + } else { + tween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, false); + } + } + tween = next; + } + }; + + p.rawTime = function() { + return this._totalTime; + }; + + +/* + * ---------------------------------------------------------------- + * TweenLite + * ---------------------------------------------------------------- + */ + var TweenLite = _class("TweenLite", function(target, duration, vars) { + Animation.call(this, duration, vars); + + if (target == null) { + throw "Cannot tween an undefined reference."; + } + this.target = target; + + this._overwrite = (this.vars.overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(this.vars.overwrite) === "number") ? this.vars.overwrite >> 0 : _overwriteLookup[this.vars.overwrite]; + + var jq, i, targ; + if ((target instanceof Array || target.jquery) && typeof(target[0]) === "object") { + this._targets = target.slice(0); //works for both jQuery and Array instances + this._propLookup = []; + this._siblings = []; + for (i = 0; i < this._targets.length; i++) { + targ = this._targets[i]; + //in case the user is passing in an array of jQuery objects, for example, we need to check one more level and pull things out if necessary... + if (targ.jquery) { + this._targets.splice(i--, 1); + this._targets = this._targets.concat(targ.constructor.makeArray(targ)); + continue; + } + this._siblings[i] = _register(targ, this, false); + if (this._overwrite === 1) if (this._siblings[i].length > 1) { + _applyOverwrite(targ, this, null, 1, this._siblings[i]); + } + } + + } else { + this._propLookup = {}; + this._siblings = _register(target, this, false); + if (this._overwrite === 1) if (this._siblings.length > 1) { + _applyOverwrite(target, this, null, 1, this._siblings); + } + } + + if (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) { + this.render(-this._delay, false, true); + } + }, true); + + p = TweenLite.prototype = new Animation(); + p.constructor = TweenLite; + p.kill()._gc = false; + +//----TweenLite defaults, overwrite management, and root updates ---------------------------------------------------- + + p.ratio = 0; + p._firstPT = p._targets = p._overwrittenProps = null; + p._notifyPluginsOfEnabled = false; + + TweenLite.version = 1.668; + TweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1); + TweenLite.defaultOverwrite = "auto"; + TweenLite.ticker = _ticker; + + var _plugins = TweenLite._plugins = {}, + _tweenLookup = TweenLite._tweenLookup = {}, + _tweenLookupNum = 0, + _reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, orientToBezier:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1}, + _overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, "true":1, "false":0}, + _rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(), + _rootTimeline = Animation._rootTimeline = new SimpleTimeline(); + + _rootTimeline._startTime = _ticker.time; + _rootFramesTimeline._startTime = _ticker.frame; + _rootTimeline._active = _rootFramesTimeline._active = true; + + Animation._updateRoot = function() { + _rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false); + _rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false); + if (!(_ticker.frame % 120)) { //dump garbage every 120 frames... + var i, a, p; + for (p in _tweenLookup) { + a = _tweenLookup[p].tweens; + i = a.length; + while (--i > -1) { + if (a[i]._gc) { + a.splice(i, 1); + } + } + if (a.length === 0) { + delete _tweenLookup[p]; + } + } + } + }; + + _ticker.addEventListener("tick", Animation._updateRoot); + + var _register = function(target, tween, scrub) { + var id = target._gsTweenID, a, i; + if (!_tweenLookup[id || (target._gsTweenID = id = "t" + (_tweenLookupNum++))]) { + _tweenLookup[id] = {target:target, tweens:[]}; + } + if (tween) { + a = _tweenLookup[id].tweens; + a[(i = a.length)] = tween; + if (scrub) { + while (--i > -1) { + if (a[i] === tween) { + a.splice(i, 1); + } + } + } + } + return _tweenLookup[id].tweens; + }, + + _applyOverwrite = function(target, tween, props, mode, siblings) { + var i, changed, curTween, l; + if (mode === 1 || mode >= 4) { + l = siblings.length; + for (i = 0; i < l; i++) { + if ((curTween = siblings[i]) !== tween) { + if (!curTween._gc) if (curTween._enabled(false, false)) { + changed = true; + } + } else if (mode === 5) { + break; + } + } + return changed; + } + //NOTE: Add 0.0000000001 to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example) + var startTime = tween._startTime + 0.0000000001, + overlaps = [], + oCount = 0, + zeroDur = (tween._duration === 0), + globalStart; + i = siblings.length; + while (--i > -1) { + if ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) { + //ignore + } else if (curTween._timeline !== tween._timeline) { + globalStart = globalStart || _checkOverlap(tween, 0, zeroDur); + if (_checkOverlap(curTween, globalStart, zeroDur) === 0) { + overlaps[oCount++] = curTween; + } + } else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale + 0.0000000001 > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= 0.0000000002)) { + overlaps[oCount++] = curTween; + } + } + + i = oCount; + while (--i > -1) { + curTween = overlaps[i]; + if (mode === 2) if (curTween._kill(props, target)) { + changed = true; + } + if (mode !== 2 || (!curTween._firstPT && curTween._initted)) { + if (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween. + changed = true; + } + } + } + return changed; + }, + + _checkOverlap = function(tween, reference, zeroDur) { + var tl = tween._timeline, + ts = tl._timeScale, + t = tween._startTime; + while (tl._timeline) { + t += tl._startTime; + ts *= tl._timeScale; + if (tl._paused) { + return -100; + } + tl = tl._timeline; + } + t /= ts; + return (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 0.0000000002)) ? 0.0000000001 : ((t = t + tween.totalDuration() / tween._timeScale / ts) > reference) ? 0 : t - reference - 0.0000000001; + }; + + +//---- TweenLite instance methods ----------------------------------------------------------------------------- + + p._init = function() { + if (this.vars.startAt) { + this.vars.startAt.overwrite = 0; + this.vars.startAt.immediateRender = true; + TweenLite.to(this.target, 0, this.vars.startAt); + } + var i, initPlugins, pt; + if (this.vars.ease instanceof Ease) { + this._ease = (this.vars.easeParams instanceof Array) ? this.vars.ease.config.apply(this.vars.ease, this.vars.easeParams) : this.vars.ease; + } else if (typeof(this.vars.ease) === "function") { + this._ease = new Ease(this.vars.ease, this.vars.easeParams); + } else { + this._ease = TweenLite.defaultEase; + } + this._easeType = this._ease._type; + this._easePower = this._ease._power; + this._firstPT = null; + + if (this._targets) { + i = this._targets.length; + while (--i > -1) { + if ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (this._overwrittenProps ? this._overwrittenProps[i] : null)) ) { + initPlugins = true; + } + } + } else { + initPlugins = this._initProps(this.target, this._propLookup, this._siblings, this._overwrittenProps); + } + + if (initPlugins) { + TweenLite._onPluginEvent("_onInitAllProps", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite + } + if (this._overwrittenProps) if (this._firstPT == null) if (typeof(this.target) !== "function") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live. + this._enabled(false, false); + } + if (this.vars.runBackwards) { + pt = this._firstPT; + while (pt) { + pt.s += pt.c; + pt.c = -pt.c; + pt = pt._next; + } + } + this._onUpdate = this.vars.onUpdate; + this._initted = true; + }; + + p._initProps = function(target, propLookup, siblings, overwrittenProps) { + var p, i, initPlugins, plugin, a, pt, v; + if (target == null) { + return false; + } + for (p in this.vars) { + if (_reservedProps[p]) { + if (p === "onStartParams" || p === "onUpdateParams" || p === "onCompleteParams" || p === "onReverseCompleteParams" || p === "onRepeatParams") if ((a = this.vars[p])) { + i = a.length; + while (--i > -1) { + if (a[i] === "{self}") { + a = this.vars[p] = a.concat(); //copy the array in case the user referenced the same array in multiple tweens/timelines (each {self} should be unique) + a[i] = this; + } + } + } + + } else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this)) { + + //t - target [object] + //p - property [string] + //s - start [number] + //c - change [number] + //f - isFunction [boolean] + //n - name [string] + //pg - isPlugin [boolean] + //pr - priority [number] + this._firstPT = pt = {_next:this._firstPT, t:plugin, p:"setRatio", s:0, c:1, f:true, n:p, pg:true, pr:plugin._priority}; + i = plugin._overwriteProps.length; + while (--i > -1) { + propLookup[plugin._overwriteProps[i]] = this._firstPT; + } + if (plugin._priority || plugin._onInitAllProps) { + initPlugins = true; + } + if (plugin._onDisable || plugin._onEnable) { + this._notifyPluginsOfEnabled = true; + } + + } else { + this._firstPT = propLookup[p] = pt = {_next:this._firstPT, t:target, p:p, f:(typeof(target[p]) === "function"), n:p, pg:false, pr:0}; + pt.s = (!pt.f) ? parseFloat(target[p]) : target[ ((p.indexOf("set") || typeof(target["get" + p.substr(3)]) !== "function") ? p : "get" + p.substr(3)) ](); + v = this.vars[p]; + pt.c = (typeof(v) === "number") ? v - pt.s : (typeof(v) === "string" && v.charAt(1) === "=") ? parseInt(v.charAt(0)+"1", 10) * Number(v.substr(2)) : Number(v) || 0; //previously, we used Number(v.split("=").join("")) but that wouldn't adequately handle a value like "+=-500" or "-=-500". + } + if (pt) if (pt._next) { + pt._next._prev = pt; + } + } + + if (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first) + return this._initProps(target, propLookup, siblings, overwrittenProps); + } + if (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) { + this._kill(propLookup, target); + return this._initProps(target, propLookup, siblings, overwrittenProps); + } + return initPlugins; + }; + + p.render = function(time, suppressEvents, force) { + var prevTime = this._time, + isComplete, callback, pt; + if (time >= this._duration) { + this._totalTime = this._time = this._duration; + this.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1; + if (!this._reversed) { + isComplete = true; + callback = "onComplete"; + } + if (this._duration === 0) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the "playhead" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's "playhead" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered. + if (time === 0 || this._rawPrevTime < 0) if (this._rawPrevTime !== time) { + force = true; + } + this._rawPrevTime = time; + } + + } else if (time <= 0) { + this._totalTime = this._time = 0; + this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0; + if (prevTime !== 0 || (this._duration === 0 && this._rawPrevTime > 0)) { + callback = "onReverseComplete"; + isComplete = this._reversed; + } + if (time < 0) { + this._active = false; + if (this._duration === 0) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the "playhead" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's "playhead" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered. + if (this._rawPrevTime >= 0) { + force = true; + } + this._rawPrevTime = time; + } + } else if (!this._initted) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately. + force = true; + } + + } else { + this._totalTime = this._time = time; + + if (this._easeType) { + var r = time / this._duration, type = this._easeType, pow = this._easePower; + if (type === 1 || (type === 3 && r >= 0.5)) { + r = 1 - r; + } + if (type === 3) { + r *= 2; + } + if (pow === 1) { + r *= r; + } else if (pow === 2) { + r *= r * r; + } else if (pow === 3) { + r *= r * r * r; + } else if (pow === 4) { + r *= r * r * r * r; + } + + if (type === 1) { + this.ratio = 1 - r; + } else if (type === 2) { + this.ratio = r; + } else if (time / this._duration < 0.5) { + this.ratio = r / 2; + } else { + this.ratio = 1 - (r / 2); + } + + } else { + this.ratio = this._ease.getRatio(time / this._duration); + } + + } + + if (this._time === prevTime && !force) { + return; + } else if (!this._initted) { + this._init(); + if (!isComplete && this._time) { //_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently. + this.ratio = this._ease.getRatio(this._time / this._duration); + } + } + + if (!this._active) if (!this._paused) { + this._active = true; //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done. + } + if (prevTime === 0) if (this.vars.onStart) if (this._time !== 0 || this._duration === 0) if (!suppressEvents) { + this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || _blankArray); + } + + pt = this._firstPT; + while (pt) { + if (pt.f) { + pt.t[pt.p](pt.c * this.ratio + pt.s); + } else { + pt.t[pt.p] = pt.c * this.ratio + pt.s; + } + pt = pt._next; + } + + + if (this._onUpdate) if (!suppressEvents) { + this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || _blankArray); + } + + if (callback) if (!this._gc) { //check _gc because there's a chance that kill() could be called in an onUpdate + if (isComplete) { + if (this._timeline.autoRemoveChildren) { + this._enabled(false, false); + } + this._active = false; + } + if (!suppressEvents) if (this.vars[callback]) { + this.vars[callback].apply(this.vars[callback + "Scope"] || this, this.vars[callback + "Params"] || _blankArray); + } + } + + }; + + p._kill = function(vars, target) { + if (vars === "all") { + vars = null; + } + if (vars == null) if (target == null || target === this.target) { + return this._enabled(false, false); + } + target = target || this._targets || this.target; + var i, overwrittenProps, p, pt, propLookup, changed, killProps, record; + if ((target instanceof Array || target.jquery) && typeof(target[0]) === "object") { + i = target.length; + while (--i > -1) { + if (this._kill(vars, target[i])) { + changed = true; + } + } + } else { + if (this._targets) { + i = this._targets.length; + while (--i > -1) { + if (target === this._targets[i]) { + propLookup = this._propLookup[i] || {}; + this._overwrittenProps = this._overwrittenProps || []; + overwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : "all"; + break; + } + } + } else if (target !== this.target) { + return false; + } else { + propLookup = this._propLookup; + overwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : "all"; + } + + if (propLookup) { + killProps = vars || propLookup; + record = (vars !== overwrittenProps && overwrittenProps !== "all" && vars !== propLookup && (vars == null || vars._tempKill !== true)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin) + for (p in killProps) { + if ((pt = propLookup[p])) { + if (pt.pg && pt.t._kill(killProps)) { + changed = true; //some plugins need to be notified so they can perform cleanup tasks first + } + if (!pt.pg || pt.t._overwriteProps.length === 0) { + if (pt._prev) { + pt._prev._next = pt._next; + } else if (pt === this._firstPT) { + this._firstPT = pt._next; + } + if (pt._next) { + pt._next._prev = pt._prev; + } + pt._next = pt._prev = null; + } + delete propLookup[p]; + } + if (record) { + overwrittenProps[p] = 1; + } + } + } + } + return changed; + }; + + p.invalidate = function() { + if (this._notifyPluginsOfEnabled) { + TweenLite._onPluginEvent("_onDisable", this); + } + this._firstPT = null; + this._overwrittenProps = null; + this._onUpdate = null; + this._initted = this._active = this._notifyPluginsOfEnabled = false; + this._propLookup = (this._targets) ? {} : []; + return this; + }; + + p._enabled = function(enabled, ignoreTimeline) { + if (enabled && this._gc) { + if (this._targets) { + var i = this._targets.length; + while (--i > -1) { + this._siblings[i] = _register(this._targets[i], this, true); + } + } else { + this._siblings = _register(this.target, this, true); + } + } + Animation.prototype._enabled.call(this, enabled, ignoreTimeline); + if (this._notifyPluginsOfEnabled) if (this._firstPT) { + return TweenLite._onPluginEvent(((enabled) ? "_onEnable" : "_onDisable"), this); + } + return false; + }; + + +//----TweenLite static methods ----------------------------------------------------- + + TweenLite.to = function(target, duration, vars) { + return new TweenLite(target, duration, vars); + }; + + TweenLite.from = function(target, duration, vars) { + vars.runBackwards = true; + if (vars.immediateRender !== false) { + vars.immediateRender = true; + } + return new TweenLite(target, duration, vars); + }; + + TweenLite.fromTo = function(target, duration, fromVars, toVars) { + toVars.startAt = fromVars; + if (fromVars.immediateRender) { + toVars.immediateRender = true; + } + return new TweenLite(target, duration, toVars); + }; + + TweenLite.delayedCall = function(delay, callback, params, scope, useFrames) { + return new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, onCompleteScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, onReverseCompleteScope:scope, immediateRender:false, useFrames:useFrames, overwrite:0}); + }; + + TweenLite.set = function(target, vars) { + return new TweenLite(target, 0, vars); + }; + + TweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, vars) { + var a = TweenLite.getTweensOf(target), + i = a.length; + while (--i > -1) { + a[i]._kill(vars, target); + } + }; + + TweenLite.getTweensOf = function(target) { + if (target == null) { return; } + var i, a, j, t; + if ((target instanceof Array || target.jquery) && typeof(target[0]) === "object") { + i = target.length; + a = []; + while (--i > -1) { + a = a.concat(TweenLite.getTweensOf(target[i])); + } + i = a.length; + //now get rid of any duplicates (tweens of arrays of objects could cause duplicates) + while (--i > -1) { + t = a[i]; + j = i; + while (--j > -1) { + if (t === a[j]) { + a.splice(i, 1); + } + } + } + } else { + a = _register(target).concat(); + i = a.length; + while (--i > -1) { + if (a[i]._gc) { + a.splice(i, 1); + } + } + } + return a; + }; + + + +/* + * ---------------------------------------------------------------- + * TweenPlugin (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another + + + + + + + + +
    + +
    + +
    -
    +
    -
    +
    -
    +
    -
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +

    PARALLAXIS

    +

    IN FOUR PARTS

    +

    rc@kiben.net 2012

    + +
    +

    + hit [SPACE] to start... +

    +
    + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    + +
    + + +
    + + + + + +
    +
    X
    +

    Keyboard Controls

    + SPACEBAR = play from start +
    . = pause +
    , = resume +
    click on playzone will also pause part +
    1 2 3 4 = keydown to pause parts and key upto resume +
    - + = global slower/faster 10% +
    [ ] = preview back/forward (paused) + +
    h = this help panel +
    s = settings panel +
    + +
    +
    X
    + +

    Control Panel

    + Speed (2 double - 0.5 half)
    + + LAN Server IP
    + OSC Port A (Ardour Tranport)
    + OSC Port B (Realtime FX Parameters)
    + OSC Port C (Playback Locations)
    + OSCgroups server
    +
    + + + +
    + + +
    + + + + + + diff --git a/duo/nosoc/parallaxis.js b/duo/nosoc/parallaxis.js new file mode 100755 index 0000000..2fe5aa4 --- /dev/null +++ b/duo/nosoc/parallaxis.js @@ -0,0 +1,289 @@ + +var socket = io.connect(); + +function startChr() { socket.emit("xstartChr")} +function clearStopwatch() { socket.emit("xclearStopwatch")} +function goStopwatch() { socket.emit("xgoStopwatch")} +function stopChr() { socket.emit("xstopChr")} +function resetChr() { socket.emit("xresetChr")} +function stopWatch(state) { socket.emit("xstopWatch", state)} + +// update the stopwatch value on the client page in line with server +socket.on("chronFromServer", function(chron) { + $("div#timer").text(chron); +}); + +var scorewidth = "-10000px" +var scorewidtha = "-20000px" + +speed = 300; +console.log("speed = ", speed) +speeda = speed/1.2 +speedb = speed/1.4 +speedc = speed/1.6 +speedd = speed/1.75 +console.log("speeda = ", speeda) + +//////////////////////////////////////////////////////// +// send poistion data to server for retramsmit via OSC +///////////////////////////////////////////////////////// +//TweenLite.ticker.addEventListener("tick", tickHandler); + +function tickHandler() { + var r=Math.floor(Math.random()*11) + //get score part locations and send data to server +// var lefta = parseInt(document.getElementById(svga0).style.left); + socket.emit("parta", r) + // var leftb = $('#scoresvgb').css("left"); + //socket.emit("partb", leftb) + //var leftc = $('#scoresvgc').css("left"); + // socket.emit("partc", leftc) + //var leftd = $('#scoresvgd').css("left"); + // socket.emit("partd", leftd) +} + +TweenLite.ticker.addEventListener("tick", tickHandler); + +var tlx = new TimelineMax(); +var tlplaya = new TimelineMax({repeat:100, yoyo:true}); + +var tla = new TimelineMax({repeat:100}); +var tlb = new TimelineMax({repeat:100}); +var tlc = new TimelineMax({repeat:100}); +var tld = new TimelineMax({repeat:100}); + +tlx.to(title, 1.5, {css:{left:"40px"}},1.5); +tlx.to(ensemble, 1, {css:{left:"320px"}},-0.5); +tlx.to(robcanning, 1, {css:{left:"420px"}},-0.5); + +tlx.to(title, 3, {css:{left:"-1300px"}},2); +tlx.to(ensemble, 3, {css:{top:"-300px"}},-3); +tlx.to(robcanning, 3, {css:{left:"1120px"}},-3); + +tlx.to(playa, 0.1, {css:{left:"300px"}}); +tlx.to(playb, 0.1, {css:{left:"300px"}}); +tlx.to(playc, 0.1, {css:{left:"300px"}}); +tlx.to(playd, 0.1, {css:{left:"300px"}}); + +tlx.to(playzonea, 0.2, {css:{top:"18px"}}); +tlx.to(playzoneb, 0.2, {css:{top:"200px"}}); +tlx.to(playzonec, 0.2, {css:{top:"378px"}}); +tlx.to(playzoned, 0.2, {css:{top:"558px"}}); + +tlx.to(hitstart, 1, {css:{left:"300px"}},-0.2); + +//tla.insert("positiona", 0); +//tlb.insert("positiona", 0); +//tlc.insert("positiona", 0); +//tld.insert("positiona", 0); + +var initialwait = 0 + +tla.to(svga0, speeda, {css:{left:scorewidth},ease:Linear.easeNone}); +tla.to(svga1, speeda, {css:{left:"0px"},ease:Linear.easeNone},-speeda); +tla.to(svga1, speedb, {css:{left:scorewidth},ease:Linear.easeNone}); +tla.to(svga2, speedb, {css:{left:"0px"},ease:Linear.easeNone},-speedb); +//tla.to(svga2, speedd, {css:{left:scorewidth},ease:Linear.easeNone}); +//tla.to(svga3, speedd, {css:{left:"0px"},ease:Linear.easeNone},-speedd); +tla.to(svga2, speedc, {css:{left:scorewidth},ease:Linear.easeNone}); + +tlb.to(svgb0, speedc, {css:{left:scorewidth},ease:Linear.easeNone}); +tlb.to(svgb1, speedc, {css:{left:"0px"},ease:Linear.easeNone},-speedc); +tlb.to(svgb1, speedb, {css:{left:scorewidth},ease:Linear.easeNone}); +tlb.to(svgb2, speedb, {css:{left:"0px"},ease:Linear.easeNone},-speedb) +//tlb.to(svga2, speedd, {css:{left:scorewidth},ease:Linear.easeNone}); +//tlb.to(svga3, speedd, {css:{left:"0px"},ease:Linear.easeNone},-speedd); +tlb.to(svgb2, speeda, {css:{left:scorewidth},ease:Linear.easeNone}); + +tlc.to(svgc0, speedb, {css:{left:scorewidth},ease:Linear.easeNone}); +tlc.to(svgc1, speedb, {css:{left:"0px"},ease:Linear.easeNone},-speedb); +tlc.to(svgc1, speeda, {css:{left:scorewidth},ease:Linear.easeNone}); +tlc.to(svgc2, speeda, {css:{left:"0px"},ease:Linear.easeNone},-speeda); +//tlc.to(svga2, speedd, {css:{left:scorewidth},ease:Linear.easeNone}); +//tlc.to(svga3, speedd, {css:{left:"0px"},ease:Linear.easeNone},-speedd); +tlc.to(svgc2, speedc, {css:{left:scorewidth},ease:Linear.easeNone}); + +tld.to(svgd0, speeda, {css:{left:scorewidth},ease:Linear.easeNone}); +tld.to(svgd1, speeda, {css:{left:"0px"},ease:Linear.easeNone},-speeda); +tld.to(svgd1, speedc, {css:{left:scorewidth},ease:Linear.easeNone}); +tld.to(svgd2, speedc, {css:{left:"0px"},ease:Linear.easeNone},-speedc); +//tld.to(svga2, speedd, {css:{left:scorewidth},ease:Linear.easeNone}); +//tld.to(svga3, speedd, {css:{left:"0px"},ease:Linear.easeNone},-speedd); +tld.to(svgd2, speedb, {css:{left:scorewidth},ease:Linear.easeNone}); + +tla.pause(); tlb.pause();tlc.pause();tld.pause(); + +$('#playzonea').toggle(function(){tla.pause();},function(){tla.play(); } ); +$('#playzoneb').toggle(function(){tlb.pause();},function(){tlb.play(); } ); +$('#playzonec').toggle(function(){tlc.pause();},function(){tlc.play(); } ); +$('#playzoned').toggle(function(){tld.pause();},function(){tld.play(); } ); + +$("#help").mouseover(function() { + $("#helpcontent").show(); +}).mouseout(function() { + $("#helpcontent").hide(); +}); + +$(document).keydown(function(e){ + if (e.keyCode==190 ){ + tla.pause(); tlb.pause();tlc.pause();tld.pause(); + } +}); + +//h help +$(document).keydown(function(e){ + if (e.keyCode==72 ){ + toggle('helpText') + } +}); + +//s settings +$(document).keydown(function(e){ + if (e.keyCode==83 ){ + toggle('controlPanel') + } +}); + + +$(document).keydown(function(e){ + if (e.keyCode==188 ){ + tla.resume(); tlb.resume();tlc.resume();tld.resume(); + } +}); +///////////////// +// set starting points here +// and stagger offsets if any +///////////////// + +//0 + +$(document).keydown(function(e){ + if (e.keyCode==48 ){ + clearStopwatch(); goStopwatch(); + document.getElementById('hitstart').style.visibility = 'hidden'; + tla.gotoAndStop(0); setTimeout(function(){tla.play()},00000); + tlb.gotoAndStop(0); setTimeout(function(){tlb.play()},10000); + tlc.gotoAndStop(0); setTimeout(function(){tlc.play()},20000); + tld.gotoAndStop(0); setTimeout(function(){tld.play()},30000); + } +}); + +//SPACEBAR + +$(document).keydown(function(e){ + if (e.keyCode==32 ){ + clearStopwatch(); goStopwatch(); + document.getElementById('hitstart').style.visibility = 'hidden'; + tla.gotoAndStop(0); //tla.play(); + tlb.gotoAndStop(0); //tlb.play(); + tlc.gotoAndStop(0); //tlc.play(); + tld.gotoAndStop(0); //tld.play(); + tla.play(); tlb.play();tlc.play();tld.play(); + } + +}); + +$(document).keydown(function(e){ + if (e.keyCode==49 ){tla.pause();} + if (e.keyCode==50 ){tlb.pause();} + if (e.keyCode==51 ){tlc.pause();} + if (e.keyCode==52 ){tld.pause();} +}); + +$(document).keyup(function(e){ + if (e.keyCode==49 ){tla.resume();} + if (e.keyCode==50 ){tlb.resume();} + if (e.keyCode==51 ){tlc.resume();} + if (e.keyCode==52 ){tld.resume();} +}); + +var av = 1; +function aplayspeed(xspeed){ + if (xspeed == 1){ av += 0.1; } + else if (xspeed == -1){ av -= 0.1; } + return av; +} + +var bv = 1; +function bplayspeed(xspeed){ + if (xspeed == 1){ bv += 0.1; } + else if (xspeed == -1){ bv -= 0.1; } + return bv; +} + +var cv = 1; +function cplayspeed(xspeed){ + if (xspeed == 1){ cv += 0.1; } + else if (xspeed == -1){ cv -= 0.1; } + return cv; +} + +var dv = 1; +function dplayspeed(xspeed){ + if (xspeed == 1){ dv += 0.1; } + else if (xspeed == -1){ dv -= 0.1; } + return dv; +} + + +function allSpeed(s){ + tla.timeScale(s) + tlb.timeScale(s) + tlc.timeScale(s) + tld.timeScale(s) +} + +function globalSpeed(x){ + console.log("globalSpeed") + tla.timeScale(aplayspeed(x)); + tlb.timeScale(bplayspeed(x)); + tlc.timeScale(cplayspeed(x)); + tld.timeScale(dplayspeed(x)); +} + +//=- fasterslower +$(document).keydown(function(e){ + console.log("globalSpeed",e.keyCode) + if (e.keyCode==189 ){ globalSpeed(-1); console.log("boo") } + if (e.keyCode==187 ){ globalSpeed(1)} +}); + + +//[] preview fwd back +var s = 10; var v = 1; +function cue(direction){ + if (direction == 1){ s += 10; } + else if (direction == -1){ s -= 10; } + return s; +} +$(document).keydown(function(e){ + console.log("globalSpeed",e.keyCode) + if (e.keyCode==219 ){ localSeek(cue(-1)); } + if (e.keyCode==221 ){ localSeek(cue(1))} +}); + + +function localSeek(seek){ + tla.seek(seek);tla.pause(); + tlb.seek(seek);tlb.pause(); + tlc.seek(seek);tlc.pause(); + tld.seek(seek);tld.pause(); +} + + +// CLOSE BUTTON FOR DIVS +//$(document).on('click','.close_box',function(){ +// $(this).parent().fadeTo(300,0,function(){ + // $(this).remove(); +// }); +//}); + + + + + + + + + + diff --git a/duo/parallaxis-body.js b/duo/parallaxis-body.js new file mode 100755 index 0000000..3dbfcc3 --- /dev/null +++ b/duo/parallaxis-body.js @@ -0,0 +1,27 @@ +function toggle(e) { + e = document.getElementById(e); + + if(e.style.display == "block") { + e.style.display = "none"; + } + else { + e.style.display = "block"; + + } +} + +// CLOSE BUTTON FOR DIVS +$(document).on('click','.close_box',function(){ + $(this).parent().fadeTo(300,1,function(){ + $(this).css( "display", "none" ) + }); +}); + + + +$("#help").mouseover(function() { + $("#helpcontent").show(); +}).mouseout(function() { + $("#helpcontent").hide(); +}); + diff --git a/duo/parallaxis.css b/duo/parallaxis.css new file mode 100755 index 0000000..1df3b50 --- /dev/null +++ b/duo/parallaxis.css @@ -0,0 +1,110 @@ +body { margin: 0px; padding: 0px; width:100%; height:100%; background:black; font-family:Arial,Helvetica,sans-serif;} +h3 {font-size:1em; color:white; margin:0; padding:0;} +a:link {color:white;} +a:visited {color:white;} +a:hover {color:white;} +a:active {color:white;} + +.popup{ position:relative; width:700px; list-style:none; cursor:pointer;} +.popup li div{ position:absolute; z-index:10; visibility:hidden; width:853px; left:-200px;} +.popup li:hover div{ visibility:visible; } + +.close_box { + background:white; + color:black; + padding:2px 5px; + display:inline; + position:absolute; + right:0px; + top: 0px; + border-radius:3px; + cursor:pointer; +} + +.help { position:relative; bottom:80px; left:30px; } +.helpb { font-family:"Arial Black", Gadget, sans-serif; width: 500px;} + +#helpText { display: none; position:absolute; + top: 100px; left: 25%; z-index:10000; + background:black; color:white; border: 3px solid; + padding: 20px 20px 20px 20px ; + font-size:1.2em; + } + +#controlPanel { + display: none; position:absolute; + top: 200px; left: 25%; z-index:10000; + background:black; color:white; border: 3px solid; + padding: 20px 20px 20px 20px; + font-size:1.2em; + +} + +.inputboxes { padding:0; margin:0; + background-color:black; + color:white; position:absolute; right:10px; font-size:0.8em;} + +#timer { position:relative; width:140px; left:1090px; bottom:400px; font-weight:bold; font-size:1.7em; color:white;} +.cue { position:relative; width:130px; left:1100px; bottom:400px; font-size:1em; color:white;} + +.outer{ width:1250px; height:750px; margin: 0px auto auto; background:black; padding: 0px;} +.scorecontainer { display:block; top:0px; margin: 10px auto auto; width: 1200px; height:750px; background:black;} +.score { position:relative; margin: 0px auto auto; height: 750px; width: 950px; border: 0px solid; overflow:hidden; } +.scoresvg { position:absolute; left: 0px; margin: 0px auto auto; height:171px; width: 10000px;} + +.controls { display:inline; position:absolute; margin: 0px auto auto; + border: 0px solid; border-radius:30px; width: 80px; height:80px; + font-size:2em; padding: 0 0 0 0; text-align:center; } + +.controls .leftslower { border: 4px solid; left: 30px; background-color:black; color:white;} +.controls .rightfaster { border: 4px solid; left: 1130px; background-color:black; color:white;} +.controls .leftslower:hover {background-color:gray;} +.controls .rightfaster:hover {background-color:gray;} + +.atexts{ font-family:Impact, Charcoal, sans-serif; + position:absolute; left:-1400px; background-color:transparent; + border: 0px solid; width: 700px; height:50px; color:white; } + +.readaheadhead { position:absolute; top: 3px; left:700px; width: 1px; opacity:0.3; height:1000px; background-color:green; } +.playhead { position:absolute; top: 3px; left:-20px; width: 2px; opacity:1; height:170px; } + +#playa { background-color:red; top:20px;} +#playb { background-color:red; top:200px;} +#playc { background-color:red; top:380px;} +#playd { background-color:red; top:558px;} + +.playzones { position:absolute; + top: -800px; left:200px; + border: 3px solid; border-radius:25px; + width: 200px; height:170px; + } + +.playzonea { background-color:rgba(0, 0, 255, 0.2);} +.playzoneb { background-color:rgba(0, 255, 255, 0.2);} +.playzonec { background-color:rgba(0, 0, 255, 0.2);} +.playzoned { background-color:rgba(0, 255, 255, 0.2);} + +.playzones:hover { background-color:rgba(255, 255, 255, 0.6);} + +#svga0 { top: 20px; left: 1000px; background-color:rgba(255, 255, 255, 0.9); } +#svga1 { top: 20px; left: 11000px; background-color:rgba(255, 255, 255, 0.9); } +#svga2 { top: 20px; left: 11000px; background-color:rgba(255, 255, 255, 0.9); } +#svga3 { top: 20px; left: 11000px; background-color:rgba(255, 255, 255, 0.9); } + +#svgb0 { top: 200px; left: 1000px; background-color:rgba(255, 255, 255, 0.9); } +#svgb1 { top: 200px; left: 11000px; background-color:rgba(255, 255, 255, 0.9); } +#svgb2 { top: 200px; left: 11000px; background-color:rgba(255, 255, 255, 0.9); } +#svgb3 { top: 200px; left: 11000px; background-color:rgba(255, 255, 255, 0.9); } + +#svgc0 { top: 380px; left: 1000px; background-color:rgba(255, 255, 255, 0.9); } +#svgc1 { top: 380px; left: 11000px; background-color:rgba(255, 255, 255, 0.9); } +#svgc2 { top: 380px; left: 11000px; background-color:rgba(255, 255, 255, 0.9); } +#svgc3 { top: 380px; left: 11000px; background-color:rgba(255, 255, 255, 0.9); } + + +#svgd0 { top: 560px; left: 1000px; background-color:rgba(255, 255, 255, 0.9);} +#svgd1 { top: 560px; left: 11000px; background-color:rgba(255, 255, 255, 0.9);} +#svgd2 { top: 560px; left: 11000px; background-color:rgba(255, 255, 255, 0.9);} +#svgd3 { top: 560px; left: 11000px; background-color:rgba(255, 255, 255, 0.9);} + +.tbuttons { background-color:black; color:white; } diff --git a/duo/parallaxis.js b/duo/parallaxis.js new file mode 100755 index 0000000..251b0c8 --- /dev/null +++ b/duo/parallaxis.js @@ -0,0 +1,327 @@ + +var socket = io.connect(); + +function startChr() { socket.emit("startChr")} + +function clearStopwatch() { socket.emit("clearStopwatch")} +function goStopwatch() { socket.emit("goStopwatch")} +function stopChr() { socket.emit("stopChr")} +function resetChr() { socket.emit("resetChr")} +function stopWatch(state) { socket.emit("stopWatch", state)} + +// update the stopwatch value on the client page in line with server +socket.on("chronFromServer", function(chron) { + $("div#timer").text(chron); +}); + +var scorewidth = "-10000px" +var scorewidtha = "-20000px" + +speed = 300; +//console.log("speed = ", speed) +speeda = speed/1.2 +speedb = speed/1.4 +speedc = speed/1.6 +speedd = speed/1.75 +//console.log("speeda = ", speeda) + +//////////////////////////////////////////////////////// +// send poistion data to server for retramsmit via OSC +///////////////////////////////////////////////////////// +//TweenLite.ticker.addEventListener("tick", tickHandler); + +function tickHandler() { + var r=Math.floor(Math.random()*11) + //get score part locations and send data to server +// var lefta = parseInt(document.getElementById(svga0).style.left); + socket.emit("parta", r) + // var leftb = $('#scoresvgb').css("left"); + //socket.emit("partb", leftb) + //var leftc = $('#scoresvgc').css("left"); + // socket.emit("partc", leftc) + //var leftd = $('#scoresvgd').css("left"); + // socket.emit("partd", leftd) +} + +TweenLite.ticker.addEventListener("tick", tickHandler); + +var tlx = new TimelineMax(); +var tlplaya = new TimelineMax({repeat:100, yoyo:true}); + +var tla = new TimelineMax({repeat:100}); +var tlb = new TimelineMax({repeat:100}); +var tlc = new TimelineMax({repeat:100}); +var tld = new TimelineMax({repeat:100}); + +tlx.to(title, 1.5, {css:{left:"40px"}},1.5); +tlx.to(ensemble, 1, {css:{left:"320px"}},-0.5); +tlx.to(robcanning, 1, {css:{left:"420px"}},-0.5); + +tlx.to(title, 3, {css:{left:"-1300px"}},2); +tlx.to(ensemble, 3, {css:{top:"-300px"}},-3); +tlx.to(robcanning, 3, {css:{left:"1120px"}},-3); + +tlx.to(playa, 0.1, {css:{left:"300px"}}); +tlx.to(playb, 0.1, {css:{left:"300px"}}); +tlx.to(playc, 0.1, {css:{left:"300px"}}); +tlx.to(playd, 0.1, {css:{left:"300px"}}); + +tlx.to(playzonea, 0.2, {css:{top:"18px"}}); +tlx.to(playzoneb, 0.2, {css:{top:"200px"}}); +tlx.to(playzonec, 0.2, {css:{top:"378px"}}); +tlx.to(playzoned, 0.2, {css:{top:"558px"}}); + +tlx.to(hitstart, 1, {css:{left:"300px"}},-0.2); + +//tla.insert("positiona", 0); +//tlb.insert("positiona", 0); +//tlc.insert("positiona", 0); +//tld.insert("positiona", 0); + +var initialwait = 0 + +tla.to(svga0, speeda, {css:{left:scorewidth},ease:Linear.easeNone}); +tla.to(svga1, speeda, {css:{left:"0px"},ease:Linear.easeNone},-speeda); +tla.to(svga1, speedb, {css:{left:scorewidth},ease:Linear.easeNone}); +tla.to(svga2, speedb, {css:{left:"0px"},ease:Linear.easeNone},-speedb); +//tla.to(svga2, speedd, {css:{left:scorewidth},ease:Linear.easeNone}); +//tla.to(svga3, speedd, {css:{left:"0px"},ease:Linear.easeNone},-speedd); +tla.to(svga2, speedc, {css:{left:scorewidth},ease:Linear.easeNone}); + +tlb.to(svgb0, speedc, {css:{left:scorewidth},ease:Linear.easeNone}); +tlb.to(svgb1, speedc, {css:{left:"0px"},ease:Linear.easeNone},-speedc); +tlb.to(svgb1, speedb, {css:{left:scorewidth},ease:Linear.easeNone}); +tlb.to(svgb2, speedb, {css:{left:"0px"},ease:Linear.easeNone},-speedb) +//tlb.to(svga2, speedd, {css:{left:scorewidth},ease:Linear.easeNone}); +//tlb.to(svga3, speedd, {css:{left:"0px"},ease:Linear.easeNone},-speedd); +tlb.to(svgb2, speeda, {css:{left:scorewidth},ease:Linear.easeNone}); + +tlc.to(svgc0, speedb, {css:{left:scorewidth},ease:Linear.easeNone}); +tlc.to(svgc1, speedb, {css:{left:"0px"},ease:Linear.easeNone},-speedb); +tlc.to(svgc1, speeda, {css:{left:scorewidth},ease:Linear.easeNone}); +tlc.to(svgc2, speeda, {css:{left:"0px"},ease:Linear.easeNone},-speeda); +//tlc.to(svga2, speedd, {css:{left:scorewidth},ease:Linear.easeNone}); +//tlc.to(svga3, speedd, {css:{left:"0px"},ease:Linear.easeNone},-speedd); +tlc.to(svgc2, speedc, {css:{left:scorewidth},ease:Linear.easeNone}); + +tld.to(svgd0, speeda, {css:{left:scorewidth},ease:Linear.easeNone}); +tld.to(svgd1, speeda, {css:{left:"0px"},ease:Linear.easeNone},-speeda); +tld.to(svgd1, speedc, {css:{left:scorewidth},ease:Linear.easeNone}); +tld.to(svgd2, speedc, {css:{left:"0px"},ease:Linear.easeNone},-speedc); +//tld.to(svga2, speedd, {css:{left:scorewidth},ease:Linear.easeNone}); +//tld.to(svga3, speedd, {css:{left:"0px"},ease:Linear.easeNone},-speedd); +tld.to(svgd2, speedb, {css:{left:scorewidth},ease:Linear.easeNone}); + +tla.pause(); tlb.pause();tlc.pause();tld.pause(); + + +$("#help").mouseover(function() { + $("#helpcontent").show(); +}).mouseout(function() { + $("#helpcontent").hide(); +}); + + +//h help +$(document).keydown(function(e){ + if (e.keyCode==72 ){ + toggle('helpText') + } +}); + +//s settings +$(document).keydown(function(e){ + if (e.keyCode==83 ){ + toggle('controlPanel') + } +}); + +///////////////// +// set starting points here +// and stagger offsets if any +///////////////// +//0 + +/* +$(document).keydown(function(e){ + if (e.keyCode==48 ){ + clearStopwatch(); goStopwatch(); + document.getElementById('hitstart').style.visibility = 'hidden'; + tla.gotoAndStop(0); setTimeout(function(){tla.play()},00000); + tlb.gotoAndStop(0); setTimeout(function(){tlb.play()},10000); + tlc.gotoAndStop(0); setTimeout(function(){tlc.play()},20000); + tld.gotoAndStop(0); setTimeout(function(){tld.play()},30000); + } +}); +*/ + +function playnow() { + clearStopwatch(); goStopwatch(); + document.getElementById('hitstart').style.visibility = 'hidden'; + tla.gotoAndStop(0); //tla.play(); + tlb.gotoAndStop(0); //tlb.play(); + tlc.gotoAndStop(0); //tlc.play(); + tld.gotoAndStop(0); //tld.play(); + tla.play(); tlb.play();tlc.play();tld.play(); +} + +socket.on("play", function() { + console.log("got a play message from server") + playnow() +}); + +///////////////////////////////// +//SPACEBAR +$(document).keydown(function(e){ + if (e.keyCode==32 ){ + socket.emit("play") + } +}); + +///////////////////////////////// +// GLOBAL PAUSE AND RESUME + +function resumeAll(){ console.log("resumeAll");tla.resume(); tlb.resume();tlc.resume();tld.resume();} +function pauseAll(){ console.log("pauseAll"); tla.pause(); tlb.pause();tlc.pause();tld.pause();} + +$(document).keydown(function(e){ + if (e.keyCode==188 ){ socket.emit("resumeAll");}}); + +$(document).keydown(function(e){ + if (e.keyCode==190 ){ socket.emit("pauseAll"); }}); + +socket.on("pauseAll", function(){pauseAll()}) +socket.on("resumeAll", function(){resumeAll()}) +///////////////////////////////// +// PAUSE AND RESUME PARTS +/// pause +socket.on("pauseA", function() { tla.pause(); }); +socket.on("pauseB", function() { tlb.pause(); }); +socket.on("pauseC", function() { tlc.pause(); }); +socket.on("pauseD", function() { tld.pause(); }); +//// resume +socket.on("resumeA", function() { tla.resume(); }); +socket.on("resumeB", function() { tlb.resume(); }); +socket.on("resumeC", function() { tlc.resume(); }); +socket.on("resumeD", function() { tld.resume(); }); + +//// TOGGLE DIV CLICK +$('#playzonea').toggle(function(){socket.emit("pauseA");},function(){socket.emit("resumeA");}); +$('#playzoneb').toggle(function(){socket.emit("pauseB");},function(){socket.emit("resumeB");}); +$('#playzonec').toggle(function(){socket.emit("pauseC");},function(){socket.emit("resumeC");}); +$('#playzoned').toggle(function(){socket.emit("pauseD");},function(){socket.emit("resumeD");}); + + +//// KEYUPDOWN NUMBER KEYS 1-4 +$(document).keydown(function(e){ + if (e.keyCode==49 ){socket.emit("pauseA")} + if (e.keyCode==50 ){socket.emit("pauseB")} + if (e.keyCode==51 ){socket.emit("pauseC")} + if (e.keyCode==52 ){socket.emit("pauseD")} +}); + +$(document).keyup(function(e){ + if (e.keyCode==49 ){socket.emit("resumeA");} + if (e.keyCode==50 ){socket.emit("resumeB");} + if (e.keyCode==51 ){socket.emit("resumeC");} + if (e.keyCode==52 ){socket.emit("resumeD");} +}); + +//////////////////////////////////////////// + +var av = 1; +function aplayspeed(xspeed){ + if (xspeed == 1){ av += 0.1; } + else if (xspeed == -1){ av -= 0.1; } + return av; +} + +var bv = 1; +function bplayspeed(xspeed){ + if (xspeed == 1){ bv += 0.1; } + else if (xspeed == -1){ bv -= 0.1; } + return bv; +} + +var cv = 1; +function cplayspeed(xspeed){ + if (xspeed == 1){ cv += 0.1; } + else if (xspeed == -1){ cv -= 0.1; } + return cv; +} + +var dv = 1; +function dplayspeed(xspeed){ + if (xspeed == 1){ dv += 0.1; } + else if (xspeed == -1){ dv -= 0.1; } + return dv; +} + +////////////////////////////// + +// GLOBAL SPEED +socket.on("globalSpeed", function(x){ globalSpeed(x);}) +function globalSpeed(x){ + console.log("globalSpeed") + tla.timeScale(aplayspeed(x)); + tlb.timeScale(bplayspeed(x)); + tlc.timeScale(cplayspeed(x)); + tld.timeScale(dplayspeed(x)); +} + +//=- fasterslower +$(document).keydown(function(e){ + console.log("globalSpeed",e.keyCode) + if (e.keyCode==189 ){ socket.emit("globalSpeed", -1);} + if (e.keyCode==187 ){ socket.emit("globalSpeed", 1);} + +}); + +////////////////////////////// + +///////// SEEK +// [ ] preview fwd back +var s = 10; var v = 1; +function cue(direction){ + if (direction == 1){ s += 10; } + else if (direction == -1){ s -= 10; } + return s; +} + +socket.on("seek", function(seek){ localSeek(cue(seek)) }) +$(document).keydown(function(e){ + /// === seeks around the local score + // individual musician looking around the score + if (e.keyCode==222 ){ localSeek(cue(-1)); } + if (e.keyCode==55 ){ localSeek(cue(1))} + /// === seeks all the scores + // ensemble director bringing + // all musicians to certian point + if (e.keyCode==219 ){ socket.emit("seek", -1); } + if (e.keyCode==221 ){ socket.emit("seek", 1); } +}); + +function localSeek(seek){ + tla.seek(seek);tla.pause(); + tlb.seek(seek);tlb.pause(); + tlc.seek(seek);tlc.pause(); + tld.seek(seek);tld.pause(); +} +////////////////////////////////////////////// + +// CLOSE BUTTON FOR DIVS +//$(document).on('click','.close_box',function(){ +// $(this).parent().fadeTo(300,0,function(){ + // $(this).remove(); +// }); +//}); + + + + + + + + + + diff --git a/local/parallaxis-masterworkingscore.svg b/local/parallaxis-masterworkingscore.svg new file mode 100755 index 0000000..fd361bb --- /dev/null +++ b/local/parallaxis-masterworkingscore.svg @@ -0,0 +1,39967 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ð„š + + + ð„š + + + ð„š + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ppp + p + pp + f + + + + + + + + + + + pp + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + + + + + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + + + + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/local/upload2server.sh b/local/upload2server.sh new file mode 100755 index 0000000..c0ddddc --- /dev/null +++ b/local/upload2server.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +SERVER=tzara:code/parallaxis +scp parallaxis-masterworkingscore.svg $SERVER/assets/source/ +cd scoreparts/png +scp *.png $SERVER/assets/scoreparts/png/ diff --git a/node_modules/binpack/.npmignore b/node_modules/binpack/.npmignore new file mode 100755 index 0000000..da77833 --- /dev/null +++ b/node_modules/binpack/.npmignore @@ -0,0 +1,4 @@ +build/ +binpack.node +node_modules +.lock-wscript diff --git a/node_modules/binpack/.travis.yml b/node_modules/binpack/.travis.yml new file mode 100755 index 0000000..5cc9b10 --- /dev/null +++ b/node_modules/binpack/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - 0.8 + - 0.10 +branches: + only: + - master \ No newline at end of file diff --git a/node_modules/binpack/COPYING b/node_modules/binpack/COPYING new file mode 100755 index 0000000..3c10e66 --- /dev/null +++ b/node_modules/binpack/COPYING @@ -0,0 +1,14 @@ +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so. + +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, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/binpack/changes.md b/node_modules/binpack/changes.md new file mode 100755 index 0000000..3d00d42 --- /dev/null +++ b/node_modules/binpack/changes.md @@ -0,0 +1,6 @@ +# Changelog + +## 0.0.3 + Switched "repositories" to "repository" in package.json. +## 0.0.2 + Updated documentation \ No newline at end of file diff --git a/node_modules/binpack/index.js b/node_modules/binpack/index.js new file mode 100755 index 0000000..d7ed315 --- /dev/null +++ b/node_modules/binpack/index.js @@ -0,0 +1,92 @@ +// t is a binpack typename +var sizeOfType = function(t) { + // unsigned are the same length as signed + if(t[0] === 'U') { + t = t.slice(1); + } + + return { + 'Float32' : 4, + 'Float64' : 8, + 'Int8' : 1, + 'Int16' : 2, + 'Int32' : 4, + 'Int64' : 8 + }[t]; +}; + +var endianConv = function(e, t) { + // node doesn't define 8 bit endianness + if(t[t.length - 1] === '8') + return ''; + + if(e === 'big') { + return 'BE'; + } + return 'LE'; +}; + +var addBindings = function(binpackTypename, nodeTypename){ + if(!(typeof nodeTypename !== "undefined" && nodeTypename !== null)) { + nodeTypename = binpackTypename; + } + module.exports['pack' + binpackTypename] = function(num, endian){ + b = new Buffer(sizeOfType(binpackTypename)); + b['write' + nodeTypename + endianConv(endian, binpackTypename)](num, 0, true); + return b; + } + + module.exports['unpack' + binpackTypename] = function(buff, endian){ + return buff['read' + nodeTypename + endianConv(endian, binpackTypename)](0); + } +} + +var addIntBindings = function(n) { + addBindings("Int" + n); + addBindings("UInt" + n); +} + +addIntBindings(8); +addIntBindings(16); +addIntBindings(32); + +twoToThe32 = Math.pow(2, 32); + +// 64 bit bindings require special care +var read64 = function(unsigned){return function(buff, endian){ + var e = endianConv(endian, ''); + var u = unsigned ? 'U' : ''; + var low, high; + if(e === 'LE') { + low = buff.readUInt32LE(0); + high = buff['read' + u + 'Int32LE'](4); + } else { + low = buff.readUInt32BE(4); + high = buff['read' + u + 'Int32BE'](0); + } + return high * twoToThe32 + low; +};}; + +var write64 = function(unsigned){return function(num, endian){ + var e = endianConv(endian, ''); + var u = unsigned ? 'U' : ''; + var b = new Buffer(8); + var high = Math.floor(num / twoToThe32); + var low = Math.floor(num - high * twoToThe32); + if(e == 'LE') { + b.writeUInt32LE(low, 0, true); + b['write' + u + 'Int32LE'](high, 4, true); + } else { + b.writeUInt32BE(low, 4, true); + b['write' + u + 'Int32BE'](high, 0, true); + } + return b; +};}; + +module.exports.unpackInt64 = read64(false); +module.exports.unpackUInt64 = read64(true); +module.exports.packInt64 = write64(false); +module.exports.packUInt64 = write64(true); + +addBindings("Float32", "Float"); +addBindings("Float64", "Double"); diff --git a/node_modules/binpack/package.json b/node_modules/binpack/package.json new file mode 100755 index 0000000..4e62671 --- /dev/null +++ b/node_modules/binpack/package.json @@ -0,0 +1,35 @@ +{ + "name": "binpack", + "version": "0.1.0", + "main": "index", + "author": { + "name": "Russell McClellan", + "email": "russell.mcclellan@gmail.com", + "url": "http://www.russellmcc.com" + }, + "description": "Minimalist numeric binary packing utilities for node.js", + "keywords": [ + "binary", + "pack", + "unpack" + ], + "repository": { + "type": "git", + "url": "http://github.com/russellmcc/node-binpack.git" + }, + "dependencies": {}, + "devDependencies": { + "vows": "*", + "coffee-script": "<1.7.0" + }, + "scripts": { + "test": "vows tests/*" + }, + "readme": "[![build status](https://secure.travis-ci.org/russellmcc/node-binpack.png)](http://travis-ci.org/russellmcc/node-binpack)\n# binpack\n\n_Deprecated binary packing utilities for node.js_\n\n## What's all this?\n\nnode now actually contains native code for packing binary buffers so this module is no longer needed. do not use in new code.\n\nsee the included COPYING file for licensing.\n\nthe core of the module is the set of `pack`/`unpack` pair functions. The meaning should be clear from the name - for example, `packInt32` packs a given javascript number into a 32-bit int inside a 4-byte node.js Buffer, while `unpackFloat32` unpacks a 4-byte node.js Buffer containing a native floating point number into a javascript number.\n\nThe following types are available for both pack and unpack:\n\n Float32 \n Float64 \n Int8\n Int16 \n Int32\n UInt8 \n UInt16\n UInt32\n \nEach `pack*` function takes a javascript number and outputs a node.js Buffer.\n\nEach `unpack*` function takes a node.js Buffer and outputs a javascript number.\n\nBoth types of functions take an optional second argument. If this argument is `\"big\"`, the output is put in big endian format. If the argument is `\"little\"`, the output is put in little endian format. If the argument is anything else or non-existent, we default to \"little\" endian [THIS IS NEW BEHAVIOR IN 0.0.15 - previous version would default to the native encoding.].\n", + "readmeFilename": "readme.md", + "bugs": { + "url": "https://github.com/russellmcc/node-binpack/issues" + }, + "_id": "binpack@0.1.0", + "_from": "binpack@" +} diff --git a/node_modules/binpack/readme.md b/node_modules/binpack/readme.md new file mode 100755 index 0000000..d94654a --- /dev/null +++ b/node_modules/binpack/readme.md @@ -0,0 +1,29 @@ +[![build status](https://secure.travis-ci.org/russellmcc/node-binpack.png)](http://travis-ci.org/russellmcc/node-binpack) +# binpack + +_Deprecated binary packing utilities for node.js_ + +## What's all this? + +node now actually contains native code for packing binary buffers so this module is no longer needed. do not use in new code. + +see the included COPYING file for licensing. + +the core of the module is the set of `pack`/`unpack` pair functions. The meaning should be clear from the name - for example, `packInt32` packs a given javascript number into a 32-bit int inside a 4-byte node.js Buffer, while `unpackFloat32` unpacks a 4-byte node.js Buffer containing a native floating point number into a javascript number. + +The following types are available for both pack and unpack: + + Float32 + Float64 + Int8 + Int16 + Int32 + UInt8 + UInt16 + UInt32 + +Each `pack*` function takes a javascript number and outputs a node.js Buffer. + +Each `unpack*` function takes a node.js Buffer and outputs a javascript number. + +Both types of functions take an optional second argument. If this argument is `"big"`, the output is put in big endian format. If the argument is `"little"`, the output is put in little endian format. If the argument is anything else or non-existent, we default to "little" endian [THIS IS NEW BEHAVIOR IN 0.0.15 - previous version would default to the native encoding.]. diff --git a/node_modules/binpack/tests/test-binpack.coffee b/node_modules/binpack/tests/test-binpack.coffee new file mode 100755 index 0000000..9910bf6 --- /dev/null +++ b/node_modules/binpack/tests/test-binpack.coffee @@ -0,0 +1,64 @@ +vows = require "vows" +assert = require "assert" +binpack = require "../index" + +# do a round trip +okayForOptions = (num, options) -> + return false if options.size? and Math.abs(num) > options.size? + return false if num < 0 and options.unsigned + true + +roundTrip = (type, options) -> + works : (num) -> + return null if not okayForOptions(num, options) + assert.strictEqual (binpack["unpack" + type] binpack["pack" + type] num), num + + "fails plus 1.1" : (num) -> + return null if not okayForOptions(num, options) + assert.notStrictEqual (binpack["unpack" + type] binpack["pack" + type] num + 1.1), num + + "works little endian" : (num) -> + return null if options.onebyte + return null if not okayForOptions(num, options) + assert.strictEqual (binpack["unpack" + type] (binpack["pack" + type] num, "little"), "little"), num + + "works big endian" : (num) -> + return null if options.onebyte + return null if not okayForOptions(num, options) + assert.strictEqual (binpack["unpack" + type] (binpack["pack" + type] num, "big"), "big"), num + + "fails mismatched" : (num) -> + return null if not okayForOptions(num, options) + return null if num is 0 + return null if options.onebyte + assert.notStrictEqual (binpack["unpack" + type] (binpack["pack" + type] num, "little"), "big"), num + +types = + "Float32" : {} + "Float64" : {} + "Int8" : {onebyte : true, size : 128} + "Int16" : {size : 32768} + "Int32" : {} + "Int64" : {} + "UInt8" : {unsigned : true, onebyte : true, size:255} + "UInt16" : {unsigned : true, size : 65535} + "UInt32" : {unsigned : true} + "UInt64" : {unsigned : true} + +# round trip testing makes up the core of the test. +roundTripTests = (num) -> + tests = {topic : num} + for type, options of types + tests[type + "round trip test"] = roundTrip type, options + tests + +vows.describe("binpack").addBatch( + # choose a bunch of random numbers + 'roundTrips for 0' : roundTripTests 0 + 'roundTrips for 12' : roundTripTests 12 + 'roundTrips for -18' : roundTripTests -18 + 'roundTrips for 129' : roundTripTests 129 + 'roundTrips for -400' : roundTripTests -400 + 'roundTrips for 60000' : roundTripTests 60000 + 'roundTrips for 1234567' : roundTripTests 1234567 +).export module diff --git a/node_modules/body-parser/.npmignore b/node_modules/body-parser/.npmignore new file mode 100755 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/body-parser/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/body-parser/HISTORY.md b/node_modules/body-parser/HISTORY.md new file mode 100755 index 0000000..b818f66 --- /dev/null +++ b/node_modules/body-parser/HISTORY.md @@ -0,0 +1,90 @@ +1.4.3 / 2014-06-19 +================== + + * deps: type-is@1.3.1 + - fix global variable leak + +1.4.2 / 2014-06-19 +================== + + * deps: type-is@1.3.0 + - improve type parsing + +1.4.1 / 2014-06-19 +================== + + * fix urlencoded extended deprecation message + +1.4.0 / 2014-06-19 +================== + + * add `text` parser + * add `raw` parser + * check accepted charset in content-type (accepts utf-8) + * check accepted encoding in content-encoding (accepts identity) + * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed + * deprecate `urlencoded()` without provided `extended` option + * lazy-load urlencoded parsers + * parsers split into files for reduced mem usage + * support gzip and deflate bodies + - set `inflate: false` to turn off + * deps: raw-body@1.2.2 + - Support all encodings from `iconv-lite` + +1.3.1 / 2014-06-11 +================== + + * deps: type-is@1.2.1 + - Switch dependency from mime to mime-types@1.0.0 + +1.3.0 / 2014-05-31 +================== + + * add `extended` option to urlencoded parser + +1.2.2 / 2014-05-27 +================== + + * deps: raw-body@1.1.6 + - assert stream encoding on node.js 0.8 + - assert stream encoding on node.js < 0.10.6 + - deps: bytes@1 + +1.2.1 / 2014-05-26 +================== + + * invoke `next(err)` after request fully read + - prevents hung responses and socket hang ups + +1.2.0 / 2014-05-11 +================== + + * add `verify` option + * deps: type-is@1.2.0 + - support suffix matching + +1.1.2 / 2014-05-11 +================== + + * improve json parser speed + +1.1.1 / 2014-05-11 +================== + + * fix repeated limit parsing with every request + +1.1.0 / 2014-05-10 +================== + + * add `type` option + * deps: pin for safety and consistency + +1.0.2 / 2014-04-14 +================== + + * use `type-is` module + +1.0.1 / 2014-03-20 +================== + + * lower default limits to 100kb diff --git a/node_modules/body-parser/README.md b/node_modules/body-parser/README.md new file mode 100755 index 0000000..575f808 --- /dev/null +++ b/node_modules/body-parser/README.md @@ -0,0 +1,144 @@ +# body-parser + +[![NPM version](https://badge.fury.io/js/body-parser.svg)](https://badge.fury.io/js/body-parser) +[![Build Status](https://travis-ci.org/expressjs/body-parser.svg?branch=master)](https://travis-ci.org/expressjs/body-parser) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/body-parser.svg?branch=master)](https://coveralls.io/r/expressjs/body-parser) + +Node.js body parsing middleware. + +This does not handle multipart bodies, due to their complex and typically large nature. For multipart bodies, you may be interested in the following modules: + +- [busboy](https://www.npmjs.org/package/busboy#readme) and [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme) +- [multiparty](https://www.npmjs.org/package/multiparty#readme) and [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme) +- [formidable](https://www.npmjs.org/package/formidable#readme) +- [multer](https://www.npmjs.org/package/multer#readme) + +Other body parsers you might be interested in: + +- [body](https://www.npmjs.org/package/body#readme) +- [co-body](https://www.npmjs.org/package/co-body#readme) + +## Installation + +```sh +$ npm install body-parser +``` + +## API + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// parse application/x-www-form-urlencoded +app.use(bodyParser.urlencoded()) + +// parse application/json +app.use(bodyParser.json()) + +// parse application/vnd.api+json as json +app.use(bodyParser.json({ type: 'application/vnd.api+json' })) + +app.use(function (req, res, next) { + console.log(req.body) // populated! + next() +}) +``` + +### bodyParser.json(options) + +Returns middleware that only parses `json`. This parser accepts any Unicode encoding of the body and supports automatic inflation of `gzip` and `deflate` encodings. + +The options are: + +- `strict` - only parse objects and arrays. (default: `true`) +- `inflate` - if deflated bodies will be inflated. (default: `true`) +- `limit` - maximum request body size. (default: `<100kb>`) +- `reviver` - passed to `JSON.parse()` +- `type` - request content-type to parse (default: `json`) +- `verify` - function to verify body content + +The `type` argument is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) library. This can be an extension name (like `json`), a mime type (like `application/json`), or a mime time with a wildcard (like `*/json`). + +The `verify` argument, if supplied, is called as `verify(req, res, buf, encoding)`, where `buf` is a `Buffer` of the raw request body and `encoding` is the encoding of the request. The parsing can be aborted by throwing an error. + +The `reviver` argument is passed directly to `JSON.parse` as the second argument. You can find more information on this argument [in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter). + +### bodyParser.raw(options) + +Returns middleware that parses all bodies as a `Buffer`. This parser supports automatic inflation of `gzip` and `deflate` encodings. + +The options are: + +- `inflate` - if deflated bodies will be inflated. (default: `true`) +- `limit` - maximum request body size. (default: `<100kb>`) +- `type` - request content-type to parse (default: `application/octet-stream`) +- `verify` - function to verify body content + +The `type` argument is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) library. This can be an extension name (like `bin`), a mime type (like `application/octet-stream`), or a mime time with a wildcard (like `application/*`). + +The `verify` argument, if supplied, is called as `verify(req, res, buf, encoding)`, where `buf` is a `Buffer` of the raw request body and `encoding` is the encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.text(options) + +Returns middleware that parses all bodies as a string. This parser supports automatic inflation of `gzip` and `deflate` encodings. + +The options are: + +- `defaultCharset` - the default charset to parse as, if not specified in content-type. (default: `utf-8`) +- `inflate` - if deflated bodies will be inflated. (default: `true`) +- `limit` - maximum request body size. (default: `<100kb>`) +- `type` - request content-type to parse (default: `text/plain`) +- `verify` - function to verify body content + +The `type` argument is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) library. This can be an extension name (like `txt`), a mime type (like `text/plain`), or a mime time with a wildcard (like `text/*`). + +The `verify` argument, if supplied, is called as `verify(req, res, buf, encoding)`, where `buf` is a `Buffer` of the raw request body and `encoding` is the encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.urlencoded(options) + +Returns middleware that only parses `urlencoded` bodies. This parser accepts only UTF-8 encoding of the body and supports automatic inflation of `gzip` and `deflate` encodings. + +The options are: + +- `extended` - parse extended syntax with the [qs](https://www.npmjs.org/package/qs#readme) module. (default: `true`) +- `inflate` - if deflated bodies will be inflated. (default: `true`) +- `limit` - maximum request body size. (default: `<100kb>`) +- `type` - request content-type to parse (default: `urlencoded`) +- `verify` - function to verify body content + +The `extended` argument allows to choose between parsing the urlencoded data with the `querystring` library (when `false`) or the `qs` library (when `true`). The "extended" syntax allows for rich objects and arrays to be encoded into the urlencoded format, allowing for a JSON-like exterience with urlencoded. For more information, please [see the qs library](https://www.npmjs.org/package/qs#readme). + +The `type` argument is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) library. This can be an extension name (like `urlencoded`), a mime type (like `application/x-www-form-urlencoded`), or a mime time with a wildcard (like `*/x-www-form-urlencoded`). + +The `verify` argument, if supplied, is called as `verify(req, res, buf, encoding)`, where `buf` is a `Buffer` of the raw request body and `encoding` is the encoding of the request. The parsing can be aborted by throwing an error. + +### req.body + +A new `body` object containing the parsed data is populated on the `request` object after the middleware. + +## License + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +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/node_modules/body-parser/index.js b/node_modules/body-parser/index.js new file mode 100755 index 0000000..bb9b04e --- /dev/null +++ b/node_modules/body-parser/index.js @@ -0,0 +1,83 @@ +/*! + * body-parser + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var deprecate = require('depd')('body-parser') +var fs = require('fs') +var path = require('path') + +/** + * Module exports. + */ + +exports = module.exports = deprecate.function(bodyParser, + 'bodyParser: use individual json/urlencoded middlewares') + +/** + * Path to the parser modules. + */ + +var parsersDir = path.join(__dirname, 'lib', 'types') + +/** + * Auto-load bundled parsers with getters. + */ + +fs.readdirSync(parsersDir).forEach(function onfilename(filename) { + if (!/\.js$/.test(filename)) return + + var loc = path.resolve(parsersDir, filename) + var mod + var name = path.basename(filename, '.js') + + function load() { + if (mod) { + return mod + } + + return mod = require(loc) + } + + Object.defineProperty(exports, name, { + configurable: true, + enumerable: true, + get: load + }) +}) + +/** + * Create a middleware to parse json and urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @deprecated + * @api public + */ + +function bodyParser(options){ + var opts = {} + + options = options || {} + + // exclude type option + for (var prop in options) { + if ('type' !== prop) { + opts[prop] = options[prop] + } + } + + var _urlencoded = exports.urlencoded(opts) + var _json = exports.json(opts) + + return function bodyParser(req, res, next) { + _json(req, res, function(err){ + if (err) return next(err); + _urlencoded(req, res, next); + }); + } +} diff --git a/node_modules/body-parser/lib/read.js b/node_modules/body-parser/lib/read.js new file mode 100755 index 0000000..6dd3c2b --- /dev/null +++ b/node_modules/body-parser/lib/read.js @@ -0,0 +1,155 @@ +/*! + * body-parser + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var getBody = require('raw-body') +var iconv = require('iconv-lite') +var typer = require('media-typer') +var zlib = require('zlib') + +/** + * Module exports. + */ + +module.exports = read + +/** + * Read a request into a buffer and parse. + * + * @param {object} req + * @param {object} res + * @param {function} next + * @param {function} parse + * @param {object} options + * @api private + */ + +function read(req, res, next, parse, options) { + var length + var stream + var waitend = true + + // flag as parsed + req._body = true + + try { + stream = contentstream(req, options.inflate) + length = stream.length + delete stream.length + } catch (err) { + return next(err) + } + + options = options || {} + options.length = length + + var encoding = options.encoding !== null + ? options.encoding || 'utf-8' + : null + var verify = options.verify + + options.encoding = verify + ? null + : encoding + + req.on('aborted', cleanup) + req.on('end', cleanup) + req.on('error', cleanup) + + // read body + getBody(stream, options, function (err, body) { + if (err && waitend && req.readable) { + // read off entire request + req.resume() + req.once('end', function onEnd() { + next(err) + }) + return + } + + if (err) { + if (!err.status) err.status = 400 + next(err) + return + } + + // verify + if (verify) { + try { + verify(req, res, body, encoding) + } catch (err) { + if (!err.status) err.status = 403 + return next(err) + } + } + + // parse + try { + body = typeof body !== 'string' && encoding !== null + ? iconv.decode(body, encoding) + : body + req.body = parse(body) + } catch (err){ + err.body = body + err.status = 400 + return next(err) + } + + next() + }) + + function cleanup() { + waitend = false + req.removeListener('aborted', cleanup) + req.removeListener('end', cleanup) + req.removeListener('error', cleanup) + } +} + +/** + * Get the content stream of the request. + * + * @param {object} req + * @param {boolean} [inflate=true] + * @return {object} + * @api private + */ + +function contentstream(req, inflate) { + var encoding = req.headers['content-encoding'] || 'identity' + var err + var length = req.headers['content-length'] + var stream + + if (inflate === false && encoding !== 'identity') { + err = new Error('content encoding unsupported') + err.status = 415 + throw err + } + + switch (encoding) { + case 'deflate': + stream = zlib.createInflate() + req.pipe(stream) + break + case 'gzip': + stream = zlib.createGunzip() + req.pipe(stream) + break + case 'identity': + stream = req + stream.length = length + break + default: + err = new Error('unsupported content encoding') + err.status = 415 + throw err + } + + return stream +} diff --git a/node_modules/body-parser/lib/types/json.js b/node_modules/body-parser/lib/types/json.js new file mode 100755 index 0000000..fe15a97 --- /dev/null +++ b/node_modules/body-parser/lib/types/json.js @@ -0,0 +1,105 @@ +/*! + * body-parser + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var read = require('../read') +var typer = require('media-typer') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = json + +/** + * RegExp to match the first non-space in a string. + */ + +var firstcharRegExp = /^\s*(.)/ + +/** + * Create a middleware to parse JSON bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function json(options) { + options = options || {} + + var limit = typeof options.limit !== 'number' + ? bytes(options.limit || '100kb') + : options.limit + var inflate = options.inflate !== false + var reviver = options.reviver + var strict = options.strict !== false + var type = options.type || 'json' + var verify = options.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + function parse(body) { + if (0 === body.length) { + throw new Error('invalid json, empty body') + } + + if (strict) { + var first = firstchar(body) + + if (first !== '{' && first !== '[') { + throw new Error('invalid json') + } + } + + return JSON.parse(body, reviver) + } + + return function jsonParser(req, res, next) { + if (req._body) return next() + req.body = req.body || {} + + if (!typeis(req, type)) return next() + + // RFC 7159 sec 8.1 + var charset = typer.parse(req).parameters.charset || 'utf-8' + if (charset.substr(0, 4).toLowerCase() !== 'utf-') { + var err = new Error('unsupported charset') + err.status = 415 + next(err) + return + } + + // read + read(req, res, next, parse, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the first non-whitespace character in a string. + * + * @param {string} str + * @return {function} + * @api public + */ + + +function firstchar(str) { + if (!str) return '' + var match = firstcharRegExp.exec(str) + return match ? match[1] : '' +} diff --git a/node_modules/body-parser/lib/types/raw.js b/node_modules/body-parser/lib/types/raw.js new file mode 100755 index 0000000..c1e7805 --- /dev/null +++ b/node_modules/body-parser/lib/types/raw.js @@ -0,0 +1,60 @@ +/*! + * body-parser + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = raw + +/** + * Create a middleware to parse raw bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function raw(options) { + options = options || {}; + + var inflate = options.inflate !== false + var limit = typeof options.limit !== 'number' + ? bytes(options.limit || '100kb') + : options.limit + var type = options.type || 'application/octet-stream' + var verify = options.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + function parse(buf) { + return buf + } + + return function rawParser(req, res, next) { + if (req._body) return next() + req.body = req.body || {} + + if (!typeis(req, type)) return next() + + // read + read(req, res, next, parse, { + encoding: null, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} diff --git a/node_modules/body-parser/lib/types/text.js b/node_modules/body-parser/lib/types/text.js new file mode 100755 index 0000000..379ab6e --- /dev/null +++ b/node_modules/body-parser/lib/types/text.js @@ -0,0 +1,65 @@ +/*! + * body-parser + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var read = require('../read') +var typeis = require('type-is') +var typer = require('media-typer') + +/** + * Module exports. + */ + +module.exports = text + +/** + * Create a middleware to parse text bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function text(options) { + options = options || {}; + + var defaultCharset = options.defaultCharset || 'utf-8' + var inflate = options.inflate !== false + var limit = typeof options.limit !== 'number' + ? bytes(options.limit || '100kb') + : options.limit + var type = options.type || 'text/plain' + var verify = options.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + function parse(buf) { + return buf + } + + return function textParser(req, res, next) { + if (req._body) return next() + req.body = req.body || {} + + if (!typeis(req, type)) return next() + + // get charset + var charset = typer.parse(req).parameters.charset || defaultCharset + + // read + read(req, res, next, parse, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} diff --git a/node_modules/body-parser/lib/types/urlencoded.js b/node_modules/body-parser/lib/types/urlencoded.js new file mode 100755 index 0000000..9d3e7e2 --- /dev/null +++ b/node_modules/body-parser/lib/types/urlencoded.js @@ -0,0 +1,109 @@ +/*! + * body-parser + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var deprecate = require('depd')('body-parser') +var read = require('../read') +var typer = require('media-typer') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = urlencoded + +/** + * Cache of parser modules. + */ + +var parsers = Object.create(null) + +/** + * Create a middleware to parse urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function urlencoded(options){ + options = options || {}; + + // notice because option default will flip in next major + if (options.extended === undefined) { + deprecate('urlencoded: explicitly specify "extended: true" for extended parsing') + } + + var extended = options.extended !== false + var inflate = options.inflate !== false + var limit = typeof options.limit !== 'number' + ? bytes(options.limit || '100kb') + : options.limit + var type = options.type || 'urlencoded' + var verify = options.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + var queryparse = extended + ? parser('qs') + : parser('querystring') + + function parse(body) { + return body.length + ? queryparse(body) + : {} + } + + return function urlencodedParser(req, res, next) { + if (req._body) return next(); + req.body = req.body || {} + + if (!typeis(req, type)) return next(); + + var charset = typer.parse(req).parameters.charset || 'utf-8' + if (charset.toLowerCase() !== 'utf-8') { + var err = new Error('unsupported charset') + err.status = 415 + next(err) + return + } + + // read + read(req, res, next, parse, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get parser for module name dynamically. + * + * @param {string} name + * @return {function} + * @api private + */ + +function parser(name) { + var mod = parsers[name] + + if (mod) { + return mod.parse + } + + // load module + mod = parsers[name] = require(name) + + return mod.parse +} diff --git a/node_modules/body-parser/node_modules/bytes/.npmignore b/node_modules/body-parser/node_modules/bytes/.npmignore new file mode 100755 index 0000000..9daeafb --- /dev/null +++ b/node_modules/body-parser/node_modules/bytes/.npmignore @@ -0,0 +1 @@ +test diff --git a/node_modules/body-parser/node_modules/bytes/History.md b/node_modules/body-parser/node_modules/bytes/History.md new file mode 100755 index 0000000..5097352 --- /dev/null +++ b/node_modules/body-parser/node_modules/bytes/History.md @@ -0,0 +1,25 @@ + +1.0.0 / 2014-05-05 +================== + + * add negative support. fixes #6 + +0.3.0 / 2014-03-19 +================== + + * added terabyte support + +0.2.1 / 2013-04-01 +================== + + * add .component + +0.2.0 / 2012-10-28 +================== + + * bytes(200).should.eql('200b') + +0.1.0 / 2012-07-04 +================== + + * add bytes to string conversion [yields] diff --git a/node_modules/body-parser/node_modules/bytes/Makefile b/node_modules/body-parser/node_modules/bytes/Makefile new file mode 100755 index 0000000..8e8640f --- /dev/null +++ b/node_modules/body-parser/node_modules/bytes/Makefile @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --reporter spec \ + --require should + +.PHONY: test \ No newline at end of file diff --git a/node_modules/body-parser/node_modules/bytes/Readme.md b/node_modules/body-parser/node_modules/bytes/Readme.md new file mode 100755 index 0000000..5591b28 --- /dev/null +++ b/node_modules/body-parser/node_modules/bytes/Readme.md @@ -0,0 +1,54 @@ +# node-bytes + + Byte string parser / formatter. + +## Example: + +```js +bytes('1kb') +// => 1024 + +bytes('2mb') +// => 2097152 + +bytes('1gb') +// => 1073741824 + +bytes(1073741824) +// => 1gb + +bytes(1099511627776) +// => 1tb +``` + +## Installation + +``` +$ npm install bytes +$ component install visionmedia/bytes.js +``` + +## License + +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> + +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/node_modules/body-parser/node_modules/bytes/component.json b/node_modules/body-parser/node_modules/bytes/component.json new file mode 100755 index 0000000..2929c25 --- /dev/null +++ b/node_modules/body-parser/node_modules/bytes/component.json @@ -0,0 +1,7 @@ +{ + "name": "bytes", + "description": "byte size string parser / serializer", + "keywords": ["bytes", "utility"], + "version": "0.2.1", + "scripts": ["index.js"] +} diff --git a/node_modules/body-parser/node_modules/bytes/index.js b/node_modules/body-parser/node_modules/bytes/index.js new file mode 100755 index 0000000..c1da2fe --- /dev/null +++ b/node_modules/body-parser/node_modules/bytes/index.js @@ -0,0 +1,41 @@ + +/** + * Parse byte `size` string. + * + * @param {String} size + * @return {Number} + * @api public + */ + +module.exports = function(size) { + if ('number' == typeof size) return convert(size); + var parts = size.match(/^(\d+(?:\.\d+)?) *(kb|mb|gb|tb)$/) + , n = parseFloat(parts[1]) + , type = parts[2]; + + var map = { + kb: 1 << 10 + , mb: 1 << 20 + , gb: 1 << 30 + , tb: ((1 << 30) * 1024) + }; + + return map[type] * n; +}; + +/** + * convert bytes into string. + * + * @param {Number} b - bytes to convert + * @return {String} + * @api public + */ + +function convert (b) { + var tb = ((1 << 30) * 1024), gb = 1 << 30, mb = 1 << 20, kb = 1 << 10, abs = Math.abs(b); + if (abs >= tb) return (Math.round(b / tb * 100) / 100) + 'tb'; + if (abs >= gb) return (Math.round(b / gb * 100) / 100) + 'gb'; + if (abs >= mb) return (Math.round(b / mb * 100) / 100) + 'mb'; + if (abs >= kb) return (Math.round(b / kb * 100) / 100) + 'kb'; + return b + 'b'; +} diff --git a/node_modules/body-parser/node_modules/bytes/package.json b/node_modules/body-parser/node_modules/bytes/package.json new file mode 100755 index 0000000..04e9c37 --- /dev/null +++ b/node_modules/body-parser/node_modules/bytes/package.json @@ -0,0 +1,32 @@ +{ + "name": "bytes", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "description": "byte size string parser / serializer", + "repository": { + "type": "git", + "url": "https://github.com/visionmedia/bytes.js.git" + }, + "version": "1.0.0", + "main": "index.js", + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "component": { + "scripts": { + "bytes/index.js": "index.js" + } + }, + "readme": "# node-bytes\n\n Byte string parser / formatter.\n\n## Example:\n\n```js\nbytes('1kb')\n// => 1024\n\nbytes('2mb')\n// => 2097152\n\nbytes('1gb')\n// => 1073741824\n\nbytes(1073741824)\n// => 1gb\n\nbytes(1099511627776)\n// => 1tb\n```\n\n## Installation\n\n```\n$ npm install bytes\n$ component install visionmedia/bytes.js\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/bytes.js/issues" + }, + "_id": "bytes@1.0.0", + "_from": "bytes@1.0.0" +} diff --git a/node_modules/body-parser/node_modules/depd/.npmignore b/node_modules/body-parser/node_modules/depd/.npmignore new file mode 100755 index 0000000..0c7e391 --- /dev/null +++ b/node_modules/body-parser/node_modules/depd/.npmignore @@ -0,0 +1,4 @@ +coverage/ +files/ +test/ +.travis.yml diff --git a/node_modules/body-parser/node_modules/depd/History.md b/node_modules/body-parser/node_modules/depd/History.md new file mode 100755 index 0000000..b9d1c6d --- /dev/null +++ b/node_modules/body-parser/node_modules/depd/History.md @@ -0,0 +1,27 @@ +0.3.0 / 2014-06-16 +================== + + * Add `NO_DEPRECATION` environment variable + +0.2.0 / 2014-06-15 +================== + + * Add `deprecate.property(obj, prop, message)` + * Remove `supports-color` dependency for node.js 0.8 + +0.1.0 / 2014-06-15 +================== + + * Add `deprecate.function(fn, message)` + * Add `process.on('deprecation', fn)` emitter + * Automatically generate message when omitted from `deprecate()` + +0.0.1 / 2014-06-15 +================== + + * Fix warning for dynamic calls at singe call site + +0.0.0 / 2014-06-15 +================== + + * Initial implementation diff --git a/node_modules/body-parser/node_modules/depd/LICENSE b/node_modules/body-parser/node_modules/depd/LICENSE new file mode 100755 index 0000000..b7dce6c --- /dev/null +++ b/node_modules/body-parser/node_modules/depd/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014 Douglas Christopher Wilson + +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/node_modules/body-parser/node_modules/depd/Readme.md b/node_modules/body-parser/node_modules/depd/Readme.md new file mode 100755 index 0000000..872a8b4 --- /dev/null +++ b/node_modules/body-parser/node_modules/depd/Readme.md @@ -0,0 +1,249 @@ +# depd + +[![NPM version](https://badge.fury.io/js/depd.svg)](http://badge.fury.io/js/depd) +[![Build Status](https://travis-ci.org/dougwilson/nodejs-depd.svg?branch=master)](https://travis-ci.org/dougwilson/nodejs-depd) +[![Coverage Status](https://img.shields.io/coveralls/dougwilson/nodejs-depd.svg?branch=master)](https://coveralls.io/r/dougwilson/nodejs-depd) + +Deprecate all the things + +> With great modules comes great responsibility; mark things deprecated! + +## Install + +```sh +$ npm install depd +``` + +## API + +```js +var depd = require('depd') +var deprecate = depd('my-module') +``` + +This library allows you to display deprecation messages to your users. +This library goes above and beyond with deprecation warnings by +introspecting the call stack (but only the bits that it is interested +in). + +Instead of just warning on the first invocation of a deprecated +function and never again, this module will warn on the first invocation +of a deprecated function per unique call site, making it ideal to alert +users of all deprecated uses across the code base, rather than just +whatever happens to execute first. + +The deprecation warnings from this module also include the file and line +information for the call into the module that the deprecated function was +in. + +### depd(namespace) + +Create a new deprecate function that uses the given namespace name in the +messages and will display the call site prior to the stack entering the +file this function was called from. It is highly suggested you use the +name of your module as the namespace. + +### deprecate(message) + +Call this function from deprecated code to display a deprecation message. +This message will appear once per unique caller site. Caller site is the +first call site in the stack in a different file from the caller of this +function. + +If the message is omitted, a message is generated for you based on the site +of the `deprecate()` call and will display the name of the function called, +similar to the name displayed in a stack trace. + +### deprecate.function(fn, message) + +Call this function to wrap a given function in a deprecation message on any +call to the function. An optional message can be supplied to provide a custom +message. + +### deprecate.property(obj, prop, message) + +Call this function to wrap a given property on object in a deprecation message +on any accessing or setting of the property. An optional message can be supplied +to provide a custom message. + +The method must be called on the object where the property belongs (not +inherited from the prototype). + +If the property is a data descriptor, it will be converted to an accessor +descriptor in order to display the deprecation message. + +### process.on('deprecation', fn) + +This module will allow easy capturing of deprecation errors by emitting the +errors as the type "deprecation" on the global `process`. If there are no +listeners for this type, the errors are written to STDERR as normal, but if +there are any listeners, nothing will be written to STDERR and instead only +emitted. From there, you can write the errors in a different format or to a +logging source. + +The error represents the deprecation and is emitted only once with the same +rules as writing to STDERR. The error has the following properties: + + - `message` - This is the message given by the library + - `name` - This is always `'DeprecationError'` + - `namespace` - This is the namespace the deprecation came from + - `stack` - This is the stack of the call to the deprecated thing + +Example `error.stack` output: + +``` +DeprecationError: my-cool-module deprecated oldfunction + at Object. ([eval]-wrapper:6:22) + at Module._compile (module.js:456:26) + at evalScript (node.js:532:25) + at startup (node.js:80:7) + at node.js:902:3 +``` + +### process.env.NO_DEPRECATION + +As a user of modules that are deprecated, the environment variable `NO_DEPRECATION` +is provided as a quick solution to silencing deprecation warnings from being +output. The format of this is similar to that of `DEBUG`: + +```sh +$ NO_DEPRECATION=my-module,othermod node app.js +``` + +This will suppress deprecations from being output for "my-module" and "othermod". +The value is a list of comma-separated namespaces. To suppress every warning +across all namespaces, use the value `*` for a namespace. + +**NOTE** This will not suppress the deperecations given to any "deprecation" +event listeners, just the output to STDERR. + +## Display + +![message](files/message.png) + +When a user calls a function in your library that you mark deprecated, they +will see the following written to STDERR (in the given colors, similar colors +and layout to the `debug` module): + +``` +bright cyan bright yellow +| | grey cyan +| | | | +â–¼ â–¼ â–¼ â–¼ +my-cool-module deprecated oldfunction [eval]-wrapper:6:22 +â–² â–² â–² â–² +| | | | +namespace | | location of mycoolmod.oldfunction() call + | deprecation message + the word "deprecated" +``` + +If the user redirects their STDERR to a file or somewhere that does not support +colors, they see (similar layout to the `debug` module): + +``` +Sun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22 +â–² â–² â–² â–² â–² +| | | | | +timestamp of message namespace | | location of mycoolmod.oldfunction() call + | deprecation message + the word "deprecated" +``` + +## Examples + +### Deprecating all calls to a function + +This will display a deprecated message about "oldfunction" being deprecated +from "my-module" on STDERR. + +```js +var deprecate = require('depd')('my-cool-module') + +// message automatically derived from function name +// Object.oldfunction +exports.oldfunction = deprecate.function(function oldfunction() { + // all calls to function are deprecated +}) + +// specific message +exports.oldfunction = deprecate.function(function () { + // all calls to function are deprecated +}, 'oldfunction') +``` + +### Conditionally deprecating a function call + +This will display a deprecated message about "weirdfunction" being deprecated +from "my-module" on STDERR when called with less than 2 arguments. + +```js +var deprecate = require('depd')('my-cool-module') + +exports.weirdfunction = function () { + if (arguments.length < 2) { + // calls with 0 or 1 args are deprecated + deprecate('weirdfunction args < 2') + } +} +``` + +When calling `deprecate` as a function, the warning is counted per call site +within your own module, so you can display different deprecations depending +on different situations and the users will still get all the warnings: + +```js +var deprecate = require('depd')('my-cool-module') + +exports.weirdfunction = function () { + if (arguments.length < 2) { + // calls with 0 or 1 args are deprecated + deprecate('weirdfunction args < 2') + } else if (typeof arguments[0] !== 'string') { + // calls with non-string first argument are deprecated + deprecate('weirdfunction non-string first arg') + } +} +``` + +### Deprecating property access + +This will display a deprecated message about "oldprop" being deprecated +from "my-module" on STDERR when accessed. A deprecation will be displayed +when setting the value and when getting the value. + +```js +var deprecate = require('depd')('my-cool-module') + +exports.oldprop = 'something' + +// message automatically derives from property name +deprecate.property(exports, 'oldprop') + +// explicit message +deprecate.property(exports, 'oldprop', 'oldprop >= 0.10') +``` + +## License + +The MIT License (MIT) + +Copyright (c) 2014 Douglas Christopher Wilson + +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/node_modules/body-parser/node_modules/depd/index.js b/node_modules/body-parser/node_modules/depd/index.js new file mode 100755 index 0000000..f42aa07 --- /dev/null +++ b/node_modules/body-parser/node_modules/depd/index.js @@ -0,0 +1,452 @@ +/*! + * depd + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var EventEmitter = require('events').EventEmitter +var relative = require('path').relative + +/** + * Module exports. + */ + +module.exports = depd + +/** + * Get the path to base files on. + */ + +var basePath = process.cwd() + +/** + * Get listener count on event emitter. + */ + +/*istanbul ignore next*/ +var eventListenerCount = EventEmitter.listenerCount + || function (emitter, type) { return emitter.listeners(type).length } + +/** + * Convert a data descriptor to accessor descriptor. + */ + +function convertDataDescriptorToAccessor(obj, prop, message) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + var value = descriptor.value + + descriptor.get = function getter() { return value } + + if (descriptor.writable) { + descriptor.set = function setter(val) { return value = val } + } + + delete descriptor.value + delete descriptor.writable + + Object.defineProperty(obj, prop, descriptor) + + return descriptor +} + +/** + * Create arguments string to keep arity. + */ + +function createArgumentsString(arity) { + var str = '' + + for (var i = 0; i < arity; i++) { + str += ', arg' + i + } + + return str.substr(2) +} + +/** + * Create stack string from stack. + */ + +function createStackString(stack) { + var str = this.name + ': ' + this.namespace + + if (this.message) { + str += ' deprecated ' + this.message + } + + for (var i = 0; i < stack.length; i++) { + str += '\n at ' + stack[i].toString() + } + + return str +} + +/** + * Create deprecate for namespace in caller. + */ + +function depd(namespace) { + if (!namespace) { + throw new TypeError('argument namespace is required') + } + + var stack = getStack() + var site = callSiteLocation(stack[1]) + var file = site[0] + + function deprecate(message) { + // call to self as log + log.call(deprecate, message) + } + + deprecate._file = file + deprecate._ignored = isignored(namespace) + deprecate._namespace = namespace + deprecate._warned = Object.create(null) + + deprecate.function = wrapfunction + deprecate.property = wrapproperty + + return deprecate +} + +/** + * Determine if namespace is ignored. + */ + +function isignored(namespace) { + var str = process.env.NO_DEPRECATION || '' + var val = str.split(/[ ,]+/) + + namespace = String(namespace).toLowerCase() + + for (var i = 0 ; i < val.length; i++) { + if (!(str = val[i])) continue; + + // namespace ignored + if (str === '*' || str.toLowerCase() === namespace) { + return true + } + } + + return false +} + +/** + * Display deprecation message. + */ + +function log(message, site) { + var haslisteners = eventListenerCount(process, 'deprecation') !== 0 + + // abort early if no destination + if (!haslisteners && this._ignored) { + return + } + + var caller + var callSite + var i = 0 + var seen = false + var stack = getStack() + var file = this._file + + if (site) { + // provided site + callSite = callSiteLocation(stack[1]) + callSite.name = site.name + file = callSite[0] + } else { + // get call site + i = 2 + site = callSiteLocation(stack[i]) + callSite = site + } + + // get caller of deprecated thing in relation to file + for (; i < stack.length; i++) { + caller = callSiteLocation(stack[i]) + + if (caller[0] === file) { + seen = true + } else if (seen) { + break + } + } + + var key = caller + ? site.join(':') + '__' + caller.join(':') + : undefined + + if (key !== undefined && key in this._warned) { + // already warned + return + } + + this._warned[key] = true + + // generate automatic message from call site + if (!message) { + message = callSite === site || !callSite.name + ? defaultMessage(site) + : defaultMessage(callSite) + } + + // emit deprecation if listeners exist + if (haslisteners) { + var err = DeprecationError(this._namespace, message, stack.slice(i)) + process.emit('deprecation', err) + return + } + + // format and write message + var format = process.stderr.isTTY + ? formatColor + : formatPlain + var msg = format.call(this, message, caller) + process.stderr.write(msg + '\n', 'utf8') + + return +} + +/** + * Get call site location as array. + */ + +function callSiteLocation(callSite) { + var file = callSite.getFileName() || '' + var line = callSite.getLineNumber() + var colm = callSite.getColumnNumber() + + if (callSite.isEval()) { + file = callSite.getEvalOrigin() + ', ' + file + } + + var site = [file, line, colm] + + site.callSite = callSite + site.name = callSite.getFunctionName() + + return site +} + +/** + * Generate a default message from the site. + */ + +function defaultMessage(site) { + var callSite = site.callSite + var funcName = site.name + + // make useful anonymous name + if (!funcName) { + funcName = '' + } + + return callSite.getMethodName() + ? callSite.getTypeName() + '.' + funcName + : funcName +} + +/** + * Format deprecation message without color. + */ + +function formatPlain(msg, caller) { + var timestamp = new Date().toUTCString() + + var formatted = timestamp + + ' ' + this._namespace + + ' deprecated ' + msg + + if (caller) { + formatted += ' at ' + formatLocation(caller) + } + + return formatted +} + +/** + * Format deprecation message with color. + */ + +function formatColor(msg, caller) { + var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' // bold cyan + + ' \x1b[33;1mdeprecated\x1b[22;39m' // bold yellow + + ' \x1b[90m' + msg + '\x1b[39m' // grey + + if (caller) { + formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan + } + + return formatted +} + +/** + * Format call site location. + */ + +function formatLocation(callSite) { + return relative(basePath, callSite[0]) + + ':' + callSite[1] + + ':' + callSite[2] +} + +/** + * Get the stack as array of call sites. + */ + +function getStack() { + var obj = {} + var prep = Error.prepareStackTrace + + Error.prepareStackTrace = prepareObjectStackTrace + Error.captureStackTrace(obj, getStack) + + var stack = obj.stack + + Error.prepareStackTrace = prep + + return stack +} + +/** + * Capture call site stack from v8. + */ + +function prepareObjectStackTrace(obj, stack) { + return stack +} + +/** + * Return a wrapped function in a deprecation message. + */ + +function wrapfunction(fn, message) { + if (typeof fn !== 'function') { + throw new TypeError('argument fn must be a function') + } + + var args = createArgumentsString(fn.length) + var deprecate = this + var stack = getStack() + var site = callSiteLocation(stack[1]) + + site.name = fn.name + + var deprecatedfn = eval('(function (' + args + ') {\n' + + 'log.call(deprecate, message, site)\n' + + 'return fn.apply(this, arguments)\n' + + '})') + + return deprecatedfn +} + +/** + * Wrap property in a deprecation message. + */ + +function wrapproperty(obj, prop, message) { + if (!obj || typeof obj !== 'object') { + throw new TypeError('argument obj must be object') + } + + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + + if (!descriptor) { + throw new TypeError('must call property on owner object') + } + + if (!descriptor.configurable) { + throw new TypeError('property must be configurable') + } + + var deprecate = this + var stack = getStack() + var site = callSiteLocation(stack[1]) + + // set site name + site.name = prop + + // convert data descriptor + if ('value' in descriptor) { + descriptor = convertDataDescriptorToAccessor(obj, prop, message) + } + + var get = descriptor.get + var set = descriptor.set + + // wrap getter + if (typeof get === 'function') { + descriptor.get = function getter() { + log.call(deprecate, message, site) + return get.apply(this, arguments) + } + } + + // wrap setter + if (typeof set === 'function') { + descriptor.set = function setter() { + log.call(deprecate, message, site) + return set.apply(this, arguments) + } + } + + Object.defineProperty(obj, prop, descriptor) +} + +/** + * Create DeprecationError for deprecation + */ + +function DeprecationError(namespace, message, stack) { + var error = new Error() + var stackString + + Object.defineProperty(error, 'constructor', { + value: DeprecationError + }) + + Object.defineProperty(error, 'message', { + configurable: true, + enumerable: false, + value: message, + writable: true + }) + + Object.defineProperty(error, 'name', { + enumerable: false, + configurable: true, + value: 'DeprecationError', + writable: true + }) + + Object.defineProperty(error, 'namespace', { + configurable: true, + enumerable: false, + value: namespace, + writable: true + }) + + Object.defineProperty(error, 'stack', { + configurable: true, + enumerable: false, + get: function () { + if (stackString !== undefined) { + return stackString + } + + // prepare stack trace + return stackString = createStackString.call(this, stack) + }, + set: function setter(val) { + stackString = val + } + }) + + return error +} diff --git a/node_modules/body-parser/node_modules/depd/package.json b/node_modules/body-parser/node_modules/depd/package.json new file mode 100755 index 0000000..ae4e5cf --- /dev/null +++ b/node_modules/body-parser/node_modules/depd/package.json @@ -0,0 +1,38 @@ +{ + "name": "depd", + "description": "Deprecate all the things", + "version": "0.3.0", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "license": "MIT", + "keywords": [ + "deprecate", + "deprecated" + ], + "repository": { + "type": "git", + "url": "git://github.com/dougwilson/nodejs-depd" + }, + "devDependencies": { + "istanbul": "0.2.10", + "mocha": "~1.20.1", + "should": "~4.0.4" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --reporter spec --bail --require should test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --require should test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --require should test/" + }, + "readme": "# depd\n\n[![NPM version](https://badge.fury.io/js/depd.svg)](http://badge.fury.io/js/depd)\n[![Build Status](https://travis-ci.org/dougwilson/nodejs-depd.svg?branch=master)](https://travis-ci.org/dougwilson/nodejs-depd)\n[![Coverage Status](https://img.shields.io/coveralls/dougwilson/nodejs-depd.svg?branch=master)](https://coveralls.io/r/dougwilson/nodejs-depd)\n\nDeprecate all the things\n\n> With great modules comes great responsibility; mark things deprecated!\n\n## Install\n\n```sh\n$ npm install depd\n```\n\n## API\n\n```js\nvar depd = require('depd')\nvar deprecate = depd('my-module')\n```\n\nThis library allows you to display deprecation messages to your users.\nThis library goes above and beyond with deprecation warnings by\nintrospecting the call stack (but only the bits that it is interested\nin).\n\nInstead of just warning on the first invocation of a deprecated\nfunction and never again, this module will warn on the first invocation\nof a deprecated function per unique call site, making it ideal to alert\nusers of all deprecated uses across the code base, rather than just\nwhatever happens to execute first.\n\nThe deprecation warnings from this module also include the file and line\ninformation for the call into the module that the deprecated function was\nin.\n\n### depd(namespace)\n\nCreate a new deprecate function that uses the given namespace name in the\nmessages and will display the call site prior to the stack entering the\nfile this function was called from. It is highly suggested you use the\nname of your module as the namespace.\n\n### deprecate(message)\n\nCall this function from deprecated code to display a deprecation message.\nThis message will appear once per unique caller site. Caller site is the\nfirst call site in the stack in a different file from the caller of this\nfunction.\n\nIf the message is omitted, a message is generated for you based on the site\nof the `deprecate()` call and will display the name of the function called,\nsimilar to the name displayed in a stack trace.\n\n### deprecate.function(fn, message)\n\nCall this function to wrap a given function in a deprecation message on any\ncall to the function. An optional message can be supplied to provide a custom\nmessage.\n\n### deprecate.property(obj, prop, message)\n\nCall this function to wrap a given property on object in a deprecation message\non any accessing or setting of the property. An optional message can be supplied\nto provide a custom message.\n\nThe method must be called on the object where the property belongs (not\ninherited from the prototype).\n\nIf the property is a data descriptor, it will be converted to an accessor\ndescriptor in order to display the deprecation message.\n\n### process.on('deprecation', fn)\n\nThis module will allow easy capturing of deprecation errors by emitting the\nerrors as the type \"deprecation\" on the global `process`. If there are no\nlisteners for this type, the errors are written to STDERR as normal, but if\nthere are any listeners, nothing will be written to STDERR and instead only\nemitted. From there, you can write the errors in a different format or to a\nlogging source.\n\nThe error represents the deprecation and is emitted only once with the same\nrules as writing to STDERR. The error has the following properties:\n\n - `message` - This is the message given by the library\n - `name` - This is always `'DeprecationError'`\n - `namespace` - This is the namespace the deprecation came from\n - `stack` - This is the stack of the call to the deprecated thing\n\nExample `error.stack` output:\n\n```\nDeprecationError: my-cool-module deprecated oldfunction\n at Object. ([eval]-wrapper:6:22)\n at Module._compile (module.js:456:26)\n at evalScript (node.js:532:25)\n at startup (node.js:80:7)\n at node.js:902:3\n```\n\n### process.env.NO_DEPRECATION\n\nAs a user of modules that are deprecated, the environment variable `NO_DEPRECATION`\nis provided as a quick solution to silencing deprecation warnings from being\noutput. The format of this is similar to that of `DEBUG`:\n\n```sh\n$ NO_DEPRECATION=my-module,othermod node app.js\n```\n\nThis will suppress deprecations from being output for \"my-module\" and \"othermod\".\nThe value is a list of comma-separated namespaces. To suppress every warning\nacross all namespaces, use the value `*` for a namespace.\n\n**NOTE** This will not suppress the deperecations given to any \"deprecation\"\nevent listeners, just the output to STDERR.\n\n## Display\n\n![message](files/message.png)\n\nWhen a user calls a function in your library that you mark deprecated, they\nwill see the following written to STDERR (in the given colors, similar colors\nand layout to the `debug` module):\n\n```\nbright cyan bright yellow\n| | grey cyan\n| | | |\nâ–¼ â–¼ â–¼ â–¼\nmy-cool-module deprecated oldfunction [eval]-wrapper:6:22\nâ–² â–² â–² â–²\n| | | |\nnamespace | | location of mycoolmod.oldfunction() call\n | deprecation message\n the word \"deprecated\"\n```\n\nIf the user redirects their STDERR to a file or somewhere that does not support\ncolors, they see (similar layout to the `debug` module):\n\n```\nSun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22\nâ–² â–² â–² â–² â–²\n| | | | |\ntimestamp of message namespace | | location of mycoolmod.oldfunction() call\n | deprecation message\n the word \"deprecated\"\n```\n\n## Examples\n\n### Deprecating all calls to a function\n\nThis will display a deprecated message about \"oldfunction\" being deprecated\nfrom \"my-module\" on STDERR.\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\n// message automatically derived from function name\n// Object.oldfunction\nexports.oldfunction = deprecate.function(function oldfunction() {\n // all calls to function are deprecated\n})\n\n// specific message\nexports.oldfunction = deprecate.function(function () {\n // all calls to function are deprecated\n}, 'oldfunction')\n```\n\n### Conditionally deprecating a function call\n\nThis will display a deprecated message about \"weirdfunction\" being deprecated\nfrom \"my-module\" on STDERR when called with less than 2 arguments.\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\nexports.weirdfunction = function () {\n if (arguments.length < 2) {\n // calls with 0 or 1 args are deprecated\n deprecate('weirdfunction args < 2')\n }\n}\n```\n\nWhen calling `deprecate` as a function, the warning is counted per call site\nwithin your own module, so you can display different deprecations depending\non different situations and the users will still get all the warnings:\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\nexports.weirdfunction = function () {\n if (arguments.length < 2) {\n // calls with 0 or 1 args are deprecated\n deprecate('weirdfunction args < 2')\n } else if (typeof arguments[0] !== 'string') {\n // calls with non-string first argument are deprecated\n deprecate('weirdfunction non-string first arg')\n }\n}\n```\n\n### Deprecating property access\n\nThis will display a deprecated message about \"oldprop\" being deprecated\nfrom \"my-module\" on STDERR when accessed. A deprecation will be displayed\nwhen setting the value and when getting the value.\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\nexports.oldprop = 'something'\n\n// message automatically derives from property name\ndeprecate.property(exports, 'oldprop')\n\n// explicit message\ndeprecate.property(exports, 'oldprop', 'oldprop >= 0.10')\n```\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/dougwilson/nodejs-depd/issues" + }, + "_id": "depd@0.3.0", + "_from": "depd@0.3.0" +} diff --git a/node_modules/body-parser/node_modules/iconv-lite/.npmignore b/node_modules/body-parser/node_modules/iconv-lite/.npmignore new file mode 100755 index 0000000..6c69ea0 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/.npmignore @@ -0,0 +1,5 @@ +*~ +*sublime-* +generation +test +wiki diff --git a/node_modules/body-parser/node_modules/iconv-lite/.travis.yml b/node_modules/body-parser/node_modules/iconv-lite/.travis.yml new file mode 100755 index 0000000..9169b9f --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/.travis.yml @@ -0,0 +1,5 @@ + language: node_js + node_js: + - 0.8 + - 0.10 + - 0.11 diff --git a/node_modules/body-parser/node_modules/iconv-lite/Changelog.md b/node_modules/body-parser/node_modules/iconv-lite/Changelog.md new file mode 100755 index 0000000..13ba762 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/Changelog.md @@ -0,0 +1,24 @@ + +# 0.4.3 / 2014-06-14 + + * added encodings UTF-16BE and UTF-16 with BOM + +# 0.4.2 / 2014-06-12 + + * don't throw exception if `extendNodeEncodings()` is called more than once + +# 0.4.1 / 2014-06-11 + + * codepage 808 added + + +# 0.4.0 / 2014-06-10 + + * code is rewritten from scratch + * all widespread encodings are supported + * streaming interface added + * browserify compatibility added + * (optional) extend core primitive encodings to make usage even simpler + * moved from vows to mocha as the testing framework + + diff --git a/node_modules/body-parser/node_modules/iconv-lite/LICENSE b/node_modules/body-parser/node_modules/iconv-lite/LICENSE new file mode 100755 index 0000000..d518d83 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2011 Alexander Shtuchkin + +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/node_modules/body-parser/node_modules/iconv-lite/README.md b/node_modules/body-parser/node_modules/iconv-lite/README.md new file mode 100755 index 0000000..d7b8f1a --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/README.md @@ -0,0 +1,137 @@ +## Pure JS character encoding conversion + + + + * Doesn't need native code compilation. Works on Windows and in sandboxed environments like [Cloud9](http://c9.io). + * Used in popular projects like [Grunt](http://gruntjs.com/), [Nodemailer](http://www.nodemailer.com/), [Yeoman](http://yeoman.io/) and others. + * Faster than [node-iconv](https://github.com/bnoordhuis/node-iconv) (see below for performance comparison). + * Intuitive encode/decode API + * Streaming support for Node v0.10+ + * Can extend Node.js primitives (buffers, streams) to support all iconv-lite encodings. + * In-browser usage via [Browserify](https://github.com/substack/node-browserify) (~180k gzip compressed with Buffer shim included). + * License: MIT. + +[![NPM Stats](https://nodei.co/npm/iconv-lite.png?downloads=true)](https://npmjs.org/packages/iconv-lite/) + +## Usage +### Basic API +```javascript +var iconv = require('iconv-lite'); + +// Convert from an encoded buffer to js string. +str = iconv.decode(new Buffer([0x68, 0x65, 0x6c, 0x6c, 0x6f]), 'win1251'); + +// Convert from js string to an encoded buffer. +buf = iconv.encode("Sample input string", 'win1251'); + +// Check if encoding is supported +iconv.encodingExists("us-ascii") +``` + +### Streaming API (Node v0.10+) +```javascript + +// Decode stream (from binary stream to js strings) +http.createServer(function(req, res) { + var converterStream = iconv.decodeStream('win1251'); + req.pipe(converterStream); + + converterStream.on('data', function(str) { + console.log(str); // Do something with decoded strings, chunk-by-chunk. + }); +}); + +// Convert encoding streaming example +fs.createReadStream('file-in-win1251.txt') + .pipe(iconv.decodeStream('win1251')) + .pipe(iconv.encodeStream('ucs2')) + .pipe(fs.createWriteStream('file-in-ucs2.txt')); + +// Sugar: all encode/decode streams have .collect(cb) method to accumulate data. +http.createServer(function(req, res) { + req.pipe(iconv.decodeStream('win1251')).collect(function(err, body) { + assert(typeof body == 'string'); + console.log(body); // full request body string + }); +}); +``` + +### Extend Node.js own encodings +```javascript +// After this call all Node basic primitives will understand iconv-lite encodings. +iconv.extendNodeEncodings(); + +// Examples: +buf = new Buffer(str, 'win1251'); +buf.write(str, 'gbk'); +str = buf.toString('latin1'); +assert(Buffer.isEncoding('iso-8859-15')); +Buffer.byteLength(str, 'us-ascii'); + +http.createServer(function(req, res) { + req.setEncoding('big5'); + req.collect(function(err, body) { + console.log(body); + }); +}); + +fs.createReadStream("file.txt", "shift_jis"); + +// External modules are also supported (if they use Node primitives, which they probably do). +request = require('request'); +request({ + url: "http://github.com/", + encoding: "cp932" +}); + +// To remove extensions +iconv.undoExtendNodeEncodings(); +``` + +## Supported encodings + + * All node.js native encodings: utf8, ucs2 / utf16, ascii, binary, base64, hex. + * Additional unicode encodings: utf16, utf16-be. + * All widespread singlebyte encodings: Windows 125x family, ISO-8859 family, + IBM/DOS codepages, Macintosh family, KOI8 family, all others supported by iconv library. + Aliases like 'latin1', 'us-ascii' also supported. + * All widespread multibyte encodings: CP932, CP936, CP949, CP950, GB2313, GBK, GB18030, Big5, Shift_JIS, EUC-JP. + +See [all supported encodings on wiki](https://github.com/ashtuchkin/iconv-lite/wiki/Supported-Encodings). + +Most singlebyte encodings are generated automatically from [node-iconv](https://github.com/bnoordhuis/node-iconv). Thank you Ben Noordhuis and libiconv authors! + +Multibyte encodings are generated from [Unicode.org mappings](http://www.unicode.org/Public/MAPPINGS/) and [WHATWG Encoding Standard mappings](http://encoding.spec.whatwg.org/). Thank you, respective authors! + + +## Encoding/decoding speed + +Comparison with node-iconv module (1000x256kb, on MacBook Pro, Core i5/2.6 GHz, Node v0.10.26). +Note: your results may vary, so please always check on your hardware. + + operation iconv@2.1.4 iconv-lite@0.4.0 + ---------------------------------------------------------- + encode('win1251') ~130 Mb/s ~380 Mb/s + decode('win1251') ~127 Mb/s ~210 Mb/s + + +## Notes + +When decoding, be sure to supply a Buffer to decode() method, otherwise [bad things usually happen](https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding). +Untranslatable characters are set to � or ?. No transliteration is currently supported. + +## Testing + +```bash +$ git clone git@github.com:ashtuchkin/iconv-lite.git +$ cd iconv-lite +$ npm install +$ npm test + +$ # To view performance: +$ node test/performance.js +``` + +## Adoption +[![NPM](https://nodei.co/npm-dl/iconv-lite.png)](https://nodei.co/npm/iconv-lite/) + diff --git a/node_modules/body-parser/node_modules/iconv-lite/README.md~ b/node_modules/body-parser/node_modules/iconv-lite/README.md~ new file mode 100755 index 0000000..5f57561 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/README.md~ @@ -0,0 +1,54 @@ +iconv-lite - native javascript conversion between character encodings. +====================================================================== + +## Usage + + var iconv = require('iconv-lite'); + + // Convert from an encoded buffer to string. + str = iconv.fromEncoding(buf, 'win-1251'); + // Or + str = iconv.decode(buf, 'win-1251'); + + // Convert from string to an encoded buffer. + buf = iconv.toEncoding("Sample input string", 'win-1251'); + // Or + buf = iconv.encode("Sample input string", 'win-1251'); + +## Supported encodings + +Currently only a small part of encodings supported: + +* All node.js native encodings: 'utf8', 'ucs2', 'ascii', 'binary', 'base64'. +* 'latin1' +* Cyrillic encodings: 'windows-1251', 'koi8-r', 'iso 8859-5'. + +Other encodings are easy to add, see the source. Please, participate. + + +## Encoding/decoding speed + +Comparison with iconv module (1000 times 256kb, on Core i5/2.5 GHz). + + Operation\module iconv iconv-lite (this) + toEncoding('win1251') 19.57 mb/s 49.04 mb/s + fromEncoding('win1251') 16.39 mb/s 24.11 mb/s + + +## Notes + +This module is JavaScript-only, thus can be used in a sandboxed environment like [Cloud9](http://c9.io). + +Untranslatable characters are set to '?'. No transliteration is currently supported, pull requests are welcome. + +## Testing + + npm install --dev iconv-lite + vows + +## TODO + +* Support streaming character conversion, something like util.pipe(req, iconv.fromEncodingStream('latin1')). +* Add more encodings. +* Add transliteration (best fit char). +* Add tests and correct support of variable-byte encodings (currently work is delegated to node). diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-codec.js b/node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-codec.js new file mode 100755 index 0000000..fd3681c --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-codec.js @@ -0,0 +1,564 @@ + +// Multibyte codec. In this scheme, a character is represented by 1 or more bytes. +// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences. +// To save memory and loading time, we read table files only when requested. + +exports._dbcs = function(options) { + return new DBCSCodec(options); +} + +var UNASSIGNED = -1, + GB18030_CODE = -2, + SEQ_START = -10, + NODE_START = -1000, + UNASSIGNED_NODE = new Array(0x100), + DEF_CHAR = -1; + +for (var i = 0; i < 0x100; i++) + UNASSIGNED_NODE[i] = UNASSIGNED; + + +// Class DBCSCodec reads and initializes mapping tables. +function DBCSCodec(options) { + this.options = options; + if (!options) + throw new Error("DBCS codec is called without the data.") + if (!options.table) + throw new Error("Encoding '" + options.encodingName + "' has no data."); + + // Load tables. + var mappingTable = options.table(); + + + // Decode tables: MBCS -> Unicode. + + // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256. + // Trie root is decodeTables[0]. + // Values: >= 0 -> unicode character code. can be > 0xFFFF + // == UNASSIGNED -> unknown/unassigned sequence. + // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence. + // <= NODE_START -> index of the next node in our trie to process next byte. + // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq. + this.decodeTables = []; + this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node. + + // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. + this.decodeTableSeq = []; + + // Actual mapping tables consist of chunks. Use them to fill up decode tables. + for (var i = 0; i < mappingTable.length; i++) + this._addDecodeChunk(mappingTable[i]); + + this.defaultCharUnicode = options.iconv.defaultCharUnicode; + + + // Encode tables: Unicode -> DBCS. + + // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance. + // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null. + // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.). + // == UNASSIGNED -> no conversion found. Output a default char. + // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence. + this.encodeTable = []; + + // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of + // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key + // means end of sequence (needed when one sequence is a strict subsequence of another). + // Objects are kept separately from encodeTable to increase performance. + this.encodeTableSeq = []; + + // Some chars can be decoded, but need not be encoded. + var skipEncodeChars = {}; + if (options.encodeSkipVals) + for (var i = 0; i < options.encodeSkipVals.length; i++) { + var range = options.encodeSkipVals[i]; + for (var j = range.from; j <= range.to; j++) + skipEncodeChars[j] = true; + } + + // Use decode trie to recursively fill out encode tables. + this._fillEncodeTable(0, 0, skipEncodeChars); + + // Add more encoding pairs when needed. + for (var uChar in options.encodeAdd || {}) + this._setEncodeChar(uChar.charCodeAt(0), options.encodeAdd[uChar]); + + this.defCharSB = this.encodeTable[0][options.iconv.defaultCharSingleByte.charCodeAt(0)]; + if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?']; + if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0); + + + // Load & create GB18030 tables when needed. + if (typeof options.gb18030 === 'function') { + this.gb18030 = options.gb18030(); // Load GB18030 ranges. + + // Add GB18030 decode tables. + var thirdByteNodeIdx = this.decodeTables.length; + var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0); + + var fourthByteNodeIdx = this.decodeTables.length; + var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0); + + for (var i = 0x81; i <= 0xFE; i++) { + var secondByteNodeIdx = NODE_START - this.decodeTables[0][i]; + var secondByteNode = this.decodeTables[secondByteNodeIdx]; + for (var j = 0x30; j <= 0x39; j++) + secondByteNode[j] = NODE_START - thirdByteNodeIdx; + } + for (var i = 0x81; i <= 0xFE; i++) + thirdByteNode[i] = NODE_START - fourthByteNodeIdx; + for (var i = 0x30; i <= 0x39; i++) + fourthByteNode[i] = GB18030_CODE + } +} + +// Public interface: create encoder and decoder objects. +// The methods (write, end) are simple functions to not inhibit optimizations. +DBCSCodec.prototype.encoder = function encoderDBCS(options) { + return { + // Methods + write: encoderDBCSWrite, + end: encoderDBCSEnd, + + // Encoder state + leadSurrogate: -1, + seqObj: undefined, + + // Static data + encodeTable: this.encodeTable, + encodeTableSeq: this.encodeTableSeq, + defaultCharSingleByte: this.defCharSB, + gb18030: this.gb18030, + + // Export for testing + findIdx: findIdx, + } +} + +DBCSCodec.prototype.decoder = function decoderDBCS(options) { + return { + // Methods + write: decoderDBCSWrite, + end: decoderDBCSEnd, + + // Decoder state + nodeIdx: 0, + prevBuf: new Buffer(0), + + // Static data + decodeTables: this.decodeTables, + decodeTableSeq: this.decodeTableSeq, + defaultCharUnicode: this.defaultCharUnicode, + gb18030: this.gb18030, + } +} + + + +// Decoder helpers +DBCSCodec.prototype._getDecodeTrieNode = function(addr) { + var bytes = []; + for (; addr > 0; addr >>= 8) + bytes.push(addr & 0xFF); + if (bytes.length == 0) + bytes.push(0); + + var node = this.decodeTables[0]; + for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie. + var val = node[bytes[i]]; + + if (val == UNASSIGNED) { // Create new node. + node[bytes[i]] = NODE_START - this.decodeTables.length; + this.decodeTables.push(node = UNASSIGNED_NODE.slice(0)); + } + else if (val <= NODE_START) { // Existing node. + node = this.decodeTables[NODE_START - val]; + } + else + throw new Error("Overwrite byte in " + this.options.encodingName + ", addr: " + addr.toString(16)); + } + return node; +} + + +DBCSCodec.prototype._addDecodeChunk = function(chunk) { + // First element of chunk is the hex mbcs code where we start. + var curAddr = parseInt(chunk[0], 16); + + // Choose the decoding node where we'll write our chars. + var writeTable = this._getDecodeTrieNode(curAddr); + curAddr = curAddr & 0xFF; + + // Write all other elements of the chunk to the table. + for (var k = 1; k < chunk.length; k++) { + var part = chunk[k]; + if (typeof part === "string") { // String, write as-is. + for (var l = 0; l < part.length;) { + var code = part.charCodeAt(l++); + if (0xD800 <= code && code < 0xDC00) { // Decode surrogate + var codeTrail = part.charCodeAt(l++); + if (0xDC00 <= codeTrail && codeTrail < 0xE000) + writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00); + else + throw new Error("Incorrect surrogate pair in " + this.options.encodingName + " at chunk " + chunk[0]); + } + else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used) + var len = 0xFFF - code + 2; + var seq = []; + for (var m = 0; m < len; m++) + seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq. + + writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length; + this.decodeTableSeq.push(seq); + } + else + writeTable[curAddr++] = code; // Basic char + } + } + else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character. + var charCode = writeTable[curAddr - 1] + 1; + for (var l = 0; l < part; l++) + writeTable[curAddr++] = charCode++; + } + else + throw new Error("Incorrect type '" + typeof part + "' given in " + this.options.encodingName + " at chunk " + chunk[0]); + } + if (curAddr > 0xFF) + throw new Error("Incorrect chunk in " + this.options.encodingName + " at addr " + chunk[0] + ": too long" + curAddr); +} + +// Encoder helpers +DBCSCodec.prototype._getEncodeBucket = function(uCode) { + var high = uCode >> 8; // This could be > 0xFF because of astral characters. + if (this.encodeTable[high] === undefined) + this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand. + return this.encodeTable[high]; +} + +DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) { + var bucket = this._getEncodeBucket(uCode); + var low = uCode & 0xFF; + if (bucket[low] <= SEQ_START) + this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it. + else if (bucket[low] == UNASSIGNED) + bucket[low] = dbcsCode; +} + +DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) { + + // Get the root of character tree according to first character of the sequence. + var uCode = seq[0]; + var bucket = this._getEncodeBucket(uCode); + var low = uCode & 0xFF; + + var node; + if (bucket[low] <= SEQ_START) { + // There's already a sequence with - use it. + node = this.encodeTableSeq[SEQ_START-bucket[low]]; + } + else { + // There was no sequence object - allocate a new one. + node = {}; + if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence. + bucket[low] = SEQ_START - this.encodeTableSeq.length; + this.encodeTableSeq.push(node); + } + + // Traverse the character tree, allocating new nodes as needed. + for (var j = 1; j < seq.length-1; j++) { + var oldVal = node[uCode]; + if (typeof oldVal === 'object') + node = oldVal; + else { + node = node[uCode] = {} + if (oldVal !== undefined) + node[DEF_CHAR] = oldVal + } + } + + // Set the leaf to given dbcsCode. + uCode = seq[seq.length-1]; + node[uCode] = dbcsCode; +} + +DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) { + var node = this.decodeTables[nodeIdx]; + for (var i = 0; i < 0x100; i++) { + var uCode = node[i]; + var mbCode = prefix + i; + if (skipEncodeChars[mbCode]) + continue; + + if (uCode >= 0) + this._setEncodeChar(uCode, mbCode); + else if (uCode <= NODE_START) + this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars); + else if (uCode <= SEQ_START) + this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode); + } +} + + + +// == Actual Encoding ========================================================== + + +function encoderDBCSWrite(str) { + var newBuf = new Buffer(str.length * (this.gb18030 ? 4 : 3)), + leadSurrogate = this.leadSurrogate, + seqObj = this.seqObj, nextChar = -1, + i = 0, j = 0; + + while (true) { + // 0. Get next character. + if (nextChar === -1) { + if (i == str.length) break; + var uCode = str.charCodeAt(i++); + } + else { + var uCode = nextChar; + nextChar = -1; + } + + // 1. Handle surrogates. + if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates. + if (uCode < 0xDC00) { // We've got lead surrogate. + if (leadSurrogate === -1) { + leadSurrogate = uCode; + continue; + } else { + leadSurrogate = uCode; + // Double lead surrogate found. + uCode = UNASSIGNED; + } + } else { // We've got trail surrogate. + if (leadSurrogate !== -1) { + uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00); + leadSurrogate = -1; + } else { + // Incomplete surrogate pair - only trail surrogate found. + uCode = UNASSIGNED; + } + + } + } + else if (leadSurrogate !== -1) { + // Incomplete surrogate pair - only lead surrogate found. + nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char. + leadSurrogate = -1; + } + + // 2. Convert uCode character. + var dbcsCode = UNASSIGNED; + if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence + var resCode = seqObj[uCode]; + if (typeof resCode === 'object') { // Sequence continues. + seqObj = resCode; + continue; + + } else if (typeof resCode == 'number') { // Sequence finished. Write it. + dbcsCode = resCode; + + } else if (resCode == undefined) { // Current character is not part of the sequence. + + // Try default character for this sequence + resCode = seqObj[DEF_CHAR]; + if (resCode !== undefined) { + dbcsCode = resCode; // Found. Write it. + nextChar = uCode; // Current character will be written too in the next iteration. + + } else { + // TODO: What if we have no default? (resCode == undefined) + // Then, we should write first char of the sequence as-is and try the rest recursively. + // Didn't do it for now because no encoding has this situation yet. + // Currently, just skip the sequence and write current char. + } + } + seqObj = undefined; + } + else if (uCode >= 0) { // Regular character + var subtable = this.encodeTable[uCode >> 8]; + if (subtable !== undefined) + dbcsCode = subtable[uCode & 0xFF]; + + if (dbcsCode <= SEQ_START) { // Sequence start + seqObj = this.encodeTableSeq[SEQ_START-dbcsCode]; + continue; + } + + if (dbcsCode == UNASSIGNED && this.gb18030) { + // Use GB18030 algorithm to find character(s) to write. + var idx = findIdx(this.gb18030.uChars, uCode); + if (idx != -1) { + var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]); + newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600; + newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260; + newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10; + newBuf[j++] = 0x30 + dbcsCode; + continue; + } + } + } + + // 3. Write dbcsCode character. + if (dbcsCode === UNASSIGNED) + dbcsCode = this.defaultCharSingleByte; + + if (dbcsCode < 0x100) { + newBuf[j++] = dbcsCode; + } + else if (dbcsCode < 0x10000) { + newBuf[j++] = dbcsCode >> 8; // high byte + newBuf[j++] = dbcsCode & 0xFF; // low byte + } + else { + newBuf[j++] = dbcsCode >> 16; + newBuf[j++] = (dbcsCode >> 8) & 0xFF; + newBuf[j++] = dbcsCode & 0xFF; + } + } + + this.seqObj = seqObj; + this.leadSurrogate = leadSurrogate; + return newBuf.slice(0, j); +} + +function encoderDBCSEnd() { + if (this.leadSurrogate === -1 && this.seqObj === undefined) + return; // All clean. Most often case. + + var newBuf = new Buffer(10), j = 0; + + if (this.seqObj) { // We're in the sequence. + var dbcsCode = this.seqObj[DEF_CHAR]; + if (dbcsCode !== undefined) { // Write beginning of the sequence. + if (dbcsCode < 0x100) { + newBuf[j++] = dbcsCode; + } + else { + newBuf[j++] = dbcsCode >> 8; // high byte + newBuf[j++] = dbcsCode & 0xFF; // low byte + } + } else { + // See todo above. + } + this.seqObj = undefined; + } + + if (this.leadSurrogate !== -1) { + // Incomplete surrogate pair - only lead surrogate found. + newBuf[j++] = this.defaultCharSingleByte; + this.leadSurrogate = -1; + } + + return newBuf.slice(0, j); +} + + +// == Actual Decoding ========================================================== + + +function decoderDBCSWrite(buf) { + var newBuf = new Buffer(buf.length*2), + nodeIdx = this.nodeIdx, + prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length, + seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence. + uCode; + + if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later. + prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]); + + for (var i = 0, j = 0; i < buf.length; i++) { + var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset]; + + // Lookup in current trie node. + var uCode = this.decodeTables[nodeIdx][curByte]; + + if (uCode >= 0) { + // Normal character, just use it. + } + else if (uCode === UNASSIGNED) { // Unknown char. + // TODO: Callback with seq. + //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); + i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle). + uCode = this.defaultCharUnicode.charCodeAt(0); + } + else if (uCode === GB18030_CODE) { + var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); + var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30); + var idx = findIdx(this.gb18030.gbChars, ptr); + uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]; + } + else if (uCode <= NODE_START) { // Go to next trie node. + nodeIdx = NODE_START - uCode; + continue; + } + else if (uCode <= SEQ_START) { // Output a sequence of chars. + var seq = this.decodeTableSeq[SEQ_START - uCode]; + for (var k = 0; k < seq.length - 1; k++) { + uCode = seq[k]; + newBuf[j++] = uCode & 0xFF; + newBuf[j++] = uCode >> 8; + } + uCode = seq[seq.length-1]; + } + else + throw new Error("Unknown table value when decoding: " + val); + + // Write the character to buffer, handling higher planes using surrogate pair. + if (uCode > 0xFFFF) { + uCode -= 0x10000; + var uCodeLead = 0xD800 + Math.floor(uCode / 0x400); + newBuf[j++] = uCodeLead & 0xFF; + newBuf[j++] = uCodeLead >> 8; + + uCode = 0xDC00 + uCode % 0x400; + } + newBuf[j++] = uCode & 0xFF; + newBuf[j++] = uCode >> 8; + + // Reset trie node. + nodeIdx = 0; seqStart = i+1; + } + + this.nodeIdx = nodeIdx; + this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset); + return newBuf.slice(0, j).toString('ucs2'); +} + +function decoderDBCSEnd() { + var ret = ''; + + // Try to parse all remaining chars. + while (this.prevBuf.length > 0) { + // Skip 1 character in the buffer. + ret += this.defaultCharUnicode; + var buf = this.prevBuf.slice(1); + + // Parse remaining as usual. + this.prevBuf = new Buffer(0); + this.nodeIdx = 0; + if (buf.length > 0) + ret += decoderDBCSWrite.call(this, buf); + } + + this.nodeIdx = 0; + return ret; +} + +// Binary search for GB18030. Returns largest i such that table[i] <= val. +function findIdx(table, val) { + if (table[0] > val) + return -1; + + var l = 0, r = table.length; + while (l < r-1) { // always table[l] <= val < table[r] + var mid = l + Math.floor((r-l+1)/2); + if (table[mid] <= val) + l = mid; + else + r = mid; + } + return l; +} + diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-data.js b/node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-data.js new file mode 100755 index 0000000..44be66c --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-data.js @@ -0,0 +1,168 @@ + +// Description of supported double byte encodings and aliases. +// Tables are not require()-d until they are needed to speed up library load. +// require()-s are direct to support Browserify. + +module.exports = { + + // == Japanese/ShiftJIS ==================================================== + // All japanese encodings are based on JIS X set of standards: + // JIS X 0201 - Single-byte encoding of ASCII + Â¥ + Kana chars at 0xA1-0xDF. + // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. + // Has several variations in 1978, 1983, 1990 and 1997. + // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead. + // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233. + // 2 planes, first is superset of 0208, second - revised 0212. + // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx) + + // Byte encodings are: + // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte + // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC. + // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI. + // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes. + // 0x00-0x7F - lower part of 0201 + // 0x8E, 0xA1-0xDF - upper part of 0201 + // (0xA1-0xFE)x2 - 0208 plane (94x94). + // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94). + // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon. + // Used as-is in ISO2022 family. + // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, + // 0201-1976 Roman, 0208-1978, 0208-1983. + // * ISO2022-JP-1: Adds esc seq for 0212-1990. + // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7. + // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2. + // * ISO2022-JP-2004: Adds 0213-2004 Plane 1. + // + // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes. + // + // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html + + + 'shiftjis': { + type: '_dbcs', + table: function() { return require('./tables/shiftjis.json') }, + encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, + encodeSkipVals: [{from: 0xED40, to: 0xF940}], + }, + 'csshiftjis': 'shiftjis', + 'mskanji': 'shiftjis', + 'sjis': 'shiftjis', + 'windows-31j': 'shiftjis', + 'x-sjis': 'shiftjis', + 'windows932': 'shiftjis', + '932': 'shiftjis', + 'cp932': 'shiftjis', + + 'eucjp': { + type: '_dbcs', + table: function() { return require('./tables/eucjp.json') }, + encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, + }, + + // TODO: KDDI extension to Shift_JIS + // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes. + // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars. + + // == Chinese/GBK ========================================================== + // http://en.wikipedia.org/wiki/GBK + + // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936 + 'gb2312': 'cp936', + 'gb231280': 'cp936', + 'gb23121980': 'cp936', + 'csgb2312': 'cp936', + 'csiso58gb231280': 'cp936', + 'euccn': 'cp936', + 'isoir58': 'gbk', + + // Microsoft's CP936 is a subset and approximation of GBK. + // TODO: Euro = 0x80 in cp936, but not in GBK (where it's valid but undefined) + 'windows936': 'cp936', + '936': 'cp936', + 'cp936': { + type: '_dbcs', + table: function() { return require('./tables/cp936.json') }, + }, + + // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other. + 'gbk': { + type: '_dbcs', + table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) }, + }, + 'xgbk': 'gbk', + + // GB18030 is an algorithmic extension of GBK. + 'gb18030': { + type: '_dbcs', + table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) }, + gb18030: function() { return require('./tables/gb18030-ranges.json') }, + }, + + 'chinese': 'gb18030', + + // TODO: Support GB18030 (~27000 chars + whole unicode mapping, cp54936) + // http://icu-project.org/docs/papers/gb18030.html + // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml + // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0 + + // == Korean =============================================================== + // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same. + 'windows949': 'cp949', + '949': 'cp949', + 'cp949': { + type: '_dbcs', + table: function() { return require('./tables/cp949.json') }, + }, + + 'cseuckr': 'cp949', + 'csksc56011987': 'cp949', + 'euckr': 'cp949', + 'isoir149': 'cp949', + 'korean': 'cp949', + 'ksc56011987': 'cp949', + 'ksc56011989': 'cp949', + 'ksc5601': 'cp949', + + + // == Big5/Taiwan/Hong Kong ================================================ + // There are lots of tables for Big5 and cp950. Please see the following links for history: + // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html + // Variations, in roughly number of defined chars: + // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT + // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/ + // * Big5-2003 (Taiwan standard) almost superset of cp950. + // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers. + // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. + // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years. + // Plus, it has 4 combining sequences. + // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299 + // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way. + // Implementations are not consistent within browsers; sometimes labeled as just big5. + // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied. + // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31 + // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s. + // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt + // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt + // + // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder + // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong. + + 'windows950': 'cp950', + '950': 'cp950', + 'cp950': { + type: '_dbcs', + table: function() { return require('./tables/cp950.json') }, + }, + + // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus. + 'big5': 'big5hkscs', + 'big5hkscs': { + type: '_dbcs', + table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) }, + }, + + 'cnbig5': 'big5hkscs', + 'csbig5': 'big5hkscs', + 'xxbig5': 'big5hkscs', + +}; \ No newline at end of file diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/index.js b/node_modules/body-parser/node_modules/iconv-lite/encodings/index.js new file mode 100755 index 0000000..70b0aee --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/index.js @@ -0,0 +1,19 @@ + +// Update this array if you add/rename/remove files in this directory. +// We support Browserify by skipping automatic module discovery and requiring modules directly. +var modules = [ + require("./internal"), + require("./utf16"), + require("./sbcs-codec"), + require("./sbcs-data"), + require("./sbcs-data-generated"), + require("./dbcs-codec"), + require("./dbcs-data"), +]; + +// Put all encoding/alias/codec definitions to single object and export it. +for (var i = 0; i < modules.length; i++) { + var module = modules[i]; + for (var enc in module) + exports[enc] = module[enc]; +} diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/internal.js b/node_modules/body-parser/node_modules/iconv-lite/encodings/internal.js new file mode 100755 index 0000000..c60958a --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/internal.js @@ -0,0 +1,55 @@ + +// Export Node.js internal encodings. + +var utf16lebom = new Buffer([0xFF, 0xFE]); + +module.exports = { + // Encodings + utf8: { type: "_internal", enc: "utf8" }, + cesu8: { type: "_internal", enc: "utf8" }, + unicode11utf8: { type: "_internal", enc: "utf8" }, + ucs2: { type: "_internal", enc: "ucs2", bom: utf16lebom }, + utf16le:{ type: "_internal", enc: "ucs2", bom: utf16lebom }, + binary: { type: "_internal", enc: "binary" }, + base64: { type: "_internal", enc: "base64" }, + hex: { type: "_internal", enc: "hex" }, + + // Codec. + _internal: function(options) { + if (!options || !options.enc) + throw new Error("Internal codec is called without encoding type.") + + return { + encoder: encoderInternal, + decoder: decoderInternal, + + enc: options.enc, + bom: options.bom, + }; + }, +}; + +// We use node.js internal decoder. It's signature is the same as ours. +var StringDecoder = require('string_decoder').StringDecoder; + +if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method. + StringDecoder.prototype.end = function() {}; + +function decoderInternal() { + return new StringDecoder(this.enc); +} + + +function encoderInternal() { + return { + write: encodeInternal, + end: function() {}, + + enc: this.enc, + } +} + +function encodeInternal(str) { + return new Buffer(str, this.enc); +} + diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-codec.js b/node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-codec.js new file mode 100755 index 0000000..c79defb --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-codec.js @@ -0,0 +1,76 @@ + +// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that +// correspond to encoded bytes (if 128 - then lower half is ASCII). + +exports._sbcs = function(options) { + if (!options) + throw new Error("SBCS codec is called without the data.") + + // Prepare char buffer for decoding. + if (!options.chars || (options.chars.length !== 128 && options.chars.length !== 256)) + throw new Error("Encoding '"+options.type+"' has incorrect 'chars' (must be of len 128 or 256)"); + + if (options.chars.length === 128) { + var asciiString = ""; + for (var i = 0; i < 128; i++) + asciiString += String.fromCharCode(i); + options.chars = asciiString + options.chars; + } + + var decodeBuf = new Buffer(options.chars, 'ucs2'); + + // Encoding buffer. + var encodeBuf = new Buffer(65536); + encodeBuf.fill(options.iconv.defaultCharSingleByte.charCodeAt(0)); + + for (var i = 0; i < options.chars.length; i++) + encodeBuf[options.chars.charCodeAt(i)] = i; + + return { + encoder: encoderSBCS, + decoder: decoderSBCS, + + encodeBuf: encodeBuf, + decodeBuf: decodeBuf, + }; +} + +function encoderSBCS(options) { + return { + write: encoderSBCSWrite, + end: function() {}, + + encodeBuf: this.encodeBuf, + }; +} + +function encoderSBCSWrite(str) { + var buf = new Buffer(str.length); + for (var i = 0; i < str.length; i++) + buf[i] = this.encodeBuf[str.charCodeAt(i)]; + + return buf; +} + + +function decoderSBCS(options) { + return { + write: decoderSBCSWrite, + end: function() {}, + + decodeBuf: this.decodeBuf, + }; +} + +function decoderSBCSWrite(buf) { + // Strings are immutable in JS -> we use ucs2 buffer to speed up computations. + var decodeBuf = this.decodeBuf; + var newBuf = new Buffer(buf.length*2); + var idx1 = 0, idx2 = 0; + for (var i = 0, _len = buf.length; i < _len; i++) { + idx1 = buf[i]*2; idx2 = i*2; + newBuf[idx2] = decodeBuf[idx1]; + newBuf[idx2+1] = decodeBuf[idx1+1]; + } + return newBuf.toString('ucs2'); +} diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data-generated.js b/node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data-generated.js new file mode 100755 index 0000000..3808260 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data-generated.js @@ -0,0 +1,450 @@ + +// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script. +module.exports = { + "437": "cp437", + "737": "cp737", + "775": "cp775", + "850": "cp850", + "852": "cp852", + "855": "cp855", + "856": "cp856", + "857": "cp857", + "858": "cp858", + "860": "cp860", + "861": "cp861", + "862": "cp862", + "863": "cp863", + "864": "cp864", + "865": "cp865", + "866": "cp866", + "869": "cp869", + "874": "windows874", + "922": "cp922", + "1046": "cp1046", + "1124": "cp1124", + "1125": "cp1125", + "1129": "cp1129", + "1133": "cp1133", + "1161": "cp1161", + "1162": "cp1162", + "1163": "cp1163", + "1250": "windows1250", + "1251": "windows1251", + "1252": "windows1252", + "1253": "windows1253", + "1254": "windows1254", + "1255": "windows1255", + "1256": "windows1256", + "1257": "windows1257", + "1258": "windows1258", + "28591": "iso88591", + "28592": "iso88592", + "28593": "iso88593", + "28594": "iso88594", + "28595": "iso88595", + "28596": "iso88596", + "28597": "iso88597", + "28598": "iso88598", + "28599": "iso88599", + "28600": "iso885910", + "28601": "iso885911", + "28603": "iso885913", + "28604": "iso885914", + "28605": "iso885915", + "28606": "iso885916", + "windows874": { + "type": "_sbcs", + "chars": "€����…�����������‘’“â€â€¢â€“—�������� à¸à¸‚ฃคฅฆงจฉชซฌà¸à¸Žà¸à¸à¸‘ฒณดตถทธนบปผà¸à¸žà¸Ÿà¸ à¸¡à¸¢à¸£à¸¤à¸¥à¸¦à¸§à¸¨à¸©à¸ªà¸«à¸¬à¸­à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºï¿½ï¿½ï¿½ï¿½à¸¿à¹€à¹à¹‚ใไๅๆ็่้๊๋์à¹à¹Žà¹à¹à¹‘๒๓๔๕๖๗๘๙๚๛����" + }, + "win874": "windows874", + "cp874": "windows874", + "windows1250": { + "type": "_sbcs", + "chars": "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“â€â€¢â€“—�™š›śťžź ˇ˘Å¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»ĽËľżŔÃÂĂÄĹĆÇČÉĘËĚÃÃŽÄŽÄŃŇÓÔÅÖ×ŘŮÚŰÜÃŢßŕáâăäĺćçÄéęëěíîÄđńňóôőö÷řůúűüýţ˙" + }, + "win1250": "windows1250", + "cp1250": "windows1250", + "windows1251": { + "type": "_sbcs", + "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋÐђ‘’“â€â€¢â€“—�™љ›њќћџ ЎўЈ¤Ò¦§Ð©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑ" + }, + "win1251": "windows1251", + "cp1251": "windows1251", + "windows1252": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“â€â€¢â€“—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ×ØÙÚÛÜÃÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "win1252": "windows1252", + "cp1252": "windows1252", + "windows1253": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡�‰�‹�����‘’“â€â€¢â€“—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎÎÎΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπÏςστυφχψωϊϋόÏώ�" + }, + "win1253": "windows1253", + "cp1253": "windows1253", + "windows1254": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“â€â€¢â€“—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" + }, + "win1254": "windows1254", + "cp1254": "windows1254", + "windows1255": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰�‹�����‘’“â€â€¢â€“—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹ�ֻּֽ־ֿ׀×ׂ׃װױײ׳״�������×בגדהוזחטיךכל×מןנסעףפץצקרשת��‎â€ï¿½" + }, + "win1255": "windows1255", + "cp1255": "windows1255", + "windows1256": { + "type": "_sbcs", + "chars": "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“â€â€¢â€“—ک™ڑ›œ‌â€ÚºÂ ØŒÂ¢Â£Â¤Â¥Â¦Â§Â¨Â©Ú¾Â«Â¬Â­Â®Â¯Â°Â±Â²Â³Â´ÂµÂ¶Â·Â¸Â¹Ø›Â»Â¼Â½Â¾ØŸÛءآأؤإئابةتثجحخدذرزسشصض×طظعغـÙقكàلâمنهوçèéêëىيîïًٌÙَôÙÙ÷ّùْûü‎â€Û’" + }, + "win1256": "windows1256", + "cp1256": "windows1256", + "windows1257": { + "type": "_sbcs", + "chars": "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“â€â€¢â€“—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲÅŚŪÜŻŽßąįÄćäåęēÄéźėģķīļšńņóÅõö÷ųłśūüżž˙" + }, + "win1257": "windows1257", + "cp1257": "windows1257", + "windows1258": { + "type": "_sbcs", + "chars": "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“â€â€¢â€“—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂĂÄÅÆÇÈÉÊË̀ÃÃŽÃÄÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêëÌíîïđṇ̃óôơö÷øùúûüư₫ÿ" + }, + "win1258": "windows1258", + "cp1258": "windows1258", + "iso88591": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ×ØÙÚÛÜÃÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "cp28591": "iso88591", + "iso88592": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ Ą˘Å¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťźËžżŔÃÂĂÄĹĆÇČÉĘËĚÃÃŽÄŽÄŃŇÓÔÅÖ×ŘŮÚŰÜÃŢßŕáâăäĺćçÄéęëěíîÄđńňóôőö÷řůúűüýţ˙" + }, + "cp28592": "iso88592", + "iso88593": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÃÂ�ÄĊĈÇÈÉÊËÌÃÃŽÃ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ÄùúûüŭÅË™" + }, + "cp28593": "iso88593", + "iso88594": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ĄĸŖ¤ĨĻ§¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÃÂÃÄÅÆĮČÉĘËĖÃÎĪÄŅŌĶÔÕÖ×ØŲÚÛÜŨŪßÄáâãäåæįÄéęëėíîīđņÅķôõö÷øųúûüũū˙" + }, + "cp28594": "iso88594", + "iso88595": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ÐЂЃЄЅІЇЈЉЊЋЌ­ЎÐÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑ№ёђѓєѕіїјљњћќ§ўџ" + }, + "cp28595": "iso88595", + "iso88596": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـÙقكلمنهوىيًٌÙÙŽÙÙّْ�������������" + }, + "cp28596": "iso88596", + "iso88597": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎÎÎΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπÏςστυφχψωϊϋόÏώ�" + }, + "cp28597": "iso88597", + "iso88598": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗×בגדהוזחטיךכל×מןנסעףפץצקרשת��‎â€ï¿½" + }, + "cp28598": "iso88598", + "iso88599": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" + }, + "cp28599": "iso88599", + "iso885910": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ĄĒĢĪĨĶ§ĻÄŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÃÂÃÄÅÆĮČÉĘËĖÃÃŽÃÃŅŌÓÔÕÖŨØŲÚÛÜÃÞßÄáâãäåæįÄéęëėíîïðņÅóôõöũøųúûüýþĸ" + }, + "cp28600": "iso885910", + "iso885911": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ à¸à¸‚ฃคฅฆงจฉชซฌà¸à¸Žà¸à¸à¸‘ฒณดตถทธนบปผà¸à¸žà¸Ÿà¸ à¸¡à¸¢à¸£à¸¤à¸¥à¸¦à¸§à¸¨à¸©à¸ªà¸«à¸¬à¸­à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºï¿½ï¿½ï¿½ï¿½à¸¿à¹€à¹à¹‚ใไๅๆ็่้๊๋์à¹à¹Žà¹à¹à¹‘๒๓๔๕๖๗๘๙๚๛����" + }, + "cp28601": "iso885911", + "iso885913": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ â€Â¢Â£Â¤â€žÂ¦Â§Ã˜Â©Å–«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲÅŚŪÜŻŽßąįÄćäåęēÄéźėģķīļšńņóÅõö÷ųłśūüżž’" + }, + "cp28603": "iso885913", + "iso885914": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀá¹Â¶á¹–áºá¹—ẃṠỳẄẅṡÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃŴÑÒÓÔÕÖṪØÙÚÛÜÃŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ" + }, + "cp28604": "iso885914", + "iso885915": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ×ØÙÚÛÜÃÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" + }, + "cp28605": "iso885915", + "iso885916": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ĄąÅ€„Š§š©Ș«Ź­źŻ°±ČłŽâ€Â¶Â·Å¾Äș»ŒœŸżÀÃÂĂÄĆÆÇÈÉÊËÌÃÃŽÃÄŃÒÓÔÅÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ" + }, + "cp28606": "iso885916", + "cp437": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿âŒÂ¬Â½Â¼Â¡Â«Â»â–‘▒▓│┤╡╢╖╕╣║╗â•â•œâ•›â”└┴┬├─┼╞╟╚╔╩╦╠â•â•¬â•§â•¨â•¤â•¥â•™â•˜â•’╓╫╪┘┌█▄▌â–▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√â¿Â²â– Â " + }, + "ibm437": "cp437", + "csibm437": "cp437", + "cp737": { + "type": "_sbcs", + "chars": "ΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπÏσςτυφχψ░▒▓│┤╡╢╖╕╣║╗â•â•œâ•›â”└┴┬├─┼╞╟╚╔╩╦╠â•â•¬â•§â•¨â•¤â•¥â•™â•˜â•’╓╫╪┘┌█▄▌â–▀ωάέήϊίόÏϋώΆΈΉΊΌΎÎ±≥≤ΪΫ÷≈°∙·√â¿Â²â– Â " + }, + "ibm737": "cp737", + "csibm737": "cp737", + "cp775": { + "type": "_sbcs", + "chars": "ĆüéÄäģåćłēŖŗīŹÄÅÉæÆÅöĢ¢ŚśÖÜø£ØפĀĪóŻżźâ€Â¦Â©Â®Â¬Â½Â¼Å«»░▒▓│┤ĄČĘĖ╣║╗â•Ä®Å â”└┴┬├─┼ŲŪ╚╔╩╦╠â•â•¬Å½Ä…Äęėįšųūž┘┌█▄▌â–▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ " + }, + "ibm775": "cp775", + "csibm775": "cp775", + "cp850": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤ÃÂÀ©╣║╗â•Â¢Â¥â”└┴┬├─┼ãÃ╚╔╩╦╠â•â•¬Â¤Ã°ÃÊËÈıÃÃŽÃ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýï´­±‗¾¶§÷¸°¨·¹³²■ " + }, + "ibm850": "cp850", + "csibm850": "cp850", + "cp852": { + "type": "_sbcs", + "chars": "ÇüéâäůćçłëÅőîŹÄĆÉĹĺôöĽľŚśÖÜŤťÅ×ÄáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÃÂĚŞ╣║╗â•Å»Å¼â”└┴┬├─┼Ăă╚╔╩╦╠â•â•¬Â¤Ä‘ÄĎËÄŇÃÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÃţ´­Ë˛ˇ˘§÷¸°¨˙űŘř■ " + }, + "ibm852": "cp852", + "csibm852": "cp852", + "cp855": { + "type": "_sbcs", + "chars": "ђЂѓЃёÐєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџÐюЮъЪаÐбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗â•Ð¹Ð™â”└┴┬├─┼кК╚╔╩╦╠â•â•¬Â¤Ð»Ð›Ð¼ÐœÐ½ÐоОп┘┌█▄ПÑ▀ЯрРÑСтТуУжЖвВьЬ№­ыЫзЗшШÑЭщЩчЧ§■ " + }, + "ibm855": "cp855", + "csibm855": "cp855", + "cp856": { + "type": "_sbcs", + "chars": "×בגדהוזחטיךכל×מןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗â•Â¢Â¥â”└┴┬├─┼��╚╔╩╦╠â•â•¬Â¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½â”˜â”Œâ–ˆâ–„¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ " + }, + "ibm856": "cp856", + "csibm856": "cp856", + "cp857": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÃÂÀ©╣║╗â•Â¢Â¥â”└┴┬├─┼ãÃ╚╔╩╦╠â•â•¬Â¤ÂºÂªÃŠÃ‹Ãˆï¿½ÃÃŽÃ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ " + }, + "ibm857": "cp857", + "csibm857": "cp857", + "cp858": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤ÃÂÀ©╣║╗â•Â¢Â¥â”└┴┬├─┼ãÃ╚╔╩╦╠â•â•¬Â¤Ã°ÃÊËÈ€ÃÃŽÃ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýï´­±‗¾¶§÷¸°¨·¹³²■ " + }, + "ibm858": "cp858", + "csibm858": "cp858", + "cp860": { + "type": "_sbcs", + "chars": "ÇüéâãàÃçêÊèÃÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗â•â•œâ•›â”└┴┬├─┼╞╟╚╔╩╦╠â•â•¬â•§â•¨â•¤â•¥â•™â•˜â•’╓╫╪┘┌█▄▌â–▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√â¿Â²â– Â " + }, + "ibm860": "cp860", + "csibm860": "cp860", + "cp861": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèÃðÞÄÅÉæÆôöþûÃýÖÜø£Ø₧ƒáíóúÃÃÓÚ¿âŒÂ¬Â½Â¼Â¡Â«Â»â–‘▒▓│┤╡╢╖╕╣║╗â•â•œâ•›â”└┴┬├─┼╞╟╚╔╩╦╠â•â•¬â•§â•¨â•¤â•¥â•™â•˜â•’╓╫╪┘┌█▄▌â–▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√â¿Â²â– Â " + }, + "ibm861": "cp861", + "csibm861": "cp861", + "cp862": { + "type": "_sbcs", + "chars": "×בגדהוזחטיךכל×מןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿âŒÂ¬Â½Â¼Â¡Â«Â»â–‘▒▓│┤╡╢╖╕╣║╗â•â•œâ•›â”└┴┬├─┼╞╟╚╔╩╦╠â•â•¬â•§â•¨â•¤â•¥â•™â•˜â•’╓╫╪┘┌█▄▌â–▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√â¿Â²â– Â " + }, + "ibm862": "cp862", + "csibm862": "cp862", + "cp863": { + "type": "_sbcs", + "chars": "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÃûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯ÎâŒÂ¬Â½Â¼Â¾Â«Â»â–‘▒▓│┤╡╢╖╕╣║╗â•â•œâ•›â”└┴┬├─┼╞╟╚╔╩╦╠â•â•¬â•§â•¨â•¤â•¥â•™â•˜â•’╓╫╪┘┌█▄▌â–▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√â¿Â²â– Â " + }, + "ibm863": "cp863", + "csibm863": "cp863", + "cp864": { + "type": "_sbcs", + "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$Ùª&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴â”┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎïºïº•ïº™ØŒïºïº¡ïº¥Ù Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©ï»‘؛ﺱﺵﺹ؟¢ﺀïºïºƒïº…ﻊﺋïºïº‘ﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿï»ï»…ﻋï»Â¦Â¬Ã·Ã—ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎï»ï»¡ï¹½Ù‘ﻥﻩﻬﻰﻲï»ï»•ï»µï»¶ï»ï»™ï»±â– ï¿½" + }, + "ibm864": "cp864", + "csibm864": "cp864", + "cp865": { + "type": "_sbcs", + "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿âŒÂ¬Â½Â¼Â¡Â«Â¤â–‘▒▓│┤╡╢╖╕╣║╗â•â•œâ•›â”└┴┬├─┼╞╟╚╔╩╦╠â•â•¬â•§â•¨â•¤â•¥â•™â•˜â•’╓╫╪┘┌█▄▌â–▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√â¿Â²â– Â " + }, + "ibm865": "cp865", + "csibm865": "cp865", + "cp866": { + "type": "_sbcs", + "chars": "ÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗â•â•œâ•›â”└┴┬├─┼╞╟╚╔╩╦╠â•â•¬â•§â•¨â•¤â•¥â•™â•˜â•’╓╫╪┘┌█▄▌â–▀рÑтуфхцчшщъыьÑÑŽÑÐёЄєЇїЎў°∙·√№¤■ " + }, + "ibm866": "cp866", + "csibm866": "cp866", + "cp869": { + "type": "_sbcs", + "chars": "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Î²³ά£έήίϊÎÏŒÏΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜÎ╣║╗â•ÎžÎŸâ”└┴┬├─┼ΠΡ╚╔╩╦╠â•â•¬Î£Î¤Î¥Î¦Î§Î¨Î©Î±Î²Î³â”˜â”Œâ–ˆâ–„δε▀ζηθικλμνξοπÏσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ " + }, + "ibm869": "cp869", + "csibm869": "cp869", + "cp922": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÎÊÑÒÓÔÕÖ×ØÙÚÛÜÃŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ" + }, + "ibm922": "cp922", + "csibm922": "cp922", + "cp1046": { + "type": "_sbcs", + "chars": "ﺈ×÷ﹱˆ■│─â”┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎï»ï»ï»¶ï»¸ï»ºï»¼Â ï£ºï£¹ï£¸Â¤ï£»ïº‹ïº‘ﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـÙقكلمنهوىيًٌÙÙŽÙÙّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�" + }, + "ibm1046": "cp1046", + "csibm1046": "cp1046", + "cp1124": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ÐЂÒЄЅІЇЈЉЊЋЌ­ЎÐÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑ№ёђґєѕіїјљњћќ§ўџ" + }, + "ibm1124": "cp1124", + "csibm1124": "cp1124", + "cp1125": { + "type": "_sbcs", + "chars": "ÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗â•â•œâ•›â”└┴┬├─┼╞╟╚╔╩╦╠â•â•¬â•§â•¨â•¤â•¥â•™â•˜â•’╓╫╪┘┌█▄▌â–▀рÑтуфхцчшщъыьÑÑŽÑÐÑ‘ÒґЄєІіЇї·√№¤■ " + }, + "ibm1125": "cp1125", + "csibm1125": "cp1125", + "cp1129": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÃÂĂÄÅÆÇÈÉÊË̀ÃÃŽÃÄÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêëÌíîïđṇ̃óôơö÷øùúûüư₫ÿ" + }, + "ibm1129": "cp1129", + "csibm1129": "cp1129", + "cp1133": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ àºàº‚ຄງຈສຊàºàº”ຕຖທນບປຜàºàºžàºŸàº¡àº¢àº£àº¥àº§àº«àº­àº®ï¿½ï¿½ï¿½àº¯àº°àº²àº³àº´àºµàº¶àº·àº¸àº¹àº¼àº±àº»àº½ï¿½ï¿½ï¿½à»€à»à»‚ໃໄ່້໊໋໌à»à»†ï¿½à»œà»â‚­ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½à»à»‘໒໓໔໕໖໗໘໙��¢¬¦�" + }, + "ibm1133": "cp1133", + "csibm1133": "cp1133", + "cp1161": { + "type": "_sbcs", + "chars": "��������������������������������่à¸à¸‚ฃคฅฆงจฉชซฌà¸à¸Žà¸à¸à¸‘ฒณดตถทธนบปผà¸à¸žà¸Ÿà¸ à¸¡à¸¢à¸£à¸¤à¸¥à¸¦à¸§à¸¨à¸©à¸ªà¸«à¸¬à¸­à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºà¹‰à¹Šà¹‹â‚¬à¸¿à¹€à¹à¹‚ใไๅๆ็่้๊๋์à¹à¹Žà¹à¹à¹‘๒๓๔๕๖๗๘๙๚๛¢¬¦ " + }, + "ibm1161": "cp1161", + "csibm1161": "cp1161", + "cp1162": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“â€â€¢â€“—˜™š›œÂžŸ à¸à¸‚ฃคฅฆงจฉชซฌà¸à¸Žà¸à¸à¸‘ฒณดตถทธนบปผà¸à¸žà¸Ÿà¸ à¸¡à¸¢à¸£à¸¤à¸¥à¸¦à¸§à¸¨à¸©à¸ªà¸«à¸¬à¸­à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºï¿½ï¿½ï¿½ï¿½à¸¿à¹€à¹à¹‚ใไๅๆ็่้๊๋์à¹à¹Žà¹à¹à¹‘๒๓๔๕๖๗๘๙๚๛����" + }, + "ibm1162": "cp1162", + "csibm1162": "cp1162", + "cp1163": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÃÂĂÄÅÆÇÈÉÊË̀ÃÃŽÃÄÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêëÌíîïđṇ̃óôơö÷øùúûüư₫ÿ" + }, + "ibm1163": "cp1163", + "csibm1163": "cp1163", + "maccroatian": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑âˆÅ¡âˆ«ÂªÂºâ„¦Å¾Ã¸Â¿Â¡Â¬âˆšÆ’≈Ć«Č… ÀÃÕŒœÄ—“â€â€˜â€™Ã·â—Šï¿½Â©â„¤‹›Æ»–·‚„‰ÂćÃÄÈÃÃŽÃÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ" + }, + "maccyrillic": { + "type": "_sbcs", + "chars": "ÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“â€â€˜â€™Ã·â€žÐŽÑžÐÑŸâ„–ÐÑ‘ÑабвгдежзийклмнопрÑтуфхцчшщъыьÑю¤" + }, + "macgreek": { + "type": "_sbcs", + "chars": "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάάΟΡ≈Τ«»… ΥΧΆΈœ–―“â€â€˜â€™Ã·Î‰ÎŠÎŒÎŽÎ­Î®Î¯ÏŒÎÏαβψδεφγηιξκλμνοπώÏστθωςχυζϊϋÎΰ�" + }, + "maciceland": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü𢣧•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑âˆÏ€âˆ«ÂªÂºâ„¦Ã¦Ã¸Â¿Â¡Â¬âˆšÆ’≈∆«»… ÀÃÕŒœ–—“â€â€˜â€™Ã·â—ŠÃ¿Å¸â„¤ÃðÞþý·‚„‰ÂÊÃËÈÃÃŽÃÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸Ë˛ˇ" + }, + "macroman": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑âˆÏ€âˆ«ÂªÂºâ„¦Ã¦Ã¸Â¿Â¡Â¬âˆšÆ’≈∆«»… ÀÃÕŒœ–—“â€â€˜â€™Ã·â—ŠÃ¿Å¸â„¤‹›ï¬ï¬‚‡·‚„‰ÂÊÃËÈÃÃŽÃÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸Ë˛ˇ" + }, + "macromania": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑âˆÏ€âˆ«ÂªÂºâ„¦ÄƒÅŸÂ¿Â¡Â¬âˆšÆ’≈∆«»… ÀÃÕŒœ–—“â€â€˜â€™Ã·â—ŠÃ¿Å¸â„¤‹›Ţţ‡·‚„‰ÂÊÃËÈÃÃŽÃÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸Ë˛ˇ" + }, + "macthai": { + "type": "_sbcs", + "chars": "«»…ï¢ï¢’“â€ï¢™ï¿½â€¢ï¢„ï¢ï¢ï¢“‘’� à¸à¸‚ฃคฅฆงจฉชซฌà¸à¸Žà¸à¸à¸‘ฒณดตถทธนบปผà¸à¸žà¸Ÿà¸ à¸¡à¸¢à¸£à¸¤à¸¥à¸¦à¸§à¸¨à¸©à¸ªà¸«à¸¬à¸­à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºï»¿â€‹â€“—฿เà¹à¹‚ใไๅๆ็่้๊๋์à¹â„¢à¹à¹à¹‘๒๓๔๕๖๗๘๙®©����" + }, + "macturkish": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑âˆÏ€âˆ«ÂªÂºâ„¦Ã¦Ã¸Â¿Â¡Â¬âˆšÆ’≈∆«»… ÀÃÕŒœ–—“â€â€˜â€™Ã·â—ŠÃ¿Å¸ÄžÄŸÄ°Ä±ÅžÅŸâ€¡Â·â€šâ€žâ€°Ã‚ÊÃËÈÃÃŽÃÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸Ë˛ˇ" + }, + "macukraine": { + "type": "_sbcs", + "chars": "ÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ò£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“â€â€˜â€™Ã·â€žÐŽÑžÐÑŸâ„–ÐÑ‘ÑабвгдежзийклмнопрÑтуфхцчшщъыьÑю¤" + }, + "koi8r": { + "type": "_sbcs", + "chars": "─│┌â”└┘├┤┬┴┼▀▄█▌â–░▒▓⌠■∙√≈≤≥ ⌡°²·÷â•â•‘╒ё╓╔╕╖╗╘╙╚╛╜â•â•žâ•Ÿâ• â•¡Ð╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопÑÑ€ÑтужвьызшÑщчъЮÐБЦДЕФГХИЙКЛМÐОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "koi8u": { + "type": "_sbcs", + "chars": "─│┌â”└┘├┤┬┴┼▀▄█▌â–░▒▓⌠■∙√≈≤≥ ⌡°²·÷â•â•‘╒ёє╔ії╗╘╙╚╛ґâ•â•žâ•Ÿâ• â•¡ÐЄ╣ІЇ╦╧╨╩╪Ò╬©юабцдефгхийклмнопÑÑ€ÑтужвьызшÑщчъЮÐБЦДЕФГХИЙКЛМÐОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "koi8ru": { + "type": "_sbcs", + "chars": "─│┌â”└┘├┤┬┴┼▀▄█▌â–░▒▓⌠■∙√≈≤≥ ⌡°²·÷â•â•‘╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ÐЄ╣ІЇ╦╧╨╩╪ÒЎ©юабцдефгхийклмнопÑÑ€ÑтужвьызшÑщчъЮÐБЦДЕФГХИЙКЛМÐОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "koi8t": { + "type": "_sbcs", + "chars": "қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“â€â€¢â€“—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ð�Ӣ¶·�№�»���©юабцдефгхийклмнопÑÑ€ÑтужвьызшÑщчъЮÐБЦДЕФГХИЙКЛМÐОПЯРСТУЖВЬЫЗШЭЩЧЪ" + }, + "armscii8": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ �և։)(»«—.Õ,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհÕձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռÕÕ½ÕŽÕ¾ÕÕ¿ÕÖ€Õ‘ÖՒւՓփՔքՕօՖֆ՚�" + }, + "rk1048": { + "type": "_sbcs", + "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺÐђ‘’“â€â€¢â€“—�™љ›њқһџ ҰұӘ¤Ө¦§Ð©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑ" + }, + "tcvn": { + "type": "_sbcs", + "chars": "\u0000ÚỤ\u0003ỪỬỮ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010ỨỰỲỶỸÃá»´\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÃẠẶẬÈẺẼÉẸỆÌỈĨÃỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯÄăâêôơưđẰ̀̉̃Ị̀àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹá»á»ƒá»…ếệìỉỄẾỒĩíịòỔá»ÃµÃ³á»á»“ổỗốộá»á»Ÿá»¡á»›á»£Ã¹á»–ủũúụừửữứựỳỷỹýỵá»" + }, + "georgianacademy": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“â€â€¢â€“—˜™š›œÂžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿áƒáƒ‘გდევზთიკლმნáƒáƒžáƒŸáƒ áƒ¡áƒ¢áƒ£áƒ¤áƒ¥áƒ¦áƒ§áƒ¨áƒ©áƒªáƒ«áƒ¬áƒ­áƒ®áƒ¯áƒ°áƒ±áƒ²áƒ³áƒ´áƒµáƒ¶Ã§Ã¨Ã©ÃªÃ«Ã¬Ã­Ã®Ã¯Ã°Ã±Ã²Ã³Ã´ÃµÃ¶Ã·Ã¸Ã¹ÃºÃ»Ã¼Ã½Ã¾Ã¿" + }, + "georgianps": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“â€â€¢â€“—˜™š›œÂžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿áƒáƒ‘გდევზჱთიკლმნჲáƒáƒžáƒŸáƒ áƒ¡áƒ¢áƒ³áƒ£áƒ¤áƒ¥áƒ¦áƒ§áƒ¨áƒ©áƒªáƒ«áƒ¬áƒ­áƒ®áƒ´áƒ¯áƒ°áƒµÃ¦Ã§Ã¨Ã©ÃªÃ«Ã¬Ã­Ã®Ã¯Ã°Ã±Ã²Ã³Ã´ÃµÃ¶Ã·Ã¸Ã¹ÃºÃ»Ã¼Ã½Ã¾Ã¿" + }, + "pt154": { + "type": "_sbcs", + "chars": "ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“â€â€¢â€“—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ð©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫÒÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрÑтуфхцчшщъыьÑÑŽÑ" + }, + "viscii": { + "type": "_sbcs", + "chars": "\u0000\u0001Ẳ\u0003\u0004ẴẪ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013Ỷ\u0015\u0016\u0017\u0018Ỹ\u001a\u001b\u001c\u001dá»´\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆá»á»’ỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếá»á»ƒá»…ệốồổỗỠƠộá»á»Ÿá»‹á»°á»¨á»ªá»¬Æ¡á»›Æ¯Ã€ÃÂÃẢĂẳẵÈÉÊẺÌÃĨỳÄứÒÓÔạỷừửÙÚỹỵÃỡưàáâãảăữẫèéêẻìíĩỉđựòóôõá»á»á»¥Ã¹ÃºÅ©á»§Ã½á»£á»®" + }, + "iso646cn": { + "type": "_sbcs", + "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#Â¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������" + }, + "iso646jp": { + "type": "_sbcs", + "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[Â¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������" + }, + "hproman8": { + "type": "_sbcs", + "chars": "€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•–—˜™š›œÂžŸ ÀÂÈÊËÎôˋˆ¨˜ÙÛ₤¯Ãý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÃÃãÃðÃÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�" + }, + "macintosh": { + "type": "_sbcs", + "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑âˆÏ€âˆ«ÂªÂºâ„¦Ã¦Ã¸Â¿Â¡Â¬âˆšÆ’≈∆«»… ÀÃÕŒœ–—“â€â€˜â€™Ã·â—ŠÃ¿Å¸â„¤‹›ï¬ï¬‚‡·‚„‰ÂÊÃËÈÃÃŽÃÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸Ë˛ˇ" + }, + "ascii": { + "type": "_sbcs", + "chars": "��������������������������������������������������������������������������������������������������������������������������������" + }, + "tis620": { + "type": "_sbcs", + "chars": "���������������������������������à¸à¸‚ฃคฅฆงจฉชซฌà¸à¸Žà¸à¸à¸‘ฒณดตถทธนบปผà¸à¸žà¸Ÿà¸ à¸¡à¸¢à¸£à¸¤à¸¥à¸¦à¸§à¸¨à¸©à¸ªà¸«à¸¬à¸­à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºï¿½ï¿½ï¿½ï¿½à¸¿à¹€à¹à¹‚ใไๅๆ็่้๊๋์à¹à¹Žà¹à¹à¹‘๒๓๔๕๖๗๘๙๚๛����" + } +} \ No newline at end of file diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data.js b/node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data.js new file mode 100755 index 0000000..74fb34b --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data.js @@ -0,0 +1,168 @@ + +// Manually added data to be used by sbcs codec in addition to generated one. + +module.exports = { + // Not supported by iconv, not sure why. + "10029": "maccenteuro", + "maccenteuro": { + "type": "_sbcs", + "chars": "ÄĀÄÉĄÖÜáąČäÄĆć鏟ĎíÄĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňÅÕőŌ–—“â€â€˜â€™Ã·â—ŠÅŔŕŘ‹›řŖŗŠ‚„šŚśÃŤťÃŽžŪÓÔūŮÚůŰűŲųÃýķŻÅżĢˇ" + }, + + "808": "cp808", + "ibm808": "cp808", + "cp808": { + "type": "_sbcs", + "chars": "ÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗â•â•œâ•›â”└┴┬├─┼╞╟╚╔╩╦╠â•â•¬â•§â•¨â•¤â•¥â•™â•˜â•’╓╫╪┘┌█▄▌â–▀рÑтуфхцчшщъыьÑÑŽÑÐёЄєЇїЎў°∙·√№€■ " + }, + + // Aliases of generated encodings. + "ascii8bit": "ascii", + "usascii": "ascii", + "ansix3.4": "ascii", + "ansix3.41968": "ascii", + "ansix3.41986": "ascii", + "csascii": "ascii", + "cp367": "ascii", + "ibm367": "ascii", + "isoir6": "ascii", + "iso646us": "ascii", + "iso646.irv": "ascii", + "us": "ascii", + + "latin1": "iso88591", + "latin2": "iso88592", + "latin3": "iso88593", + "latin4": "iso88594", + "latin5": "iso88599", + "latin6": "iso885910", + "latin7": "iso885913", + "latin8": "iso885914", + "latin9": "iso885915", + "latin10": "iso885916", + + "csisolatin1": "iso88591", + "csisolatin2": "iso88592", + "csisolatin3": "iso88593", + "csisolatin4": "iso88594", + "csisolatincyrillic": "iso88595", + "csisolatinarabic": "iso88596", + "csisolatingreek" : "iso88597", + "csisolatinhebrew": "iso88598", + "csisolatin5": "iso88599", + "csisolatin6": "iso885910", + + "l1": "iso88591", + "l2": "iso88592", + "l3": "iso88593", + "l4": "iso88594", + "l5": "iso88599", + "l6": "iso885910", + "l7": "iso885913", + "l8": "iso885914", + "l9": "iso885915", + "l10": "iso885916", + + "isoir14": "iso646jp", + "isoir57": "iso646cn", + "isoir100": "iso88591", + "isoir101": "iso88592", + "isoir109": "iso88593", + "isoir110": "iso88594", + "isoir144": "iso88595", + "isoir127": "iso88596", + "isoir126": "iso88597", + "isoir138": "iso88598", + "isoir148": "iso88599", + "isoir157": "iso885910", + "isoir166": "tis620", + "isoir179": "iso885913", + "isoir199": "iso885914", + "isoir203": "iso885915", + "isoir226": "iso885916", + + "cp819": "iso88591", + "ibm819": "iso88591", + + "cyrillic": "iso88595", + + "arabic": "iso88596", + "arabic8": "iso88596", + "ecma114": "iso88596", + "asmo708": "iso88596", + + "greek" : "iso88597", + "greek8" : "iso88597", + "ecma118" : "iso88597", + "elot928" : "iso88597", + + "hebrew": "iso88598", + "hebrew8": "iso88598", + + "turkish": "iso88599", + "turkish8": "iso88599", + + "thai": "iso885911", + "thai8": "iso885911", + + "celtic": "iso885914", + "celtic8": "iso885914", + "isoceltic": "iso885914", + + "tis6200": "tis620", + "tis620.25291": "tis620", + "tis620.25330": "tis620", + + "10000": "macroman", + "10006": "macgreek", + "10007": "maccyrillic", + "10079": "maciceland", + "10081": "macturkish", + + "cspc8codepage437": "cp437", + "cspc775baltic": "cp775", + "cspc850multilingual": "cp850", + "cspcp852": "cp852", + "cspc862latinhebrew": "cp862", + "cpgr": "cp869", + + "msee": "cp1250", + "mscyrl": "cp1251", + "msansi": "cp1252", + "msgreek": "cp1253", + "msturk": "cp1254", + "mshebr": "cp1255", + "msarab": "cp1256", + "winbaltrim": "cp1257", + + "cp20866": "koi8r", + "20866": "koi8r", + "ibm878": "koi8r", + "cskoi8r": "koi8r", + + "cp21866": "koi8u", + "21866": "koi8u", + "ibm1168": "koi8u", + + "strk10482002": "rk1048", + + "tcvn5712": "tcvn", + "tcvn57121": "tcvn", + + "gb198880": "iso646cn", + "cn": "iso646cn", + + "csiso14jisc6220ro": "iso646jp", + "jisc62201969ro": "iso646jp", + "jp": "iso646jp", + + "cshproman8": "hproman8", + "r8": "hproman8", + "roman8": "hproman8", + "xroman8": "hproman8", + "ibm1051": "hproman8", + + "mac": "macintosh", + "csmacintosh": "macintosh", +}; + diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/big5-added.json b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/big5-added.json new file mode 100755 index 0000000..3c3d3c2 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/big5-added.json @@ -0,0 +1,122 @@ +[ +["8740","ä°ä°²ä˜ƒä–¦ä•¸ð§‰§äµ·ä–³ð§²±ä³¢ð§³…㮕䜶ä„䱇䱀𤊿𣘗ð§’𦺋𧃒䱗ðª‘ä䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡æ™å›»"], +["8767","綕å¤ð¨®¹ã·´éœ´ð§¯¯å¯›ð¡µžåª¤ã˜¥ð©º°å«‘å®·å³¼æ®è–“ð©¥…ç‘¡ç’㡵𡵓𣚞𦀡㻬"], +["87a1","𥣞㫵竼龗𤅡ð¨¤ð£‡ªð ªŠð£‰žäŒŠè’„é¾–é¯ä¤°è˜“墖éŠéˆ˜ç§ç¨²æ™ æ¨©è¢ç‘Œç¯…枂稬å‰é†ã“¦ç„𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥è®äš®ð¦ºˆä†ð¥¶™ç®®ð¢’¼é¿ˆð¢“𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿æ‹ç®é¿‹"], +["8840","㇀",4,"𠄌㇅𠃑ð ƒã‡†ã‡‡ð ƒ‹ð¡¿¨ã‡ˆð ƒŠã‡‰ã‡Šã‡‹ã‡Œð „Žã‡ã‡ŽÄ€ÃÇÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊÄáǎàɑēéěèīíÇìÅóǒòūúǔùǖǘǚ"], +["88a1","ǜü࿿ê̄ế࿿ê̌á»ÃªÉ¡âšâ›"], +["8940","𪎩𡅅"], +["8943","攊"], +["8946","丽æ»éµŽé‡Ÿ"], +["894c","𧜵撑会伨侨兖兴农凤务动医åŽå‘å˜å›¢å£°å¤„备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织ç»ç»Ÿç¼†ç¼·è‰ºè‹è¯è§†è®¾è¯¢è½¦è½§è½®"], +["89a1","ç‘ç³¼ç·æ¥†ç«‰åˆ§"], +["89ab","醌碸酞肼"], +["89b0","贋胶𠧧"], +["89b5","肟黇ä³é·‰é¸Œä°¾ð©·¶ð§€Žé¸Šðª„³ã—"], +["89c1","溚舾甙"], +["89c5","䤑马éªé¾™ç¦‡ð¨‘¬ð¡·Šð —𢫦两äºäº€äº‡äº¿ä»«ä¼·ã‘Œä¾½ã¹ˆå€ƒå‚ˆã‘½ã’“㒥円夅凛凼刅争剹åŠåŒ§ã—‡åŽ©ã•‘厰㕓å‚å£ã•­ã•²ãšå’“咣咴咹å“哯唘唣唨㖘唿㖥㖿嗗㗅"], +["8a40","𧶄唥"], +["8a43","𠱂𠴕𥄫å–𢳆㧬ð è¹†ð¤¶¸ð©“¥ä“𨂾çºð¢°¸ã¨´äŸ•ð¨…𦧲𤷪æ“𠵼𠾴𠳕𡃴æ’蹾𠺖𠰋𠽤𢲩𨉖𤓓"], +["8a64","𠵆ð©©ð¨ƒ©äŸ´ð¤º§ð¢³‚骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕"], +["8a76","ä™ð¦‚¥æ’´å“£ð¢µŒð¢¯Šð¡·ã§»ð¡¯"], +["8aa1","𦛚𦜖𧦠擪ð¥’𠱃蹨𢆡𨭌𠜱"], +["8aac","䠋𠆩㿺塳ð¢¶"], +["8ab2","𤗈𠓼𦂗𠽌𠶖啹䂻䎺"], +["8abb","䪴𢩦ð¡‚膪飵𠶜æ¹ã§¾ð¢µè·€åš¡æ‘¼ã¹ƒ"], +["8ac9","ðª˜ð ¸‰ð¢«ð¢³‰"], +["8ace","𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻"], +["8adf","𧕴𢺋𢈈𪙛ð¨³ð ¹ºð °´ð¦ œç¾“ð¡ƒð¢ ƒð¢¤¹ã—»ð¥‡£ð ºŒð ¾ð ºªã¾“𠼰𠵇ð¡…𠹌"], +["8af6","𠺫𠮩𠵈𡃀𡄽㿹𢚖æ²ð ¾­"], +["8b40","ð£´ð§˜¹ð¢¯Žð µ¾ð µ¿ð¢±‘𢱕㨘𠺘𡃇𠼮𪘲ð¦­ð¨³’𨶙𨳊閪哌苄喹"], +["8b55","𩻃鰦骶ð§žð¢·®ç…€è…­èƒ¬å°œð¦•²è„´ãž—åŸð¨‚½é†¶ð »ºð ¸ð ¹·ð »»ã—𤷫㘉𠳖嚯𢞵𡃉ð ¸ð ¹¸ð¡¸ð¡…ˆð¨ˆ‡ð¡‘•ð ¹¹ð¤¹ð¢¶¤å©”ð¡€ð¡€žð¡ƒµð¡ƒ¶åžœð ¸‘"], +["8ba1","𧚔ð¨‹ð ¾µð ¹»ð¥…¾ãœƒð ¾¶ð¡†€ð¥‹˜ðªŠ½ð¤§šð¡ ºð¤…·ð¨‰¼å¢™å‰¨ã˜šð¥œ½ç®²å­¨ä €ä¬¬é¼§ä§§é°Ÿé®ð¥­´ð£„½å—»ã—²åš‰ä¸¨å¤‚ð¡¯ð¯¡¸é‘𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺ç¬çˆ«ä¸¬çŠ­ð¤£©ç½’礻糹罓𦉪ã“"], +["8bde","ð¦‹è€‚肀𦘒𦥑å衤è§ð§¢²è® è´é’…镸长门ð¨¸éŸ¦é¡µé£Žé£žé¥£ð© é±¼é¸Ÿé»„歯龜丷𠂇é˜æˆ·é’¢"], +["8c40","倻淾𩱳龦㷉è¢ð¤…Žç·å³µä¬ ð¥‡ã•™ð¥´°æ„¢ð¨¨²è¾§é‡¶ç†‘朙玺ð£Šðª„‡ã²‹ð¡¦€ä¬ç£¤ç‚冮ð¨œä€‰æ©£ðªŠºäˆ£è˜ð ©¯ç¨ªð©¥‡ð¨«ªé•ç匤ð¢¾é´ç›™ð¨§£é¾§çŸäº£ä¿°å‚¼ä¸¯ä¼—龨å´ç¶‹å¢’å£ð¡¶¶åº’庙忂𢜒斋"], +["8ca1","ð£¹æ¤™æ©ƒð£±£æ³¿"], +["8ca7","爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩è¢é¾ªèº¹é¾«è¿è•Ÿé§ éˆ¡é¾¬ð¨¶¹ð¡¿ä±äŠ¢å¨š"], +["8cc9","顨æ«ä‰¶åœ½"], +["8cce","藖𤥻芿ð§„ä²ð¦µ´åµ»ð¦¬•ð¦¾¾é¾­é¾®å®–龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶"], +["8ce6","峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤ð¦±è«Œä¾´ð ˆ¹å¦¿è…¬é¡–𩣺弻"], +["8d40","𠮟"], +["8d42","ð¢‡ð¨¥­ä„‚äš»ð©¹ã¼‡é¾³ðª†µäƒ¸ãŸ–䛷𦱆䅼𨚲ð§¿ä•­ã£”𥒚䕡䔛䶉䱻䵶䗪㿈ð¤¬ã™¡ä“žä’½ä‡­å´¾åµˆåµ–ã·¼ã å¶¤å¶¹ã  ã ¸å¹‚庽弥徃㤈㤔㤿ã¥æƒ—愽峥㦉憷憹æ‡ã¦¸æˆ¬æŠæ‹¥æŒ˜ã§¸åš±"], +["8da1","㨃æ¢æ»æ‡æ‘šã©‹æ“€å´•å˜¡é¾Ÿãª—斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖ã¯æ©¥æ©´æ©±æª‚㯬檙㯲檫檵櫔櫶æ®æ¯æ¯ªæ±µæ²ªã³‹æ´‚洆洦æ¶ã³¯æ¶¤æ¶±æ¸•æ¸˜æ¸©æº†ð¨§€æº»æ»¢æ»šé½¿æ»¨æ»©æ¼¤æ¼´ãµ†ð£½æ¾æ¾¾ãµªãµµç†·å²™ã¶Šç€¬ã¶‘çç”ç¯ç¿ç‚‰ð Œ¥ä㗱𠻘"], +["8e40","𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑ð¦’䇊竚ç«ç«ªä‡¯å’²ð¥°ç¬‹ç­•ç¬©ð¥ŒŽð¥³¾ç®¢ç­¯èŽœð¥®´ð¦±¿ç¯è¡ç®’箸𥴠㶭𥱥蒒篺簆簵ð¥³ç±„粃𤢂粦晽𤕸糉糇糦籴糳糵糎"], +["8ea1","繧ä”𦹄çµð¦»–ç’綉綫焵綳緒ð¤—𦀩緤㴓緵𡟹緥ð¨­ç¸ð¦„¡ð¦…šç¹®çº’䌫鑬縧罀ç½ç½‡ç¤¶ð¦‹é§¡ç¾—ð¦‘羣𡙡ð ¨ä•œð£¦ä”ƒð¨Œºç¿ºð¦’‰è€…耈è€è€¨è€¯ðª‚‡ð¦³ƒè€»è€¼è¡ð¢œ”䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩ð ¬ð¦©’𣵾俹𡓽蓢è¢ð¦¬Šð¤¦§ð£”°ð¡³ð£·¸èŠªæ¤›ð¯¦”䇛"], +["8f40","è•‹è‹èŒšð ¸–ð¡ž´ã›ð£…½ð£•šè‰»è‹¢èŒ˜ð£º‹ð¦¶£ð¦¬…𦮗𣗎㶿èŒå—¬èŽ…䔋𦶥莬èè“㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞è莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖"], +["8fa1","𨘥𨘻è—𧂈蘂𡖂ð§ƒð¯¦²ä•ªè˜¨ã™ˆð¡¢¢å·ð§Žšè™¾è±ðªƒ¸èŸ®ð¢°§èž±èŸšè å™¡è™¬æ¡–ä˜è¡…衆𧗠𣶹𧗤衞袜䙛袴袵æ装ç·ð§œè¦‡è¦Šè¦¦è¦©è¦§è¦¼ð¨¨¥è§§ð§¤¤ð§ª½èªœçž“釾èªð§©™ç«©ð§¬ºð£¾äœ“𧬸煼謌謟ð¥°ð¥•¥è¬¿è­Œè­èª©ð¤©ºè®è®›èª¯ð¡›Ÿä˜•è¡è²›ð§µ”ð§¶ð¯§”㜥𧵓賖𧶘𧶽贒贃ð¡¤è³›çœè´‘𤳉ã»èµ·"], +["9040","趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭ð¨¥ð¨’辥錃𪊟ð ©è¾³ä¤ªð¨§žð¨”½ð£¶»å»¸ð£‰¢è¿¹ðª€”𨚼ð¨”𢌥㦀𦻗逷𨔼𧪾é¡ð¨•¬ð¨˜‹é‚¨ð¨œ“郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟é‰é‰¢ð¥–¹éŠ¹ð¨«†ð£²›ð¨¬Œð¥—›"], +["90a1","𠴱錬é«ð¨«¡ð¨¯«ç‚嫃𨫢𨫥䥥鉄𨯬𨰹𨯿é³é‘›èº¼é–…é–¦é¦é– æ¿¶äŠ¹ð¢™ºð¨›˜ð¡‰¼ð£¸®ä§Ÿæ°œé™»éš–䅬隣𦻕懚隶磵𨫠隽åŒä¦¡ð¦²¸ð ‰´ð¦ð©‚¯ð©ƒ¥ð¤«‘𡤕𣌊霱虂霶ä¨ä”½ä–…𤫩çµå­éœ›éœð©‡•é—孊𩇫éŸé¥åƒð£‚·ð£‚¼éž‰éžŸéž±éž¾éŸ€éŸ’韠𥑬韮çœð©³éŸ¿éŸµð©ð§¥ºä«‘頴頳顋顦㬎𧅵㵑𠘰𤅜"], +["9140","𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬é¸é¤¹ð¤¨©ä­²ð©¡—𩤅駵騌騻é¨é©˜ð¥œ¥ã›„𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃ð£½é­é­€ð©´¾å©…𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈"], +["91a1","鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴éºéº•éºžéº¢ä´´éºªéº¯ð¤¤é»ã­ ã§¥ã´ä¼²ãž¾ð¨°«é¼‚鼈䮖é¤ð¦¶¢é¼—鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸ð¤ˆð¤©‘玞𨯚𡣺禟𨥾𨸶é©é³ð¨©„鋬éŽé‹ð¨¥¬ð¤’¹çˆ—㻫ç²ç©ƒçƒð¤‘³ð¤¸ç…¾ð¡Ÿ¯ç‚£ð¡¢¾ð£–™ã»‡ð¡¢…ð¥¯ð¡Ÿ¸ãœ¢ð¡›»ð¡ ¹ã›¡ð¡´ð¡£‘𥽋㜣𡛀å›ð¤¨¥ð¡¾ð¡Š¨"], +["9240","ð¡†ð¡’¶è”ƒð£š¦è”ƒè‘•ð¤¦”𧅥𣸱𥕜𣻻ð§’䓴𣛮ð©¦ð¦¼¦æŸ¹ãœ³ã°•ã·§å¡¬ð¡¤¢æ ä—𣜿𤃡𤂋ð¤„𦰡哋嚞𦚱嚒𠿟𠮨ð ¸é†ð¨¬“鎜仸儫㠙ð¤¶äº¼ð ‘¥ð ¿ä½‹ä¾Šð¥™‘婨𠆫ð ‹ã¦™ð ŒŠð ”ãµä¼©ð ‹€ð¨º³ð ‰µè«šð ˆŒäº˜"], +["92a1","åƒå„侢伃𤨎𣺊佂倮å¬å‚俌俥å˜åƒ¼å…™å…›å…兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠ä“𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡é®ä™ºç†Œð¤ŽŒð ° ð¤¦¬ð¡ƒ¤æ§‘ð ¸ç‘¹ã»žç’™ç”瑖玘䮎𤪼ð¤‚åã–„çˆð¤ƒ‰å–´ð …å“𠯆åœé‰é›´é¦åŸåžå¿ã˜¾å£‹åª™ð¨©†ð¡›ºð¡¯ð¡œå¨¬å¦¸éŠå©¾å«å¨’𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃"], +["9340","åªð¨¯—ð “é ç’Œð¡Œƒç„…䥲éˆð¨§»éŽ½ãž å°žå²žå¹žå¹ˆð¡¦–𡥼𣫮å»å­ð¡¤ƒð¡¤„ãœð¡¢ ã›ð¡›¾ã›“脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠æ¾ð¢¡ ð¢˜«å¿›ãº¸ð¢–¯ð¢–¾ð©‚ˆð¦½³æ‡€ð €¾ð †ð¢˜›æ†™æ†˜æµð¢²›ð¢´‡ð¤›”ð©…"], +["93a1","摱𤙥𢭪㨩𢬢ð£‘𩣪𢹸挷𪑛撶挱æ‘𤧣𢵧护𢲡æ»æ•«æ¥²ã¯´ð£‚Žð£Š­ð¤¦‰ð£Š«å”𣋠𡣙ð©¿æ›Žð£Š‰ð£†³ã« ä†ð¥–„𨬢ð¥–𡛼𥕛ð¥¥ç£®ð£„ƒð¡ ªð£ˆ´ã‘¤ð£ˆð£†‚𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢ð£¾ç“ã®–æžð¤˜ªæ¢¶æ žã¯„檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋"], +["9440","銉𨀞𨧜鑧涥漋𤧬浧𣽿ã¶æ¸„𤀼娽渊塇洤硂焻𤌚𤉶烱ç‰çŠ‡çŠ”ð¤žð¤œ¥å…¹ð¤ª¤ð —«ç‘ºð£»¸ð£™Ÿð¤©Šð¤¤—𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌ç¼éŽ‡ç·ä’Ÿð¦·ªä•‘疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻"], +["94a1","ã·ð¤©Žã»¿ð¤§…𤣳釺圲é‚𨫣𡡤僟𥈡𥇧ç¸ð£ˆ²çœŽçœç»ð¤š—ð£žã©žð¤£°ç¸ç’›ãº¿ð¤ªºð¤«‡äƒˆð¤ª–𦆮錇ð¥–ç žç¢ç¢ˆç£’ç祙ð§ð¥›£ä„Žç¦›è’–禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺ð¡®ã–—啫㕰㚪𠇔ð °ç«¢å©™ð¢›µð¥ª¯ð¥ªœå¨ð ‰›ç£°å¨ªð¥¯†ç«¾ä‡¹ç±ç±­äˆ‘𥮳𥺼𥺦ç³ð¤§¹ð¡ž°ç²Žç±¼ç²®æª²ç·œç¸‡ç·“罎𦉡"], +["9540","𦅜𧭈綗𥺂䉪𦭵𠤖柖ð Žð£—埄ð¦’ð¦¸ð¤¥¢ç¿ç¬§ð  ¬ð¥«©ð¥µƒç¬Œð¥¸Žé§¦è™…驣樜ð£¿ã§¢ð¤§·ð¦–­é¨Ÿð¦– è’€ð§„§ð¦³‘䓪脷ä‚胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧è˜ð§ˆ›åª†ä…¿ð¡¡€å¬«ð¡¢¡å«¤ð¡£˜èš ð¯¦¼ð£¶è ­ð§¢å¨‚"], +["95a1","衮佅袇袿裦襥è¥ð¥šƒè¥”𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵ä›ãŸ²è¨½è¨œð©‘ˆå½éˆ«ð¤Š„旔焩烄𡡅鵭貟賩𧷜妚矃姰ä®ã›”踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻é„𨩋ä¢ð¨«¼é§ð¨°ð¨°»è“¥è¨«é–™é–§é–—閖𨴴瑅㻂𤣿𤩂ð¤ªã»§ð£ˆ¥éšð¨»§ð¨¹¦ð¨¹¥ã»Œð¤§­ð¤©¸ð£¿®ç’瑫㻼éð©‚°"], +["9640","桇ä¨ð©‚“𥟟éé¨ð¨¦‰ð¨°¦ð¨¬¯ð¦Ž¾éŠºå¬‘譩䤼ç¹ð¤ˆ›éž›é±é¤¸ð ¼¦å·ð¨¯…𤪲頟𩓚鋶𩗗釥䓀ð¨­ð¤©§ð¨­¤é£œð¨©…㼀鈪䤥è”餻é¥ð§¬†ã·½é¦›ä­¯é¦ªé©œð¨­¥ð¥£ˆæªé¨¡å«¾é¨¯ð©£±ä®ð©¥ˆé¦¼ä®½ä®—é½å¡²ð¡Œ‚堢𤦸"], +["96a1","𡓨硄𢜟𣶸棅㵽鑘㤧æ…ð¢žð¢¥«æ„‡é±é±“鱻鰵é°é­¿é¯ð©¸­é®Ÿðª‡µðªƒ¾é´¡ä²®ð¤„„鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰è è—®ð¦¸€ð£Ÿ—ð¦¤ç§¢ð£–œð£™€ä¤­ð¤§žãµ¢é›éŠ¾éˆð Š¿ç¢¹é‰·é‘俤㑀é¤ð¥•ç ½ç¡”碶硋ð¡—𣇉ð¤¥ãššä½²æ¿šæ¿™ç€žç€žå”𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉"], +["9740","愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖ð ¼è‘²ð¦³€ð¡“𤋺𢰦ð¤å¦”𣶷ð¦ç¶¨ð¦…›ð¦‚¤ð¤¦¹ð¤¦‹ð¨§ºé‹¥ç¢ã»©ç’´ð¨­£ð¡¢Ÿã»¡ð¤ª³æ«˜ç³ç»ã»–𤨾𤪔𡟙𤩦𠎧ð¡¤ð¤§¥ç‘ˆð¤¤–炥𤥶銄ç¦éŸð “¾éŒ±ð¨«Žð¨¨–鎆𨯧𥗕䤵𨪂煫"], +["97a1","𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂ð¤©ð¡¡’ä”®é㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹ð¨ªð¡¡¢é´ã³ð ª´äª–㦊僴㵩㵌𡎜煵䋻𨈘æ¸ð©ƒ¤ä“«æµ—ð§¹ç§æ²¯ã³–𣿭𣸭渂漌㵯ð µç•‘㚼㓈䚀㻚䡱姄鉮䤾è½ð¨°œð¦¯€å ’埈㛖𡑒烾ð¤¢ð¤©±ð¢¿£ð¡Š°ð¢Ž½æ¢¹æ¥§ð¡Ž˜ð£“¥ð§¯´ð£›Ÿð¨ªƒð£Ÿ–ð£ºð¤²Ÿæ¨šð£š­ð¦²·è¾ä“Ÿä“Ž"], +["9840","𦴦𦵑𦲂𦿞漗𧄉茽𡜺è­ð¦²€ð§“𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎éŽæššð¤Š¥å©®å¨«ð¤Š“樫𣻹𧜶𤑛𤋊ç„𤉙𨧡侰𦴨峂𤓎ð§¹ð¤Ž½æ¨Œð¤‰–𡌄炦焳ð¤©ã¶¥æ³Ÿð¯ ¥ð¤©ç¹¥å§«å´¯ã·³å½œð¤©ð¡ŸŸç¶¤è¦"], +["98a1","咅𣫺𣌀𠈔å¾ð £•ð ˜™ã¿¥ð¡¾žðªŠ¶ç€ƒð©…›åµ°çŽç³“𨩙ð© ä¿ˆç¿§ç‹çŒð§«´çŒ¸çŒ¹ð¥›¶ççˆãº©ð§¬˜é¬ç‡µð¤£²ç¡è‡¶ã»ŠçœŒã»‘沢国ç™çžçŸã»¢ã»°ã»´ã»ºç““㼎㽓畂畭畲ç–㽼痈痜㿀ç™ã¿—癴㿜発𤽜熈嘣覀塩ä€çƒä€¹æ¡ä…㗛瞘äªä¯å±žçž¾çŸ‹å£²ç ˜ç‚¹ç œä‚¨ç ¹ç¡‡ç¡‘硦葈𥔵礳栃礲䄃"], +["9940","䄉禑禙辻稆込䅧窑䆲窼艹䇄ç«ç«›ä‡ä¸¡ç­¢ç­¬ç­»ç°’簛䉠䉺类粜䊌粸䊔糭输烀ð ³ç·ç·”ç·ç·½ç¾®ç¾´çŠŸäŽ—耠耥笹耮耱è”㷌垴炠肷胩ä­è„ŒçŒªè„Žè„’ç• è„”ä㬹腖腙腚"], +["99a1","ä“堺腼膄ä¥è†“ä­è†¥åŸ¯è‡è‡¤è‰”ä’芦艶苊苘苿䒰è—险榊è…烵葤惣蒈䔄蒾蓡蓸è”蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘å”蹱嗵躰䠷軎転軤軭軲辷è¿è¿Šè¿Œé€³é§„䢭飠鈓䤞鈨鉘鉫銱銮銿"], +["9a40","鋣鋫鋳鋴鋽éƒéŽ„鎭䥅䥑麿é—åŒéé­é¾ä¥ªé‘”鑹锭関䦧间阳䧥枠䨤é€ä¨µéž²éŸ‚噔䫤惨颹䬙飱塄餎餙冴餜餷饂é¥é¥¢ä­°é§…ä®é¨¼é¬çªƒé­©é®é¯é¯±é¯´ä±­é° ã¯ð¡¯‚鵉鰺"], +["9aa1","黾å™é¶“鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀é“㞹𠗕𠘕𠙶𡚺å—煳𠫂ð «ð ®¿å‘ªð¯ »ð ¯‹å’žð ¯»ð °»ð ±“𠱥𠱼惧ð ²å™ºð ²µð ³ð ³­ð µ¯ð ¶²ð ·ˆæ¥•é°¯èž¥ð ¸„𠸎𠻗ð ¾ð ¼­ð ¹³å° ð ¾¼å¸‹ð¡œð¡ð¡¶æœžð¡»ð¡‚ˆð¡‚–㙇𡂿𡃓𡄯𡄻å¤è’­ð¡‹£ð¡µð¡Œ¶è®ð¡•·ð¡˜™ð¡Ÿƒð¡Ÿ‡ä¹¸ç‚»ð¡ ­ð¡¥ª"], +["9b40","𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕ð¢…槩㛈𢉼ð¢—ð¢ºð¢œªð¢¡±ð¢¥è‹½ð¢¥§ð¢¦“𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌"], +["9b62","𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳ð£¦ð£ŒŸð£žå¾±æ™ˆæš¿ð§©¹ð£•§ð£—³çˆð¤¦ºçŸ—𣘚𣜖纇ð †å¢µæœŽ"], +["9ba1","椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚ä£äª¸ð¤„™ð¨ªšð¤‹®ð¤Œð¤€»ð¤Œ´ð¤Ž–𤩅𠗊凒𠘑妟𡺨㮾𣳿ð¤„𤓖垈𤙴㦛𤜯𨗨𩧉ã¢ð¢‡ƒè­žð¨­Žé§–𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆ð ¹è»šð¥€¬åŠåœ¿ç…±ð¥Š™ð¥™ð£½Šð¤ª§å–¼ð¥‘†ð¥‘®ð¦­’釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿ð¥¡å¦ã“»ð£Œæƒžð¥¤ƒä¼ð¨¥ˆð¥ª®ð¥®‰ð¥°†ð¡¶åž¡ç…‘澶𦄂𧰒é–𦆲𤾚譢ð¦‚𦑊"], +["9c40","嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧ð¯£ä¾»åš¹ð¤”¡ð¦›¼ä¹ªð¤¤´é™–æ¶ð¦²½ã˜˜è¥·ð¦ž™ð¦¡®ð¦‘𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙èð¦®ä›ð¦²¤ç”»è¡¥ð¦¶®å¢¶"], +["9ca1","㜜ð¢–ð§‹ð§‡ã±”𧊀𧊅éŠð¢…ºð§Š‹éŒ°ð§‹¦ð¤§æ°¹é’Ÿð§‘𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹å°ç§£ä”¿æš¶ð©²­ð©¢¤è¥ƒð§ŸŒð§¡˜å›–䃟𡘊㦡𣜯𨃨ð¡…熭è¦ð§§ð©†¨å©§ä²·ð§‚¯ð¨¦«ð§§½ð§¨Šð§¬‹ð§µ¦ð¤…ºç­ƒç¥¾ð¨€‰æ¾µðª‹Ÿæ¨ƒð¨Œ˜åŽ¢ð¦¸‡éŽ¿æ ¶é𨅯𨀣𦦵ð¡­ð£ˆ¯ð¨ˆå¶…𨰰𨂃圕頣𨥉嶫𤦈斾槕å’𤪥ð£¾ã°‘朶ð¨‚𨃴𨄮𡾡ð¨…"], +["9d40","𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺æ¦ð¨¥–砈鉕𨦸ä²ð¨§§äŸð¨§¨ð¨­†ð¨¯”姸𨰉輋𨿅𩃬筑ð©„𩄼㷷𩅞𤫊è¿çŠåš‹ð©“§ð©—©ð©–°ð©–¸ð©œ²ð©£‘𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达å—"], +["9da1","辺𢒰边𤪓䔉繿潖檱仪㓤𨬬ð§¢ãœºèº€ð¡Ÿµð¨€¤ð¨­¬ð¨®™ð§¨¾ð¦š¯ã·«ð§™•ð£²·ð¥˜µð¥¥–亚ð¥ºð¦‰˜åš¿ð ¹­è¸Žå­­ð£ºˆð¤²žæžæ‹ð¡Ÿ¶ð¡¡»æ”°å˜­ð¥±Šåšð¥Œ‘㷆𩶘䱽嘢嘞罉𥻘奵𣵀è°ä¸œð ¿ªð µ‰ð£šºè„—鵞贘瘻鱅癎瞹é…å²è…ˆè‹·å˜¥è„²è˜è‚½å—ªç¥¢å™ƒå–ð ºã—Žå˜…嗱曱𨋢㘭甴嗰喺咗啲ð ±ð ²–å»ð¥…ˆð ¹¶ð¢±¢"], +["9e40","𠺢麫絚嗞ð¡µæŠé­å’”è³ç‡¶é…¶æ¼æŽ¹æ¾å•©ð¢­ƒé±²ð¢º³å†šã“Ÿð ¶§å†§å‘唞唓癦踭𦢊疱肶蠄螆裇膶èœð¡ƒä“¬çŒ„𤜆å®èŒ‹ð¦¢“噻𢛴𧴯𤆣𧵳ð¦»ð§Š¶é…°ð¡‡™éˆˆð£³¼ðªš©ð º¬ð »¹ç‰¦ð¡²¢äŽð¤¿‚𧿹𠿫䃺"], +["9ea1","é±æ”Ÿð¢¶ ä£³ð¤Ÿ ð©µ¼ð ¿¬ð ¸Šæ¢ð§–£ð ¿­"], +["9ead","ð¦ˆð¡†‡ç†£çºŽéµä¸šä¸„ã•·å¬æ²²å§ãš¬ã§œå½ãš¥ð¤˜˜å¢šð¤­®èˆ­å‘‹åžªð¥ª•ð ¥¹"], +["9ec5","㩒𢑥ç´ð©º¬ä´‰é¯­ð£³¾ð©¼°ä±›ð¤¾©ð©–žð©¿žè‘œð£¶¶ð§Š²ð¦ž³ð£œ æŒ®ç´¥ð£»·ð£¸¬ã¨ªé€ˆå‹Œã¹´ã™ºä—©ð ’Žç™€å«°ð º¶ç¡ºð§¼®å¢§ä‚¿å™¼é®‹åµ´ç™”ðª´éº…䳡痹㟻愙𣃚ð¤²"], +["9ef5","å™ð¡Š©åž§ð¤¥£ð©¸†åˆ´ð§‚®ã–­æ±Šéµ¼"], +["9f40","籖鬹埞ð¡¬å±“æ““ð©“𦌵𧅤蚭𠴨𦴢𤫢𠵱"], +["9f4f","凾ð¡¼å¶Žéœƒð¡·‘éºéŒç¬Ÿé¬‚峑箣扨挵髿ç¯é¬ªç±¾é¬®ç±‚粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑å§å–妷帒韈鶫轜呩鞴饀鞺匬愰"], +["9fa1","椬åšé°Šé´‚ä°»é™æ¦€å‚¦ç•†ð¡­é§šå‰³"], +["9fae","é…™éšé…œ"], +["9fb2","酑𨺗æ¿ð¦´£æ«Šå˜‘醎畺抅ð ¼ç籰𥰡𣳽"], +["9fc1","𤤙盖é®ä¸ªð ³”莾衂"], +["9fc9","届槀僭åºåˆŸå·µä»Žæ°±ð ‡²ä¼¹å’œå“šåŠšè¶‚㗾弌㗳"], +["9fdb","歒酼龥鮗頮颴骺麨麄煺笔"], +["9fe7","毺蠘罸"], +["9feb","嘠𪙊蹷齓"], +["9ff0","è·”è¹é¸œè¸æŠ‚ð¨½è¸¨è¹µç«“𤩷稾磘泪詧瘇"], +["a040","𨩚鼦泎蟖痃𪊲硓咢贌狢ç±è¬­çŒ‚瓱賫𤪻蘯徺袠䒷"], +["a055","𡠻𦸅"], +["a058","詾𢔛"], +["a05b","惽癧髗鵄é®é®èŸµ"], +["a063","è è³·çŒ¬éœ¡é®°ã—–犲䰇籑饊𦅙慙䰄麖慽"], +["a073","åŸæ…¯æŠ¦æˆ¹æ‹Žã©œæ‡¢åŽªð£µæ¤æ ‚ã—’"], +["a0a1","嵗𨯂迚𨸹"], +["a0a6","僙𡵆礆匲阸𠼻ä¥"], +["a0ae","矾"], +["a0b0","糂𥼚糚稭è¦è£çµç”…瓲覔舚朌è¢ð§’†è›ç“°è„ƒçœ¤è¦‰ð¦ŸŒç•“𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦"], +["a0d4","覩瑨涹èŸð¤€‘瓧㷛煶悤憜㳑煢æ·"], +["a0e2","罱𨬭ç‰æƒ©ä­¾åˆ ã°˜ð£³‡ð¥»—𧙖𥔱𡥄𡋾𩤃𦷜𧂭å³ð¦†­ð¨¨ð£™·ð ƒ®ð¦¡†ð¤¼Žä•¢å¬Ÿð¦Œé½éº¦ð¦‰«"], +["a3c0","â€",31,"â¡"], +["c6a1","â‘ ",9,"â‘´",9,"â…°",9,"丶丿亅亠冂冖冫勹匸å©åŽ¶å¤Šå®€å·›â¼³å¹¿å»´å½å½¡æ”´æ— ç–’癶辵隶¨ˆヽヾã‚ゞ〃ä»ã€…〆〇ー[]✽ã",23], +["c740","ã™",58,"ァアィイ"], +["c7a1","ã‚¥",81,"Ð",5,"ÐЖ",4], +["c840","Л",26,"ёж",25,"⇧↸↹ã‡ð ƒŒä¹šð ‚Šåˆ‚ä’‘"], +["c8a1","龰冈龱𧘇"], +["c8cd","¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌âºâº•âºœâºâº¥âº§âºªâº¬âº®âº¶âº¼âº¾â»†â»Šâ»Œâ»â»â»–⻗⻞⻣"], +["c8f5","ʃÉɛɔɵœøŋʊɪ"], +["f9fe","ï¿­"], +["fa40","𠕇鋛𠗟𣿅蕌䊵ç¯å†µã™‰ð¤¥‚𨧤é„𡧛苮𣳈砼æ„拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩ð ¾å¾¤ð Ž€ð ‡æ»›ð Ÿå½å„㑺儎顬ãƒè–𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂è½ð –³ð£²™å†²å†¸"], +["faa1","鴴凉å‡å‡‘㳜凓𤪦决凢å‚凭è椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠è˜ð¦¬“包𨫞啉滙𣾀𠥔𣿬匳å„𠯢泋𡜦栛ç•æŠãºªã£Œð¡›¨ç‡ä’¢å­å´ð¨š«å¾å¿ð¡––𡘓矦厓𨪛厠厫厮玧ð¥²ã½™çŽœåå…汉义埾å™ãª«ð ®å ð£¿«ð¢¶£å¶ð ±·å“ç¹å”«æ™—浛呭𦭓𠵴å•å’咤䞦ð¡œð »ã¶´ð µ"], +["fb40","𨦼𢚘啇䳭å¯ç—喆喩嘅𡣗𤀺䕒ð¤µæš³ð¡‚´å˜·æ›ð£ŠŠæš¤æš­å™å™ç£±å›±éž‡å¾åœ€å›¯å›­ð¨­¦ã˜£ð¡‰å†ð¤†¥æ±®ç‚‹å‚㚱𦱾埦ð¡–堃𡑔ð¤£å ¦ð¤¯µå¡œå¢ªã•¡å£ å£œð¡ˆ¼å£»å¯¿åƒðª…𤉸é“㖡够梦㛃湙"], +["fba1","𡘾娤啓𡚒蔅姉𠵎ð¦²ð¦´ªð¡Ÿœå§™ð¡Ÿ»ð¡ž²ð¦¶¦æµ±ð¡ ¨ð¡›•å§¹ð¦¹…媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広å‹å­¶æ–ˆå­¼ð§¨Žä€„ä¡ð ˆ„寕慠𡨴𥧌𠖥寳å®ä´å°…ð¡­„å°“çŽå°”𡲥𦬨屉ä£å²…峩峯嶋𡷹𡸷å´å´˜åµ†ð¡º¤å²ºå·—苼㠭ð¤¤ð¢‰ð¢…³èŠ‡ã ¶ã¯‚帮檊幵幺𤒼𠳓厦亷å»åŽ¨ð¡±å¸‰å»´ð¨’‚"], +["fc40","廹廻㢠廼栾é›å¼ð ‡ð¯¢”㫞䢮𡌺强𦢈ð¢å½˜ð¢‘±å½£éž½ð¦¹®å½²é€ð¨¨¶å¾§å¶¶ãµŸð¥‰ð¡½ªð§ƒ¸ð¢™¨é‡–𠊞𨨩怱暅𡡷㥣㷇㘹åžð¢ž´ç¥±ã¹€æ‚žæ‚¤æ‚³ð¤¦‚ð¤¦ð§©“璤僡媠慤è¤æ…‚慈𦻒æ†å‡´ð ™–憇宪𣾷"], +["fca1","𢡟懓ð¨®ð©¥æ‡ã¤²ð¢¦€ð¢£æ€£æ…œæ”žæŽ‹ð „˜æ‹…ð¡°æ‹•ð¢¸æ¬ð¤§Ÿã¨—æ¸æ¸ð¡ŽŽð¡Ÿ¼æ’澊𢸶頔𤂌ð¥œæ“¡æ“¥é‘»ã©¦æºã©—æ•æ¼–𤨨𤨣斅敭敟ð£¾æ–µð¤¥€ä¬·æ—‘䃘𡠩无旣忟ð£€æ˜˜ð£‡·ð£‡¸æ™„𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂æžæ§æ¢ð¤‡ð©ƒ­æŸ—ä“©æ ¢æ¹éˆ¼æ ð£¦ð¦¶ æ¡"], +["fd40","𣑯槡樋𨫟楳棃ð£—æ¤æ¤€ã´²ã¨ð£˜¼ã®€æž¬æ¥¡ð¨©Šä‹¼æ¤¶æ¦˜ã®¡ð ‰è£å‚槹𣙙𢄪橅𣜃æªã¯³æž±æ«ˆð©†œã°æ¬ð ¤£æƒžæ¬µæ­´ð¢Ÿæºµð£«›ð Žµð¡¥˜ã€å¡ð£­šæ¯¡ð£»¼æ¯œæ°·ð¢’‹ð¤£±ð¦­‘汚舦汹𣶼䓅𣶽𤆤𤤌𤤀"], +["fda1","𣳉㛥㳫𠴲鮃𣇹𢒑ç¾æ ·ð¦´¥ð¦¶¡ð¦·«æ¶–浜湼漄𤥿𤂅𦹲蔳𦽴凇沜æ¸è®ð¨¬¡æ¸¯ð£¸¯ç‘“𣾂秌æ¹åª‘ð£‹æ¿¸ãœæ¾ð£¸°æ»ºð¡’—𤀽䕕é°æ½„潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀ð¦‡ç‹ç¾ç‚§ç‚烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜ð¤¥ç…é¢ð¤‹ç„¬ð¤‘šð¤¨§ð¤¨¢ç†ºð¨¯¨ç‚½çˆŽ"], +["fe40","鑂爕夑鑃爤é𥘅爮牀𤥴梽牕牗㹕ð£„æ æ¼½çŠ‚猪猫𤠣𨠫䣭𨠄猨献ç玪𠰺𦨮ç‰ç‘‰ð¤‡¢ð¡›§ð¤¨¤æ˜£ã›…𤦷ð¤¦ð¤§»ç·ç•æ¤ƒð¤¨¦ç¹ð —ƒã»—瑜𢢭瑠𨺲瑇ç¤ç‘¶èŽ¹ç‘¬ãœ°ç‘´é±æ¨¬ç’‚䥓𤪌"], +["fea1","𤅟𤩹ð¨®å­†ð¨°ƒð¡¢žç“ˆð¡¦ˆç”Žç“©ç”žð¨»™ð¡©‹å¯—𨺬鎅ç•ç•Šç•§ç•®ð¤¾‚㼄𤴓疎ç‘疞疴瘂瘬癑ç™ç™¯ç™¶ð¦µçšè‡¯ãŸ¸ð¦¤‘𦤎皡皥皷盌𦾟葢ð¥‚𥅽𡸜眞眦ç€æ’¯ð¥ˆ ç˜ð£Š¬çž¯ð¨¥¤ð¨¥¨ð¡›çŸ´ç ‰ð¡¶ð¤¨’棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗ç¦ð§¬¹ç¤¼ç¦©æ¸ªð§„¦ãº¨ç§†ð©„秔"] +] diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp936.json b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp936.json new file mode 100755 index 0000000..49ddb9a --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp936.json @@ -0,0 +1,264 @@ +[ +["0","\u0000",127,"€"], +["8140","丂丄丅丆ä¸ä¸’丗丟丠両丣並丩丮丯丱丳丵丷丼乀ä¹ä¹‚乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪",5,"乲乴",9,"乿",6,"亇亊"], +["8180","äºäº–亗亙亜äºäºžäº£äºªäº¯äº°äº±äº´äº¶äº·äº¸äº¹äº¼äº½äº¾ä»ˆä»Œä»ä»ä»’仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂",6,"伋伌伒",4,"伜ä¼ä¼¡ä¼£ä¼¨ä¼©ä¼¬ä¼­ä¼®ä¼±ä¼³ä¼µä¼·ä¼¹ä¼»ä¼¾",4,"佄佅佇",5,"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀ä¾ä¾‚侅來侇侊侌侎ä¾ä¾’侓侕侖侘侙侚侜侞侟価侢"], +["8240","侤侫侭侰",4,"侶",8,"ä¿€ä¿ä¿‚俆俇俈俉俋俌ä¿ä¿’",4,"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿",11], +["8280","個倎å€å€‘倓倕倖倗倛å€å€žå€ å€¢å€£å€¤å€§å€«å€¯",10,"倻倽倿å€åå‚å„å…å†å‰åŠå‹åå",4,"å–å—å˜å™å›å",7,"å¦",5,"å­",8,"å¸å¹åºå¼å½å‚傂傃傄傆傇傉傊傋傌傎",20,"傤傦傪傫傭",4,"傳",6,"傼"], +["8340","傽",17,"åƒ",5,"僗僘僙僛",10,"僨僩僪僫僯僰僱僲僴僶",4,"僼",9,"儈"], +["8380","儉儊儌",5,"å„“",13,"å„¢",28,"兂兇兊兌兎å…å…兒兓兗兘兙兛å…",4,"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎å†å†å†‘冓冔冘冚å†å†žå†Ÿå†¡å†£å†¦",4,"冭冮冴冸冹冺冾冿å‡å‡‚凃凅凈凊å‡å‡Žå‡å‡’",5], +["8440","凘凙凚凜凞凟凢凣凥",5,"凬凮凱凲凴凷凾刄刅刉刋刌åˆåˆåˆ“刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄",5,"剋剎å‰å‰’剓剕剗剘"], +["8480","剙剚剛å‰å‰Ÿå‰ å‰¢å‰£å‰¤å‰¦å‰¨å‰«å‰¬å‰­å‰®å‰°å‰±å‰³",9,"剾劀劃",4,"劉",6,"劑劒劔",6,"劜劤劥劦劧劮劯劰労",9,"å‹€å‹å‹‚勄勅勆勈勊勌å‹å‹Žå‹å‹‘勓勔動勗務",5,"勠勡勢勣勥",10,"勱",7,"勻勼勽åŒåŒ‚匃匄匇匉匊匋匌匎"], +["8540","匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯",9,"匼匽å€å‚å„å†å‹åŒååå”å˜å™å›åå¥å¨åªå¬å­å²å¶å¹å»å¼å½å¾åŽ€åŽåŽƒåŽ‡åŽˆåŽŠåŽŽåŽ"], +["8580","åŽ",4,"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯",6,"厷厸厹厺厼厽厾å€åƒ",4,"åŽååå’å“å•åšåœååžå¡å¢å§å´åºå¾å¿å€å‚å…å‡å‹å”å˜å™åšåœå¢å¤å¥åªå°å³å¶å·åºå½å¿å‘呂呄呅呇呉呌å‘å‘Žå‘å‘‘å‘šå‘",4,"呣呥呧呩",7,"呴呹呺呾呿å’咃咅咇咈咉咊å’咑咓咗咘咜咞咟咠咡"], +["8640","咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠",4,"哫哬哯哰哱哴",5,"哻哾唀唂唃唄唅唈唊",4,"唒唓唕",5,"唜å”唞唟唡唥唦"], +["8680","唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋",4,"啑啒啓啔啗",4,"å•å•žå•Ÿå• å•¢å•£å•¨å•©å•«å•¯",5,"啹啺啽啿喅喆喌å–å–Žå–喒喓喕喖喗喚喛喞喠",6,"å–¨",8,"喲喴営喸喺喼喿",4,"嗆嗇嗈嗊嗋嗎å—å—å—•å——",4,"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸",4,"嗿嘂嘃嘄嘅"], +["8740","嘆嘇嘊嘋å˜å˜",7,"嘙嘚嘜å˜å˜ å˜¡å˜¢å˜¥å˜¦å˜¨å˜©å˜ªå˜«å˜®å˜¯å˜°å˜³å˜µå˜·å˜¸å˜ºå˜¼å˜½å˜¾å™€",11,"å™",4,"噕噖噚噛å™",4], +["8780","噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽",7,"嚇",6,"åšåš‘åš’åš”",14,"嚤",10,"åš°",6,"嚸嚹嚺嚻嚽",12,"囋",8,"囕囖囘囙囜団囥",5,"囬囮囯囲図囶囷囸囻囼圀åœåœ‚圅圇國",6], +["8840","園",9,"åœåœžåœ åœ¡åœ¢åœ¤åœ¥åœ¦åœ§åœ«åœ±åœ²åœ´",4,"圼圽圿ååƒå„å…å†åˆå‰å‹å’",4,"å˜å™å¢å£å¥å§å¬å®å°å±å²å´åµå¸å¹åºå½å¾å¿åž€"], +["8880","åžåž‡åžˆåž‰åžŠåž",4,"åž”",6,"åžœåžåžžåžŸåž¥åž¨åžªåž¬åž¯åž°åž±åž³åžµåž¶åž·åž¹",8,"埄",6,"埌åŸåŸåŸ‘埓埖埗埛埜埞埡埢埣埥",7,"埮埰埱埲埳埵埶執埻埼埾埿å å ƒå „堅堈堉堊堌堎å å å ’堓堔堖堗堘堚堛堜å å Ÿå ¢å £å ¥",4,"å «",4,"報堲堳場堶",7], +["8940","å ¾",5,"å¡…",6,"å¡Žå¡å¡å¡’å¡“å¡•å¡–å¡—å¡™",4,"å¡Ÿ",5,"塦",4,"å¡­",16,"塿墂墄墆墇墈墊墋墌"], +["8980","å¢",4,"墔",4,"墛墜å¢å¢ ",7,"墪",17,"墽墾墿壀壂壃壄壆",10,"壒壓壔壖",13,"壥",5,"壭壯壱売壴壵壷壸壺",7,"夃夅夆夈",4,"夎å¤å¤‘夒夓夗夘夛å¤å¤žå¤ å¤¡å¤¢å¤£å¤¦å¤¨å¤¬å¤°å¤²å¤³å¤µå¤¶å¤»"], +["8a40","夽夾夿奀奃奅奆奊奌å¥å¥å¥’奓奙奛",4,"奡奣奤奦",12,"奵奷奺奻奼奾奿妀妅妉妋妌妎å¦å¦å¦‘妔妕妘妚妛妜å¦å¦Ÿå¦ å¦¡å¦¢å¦¦"], +["8a80","妧妬妭妰妱妳",5,"妺妼妽妿",6,"姇姈姉姌å§å§Žå§å§•å§–姙姛姞",4,"姤姦姧姩姪姫姭",11,"姺姼姽姾娀娂娊娋å¨å¨Žå¨å¨å¨’娔娕娖娗娙娚娛å¨å¨žå¨¡å¨¢å¨¤å¨¦å¨§å¨¨å¨ª",6,"娳娵娷",4,"娽娾娿å©",4,"婇婈婋",9,"婖婗婘婙婛",5], +["8b40","婡婣婤婥婦婨婩婫",8,"婸婹婻婼婽婾媀",17,"媓",6,"媜",13,"媫媬"], +["8b80","媭",4,"媴媶媷媹",4,"媿嫀嫃",5,"å«Šå«‹å«",4,"嫓嫕嫗嫙嫚嫛å«å«žå«Ÿå«¢å«¤å«¥å«§å«¨å«ªå«¬",4,"嫲",22,"嬊",11,"嬘",25,"嬳嬵嬶嬸",7,"å­",6], +["8c40","å­ˆ",7,"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊å®å®Žå®å®‘宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀å¯å¯ƒå¯ˆå¯‰å¯Šå¯‹å¯å¯Žå¯"], +["8c80","寑寔",8,"寠寢寣實寧審",4,"寯寱",6,"寽対尀専尃尅將專尋尌å°å°Žå°å°’尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌å±å±’屓屔屖屗屘屚屛屜å±å±Ÿå±¢å±¤å±§",6,"å±°å±²",6,"屻屼屽屾岀岃",4,"岉岊岋岎å²å²’岓岕å²",4,"岤",4], +["8d40","岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅",5,"峌",5,"峓",5,"峚",6,"峢峣峧峩峫峬峮峯峱",9,"å³¼",4], +["8d80","å´å´„å´…å´ˆ",5,"å´",4,"崕崗崘崙崚崜å´å´Ÿ",4,"崥崨崪崫崬崯",4,"å´µ",7,"å´¿",7,"嵈嵉åµ",10,"嵙嵚嵜嵞",10,"嵪嵭嵮嵰嵱嵲嵳嵵",12,"嶃",21,"嶚嶛嶜嶞嶟嶠"], +["8e40","嶡",21,"嶸",12,"å·†",6,"å·Ž",12,"巜巟巠巣巤巪巬巭"], +["8e80","巰巵巶巸",4,"巿帀帄帇帉帊帋å¸å¸Žå¸’帓帗帞",7,"帨",4,"帯帰帲",4,"帹帺帾帿幀å¹å¹ƒå¹†",5,"å¹",6,"å¹–",4,"幜å¹å¹Ÿå¹ å¹£",14,"幵幷幹幾åºåº‚広庅庈庉庌åºåºŽåº’庘庛åºåº¡åº¢åº£åº¤åº¨",4,"庮",4,"庴庺庻庼庽庿",6], +["8f40","廆廇廈廋",5,"廔廕廗廘廙廚廜",11,"廩廫",8,"廵廸廹廻廼廽弅弆弇弉弌å¼å¼Žå¼å¼’弔弖弙弚弜å¼å¼žå¼¡å¼¢å¼£å¼¤"], +["8f80","弨弫弬弮弰弲",6,"弻弽弾弿å½",14,"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆å¾å¾Žå¾å¾‘従徔徖徚徛å¾å¾žå¾Ÿå¾ å¾¢",5,"復徫徬徯",5,"徶徸徹徺徻徾",4,"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇"], +["9040","怈怉怋怌æ€æ€‘怓怗怘怚怞怟怢怣怤怬怭怮怰",4,"怶",4,"怽怾æ€æ„",6,"æŒæŽææ‘æ“æ”æ–æ—æ˜æ›æœæžæŸæ æ¡æ¥æ¦æ®æ±æ²æ´æµæ·æ¾æ‚€"], +["9080","æ‚悂悅悆悇悈悊悋悎æ‚æ‚悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽",7,"惇惈惉惌",4,"惒惓惔惖惗惙惛惞惡",4,"惪惱惲惵惷惸惻",4,"愂愃愄愅愇愊愋愌æ„",4,"愖愗愘愙愛愜æ„愞愡愢愥愨愩愪愬",18,"æ…€",6], +["9140","慇慉態æ…æ…æ…慒慓慔慖",6,"慞慟慠慡慣慤慥慦慩",6,"慱慲慳慴慶慸",18,"憌æ†æ†",4,"憕"], +["9180","憖",6,"憞",8,"憪憫憭",9,"憸",5,"憿懀æ‡æ‡ƒ",4,"應懌",4,"懓懕",16,"懧",13,"懶",8,"戀",5,"戇戉戓戔戙戜æˆæˆžæˆ æˆ£æˆ¦æˆ§æˆ¨æˆ©æˆ«æˆ­æˆ¯æˆ°æˆ±æˆ²æˆµæˆ¶æˆ¸",4,"扂扄扅扆扊"], +["9240","æ‰æ‰æ‰•æ‰–扗扙扚扜",6,"扤扥扨扱扲扴扵扷扸扺扻扽æŠæŠ‚抃抅抆抇抈抋",5,"抔抙抜æŠæŠžæŠ£æŠ¦æŠ§æŠ©æŠªæŠ­æŠ®æŠ¯æŠ°æŠ²æŠ³æŠ´æŠ¶æŠ·æŠ¸æŠºæŠ¾æ‹€æ‹"], +["9280","拃拋æ‹æ‹‘æ‹•æ‹æ‹žæ‹ æ‹¡æ‹¤æ‹ªæ‹«æ‹°æ‹²æ‹µæ‹¸æ‹¹æ‹ºæ‹»æŒ€æŒƒæŒ„挅挆挊挋挌æŒæŒæŒæŒ’挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳",5,"挻挼挾挿æ€ææ„æ‡æˆæŠæ‘æ’æ“æ”æ–",7,"æ æ¤æ¥æ¦æ¨æªæ«æ¬æ¯æ°æ²æ³æ´æµæ¸æ¹æ¼æ½æ¾æ¿æŽæŽƒæŽ„掅掆掋æŽæŽ‘掓掔掕掗掙",6,"採掤掦掫掯掱掲掵掶掹掻掽掿æ€"], +["9340","ææ‚æƒæ…æ‡æˆæŠæ‹æŒæ‘æ“æ”æ•æ—",6,"æŸæ¢æ¤",4,"æ«æ¬æ®æ¯æ°æ±æ³æµæ·æ¹æºæ»æ¼æ¾æƒæ„æ†",4,"ææŽæ‘æ’æ•",5,"ææŸæ¢æ£æ¤"], +["9380","æ¥æ§æ¨æ©æ«æ®",5,"æµ",4,"æ»æ¼æ¾æ‘€æ‘‚摃摉摋",6,"æ‘“æ‘•æ‘–æ‘—æ‘™",4,"æ‘Ÿ",7,"摨摪摫摬摮",9,"æ‘»",6,"撃撆撈",8,"撓撔撗撘撚撛撜æ’æ’Ÿ",4,"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿æ“擃擄擆",6,"æ“擑擓擔擕擖擙據"], +["9440","擛擜æ“擟擠擡擣擥擧",24,"æ”",7,"攊",7,"攓",4,"æ”™",8], +["9480","攢攣攤攦",4,"攬攭攰攱攲攳攷攺攼攽敀",4,"敆敇敊敋æ•æ•Žæ•æ•’敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數",14,"斈斉斊æ–æ–Žæ–斒斔斕斖斘斚æ–斞斠斢斣斦斨斪斬斮斱",7,"斺斻斾斿旀旂旇旈旉旊æ—æ—旑旓旔旕旘",7,"旡旣旤旪旫"], +["9540","旲旳旴旵旸旹旻",4,"æ˜æ˜„昅昇昈昉昋æ˜æ˜æ˜‘昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷",4,"昽昿晀時晄",6,"æ™æ™Žæ™æ™‘晘"], +["9580","晙晛晜æ™æ™žæ™ æ™¢æ™£æ™¥æ™§æ™©",4,"晱晲晳晵晸晹晻晼晽晿暀æšæšƒæš…暆暈暉暊暋æšæšŽæšæšæš’暓暔暕暘",4,"æšž",8,"æš©",4,"暯",4,"暵暶暷暸暺暻暼暽暿",25,"曚曞",7,"曧曨曪",5,"曱曵曶書曺曻曽æœæœ‚會"], +["9640","朄朅朆朇朌朎æœæœ‘朒朓朖朘朙朚朜朞朠",5,"朧朩朮朰朲朳朶朷朸朹朻朼朾朿ææ„æ…æ‡æŠæ‹ææ’æ”æ•æ—",4,"ææ¢æ£æ¤æ¦æ§æ«æ¬æ®æ±æ´æ¶"], +["9680","æ¸æ¹æºæ»æ½æž€æž‚枃枅枆枈枊枌æžæžŽæžæž‘枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹",7,"柂柅",9,"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵",7,"柾æ æ ‚栃栄栆æ æ æ ’栔栕栘",4,"æ žæ Ÿæ  æ ¢",6,"æ «",6,"栴栵栶栺栻栿桇桋æ¡æ¡æ¡’æ¡–",5], +["9740","æ¡œæ¡æ¡žæ¡Ÿæ¡ªæ¡¬",7,"桵桸",8,"梂梄梇",7,"æ¢æ¢‘梒梔梕梖梘",9,"梣梤梥梩梪梫梬梮梱梲梴梶梷梸"], +["9780","梹",6,"æ£æ£ƒ",5,"棊棌棎æ£æ£æ£‘棓棔棖棗棙棛",4,"棡棢棤",9,"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆",4,"椌æ¤æ¤‘椓",11,"椡椢椣椥",7,"椮椯椱椲椳椵椶椷椸椺椻椼椾楀æ¥æ¥ƒ",16,"楕楖楘楙楛楜楟"], +["9840","楡楢楤楥楧楨楩楪楬業楯楰楲",4,"楺楻楽楾楿æ¦æ¦ƒæ¦…榊榋榌榎",5,"榖榗榙榚æ¦",9,"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"], +["9880","榾榿槀槂",7,"構æ§æ§æ§‘槒槓槕",5,"槜æ§æ§žæ§¡",11,"槮槯槰槱槳",9,"槾樀",9,"樋",11,"標",5,"樠樢",5,"権樫樬樭樮樰樲樳樴樶",6,"樿",4,"橅橆橈",7,"æ©‘",6,"æ©š"], +["9940","æ©œ",4,"橢橣橤橦",10,"橲",6,"橺橻橽橾橿æªæª‚檃檅",8,"æªæª’",4,"檘",7,"檡",5], +["9980","檧檨檪檭",114,"欥欦欨",6], +["9a40","欯欰欱欳欴欵欶欸欻欼欽欿歀æ­æ­‚歄歅歈歊歋æ­",11,"æ­š",7,"歨歩歫",13,"歺歽歾歿殀殅殈"], +["9a80","殌殎æ®æ®æ®‘殔殕殗殘殙殜",4,"殢",7,"殫",7,"殶殸",6,"毀毃毄毆",4,"毌毎æ¯æ¯‘毘毚毜",4,"毢",7,"毬毭毮毰毱毲毴毶毷毸毺毻毼毾",6,"æ°ˆ",4,"æ°Žæ°’æ°—æ°œæ°æ°žæ° æ°£æ°¥æ°«æ°¬æ°­æ°±æ°³æ°¶æ°·æ°¹æ°ºæ°»æ°¼æ°¾æ°¿æ±ƒæ±„汅汈汋",4,"汑汒汓汖汘"], +["9b40","汙汚汢汣汥汦汧汫",4,"汱汳汵汷汸決汻汼汿沀沄沇沊沋æ²æ²Žæ²‘沒沕沖沗沘沚沜æ²æ²žæ² æ²¢æ²¨æ²¬æ²¯æ²°æ²´æ²µæ²¶æ²·æ²ºæ³€æ³æ³‚泃泆泇泈泋æ³æ³Žæ³æ³‘泒泘"], +["9b80","泙泚泜æ³æ³Ÿæ³¤æ³¦æ³§æ³©æ³¬æ³­æ³²æ³´æ³¹æ³¿æ´€æ´‚洃洅洆洈洉洊æ´æ´æ´æ´‘洓洔洕洖洘洜æ´æ´Ÿ",5,"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌æµæµ•æµ–浗浘浛æµæµŸæµ¡æµ¢æµ¤æµ¥æµ§æµ¨æµ«æµ¬æµ­æµ°æµ±æµ²æµ³æµµæµ¶æµ¹æµºæµ»æµ½",4,"涃涄涆涇涊涋æ¶æ¶æ¶æ¶’涖",4,"涜涢涥涬涭涰涱涳涴涶涷涹",5,"æ·æ·‚淃淈淉淊"], +["9c40","æ·æ·Žæ·æ·æ·’淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽",7,"渆渇済渉渋æ¸æ¸’渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵"], +["9c80","渶渷渹渻",7,"æ¹…",7,"æ¹æ¹æ¹‘湒湕湗湙湚湜æ¹æ¹žæ¹ ",10,"湬湭湯",14,"満æºæº‚溄溇溈溊",4,"溑",6,"溙溚溛æºæºžæº æº¡æº£æº¤æº¦æº¨æº©æº«æº¬æº­æº®æº°æº³æºµæº¸æº¹æº¼æº¾æº¿æ»€æ»ƒæ»„滅滆滈滉滊滌æ»æ»Žæ»æ»’滖滘滙滛滜æ»æ»£æ»§æ»ª",5], +["9d40","滰滱滲滳滵滶滷滸滺",7,"漃漄漅漇漈漊",4,"æ¼æ¼‘æ¼’æ¼–",9,"漡漢漣漥漦漧漨漬漮漰漲漴漵漷",6,"漿潀æ½æ½‚"], +["9d80","潃潄潅潈潉潊潌潎",9,"潙潚潛æ½æ½Ÿæ½ æ½¡æ½£æ½¤æ½¥æ½§",5,"潯潰潱潳潵潶潷潹潻潽",6,"澅澆澇澊澋æ¾",12,"æ¾æ¾žæ¾Ÿæ¾ æ¾¢",4,"澨",10,"澴澵澷澸澺",5,"æ¿æ¿ƒ",5,"æ¿Š",6,"æ¿“",10,"濟濢濣濤濥"], +["9e40","濦",7,"æ¿°",32,"瀒",7,"瀜",6,"瀤",6], +["9e80","瀫",9,"瀶瀷瀸瀺",17,"ççŽç",13,"çŸ",11,"ç®ç±ç²ç³ç´ç·ç¹çºç»ç½ç‚炂炃炄炆炇炈炋炌ç‚ç‚ç‚炑炓炗炘炚炛炞",12,"炰炲炴炵炶為炾炿烄烅烆烇烉烋",12,"烚"], +["9f40","烜çƒçƒžçƒ çƒ¡çƒ¢çƒ£çƒ¥çƒªçƒ®çƒ°",6,"烸烺烻烼烾",10,"ç„‹",4,"焑焒焔焗焛",10,"焧",7,"焲焳焴"], +["9f80","焵焷",13,"煆煇煈煉煋ç…ç…",12,"ç…ç…Ÿ",4,"煥煩",4,"煯煰煱煴煵煶煷煹煻煼煾",5,"熅",4,"熋熌ç†ç†Žç†ç†‘熒熓熕熖熗熚",4,"熡",6,"熩熪熫熭",5,"熴熶熷熸熺",8,"燄",9,"ç‡",4], +["a040","燖",9,"燡燢燣燤燦燨",5,"燯",9,"燺",11,"爇",19], +["a080","爛爜爞",9,"爩爫爭爮爯爲爳爴爺爼爾牀",6,"牉牊牋牎ç‰ç‰ç‰‘牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅",4,"犌犎çŠçŠ‘犓",11,"犠",11,"犮犱犲犳犵犺",6,"狅狆狇狉狊狋狌ç‹ç‹‘狓狔狕狖狘狚狛"], +["a1a1"," ã€ã€‚·ˉˇ¨〃々—~‖…‘’“â€ã€”〕〈",7,"〖〗ã€ã€‘±×÷∶∧∨∑âˆâˆªâˆ©âˆˆâˆ·âˆšâŠ¥âˆ¥âˆ âŒ’⊙∫∮≡≌≈∽âˆâ‰ â‰®â‰¯â‰¤â‰¥âˆžâˆµâˆ´â™‚♀°′″℃$¤¢£‰§№☆★○â—◎◇◆□■△▲※→â†â†‘↓〓"], +["a2a1","â…°",9], +["a2b1","â’ˆ",19,"â‘´",19,"â‘ ",9], +["a2e5","㈠",9], +["a2f1","â… ",11], +["a3a1","ï¼ï¼‚#¥%",88,"ï¿£"], +["a4a1","ã",82], +["a5a1","ã‚¡",85], +["a6a1","Α",16,"Σ",6], +["a6c1","α",16,"σ",6], +["a6e0","︵︶︹︺︿﹀︽︾ï¹ï¹‚﹃﹄"], +["a6ee","︻︼︷︸︱"], +["a6f4","︳︴"], +["a7a1","Ð",5,"ÐЖ",25], +["a7d1","а",5,"ёж",25], +["a840","ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿â•",35,"â–",6], +["a880","â–ˆ",7,"▓▔▕▼▽◢◣◤◥☉⊕〒ã€ã€ž"], +["a8a1","ÄáǎàēéěèīíÇìÅóǒòūúǔùǖǘǚǜüêɑ"], +["a8bd","ńň"], +["a8c0","É¡"], +["a8c5","ã„…",36], +["a940","〡",8,"㊣㎎ãŽãŽœãŽãŽžãŽ¡ã„ãŽã‘ã’ã•ï¸°ï¿¢ï¿¤"], +["a959","℡㈱"], +["a95c","â€"], +["a960","ー゛゜ヽヾ〆ã‚ゞ﹉",9,"﹔﹕﹖﹗﹙",8], +["a980","ï¹¢",4,"﹨﹩﹪﹫"], +["a996","〇"], +["a9a4","─",75], +["aa40","ç‹œç‹ç‹Ÿç‹¢",5,"狪狫狵狶狹狽狾狿猀猂猄",5,"猋猌çŒçŒçŒçŒ‘猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽ç€",8], +["aa80","ç‰çŠç‹çŒçŽçç‘ç“ç”ç•ç–ç˜",7,"ç¡",10,"ç®ç°ç±"], +["ab40","ç²",11,"ç¿",4,"玅玆玈玊玌çŽçŽçŽçŽ’玓玔玕玗玘玙玚玜çŽçŽžçŽ çŽ¡çŽ£",5,"玪玬玭玱玴玵玶玸玹玼玽玾玿ççƒ",4], +["ab80","ç‹çŒçŽç’",6,"çšç›çœççŸç¡ç¢ç£ç¤ç¦ç¨çªç«ç¬ç®ç¯ç°ç±ç³",4], +["ac40","ç¸",10,"ç„ç‡çˆç‹çŒççŽç‘",8,"çœ",5,"ç£ç¤ç§ç©ç«ç­ç¯ç±ç²ç·",4,"ç½ç¾ç¿ç‘€ç‘‚",11], +["ac80","ç‘Ž",6,"瑖瑘ç‘ç‘ ",12,"瑮瑯瑱",4,"瑸瑹瑺"], +["ad40","瑻瑼瑽瑿璂璄璅璆璈璉璊璌ç’ç’ç’‘",10,"ç’ç’Ÿ",7,"ç’ª",15,"ç’»",12], +["ad80","瓈",9,"ç““",8,"ç“瓟瓡瓥瓧",6,"瓰瓱瓲"], +["ae40","瓳瓵瓸",6,"甀ç”甂甃甅",7,"甎ç”甒甔甕甖甗甛ç”甞甠",4,"甦甧甪甮甴甶甹甼甽甿ç•ç•‚畃畄畆畇畉畊ç•ç•ç•‘畒畓畕畖畗畘"], +["ae80","ç•",7,"畧畨畩畫",6,"畳畵當畷畺",4,"ç–€ç–ç–‚ç–„ç–…ç–‡"], +["af40","疈疉疊疌ç–ç–Žç–疓疕疘疛疜疞疢疦",4,"疭疶疷疺疻疿痀ç—痆痋痌痎ç—ç—痑痓痗痙痚痜ç—痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇"], +["af80","瘈瘉瘋ç˜ç˜Žç˜ç˜‘瘒瘓瘔瘖瘚瘜ç˜ç˜žç˜¡ç˜£ç˜§ç˜¨ç˜¬ç˜®ç˜¯ç˜±ç˜²ç˜¶ç˜·ç˜¹ç˜ºç˜»ç˜½ç™ç™‚癄"], +["b040","ç™…",6,"癎",5,"癕癗",4,"ç™ç™Ÿç™ ç™¡ç™¢ç™¤",6,"癬癭癮癰",7,"癹発發癿皀çšçšƒçš…皉皊皌çšçšçšçš’皔皕皗皘皚皛"], +["b080","çšœ",7,"皥",8,"皯皰皳皵",9,"盀ç›ç›ƒå•Šé˜¿åŸƒæŒ¨å“Žå”‰å“€çš‘癌蔼矮艾ç¢çˆ±éš˜éžæ°¨å®‰ä¿ºæŒ‰æš—岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭æŒæ‰’å­å§ç¬†å…«ç–¤å·´æ‹”è·‹é¶æŠŠè€™å霸罢爸白æŸç™¾æ‘†ä½°è´¥æ‹œç¨—æ–‘ç­æ¬æ‰³èˆ¬é¢æ¿ç‰ˆæ‰®æ‹Œä¼´ç“£åŠåŠžç»Šé‚¦å¸®æ¢†æ¦œè†€ç»‘棒磅蚌镑å‚谤苞胞包褒剥"], +["b140","盄盇盉盋盌盓盕盙盚盜ç›ç›žç› ",4,"盦",7,"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎",10,"眛眜çœçœžçœ¡çœ£çœ¤çœ¥çœ§çœªçœ«"], +["b180","眬眮眰",4,"眹眻眽眾眿ç‚ç„ç…ç†çˆ",7,"ç’",7,"çœè–„雹ä¿å ¡é¥±å®æŠ±æŠ¥æš´è±¹é²çˆ†æ¯ç¢‘悲å‘北辈背è´é’¡å€ç‹ˆå¤‡æƒ«ç„™è¢«å¥”苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖å¸åº‡ç—¹é—­æ•å¼Šå¿…辟å£è‡‚é¿é™›éž­è¾¹ç¼–è´¬æ‰ä¾¿å˜åžè¾¨è¾©è¾«é标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳"], +["b240","ççžçŸç ç¤ç§ç©çªç­",11,"çºç»ç¼çžçž‚瞃瞆",5,"çžçžçž“",11,"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶",4], +["b280","瞼瞾矀",12,"矎",8,"矘矙矚çŸ",4,"矤病并玻è æ’­æ‹¨é’µæ³¢åšå‹ƒæ铂箔伯帛舶脖膊渤泊驳æ•åœå“ºè¡¥åŸ ä¸å¸ƒæ­¥ç°¿éƒ¨æ€–擦猜è£ææ‰è´¢ç¬è¸©é‡‡å½©èœè”¡é¤å‚蚕残惭惨ç¿è‹èˆ±ä»“沧è—æ“糙槽曹è‰åŽ•ç­–侧册测层蹭æ’å‰èŒ¬èŒ¶æŸ¥ç¢´æ½å¯Ÿå²”差诧拆柴豺æ€æŽºè‰é¦‹è°—缠铲产é˜é¢¤æ˜ŒçŒ–"], +["b340","矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃",5,"ç Šç ‹ç Žç ç ç “砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿ç¡ç¡‚硃硄硆硈硉硊硋ç¡ç¡ç¡‘硓硔硘硙硚"], +["b380","硛硜硞",11,"硯",7,"硸硹硺硻硽",6,"场å°å¸¸é•¿å¿è‚ åŽ‚敞畅唱倡超抄钞æœå˜²æ½®å·¢åµç‚’车扯撤掣彻澈郴臣辰尘晨忱沉陈è¶è¡¬æ’‘称城橙æˆå‘ˆä¹˜ç¨‹æƒ©æ¾„诚承逞骋秤åƒç—´æŒåŒ™æ± è¿Ÿå¼›é©°è€»é½¿ä¾ˆå°ºèµ¤ç¿…斥炽充冲虫崇宠抽酬畴踌稠æ„筹仇绸瞅丑臭åˆå‡ºæ©±åŽ¨èº‡é”„é›æ»é™¤æ¥š"], +["b440","碄碅碆碈碊碋ç¢ç¢ç¢’碔碕碖碙ç¢ç¢žç¢ ç¢¢ç¢¤ç¢¦ç¢¨",7,"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌ç£ç£Žç£ç£‘磒磓磖磗磘磚",9], +["b480","磤磥磦磧磩磪磫磭",4,"磳磵磶磸磹磻",5,"礂礃礄礆",6,"础储矗æ触处æ£å·ç©¿æ¤½ä¼ èˆ¹å–˜ä¸²ç–®çª—幢床闯创å¹ç‚Šæ¶é”¤åž‚春椿醇唇淳纯蠢戳绰疵茨ç£é›Œè¾žæ…ˆç“·è¯æ­¤åˆºèµæ¬¡èªè‘±å›±åŒ†ä»Žä¸›å‡‘粗醋簇促蹿篡窜摧崔催脆ç˜ç²¹æ·¬ç¿ æ‘存寸磋撮æ“措挫错æ­è¾¾ç­”瘩打大呆歹傣戴带殆代贷袋待逮"], +["b540","ç¤",5,"礔",9,"礟",4,"礥",14,"礵",4,"礽礿祂祃祄祅祇祊",8,"祔祕祘祙祡祣"], +["b580","祤祦祩祪祫祬祮祰",6,"祹祻",4,"禂禃禆禇禈禉禋禌ç¦ç¦Žç¦ç¦‘禒怠耽担丹å•éƒ¸æŽ¸èƒ†æ—¦æ°®ä½†æƒ®æ·¡è¯žå¼¹è›‹å½“挡党è¡æ¡£åˆ€æ£è¹ˆå€’岛祷导到稻悼é“盗德得的蹬ç¯ç™»ç­‰çžªå‡³é‚“堤低滴迪敌笛狄涤翟嫡抵底地蒂第å¸å¼Ÿé€’缔颠掂滇碘点典é›åž«ç”µä½ƒç”¸åº—惦奠淀殿碉å¼é›•å‡‹åˆæŽ‰åŠé’“调跌爹碟è¶è¿­è°å "], +["b640","禓",6,"禛",11,"禨",10,"禴",4,"禼禿秂秄秅秇秈秊秌秎ç§ç§ç§“秔秖秗秙",5,"秠秡秢秥秨秪"], +["b680","秬秮秱",6,"秹秺秼秾秿ç¨ç¨„稅稇稈稉稊稌ç¨",4,"稕稖稘稙稛稜ä¸ç›¯å®é’‰é¡¶é¼Žé”­å®šè®¢ä¸¢ä¸œå†¬è‘£æ‡‚动栋侗æ«å†»æ´žå…œæŠ–斗陡豆逗痘都ç£æ¯’犊独读堵ç¹èµŒæœé•€è‚šåº¦æ¸¡å¦’端短锻段断缎堆兑队对墩å¨è¹²æ•¦é¡¿å›¤é’盾é掇哆多夺垛躲朵跺舵å‰æƒ°å •è›¾å³¨é¹…ä¿„é¢è®¹å¨¥æ¶åŽ„扼é鄂饿æ©è€Œå„¿è€³å°”饵洱二"], +["b740","ç¨ç¨Ÿç¨¡ç¨¢ç¨¤",14,"稴稵稶稸稺稾穀",5,"穇",9,"ç©’",4,"穘",16], +["b780","ç©©",6,"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎çªçªçª“窔窙窚窛窞窡窢贰å‘罚ç­ä¼ä¹é˜€æ³•ç藩帆番翻樊矾钒ç¹å‡¡çƒ¦å返范贩犯饭泛åŠèŠ³æ–¹è‚ªæˆ¿é˜²å¦¨ä»¿è®¿çººæ”¾è²éžå•¡é£žè‚¥åŒªè¯½å è‚ºåºŸæ²¸è´¹èŠ¬é…šå©æ°›åˆ†çº·åŸç„šæ±¾ç²‰å¥‹ä»½å¿¿æ„¤ç²ªä¸°å°æž«èœ‚峰锋风疯烽逢冯ç¼è®½å¥‰å‡¤ä½›å¦å¤«æ•·è‚¤å­µæ‰¶æ‹‚è¾å¹…氟符ä¼ä¿˜æœ"], +["b840","窣窤窧窩窪窫窮",4,"窴",10,"ç«€",10,"ç«Œ",9,"竗竘竚竛竜ç«ç«¡ç«¢ç«¤ç«§",5,"竮竰竱竲竳"], +["b880","ç«´",4,"竻竼竾笀ç¬ç¬‚笅笇笉笌ç¬ç¬Žç¬ç¬’笓笖笗笘笚笜ç¬ç¬Ÿç¬¡ç¬¢ç¬£ç¬§ç¬©ç¬­æµ®æ¶ªç¦è¢±å¼—甫抚辅俯釜斧脯腑府è…赴副覆赋å¤å‚…付阜父腹负富讣附妇缚å’噶嘎该改概钙盖溉干甘æ†æŸ‘ç«¿è‚赶感秆敢赣冈刚钢缸肛纲岗港æ ç¯™çš‹é«˜è†ç¾”糕æžé•ç¨¿å‘Šå“¥æ­Œæ戈鸽胳疙割é©è‘›æ ¼è›¤é˜éš”铬个å„给根跟耕更庚羹"], +["b940","笯笰笲笴笵笶笷笹笻笽笿",5,"筆筈筊ç­ç­Žç­“筕筗筙筜筞筟筡筣",10,"筯筰筳筴筶筸筺筼筽筿ç®ç®‚箃箄箆",6,"箎ç®"], +["b980","箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹",7,"篂篃範埂耿梗工攻功æ­é¾šä¾›èº¬å…¬å®«å¼“巩汞拱贡共钩勾沟苟狗垢构购够辜è‡å’•ç®ä¼°æ²½å­¤å§‘鼓å¤è›Šéª¨è°·è‚¡æ•…顾固雇刮瓜å‰å¯¡æŒ‚褂乖æ‹æ€ªæ£ºå…³å®˜å† è§‚管馆ç½æƒ¯çŒè´¯å…‰å¹¿é€›ç‘°è§„圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚æ£é”…郭国果裹过哈"], +["ba40","篅篈築篊篋ç¯ç¯Žç¯ç¯ç¯’篔",4,"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲",4,"篸篹篺篻篽篿",7,"簈簉簊ç°ç°Žç°",5,"簗簘簙"], +["ba80","ç°š",4,"ç° ",5,"簨簩簫",12,"ç°¹",5,"籂骸孩海氦亥害骇酣憨邯韩å«æ¶µå¯’函喊罕翰撼æ旱憾æ‚焊汗汉夯æ­èˆªå£•åšŽè±ªæ¯«éƒå¥½è€—å·æµ©å‘µå–è·è核禾和何åˆç›’貉阂河涸赫è¤é¹¤è´ºå˜¿é»‘痕很狠æ¨å“¼äº¨æ¨ªè¡¡æ’轰哄烘虹鸿洪å®å¼˜çº¢å–‰ä¾¯çŒ´å¼åŽšå€™åŽå‘¼ä¹Žå¿½ç‘šå£¶è‘«èƒ¡è´ç‹ç³Šæ¹–"], +["bb40","籃",9,"籎",36,"ç±µ",5,"ç±¾",9], +["bb80","粈粊",6,"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴",4,"粺粻弧虎唬护互沪户花哗åŽçŒ¾æ»‘画划化è¯æ§å¾Šæ€€æ·®å欢环桓还缓æ¢æ‚£å”¤ç—ªè±¢ç„•æ¶£å®¦å¹»è’慌黄磺è—簧皇凰惶煌晃幌æè°Žç°æŒ¥è¾‰å¾½æ¢è›”回æ¯æ‚”æ…§å‰æƒ æ™¦è´¿ç§½ä¼šçƒ©æ±‡è®³è¯²ç»˜è¤æ˜å©šé­‚浑混è±æ´»ä¼™ç«èŽ·æˆ–惑éœè´§ç¥¸å‡»åœ¾åŸºæœºç•¸ç¨½ç§¯ç®•"], +["bc40","粿糀糂糃糄糆糉糋糎",6,"糘糚糛ç³ç³žç³¡",6,"糩",5,"ç³°",7,"糹糺糼",13,"ç´‹",5], +["bc80","ç´‘",14,"紡紣紤紥紦紨紩紪紬紭紮細",6,"肌饥迹激讥鸡姬绩缉å‰æžæ£˜è¾‘ç±é›†åŠæ€¥ç–¾æ±²å³å«‰çº§æŒ¤å‡ è„Šå·±è“ŸæŠ€å†€å­£ä¼Žç¥­å‰‚悸济寄寂计记既忌际妓继纪嘉枷夹佳家加èšé¢Šè´¾ç”²é’¾å‡ç¨¼ä»·æž¶é©¾å«æ­¼ç›‘åšå°–笺间煎兼肩艰奸缄茧检柬碱硷拣æ¡ç®€ä¿­å‰ªå‡è槛鉴践贱è§é”®ç®­ä»¶"], +["bd40","ç´·",54,"絯",7], +["bd80","絸",32,"å¥èˆ°å‰‘饯æ¸æº…涧建僵姜将浆江疆蒋桨奖讲匠酱é™è•‰æ¤’ç¤ç„¦èƒ¶äº¤éƒŠæµ‡éª„娇嚼æ…铰矫侥脚狡角饺缴绞剿教酵轿较å«çª–æ­æŽ¥çš†ç§¸è¡—阶截劫节桔æ°æ·ç«ç«­æ´ç»“解å§æˆ’藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进é³æ™‹ç¦è¿‘烬浸"], +["be40","継",12,"綧",6,"綯",42], +["be80","ç·š",32,"尽劲è†å…¢èŒŽç›æ™¶é²¸äº¬æƒŠç²¾ç²³ç»äº•è­¦æ™¯é¢ˆé™å¢ƒæ•¬é•œå¾„ç—‰é–竟竞净炯窘æªç©¶çº çŽ–韭久ç¸ä¹é…’厩救旧臼舅咎就疚鞠拘狙疽居驹èŠå±€å’€çŸ©ä¸¾æ²®èšæ‹’æ®å·¨å…·è·è¸žé”¯ä¿±å¥æƒ§ç‚¬å‰§æ鹃娟倦眷å·ç»¢æ’…攫抉掘倔爵觉决诀ç»å‡èŒé’§å†›å›å³»"], +["bf40","ç·»",62], +["bf80","縺縼",4,"繂",4,"繈",21,"俊竣浚郡éªå–€å’–å¡å’¯å¼€æ©æ¥·å‡¯æ…¨åˆŠå ªå‹˜åŽç çœ‹åº·æ…·ç³ æ‰›æŠ—亢炕考拷烤é å·è‹›æŸ¯æ£µç£•é¢—科壳咳å¯æ¸´å…‹åˆ»å®¢è¯¾è‚¯å•ƒåž¦æ³å‘å­ç©ºæ孔控抠å£æ‰£å¯‡æž¯å“­çªŸè‹¦é…·åº“裤夸垮挎跨胯å—筷侩快宽款匡ç­ç‹‚框矿眶旷况äºç›”岿窥葵奎é­å‚€"], +["c040","繞",35,"纃",23,"纜çºçºž"], +["c080","纮纴纻纼绖绤绬绹缊ç¼ç¼žç¼·ç¼¹ç¼»",6,"罃罆",9,"罒罓馈愧溃å¤æ˜†æ†å›°æ‹¬æ‰©å»“阔垃拉喇蜡腊辣啦莱æ¥èµ–è“婪æ æ‹¦ç¯®é˜‘兰澜谰æ½è§ˆæ‡’缆烂滥ç…榔狼廊郎朗浪æžåŠ³ç‰¢è€ä½¬å§¥é…ªçƒ™æ¶å‹’ä¹é›·é•­è•¾ç£Šç´¯å„¡åž’擂肋类泪棱楞冷厘梨çŠé»Žç¯±ç‹¸ç¦»æ¼“ç†æŽé‡Œé²¤ç¤¼èŽ‰è”å栗丽厉励砾历利傈例ä¿"], +["c140","罖罙罛罜ç½ç½žç½ ç½£",4,"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂",7,"羋ç¾ç¾",4,"羕",4,"羛羜羠羢羣羥羦羨",6,"ç¾±"], +["c180","ç¾³",4,"羺羻羾翀翂翃翄翆翇翈翉翋ç¿ç¿",4,"ç¿–ç¿—ç¿™",5,"翢翣痢立粒沥隶力璃哩俩è”莲连镰廉怜涟帘敛脸链æ‹ç‚¼ç»ƒç²®å‡‰æ¢ç²±è‰¯ä¸¤è¾†é‡æ™¾äº®è°…æ’©èŠåƒšç–—燎寥辽潦了撂镣廖料列裂烈劣猎ç³æž—磷霖临邻鳞淋凛èµå拎玲è±é›¶é¾„铃伶羚凌çµé™µå²­é¢†å¦ä»¤æºœç‰æ¦´ç¡«é¦ç•™åˆ˜ç˜¤æµæŸ³å…­é¾™è‹å’™ç¬¼çª¿"], +["c240","翤翧翨翪翫翬翭翯翲翴",6,"翽翾翿耂耇耈耉耊耎è€è€‘耓耚耛è€è€žè€Ÿè€¡è€£è€¤è€«",5,"耲耴耹耺耼耾è€èè„è…è‡èˆè‰èŽèèè‘è“è•è–è—"], +["c280","è™è›",13,"è«",5,"è²",11,"隆垄拢陇楼娄æ‚篓æ¼é™‹èŠ¦å¢é¢…åºç‚‰æŽ³å¤è™é²éº“碌露路赂鹿潞禄录陆戮驴å•é“侣旅履屡缕虑氯律率滤绿峦挛孪滦åµä¹±æŽ ç•¥æŠ¡è½®ä¼¦ä»‘沦纶论è螺罗逻锣箩骡裸è½æ´›éª†ç»œå¦ˆéº»çŽ›ç èš‚马骂嘛å—埋买麦å–迈脉瞒馒蛮满蔓曼慢漫"], +["c340","è¾è‚肂肅肈肊è‚",5,"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇",4,"èƒ",6,"胘胟胠胢胣胦胮胵胷胹胻胾胿脀è„脃脄脅脇脈脋"], +["c380","脌脕脗脙脛脜è„è„Ÿ",12,"脭脮脰脳脴脵脷脹",4,"脿谩芒茫盲氓忙莽猫茅锚毛矛铆å¯èŒ‚冒帽貌贸么玫枚梅酶霉煤没眉媒é•æ¯ç¾Žæ˜§å¯å¦¹åªšé—¨é—·ä»¬èŒè’™æª¬ç›Ÿé”°çŒ›æ¢¦å­Ÿçœ¯é†šé¡ç³œè¿·è°œå¼¥ç±³ç§˜è§…泌蜜密幂棉眠绵冕å…勉娩缅é¢è‹—æçž„è—秒渺庙妙蔑ç­æ°‘抿皿æ•æ‚¯é—½æ˜ŽèžŸé¸£é“­å命谬摸"], +["c440","è…€",5,"腇腉è…è…Žè…腒腖腗腘腛",4,"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸è†è†ƒ",4,"膉膋膌è†è†Žè†è†’",5,"膙膚膞",4,"膤膥"], +["c480","膧膩膫",7,"膴",5,"膼膽膾膿臄臅臇臈臉臋è‡",6,"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟æŸæ‹‡ç‰¡äº©å§†æ¯å¢“暮幕募慕木目ç¦ç‰§ç©†æ‹¿å“ªå‘钠那娜纳氖乃奶è€å¥ˆå—男难囊挠脑æ¼é—¹æ·–å‘¢é¦å†…嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵æ»å¿µå¨˜é…¿é¸Ÿå°¿æè‚孽啮镊é•æ¶…您柠狞å‡å®"], +["c540","臔",14,"臤臥臦臨臩臫臮",4,"臵",5,"臽臿舃與",4,"舎èˆèˆ‘舓舕",5,"èˆèˆ èˆ¤èˆ¥èˆ¦èˆ§èˆ©èˆ®èˆ²èˆºèˆ¼èˆ½èˆ¿"], +["c580","艀è‰è‰‚艃艅艆艈艊艌è‰è‰Žè‰",7,"艙艛艜è‰è‰žè‰ ",7,"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖è™ç–ŸæŒªæ‡¦ç³¯è¯ºå“¦æ¬§é¸¥æ®´è—•å‘•å¶æ²¤å•ªè¶´çˆ¬å¸•æ€•ç¶æ‹æŽ’牌徘湃派攀潘盘ç£ç›¼ç•”判å›ä¹“庞æ—耪胖抛咆刨炮è¢è·‘泡呸胚培裴赔陪é…佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋é¹æ§ç¢°å¯ç ’霹批披劈çµæ¯—"], +["c640","艪艫艬艭艱艵艶艷艸艻艼芀èŠèŠƒèŠ…芆芇芉芌èŠèŠ“芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉è‹è‹–苙苚è‹è‹¢è‹§è‹¨è‹©è‹ªè‹¬è‹­è‹®è‹°è‹²è‹³è‹µè‹¶è‹¸"], +["c680","苺苼",4,"茊茋èŒèŒèŒ’茓茖茘茙èŒ",9,"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻å±è­¬ç¯‡å片骗飘漂瓢票撇瞥拼频贫å“è˜ä¹’åªè‹¹è平凭瓶评å±å¡æ³¼é¢‡å©†ç ´é­„迫粕剖扑铺仆莆葡è©è’²åŸ”朴圃普浦谱æ›ç€‘期欺栖戚妻七凄漆柒æ²å…¶æ£‹å¥‡æ­§ç•¦å´Žè„é½æ——祈ç¥éª‘起岂乞ä¼å¯å¥‘砌器气迄弃汽泣讫æŽ"], +["c740","茾茿èè‚è„è…èˆèŠ",4,"è“è•",4,"èè¢è°",6,"è¹èºè¾",6,"莇莈莊莋莌èŽèŽèŽèŽ‘莔莕莖莗莙莚èŽèŽŸèŽ¡",6,"莬莭莮"], +["c780","莯莵莻莾莿è‚èƒè„è†èˆè‰è‹èèŽèè‘è’è“è•è—è™èšè›èžè¢è£è¤è¦è§è¨è«è¬è­æ°æ´½ç‰µæ‰¦é’Žé“…åƒè¿ç­¾ä»Ÿè°¦ä¹¾é»”钱钳å‰æ½œé£æµ…谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭ä¿çªåˆ‡èŒ„且怯窃钦侵亲秦ç´å‹¤èŠ¹æ“’禽å¯æ²é’轻氢倾å¿æ¸…擎晴氰情顷请庆ç¼ç©·ç§‹ä¸˜é‚±çƒæ±‚囚酋泅趋区蛆曲躯屈驱渠"], +["c840","è®è¯è³",4,"èºè»è¼è¾è¿è€è‚è…è‡èˆè‰èŠèè’",5,"è™èšè›èž",5,"è©",7,"è²",5,"è¹èºè»è¾",7,"葇葈葉"], +["c880","è‘Š",6,"è‘’",4,"葘è‘葞葟葠葢葤",4,"葪葮葯葰葲葴葷葹葻葼å–娶龋趣去圈颧æƒé†›æ³‰å…¨ç—Šæ‹³çŠ¬åˆ¸åŠç¼ºç‚”瘸å´é¹Šæ¦·ç¡®é›€è£™ç¾¤ç„¶ç‡ƒå†‰æŸ“瓤壤攘嚷让饶扰绕惹热壬ä»äººå¿éŸ§ä»»è®¤åˆƒå¦Šçº«æ‰”ä»æ—¥æˆŽèŒ¸è“‰è£èžç†”溶容绒冗æ‰æŸ”肉茹蠕儒孺如辱乳æ±å…¥è¤¥è½¯é˜®è•Šç‘žé”闰润若弱撒洒è¨è…®é³ƒå¡žèµ›ä¸‰å"], +["c940","葽",4,"蒃蒄蒅蒆蒊è’è’",7,"蒘蒚蒛è’è’žè’Ÿè’ è’¢",12,"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎è“蓒蓔蓕蓗"], +["c980","蓘",4,"蓞蓡蓢蓤蓧",4,"蓭蓮蓯蓱",10,"蓽蓾蔀è”蔂伞散桑嗓丧æ”骚扫嫂瑟色涩森僧莎砂æ€åˆ¹æ²™çº±å‚»å•¥ç…žç­›æ™’çŠè‹«æ‰å±±åˆ ç…½è¡«é—ªé™•æ“…赡膳善汕扇缮墒伤商èµæ™Œä¸Šå°šè£³æ¢¢æŽç¨çƒ§èŠå‹ºéŸ¶å°‘哨邵ç»å¥¢èµŠè›‡èˆŒèˆèµ¦æ‘„射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲å‡ç»³"], +["ca40","蔃",8,"è”蔎è”è”蔒蔔蔕蔖蔘蔙蔛蔜è”蔞蔠蔢",8,"è”­",9,"蔾",4,"蕄蕅蕆蕇蕋",10], +["ca80","蕗蕘蕚蕛蕜è•è•Ÿ",4,"蕥蕦蕧蕩",8,"蕳蕵蕶蕷蕸蕼蕽蕿薀è–çœç››å‰©èƒœåœ£å¸ˆå¤±ç‹®æ–½æ¹¿è¯—尸虱å石拾时什食蚀实识å²çŸ¢ä½¿å±Žé©¶å§‹å¼ç¤ºå£«ä¸–柿事拭誓é€åŠ¿æ˜¯å—œå™¬é€‚仕ä¾é‡Šé¥°æ°å¸‚æƒå®¤è§†è¯•æ”¶æ‰‹é¦–守寿授售å—瘦兽蔬枢梳殊抒输å”舒淑ç–书赎孰熟薯暑曙署蜀é»é¼ å±žæœ¯è¿°æ ‘æŸæˆç«–墅庶数漱"], +["cb40","薂薃薆薈",6,"è–",10,"è–",6,"薥薦薧薩薫薬薭薱",5,"薸薺",6,"è—‚",6,"è—Š",4,"è—‘è—’"], +["cb80","藔藖",5,"è—",6,"藥藦藧藨藪",14,"æ•åˆ·è€æ‘”衰甩帅栓拴霜åŒçˆ½è°æ°´ç¡ç¨Žå®çž¬é¡ºèˆœè¯´ç¡•æœ”çƒæ–¯æ’•å˜¶æ€ç§å¸ä¸æ­»è‚†å¯ºå—£å››ä¼ºä¼¼é¥²å·³æ¾è€¸æ€‚颂é€å®‹è®¼è¯µæœè‰˜æ“žå—½è‹é…¥ä¿—素速粟僳塑溯宿诉肃酸蒜算虽隋éšç»¥é«“碎å²ç©—é‚隧祟孙æŸç¬‹è“‘梭唆缩çç´¢é”所塌他它她塔"], +["cc40","藹藺藼藽藾蘀",4,"蘆",10,"蘒蘓蘔蘕蘗",15,"蘨蘪",13,"蘹蘺蘻蘽蘾蘿虀"], +["cc80","è™",11,"虒虓處",4,"虛虜è™è™Ÿè™ è™¡è™£",7,"ç­æŒžè¹‹è¸èƒŽè‹”抬å°æ³°é…žå¤ªæ€æ±°å摊贪瘫滩å›æª€ç—°æ½­è°­è°ˆå¦æ¯¯è¢’碳探å¹ç‚­æ±¤å¡˜æªå ‚棠膛å”糖倘躺淌趟烫æŽæ¶›æ»”绦è„桃逃淘陶讨套特藤腾疼誊梯剔踢锑æ题蹄啼体替åšæƒ•æ¶•å‰ƒå±‰å¤©æ·»å¡«ç”°ç”œæ¬èˆ”腆挑æ¡è¿¢çœºè·³è´´é“帖厅å¬çƒƒ"], +["cd40","虭虯虰虲",6,"蚃",6,"蚎",4,"蚔蚖",5,"èšž",4,"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻",4,"è›è›‚蛃蛅蛈蛌è›è›’蛓蛕蛖蛗蛚蛜"], +["cd80","è›è› è›¡è›¢è›£è›¥è›¦è›§è›¨è›ªè›«è›¬è›¯è›µè›¶è›·è›ºè›»è›¼è›½è›¿èœèœ„蜅蜆蜋蜌蜎èœèœèœ‘蜔蜖汀廷åœäº­åº­æŒºè‰‡é€šæ¡é…®çž³åŒé“œå½¤ç«¥æ¡¶æ…筒统痛å·æŠ•å¤´é€å‡¸ç§ƒçªå›¾å¾’途涂屠土åå…”æ¹å›¢æŽ¨é¢“腿蜕褪退åžå±¯è‡€æ‹–托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄å¨"], +["ce40","蜙蜛èœèœŸèœ èœ¤èœ¦èœ§èœ¨èœªèœ«èœ¬èœ­èœ¯èœ°èœ²èœ³èœµèœ¶èœ¸èœ¹èœºèœ¼èœ½è€",6,"èŠè‹èèèè‘è’è”è•è–è˜èš",5,"è¡è¢è¦",7,"è¯è±è²è³èµ"], +["ce80","è·è¸è¹èºè¿èž€èžèž„螆螇螉螊螌螎",4,"螔螕螖螘",6,"èž ",4,"å·å¾®å±éŸ¦è¿æ¡…围唯惟为æ½ç»´è‹‡èŽå§”伟伪尾纬未蔚味ç•èƒƒå–‚é­ä½æ¸­è°“尉慰å«ç˜Ÿæ¸©èšŠæ–‡é—»çº¹å»ç¨³ç´Šé—®å—¡ç¿ç“®æŒèœ—涡çªæˆ‘æ–¡å§æ¡æ²ƒå·«å‘œé’¨ä¹Œæ±¡è¯¬å±‹æ— èŠœæ¢§å¾å´æ¯‹æ­¦äº”æ‚åˆèˆžä¼ä¾®åžæˆŠé›¾æ™¤ç‰©å‹¿åŠ¡æ‚Ÿè¯¯æ˜”熙æžè¥¿ç¡’矽晰嘻å¸é”¡ç‰º"], +["cf40","螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿èŸ",4,"蟇蟈蟉蟌",4,"蟔",6,"蟜èŸèŸžèŸŸèŸ¡èŸ¢èŸ£èŸ¤èŸ¦èŸ§èŸ¨èŸ©èŸ«èŸ¬èŸ­èŸ¯",9], +["cf80","蟺蟻蟼蟽蟿蠀è è ‚è „",5,"è ‹",7,"蠔蠗蠘蠙蠚蠜",4,"蠣稀æ¯å¸Œæ‚‰è†å¤•æƒœç†„烯溪æ±çŠ€æª„袭席习媳喜铣洗系隙æˆç»†çžŽè™¾åŒ£éœžè¾–暇峡侠狭下厦å¤å“掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷é™çº¿ç›¸åŽ¢é•¶é¦™ç®±è¥„湘乡翔祥详想å“享项巷橡åƒå‘象è§ç¡éœ„削哮嚣销消宵淆晓"], +["d040","è ¤",13,"è ³",5,"蠺蠻蠽蠾蠿è¡è¡‚衃衆",5,"è¡Ž",5,"衕衖衘衚",6,"衦衧衪衭衯衱衳衴衵衶衸衹衺"], +["d080","衻衼袀袃袆袇袉袊袌袎è¢è¢è¢‘袓袔袕袗",4,"è¢",4,"袣袥",5,"å°å­æ ¡è‚–啸笑效楔些歇èŽéž‹å挟æºé‚ªæ–œèƒè°å†™æ¢°å¸èŸ¹æ‡ˆæ³„泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸æ性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须å¾è®¸è“„é…—å™æ—­åºç•œæ¤çµ®å©¿ç»ªç»­è½©å–§å®£æ‚¬æ—‹çŽ„"], +["d140","袬袮袯袰袲",4,"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌è£è£è£è£‘裓裖裗裚",4,"裠裡裦裧裩",6,"裲裵裶裷裺裻製裿褀è¤è¤ƒ",5], +["d180","褉褋",4,"褑褔",4,"褜",4,"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚é´è–›å­¦ç©´é›ªè¡€å‹‹ç†å¾ªæ—¬è¯¢å¯»é©¯å·¡æ®‰æ±›è®­è®¯é€Šè¿…压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹ç›ä¸¥ç ”蜒岩延言颜阎炎沿奄掩眼è¡æ¼”艳堰燕厌砚é›å”彦焰宴谚验殃央鸯秧æ¨æ‰¬ä½¯ç–¡ç¾Šæ´‹é˜³æ°§ä»°ç—’养样漾邀腰妖瑶"], +["d240","褸",8,"襂襃襅",24,"襠",5,"襧",19,"襼"], +["d280","襽襾覀覂覄覅覇",26,"摇尧é¥çª‘谣姚咬舀è¯è¦è€€æ¤°å™Žè€¶çˆ·é‡Žå†¶ä¹Ÿé¡µæŽ–业å¶æ›³è…‹å¤œæ¶²ä¸€å£¹åŒ»æ–铱ä¾ä¼Šè¡£é¢å¤·é—移仪胰疑沂宜姨å½æ¤…èšå€šå·²ä¹™çŸ£ä»¥è‰ºæŠ‘易邑屹亿役臆逸肄疫亦裔æ„毅忆义益溢诣议谊译异翼翌绎茵è«å› æ®·éŸ³é˜´å§»åŸé“¶æ·«å¯…饮尹引éš"], +["d340","覢",30,"觃è§è§“觔觕觗觘觙觛è§è§Ÿè§ è§¡è§¢è§¤è§§è§¨è§©è§ªè§¬è§­è§®è§°è§±è§²è§´",6], +["d380","觻",4,"è¨",5,"計",21,"å°è‹±æ¨±å©´é¹°åº”缨莹è¤è¥è§è‡è¿Žèµ¢ç›ˆå½±é¢–硬映哟拥佣臃痈庸é›è¸Šè›¹å’泳涌永æ¿å‹‡ç”¨å¹½ä¼˜æ‚ å¿§å°¤ç”±é‚®é“€çŠ¹æ²¹æ¸¸é…‰æœ‰å‹å³ä½‘釉诱åˆå¹¼è¿‚淤于盂榆虞愚舆余俞逾鱼愉æ¸æ¸”隅予娱雨与屿禹宇语羽玉域芋éƒåé‡å–»å³ªå¾¡æ„ˆæ¬²ç‹±è‚²èª‰"], +["d440","訞",31,"訿",8,"詉",21], +["d480","è©Ÿ",25,"詺",6,"浴寓裕预豫驭鸳渊冤元垣è¢åŽŸæ´è¾•å›­å‘˜åœ†çŒ¿æºç¼˜è¿œè‹‘愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨å…è¿è•´é…晕韵孕åŒç ¸æ‚栽哉ç¾å®°è½½å†åœ¨å’±æ”’暂赞赃è„葬é­ç³Ÿå‡¿è—»æž£æ—©æ¾¡èš¤èºå™ªé€ çš‚ç¶ç‡¥è´£æ‹©åˆ™æ³½è´¼æ€Žå¢žæ†Žæ›¾èµ æ‰Žå–³æ¸£æœ­è½§"], +["d540","èª",7,"誋",7,"誔",46], +["d580","諃",32,"铡闸眨栅榨咋ä¹ç‚¸è¯ˆæ‘˜æ–‹å®…窄债寨瞻毡詹粘沾ç›æ–©è¾—崭展蘸栈å æˆ˜ç«™æ¹›ç»½æ¨Ÿç« å½°æ¼³å¼ æŽŒæ¶¨æ–丈å¸è´¦ä»—胀瘴障招昭找沼赵照罩兆肇å¬é®æŠ˜å“²è›°è¾™è€…锗蔗这浙ç斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣çå¾ç‹°äº‰æ€”整拯正政"], +["d640","諤",34,"謈",27], +["d680","謤謥謧",30,"帧症郑è¯èŠæžæ”¯å±èœ˜çŸ¥è‚¢è„‚æ±ä¹‹ç»‡èŒç›´æ¤æ®–执值侄å€æŒ‡æ­¢è¶¾åªæ—¨çº¸å¿—挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终ç§è‚¿é‡ä»²ä¼—舟周州洲诌粥轴肘帚咒皱宙昼骤ç æ ªè››æœ±çŒªè¯¸è¯›é€ç«¹çƒ›ç…®æ‹„瞩嘱主著柱助蛀贮铸筑"], +["d740","è­†",31,"è­§",4,"è­­",25], +["d780","讇",24,"讬讱讻诇è¯è¯ªè°‰è°žä½æ³¨ç¥é©»æŠ“爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘å ç¼€è°†å‡†æ‰æ‹™å“æ¡Œç¢èŒé…Œå•„ç€ç¼æµŠå…¹å’¨èµ„姿滋淄孜紫仔籽滓å­è‡ªæ¸å­—鬃棕踪宗综总纵邹走å¥æ租足å’æ—祖诅阻组钻纂嘴醉最罪尊éµæ˜¨å·¦ä½æŸžåšä½œå座"], +["d840","è°¸",8,"豂豃豄豅豈豊豋è±",7,"豖豗豘豙豛",5,"è±£",6,"豬",6,"豴豵豶豷豻",6,"貃貄貆貇"], +["d880","貈貋è²",6,"貕貖貗貙",20,"äºä¸Œå…€ä¸å»¿å…丕亘丞鬲孬噩丨禺丿匕乇夭爻å®æ°å›Ÿèƒ¤é¦—毓ç¾é¼—丶亟é¼ä¹œä¹©äº“芈孛啬å˜ä»„åŽåŽåŽ£åŽ¥åŽ®é¥èµåŒšåµåŒ¦åŒ®åŒ¾èµœå¦å£åˆ‚刈刎刭刳刿剀剌剞剡剜蒯剽劂åŠåŠåŠ“冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚ä½"], +["d940","è²®",62], +["d980","è³­",32,"佟佗伲伽佶佴侑侉侃ä¾ä½¾ä½»ä¾ªä½¼ä¾¬ä¾”俦俨俪俅俚俣俜俑俟俸倩åŒä¿³å€¬å€å€®å€­ä¿¾å€œå€Œå€¥å€¨å¾åƒå•åˆåŽå¬å»å‚¥å‚§å‚©å‚ºåƒ–儆僭僬僦僮儇儋ä»æ°½ä½˜ä½¥ä¿Žé¾ æ±†ç±´å…®å·½é»‰é¦˜å†å¤”勹åŒè¨‡åŒå‡«å¤™å…•äº å…–亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼"], +["da40","è´Ž",14,"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸",8,"趂趃趆趇趈趉趌",4,"趒趓趕",9,"趠趡"], +["da80","趢趤",12,"趲趶趷趹趻趽跀è·è·‚跅跇跈跉跊è·è·è·’跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋è¯è¯Žè¯’诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌è°è°‘谒谔谕谖谙谛谘è°è°Ÿè° è°¡è°¥è°§è°ªè°«è°®è°¯è°²è°³è°µè°¶å©åºé˜é˜¢é˜¡é˜±é˜ªé˜½é˜¼é™‚陉陔陟陧陬陲陴隈éšéš—éš°é‚—é‚›é‚邙邬邡邴邳邶邺"], +["db40","跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾",6,"踆踇踈踋è¸è¸Žè¸è¸‘踒踓踕",7,"踠踡踤",4,"踫踭踰踲踳踴踶踷踸踻踼踾"], +["db80","踿蹃蹅蹆蹌",4,"蹓",5,"蹚",11,"蹧蹨蹪蹫蹮蹱邸邰éƒéƒ…邾éƒéƒ„郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆åˆå¥‚劢劬劭劾哿å‹å‹–å‹°åŸç‡®çŸå»´å‡µå‡¼é¬¯åŽ¶å¼ç•šå·¯åŒåž©åž¡å¡¾å¢¼å£…壑圩圬圪圳圹圮圯åœåœ»å‚å©åž…å«åž†å¼å»å¨å­å¶å³åž­åž¤åžŒåž²åŸåž§åž´åž“垠埕埘埚埙埒垸埴埯埸埤åŸ"], +["dc40","蹳蹵蹷",4,"蹽蹾躀躂躃躄躆躈",6,"躑躒躓躕",6,"èºèºŸ",11,"躭躮躰躱躳",6,"躻",7], +["dc80","軃",10,"è»",21,"å ‹å åŸ½åŸ­å €å žå ™å¡„堠塥塬å¢å¢‰å¢šå¢€é¦¨é¼™æ‡¿è‰¹è‰½è‰¿èŠèŠŠèŠ¨èŠ„芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌è‹èŠ©èŠ´èŠ¡èŠªèŠŸè‹„苎芤苡茉苷苤èŒèŒ‡è‹œè‹´è‹’苘茌苻苓茑茚茆茔茕苠苕茜è‘è›èœèŒˆèŽ’茼茴茱莛èžèŒ¯èè‡èƒèŸè€èŒ—è èŒ­èŒºèŒ³è¦è¥"], +["dd40","軥",62], +["dd80","輤",32,"è¨èŒ›è©è¬èªè­è®èŽ°è¸èŽ³èŽ´èŽ èŽªèŽ“莜莅è¼èŽ¶èŽ©è½èŽ¸è»èŽ˜èŽžèŽ¨èŽºèŽ¼èèè¥è˜å ‡è˜è‹èè½è–èœè¸è‘è†è”èŸèèƒè¸è¹èªè…è€è¦è°è¡è‘œè‘‘葚葙葳蒇蒈葺蒉葸è¼è‘†è‘©è‘¶è’Œè’Žè±è‘­è“è“è“蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌ç”蔸蓰蔹蔟蔺"], +["de40","è½…",32,"轪辀辌辒è¾è¾ è¾¡è¾¢è¾¤è¾¥è¾¦è¾§è¾ªè¾¬è¾­è¾®è¾¯è¾²è¾³è¾´è¾µè¾·è¾¸è¾ºè¾»è¾¼è¾¿è¿€è¿ƒè¿†"], +["de80","迉",4,"è¿è¿’迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇è–蕹薮薜薅薹薷薰藓è—藜藿蘧蘅蘩蘖蘼廾弈夼å¥è€·å¥•å¥šå¥˜åŒå°¢å°¥å°¬å°´æ‰Œæ‰ªæŠŸæŠ»æ‹Šæ‹šæ‹—拮挢拶挹æ‹æƒæŽ­æ¶æ±æºæŽŽæŽ´æ­æŽ¬æŽŠæ©æŽ®æŽ¼æ²æ¸æ æ¿æ„æžæŽæ‘’æ†æŽ¾æ‘…æ‘æ‹æ›æ æŒæ¦æ¡æ‘žæ’„æ‘­æ’–"], +["df40","這逜連逤逥逧",5,"逰",4,"逷逹逺逽逿é€éƒé…é†éˆ",4,"éŽé”é•é–é™éšéœ",5,"é¤é¦é§é©éªé«é¬é¯",4,"é¶",6,"é¾é‚"], +["df80","還邅邆邇邉邊邌",4,"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀æ“擗擤擢攉攥攮弋忒甙弑åŸå±å½å©å¨å»å’å–å†å‘‹å‘’呓呔呖呃å¡å‘—å‘™å£å²å’‚咔呷呱呤咚咛咄呶呦å’å“咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤å“å“哞唛哧唠哽唔哳唢唣å”唑唧唪啧å–喵啉啭å•å••å”¿å•å”¼"], +["e040","郂郃郆郈郉郋郌éƒéƒ’郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀é„鄃鄅",19,"鄚鄛鄜"], +["e080","é„鄟鄠鄡鄤",10,"鄰鄲",6,"鄺",8,"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈å–喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦å—嗄嗯嗥嗲嗳嗌å—嗨嗵嗤辔嘞嘈嘌å˜å˜¤å˜£å—¾å˜€å˜§å˜­å™˜å˜¹å™—嘬å™å™¢å™™å™œå™Œå™”嚆噤噱噫噻噼嚅嚓嚯囔囗å›å›¡å›µå›«å›¹å›¿åœ„圊圉圜å¸å¸™å¸”帑帱帻帼"], +["e140","酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀",4,"醆醈醊醎é†é†“",6,"醜",5,"醤",5,"醫醬醰醱醲醳醶醷醸醹醻"], +["e180","醼",10,"釈釋é‡é‡’",9,"é‡",8,"帷幄幔幛幞幡岌屺å²å²å²–岈岘岙岑岚岜岵岢岽岬岫岱岣å³å²·å³„峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯åµåµ«åµ‹åµŠåµ©åµ´å¶‚嶙å¶è±³å¶·å·…彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃ç‹ç‹Žç‹ç‹’狨狯狩狲狴狷çŒç‹³çŒƒç‹º"], +["e240","釦",62], +["e280","鈥",32,"狻猗猓猡猊猞çŒçŒ•çŒ¢çŒ¹çŒ¥çŒ¬çŒ¸çŒ±ççç—ç ç¬ç¯ç¾èˆ›å¤¥é£§å¤¤å¤‚饣饧",5,"饴饷饽馀馄馇馊é¦é¦é¦‘馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖å¿æ€ƒå¿®æ€„忡忤忾怅怆忪忭忸怙怵怦怛æ€æ€æ€©æ€«æ€Šæ€¿æ€¡æ¸æ¹æ»æºæ‚"], +["e340","鉆",45,"鉵",16], +["e380","銆",7,"éŠ",24,"æªæ½æ‚–æ‚šæ‚­æ‚悃悒悌悛惬悻悱æƒæƒ˜æƒ†æƒšæ‚´æ„ æ„¦æ„•æ„£æƒ´æ„€æ„Žæ„«æ…Šæ…µæ†¬æ†”憧憷懔懵å¿éš³é—©é—«é—±é—³é—µé—¶é—¼é—¾é˜ƒé˜„阆阈阊阋阌é˜é˜é˜’阕阖阗阙阚丬爿戕氵汔汜汊沣沅æ²æ²”沌汨汩汴汶沆沩æ³æ³”沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾"], +["e440","銨",5,"銯",24,"鋉",31], +["e480","é‹©",32,"洹洧洌浃浈洇洄洙洎洫æµæ´®æ´µæ´šæµæµ’浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦æ·æ·™æ¸–涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴æ»æºæ»‚溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉æ¾æ¾Œæ½¸æ½²æ½¼æ½ºæ¿‘"], +["e540","錊",51,"錿",10], +["e580","éŠ",31,"é«æ¿‰æ¾§æ¾¹æ¾¶æ¿‚濡濮濞濠濯瀚瀣瀛瀹瀵ççžå®€å®„宕宓宥宸甯骞æ´å¯¤å¯®è¤°å¯°è¹‡è¬‡è¾¶è¿“迕迥迮迤迩迦迳迨逅逄逋逦逑é€é€–逡逵逶逭逯é„é‘é’éé¨é˜é¢é›æš¹é´é½é‚‚邈邃邋å½å½—彖彘尻咫å±å±™å­±å±£å±¦ç¾¼å¼ªå¼©å¼­è‰´å¼¼é¬»å±®å¦å¦ƒå¦å¦©å¦ªå¦£"], +["e640","é¬",34,"éŽ",27], +["e680","鎬",29,"é‹éŒé妗姊妫妞妤姒妲妯姗妾娅娆å§å¨ˆå§£å§˜å§¹å¨Œå¨‰å¨²å¨´å¨‘娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀éªéª…骈骊éªéª’骓骖骘骛骜éªéªŸéª éª¢éª£éª¥éª§çºŸçº¡çº£çº¥çº¨çº©"], +["e740","éŽ",7,"é—",54], +["e780","éŽ",32,"纭纰纾绀ç»ç»‚绉绋绌ç»ç»”绗绛绠绡绨绫绮绯绱绲ç¼ç»¶ç»ºç»»ç»¾ç¼ç¼‚缃缇缈缋缌ç¼ç¼‘缒缗缙缜缛缟缡",6,"缪缫缬缭缯",4,"缵幺畿巛甾邕玎玑玮玢玟çç‚ç‘玷玳ç€ç‰çˆç¥ç™é¡¼çŠç©ç§çžçŽºç²ççªç‘›ç¦ç¥ç¨ç°ç®ç¬"], +["e840","é¯",14,"é¿",43,"鑬鑭鑮鑯"], +["e880","é‘°",20,"钑钖钘铇é“铓铔铚铦铻锜锠ç›çšç‘瑜瑗瑕瑙瑷瑭瑾璜璎璀ç’璇璋璞璨璩ç’璧瓒璺韪韫韬æŒæ“æžæˆæ©æž¥æž‡æªæ³æž˜æž§æµæž¨æžžæž­æž‹æ·æ¼æŸ°æ ‰æŸ˜æ ŠæŸ©æž°æ ŒæŸ™æžµæŸšæž³æŸæ €æŸƒæž¸æŸ¢æ ŽæŸæŸ½æ ²æ ³æ¡ æ¡¡æ¡Žæ¡¢æ¡„桤梃æ æ¡•æ¡¦æ¡æ¡§æ¡€æ ¾æ¡Šæ¡‰æ ©æ¢µæ¢æ¡´æ¡·æ¢“桫棂楮棼椟椠棹"], +["e940","锧锳锽镃镈镋镕镚镠镮镴镵長",7,"é–€",42], +["e980","é–«",32,"椤棰椋æ¤æ¥—棣æ¤æ¥±æ¤¹æ¥ æ¥‚æ¥æ¦„楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱æ§æ§Šæ§Ÿæ¦•æ§ æ¦æ§¿æ¨¯æ§­æ¨—樘橥槲橄樾檠æ©æ©›æ¨µæªŽæ©¹æ¨½æ¨¨æ©˜æ©¼æª‘æªæª©æª—檫猷ç’æ®æ®‚殇殄殒殓æ®æ®šæ®›æ®¡æ®ªè½«è½­è½±è½²è½³è½µè½¶è½¸è½·è½¹è½ºè½¼è½¾è¾è¾‚辄辇辋"], +["ea40","é—Œ",27,"闬闿阇阓阘阛阞阠阣",6,"阫阬阭阯阰阷阸阹阺阾é™é™ƒé™Šé™Žé™é™‘陒陓陖陗"], +["ea80","陘陙陚陜é™é™žé™ é™£é™¥é™¦é™«é™­",4,"陳陸",12,"隇隉隊è¾è¾Žè¾è¾˜è¾šè»Žæˆ‹æˆ—戛戟戢戡戥戤戬臧瓯瓴瓿ç”甑甓攴旮旯旰昊昙æ²æ˜ƒæ˜•æ˜€ç‚…æ›·æ˜æ˜´æ˜±æ˜¶æ˜µè€†æ™Ÿæ™”æ™æ™æ™–晡晗晷暄暌暧æšæš¾æ››æ›œæ›¦æ›©è´²è´³è´¶è´»è´½èµ€èµ…赆赈赉赇èµèµ•èµ™è§‡è§Šè§‹è§Œè§Žè§è§è§‘牮犟ç‰ç‰¦ç‰¯ç‰¾ç‰¿çŠ„犋çŠçŠçŠ’挈挲掰"], +["eb40","隌階隑隒隓隕隖隚際éš",9,"隨",7,"隱隲隴隵隷隸隺隻隿雂雃雈雊雋é›é›‘雓雔雖",9,"雡",6,"雫"], +["eb80","雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌éœéœ‘霒霔霕霗",4,"éœéœŸéœ æ¿æ“˜è€„毪毳毽毵毹氅氇氆æ°æ°•æ°˜æ°™æ°šæ°¡æ°©æ°¤æ°ªæ°²æ”µæ••æ•«ç‰ç‰’牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙èƒèƒ—æœèƒèƒ«èƒ±èƒ´èƒ­è„脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧å¡åªµè†ˆè†‚膑滕膣膪臌朦臊膻"], +["ec40","霡",8,"霫霬霮霯霱霳",4,"霺霻霼霽霿",18,"é”é•é—é˜éšéœééŸé£é¤é¦é§é¨éª",7], +["ec80","é²éµé·",4,"é½",7,"鞆",4,"鞌鞎éžéžéž“éž•éž–éž—éž™",4,"è‡è†¦æ¬¤æ¬·æ¬¹æ­ƒæ­†æ­™é£‘飒飓飕飙飚殳彀毂觳æ–齑斓於旆旄旃旌旎旒旖炀炜炖ç‚炻烀炷炫炱烨烊ç„焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹çˆçˆ¨ç¬ç„˜ç…¦ç†¹æˆ¾æˆ½æ‰ƒæ‰ˆæ‰‰ç¤»ç¥€ç¥†ç¥‰ç¥›ç¥œç¥“祚祢祗祠祯祧祺禅禊禚禧禳忑å¿"], +["ed40","鞞鞟鞡鞢鞤",6,"鞬鞮鞰鞱鞳鞵",46], +["ed80","韤韥韨韮",4,"韴韷",23,"怼ææšæ§ææ™æ£æ‚«æ„†æ„æ…憩æ†æ‡‹æ‡‘戆肀è¿æ²“泶淼矶矸砀砉砗砘砑斫砭砜ç ç ¹ç ºç »ç Ÿç ¼ç ¥ç ¬ç £ç ©ç¡Žç¡­ç¡–ç¡—ç ¦ç¡ç¡‡ç¡Œç¡ªç¢›ç¢“碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄çœç›¹çœ‡çœˆçœšçœ¢çœ™çœ­çœ¦çœµçœ¸çç‘ç‡çƒçšç¨"], +["ee40","é ",62], +["ee80","é¡Ž",32,"ç¢ç¥ç¿çžç½çž€çžŒçž‘瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹ç¾ç½¾ç›ç›¥è ²é’…钆钇钋钊钌é’é’é’钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶",4,"钼钽钿铄铈",6,"é“铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪"], +["ef40","顯",5,"颋颎颒颕颙颣風",37,"é£é£é£”飖飗飛飜é£é£ ",4], +["ef80","飥飦飩",30,"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊é”锎é”é”’",4,"锘锛é”锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎é•é•’镓镔镖镗镘镙镛镞镟é•é•¡é•¢é•¤",8,"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔"], +["f040","餈",4,"餎é¤é¤‘",28,"餯",26], +["f080","饊",9,"饖",12,"饤饦饳饸饹饻饾馂馃馉稹稷穑é»é¦¥ç©°çšˆçšŽçš“皙皤瓞瓠甬鸠鸢鸨",4,"鸲鸱鸶鸸鸷鸹鸺鸾é¹é¹‚鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦",6,"鹱鹭鹳疒疔疖疠ç–疬疣疳疴疸痄疱疰痃痂痖ç—痣痨痦痤痫痧瘃痱痼痿ç˜ç˜€ç˜…瘌瘗瘊瘥瘘瘕瘙"], +["f140","馌馎馚",10,"馦馧馩",47], +["f180","駙",32,"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳ç™ç™žç™”癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶è¥è¥¦è¥»ç–‹èƒ¥çš²çš´çŸœè€’耔耖耜耠耢耥耦耧耩耨耱耋耵èƒè†èè’è©è±è¦ƒé¡¸é¢€é¢ƒ"], +["f240","駺",62], +["f280","騹",32,"颉颌é¢é¢é¢”颚颛颞颟颡颢颥颦è™è™”虬虮虿虺虼虻蚨èšèš‹èš¬èšèš§èš£èšªèš“蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉è›èš´è›©è›±è›²è›­è›³è›èœ“蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊èœèœ‰èœ£èœ»èœžèœ¥èœ®èœšèœ¾èˆèœ´èœ±èœ©èœ·èœ¿èž‚蜢è½è¾è»è è°èŒè®èž‹è“è£è¼è¤è™è¥èž“螯螨蟒"], +["f340","é©š",17,"驲骃骉éªéªŽéª”骕骙骦骩",6,"骲骳骴骵骹骻骽骾骿髃髄髆",4,"é«é«Žé«é«é«’體髕髖髗髙髚髛髜"], +["f380","é«é«žé« é«¢é«£é«¤é«¥é«§é«¨é«©é«ªé«¬é«®é«°",8,"髺髼",6,"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅èˆç«ºç«½ç¬ˆç¬ƒç¬„笕笊笫ç¬ç­‡ç¬¸ç¬ªç¬™ç¬®ç¬±ç¬ ç¬¥ç¬¤ç¬³ç¬¾ç¬žç­˜ç­šç­…筵筌ç­ç­ ç­®ç­»ç­¢ç­²ç­±ç®ç®¦ç®§ç®¸ç®¬ç®ç®¨ç®…箪箜箢箫箴篑ç¯ç¯Œç¯ç¯šç¯¥ç¯¦ç¯ªç°Œç¯¾ç¯¼ç°ç°–ç°‹"], +["f440","鬇鬉",5,"é¬é¬‘鬒鬔",10,"鬠鬡鬢鬤",10,"鬰鬱鬳",7,"鬽鬾鬿魀魆魊魋魌魎é­é­’é­“é­•",5], +["f480","é­›",32,"簟簪簦簸ç±ç±€è‡¾èˆèˆ‚舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋è‰è‰šè‰Ÿè‰¨è¡¾è¢…袈裘裟襞ç¾ç¾Ÿç¾§ç¾¯ç¾°ç¾²ç±¼æ•‰ç²‘ç²ç²œç²žç²¢ç²²ç²¼ç²½ç³ç³‡ç³Œç³ç³ˆç³…糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊é…é…Žé…é…¤"], +["f540","é­¼",62], +["f580","é®»",32,"酢酡酰酩酯酽酾酲酴酹醌醅é†é†é†‘醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎è·è·›è·†è·¬è··è·¸è·£è·¹è·»è·¤è¸‰è·½è¸”è¸è¸Ÿè¸¬è¸®è¸£è¸¯è¸ºè¹€è¸¹è¸µè¸½è¸±è¹‰è¹è¹‚蹑蹒蹊蹰蹶蹼蹯蹴躅èºèº”èºèºœèºžè±¸è²‚貊貅貘貔斛觖觞觚觜"], +["f640","鯜",62], +["f680","é°›",32,"觥觫觯訾謦é“雩雳雯霆éœéœˆéœéœŽéœªéœ­éœ°éœ¾é¾€é¾ƒé¾…",5,"龌黾鼋é¼éš¹éš¼éš½é›Žé›’瞿雠銎銮鋈錾éªéŠéŽé¾é‘«é±¿é²‚鲅鲆鲇鲈稣鲋鲎é²é²‘鲒鲔鲕鲚鲛鲞",5,"é²¥",4,"鲫鲭鲮鲰",7,"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋"], +["f740","é°¼",62], +["f780","鱻鱽鱾鲀鲃鲄鲉鲊鲌é²é²“鲖鲗鲘鲙é²é²ªé²¬é²¯é²¹é²¾",4,"鳈鳉鳑鳒鳚鳛鳠鳡鳌",4,"鳓鳔鳕鳗鳘鳙鳜é³é³Ÿé³¢é¼éž…鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼é«é«€é«…髂髋髌髑魅魃魇魉魈é­é­‘飨é¤é¤®é¥•é¥”髟髡髦髯髫髻髭髹鬈é¬é¬“鬟鬣麽麾縻麂麇麈麋麒é–éºéºŸé»›é»œé»é» é»Ÿé»¢é»©é»§é»¥é»ªé»¯é¼¢é¼¬é¼¯é¼¹é¼·é¼½é¼¾é½„"], +["f840","é³£",62], +["f880","é´¢",32], +["f940","鵃",62], +["f980","鶂",32], +["fa40","鶣",62], +["fa80","é·¢",32], +["fb40","鸃",27,"鸤鸧鸮鸰鸴鸻鸼鹀é¹é¹é¹’鹓鹔鹖鹙é¹é¹Ÿé¹ é¹¡é¹¢é¹¥é¹®é¹¯é¹²é¹´",9,"麀"], +["fb80","éºéºƒéº„麅麆麉麊麌",5,"麔",8,"麞麠",5,"麧麨麩麪"], +["fc40","麫",8,"麵麶麷麹麺麼麿",4,"黅黆黇黈黊黋黌é»é»’黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰",8,"黺黽黿",6], +["fc80","鼆",4,"鼌é¼é¼‘鼒鼔鼕鼖鼘鼚",5,"鼡鼣",8,"鼭鼮鼰鼱"], +["fd40","é¼²",4,"鼸鼺鼼鼿",4,"é½…",10,"é½’",38], +["fd80","é½¹",5,"é¾é¾‚é¾",11,"龜é¾é¾žé¾¡",4,"郎凉秊裏隣"], +["fe40","兀ï¨ï¨Žï¨ï¨‘﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"] +] diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp949.json b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp949.json new file mode 100755 index 0000000..2022a00 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp949.json @@ -0,0 +1,273 @@ +[ +["0","\u0000",127], +["8141","갂갃갅갆갋",4,"갘갞갟갡갢갣갥",6,"갮갲갳갴"], +["8161","갵갶갷갺갻갽갾갿ê±",9,"걌걎",5,"걕"], +["8181","걖걗걙걚걛ê±",18,"걲걳걵걶걹걻",4,"겂겇겈ê²ê²Žê²ê²‘겒겓겕",6,"겞겢",5,"겫겭겮겱",6,"겺겾겿곀곂곃곅곆곇곉곊곋ê³",7,"곖곘",7,"곢곣곥곦곩곫곭곮곲곴곷",4,"곾곿ê´ê´‚괃괅괇",4,"ê´Žê´ê´’ê´“"], +["8241","괔괕괖괗괙괚괛ê´ê´žê´Ÿê´¡",7,"괪괫괮",5], +["8261","괶괷괹괺괻괽",6,"굆굈굊",5,"굑굒굓굕굖굗"], +["8281","êµ™",7,"굢굤",7,"굮굯굱굲굷굸굹굺굾궀궃",4,"궊궋ê¶ê¶Žê¶ê¶‘",10,"궞",5,"궥",17,"궸",7,"귂귃귅귆귇귉",6,"ê·’ê·”",7,"ê·ê·žê·Ÿê·¡ê·¢ê·£ê·¥",18], +["8341","귺귻귽귾긂",5,"긊긌긎",5,"긕",7], +["8361","ê¸",18,"긲긳긵긶긹긻긼"], +["8381","긽긾긿깂깄깇깈깉깋ê¹ê¹‘깒깓깕깗",4,"깞깢깣깤깦깧깪깫깭깮깯깱",6,"깺깾",5,"꺆",5,"êº",46,"꺿ê»ê»‚껃껅",6,"껎껒",5,"껚껛ê»",8], +["8441","껦껧껩껪껬껮",5,"껵껶껷껹껺껻껽",8], +["8461","꼆꼉꼊꼋꼌꼎ê¼ê¼‘",18], +["8481","꼤",7,"꼮꼯꼱꼳꼵",6,"꼾꽀꽄꽅꽆꽇꽊",5,"꽑",10,"꽞",5,"꽦",18,"꽺",5,"ê¾ê¾‚꾃꾅꾆꾇꾉",6,"꾒꾓꾔꾖",5,"ê¾",26,"꾺꾻꾽꾾"], +["8541","꾿ê¿",5,"ê¿Šê¿Œê¿",4,"ê¿•",6,"ê¿",4], +["8561","ê¿¢",5,"꿪",5,"꿲꿳꿵꿶꿷꿹",6,"뀂뀃"], +["8581","뀅",6,"ë€ë€Žë€ë€‘뀒뀓뀕",6,"뀞",9,"뀩",26,"ë†ë‡ë‰ë‹ëëëë‘ë’ë–ë˜ëšë›ëœëž",29,"ë¾ë¿ë‚낂낃낅",6,"ë‚Žë‚ë‚’",5,"ë‚›ë‚낞낣낤"], +["8641","낥낦낧낪낰낲낶낷낹낺낻낽",6,"냆냊",5,"냒"], +["8661","냓냕냖냗냙",6,"냡냢냣냤냦",10], +["8681","냱",22,"ë„Šë„ë„Žë„넑넔넕넖넗넚넞",4,"넦넧넩넪넫넭",6,"넶넺",5,"녂녃녅녆녇녉",6,"녒녓녖녗녙녚녛ë…ë…žë…Ÿë…¡",22,"녺녻녽녾녿ë†ë†ƒ",4,"놊놌놎ë†ë†ë†‘놕놖놗놙놚놛ë†"], +["8741","놞",9,"놩",15], +["8761","놹",18,"ë‡ë‡Žë‡ë‡‘뇒뇓뇕"], +["8781","뇖",5,"뇞뇠",7,"뇪뇫뇭뇮뇯뇱",7,"뇺뇼뇾",5,"눆눇눉눊ëˆ",6,"눖눘눚",5,"눡",18,"눵",6,"눽",26,"뉙뉚뉛ë‰ë‰žë‰Ÿë‰¡",6,"뉪",4], +["8841","뉯",4,"뉶",5,"뉽",6,"늆늇늈늊",4], +["8861","ëŠëŠ’늓늕늖늗늛",4,"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷"], +["8881","늸",15,"ë‹Šë‹‹ë‹ë‹Žë‹ë‹‘ë‹“",4,"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉",6,"댒댖",5,"ëŒ",54,"ë—ë™ëšëë ë¡ë¢ë£"], +["8941","ë¦ë¨ëªë¬ë­ë¯ë²ë³ëµë¶ë·ë¹",6,"뎂뎆",5,"ëŽ"], +["8961","뎎ëŽëŽ‘뎒뎓뎕",10,"뎢",5,"뎩뎪뎫뎭"], +["8981","뎮",21,"ë†ë‡ë‰ëŠëëë‘ë’ë“ë–ë˜ëšëœëžëŸë¡ë¢ë£ë¥ë¦ë§ë©",18,"ë½",18,"ë‘",6,"ë™ëšë›ëëžëŸë¡",6,"ëªë¬",7,"ëµ",15], +["8a41","ë‘…",10,"ë‘’ë‘“ë‘•ë‘–ë‘—ë‘™",6,"둢둤둦"], +["8a61","둧",4,"ë‘­",18,"ë’ë’‚"], +["8a81","ë’ƒ",4,"ë’‰",19,"ë’ž",5,"뒥뒦뒧뒩뒪뒫뒭",7,"뒶뒸뒺",5,"ë“듂듃듅듆듇듉",6,"듑듒듓듔듖",5,"듞듟듡듢듥듧",4,"듮듰듲",5,"듹",26,"딖딗딙딚ë”"], +["8b41","딞",5,"딦딫",4,"딲딳딵딶딷딹",6,"땂땆"], +["8b61","땇땈땉땊땎ë•ë•‘ë•’ë•“ë••",6,"ë•žë•¢",8], +["8b81","ë•«",52,"떢떣떥떦떧떩떬떭떮떯떲떶",4,"떾떿ë—뗂뗃뗅",6,"ë—Žë—’",5,"ë—™",18,"ë—­",18], +["8c41","똀",15,"똒똓똕똖똗똙",4], +["8c61","똞",6,"똦",5,"똭",6,"똵",5], +["8c81","똻",12,"뙉",26,"뙥뙦뙧뙩",50,"뚞뚟뚡뚢뚣뚥",5,"뚭뚮뚯뚰뚲",16], +["8d41","뛃",16,"뛕",8], +["8d61","뛞",17,"뛱뛲뛳뛵뛶뛷뛹뛺"], +["8d81","ë›»",4,"뜂뜃뜄뜆",33,"뜪뜫뜭뜮뜱",6,"뜺뜼",7,"ë…ë†ë‡ë‰ëŠë‹ë",6,"ë–",9,"ë¡ë¢ë£ë¥ë¦ë§ë©",6,"ë²ë´ë¶",5,"ë¾ë¿ëžëž‚랃랅",6,"랎랓랔랕랚랛ëžëžž"], +["8e41","랟랡",6,"랪랮",5,"랶랷랹",8], +["8e61","럂",4,"럈럊",19], +["8e81","럞",13,"럮럯럱럲럳럵",6,"럾렂",4,"ë Šë ‹ë ë Žë ë ‘",6,"렚렜렞",5,"렦렧렩렪렫렭",6,"렶렺",5,"ë¡ë¡‚롃롅",11,"ë¡’ë¡”",7,"롞롟롡롢롣롥",6,"롮롰롲",5,"롹롺롻롽",7], +["8f41","뢅",7,"뢎",17], +["8f61","뢠",7,"뢩",6,"뢱뢲뢳뢵뢶뢷뢹",4], +["8f81","뢾뢿룂룄룆",5,"ë£ë£Žë£ë£‘룒룓룕",7,"룞룠룢",5,"룪룫룭룮룯룱",6,"룺룼룾",5,"뤅",18,"뤙",6,"뤡",26,"뤾뤿ë¥ë¥‚륃륅",6,"ë¥ë¥Žë¥ë¥’",5], +["9041","륚륛ë¥ë¥žë¥Ÿë¥¡",6,"륪륬륮",5,"륶륷륹륺륻륽"], +["9061","륾",5,"릆릈릋릌ë¦",15], +["9081","릟",12,"릮릯릱릲릳릵",6,"릾맀맂",5,"맊맋ë§ë§“",4,"맚맜맟맠맢맦맧맩맪맫맭",6,"맶맻",4,"먂",5,"먉",11,"먖",33,"먺먻먽먾먿ë©ë©ƒë©„멅멆"], +["9141","멇멊멌ë©ë©ë©‘멒멖멗멙멚멛ë©",6,"멦멪",5], +["9161","멲멳멵멶멷멹",9,"몆몈몉몊몋ëª",5], +["9181","몓",20,"몪몭몮몯몱몳",4,"몺몼몾",5,"뫅뫆뫇뫉",14,"ë«š",33,"뫽뫾뫿ë¬ë¬‚묃묅",7,"묎ë¬ë¬’",5,"묙묚묛ë¬ë¬žë¬Ÿë¬¡",6], +["9241","묨묪묬",7,"묷묹묺묿",4,"뭆뭈뭊뭋뭌뭎뭑뭒"], +["9261","ë­“ë­•ë­–ë­—ë­™",7,"뭢뭤",7,"ë­­",4], +["9281","ë­²",21,"뮉뮊뮋ë®ë®Žë®ë®‘",18,"뮥뮦뮧뮩뮪뮫뮭",6,"뮵뮶뮸",7,"ë¯ë¯‚믃믅믆믇믉",6,"믑믒믔",35,"믺믻믽믾ë°"], +["9341","ë°ƒ",4,"ë°Šë°Žë°ë°’밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵"], +["9361","밶밷밹",6,"뱂뱆뱇뱈뱊뱋뱎ë±ë±‘",8], +["9381","뱚뱛뱜뱞",37,"벆벇벉벊ë²ë²",4,"벖벘벛",4,"벢벣벥벦벩",6,"벲벶",5,"벾벿ë³ë³‚볃볅",7,"볎볒볓볔볖볗볙볚볛ë³",22,"볷볹볺볻볽"], +["9441","ë³¾",5,"봆봈봊",5,"ë´‘ë´’ë´“ë´•",8], +["9461","ë´ž",5,"ë´¥",6,"ë´­",12], +["9481","ë´º",5,"ëµ",6,"뵊뵋ëµëµŽëµëµ‘",6,"뵚",9,"뵥뵦뵧뵩",22,"붂붃붅붆붋",4,"붒붔붖붗붘붛ë¶",6,"붥",10,"붱",6,"붹",24], +["9541","뷒뷓뷖뷗뷙뷚뷛ë·",11,"ë·ª",5,"ë·±"], +["9561","뷲뷳뷵뷶뷷뷹",6,"ë¸ë¸‚븄븆",5,"븎ë¸ë¸‘븒븓"], +["9581","븕",6,"븞븠",35,"빆빇빉빊빋ë¹ë¹",4,"빖빘빜ë¹ë¹žë¹Ÿë¹¢ë¹£ë¹¥ë¹¦ë¹§ë¹©ë¹«",4,"빲빶",4,"빾빿ëºëº‚뺃뺅",6,"뺎뺒",5,"뺚",13,"뺩",14], +["9641","뺸",23,"뻒뻓"], +["9661","뻕뻖뻙",6,"뻡뻢뻦",5,"ë»­",8], +["9681","뻶",10,"뼂",5,"뼊",13,"뼚뼞",33,"뽂뽃뽅뽆뽇뽉",6,"뽒뽓뽔뽖",44], +["9741","뾃",16,"뾕",8], +["9761","뾞",17,"ë¾±",7], +["9781","ë¾¹",11,"뿆",5,"ë¿Žë¿ë¿‘ë¿’ë¿“ë¿•",6,"ë¿ë¿žë¿ ë¿¢",89,"쀽쀾쀿"], +["9841","ì€",16,"ì’",5,"ì™ìšì›"], +["9861","ììžìŸì¡",6,"ìª",15], +["9881","ìº",21,"ì‚’ì‚“ì‚•ì‚–ì‚—ì‚™",6,"삢삤삦",5,"삮삱삲삷",4,"삾샂샃샄샆샇샊샋ìƒìƒŽìƒìƒ‘",6,"샚샞",5,"샦샧샩샪샫샭",6,"샶샸샺",5,"ì„섂섃섅섆섇섉",6,"섑섒섓섔섖",5,"섡섢섥섨섩섪섫섮"], +["9941","섲섳섴섵섷섺섻섽섾섿ì…",6,"ì…Šì…Ž",5,"ì…–ì…—"], +["9961","셙셚셛ì…",6,"셦셪",5,"셱셲셳셵셶셷셹셺셻"], +["9981","ì…¼",8,"솆",5,"ì†ì†‘솒솓솕솗",4,"솞솠솢솣솤솦솧솪솫솭솮솯솱",11,"솾",5,"쇅쇆쇇쇉쇊쇋ì‡",6,"쇕쇖쇙",6,"쇡쇢쇣쇥쇦쇧쇩",6,"쇲쇴",7,"쇾쇿ìˆìˆ‚숃숅",6,"숎ìˆìˆ’",5,"숚숛ìˆìˆžìˆ¡ìˆ¢ìˆ£"], +["9a41","숤숥숦숧숪숬숮숰숳숵",16], +["9a61","쉆쉇쉉",6,"쉒쉓쉕쉖쉗쉙",6,"쉡쉢쉣쉤쉦"], +["9a81","쉧",4,"쉮쉯쉱쉲쉳쉵",6,"쉾슀슂",5,"슊",5,"슑",6,"슙슚슜슞",5,"슦슧슩슪슫슮",5,"슶슸슺",33,"싞싟싡싢싥",5,"싮싰싲싳싴싵싷싺싽싾싿ìŒ",6,"쌊쌋쌎ìŒ"], +["9b41","ìŒìŒ‘쌒쌖쌗쌙쌚쌛ìŒ",6,"쌦쌧쌪",8], +["9b61","쌳",17,"ì†",7], +["9b81","ìŽ",25,"ìªì«ì­ì®ì¯ì±ì³",4,"ìºì»ì¾",5,"쎅쎆쎇쎉쎊쎋ìŽ",50,"ì",22,"ìš"], +["9c41","ì›ììžì¡ì£",4,"ìªì«ì¬ì®",5,"ì¶ì·ì¹",5], +["9c61","ì¿",8,"ì‰",6,"ì‘",9], +["9c81","ì›",8,"ì¥",6,"ì­ì®ì¯ì±ì²ì³ìµ",6,"ì¾",9,"쑉",26,"쑦쑧쑩쑪쑫쑭",6,"쑶쑷쑸쑺",5,"ì’",18,"ì’•",6,"ì’",12], +["9d41","ì’ª",13,"쒹쒺쒻쒽",8], +["9d61","쓆",25], +["9d81","ì“ ",8,"쓪",5,"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂",9,"ì”씎ì”씑씒씓씕",6,"ì”",10,"씪씫씭씮씯씱",6,"씺씼씾",5,"앆앇앋ì•ì•ì•‘앒앖앚앛앜앟앢앣앥앦앧앩",6,"앲앶",5,"앾앿ì–얂얃얅얆얈얉얊얋얎ì–ì–’ì–“ì–”"], +["9e41","얖얙얚얛ì–ì–žì–Ÿì–¡",7,"ì–ª",9,"ì–¶"], +["9e61","얷얺얿",4,"ì—‹ì—ì—ì—’ì—“ì—•ì—–ì——ì—™",6,"엢엤엦엧"], +["9e81","엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋ì˜ì˜Žì˜ì˜‘",6,"옚ì˜",6,"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉",6,"ì™’ì™–",5,"왞왟왡",10,"왭왮왰왲",5,"왺왻왽왾왿ìš",6,"욊욌욎",5,"욖욗욙욚욛ìš",6,"욦"], +["9f41","욨욪",5,"욲욳욵욶욷욻",4,"웂웄웆",5,"웎"], +["9f61","ì›ì›‘웒웓웕",6,"웞웟웢",5,"웪웫웭웮웯웱웲"], +["9f81","웳",4,"웺웻웼웾",5,"윆윇윉윊윋ìœ",6,"윖윘윚",5,"윢윣윥윦윧윩",6,"윲윴윶윸윹윺윻윾윿ìì‚ìƒì…",4,"ì‹ìŽìì™ìšì›ììžìŸì¡",6,"ì©ìªì¬",7,"ì¶ì·ì¹ìºì»ì¿ìž€ìžìž‚잆잋잌ìžìžìž’잓잕잙잛",4,"잢잧",4,"잮잯잱잲잳잵잶잷"], +["a041","잸잹잺잻잾쟂",5,"쟊쟋ìŸìŸìŸ‘",6,"쟙쟚쟛쟜"], +["a061","쟞",5,"쟥쟦쟧쟩쟪쟫쟭",13], +["a081","쟻",4,"젂젃젅젆젇젉젋",4,"젒젔젗",4,"젞젟젡젢젣젥",6,"젮젰젲",5,"젹젺젻젽젾젿ì¡",6,"ì¡Šì¡‹ì¡Ž",5,"ì¡•",26,"졲졳졵졶졷졹졻",4,"좂좄좈좉좊좎",5,"좕",7,"좞좠좢좣좤"], +["a141","좥좦좧좩",18,"좾좿죀ì£"], +["a161","죂죃죅죆죇죉죊죋ì£",6,"죖죘죚",5,"죢죣죥"], +["a181","죦",14,"죶",5,"죾죿ì¤ì¤‚줃줇",4,"줎 ã€ã€‚·‥…¨〃­―∥\∼‘’“â€ã€”〕〈",9,"±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○â—◎◇◆□■△▲▽▼→â†â†‘↓↔〓≪≫√∽âˆâˆµâˆ«âˆ¬âˆˆâˆ‹âŠ†âŠ‡âŠ‚⊃∪∩∧∨¬"], +["a241","ì¤ì¤’",5,"줙",18], +["a261","줭",6,"줵",18], +["a281","쥈",7,"쥒쥓쥕쥖쥗쥙",6,"쥢쥤",7,"쥭쥮쥯⇒⇔∀∃´~ˇ˘Ë˚˙¸˛¡¿Ë∮∑âˆÂ¤â„‰â€°â—◀▷▶♤♠♡♥♧♣⊙◈▣â—◑▒▤▥▨▧▦▩♨â˜â˜Žâ˜œâ˜žÂ¶â€ â€¡â†•â†—↙↖↘♭♩♪♬㉿㈜№ã‡â„¢ã‚ã˜â„¡â‚¬Â®"], +["a341","쥱쥲쥳쥵",6,"쥽",10,"즊즋ì¦ì¦Žì¦"], +["a361","즑",6,"즚즜즞",16], +["a381","즯",16,"짂짃짅짆짉짋",4,"짒짔짗짘짛ï¼",58,"₩]",32,"ï¿£"], +["a441","짞짟짡짣짥짦짨짩짪짫짮짲",5,"짺짻짽짾짿ì¨ì¨‚쨃쨄"], +["a461","쨅쨆쨇쨊쨎",5,"쨕쨖쨗쨙",12], +["a481","쨦쨧쨨쨪",28,"ㄱ",93], +["a541","쩇",4,"ì©Žì©ì©‘ì©’ì©“ì©•",6,"ì©žì©¢",5,"쩩쩪"], +["a561","ì©«",17,"쩾",5,"쪅쪆"], +["a581","쪇",16,"쪙",14,"â…°",9], +["a5b0","â… ",9], +["a5c1","Α",16,"Σ",6], +["a5e1","α",16,"σ",6], +["a641","쪨",19,"쪾쪿ì«ì«‚쫃쫅"], +["a661","쫆",5,"ì«Žì«ì«’쫔쫕쫖쫗쫚",5,"ì«¡",6], +["a681","쫨쫩쫪쫫쫭",6,"쫵",18,"쬉쬊─│┌â”┘└├┬┤┴┼â”┃â”┓┛┗┣┳┫┻╋┠┯┨┷┿â”┰┥┸╂┒┑┚┙┖┕┎â”┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀â•â•ƒ",7], +["a741","쬋",4,"쬑쬒쬓쬕쬖쬗쬙",6,"쬢",7], +["a761","쬪",22,"쭂쭃쭄"], +["a781","쭅쭆쭇쭊쭋ì­ì­Žì­ì­‘",6,"쭚쭛쭜쭞",5,"ì­¥",7,"㎕㎖㎗ℓ㎘ã„㎣㎤㎥㎦㎙",9,"ãŠãŽãŽŽãŽã㎈㎉ãˆãŽ§ãŽ¨ãŽ°",9,"㎀",4,"㎺",5,"ãŽ",4,"Ωã€ã㎊㎋㎌ã–ã…㎭㎮㎯ã›ãŽ©ãŽªãŽ«ãŽ¬ããã“ãƒã‰ãœã†"], +["a841","ì­­",10,"ì­º",14], +["a861","쮉",18,"ì®",6], +["a881","쮤",19,"쮹",11,"ÆêĦ"], +["a8a6","IJ"], +["a8a8","Ä¿ÅØŒºÞŦŊ"], +["a8b1","㉠",27,"â“",25,"â‘ ",14,"½⅓⅔¼¾⅛⅜â…â…ž"], +["a941","쯅",14,"쯕",10], +["a961","쯠쯡쯢쯣쯥쯦쯨쯪",18], +["a981","쯽",14,"ì°Žì°ì°‘ì°’ì°“ì°•",6,"찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀",27,"â’œ",25,"â‘´",14,"¹²³â´â¿â‚₂₃₄"], +["aa41","찥찦찪찫찭찯찱",6,"찺찿",4,"챆챇챉챊챋ì±ì±Ž"], +["aa61","ì±",4,"챖챚",5,"챡챢챣챥챧챩",6,"챱챲"], +["aa81","챳챴챶",29,"ã",82], +["ab41","첔첕첖첗첚첛ì²ì²žì²Ÿì²¡",6,"첪첮",5,"첶첷첹"], +["ab61","첺첻첽",6,"쳆쳈쳊",5,"쳑쳒쳓쳕",5], +["ab81","ì³›",8,"ì³¥",6,"쳭쳮쳯쳱",12,"ã‚¡",85], +["ac41","쳾쳿촀촂",5,"ì´Šì´‹ì´ì´Žì´ì´‘",6,"촚촜촞촟촠"], +["ac61","촡촢촣촥촦촧촩촪촫촭",11,"ì´º",4], +["ac81","ì´¿",28,"ìµìµžìµŸÐ",5,"ÐЖ",25], +["acd1","а",5,"ёж",25], +["ad41","쵡쵢쵣쵥",6,"쵮쵰쵲",5,"ìµ¹",7], +["ad61","ì¶",6,"춉",10,"춖춗춙춚춛ì¶ì¶žì¶Ÿ"], +["ad81","춠춡춢춣춦춨춪",5,"춱",18,"ì·…"], +["ae41","ì·†",5,"ì·ì·Žì·ì·‘",16], +["ae61","ì·¢",5,"췩췪췫췭췮췯췱",6,"췺췼췾",4], +["ae81","츃츅츆츇츉츊츋ì¸",6,"츕츖츗츘츚",5,"츢츣츥츦츧츩츪츫"], +["af41","츬츭츮츯츲츴츶",19], +["af61","칊",13,"칚칛ì¹ì¹žì¹¢",5,"칪칬"], +["af81","ì¹®",5,"칶칷칹칺칻칽",6,"캆캈캊",5,"캒캓캕캖캗캙"], +["b041","캚",5,"캢캦",5,"캮",12], +["b061","캻",5,"컂",19], +["b081","ì»–",13,"컦컧컩컪컭",6,"컶컺",5,"ê°€ê°ê°„갇갈갉갊ê°",7,"ê°™",4,"갠갤갬갭갯갰갱갸갹갼걀걋ê±ê±”걘걜거걱건걷걸걺검ê²ê²ƒê²„겅겆겉겊겋게ê²ê²”겜ê²ê²Ÿê² ê²¡ê²¨ê²©ê²ªê²¬ê²¯ê²°ê²¸ê²¹ê²»ê²¼ê²½ê³ê³„곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆"], +["b141","켂켃켅켆켇켉",6,"켒켔켖",5,"ì¼ì¼žì¼Ÿì¼¡ì¼¢ì¼£"], +["b161","ì¼¥",6,"켮켲",5,"ì¼¹",11], +["b181","ì½…",14,"콖콗콙콚콛ì½",6,"콦콨콪콫콬괌ê´ê´ê´‘괘괜괠괩괬괭괴괵괸괼굄굅굇굉êµêµ”굘굡굣구국군굳굴굵굶굻굼굽굿ê¶ê¶‚궈궉권ê¶ê¶œê¶ê¶¤ê¶·ê·€ê·ê·„ê·ˆê·ê·‘귓규균귤그극근귿글ê¸ê¸ˆê¸‰ê¸‹ê¸ê¸”기긱긴긷길긺김ê¹ê¹ƒê¹…깆깊까ê¹ê¹Žê¹ê¹”깖깜ê¹ê¹Ÿê¹ ê¹¡ê¹¥ê¹¨ê¹©ê¹¬ê¹°ê¹¸"], +["b241","콭콮콯콲콳콵콶콷콹",6,"ì¾ì¾‚쾃쾄쾆",5,"ì¾"], +["b261","쾎",18,"ì¾¢",5,"쾩"], +["b281","쾪",5,"ì¾±",18,"ì¿…",6,"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌ê»ê»ê»ê»‘께껙껜껨껫껭껴껸껼꼇꼈ê¼ê¼ê¼¬ê¼­ê¼°ê¼²ê¼´ê¼¼ê¼½ê¼¿ê½ê½‚꽃꽈꽉ê½ê½œê½ê½¤ê½¥ê½¹ê¾€ê¾„꾈ê¾ê¾‘꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋ê¿ê¿Žê¿”꿜꿨꿩꿰꿱꿴꿸뀀ë€ë€„뀌ë€ë€”뀜ë€ë€¨ë„ë…ëˆëŠëŒëŽë“ë”ë•ë—ë™"], +["b341","ì¿Œ",19,"쿢쿣쿥쿦쿧쿩"], +["b361","쿪",5,"쿲쿴쿶",5,"쿽쿾쿿í€í€‚퀃퀅",5], +["b381","퀋",5,"퀒",5,"퀙",19,"ëë¼ë½ë‚€ë‚„ë‚Œë‚ë‚낑나낙낚난낟날낡낢남납낫",4,"낱낳내낵낸낼냄냅냇냈냉ëƒëƒ‘냔냘냠냥너넉넋넌ë„넒넓넘넙넛넜ë„넣네넥넨넬넴넵넷넸넹녀ë…ë…„ë…ˆë…녑녔녕녘녜녠노녹논놀놂놈놉놋ë†ë†’놓놔놘놜놨뇌ë‡ë‡”뇜ë‡"], +["b441","퀮",5,"퀶퀷퀹퀺퀻퀽",6,"í†íˆíŠ",5], +["b461","í‘í’í“í•í–í—í™",6,"í¡",10,"í®í¯"], +["b481","í±í²í³íµ",6,"í¾í¿í‚€í‚‚",18,"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉ëŠëŠ‘는늘늙늚늠늡늣능늦늪늬늰늴니닉닌ë‹ë‹’님닙닛ë‹ë‹¢ë‹¤ë‹¥ë‹¦ë‹¨ë‹«",4,"닳담답닷",4,"닿대ëŒëŒ„댈ëŒëŒ‘댓댔댕댜ë”ë•ë–ë˜ë›ëœëžëŸë¤ë¥"], +["b541","í‚•",14,"킦킧킩킪킫킭",5], +["b561","킳킶킸킺",5,"탂탃탅탆탇탊",5,"탒탖",4], +["b581","탛탞탟탡탢탣탥",6,"탮탲",5,"탹",11,"ë§ë©ë«ë®ë°ë±ë´ë¸ëŽ€ëŽëŽƒëŽ„뎅뎌ëŽëŽ”뎠뎡뎨뎬ë„ë…ëˆë‹ëŒëŽëë”ë•ë—ë™ë›ëë ë¤ë¨ë¼ëë˜ëœë ë¨ë©ë«ë´ë‘둑둔둘둠둡둣둥둬뒀뒈ë’뒤뒨뒬뒵뒷뒹듀듄듈ë“ë“•ë“œë“든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸"], +["b641","í„…",7,"í„Ž",17], +["b661","í„ ",15,"턲턳턵턶턷턹턻턼턽턾"], +["b681","í„¿í…‚í…†",5,"í…Ží…í…‘í…’í…“í…•",6,"í…ží… í…¢",5,"텩텪텫텭땀ë•ë•ƒë•„ë•…ë•‹ë•Œë•ë•ë•”ë•œë•ë•Ÿë• ë•¡ë– ë–¡ë–¤ë–¨ë–ªë–«ë–°ë–±ë–³ë–´ë–µë–»ë–¼ë–½ë—€ë—„ë—Œë—ë—ë—뗑뗘뗬ë˜ë˜‘똔똘똥똬똴뙈뙤뙨뚜ëšëš ëš¤ëš«ëš¬ëš±ë›”뛰뛴뛸뜀ëœëœ…뜨뜩뜬뜯뜰뜸뜹뜻ë„ëˆëŒë”ë•ë ë¤ë¨ë°ë±ë³ëµë¼ë½ëž€ëž„람ëžëžëžëž‘ëž’ëž–ëž—"], +["b741","í…®",13,"í…½",6,"톅톆톇톉톊"], +["b761","톋",20,"톢톣톥톦톧"], +["b781","톩",6,"톲톴톶톷톸톹톻톽톾톿í‡",14,"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀ë ë ‡ë ˆë ‰ë Œë ë ˜ë ™ë ›ë ë ¤ë ¥ë ¨ë ¬ë ´ë µë ·ë ¸ë ¹ë¡€ë¡„ë¡‘ë¡“ë¡œë¡ë¡ ë¡¤ë¡¬ë¡­ë¡¯ë¡±ë¡¸ë¡¼ë¢ë¢¨ë¢°ë¢´ë¢¸ë£€ë£ë£ƒë£…료ë£ë£”ë£ë£Ÿë£¡ë£¨ë£©ë£¬ë£°ë£¸ë£¹ë£»ë£½ë¤„뤘뤠뤼뤽륀륄륌ë¥ë¥‘류륙륜률륨륩"], +["b841","í‡",7,"퇙",17], +["b861","퇫",8,"퇵퇶퇷퇹",13], +["b881","툈툊",5,"툑",24,"륫륭르륵른를름릅릇릉릊ë¦ë¦Žë¦¬ë¦­ë¦°ë¦´ë¦¼ë¦½ë¦¿ë§ë§ˆë§‰ë§Œë§Ž",4,"맘맙맛ë§ë§žë§¡ë§£ë§¤ë§¥ë§¨ë§¬ë§´ë§µë§·ë§¸ë§¹ë§ºë¨€ë¨ë¨ˆë¨•ë¨¸ë¨¹ë¨¼ë©€ë©‚멈멉멋ë©ë©Žë©“메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼"], +["b941","툪툫툮툯툱툲툳툵",6,"툾퉀퉂",5,"퉉퉊퉋퉌"], +["b961","í‰",14,"í‰",6,"퉥퉦퉧퉨"], +["b981","퉩",22,"튂튃튅튆튇튉튊튋튌묀묄ë¬ë¬ë¬‘묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉ë­ë­ë­ë­”뭘뭡뭣뭬뮈뮌ë®ë®¤ë®¨ë®¬ë®´ë®·ë¯€ë¯„믈ë¯ë¯“미믹민믿밀밂밈밉밋밌ë°ë°ë°‘ë°”",4,"ë°›",4,"밤밥밧방밭배백밴밸뱀ë±ë±ƒë±„뱅뱉뱌ë±ë±ë±ë²„벅번벋벌벎범법벗"], +["ba41","íŠíŠŽíŠíŠ’튓튔튖",5,"íŠíŠžíŠŸíŠ¡íŠ¢íŠ£íŠ¥",6,"튭"], +["ba61","튮튯튰튲",5,"튺튻튽튾í‹í‹ƒ",4,"í‹Ší‹Œ",5], +["ba81","틒틓틕틖틗틙틚틛í‹",6,"틦",9,"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별ë³ë³ë³ë³‘볕볘볜보복볶본볼봄봅봇봉ë´ë´”봤봬뵀뵈뵉뵌ëµëµ˜ëµ™ëµ¤ëµ¨ë¶€ë¶ë¶„붇불붉붊ë¶ë¶‘붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브ë¸ë¸ë¸”븜ë¸ë¸Ÿë¹„빅빈빌빎빔빕빗빙빚빛빠빡빤"], +["bb41","í‹»",4,"팂팄팆",5,"íŒíŒ‘팒팓팕팗",4,"팞팢팣"], +["bb61","팤팦팧팪팫팭팮팯팱",6,"팺팾",5,"í†í‡íˆí‰"], +["bb81","íŠ",31,"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌ëºëºëºëº‘뺘뺙뺨ë»ë»‘뻔뻗뻘뻠뻣뻤뻥뻬ë¼ë¼ˆë¼‰ë¼˜ë¼™ë¼›ë¼œë¼ë½€ë½ë½„뽈ë½ë½‘뽕뾔뾰뿅뿌ë¿ë¿ë¿”뿜뿟뿡쀼ì‘ì˜ìœì ì¨ì©ì‚삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀ìƒìƒ…새색샌ìƒìƒ˜ìƒ™ìƒ›ìƒœìƒìƒ¤"], +["bc41","íª",17,"í¾í¿íŽíŽ‚펃펅펆펇"], +["bc61","펈펉펊펋펎펒",5,"펚펛íŽíŽžíŽŸíŽ¡",6,"펪펬펮"], +["bc81","펯",4,"펵펶펷펹펺펻펽",6,"í†í‡íŠ",5,"í‘",5,"샥샨샬샴샵샷샹섀섄섈ì„ì„•ì„œ",4,"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌ì…셔셕션셜셤셥셧셨셩셰셴셸솅소ì†ì†Žì†ì†”솖솜ì†ì†Ÿì†¡ì†¥ì†¨ì†©ì†¬ì†°ì†½ì‡„쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌ìˆìˆìˆ‘수숙순숟술숨숩숫숭"], +["bd41","í—í™",7,"í¢í¤",7,"í®í¯í±í²í³íµí¶í·"], +["bd61","í¸í¹íºí»í¾í€í‚",5,"í‰",13], +["bd81","í—",5,"íž",25,"숯숱숲숴쉈ì‰ì‰‘쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿ìŠìŠˆìŠ‰ìŠìŠ˜ìŠ›ìŠìŠ¤ìŠ¥ìŠ¨ìŠ¬ìŠ­ìŠ´ìŠµìŠ·ìŠ¹ì‹œì‹ì‹ ì‹£ì‹¤ì‹«ì‹¬ì‹­ì‹¯ì‹±ì‹¶ì‹¸ì‹¹ì‹»ì‹¼ìŒ€ìŒˆìŒ‰ìŒŒìŒìŒ“쌔쌕쌘쌜쌤쌥쌨쌩ì…ì¨ì©ì¬ì°ì²ì¸ì¹ì¼ì½ìŽ„쎈쎌ì€ì˜ì™ìœìŸì ì¢ì¨ì©ì­ì´ìµì¸ìˆìì¤ì¬ì°"], +["be41","í¸",7,"í‘푂푃푅",14], +["be61","í‘”",7,"í‘푞푟푡푢푣푥",7,"푮푰푱푲"], +["be81","푳",4,"푺푻푽푾í’í’ƒ",4,"풊풌풎",5,"í’•",8,"ì´ì¼ì½ì‘ˆì‘¤ì‘¥ì‘¨ì‘¬ì‘´ì‘µì‘¹ì’€ì’”쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀ì”씌ì”씔씜씨씩씬씰씸씹씻씽아악안앉않알ì•ì•Žì•“암압앗았앙ì•ì•žì• ì•¡ì•¤ì•¨ì•°ì•±ì•³ì•´ì•µì•¼ì•½ì–€ì–„얇얌ì–ì–양얕얗얘얜얠얩어억언얹얻얼얽얾엄",6,"엌엎"], +["bf41","í’ž",10,"í’ª",14], +["bf61","í’¹",18,"í“í“Ží“í“‘í“’í““í“•"], +["bf81","í“–",5,"í“í“ží“ ",7,"퓩퓪퓫퓭퓮퓯퓱",6,"퓹퓺퓼ì—엑엔엘엠엡엣엥여역엮연열엶엷염",5,"옅옆옇예옌ì˜ì˜˜ì˜™ì˜›ì˜œì˜¤ì˜¥ì˜¨ì˜¬ì˜­ì˜®ì˜°ì˜³ì˜´ì˜µì˜·ì˜¹ì˜»ì™€ì™ì™„왈ì™ì™‘왓왔왕왜ì™ì™ ì™¬ì™¯ì™±ì™¸ì™¹ì™¼ìš€ìšˆìš‰ìš‹ìšìš”욕욘욜욤욥욧용우욱운울욹욺움ì›ì›ƒì›…워ì›ì›ì›”웜ì›ì› ì›¡ì›¨"], +["c041","퓾",5,"픅픆픇픉픊픋í”",6,"픖픘",5], +["c061","픞",25], +["c081","픸픹픺픻픾픿í•í•‚핃핅",6,"í•Ží•í•’",5,"í•ší•›í•í•ží•Ÿí•¡í•¢í•£ì›©ì›¬ì›°ì›¸ì›¹ì›½ìœ„윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽ì€ì„ìŠìŒììì‘",7,"ìœì ì¨ì«ì´ìµì¸ì¼ì½ì¾ìžƒìž„입잇있잉잊잎ìžìž‘잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀ìŸìŸˆìŸ‰ìŸŒìŸŽìŸìŸ˜ìŸìŸ¤ìŸ¨ìŸ¬ì €ì ì „절젊"], +["c141","핤핦핧핪핬핮",5,"핶핷핹핺핻핽",6,"햆햊햋"], +["c161","í–Œí–í–Ží–í–‘",19,"햦햧"], +["c181","í–¨",31,"ì ì ‘ì “ì •ì –ì œì ì  ì ¤ì ¬ì ­ì ¯ì ±ì ¸ì ¼ì¡€ì¡ˆì¡‰ì¡Œì¡ì¡”조족존졸졺좀ì¢ì¢ƒì¢…좆좇좋좌ì¢ì¢”ì¢ì¢Ÿì¢¡ì¢¨ì¢¼ì¢½ì£„죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌ì¤ì¤ì¤‘줘줬줴ì¥ì¥‘쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌ì¦ì¦˜ì¦™ì¦›ì¦ì§€ì§ì§„짇질짊ì§ì§‘짓"], +["c241","í—Ší—‹í—í—Ží—í—‘í—“",4,"헚헜헞",5,"헦헧헩헪헫헭헮"], +["c261","í—¯",4,"헶헸헺",5,"혂혃혅혆혇혉",6,"혒"], +["c281","혖",5,"í˜í˜ží˜Ÿí˜¡í˜¢í˜£í˜¥",7,"혮",9,"혺혻징짖짙짚짜ì§ì§ ì§¢ì§¤ì§§ì§¬ì§­ì§¯ì§°ì§±ì§¸ì§¹ì§¼ì¨€ì¨ˆì¨‰ì¨‹ì¨Œì¨ì¨”쨘쨩쩌ì©ì©ì©”ì©œì©ì©Ÿì© ì©¡ì©¨ì©½ìª„쪘쪼쪽쫀쫄쫌ì«ì«ì«‘쫓쫘쫙쫠쫬쫴쬈ì¬ì¬”쬘쬠쬡ì­ì­ˆì­‰ì­Œì­ì­˜ì­™ì­ì­¤ì­¸ì­¹ì®œì®¸ì¯”쯤쯧쯩찌ì°ì°ì°”ì°œì°ì°¡ì°¢ì°§ì°¨ì°©ì°¬ì°®ì°°ì°¸ì°¹ì°»"], +["c341","혽혾혿í™í™‚홃홄홆홇홊홌홎í™í™í™’홓홖홗홙홚홛í™",4], +["c361","홢",4,"홨홪",5,"홲홳홵",11], +["c381","íšíš‚횄횆",5,"횎íšíš‘íš’íš“íš•",7,"횞횠횢",5,"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉ì³ì³”쳤쳬쳰ì´ì´ˆì´‰ì´Œì´ì´˜ì´™ì´›ì´ì´¤ì´¨ì´¬ì´¹ìµœìµ ìµ¤ìµ¬ìµ­ìµ¯ìµ±ìµ¸ì¶ˆì¶”축춘출춤춥춧충춰췄췌ì·ì·¨ì·¬ì·°ì·¸ì·¹ì·»ì·½ì¸„츈츌츔츙츠측츤츨츰츱츳층"], +["c441","횫횭횮횯횱",7,"횺횼",7,"훆훇훉훊훋"], +["c461","í›í›Ží›í›í›’훓훕훖훘훚",5,"훡훢훣훥훦훧훩",4], +["c481","훮훯훱훲훳훴훶",5,"훾훿íœíœ‚휃휅",11,"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉ìºìº‘캔캘캠캡캣캤캥캬캭ì»ì»¤ì»¥ì»¨ì»«ì»¬ì»´ì»µì»·ì»¸ì»¹ì¼€ì¼ì¼„켈ì¼ì¼‘켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼"], +["c541","휕휖휗휚휛íœíœžíœŸíœ¡",6,"휪휬휮",5,"휶휷휹"], +["c561","휺휻휽",6,"í…í†íˆíŠ",5,"í’í“í•íš",4], +["c581","íŸí¢í¤í¦í§í¨íªí«í­í®í¯í±í²í³íµ",6,"í¾í¿íž€íž‚",5,"힊힋í„í…í‡í‰íí”í˜í í¬í­í°í´í¼í½í‚키킥킨킬킴킵킷킹타íƒíƒ„탈탉íƒíƒ‘탓탔탕태íƒíƒ íƒ¤íƒ¬íƒ­íƒ¯íƒ°íƒ±íƒ¸í„터턱턴털턺텀í…텃텄텅테í…í…텔템í…텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉íˆíˆ¬íˆ­íˆ°íˆ´íˆ¼íˆ½íˆ¿í‰í‰ˆí‰œ"], +["c641","ížížŽížíž‘",6,"힚힜힞",5], +["c6a1","퉤튀íŠíŠ„튈íŠíŠ‘튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀íŒíŒƒíŒ…파íŒíŒŽíŒíŒ”팖팜íŒíŒŸíŒ íŒ¡íŒ¥íŒ¨íŒ©íŒ¬íŒ°íŒ¸íŒ¹íŒ»íŒ¼íŒ½í„í…í¼í½íŽ€íŽ„펌íŽíŽíŽíŽ‘페펙펜펠펨펩펫펭펴편펼í„í…íˆí‰íí˜í¡í£í¬í­í°í´í¼í½í¿í"], +["c7a1","íˆí푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋í’풔풩퓌í“퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌í•í•í•‘하학한할핥함합핫항해핵핸핼햄햅햇했행í–향허헉헌í—헒험헙헛í—헤헥헨헬헴헵헷헹혀í˜í˜„혈í˜í˜‘혓혔형혜혠"], +["c8a1","혤혭호혹혼홀홅홈홉홋í™í™‘화확환활홧황홰홱홴횃횅회íšíšíš”íšíšŸíš¡íš¨íš¬íš°íš¹íš»í›„훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼í„í‡í‰íí‘í”í–í—í˜í™í í¡í£í¥í©í¬í°í´í¼í½ížížˆíž‰ížŒížíž˜íž™íž›íž"], +["caa1","伽佳å‡åƒ¹åŠ å¯å‘µå“¥å˜‰å«å®¶æš‡æž¶æž·æŸ¯æ­Œç‚痂稼苛茄街袈訶賈è·è»»è¿¦é§•åˆ»å´å„æªæ…¤æ®¼ç脚覺角閣侃刊墾奸姦干幹懇æ€æ†æŸ¬æ¡¿æ¾—癎看磵稈竿簡è‚艮艱諫間乫å–曷渴碣竭葛è¤èŽéž¨å‹˜åŽå ªåµŒæ„Ÿæ†¾æˆ¡æ•¢æŸ‘橄減甘疳監瞰紺邯鑑鑒龕"], +["cba1","匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑è¥è¬›é‹¼é™é±‡ä»‹ä»·å€‹å‡±å¡æ„·æ„¾æ…¨æ”¹æ§ªæ¼‘疥皆盖箇芥蓋豈鎧開喀客å‘ï¤ç²³ç¾¹é†µå€¨åŽ»å±…巨拒æ®æ“šæ“§æ¸ ç‚¬ç¥›è·è¸žï¤‚é½é‰…鋸乾件å¥å·¾å»ºæ„†æ¥—腱虔蹇éµé¨«ä¹žå‚‘æ°æ¡€å„‰åŠåŠ’檢"], +["cca1","çž¼éˆé»”劫怯迲åˆæ†©æ­æ“Šæ ¼æª„激膈覡隔堅牽犬甄絹繭肩見譴é£éµ‘抉決潔çµç¼ºè¨£å…¼æ…Šç®è¬™é‰—鎌京俓倞傾儆å‹å‹å¿å°å¢ƒåºšå¾‘慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕é¡é ƒé ¸é©šé¯¨ä¿‚啓堺契季屆悸戒桂械"], +["cda1","棨溪界癸磎稽系繫繼計誡谿階鷄å¤å©å‘Šå‘±å›ºå§‘孤尻庫拷攷故敲暠枯æ§æ²½ç—¼çšç¾ç¨¿ç¾”考股è†è‹¦è‹½è°è—蠱袴誥賈辜錮雇顧高鼓哭斛曲æ¢ç©€è°·éµ å›°å¤å´‘昆梱æ£æ»¾ç¨è¢žé¯¤æ±¨ï¤„骨供公共功孔工ææ­æ‹±æŽ§æ”»ç™ç©ºèš£è²¢éžä¸²å¯¡æˆˆæžœç“œ"], +["cea1","科è“誇課跨éŽé‹é¡†å»“槨藿郭串冠官寬慣棺款çŒç¯ç“˜ç®¡ç½è…觀貫關館刮æ括适侊光匡壙廣曠洸炚狂ç–ç­èƒ±é‘›å¦æŽ›ç½«ä¹–傀塊壞怪愧æ‹æ§é­å®ç´˜è‚±è½Ÿäº¤åƒ‘咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久ä¹ä»‡ä¿±å…·å‹¾"], +["cfa1","å€å£å¥å’Žå˜”åµåž¢å¯‡å¶‡å»æ‡¼æ‹˜æ•‘枸柩構æ­æ¯†æ¯¬æ±‚æºç¸ç‹—玖çƒçž¿çŸ©ç©¶çµ¿è€‰è‡¼èˆ…舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局èŠéž éž«éº´å›çª˜ç¾¤è£™è»éƒ¡å €å±ˆæŽ˜çªŸå®®å¼“穹窮芎躬倦券勸å·åœˆæ‹³æ²æ¬Šæ·ƒçœ·åŽ¥ç—蕨蹶闕机櫃潰詭軌饋句晷歸貴"], +["d0a1","鬼龜å«åœ­å¥Žæ†æ§»çªç¡…窺竅糾葵è¦èµ³é€µé–¨å‹»å‡ç•‡ç­ èŒéˆžï¤ˆæ©˜å…‹å‰‹åŠ‡æˆŸæ£˜æ¥µéš™åƒ…劤勤懃斤根槿瑾筋芹è«è¦²è¬¹è¿‘饉契今妗擒昑檎ç´ç¦ç¦½èŠ©è¡¾è¡¿è¥Ÿï¤ŠéŒ¦ä¼‹åŠæ€¥æ‰±æ±²ç´šçµ¦äº˜å…¢çŸœè‚¯ä¼ä¼Žå…¶å†€å—œå™¨åœ»åŸºåŸ¼å¤”奇妓寄å²å´Žå·±å¹¾å¿ŒæŠ€æ——æ—£"], +["d1a1","朞期æžæ£‹æ£„機欺氣汽沂淇玘ç¦çªç’‚璣畸畿ç¢ç£¯ç¥ç¥‡ç¥ˆç¥ºç®•ç´€ç¶ºç¾ˆè€†è€­è‚Œè¨˜è­è±ˆèµ·éŒ¡éŒ¤é£¢é¥‘騎é¨é©¥éº’緊佶å‰æ‹®æ¡”金喫儺喇奈娜懦ï¤æ‹æ‹¿ï¤Ž",5,"那樂",4,"諾酪駱亂卵暖ï¤ç…–爛蘭難鸞ææºå—嵐æžæ¥ æ¹³ï¤¢ç”·ï¤£ï¤¤ï¤¥"], +["d2a1","ç´ï¤¦ï¤§è¡²å›Šå¨˜ï¤¨",4,"乃來內奈柰è€ï¤®å¥³å¹´æ’šç§Šå¿µæ¬æ‹ˆæ»å¯§å¯—努勞奴弩怒擄櫓爐瑙盧",5,"駑魯",10,"濃籠聾膿農惱牢磊腦賂雷尿壘",7,"嫩訥æ»ç´ï¥’",5,"能菱陵尼泥匿溺多茶"], +["d3a1","丹亶但單團壇彖斷旦檀段æ¹çŸ­ç«¯ç°žç·žè›‹è¢’鄲é›æ’»æ¾¾çºç–¸é”å•–å憺擔曇淡湛潭澹痰èƒè†½è•è¦ƒè«‡è­šéŒŸæ²“ç•“ç­”è¸éå”堂塘幢戇撞棠當糖螳黨代垈å®å¤§å°å²±å¸¶å¾…戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉æ—桃"], +["d4a1","棹櫂淘渡滔濤燾盜ç¹ç¦±ç¨»è„覩賭跳蹈逃途é“都é陶韜毒瀆牘犢ç¨ç£ç¦¿ç¯¤çº›è®€å¢©æƒ‡æ•¦æ—½æš¾æ²Œç„žç‡‰è±šé “ä¹­çªä»å†¬å‡å‹•åŒæ†§æ±æ¡æ£Ÿæ´žæ½¼ç–¼çž³ç«¥èƒ´è‘£éŠ…兜斗æœæž“痘竇è³ï¥šè±†é€—頭屯臀芚éé¯éˆå¾—å¶æ©™ç‡ˆç™»ç­‰è—¤è¬„鄧騰喇懶拏癩羅"], +["d5a1","蘿螺裸é‚樂洛烙çžçµ¡è½ï¥é…ªé§±ï¥žäº‚åµæ¬„欒瀾爛蘭鸞剌辣åµæ“¥æ”¬æ¬–濫籃纜è—襤覽拉臘蠟廊朗浪狼ç…瑯螂郞來å´å¾ èŠå†·æŽ ç•¥äº®å€†å…©å‡‰æ¢æ¨‘粮粱糧良諒輛é‡ä¾¶å„·å‹µå‘‚廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷ç€ç¤«è½¢é‚æ†æˆ€æ”£æ¼£"], +["d6a1","煉璉練è¯è“®è¼¦é€£éŠå†½åˆ—劣洌烈裂廉斂殮濂簾çµä»¤ä¼¶å›¹ï¥Ÿå²ºå¶ºæ€œçŽ²ç¬­ç¾šç¿Žè†é€žéˆ´é›¶éˆé ˜é½¡ä¾‹æ¾§ç¦®é†´éš·å‹žï¥ æ’ˆæ“„櫓潞瀘çˆç›§è€è˜†è™œè·¯è¼…露魯鷺鹵碌祿綠è‰éŒ„鹿麓論壟弄朧瀧ç“ç± è¾å„¡ç€¨ç‰¢ç£Šè³‚賚賴雷了僚寮廖料燎療瞭èŠè“¼"], +["d7a1","é¼é¬§é¾å£˜å©å±¢æ¨“æ·šæ¼ç˜»ç´¯ç¸·è”žè¤¸é¤é™‹åŠ‰æ—’柳榴æµæºœç€ç‰ç‘ ç•™ç˜¤ç¡«è¬¬é¡žå…­æˆ®é™¸ä¾–倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾è±é™µä¿šåˆ©åŽ˜å唎履悧æŽæ¢¨æµ¬çŠç‹¸ç†ç’ƒï¥¢ç—¢ç±¬ç½¹ç¾¸èŽ‰è£è£¡é‡Œé‡é›¢é¯‰åæ½¾ç‡ç’˜è—ºèºªéš£é±—麟林淋ç³è‡¨éœ–ç ¬"], +["d8a1","立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万å娩巒彎慢挽晩曼滿漫ç£çžžè¬è”“蠻輓饅鰻唜抹末沫茉襪éºäº¡å¦„忘忙望網罔芒茫莽輞邙埋妹媒å¯æ˜§æžšæ¢…æ¯ç…¤ç½µè²·è³£é‚魅脈貊陌驀麥孟氓猛盲盟èŒå†ªè¦“å…冕勉棉沔眄眠綿緬é¢éºµæ»…"], +["d9a1","蔑冥å命明æšæ¤§æºŸçš¿çž‘茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮æŸæ¨¡æ¯æ¯›ç‰Ÿç‰¡ç‘眸矛耗芼茅謀謨貌木æ²ç‰§ç›®ç¦ç©†é¶©æ­¿æ²’夢朦蒙å¯å¢“妙廟æ昴æ³æ¸ºçŒ«ç«—苗錨務巫憮懋戊拇撫无楙武毋無ç·ç•ç¹†èˆžèŒ‚蕪誣貿霧鵡墨默們刎å»å•æ–‡"], +["daa1","汶紊紋èžèšŠé–€é›¯å‹¿æ²•ç‰©å‘³åªšå°¾åµ‹å½Œå¾®æœªæ¢¶æ¥£æ¸¼æ¹„眉米美薇謎迷é¡é»´å²·æ‚¶æ„憫æ•æ—»æ—¼æ°‘泯玟ç‰ç·¡é–”密蜜è¬å‰åšæ‹æ撲朴樸泊ç€ç’žç®”粕縛膊舶薄迫雹é§ä¼´åŠåå›æ‹Œæ¬æ”€æ–‘槃泮潘ç­ç•”瘢盤盼ç£ç£»ç¤¬çµ†èˆ¬èŸ è¿”頒飯勃拔撥渤潑"], +["dba1","發跋醱鉢髮魃倣å‚åŠå¦¨å°¨å¹‡å½·æˆ¿æ”¾æ–¹æ—昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防é¾å€ä¿³ï¥£åŸ¹å¾˜æ‹œæŽ’æ¯æ¹ƒç„™ç›ƒèƒŒèƒšè£´è£µè¤™è³ è¼©é…陪伯佰帛æŸæ ¢ç™½ç™¾é­„幡樊煩燔番磻ç¹è•ƒè—©é£œä¼ç­ç½°é–¥å‡¡å¸†æ¢µæ°¾æ±Žæ³›çŠ¯ç¯„范法çºåƒ»åŠˆå£æ“˜æª—璧癖"], +["dca1","碧蘗闢霹便åžå¼è®Šè¾¨è¾¯é‚Šåˆ¥çž¥é±‰é¼ˆä¸™å€‚兵屛幷昞昺柄棅炳ç”病秉ç«è¼§é¤ é¨ˆä¿å ¡å ±å¯¶æ™®æ­¥æ´‘湺潽ç¤ç”«è©è£œè¤“譜輔ä¼åƒ•åŒåœå®“復æœç¦è…¹èŒ¯è””複覆輹輻馥鰒本乶俸奉å°å³¯å³°æ§æ£’烽熢ç«ç¸«è“¬èœ‚逢鋒鳳ä¸ä»˜ä¿¯å‚…剖副å¦å’埠夫婦"], +["dda1","孚孵富府復扶敷斧浮溥父符簿缶è…腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分å©å™´å¢³å¥”奮忿憤扮æ˜æ±¾ç„šç›†ç²‰ç³žç´›èŠ¬è³é›°ï¥§ä½›å¼—彿拂崩朋棚硼繃鵬丕備匕匪å‘妃婢庇悲憊扉批æ–枇榧比毖毗毘沸泌çµç—ºç ’碑秕秘粃緋翡肥"], +["dea1","脾臂è²èœšè£¨èª¹è­¬è²»é„™éžé£›é¼»åš¬å¬ªå½¬æ–Œæª³æ®¯æµœæ¿±ç€•ç‰çŽ­è²§è³“頻憑氷è˜é¨ä¹äº‹äº›ä»•ä¼ºä¼¼ä½¿ä¿Ÿåƒ¿å²å¸å”†å—£å››å£«å¥¢å¨‘寫寺射巳師徙æ€æ¨æ–œæ–¯æŸ¶æŸ»æ¢­æ­»æ²™æ³—渣瀉ç…砂社祀祠ç§ç¯©ç´—絲肆èˆèŽŽè“‘蛇裟è©è©žè¬è³œèµ¦è¾­é‚ªé£¼é§Ÿéºå‰Šï¥©æœ”索"], +["dfa1","傘刪山散汕çŠç”£ç–算蒜酸霰乷撒殺煞薩三參æ‰æ£®æ¸—芟蔘衫æ·æ¾éˆ’颯上傷åƒå„Ÿå•†å–ªå˜—孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼åºåº¶å¾æ•æŠ’æ¿æ•æš‘曙書栖棲犀瑞筮絮緖署"], +["e0a1","胥舒薯西誓é€é‹¤é»é¼ å¤•å¥­å¸­æƒœæ˜”晳æžæ±æ·…潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽ç瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣é¸éŠ‘é¥é¥é®®å¨å±‘楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾è´é–ƒé™æ”涉燮葉城姓宬性惺æˆæ˜Ÿæ™ŸçŒ©ç¹ç››çœç­¬"], +["e1a1","è–è²è…¥èª é†’世勢歲洗稅笹細說貰å¬å˜¯å¡‘宵å°å°‘巢所掃æ”昭梳沼消溯瀟炤燒甦ç–疎瘙笑篠簫素紹蔬蕭蘇訴é€é¡é‚µéŠ·éŸ¶é¨·ä¿—屬æŸæ¶‘粟續謖贖速孫巽æè“€éœé£¡çŽ‡å®‹æ‚šæ¾æ·žè¨Ÿèª¦é€é Œåˆ·ï¥°ç‘碎鎖衰釗修å—嗽囚垂壽嫂守岫峀帥æ„"], +["e2a1","æˆæ‰‹æŽˆæœæ”¶æ•¸æ¨¹æ®Šæ°´æ´™æ¼±ç‡§ç‹©ç¸ç‡ç’²ç˜¦ç¡ç§€ç©—竪粹ç¶ç¶¬ç¹¡ç¾žè„©èŒ±è’蓚藪袖誰è®è¼¸é‚邃酬銖銹隋隧隨雖需須首髓鬚å”塾夙孰宿淑潚熟ç¡ç’¹è‚…è½å·¡å¾‡å¾ªæ‚旬栒楯橓殉洵淳ç£ç›¾çž¬ç­ç´”脣舜è€è“´è•£è©¢è«„醇錞順馴戌術述鉥崇崧"], +["e3a1","嵩瑟è†è¨æ¿•æ‹¾ç¿’褶襲丞乘僧å‹å‡æ‰¿æ˜‡ç¹©è …陞ä¾åŒ™å˜¶å§‹åª¤å°¸å±Žå±å¸‚弑æƒæ–½æ˜¯æ™‚枾柴猜矢示翅蒔è“視試詩諡豕豺埴寔å¼æ¯æ‹­æ¤æ®–湜熄篒è•è­˜è»¾é£Ÿé£¾ä¼¸ä¾ä¿¡å‘»å¨ å®¸æ„¼æ–°æ™¨ç‡¼ç”³ç¥žç´³è…Žè‡£èŽ˜è–ªè—Žèœƒè¨Šèº«è¾›ï¥±è¿…失室實悉審尋心æ²"], +["e4a1","沈深瀋甚芯諶什å拾雙æ°äºžä¿„兒啞娥峨我牙芽莪蛾衙è¨é˜¿é›…餓鴉éµå Šå²³å¶½å¹„惡愕æ¡æ¨‚渥鄂é”é¡Žé°é½·å®‰å²¸æŒ‰æ™æ¡ˆçœ¼é›éžé¡”鮟斡è¬è»‹é–¼å”µå²©å·–庵暗癌è´é—‡å£“押狎鴨仰央æ€æ˜»æ®ƒç§§é´¦åŽ“哀埃崖愛曖涯ç¢è‰¾éš˜é„厄扼掖液縊腋é¡"], +["e5a1","櫻罌鶯鸚也倻冶夜惹æ¶æ¤°çˆºè€¶ï¥´é‡Žå¼±ï¥µï¥¶ç´„若葯蒻藥èºï¥·ä½¯ï¥¸ï¥¹å£¤å­ƒæ™æšæ”˜æ•­æš˜ï¥ºæ¥Šæ¨£æ´‹ç€ç…¬ç—’ç˜ç¦³ç©°ï¥»ç¾Šï¥¼è¥„諒讓釀陽量養圄御於æ¼ç˜€ç¦¦èªžé¦­é­šé½¬å„„憶抑æªè‡†åƒå °å½¦ç„‰è¨€è«ºå­¼è˜–俺儼嚴奄掩淹嶪業円予余勵呂ï¦å¦‚廬"], +["e6a1","旅歟æ±ï¦„璵礖礪與艅茹輿è½ï¦†é¤˜ï¦‡ï¦ˆï¦‰äº¦ï¦ŠåŸŸå½¹æ˜“曆歷疫繹譯ï¦é€†é©›åš¥å §å§¸å¨Ÿå®´ï¦Žå»¶ï¦ï¦æ挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉ç¡ç¡¯ï¦•ç­µç·£ï¦–縯聯è¡è»Ÿï¦˜ï¦™ï¦šé‰›ï¦›é³¶ï¦œï¦ï¦žæ‚…涅烈熱裂說閱厭廉念捻染殮炎焰ç°è‰¶è‹’"], +["e7a1","簾閻髥鹽曄獵ç‡è‘‰ï¦¨ï¦©å¡‹ï¦ªï¦«å¶¸å½±ï¦¬æ˜ æšŽæ¥¹æ¦®æ°¸æ³³æ¸¶æ½æ¿šç€›ç€¯ç…營ç°ï¦­ç‘›ï¦®ç“”盈穎纓羚聆英詠迎鈴éˆï¦²éœ™ï¦³ï¦´ä¹‚倪例刈å¡æ›³æ±­æ¿ŠçŒŠç¿ç©¢èŠ®è—蘂禮裔詣譽豫醴銳隸霓é äº”ä¼ä¿‰å‚²åˆå¾å³å—šå¡¢å¢ºå¥§å¨›å¯¤æ‚Ÿï¦¹æ‡Šæ•–旿晤梧汚澳"], +["e8a1","çƒç†¬ç’筽蜈誤鰲鼇屋沃ç„玉鈺溫瑥瘟穩縕蘊兀壅æ“瓮甕癰ç¿é‚•é›é¥”渦瓦窩窪臥蛙è¸è¨›å©‰å®Œå®›æ¢¡æ¤€æµ£çŽ©ç“ç¬ç¢—緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬å·çŒ¥ç•ï¦ºï¦»åƒ¥å‡¹å ¯å¤­å¦–姚寥寮尿嶢拗æ–撓擾料曜樂橈燎燿瑤ï§"], +["e9a1","窈窯繇繞耀腰蓼蟯è¦è¬ é™ï§ƒé‚€é¥’慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬è³èŒ¸è“‰è¸ŠéŽ”éžï§„于佑å¶å„ªåˆå‹å³å®‡å¯“尤愚憂旴牛玗瑀盂ç¥ç¦‘禹紆羽芋藕虞迂é‡éƒµé‡ªéš…雨雩勖彧旭昱栯煜稶éƒé Šäº‘暈橒殞æ¾ç†‰è€˜èŠ¸è•“"], +["eaa1","é‹éš•é›²éŸ»è”šé¬±äºç†Šé›„元原員圓園垣媛嫄寃怨愿æ´æ²…洹湲æºçˆ°çŒ¿ç‘—è‹‘è¢è½…é ï§†é™¢é¡˜é´›æœˆè¶Šé‰žä½å‰åƒžå±åœå§”å¨å°‰æ…°æšæ¸­çˆ²ç‘‹ç·¯èƒƒèŽè‘¦è”¿èŸè¡›è¤˜è¬‚é•éŸ‹é­ä¹³ä¾‘儒兪劉唯喩孺宥幼幽庾悠惟愈愉æ„攸有杻柔柚柳楡楢油洧流游溜"], +["eba1","濡猶猷琉瑜由ï§ç™’硫ï§ç¶­è‡¾è¸è£•èª˜è«›è«­è¸°è¹‚éŠé€¾éºé…‰é‡‰é®ï§ï§‘堉戮毓肉育陸倫å…奫尹崙淪潤玧胤贇輪鈗é–律慄栗率è¿æˆŽç€œçµ¨èžï§œåž æ©æ…‡æ®·èª¾éŠ€éš±ä¹™åŸæ·«è”­é™°éŸ³é£®æ–泣邑å‡æ‡‰è†ºé·¹ä¾å€šå„€å®œæ„懿擬椅毅疑矣義艤è–蟻衣誼"], +["eca1","議醫二以伊ï§ï§žå¤·å§¨ï§Ÿå·²å¼›å½›æ€¡ï§ ï§¡ï§¢ï§£çˆ¾ç¥ï§¤ç•°ç—痢移罹而耳肄苡è‘裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人ä»åˆƒå°ï§­å’½å› å§»å¯…引å¿æ¹®ï§®ï§¯çµªèŒµï§°èš“èªï§±é­é·ï§²ï§³ä¸€ä½šä½¾å£¹æ—¥æº¢é€¸éŽ°é¦¹ä»»å£¬å¦Šå§™æ林淋稔臨è賃入å„"], +["eda1","立笠粒ä»å‰©å­•èŠ¿ä»”刺咨姉姿å­å­—å­œæ£æ…ˆæ»‹ç‚™ç…®çŽ†ç“·ç–µç£ç´«è€…自茨蔗藉諮資雌作勺嚼斫昨ç¼ç‚¸çˆµç¶½èŠé…Œé›€éµ²å­±æ£§æ®˜æ½ºç›žå²‘暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲æ–樟檣欌漿牆狀ç璋章粧腸臟臧莊葬蔣薔è—è£è´“醬長"], +["eea1","éšœå†å“‰åœ¨å®°æ‰æ栽梓渽滓ç½ç¸¡è£è²¡è¼‰é½‹é½Žçˆ­ç®è«éŒšä½‡ä½Žå„²å’€å§åº•æŠµæµæ¥®æ¨—沮渚狙猪疽箸紵苧è¹è‘—藷詛貯躇這邸雎齟勣åŠå«¡å¯‚摘敵滴狄炙的ç©ç¬›ç±ç¸¾ç¿Ÿè»è¬«è³Šèµ¤è·¡è¹Ÿè¿ªè¿¹é©é‘佃佺傳全典å‰å‰ªå¡¡å¡¼å¥ å°ˆå±•å»›æ‚›æˆ°æ “殿氈澱"], +["efa1","ç…Žç ç”°ç”¸ç•‘癲筌箋箭篆çºè©®è¼¾è½‰éˆ¿éŠ“錢é«é›»é¡šé¡«é¤žåˆ‡æˆªæŠ˜æµ™ç™¤ç«Šç¯€çµ¶å å²¾åº—漸点粘霑鮎點接摺è¶ä¸äº•äº­åœåµå‘ˆå§ƒå®šå¹€åº­å»·å¾æƒ…挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎ç½ç”ºç›ç¢‡ç¦Žç¨‹ç©½ç²¾ç¶Žè‰‡è¨‚諪貞鄭酊釘鉦鋌錠霆é–"], +["f0a1","éœé ‚鼎制劑啼堤å¸å¼Ÿæ‚Œæ梯濟祭第è‡è–ºè£½è«¸è¹„é†é™¤éš›éœ½é¡Œé½Šä¿Žå…†å‡‹åŠ©å˜²å¼”彫措æ“æ—©æ™æ›ºæ›¹æœæ¢æ£—槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙èºé€ é­é‡£é˜»é›•é³¥æ—簇足éƒå­˜å°Šå’æ‹™çŒå€§å®—從悰慫棕淙ç®ç¨®çµ‚綜縱腫"], +["f1a1","踪踵é¾é˜ä½å左座挫罪主ä½ä¾åšå§èƒ„呪周嗾å¥å®™å·žå»šæ™æœ±æŸ±æ ªæ³¨æ´²æ¹Šæ¾ç‚·ç ç–‡ç±Œç´‚紬綢舟蛛註誅走躊輳週酎酒鑄é§ç«¹ç²¥ä¿Šå„准埈寯峻晙樽浚準濬焌畯竣蠢逡éµé›‹é§¿èŒä¸­ä»²è¡†é‡å½æ«›æ¥«æ±è‘ºå¢žæ†Žæ›¾æ‹¯çƒç”‘症繒蒸證贈之åª"], +["f2a1","咫地å€å¿—æŒæŒ‡æ‘¯æ”¯æ—¨æ™ºæžæž³æ­¢æ± æ²šæ¼¬çŸ¥ç ¥ç¥‰ç¥—紙肢脂至èŠèŠ·èœ˜èªŒï§¼è´„趾é²ç›´ç¨™ç¨·ç¹”è·å”‡å—”塵振æ¢æ™‰æ™‹æ¡­æ¦›æ®„津溱ç瑨璡畛疹盡眞瞋秦縉ç¸è‡»è”¯è¢—診賑軫辰進鎭陣陳震侄å±å§ªå«‰å¸™æ¡Žç“†ç–¾ç§©çª’膣蛭質跌迭斟朕什執潗ç·è¼¯"], +["f3a1","é¶é›†å¾µæ‡²æ¾„且侘借å‰å—Ÿåµ¯å·®æ¬¡æ­¤ç£‹ç®šï§¾è¹‰è»Šé®æ‰æ¾ç€çª„錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽é¤é¥Œåˆ¹å¯Ÿæ“¦æœ­ç´®åƒ­åƒå¡¹æ…˜æ…™æ‡ºæ–¬ç«™è®’讖倉倡創唱娼廠彰愴敞昌昶暢æ§æ»„漲猖瘡窓脹艙è–蒼債埰寀寨彩採砦綵èœè”¡é‡‡é‡µå†ŠæŸµç­–"], +["f4a1","責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟åƒå–˜å¤©å·æ“…泉淺玔穿舛薦賤è¸é·é‡§é—¡é˜¡éŸ†å‡¸å“²å–†å¾¹æ’¤æ¾ˆç¶´è¼Ÿè½éµåƒ‰å°–沾添甛瞻簽籤詹諂堞妾帖æ·ç‰’ç–Šç«è«œè²¼è¼’廳晴淸è½èè«‹é‘鯖切剃替涕滯締諦逮éžé«”åˆå‰¿å“¨æ†”抄招梢"], +["f5a1","椒楚樵炒焦ç¡ç¤ç¤Žç§’ç¨è‚–艸苕è‰è•‰è²‚超酢醋醮促囑燭矗蜀觸寸忖æ‘邨å¢å¡šå¯µæ‚¤æ†æ‘ ç¸½è°è”¥éŠƒæ’®å‚¬å´”最墜抽推椎楸樞湫皺秋芻è©è«è¶¨è¿½é„’酋醜éŒéŒ˜éŽšé››é¨¶é°ä¸‘ç•œç¥ç«ºç­‘築縮蓄蹙蹴軸é€æ˜¥æ¤¿ç‘ƒå‡ºæœ®é»œå……忠沖蟲è¡è¡·æ‚´è†µèƒ"], +["f6a1","è´…å–å¹å˜´å¨¶å°±ç‚Šç¿ èšè„†è‡­è¶£é†‰é©Ÿé·²å´ä»„厠惻測層侈値嗤峙幟æ¥æ¢”治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸ç›ç §é‡é¼èŸ„秤稱快他咤唾墮妥惰打拖朶楕舵陀馱é§å€¬å“å•„å¼ï¨æ‰˜ï¨‚擢晫æŸæ¿æ¿¯ç¢ç¸è¨—"], +["f7a1","é¸å‘‘嘆å¦å½ˆæ†šæ­Žç˜ç‚­ç¶»èª•å¥ªè„«æŽ¢çœˆè€½è²ªå¡”æ­æ¦»å®•å¸‘湯糖蕩兌å°å¤ªæ€ æ…‹æ®†æ±°æ³°ç¬žèƒŽè‹”跆邰颱宅擇澤撑攄兎å土討慟桶洞痛筒統通堆槌腿褪退頹å¸å¥—妬投é€é¬ªæ…特闖å¡å©†å·´æŠŠæ’­æ“ºæ·æ³¢æ´¾çˆ¬ç¶ç ´ç½·èŠ­è·›é —判å‚æ¿ç‰ˆç“£è²©è¾¦éˆ‘"], +["f8a1","阪八å­æŒä½©å”„悖敗沛浿牌狽稗覇è²å½­æ¾Žçƒ¹è†¨æ„Žä¾¿åæ‰ç‰‡ç¯‡ç·¨ç¿©é鞭騙貶åªå¹³æž°èè©•å å¬–幣廢弊斃肺蔽閉陛佈包åŒåŒå’†å“ºåœƒå¸ƒæ€–抛抱æ•ï¨†æ³¡æµ¦ç–±ç ²èƒžè„¯è‹žè‘¡è’²è¢è¤’逋鋪飽鮑幅暴æ›ç€‘爆輻俵剽彪慓æ“標漂瓢票表豹飇飄驃"], +["f9a1","å“稟楓諷豊風馮彼披疲皮被é¿é™‚匹弼必泌çŒç•¢ç–‹ç­†è‹¾é¦ä¹é€¼ä¸‹ä½•åŽ¦å¤å»ˆæ˜°æ²³ç‘•è·è¦è³€é霞鰕壑學è™è¬”鶴寒æ¨æ‚旱汗漢澣瀚罕翰閑閒é™éŸ“割轄函å«å’¸å•£å–Šæª»æ¶µç·˜è‰¦éŠœé™·é¹¹åˆå“ˆç›’蛤閤闔陜亢伉姮嫦巷æ’抗æ­æ¡æ²†æ¸¯ç¼¸è‚›èˆª"], +["faa1","行降項亥å•å’³åž“奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸æè‡è¡Œäº«å‘åš®ç¦é„•éŸ¿é¤‰é¥—香噓墟虛許憲櫶ç»è»’歇險驗奕爀赫é©ä¿”峴弦懸晛泫炫玄玹ç¾çœ©ç絃絢縣舷衒見賢鉉顯孑穴血é å«Œä¿ å”夾峽挾浹狹脅脇莢é‹é °äº¨å…„刑型"], +["fba1","形泂滎瀅ç炯熒ç©ç‘©èŠèž¢è¡¡é€ˆé‚¢éŽ£é¦¨å…®å½—惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩æ·æ¹–滸澔濠濩çç‹ç¥ç‘šç“ çš“祜糊縞胡芦葫蒿虎號è´è­·è±ªéŽ¬é €é¡¥æƒ‘或酷婚æ˜æ··æ¸¾ç¿é­‚忽惚ç¬å“„弘汞泓洪烘紅虹訌鴻化和嬅樺ç«ç•µ"], +["fca1","ç¦ç¦¾èŠ±è¯è©±è­è²¨é´ï¨‹æ“´æ”«ç¢ºç¢»ç©«ä¸¸å–šå¥å®¦å¹»æ‚£æ›æ­¡æ™¥æ¡“渙煥環紈還驩鰥活滑猾è±é—Šå‡°å¹Œå¾¨æ惶愰慌晃晄榥æ³æ¹Ÿæ»‰æ½¢ç…Œç’œçš‡ç¯ç°§è’è—é‘éšé»ƒåŒ¯å›žå»»å¾Šæ¢æ‚”懷晦會檜淮澮ç°çªç¹ªè†¾èŒ´è›”誨賄劃ç²å®–æ©«é„哮嚆å­æ•ˆæ–…曉梟æ¶æ·†"], +["fda1","爻肴酵é©ä¾¯å€™åŽšåŽå¼å–‰å—…帿後朽煦ç逅勛勳塤壎焄ç†ç‡»è–°è¨“暈薨喧暄煊è±å‰å–™æ¯å½™å¾½æ®æš‰ç…‡è«±è¼éº¾ä¼‘æºçƒ‹ç•¦è™§æ¤è­Žé·¸å…‡å‡¶åŒˆæ´¶èƒ¸é»‘昕欣炘痕åƒå±¹ç´‡è¨–欠欽歆å¸æ°æ´½ç¿•èˆˆåƒ–凞喜噫å›å§¬å¬‰å¸Œæ†™æ†˜æˆ±æ™žæ›¦ç†™ç†¹ç†ºçŠ§ç¦§ç¨€ç¾²è©°"] +] diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp950.json b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp950.json new file mode 100755 index 0000000..d8bc871 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp950.json @@ -0,0 +1,177 @@ +[ +["0","\u0000",127], +["a140"," ,ã€ã€‚.‧;:?ï¼ï¸°â€¦â€¥ï¹ï¹‘﹒·﹔﹕﹖﹗|–︱—︳╴︴ï¹ï¼ˆï¼‰ï¸µï¸¶ï½›ï½ï¸·ï¸¸ã€”〕︹︺ã€ã€‘︻︼《》︽︾〈〉︿﹀「ã€ï¹ï¹‚『ã€ï¹ƒï¹„﹙﹚"], +["a1a1","﹛﹜ï¹ï¹žâ€˜â€™â€œâ€ã€ã€žâ€µâ€²ï¼ƒï¼†ï¼Šâ€»Â§ã€ƒâ—‹â—△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_Ë﹉﹊ï¹ï¹Žï¹‹ï¹Œï¹Ÿï¹ ï¹¡ï¼‹ï¼Ã—÷±√<>ï¼â‰¦â‰§â‰ âˆžâ‰’≡﹢",4,"~∩∪⊥∠∟⊿ã’ã‘∫∮∵∴♀♂⊕⊙↑↓â†â†’↖↗↙↘∥∣ï¼"], +["a240","\∕﹨$¥〒¢£%@℃℉﹩﹪﹫ã•ãŽœãŽãŽžãŽãŽ¡ãŽŽãŽã„°兙兛兞å…兡兣嗧瓩糎â–",7,"â–â–Žâ–▌▋▊▉┼┴┬┤├▔─│▕┌â”└┘╭"], +["a2a1","╮╰╯â•â•žâ•ªâ•¡â—¢â—£â—¥â—¤â•±â•²â•³ï¼",9,"â… ",9,"〡",8,"åå„å…A",25,"ï½",21], +["a340","wxyzΑ",16,"Σ",6,"α",16,"σ",6,"ã„…",10], +["a3a1","ã„",25,"˙ˉˊˇˋ"], +["a3e1","€"], +["a440","一乙ä¸ä¸ƒä¹ƒä¹äº†äºŒäººå„¿å…¥å…«å‡ åˆ€åˆåŠ›åŒ•ååœåˆä¸‰ä¸‹ä¸ˆä¸Šä¸«ä¸¸å‡¡ä¹…么也乞于亡兀刃勺åƒå‰å£åœŸå£«å¤•å¤§å¥³å­å­‘孓寸å°å°¢å°¸å±±å·å·¥å·±å·²å·³å·¾å¹²å»¾å¼‹å¼“æ‰"], +["a4a1","丑ä¸ä¸ä¸­ä¸°ä¸¹ä¹‹å°¹äºˆäº‘井互五亢ä»ä»€ä»ƒä»†ä»‡ä»ä»Šä»‹ä»„å…ƒå…內六兮公冗凶分切刈勻勾勿化匹åˆå‡å…åžåŽ„å‹åŠå壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛æ°æ°´ç«çˆªçˆ¶çˆ»ç‰‡ç‰™ç‰›çŠ¬çŽ‹ä¸™"], +["a540","世丕且丘主ä¹ä¹ä¹Žä»¥ä»˜ä»”仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北åŒä»ŸåŠå‰å¡å å¯å®åŽ»å¯å¤å³å¬å®å©å¨å¼å¸åµå«å¦åªå²å±å°å¥å­å»å››å›šå¤–"], +["a5a1","央失奴奶孕它尼巨巧左市布平幼å¼å¼˜å¼—必戊打扔扒扑斥旦朮本未末札正æ¯æ°‘æ°æ°¸æ±æ±€æ°¾çŠ¯çŽ„玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕ä¼ä¼ä¼‘ä¼ä»²ä»¶ä»»ä»°ä»³ä»½ä¼ä¼‹å…‰å…‡å…†å…ˆå…¨"], +["a640","å…±å†å†°åˆ—刑划刎刖劣匈匡匠å°å±å‰ååŒåŠååå‹å„å‘ååˆåƒåŽå†å’因回å›åœ³åœ°åœ¨åœ­åœ¬åœ¯åœ©å¤™å¤šå¤·å¤¸å¦„奸妃好她如å¦å­—存宇守宅安寺尖屹州帆并年"], +["a6a1","å¼å¼›å¿™å¿–戎戌æˆæˆæ‰£æ‰›æ‰˜æ”¶æ—©æ—¨æ—¬æ—­æ›²æ›³æœ‰æœ½æœ´æœ±æœµæ¬¡æ­¤æ­»æ°–æ±æ±—汙江池æ±æ±•æ±¡æ±›æ±æ±Žç°ç‰Ÿç‰ç™¾ç«¹ç±³ç³¸ç¼¶ç¾Šç¾½è€è€ƒè€Œè€’耳è¿è‚‰è‚‹è‚Œè‡£è‡ªè‡³è‡¼èˆŒèˆ›èˆŸè‰®è‰²è‰¾è™«è¡€è¡Œè¡£è¥¿é˜¡ä¸²äº¨ä½ä½ä½‡ä½—佞伴佛何估ä½ä½‘伽伺伸佃佔似但佣"], +["a740","作你伯低伶余ä½ä½ˆä½šå…Œå…‹å…兵冶冷別判利刪刨劫助努劬匣å³åµåå­åžå¾å¦å‘Žå§å‘†å‘ƒå³å‘ˆå‘‚å›å©å‘Šå¹å»å¸å®åµå¶å å¼å‘€å±å«åŸå¬å›ªå›°å›¤å›«åŠå‘å€å"], +["a7a1","å‡åŽåœ¾åå圻壯夾å¦å¦’妨妞妣妙妖å¦å¦¤å¦“妊妥å­å­œå­šå­›å®Œå®‹å®å°¬å±€å±å°¿å°¾å²å²‘岔岌巫希åºåº‡åºŠå»·å¼„弟彤形彷役忘忌志å¿å¿±å¿«å¿¸å¿ªæˆ’我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更æŸæŽæææ‘æœæ–æžæ‰æ†æ "], +["a840","æ“æ—æ­¥æ¯æ±‚汞沙æ²æ²ˆæ²‰æ²…沛汪決æ²æ±°æ²Œæ±¨æ²–沒汽沃汲汾汴沆汶æ²æ²”沘沂ç¶ç¼ç½ç¸ç‰¢ç‰¡ç‰ ç‹„狂玖甬甫男甸皂盯矣ç§ç§€ç¦¿ç©¶ç³»ç½•è‚–è‚“è‚肘肛肚育良芒"], +["a8a1","芋èŠè¦‹è§’言谷豆豕è²èµ¤èµ°è¶³èº«è»Šè¾›è¾°è¿‚迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯ä¾ä¾ä½³ä½¿ä½¬ä¾›ä¾‹ä¾†ä¾ƒä½°ä½µä¾ˆä½©ä½»ä¾–ä½¾ä¾ä¾‘佺兔兒兕兩具其典冽函刻券刷刺到刮制å‰åŠ¾åŠ»å’å”å“å‘å¦å·å¸å¹å–å”å—味呵"], +["a940","咖呸咕咀呻呷咄咒咆呼å’呱呶和咚呢周咋命咎固垃å·åªå©å¡å¦å¤å¼å¤œå¥‰å¥‡å¥ˆå¥„奔妾妻委妹妮姑姆å§å§å§‹å§“姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居"], +["a9a1","屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往å¾å½¿å½¼å¿å¿ å¿½å¿µå¿¿æ€æ€”怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押æ‹æ‹™æ‹‡æ‹æŠµæ‹šæŠ±æ‹˜æ‹–拗拆抬拎放斧於旺昔易昌昆昂明昀æ˜æ˜•æ˜Š"], +["aa40","昇æœæœ‹æ­æž‹æž•æ±æžœæ³æ·æž‡æžæž—æ¯æ°æ¿æž‰æ¾æžæµæžšæž“æ¼æªæ²æ¬£æ­¦æ­§æ­¿æ°“氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油æ³æ²®æ³—泅泱沿治泡泛泊沬泯泜泖泠"], +["aaa1","炕炎炒炊炙爬爭爸版牧物狀狎狙狗ç‹çŽ©çŽ¨çŽŸçŽ«çŽ¥ç”½ç–疙疚的盂盲直知矽社祀ç¥ç§‰ç§ˆç©ºç©¹ç«ºç³¾ç½”羌羋者肺肥肢肱股肫肩肴肪肯臥臾èˆèŠ³èŠèŠ™èŠ­èŠ½èŠŸèŠ¹èŠ±èŠ¬èŠ¥èŠ¯èŠ¸èŠ£èŠ°èŠ¾èŠ·è™Žè™±åˆè¡¨è»‹è¿Žè¿”近邵邸邱邶采金長門阜陀阿阻附"], +["ab40","陂隹雨é’éžäºŸäº­äº®ä¿¡ä¾µä¾¯ä¾¿ä¿ ä¿‘ä¿ä¿ä¿ƒä¾¶ä¿˜ä¿Ÿä¿Šä¿—ä¾®ä¿ä¿„係俚俎俞侷兗冒冑冠剎剃削å‰å‰Œå‰‹å‰‡å‹‡å‹‰å‹ƒå‹åŒå—å»åŽšå›å’¬å“€å’¨å“Žå“‰å’¸å’¦å’³å“‡å“‚咽咪å“"], +["aba1","哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契å¥å¥Žå¥å§œå§˜å§¿å§£å§¨å¨ƒå§¥å§ªå§šå§¦å¨å§»å­©å®£å®¦å®¤å®¢å®¥å°å±Žå±å±å±‹å³™å³’å··å¸å¸¥å¸Ÿå¹½åº åº¦å»ºå¼ˆå¼­å½¥å¾ˆå¾…徊律徇後徉怒æ€æ€ æ€¥æ€Žæ€¨ææ°æ¨æ¢æ†æƒæ¬æ«æªæ¤æ‰æ‹œæŒ–按拼拭æŒæ‹®æ‹½æŒ‡æ‹±æ‹·"], +["ac40","拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔æŸæŸ¬æž¶æž¯æŸµæŸ©æŸ¯æŸ„柑枴柚查枸æŸæŸžæŸ³æž°æŸ™æŸ¢æŸæŸ’歪殃殆段毒毗氟泉洋洲洪æµæ´¥æ´Œæ´±æ´žæ´—"], +["aca1","活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷çŠçŽ»çŽ²çç€çŽ³ç”šç”­ç•ç•Œç•Žç•‹ç–«ç–¤ç–¥ç–¢ç–£ç™¸çš†çš‡çšˆç›ˆç›†ç›ƒç›…çœç›¹ç›¸çœ‰çœ‹ç›¾ç›¼çœ‡çŸœç ‚研砌ç ç¥†ç¥‰ç¥ˆç¥‡ç¦¹ç¦ºç§‘秒秋穿çªç«¿ç«½ç±½ç´‚紅紀紉紇約紆缸美羿耄"], +["ad40","è€è€è€‘耶胖胥胚胃胄背胡胛胎胞胤èƒè‡´èˆ¢è‹§èŒƒèŒ…苣苛苦茄若茂茉苒苗英èŒè‹œè‹”苑苞苓苟苯茆è™è™¹è™»è™ºè¡è¡«è¦è§”計訂訃貞負赴赳趴è»è»Œè¿°è¿¦è¿¢è¿ªè¿¥"], +["ada1","迭迫迤迨郊郎éƒéƒƒé…‹é…Šé‡é–‚é™é™‹é™Œé™é¢é©éŸ‹éŸ­éŸ³é é¢¨é£›é£Ÿé¦–香乘亳倌å€å€£ä¿¯å€¦å€¥ä¿¸å€©å€–倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢å‡å‡Œå‡†å‡‹å‰–剜剔剛å‰åŒªå¿åŽŸåŽåŸå“¨å”å”唷哼哥哲唆哺唔哩哭員唉哮哪"], +["ae40","哦唧唇哽å”圃圄埂埔埋埃堉å¤å¥—奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展å±å³­å³½å³»å³ªå³¨å³°å³¶å´å³´å·®å¸­å¸«åº«åº­åº§å¼±å¾’徑å¾æ™"], +["aea1","æ£æ¥ææ•æ­æ©æ¯æ‚„æ‚Ÿæ‚šæ‚悔悌悅悖扇拳挈拿æŽæŒ¾æŒ¯æ•æ‚æ†ææ‰æŒºæ挽挪挫挨ææŒæ•ˆæ•‰æ–™æ—旅時晉æ™æ™ƒæ™’晌晅æ™æ›¸æœ”朕朗校核案框桓根桂桔栩梳栗桌桑栽柴æ¡æ¡€æ ¼æ¡ƒæ ªæ¡…æ “æ ˜æ¡æ®Šæ®‰æ®·æ°£æ°§æ°¨æ°¦æ°¤æ³°æµªæ¶•æ¶ˆæ¶‡æµ¦æµ¸æµ·æµ™æ¶“"], +["af40","浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈çƒçˆ¹ç‰¹ç‹¼ç‹¹ç‹½ç‹¸ç‹·çŽ†ç­ç‰ç®ç çªçžç•”ç•ç•œç•šç•™ç–¾ç—…症疲疳疽疼疹痂疸皋皰益ç›ç›Žçœ©çœŸçœ çœ¨çŸ©ç °ç §ç ¸ç ç ´ç ·"], +["afa1","砥砭砠砟砲祕ç¥ç¥ ç¥Ÿç¥–神ç¥ç¥—祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純ç´ç´•ç´šç´œç´ç´™ç´›ç¼ºç½Ÿç¾”ç¿…ç¿è€†è€˜è€•è€™è€—耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀èˆèˆªèˆ«èˆ¨èˆ¬èŠ»èŒ«è’è”èŠèŒ¸èè‰èŒµèŒ´è茲茹茶茗è€èŒ±èŒ¨èƒ"], +["b040","虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷è¢è¢‚衽衹記è¨è¨Žè¨Œè¨•è¨Šè¨—訓訖è¨è¨‘豈豺豹財貢起躬軒軔è»è¾±é€é€†è¿·é€€è¿ºè¿´é€ƒè¿½é€…迸邕郡éƒéƒ¢é…’é…酌釘é‡é‡—釜釙閃院陣陡"], +["b0a1","é™›é™é™¤é™˜é™žéš»é£¢é¦¬éª¨é«˜é¬¥é¬²é¬¼ä¹¾åºå½åœå‡åƒåŒåšå‰å¥å¶åŽå•åµå´å·åå€å¯å­å…œå†•å‡°å‰ªå‰¯å‹’務勘動åŒåŒåŒ™åŒ¿å€åŒ¾åƒæ›¼å•†å•ªå•¦å•„啞啡啃啊唱啖å•å••å”¯å•¤å”¸å”®å•œå”¬å•£å”³å•å•—圈國圉域堅堊堆埠埤基堂堵執培夠奢娶å©å©‰å©¦å©ªå©€"], +["b140","娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜å±å´‡å´†å´Žå´›å´–崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜æ¿æ‚£æ‚‰æ‚ æ‚¨æƒ‹æ‚´æƒ¦æ‚½"], +["b1a1","情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控æ²æŽ–探接æ·æ§æŽ˜æŽªæ±æŽ©æŽ‰æŽƒæŽ›æ«æŽ¨æŽ„授掙採掬排æŽæŽ€æ»æ©æ¨æºæ•æ•–救教敗啟æ•æ•˜æ••æ•”斜斛斬æ—旋旌旎æ™æ™šæ™¤æ™¨æ™¦æ™žæ›¹å‹—望æ¢æ¢¯æ¢¢æ¢“梵桿桶梱梧梗械梃棄梭梆梅梔æ¢æ¢¨æ¢Ÿæ¢¡æ¢‚欲殺"], +["b240","毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽çŠçŒœçŒ›çŒ–猓猙率ç…çŠçƒç†ç¾ç瓠瓶"], +["b2a1","瓷甜產略畦畢異ç–痔痕疵痊ç—皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜èŠè†è„¯è„–脣脫脩脰脤舂舵舷舶船莎莞莘è¸èŽ¢èŽ–莽莫莒莊莓莉莠è·è»è¼"], +["b340","莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖è¢è¢‹è¦“è¦è¨ªè¨è¨£è¨¥è¨±è¨­è¨Ÿè¨›è¨¢è±‰è±šè²©è²¬è²«è²¨è²ªè²§èµ§èµ¦è¶¾è¶ºè»›è»Ÿé€™é€é€šé€—連速é€é€é€•é€žé€ é€é€¢é€–逛途"], +["b3a1","部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢å‚傅備傑傀傖傘傚最凱割剴創剩勞å‹å‹›åšåŽ¥å•»å–€å–§å•¼å–Šå–喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙åœå ¯å ªå ´å ¤å °å ±å ¡å å  å£¹å£ºå¥ "], +["b440","婷媚婿媒媛媧孳孱寒富寓å¯å°Šå°‹å°±åµŒåµå´´åµ‡å·½å¹…帽幀幃幾廊å»å»‚廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌ææ€æ©æ‰æ†æ"], +["b4a1","æ’æ£ææ¡æ–æ­æ®æ¶æ´æªæ›æ‘’æšæ¹æ•žæ•¦æ•¢æ•£æ–‘æ–斯普晰晴晶景暑智晾晷曾替期æœæ£ºæ£•æ£ æ£˜æ£—椅棟棵森棧棹棒棲棣棋æ£æ¤æ¤’椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴æ¹æ¸ºæ¸¬æ¹ƒæ¸æ¸¾æ»‹"], +["b540","溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩çºçªç³ç¢ç¥çµç¶ç´ç¯ç›ç¦ç¨ç”¥ç”¦ç•«ç•ªç—¢ç—›ç—£ç—™ç—˜ç—žç— ç™»ç™¼çš–皓皴盜ç短ç¡ç¡¬ç¡¯ç¨ç¨ˆç¨‹ç¨…稀窘"], +["b5a1","窗窖童竣等策筆ç­ç­’ç­”ç­ç­‹ç­ç­‘粟粥絞çµçµ¨çµ•ç´«çµ®çµ²çµ¡çµ¦çµ¢çµ°çµ³å–„翔翕耋è’肅腕腔腋腑腎脹腆脾腌腓腴舒舜è©èƒè¸èè è…è‹èè¯è±è´è‘—èŠè°èŒèŒè½è²èŠè¸èŽè„èœè‡è”èŸè™›è›Ÿè›™è›­è›”蛛蛤è›è›žè¡—è£è£‚袱覃視註詠評詞証è©"], +["b640","詔詛è©è©†è¨´è¨ºè¨¶è©–象貂貯貼貳貽è³è²»è³€è²´è²·è²¶è²¿è²¸è¶Šè¶…è¶è·Žè·è·‹è·šè·‘跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥é‡éˆ”鈕鈣鈉鈞éˆéˆéˆ‡éˆ‘é–”é–é–‹é–‘"], +["b6a1","間閒閎隊階隋陽隅隆éšé™²éš„é›é›…雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃é»é»‘亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧å«å«‰å«Œåª¾åª½åª¼"], +["b740","媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚æ„慈感想愛惹æ„愈慎慌慄æ…愾愴愧æ„愆愷戡戢æ“æ¾æžæªæ­æ½æ¬ææœæ”ææ¶æ–æ—æ†æ•¬æ–Ÿæ–°æš—暉暇暈暖暄暘æšæœƒæ¦”業"], +["b7a1","楚楷楠楔極椰概楊楨楫楞楓楹榆æ¥æ¥£æ¥›æ­‡æ­²æ¯€æ®¿æ¯“毽溢溯滓溶滂æºæºæ»‡æ»…溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷ç…猿猾瑯瑚瑕瑟瑞ç‘ç¿ç‘™ç‘›ç‘œç•¶ç•¸ç˜€ç—°ç˜ç—²ç—±ç—ºç—¿ç—´ç—³ç›žç›Ÿç›ç«ç¦çžç£"], +["b840","ç¹çªç¬çœç¥ç¨ç¢çŸ®ç¢Žç¢°ç¢—碘碌碉硼碑碓硿祺祿ç¦è¬ç¦½ç¨œç¨šç¨ ç¨”稟稞窟窠筷節筠筮筧粱粳粵經絹綑ç¶ç¶çµ›ç½®ç½©ç½ªç½²ç¾©ç¾¨ç¾¤è–è˜è‚†è‚„腱腰腸腥腮腳腫"], +["b8a1","腹腺腦舅艇蒂葷è½è±è‘µè‘¦è‘«è‘‰è‘¬è‘›è¼èµè‘¡è‘£è‘©è‘­è‘†è™žè™œè™Ÿè›¹èœ“蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘è£è£¡è£Šè£•è£’覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊"], +["b940","辟農é‹éŠé“é‚é”逼é•éé‡ééŽéé‘逾é鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉é‰é‰…鈹鈿鉚閘隘隔隕é›é›‹é›‰é›Šé›·é›»é›¹é›¶é–é´é¶é é ‘頓頊頒頌飼飴"], +["b9a1","飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕åƒåƒ‘僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉å˜å˜Žå—·å˜–嘟嘈å˜å—¶åœ˜åœ–塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察å°å±¢å¶„嶇幛幣幕幗幔廓廖弊彆彰徹慇"], +["ba40","愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧æ´æ‘­æ‘»æ•²æ–¡æ——旖暢暨æšæ¦œæ¦¨æ¦•æ§æ¦®æ§“構榛榷榻榫榴æ§æ§æ¦­æ§Œæ¦¦æ§ƒæ¦£æ­‰æ­Œæ°³æ¼³æ¼”滾漓滴漩漾漠漬æ¼æ¼‚æ¼¢"], +["baa1","滿滯漆漱漸漲漣漕漫漯澈漪滬æ¼æ»²æ»Œæ»·ç†”熙煽熊熄熒爾犒犖ç„ç瑤瑣瑪瑰瑭甄疑瘧ç˜ç˜‹ç˜‰ç˜“盡監瞄ç½ç¿ç¡ç£ç¢Ÿç¢§ç¢³ç¢©ç¢£ç¦Žç¦ç¦ç¨®ç¨±çªªçª©ç«­ç«¯ç®¡ç®•ç®‹ç­µç®—ç®ç®”ç®ç®¸ç®‡ç®„粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬"], +["bb40","ç½°ç¿ ç¿¡ç¿Ÿèžèšè‚‡è…膀è†è†ˆè†Šè…¿è†‚臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓è’蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘è•èœ·èœ©è£³è¤‚裴裹裸製裨褚裯誦誌語誣èªèª¡èª“誤"], +["bba1","說誥誨誘誑誚誧豪è²è²Œè³“賑賒赫趙趕跼輔輒輕輓辣é é˜éœé£é™éžé¢éé›é„™é„˜é„žé…µé…¸é…·é…´é‰¸éŠ€éŠ…銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需é¼éž…韶頗領颯颱餃餅餌餉é§éª¯éª°é«¦é­é­‚鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜"], +["bc40","劇劈劉åŠåŠŠå‹°åŽ²å˜®å˜»å˜¹å˜²å˜¿å˜´å˜©å™“噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履å¶å¶”幢幟幡廢廚廟å»å»£å» å½ˆå½±å¾·å¾µæ…¶æ…§æ…®æ…慕憂"], +["bca1","慼慰慫慾憧æ†æ†«æ†Žæ†¬æ†šæ†¤æ†”憮戮摩摯摹撞撲撈æ’撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨æ¨æ¨žæ¨™æ§½æ¨¡æ¨“樊槳樂樅槭樑æ­æ­Žæ®¤æ¯…毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛çŽç—ç‘©ç’‹ç’ƒ"], +["bd40","瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼ç£ç¨¿ç¨¼ç©€ç¨½ç¨·ç¨»çª¯çª®ç®­ç®±ç¯„箴篆篇ç¯ç® ç¯Œç³Šç· ç·´ç·¯ç·»ç·˜ç·¬ç·ç·¨ç·£ç·šç·žç·©ç¶žç·™ç·²ç·¹ç½µç½·ç¾¯"], +["bda1","翩耦膛膜è†è† è†šè†˜è”—蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂è´è¶è è¦è¸è¨è™è—èŒè“è¡›è¡è¤è¤‡è¤’褓褕褊誼諒談諄誕請諸課諉諂調誰論è«èª¶èª¹è«›è±Œè±Žè±¬è³ è³žè³¦è³¤è³¬è³­è³¢è³£è³œè³ªè³¡èµ­è¶Ÿè¶£è¸«è¸è¸è¸¢è¸è¸©è¸Ÿè¸¡è¸žèººè¼è¼›è¼Ÿè¼©è¼¦è¼ªè¼œè¼ž"], +["be40","è¼¥é©é®é¨é­é·é„°é„­é„§é„±é†‡é†‰é†‹é†ƒé‹…銻銷鋪銬鋤é‹éŠ³éŠ¼é‹’鋇鋰銲閭閱霄霆震霉é éžéž‹éžé ¡é «é œé¢³é¤Šé¤“餒餘é§é§é§Ÿé§›é§‘駕駒駙骷髮髯鬧魅魄魷魯鴆鴉"], +["bea1","鴃麩麾黎墨齒儒儘儔å„儕冀冪å‡åŠ‘劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶å£å¢¾å£‡å£…奮å¬å¬´å­¸å¯°å°Žå½Šæ†²æ†‘憩憊æ‡æ†¶æ†¾æ‡Šæ‡ˆæˆ°æ“…æ“擋撻撼據擄擇擂æ“撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡"], +["bf40","濃澤æ¿æ¾§æ¾³æ¿€æ¾¹æ¾¶æ¾¦æ¾ æ¾´ç†¾ç‡‰ç‡ç‡’燈燕熹燎燙燜燃燄ç¨ç’œç’£ç’˜ç’Ÿç’žç“¢ç”Œç”瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦ç©ç©Žç©†ç©Œç©‹çªºç¯™ç°‘築篤篛篡篩篦糕糖縊"], +["bfa1","縑縈縛縣縞ç¸ç¸‰ç¸ç½¹ç¾²ç¿°ç¿±ç¿®è€¨è†³è†©è†¨è‡»èˆˆè‰˜è‰™è•Šè•™è•ˆè•¨è•©è•ƒè•‰è•­è•ªè•žèžƒèžŸèžžèž¢èžè¡¡è¤ªè¤²è¤¥è¤«è¤¡è¦ªè¦¦è«¦è«ºè««è«±è¬€è«œè«§è«®è«¾è¬è¬‚諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦éµé´é¸é²é¼éºé„´é†’錠錶鋸錳錯錢鋼錫錄錚"], +["c040","éŒéŒ¦éŒ¡éŒ•éŒ®éŒ™é–»éš§éš¨éšªé›•éœŽéœ‘霖éœéœ“éœé›éœé¦éž˜é °é ¸é »é ·é ­é ¹é ¤é¤é¤¨é¤žé¤›é¤¡é¤šé§­é§¢é§±éª¸éª¼é«»é«­é¬¨é®‘鴕鴣鴦鴨鴒鴛默黔é¾é¾œå„ªå„Ÿå„¡å„²å‹µåšŽåš€åšåš…嚇"], +["c0a1","åšå£•å£“壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗æªæª æ­œæ®®æ¯šæ°ˆæ¿˜æ¿±æ¿Ÿæ¿ æ¿›æ¿¤æ¿«æ¿¯æ¾€æ¿¬æ¿¡æ¿©æ¿•æ¿®æ¿°ç‡§ç‡Ÿç‡®ç‡¦ç‡¥ç‡­ç‡¬ç‡´ç‡ çˆµç‰†ç°ç²ç’©ç’°ç’¦ç’¨ç™†ç™‚癌盪瞳瞪瞰瞬"], +["c140","瞧瞭矯磷磺磴磯ç¤ç¦§ç¦ªç©—窿簇ç°ç¯¾ç¯·ç°Œç¯ ç³ ç³œç³žç³¢ç³Ÿç³™ç³ç¸®ç¸¾ç¹†ç¸·ç¸²ç¹ƒç¸«ç¸½ç¸±ç¹…ç¹ç¸´ç¸¹ç¹ˆç¸µç¸¿ç¸¯ç½„翳翼è±è²è°è¯è³è‡†è‡ƒè†ºè‡‚臀膿膽臉膾臨舉艱薪"], +["c1a1","薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠è¬è¬„è¬è±è°¿è±³è³ºè³½è³¼è³¸è³»è¶¨è¹‰è¹‹è¹ˆè¹Šè½„輾轂轅輿é¿é½é‚„é‚邂邀鄹醣醞醜é鎂錨éµéŠé¥é‹éŒ˜é¾é¬é›é°éšé”闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵é¨"], +["c240","駿鮮鮫鮪鮭鴻鴿麋é»é»žé»œé»é»›é¼¾é½‹å¢åš•åš®å£™å£˜å¬¸å½æ‡£æˆ³æ“´æ“²æ“¾æ”†æ“ºæ“»æ“·æ–·æ›œæœ¦æª³æª¬æ«ƒæª»æª¸æ«‚檮檯歟歸殯瀉瀋濾瀆濺瀑ç€ç‡»ç‡¼ç‡¾ç‡¸ç·çµç’§ç’¿ç”•ç™–癘"], +["c2a1","癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻è·è¶è‡è‡èˆŠè—è–©è—è—藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫è±è´…蹙蹣蹦蹤蹟蹕軀轉è½é‚‡é‚ƒé‚ˆé†«é†¬é‡éŽ”鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖é—闕離雜雙雛雞霤鞣鞦"], +["c340","鞭韹é¡é¡é¡Œé¡Žé¡“颺餾餿餽餮馥騎é«é¬ƒé¬†é­é­Žé­é¯Šé¯‰é¯½é¯ˆé¯€éµ‘éµéµ é» é¼•é¼¬å„³åš¥å£žå£Ÿå£¢å¯µé¾å»¬æ‡²æ‡·æ‡¶æ‡µæ”€æ”æ› æ›æ«¥æ«æ«šæ«“瀛瀟瀨瀚ç€ç€•ç€˜çˆ†çˆç‰˜çŠ¢ç¸"], +["c3a1","çºç’½ç“Šç“£ç–‡ç–†ç™Ÿç™¡çŸ‡ç¤™ç¦±ç©«ç©©ç°¾ç°¿ç°¸ç°½ç°·ç±€ç¹«ç¹­ç¹¹ç¹©ç¹ªç¾…繳羶羹羸臘藩è—藪藕藤藥藷蟻蠅è èŸ¹èŸ¾è¥ è¥Ÿè¥–襞è­è­œè­˜è­‰è­šè­Žè­è­†è­™è´ˆè´Šè¹¼è¹²èº‡è¹¶è¹¬è¹ºè¹´è½”轎辭邊邋醱醮é¡é‘éŸéƒéˆéœéé–é¢éé˜é¤é—é¨é—œéš´é›£éœªéœ§é¡éŸœéŸ»é¡ž"], +["c440","願顛颼饅饉騖騙é¬é¯¨é¯§é¯–鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲çˆç»ç“癢癥礦礪礬礫竇競籌籃ç±ç³¯ç³°è¾®ç¹½ç¹¼"], +["c4a1","纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫è´è´èº‰èºèº…躂醴釋é˜éƒé½é—¡éœ°é£„饒饑馨騫騰騷騵鰓é°é¹¹éºµé»¨é¼¯é½Ÿé½£é½¡å„·å„¸å›å›€å›‚夔屬å·æ‡¼æ‡¾æ”攜斕曩櫻欄櫺殲çŒçˆ›çŠ§ç“–瓔癩矓ç±çºçºŒç¾¼è˜—蘭蘚蠣蠢蠡蠟襪襬覽譴"], +["c540","護譽贓躊èºèº‹è½Ÿè¾¯é†ºé®é³éµéºé¸é²é«é—¢éœ¸éœ¹éœ²éŸ¿é¡§é¡¥é¥—驅驃驀騾é«é­”魑鰭鰥鶯鶴鷂鶸éºé»¯é¼™é½œé½¦é½§å„¼å„»å›ˆå›Šå›‰å­¿å·”巒彎懿攤權歡ç‘ç˜çŽ€ç“¤ç–Šç™®ç™¬"], +["c5a1","禳籠籟è¾è½è‡Ÿè¥²è¥¯è§¼è®€è´–贗躑躓轡酈鑄鑑鑒霽霾韃éŸé¡«é¥•é©•é©é«’鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬æ¬ç“šç«Šç±¤ç±£ç±¥çº“纖纔臢蘸蘿蠱變é‚é‚鑣鑠鑤é¨é¡¯é¥œé©šé©›é©—髓體髑鱔鱗鱖鷥麟黴囑壩攬çžç™±ç™²çŸ—ç½ç¾ˆè ¶è ¹è¡¢è®“è®’"], +["c640","讖艷贛釀鑪é‚éˆé„韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖ç£ç±¬ç±®è »è§€èº¡é‡é‘²é‘°é¡±é¥žé«–鬣黌ç¤çŸšè®šé‘·éŸ‰é©¢é©¥çºœè®œèºªé‡…鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲"], +["c940","乂乜凵匚厂万丌乇äºå›—兀屮彳ä¸å†‡ä¸Žä¸®äº“仂仉仈冘勼å¬åŽ¹åœ å¤ƒå¤¬å°å·¿æ—¡æ®³æ¯Œæ°”爿丱丼仨仜仩仡ä»ä»šåˆŒåŒœåŒåœ¢åœ£å¤—夯å®å®„尒尻屴屳帄庀庂忉戉æ‰æ°•"], +["c9a1","氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈ä¼ä¼‚伅伢伓伄仴伒冱刓刉åˆåŠ¦åŒ¢åŒŸå厊å‡å›¡å›Ÿåœ®åœªåœ´å¤¼å¦€å¥¼å¦…奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔å¿æ‰œæ‰žæ‰¤æ‰¡æ‰¦æ‰¢æ‰™æ‰ æ‰šæ‰¥æ—¯æ—®æœ¾æœ¹æœ¸æœ»æœºæœ¿æœ¼æœ³æ°˜æ±†æ±’汜æ±æ±Šæ±”汋"], +["ca40","汌ç±ç‰žçŠ´çŠµçŽŽç”ªç™¿ç©µç½‘艸艼芀艽艿è™è¥¾é‚™é‚—邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟ä½ä½˜ä¼­ä¼³ä¼¿ä½¡å†å†¹åˆœåˆžåˆ¡åŠ­åŠ®åŒ‰å£å²åŽŽåŽå°å·åªå‘”å‘…å™åœå¥å˜"], +["caa1","å½å‘å‘å¨å¤å‘‡å›®å›§å›¥åå…åŒå‰å‹å’夆奀妦妘妠妗妎妢å¦å¦å¦§å¦¡å®Žå®’尨尪å²å²å²ˆå²‹å²‰å²’岊岆岓岕巠帊帎庋庉庌庈åºå¼…å¼å½¸å½¶å¿’å¿‘å¿å¿­å¿¨å¿®å¿³å¿¡å¿¤å¿£å¿ºå¿¯å¿·å¿»æ€€å¿´æˆºæŠƒæŠŒæŠŽæŠæŠ”抇扱扻扺扰æŠæŠˆæ‰·æ‰½æ‰²æ‰´æ”·æ—°æ—´æ—³æ—²æ—µæ…æ‡"], +["cb40","æ™æ•æŒæˆæææšæ‹æ¯æ°™æ°šæ±¸æ±§æ±«æ²„沋æ²æ±±æ±¯æ±©æ²šæ±­æ²‡æ²•æ²œæ±¦æ±³æ±¥æ±»æ²Žç´çºç‰£çŠ¿çŠ½ç‹ƒç‹†ç‹çŠºç‹…玕玗玓玔玒町甹疔疕çšç¤½è€´è‚•è‚™è‚è‚’è‚œèŠèŠèŠ…芎芑芓"], +["cba1","芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹ä¾ä½¸ä¾ä¾œä¾”侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿å’咑咂咈呫呺呾呥呬呴呦å’呯呡呠咘呣呧呤囷囹å¯å²å­å«å±å°å¶åž€åµå»å³å´å¢"], +["cc40","å¨å½å¤Œå¥…妵妺å§å§Žå¦²å§Œå§å¦¶å¦¼å§ƒå§–妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧å²å²¥å²¶å²°å²¦å¸—帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋"], +["cca1","怴怊怗怳怚怞怬怢æ€æ€æ€®æ€“怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋æ˜æ˜…旽昑æ˜æ›¶æœŠæž…æ¬æžŽæž’æ¶æ»æž˜æž†æž„æ´æžæžŒæºæžŸæž‘枙枃æ½æžæ¸æ¹æž”欥殀歾毞æ°æ²“泬泫泮泙沶泔沭泧沷æ³æ³‚沺泃泆泭泲"], +["cd40","æ³’æ³æ²´æ²Šæ²æ²€æ³žæ³€æ´°æ³æ³‡æ²°æ³¹æ³æ³©æ³‘炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬çŽç“瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺"], +["cda1","矷祂礿秅穸穻竻籵糽耵è‚肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓è¿è¿–迕迗邲邴邯邳邰阹阽阼阺陃ä¿ä¿…俓侲俉俋ä¿ä¿”俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽å¼åŽ—厖厙厘咺咡咭咥å“"], +["ce40","哃èŒå’·å’®å“–咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗åžåž›åž”垘åžåž™åž¥åžšåž•å£´å¤å¥“姡姞姮娀姱å§å§ºå§½å§¼å§¶å§¤å§²å§·å§›å§©å§³å§µå§ å§¾å§´å§­å®¨å±Œå³å³˜å³Œå³—峋峛"], +["cea1","峞峚峉峇峊峖峓峔å³å³ˆå³†å³Žå³Ÿå³¸å·¹å¸¡å¸¢å¸£å¸ å¸¤åº°åº¤åº¢åº›åº£åº¥å¼‡å¼®å½–徆怷怹æ”æ²æžæ…æ“æ‡æ‰æ›æŒæ€æ‚æŸæ€¤æ„æ˜æ¦æ®æ‰‚扃æ‹æŒæŒ‹æ‹µæŒŽæŒƒæ‹«æ‹¹æŒæŒŒæ‹¸æ‹¶æŒ€æŒ“挔拺挕拻拰æ•æ•ƒæ–ªæ–¿æ˜¶æ˜¡æ˜²æ˜µæ˜œæ˜¦æ˜¢æ˜³æ˜«æ˜ºæ˜æ˜´æ˜¹æ˜®æœæœæŸæŸ²æŸˆæžº"], +["cf40","柜枻柸柘柀枷柅柫柤柟枵æŸæž³æŸ·æŸ¶æŸ®æŸ£æŸ‚枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀æ´æµ‚"], +["cfa1","æ´æ´˜æ´·æ´ƒæ´æµ€æ´‡æ´ æ´¬æ´ˆæ´¢æ´‰æ´ç‚·ç‚Ÿç‚¾ç‚±ç‚°ç‚¡ç‚´ç‚µç‚©ç‰ç‰‰ç‰Šç‰¬ç‰°ç‰³ç‰®ç‹Šç‹¤ç‹¨ç‹«ç‹Ÿç‹ªç‹¦ç‹£çŽ…çŒç‚çˆç…玹玶玵玴ç«çŽ¿ç‡çŽ¾çƒç†çŽ¸ç‹ç“¬ç“®ç”®ç•‡ç•ˆç–§ç–ªç™¹ç›„眈眃眄眅眊盷盻盺矧矨砆砑砒砅ç ç ç Žç ‰ç ƒç “祊祌祋祅祄秕ç§ç§ç§–秎窀"], +["d040","穾竑笀ç¬ç±ºç±¸ç±¹ç±¿ç²€ç²ç´ƒç´ˆç´ç½˜ç¾‘ç¾ç¾¾è€‡è€Žè€è€”耷胘胇胠胑胈胂èƒèƒ…胣胙胜胊胕胉èƒèƒ—胦èƒè‡¿èˆ¡èŠ”苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪"], +["d0a1","苤苠苺苳苭虷虴虼虳è¡è¡Žè¡§è¡ªè¡©è§“訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔é™é™‘陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢å‹åŒŽåŽžå”¦å“¢å”—唒哧哳哤唚哿唄唈哫唑唅哱"], +["d140","唊哻哷哸哠唎唃唋åœåœ‚埌堲埕埒垺埆垽垼垸垶垿埇åŸåž¹åŸå¤Žå¥Šå¨™å¨–娭娮娕å¨å¨—娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧ææšæ§"], +["d1a1","æ悢悈悀悒æ‚æ‚悃悕悛悗悇悜悎戙扆拲æŒæ–挬æ„æ…挶æƒæ¤æŒ¹æ‹æŠæŒ¼æŒ©æ挴æ˜æ”æ™æŒ­æ‡æŒ³æšæ‘挸æ—æ€æˆæ•Šæ•†æ—†æ—ƒæ—„旂晊晟晇晑朒朓栟栚桉栲栳栻桋æ¡æ –栱栜栵栫栭栯桎桄栴æ æ ’栔栦栨栮æ¡æ ºæ ¥æ  æ¬¬æ¬¯æ¬­æ¬±æ¬´æ­­è‚‚殈毦毤"], +["d240","毨毣毢毧氥浺浣浤浶æ´æµ¡æ¶’浘浢浭浯涑æ¶æ·¯æµ¿æ¶†æµžæµ§æµ æ¶—浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵æ¶çƒœçƒ“烑çƒçƒ‹ç¼¹çƒ¢çƒ—烒烞烠烔çƒçƒ…烆烇烚烎烡牂牸"], +["d2a1","牷牶猀狺狴狾狶狳狻çŒç“ç™ç¥ç–玼ç§ç£ç©çœç’ç›ç”ççšç—ç˜ç¨ç“žç“Ÿç“´ç“µç”¡ç•›ç•Ÿç–°ç—疻痄痀疿疶疺皊盉çœçœ›çœçœ“眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛ç¥ç¥œç¥“祒祑秫秬秠秮秭秪秜秞ç§çª†çª‰çª…窋窌窊窇竘ç¬"], +["d340","笄笓笅ç¬ç¬ˆç¬Šç¬Žç¬‰ç¬’粄粑粊粌粈ç²ç²…ç´žç´ç´‘紎紘紖紓紟紒ç´ç´Œç½œç½¡ç½žç½ ç½ç½›ç¾–羒翃翂翀耖耾耹胺胲胹胵è„胻脀èˆèˆ¯èˆ¥èŒ³èŒ­è„茙è‘茥è–茿è茦茜茢"], +["d3a1","è‚èŽèŒ›èŒªèŒˆèŒ¼è茖茤茠茷茯茩è‡è…èŒè“茞茬è‹èŒ§èˆè™“虒蚢蚨蚖èšèš‘蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎èšèšèš”衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤é…"], +["d440","é…Žé…釕釢釚陜陟隼飣髟鬯乿å°åªå¡åžå å“å‹åå²åˆååå›åŠå¢å€•å…åŸå©å«å£å¤å†å€å®å³å—å‘å‡å‰«å‰­å‰¬å‰®å‹–勓匭厜啵啶唼å•å•å”´å”ªå•‘啢唶唵唰啒啅"], +["d4a1","唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳åŸå ‡åŸ®åŸ£åŸ²åŸ¥åŸ¬åŸ¡å ŽåŸ¼å åŸ§å å ŒåŸ±åŸ©åŸ°å å „奜婠婘婕婧婞娸娵婭å©å©Ÿå©¥å©¬å©“婤婗婃å©å©’婄婛婈媎娾å©å¨¹å©Œå©°å©©å©‡å©‘婖婂婜孲孮å¯å¯€å±™å´žå´‹å´å´šå´ å´Œå´¨å´å´¦å´¥å´"], +["d540","崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊æ‚悆悾悰悺惓惔æƒæƒ¤æƒ™æƒæƒˆæ‚±æƒ›æ‚·æƒŠæ‚¿æƒƒæƒæƒ€æŒ²æ¥æŽŠæŽ‚æ½æŽ½æŽžæŽ­æŽæŽ—掫掎æ¯æŽ‡æŽæ®æŽ¯æµæŽœæ­æŽ®æ¼æŽ¤æŒ»æŽŸ"], +["d5a1","æ¸æŽ…æŽæŽ‘æŽæ°æ•“æ—晥晡晛晙晜晢朘桹梇æ¢æ¢œæ¡­æ¡®æ¢®æ¢«æ¥–桯梣梬梩桵桴梲æ¢æ¡·æ¢’桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑æ®æ®æ®Žæ®Œæ°ªæ·€æ¶«æ¶´æ¶³æ¹´æ¶¬æ·©æ·¢æ¶·æ·¶æ·”渀淈淠淟淖涾淥淜æ·æ·›æ·´æ·Šæ¶½æ·­æ·°æ¶ºæ·•æ·‚æ·æ·‰"], +["d640","æ·æ·²æ·“淽淗æ·æ·£æ¶»çƒºç„烷焗烴焌烰焄烳ç„烼烿焆焓焀烸烶焋焂焎牾牻牼牿çŒçŒ—猇猑猘猊猈狿çŒçŒžçŽˆç¶ç¸çµç„çç½ç‡ç€çºç¼ç¿çŒç‹ç´çˆç•¤ç•£ç—Žç—’ç—"], +["d6a1","痋痌痑ç—çšçš‰ç›“眹眯眭眱眲眴眳眽眥眻眵硈硒硉ç¡ç¡Šç¡Œç ¦ç¡…ç¡ç¥¤ç¥§ç¥©ç¥ªç¥£ç¥«ç¥¡ç¦»ç§ºç§¸ç§¶ç§·çªçª”çªç¬µç­‡ç¬´ç¬¥ç¬°ç¬¢ç¬¤ç¬³ç¬˜ç¬ªç¬ç¬±ç¬«ç¬­ç¬¯ç¬²ç¬¸ç¬šç¬£ç²”粘粖粣紵紽紸紶紺絅紬紩çµçµ‡ç´¾ç´¿çµŠç´»ç´¨ç½£ç¾•ç¾œç¾ç¾›ç¿Šç¿‹ç¿ç¿ç¿‘翇ç¿ç¿‰è€Ÿ"], +["d740","耞耛è‡èƒèˆè„˜è„¥è„™è„›è„­è„Ÿè„¬è„žè„¡è„•è„§è„脢舑舸舳舺舴舲艴èŽèŽ£èŽ¨èŽèºè³èŽ¤è´èŽèŽèŽ•èŽ™èµèŽ”莩è½èŽƒèŽŒèŽèŽ›èŽªèŽ‹è¾èŽ¥èŽ¯èŽˆèŽ—莰è¿èŽ¦èŽ‡èŽ®è¶èŽšè™™è™–èš¿èš·"], +["d7a1","蛂è›è›…蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜è±è±½è²¥èµ½èµ»èµ¹è¶¼è·‚趹趿è·è»˜è»žè»è»œè»—軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪"], +["d840","釫釷釨釮镺閆閈陼陭陫陱陯隿éªé „飥馗傛傕傔傞傋傣傃傌傎å‚å¨å‚œå‚’傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈å–å–µå–喣喒喤啽喌喦啿喕喡喎圌堩堷"], +["d8a1","堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜åªåª“åªå¯ªå¯å¯‹å¯”寑寊寎尌尰崷嵃嵫åµåµ‹å´¿å´µåµ‘嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄å¹å½˜å¾¦å¾¥å¾«æƒ‰æ‚¹æƒŒæƒ¢æƒŽæƒ„æ„”"], +["d940","惲愊愖愅惵愓惸惼惾æƒæ„ƒæ„˜æ„æ„惿愄愋扊掔掱掰æŽæ¥æ¨æ¯æƒæ’æ³æŠæ æ¶æ•æ²æµæ‘¡æŸæŽ¾ææœæ„æ˜æ“æ‚æ‡æŒæ‹æˆæ°æ—æ™æ”²æ•§æ•ªæ•¤æ•œæ•¨æ•¥æ–Œæ–æ–žæ–®æ—æ—’"], +["d9a1","晼晬晻暀晱晹晪晲æœæ¤Œæ£“椄棜椪棬棪棱æ¤æ£–棷棫棤棶椓æ¤æ£³æ£¡æ¤‡æ£Œæ¤ˆæ¥°æ¢´æ¤‘棯棆椔棸æ£æ£½æ£¼æ£¨æ¤‹æ¤Šæ¤—棎棈æ£æ£žæ£¦æ£´æ£‘椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿æ¹æ¹æ¹³æ¸œæ¸³æ¹‹æ¹€æ¹‘渻渃渮湞"], +["da40","湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌ç®ç¬ç°ç«ç–"], +["daa1","çšç¡ç­ç±ç¤ç£çç©ç ç²ç“»ç”¯ç•¯ç•¬ç—§ç—šç—¡ç—¦ç—痟痤痗皕皒盚ç†ç‡ç„çç…çŠçŽç‹çŒçŸžçŸ¬ç¡ ç¡¤ç¡¥ç¡œç¡­ç¡±ç¡ªç¡®ç¡°ç¡©ç¡¨ç¡žç¡¢ç¥´ç¥³ç¥²ç¥°ç¨‚稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪çµçµ­çµœçµ«çµ’絔絩絑絟絎缾缿罥"], +["db40","罦羢羠羡翗è‘èè胾胔腃腊腒è…腇脽è…脺臦臮臷臸臹舄舼舽舿艵茻èè¹è£è€è¨è’è§è¤è¼è¶èè†èˆè«è£èŽ¿èèè¥è˜è¿è¡è‹èŽè–èµè‰è‰èèžè‘è†è‚è³"], +["dba1","è•èºè‡è‘èªè“èƒè¬è®è„è»è—è¢è›è›è¾è›˜è›¢è›¦è›“蛣蛚蛪è›è›«è›œè›¬è›©è›—蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲è¤è£‰è¦•è¦˜è¦—è§è§šè§›è©Žè©è¨¹è©™è©€è©—詘詄詅詒詈詑詊詌è©è±Ÿè²è²€è²ºè²¾è²°è²¹è²µè¶„趀趉跘跓è·è·‡è·–è·œè·è·•è·™è·ˆè·—跅軯軷軺"], +["dc40","軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻é„鄀鄇鄅鄃酡酤酟酢酠éˆéˆŠéˆ¥éˆƒéˆšéˆ¦éˆéˆŒéˆ€éˆ’釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻é–é–Œé–隇陾隈"], +["dca1","隉隃隀雂雈雃雱雰é¬é°é®é ‡é¢©é£«é³¦é»¹äºƒäº„亶傽傿僆傮僄僊傴僈僂傰åƒå‚ºå‚±åƒ‹åƒ‰å‚¶å‚¸å‡—剺剸剻剼嗃嗛嗌å—å—‹å—Šå—嗀嗔嗄嗩喿嗒å–å—嗕嗢嗖嗈嗲å—嗙嗂圔塓塨塤å¡å¡å¡‰å¡¯å¡•å¡Žå¡å¡™å¡¥å¡›å ½å¡£å¡±å£¼å«‡å«„嫋媺媸媱媵媰媿嫈媻嫆"], +["dd40","媷嫀嫊媴媶å«åª¹åªå¯–寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰å¹å¹Žå¹Šå¹å¹‹å»…廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯æ…愩慀戠酨戣戥戤æ…æ±æ«ææ’æ‰æ æ¤"], +["dda1","æ³æ‘ƒæŸæ•æ˜æ¹æ·æ¢æ£æŒæ¦æ°æ¨æ‘æµæ¯æŠæšæ‘€æ¥æ§æ‹æ§æ›æ®æ¡æŽæ•¯æ–’旓暆暌暕æšæš‹æšŠæš™æš”晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘æ¥æ¥´æ¥Œæ¤»æ¥‹æ¤·æ¥œæ¥æ¥‘椲楒椯楻椼歆歅歃歂歈æ­æ®›ï¨æ¯»æ¯¼"], +["de40","毹毷毸溛滖滈æºæ»€æºŸæº“溔溠溱溹滆滒溽æ»æºžæ»‰æº·æº°æ»æº¦æ»æº²æº¾æ»ƒæ»œæ»˜æº™æº’溎æºæº¤æº¡æº¿æº³æ»æ»Šæº—溮溣煇煔煒煣煠ç…ç…煢煲煸煪煡煂煘煃煋煰煟ç…ç…“"], +["dea1","ç…„ç…ç…šç‰çŠçŠŒçŠ‘çŠçŠŽçŒ¼ç‚猻猺ç€çŠç‰ç‘„ç‘Šç‘‹ç‘’ç‘‘ç‘—ç‘€ç‘ç‘瑎瑂瑆ç‘瑔瓡瓿瓾瓽ç”畹畷榃痯ç˜ç˜ƒç—·ç—¾ç—¼ç—¹ç—¸ç˜ç—»ç—¶ç—­ç—µç—½çš™çšµç›ç•çŸç ç’ç–çšç©ç§ç”ç™ç­çŸ ç¢‡ç¢šç¢”ç¢ç¢„碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓"], +["df40","稛ç¨çª£çª¢çªžç««ç­¦ç­¤ç­­ç­´ç­©ç­²ç­¥ç­³ç­±ç­°ç­¡ç­¸ç­¶ç­£ç²²ç²´ç²¯ç¶ˆç¶†ç¶€ç¶çµ¿ç¶…絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯"], +["dfa1","è…„è…¡èˆè‰‰è‰„艀艂艅蓱è¿è‘–葶葹è’è’葥葑葀蒆葧è°è‘葽葚葙葴葳è‘蔇葞è·èºè´è‘ºè‘ƒè‘¸è²è‘…è©è™è‘‹è¯è‘‚è­è‘Ÿè‘°è¹è‘Žè‘Œè‘’葯蓅蒎è»è‘‡è¶è³è‘¨è‘¾è‘„è«è‘ è‘”è‘®è‘蜋蜄蛷蜌蛺蛖蛵è蛸蜎蜉èœè›¶èœèœ…裖裋è£è£Žè£žè£›è£šè£Œè£è¦…覛觟觥觤"], +["e040","觡觠觢觜触詶誆詿詡訿詷誂誄詵誃èªè©´è©ºè°¼è±‹è±Šè±¥è±¤è±¦è²†è²„貅賌赨赩趑趌趎è¶è¶è¶“趔è¶è¶’跰跠跬跱跮è·è·©è·£è·¢è·§è·²è·«è·´è¼†è»¿è¼è¼€è¼…輇輈輂輋é’逿"], +["e0a1","é„é‰é€½é„é„é„鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬é‰é‰ é‰§é‰¯éˆ¶é‰¡é‰°éˆ±é‰”鉣é‰é‰²é‰Žé‰“鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵é³é·é¸é²é é é Žé¢¬é£¶é£¹é¦¯é¦²é¦°é¦µéª­éª«é­›é³ªé³­é³§éº€é»½åƒ¦åƒ”僗僨僳僛僪åƒåƒ¤åƒ“僬僰僯僣僠"], +["e140","凘劀åŠå‹©å‹«åŒ°åŽ¬å˜§å˜•å˜Œå˜’å—¼å˜å˜œå˜å˜“嘂嗺å˜å˜„嗿嗹墉塼å¢å¢˜å¢†å¢å¡¿å¡´å¢‹å¡ºå¢‡å¢‘墎塶墂墈塻墔å¢å£¾å¥«å«œå«®å«¥å«•å«ªå«šå«­å««å«³å«¢å« å«›å«¬å«žå«å«™å«¨å«Ÿå­·å¯ "], +["e1a1","寣屣嶂嶀嵽嶆嵺å¶åµ·å¶Šå¶‰å¶ˆåµ¾åµ¼å¶åµ¹åµ¿å¹˜å¹™å¹“廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨æ…慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫æ«æ‘æ‘›æ‘摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠æ‘æ‘¿æ¿æ‘¬æ‘«æ‘™æ‘¥æ‘·æ•³æ– æš¡æš æšŸæœ…朄朢榱榶槉"], +["e240","榠槎榖榰榬榼榑榙榎榧æ¦æ¦©æ¦¾æ¦¯æ¦¿æ§„榽榤槔榹槊榚æ§æ¦³æ¦“榪榡榞槙榗æ¦æ§‚榵榥槆歊æ­æ­‹æ®žæ®Ÿæ® æ¯ƒæ¯„毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊"], +["e2a1","漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟æ¼æ¼žæ¼ˆæ¼¡ç†‡ç†ç†‰ç†€ç†…熂ç†ç…»ç††ç†ç†—牄牓犗犕犓çƒçç‘çŒç‘¢ç‘³ç‘±ç‘µç‘²ç‘§ç‘®ç”€ç”‚甃畽ç–瘖瘈瘌瘕瘑瘊瘔皸çžç¼çž…çž‚ç®çž€ç¯ç¾çžƒç¢²ç¢ªç¢´ç¢­ç¢¨ç¡¾ç¢«ç¢žç¢¥ç¢ ç¢¬ç¢¢ç¢¤ç¦˜ç¦Šç¦‹ç¦–禕禔禓"], +["e340","禗禈禒ç¦ç¨«ç©Šç¨°ç¨¯ç¨¨ç¨¦çª¨çª«çª¬ç«®ç®ˆç®œç®Šç®‘ç®ç®–ç®ç®Œç®›ç®Žç®…箘劄箙箤箂粻粿粼粺綧綷緂綣綪ç·ç·€ç·…ç¶ç·Žç·„緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞"], +["e3a1","耤èèœè†‰è††è†ƒè†‡è†è†Œè†‹èˆ•è’—蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴è“è“蒪蒚蒱è“è’蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶è“蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨è«è€èœ®èœžèœ¡èœ™èœ›èƒèœ¬è蜾è†èœ èœ²èœªèœ­èœ¼èœ’蜺蜱蜵è‚蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻"], +["e440","裰裬裫è¦è¦¡è¦Ÿè¦žè§©è§«è§¨èª«èª™èª‹èª’èªèª–谽豨豩賕è³è³—趖踉踂跿è¸è·½è¸Šè¸ƒè¸‡è¸†è¸…跾踀踄è¼è¼‘輎è¼é„£é„œé„ é„¢é„Ÿé„鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪éŠ"], +["e4a1","銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩éŠéŠ‹éˆ­éšžéš¡é›¿é˜é½éºé¾éžƒéž€éž‚é»éž„éžé¿éŸŽéŸé –颭颮餂餀餇é¦é¦œé§ƒé¦¹é¦»é¦ºé§‚馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵å™å™Šå™‰å™†å™˜"], +["e540","噚噀嘳嘽嘬嘾嘸嘪嘺圚墫å¢å¢±å¢ å¢£å¢¯å¢¬å¢¥å¢¡å£¿å«¿å«´å«½å«·å«¶å¬ƒå«¸å¬‚嫹å¬å¬‡å¬…å¬å±§å¶™å¶—嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩å¹å¹ å¹œç·³å»›å»žå»¡å½‰å¾²æ†‹æ†ƒæ…¹æ†±æ†°æ†¢æ†‰"], +["e5a1","憛憓憯憭憟憒憪憡æ†æ…¦æ†³æˆ­æ‘®æ‘°æ’–æ’ æ’…æ’—æ’œæ’撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛æ¨æ§¾æ¨§æ§²æ§®æ¨”槷槧橀樈槦槻æ¨æ§¼æ§«æ¨‰æ¨„樘樥æ¨æ§¶æ¨¦æ¨‡æ§´æ¨–歑殥殣殢殦æ°æ°€æ¯¿æ°‚æ½æ¼¦æ½¾æ¾‡æ¿†æ¾’"], +["e640","æ¾æ¾‰æ¾Œæ½¢æ½æ¾…潚澖潶潬澂潕潲潒æ½æ½—澔澓æ½æ¼€æ½¡æ½«æ½½æ½§æ¾æ½“澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵ç†ç†¥ç†žç†¤ç†¡ç†ªç†œç†§ç†³çŠ˜çŠšç˜ç’çžçŸç çç›ç¡çšç™"], +["e6a1","ç¢ç’‡ç’‰ç’Šç’†ç’瑽璅璈瑼瑹甈甇畾瘥瘞瘙ç˜ç˜œç˜£ç˜šç˜¨ç˜›çšœçšçšžçš›çžçžçž‰çžˆç£ç¢»ç£ç£Œç£‘磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨è¤è§è†£è†Ÿ"], +["e740","膞膕膢膙膗舖è‰è‰“艒è‰è‰Žè‰‘蔤蔻è”蔀蔩蔎蔉è”蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨è”蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢"], +["e7a1","è–è£è¤è·èŸ¡è³è˜è”è›è’è¡èšè‘èžè­èªèèŽèŸèè¯è¬èºè®èœè¥èè»èµè¢è§è©è¡šè¤…褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬è«è«†èª¸è«“諑諔諕誻諗誾諀諅諘諃誺誽諙谾è±è²è³¥è³Ÿè³™è³¨è³šè³è³§è¶ è¶œè¶¡è¶›è¸ è¸£è¸¥è¸¤è¸®è¸•è¸›è¸–踑踙踦踧"], +["e840","踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗é³é°é¯é§é«é„¯é„«é„©é„ªé„²é„¦é„®é†…醆醊é†é†‚醄醀é‹é‹ƒé‹„鋀鋙銶é‹é‹±é‹Ÿé‹˜é‹©é‹—é‹é‹Œé‹¯é‹‚鋨鋊鋈鋎鋦é‹é‹•é‹‰é‹ é‹žé‹§é‹‘é‹“"], +["e8a1","銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂éšéžŠéžŽéžˆéŸéŸé žé é ¦é ©é ¨é  é ›é §é¢²é¤ˆé£ºé¤‘餔餖餗餕駜é§é§é§“駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓é¼é¼å„œå„“儗儚儑凞匴å¡å™°å™ å™®"], +["e940","噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓å¬å¬–嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼æ†æ†¨æ†–懅憴懆æ‡æ‡Œæ†º"], +["e9a1","憿憸憌擗擖æ“æ“擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋æ›æš½æš»æšºæ›Œæœ£æ¨´æ©¦æ©‰æ©§æ¨²æ©¨æ¨¾æ©æ©­æ©¶æ©›æ©‘樨橚樻樿æ©æ©ªæ©¤æ©æ©æ©”橯橩橠樼橞橖橕æ©æ©Žæ©†æ­•æ­”歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪æ¿æ¾¿æ¾¸"], +["ea40","澢濉澫æ¿æ¾¯æ¾²æ¾°ç‡…燂熿熸燖燀ç‡ç‡‹ç‡”燊燇ç‡ç†½ç‡˜ç†¼ç‡†ç‡šç‡›çŠçŠžç©ç¦ç§ç¬ç¥ç«çªç‘¿ç’šç’ ç’”璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚çžçž¡çžœçž›çž¢çž£çž•çž™"], +["eaa1","çž—ç£ç£©ç£¥ç£ªç£žç££ç£›ç£¡ç£¢ç£­ç£Ÿç£ ç¦¤ç©„穈穇窶窸窵窱窷篞篣篧ç¯ç¯•ç¯¥ç¯šç¯¨ç¯¹ç¯”篪篢篜篫篘篟糒糔糗ç³ç³‘縒縡縗縌縟縠縓縎縜縕縚縢縋ç¸ç¸–ç¸ç¸”縥縤罃罻罼罺羱翯耪耩è¬è†±è†¦è†®è†¹è†µè†«è†°è†¬è†´è†²è†·è†§è‡²è‰•è‰–艗蕖蕅蕫è•è•“蕡蕘"], +["eb40","蕀蕆蕤è•è•¢è•„蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦è•è•”蕥蕬虣虥虤螛èžèž—螓螒螈èžèž–螘è¹èž‡èž£èž…èžèž‘èžèž„螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠"], +["eba1","諢諲諴諵è«è¬”諤諟諰諈諞諡諨諿諯諻貑貒è²è³µè³®è³±è³°è³³èµ¬èµ®è¶¥è¶§è¸³è¸¾è¸¸è¹€è¹…踶踼踽è¹è¸°è¸¿èº½è¼¶è¼®è¼µè¼²è¼¹è¼·è¼´é¶é¹é»é‚†éƒºé„³é„µé„¶é†“é†é†‘é†é†éŒ§éŒžéŒˆéŒŸéŒ†éŒéºéŒ¸éŒ¼éŒ›éŒ£éŒ’éŒé†éŒ­éŒŽéŒé‹‹éŒé‹ºéŒ¥éŒ“鋹鋷錴錂錤鋿錩錹錵錪錔錌"], +["ec40","錋鋾錉錀鋻錖閼é—閾閹閺閶閿閵閽隩雔霋霒éœéž™éž—鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒é®é­ºé®•"], +["eca1","魽鮈鴥鴗鴠鴞鴔鴩é´é´˜é´¢é´é´™é´Ÿéºˆéº†éº‡éº®éº­é»•é»–黺鼒鼽儦儥儢儤儠儩勴嚓嚌åšåš†åš„嚃噾嚂噿åšå£–壔å£å£’嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨æ–斀斶旚曒æªæª–æªæª¥æª‰æªŸæª›æª¡æªžæª‡æª“檎"], +["ed40","檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲æ¿æ¿¢æ¿¨ç‡¡ç‡±ç‡¨ç‡²ç‡¤ç‡°ç‡¢ç³ç®ç¯ç’—璲璫ç’璪璭璱璥璯ç”甑甒ç”疄癃癈癉癇皤盩瞵瞫瞲瞷瞶"], +["eda1","瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀ç«ç°…ç°ç¯²ç°€ç¯¿ç¯»ç°Žç¯´ç°‹ç¯³ç°‚簉簃ç°ç¯¸ç¯½ç°†ç¯°ç¯±ç°ç°Šç³¨ç¸­ç¸¼ç¹‚縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀è–薧薕薠薋薣蕻薤薚薞"], +["ee40","蕷蕼薉薡蕺蕸蕗薎薖薆è–è–™è–è–薢薂薈薅蕹蕶薘è–薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾è¥è¥’褷襂覭覯覮觲觳謞"], +["eea1","謘謖謑謅謋謢è¬è¬’謕謇è¬è¬ˆè¬†è¬œè¬“謚è±è±°è±²è±±è±¯è²•è²”賹赯蹎è¹è¹“è¹è¹Œè¹‡è½ƒè½€é‚…é¾é„¸é†šé†¢é†›é†™é†Ÿé†¡é†é† éŽ¡éŽƒéŽ¯é¤é–é‡é¼é˜éœé¶é‰éé‘é é­éŽéŒéªé¹é—é•é’éé±é·é»é¡éžé£é§éŽ€éŽé™é—‡é—€é—‰é—ƒé—…閷隮隰隬霠霟霘éœéœ™éžšéž¡éžœ"], +["ef40","éžžéžéŸ•éŸ”韱é¡é¡„顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽é¬é«¼é­ˆé®šé®¨é®žé®›é®¦é®¡é®¥é®¤é®†é®¢é® é®¯é´³éµéµ§é´¶é´®é´¯é´±é´¸é´°"], +["efa1","鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉éºéº°é»ˆé»šé»»é»¿é¼¤é¼£é¼¢é½”龠儱儭儮嚘嚜嚗嚚åšåš™å¥°å¬¼å±©å±ªå·€å¹­å¹®æ‡˜æ‡Ÿæ‡­æ‡®æ‡±æ‡ªæ‡°æ‡«æ‡–懩擿攄擽擸æ”攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌ç€ç€ç€…瀔瀎濿瀀濻瀦濼濷瀊çˆç‡¿ç‡¹çˆƒç‡½ç¶"], +["f040","璸瓀璵ç“璾璶璻瓂甔甓癜癤癙ç™ç™“癗癚皦皽盬矂瞺磿礌礓礔礉ç¤ç¤’礑禭禬穟簜簩簙簠簟簭ç°ç°¦ç°¨ç°¢ç°¥ç°°ç¹œç¹ç¹–繣繘繢繟繑繠繗繓羵羳翷翸èµè‡‘臒"], +["f0a1","è‡è‰Ÿè‰žè–´è—†è—€è—ƒè—‚薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙è èŸ´èŸ¨èŸè¥“襋è¥è¥Œè¥†è¥è¥‘襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧"], +["f140","蹛蹚蹡è¹è¹©è¹”轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛éŽéŽ‰éŽ§éŽŽéŽªéŽžéŽ¦éŽ•éŽˆéŽ™éŽŸéŽéŽ±éŽ‘鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘é›éœ£éœ¢éœ¥éž¬éž®éž¨éž«éž¤éžª"], +["f1a1","鞢鞥韗韙韖韘韺é¡é¡‘顒颸é¥é¤¼é¤ºé¨é¨‹é¨‰é¨é¨„騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿é¯é®µé®¸é¯“鮶鯄鮹鮽鵜鵓éµéµŠéµ›éµ‹éµ™éµ–鵌鵗鵒鵔鵟鵘鵚麎麌黟é¼é¼€é¼–鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚å£å£›å¤’嬽嬾嬿巃幰"], +["f240","徿懻攇æ”æ”攉攌攎斄旞æ—曞櫧櫠櫌櫑櫙櫋櫟櫜æ«æ««æ«æ«æ«žæ­ æ®°æ°Œç€™ç€§ç€ ç€–瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱ç¤ç¤›"], +["f2a1","礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾è¸è‡—臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘è¥è¥™è¦ˆè¦·è¦¶è§¶è­è­ˆè­Šè­€è­“譖譔譋譕"], +["f340","譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑è½è½è½“辴酀鄿醰醭éžé‡éé‚éšéé¹é¬éŒé™éŽ©é¦éŠé”é®é£é•é„éŽé€é’é§é•½é—šé—›é›¡éœ©éœ«éœ¬éœ¨éœ¦"], +["f3a1","鞳鞷鞶éŸéŸžéŸŸé¡œé¡™é¡é¡—颿颽颻颾饈饇饃馦馧騚騕騥é¨é¨¤é¨›é¨¢é¨ é¨§é¨£é¨žé¨œé¨”髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷é¶é¶Šé¶„鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀é½é½é½–齗齘匷嚲"], +["f440","嚵嚳壣孅巆巇廮廯忀å¿æ‡¹æ”—攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱ç‚瀸瀿瀺瀹ç€ç€»ç€³ç爓爔犨ç½ç¼ç’ºçš«çšªçš¾ç›­çŸŒçŸŽçŸçŸçŸ²ç¤¥ç¤£ç¤§ç¤¨ç¤¤ç¤©"], +["f4a1","禲穮穬穭竷籉籈籊籇籅糮繻繾çºçº€ç¾ºç¿¿è¹è‡›è‡™èˆ‹è‰¨è‰©è˜¢è—¿è˜è—¾è˜›è˜€è—¶è˜„蘉蘅蘌藽蠙è è ‘蠗蠓蠖襣襦覹觷譠譪è­è­¨è­£è­¥è­§è­­è¶®èº†èºˆèº„轙轖轗轕轘轚é‚é…ƒé…醷醵醲醳é‹é“é»é éé”é¾é•éé¨é™ééµé€é·é‡éŽé–é’éºé‰é¸éŠé¿"], +["f540","é¼éŒé¶é‘é†é—žé— é—Ÿéœ®éœ¯éž¹éž»éŸ½éŸ¾é¡ é¡¢é¡£é¡Ÿé£é£‚é¥é¥Žé¥™é¥Œé¥‹é¥“騲騴騱騬騪騶騩騮騸騭髇髊髆é¬é¬’鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤é¶é¶’鶘é¶é¶›"], +["f5a1","鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞é½é½™é¾‘儺儹劘劗囃嚽嚾孈孇巋å·å»±æ‡½æ”›æ¬‚櫼欃櫸欀çƒç„çŠçˆç‰ç…ç†çˆçˆšçˆ™ç¾ç”—癪çŸç¤­ç¤±ç¤¯ç±”籓糲纊纇纈纋纆çºç½ç¾»è€°è‡è˜˜è˜ªè˜¦è˜Ÿè˜£è˜œè˜™è˜§è˜®è˜¡è˜ è˜©è˜žè˜¥"], +["f640","è ©è è ›è  è ¤è œè «è¡Šè¥­è¥©è¥®è¥«è§ºè­¹è­¸è­…譺譻è´è´”趯躎躌轞轛è½é…†é…„酅醹é¿é»é¶é©é½é¼é°é¹éªé·é¬é‘€é±é—¥é—¤é—£éœµéœºéž¿éŸ¡é¡¤é£‰é£†é£€é¥˜é¥–騹騽驆驄驂é©é¨º"], +["f6a1","騿é«é¬•é¬—鬘鬖鬺魒鰫é°é°œé°¬é°£é°¨é°©é°¤é°¡é¶·é¶¶é¶¼é·é·‡é·Šé·é¶¾é·…鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳é·é¶²é¹ºéºœé»«é»®é»­é¼›é¼˜é¼šé¼±é½Žé½¥é½¤é¾’亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉æ°ç•ç–ç—ç’爞爟犩ç¿ç“˜ç“•ç“™ç“—癭皭礵禴穰穱籗籜籙籛籚"], +["f740","糴糱纑ç½ç¾‡è‡žè‰«è˜´è˜µè˜³è˜¬è˜²è˜¶è ¬è ¨è ¦è ªè ¥è¥±è¦¿è¦¾è§»è­¾è®„讂讆讅譿贕躕躔躚躒èºèº–躗轠轢酇鑌é‘é‘Šé‘‹é‘鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌é©é©ˆé©Š"], +["f7a1","驉驒é©é«é¬™é¬«é¬»é­–魕鱆鱈鰿鱄鰹鰳é±é°¼é°·é°´é°²é°½é°¶é·›é·’é·žé·šé·‹é·é·œé·‘鷟鷩鷙鷘鷖鷵鷕é·éº¶é»°é¼µé¼³é¼²é½‚齫龕龢儽劙壨壧奲å­å·˜è ¯å½æˆæˆƒæˆ„攩攥斖曫欑欒æ¬æ¯Šç›çšçˆ¢çŽ‚çŽçŽƒç™°çŸ”籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾"], +["f840","讌讎讋讈豅贙躘轤轣醼鑢鑕é‘鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘é±é±Šé±é±‹é±•é±™é±Œé±Žé·»é··é·¯é·£é·«é·¸é·¤é·¶é·¡é·®é·¦é·²é·°é·¢é·¬é·´é·³é·¨é·­é»‚é»é»²é»³é¼†é¼œé¼¸é¼·é¼¶é½ƒé½"], +["f8a1","齱齰齮齯囓å›å­Žå±­æ”­æ›­æ›®æ¬“çŸç¡çç çˆ£ç“›ç“¥çŸ•ç¤¸ç¦·ç¦¶ç±ªçº—羉艭虃蠸蠷蠵衋讔讕躞躟躠èºé†¾é†½é‡‚鑫鑨鑩雥é†éƒé‡éŸ‡éŸ¥é©žé«•é­™é±£é±§é±¦é±¢é±žé± é¸‚鷾鸇鸃鸆鸅鸀é¸é¸‰é·¿é·½é¸„麠鼞齆齴齵齶囔攮斸欘欙欗欚ç¢çˆ¦çŠªçŸ˜çŸ™ç¤¹ç±©ç±«ç³¶çºš"], +["f940","纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳é‰é¡²é¥Ÿé±¨é±®é±­é¸‹é¸é¸é¸é¸’鸑麡黵鼉齇齸齻齺齹圞ç¦ç±¯è ¼è¶²èº¦é‡ƒé‘´é‘¸é‘¶é‘µé© é±´é±³é±±é±µé¸”鸓黶鼊"], +["f9a1","龤ç¨ç¥ç³·è™ªè ¾è ½è ¿è®žè²œèº©è»‰é‹é¡³é¡´é£Œé¥¡é¦«é©¤é©¦é©§é¬¤é¸•é¸—齈戇欞爧虌躨钂钀é’驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺é¸ç©çªéº¤é½¾é½‰é¾˜ç¢éŠ¹è£å¢»æ’粧嫺╔╦╗╠╬╣╚╩â•â•’╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║â•â•­â•®â•°â•¯â–“"] +] diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/eucjp.json b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/eucjp.json new file mode 100755 index 0000000..4fa61ca --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/eucjp.json @@ -0,0 +1,182 @@ +[ +["0","\u0000",127], +["8ea1","。",62], +["a1a1"," ã€ã€‚,.・:;?ï¼ã‚›ã‚œÂ´ï½€Â¨ï¼¾ï¿£ï¼¿ãƒ½ãƒ¾ã‚ゞ〃ä»ã€…〆〇ー―â€ï¼ï¼¼ï½žâˆ¥ï½œâ€¦â€¥â€˜â€™â€œâ€ï¼ˆï¼‰ã€”〕[]{ï½ã€ˆ",9,"+ï¼Â±Ã—÷ï¼â‰ ï¼œï¼žâ‰¦â‰§âˆžâˆ´â™‚♀°′″℃¥$¢£%#&*@§☆★○â—â—Žâ—‡"], +["a2a1","◆□■△▲▽▼※〒→â†â†‘↓〓"], +["a2ba","∈∋⊆⊇⊂⊃∪∩"], +["a2ca","∧∨¬⇒⇔∀∃"], +["a2dc","∠⊥⌒∂∇≡≒≪≫√∽âˆâˆµâˆ«âˆ¬"], +["a2f2","ʼn♯♭♪†‡¶"], +["a2fe","â—¯"], +["a3b0","ï¼",9], +["a3c1","A",25], +["a3e1","ï½",25], +["a4a1","ã",82], +["a5a1","ã‚¡",85], +["a6a1","Α",16,"Σ",6], +["a6c1","α",16,"σ",6], +["a7a1","Ð",5,"ÐЖ",25], +["a7d1","а",5,"ёж",25], +["a8a1","─│┌â”┘└├┬┤┴┼â”┃â”┓┛┗┣┳┫┻╋┠┯┨┷┿â”┰┥┸╂"], +["ada1","â‘ ",19,"â… ",9], +["adc0","ã‰ãŒ”㌢ã㌘㌧㌃㌶ã‘ã—ãŒãŒ¦ãŒ£ãŒ«ãŠãŒ»ãŽœãŽãŽžãŽŽãŽã„㎡"], +["addf","ã»ã€ã€Ÿâ„–ã℡㊤",4,"㈱㈲㈹ã¾ã½ã¼â‰’≡∫∮∑√⊥∠∟⊿∵∩∪"], +["b0a1","亜唖娃阿哀愛挨姶逢葵茜ç©æ‚ªæ¡æ¸¥æ—­è‘¦èŠ¦é¯µæ¢“圧斡扱宛å§è™»é£´çµ¢ç¶¾é®Žæˆ–粟袷安庵按暗案闇éžæ以伊ä½ä¾å‰å›²å¤·å§”å¨å°‰æƒŸæ„慰易椅為ç•ç•°ç§»ç¶­ç·¯èƒƒèŽè¡£è¬‚é•éºåŒ»äº•äº¥åŸŸè‚²éƒç£¯ä¸€å£±æº¢é€¸ç¨²èŒ¨èŠ‹é°¯å…å°å’½å“¡å› å§»å¼•é£²æ·«èƒ¤è”­"], +["b1a1","院陰隠韻å‹å³å®‡çƒç¾½è¿‚雨å¯éµœçªºä¸‘碓臼渦嘘唄æ¬è”šé°»å§¥åŽ©æµ¦ç“œé–噂云é‹é›²è餌å¡å–¶å¬°å½±æ˜ æ›³æ „永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦è¬è¶Šé–²æ¦ŽåŽ­å††åœ’堰奄宴延怨掩æ´æ²¿æ¼”炎焔煙燕猿ç¸è‰¶è‹‘è–—é é‰›é´›å¡©æ–¼æ±šç”¥å‡¹å¤®å¥¥å¾€å¿œ"], +["b2a1","押旺横欧殴王ç¿è¥–鴬鴎黄岡沖è»å„„屋憶臆桶牡乙俺å¸æ©æ¸©ç©éŸ³ä¸‹åŒ–仮何伽価佳加å¯å˜‰å¤å«å®¶å¯¡ç§‘暇果架歌河ç«ç‚ç¦ç¦¾ç¨¼ç®‡èŠ±è‹›èŒ„è·è¯è“è¦èª²å˜©è²¨è¿¦éŽéœžèšŠä¿„峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔æ¢æ‡æˆ’æ‹æ”¹"], +["b3a1","é­æ™¦æ¢°æµ·ç°ç•Œçš†çµµèŠ¥èŸ¹é–‹éšŽè²å‡±åŠ¾å¤–咳害崖慨概涯ç¢è“‹è¡—該鎧骸浬馨蛙垣柿蛎鈎劃嚇å„廓拡撹格核殻ç²ç¢ºç©«è¦šè§’赫較郭閣隔é©å­¦å²³æ¥½é¡é¡ŽæŽ›ç¬ æ¨«æ©¿æ¢¶é°æ½Ÿå‰²å–æ°æ‹¬æ´»æ¸‡æ»‘è‘›è¤è½„且鰹å¶æ¤›æ¨ºéž„株兜竃蒲釜鎌噛鴨栢茅è±"], +["b4a1","粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾æ›æ•¢æŸ‘桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰è‚艦莞観諌貫還鑑間閑関陥韓館舘丸å«å²¸å·ŒçŽ©ç™Œçœ¼å²©ç¿«è´‹é›é ‘顔願ä¼ä¼Žå±å–œå™¨åŸºå¥‡å¬‰å¯„å²å¸Œå¹¾å¿Œæ®æœºæ——既期棋棄"], +["b5a1","機帰毅気汽畿祈季稀紀徽è¦è¨˜è²´èµ·è»Œè¼é£¢é¨Žé¬¼äº€å½å„€å¦“宜戯技擬欺犠疑祇義蟻誼議掬èŠéž å‰åƒå–«æ¡”橘詰砧æµé»å´å®¢è„šè™é€†ä¸˜ä¹…仇休åŠå¸å®®å¼“急救朽求汲泣ç¸çƒç©¶çª®ç¬ˆç´šç³¾çµ¦æ—§ç‰›åŽ»å±…巨拒拠挙渠虚許è·é‹¸æ¼ç¦¦é­šäº¨äº«äº¬"], +["b6a1","供侠僑兇競共凶å”匡å¿å«å–¬å¢ƒå³¡å¼·å½Šæ€¯ææ­æŒŸæ•™æ©‹æ³ç‹‚狭矯胸脅興蕎郷é¡éŸ¿é¥—é©šä»°å‡å°­æšæ¥­å±€æ›²æ¥µçŽ‰æ¡ç²åƒ…勤å‡å·¾éŒ¦æ–¤æ¬£æ¬½ç´ç¦ç¦½ç­‹ç·ŠèŠ¹èŒè¡¿è¥Ÿè¬¹è¿‘金åŸéŠ€ä¹å€¶å¥åŒºç‹—玖矩苦躯駆駈駒具愚虞喰空å¶å¯“é‡éš…串櫛釧屑屈"], +["b7a1","掘窟沓é´è½¡çªªç†Šéšˆç²‚æ —ç¹°æ¡‘é¬å‹²å›è–«è¨“群è»éƒ¡å¦è¢ˆç¥ä¿‚傾刑兄啓圭çªåž‹å¥‘形径æµæ…¶æ…§æ†©æŽ²æºæ•¬æ™¯æ¡‚渓畦稽系経継繋罫茎èŠè›è¨ˆè©£è­¦è»½é šé¶èŠ¸è¿Žé¯¨åŠ‡æˆŸæ’ƒæ¿€éš™æ¡å‚‘欠決潔穴çµè¡€è¨£æœˆä»¶å€¹å€¦å¥å…¼åˆ¸å‰£å–§åœå …嫌建憲懸拳æ²"], +["b8a1","検権牽犬献研硯絹県肩見謙賢軒é£éµé™ºé¡•é¨“鹸元原厳幻弦減æºçŽ„ç¾çµƒèˆ·è¨€è«ºé™ä¹Žå€‹å¤å‘¼å›ºå§‘孤己庫弧戸故枯湖ç‹ç³Šè¢´è‚¡èƒ¡è°è™Žèª‡è·¨éˆ·é›‡é¡§é¼“五互ä¼åˆå‘‰å¾å¨¯å¾Œå¾¡æ‚Ÿæ¢§æªŽç‘šç¢èªžèª¤è­·é†ä¹žé¯‰äº¤ä½¼ä¾¯å€™å€–光公功効勾厚å£å‘"], +["b9a1","åŽå–‰å‘垢好孔å­å®å·¥å·§å··å¹¸åºƒåºšåº·å¼˜æ’慌抗拘控攻昂晃更æ­æ ¡æ¢—構江洪浩港æºç”²çš‡ç¡¬ç¨¿ç³ ç´…紘絞綱耕考肯肱腔è†èˆªè’行衡講貢購郊酵鉱砿鋼閤é™é …香高鴻剛劫å·åˆå£•æ‹·æ¿ è±ªè½Ÿéº¹å…‹åˆ»å‘Šå›½ç©€é…·éµ é»’ç„漉腰甑忽惚骨狛込"], +["baa1","此頃今困å¤å¢¾å©šæ¨æ‡‡æ˜æ˜†æ ¹æ¢±æ··ç—•ç´ºè‰®é­‚些ä½å‰å”†åµ¯å·¦å·®æŸ»æ²™ç‘³ç ‚è©éŽ–裟å座挫債催å†æœ€å“‰å¡žå¦»å®°å½©æ‰æŽ¡æ ½æ­³æ¸ˆç½é‡‡çŠ€ç •ç ¦ç¥­æ–Žç´°èœè£è¼‰éš›å‰¤åœ¨æ罪財冴å‚阪堺榊肴咲崎埼碕鷺作削咋æ¾æ˜¨æœ”柵窄策索錯桜鮭笹匙冊刷"], +["bba1","察拶撮擦札殺薩雑çšé¯–æŒéŒ†é®«çš¿æ™’三傘å‚山惨撒散桟燦çŠç”£ç®—纂蚕讃賛酸é¤æ–¬æš«æ®‹ä»•ä»”伺使刺å¸å²å—£å››å£«å§‹å§‰å§¿å­å±å¸‚師志æ€æŒ‡æ”¯å­œæ–¯æ–½æ—¨æžæ­¢æ­»æ°ç…祉ç§ç³¸ç´™ç´«è‚¢è„‚至視詞詩試誌諮資賜雌飼歯事似ä¾å…字寺慈æŒæ™‚"], +["bca1","次滋治爾璽痔ç£ç¤ºè€Œè€³è‡ªè’”辞æ±é¹¿å¼è­˜é´«ç«ºè»¸å®é›«ä¸ƒå±åŸ·å¤±å«‰å®¤æ‚‰æ¹¿æ¼†ç–¾è³ªå®Ÿè”€ç¯ å²æŸ´èŠå±¡è•Šç¸žèˆŽå†™å°„æ¨èµ¦æ–œç…®ç¤¾ç´—者è¬è»Šé®è›‡é‚ªå€Ÿå‹ºå°ºæ“ç¼çˆµé…Œé‡ˆéŒ«è‹¥å¯‚弱惹主å–守手朱殊狩ç ç¨®è…«è¶£é…’首儒å—呪寿授樹綬需囚åŽå‘¨"], +["bda1","宗就州修æ„拾洲秀秋終ç¹ç¿’臭舟è’衆襲è®è¹´è¼¯é€±é…‹é…¬é›†é†œä»€ä½å……å従戎柔æ±æ¸‹ç£ç¸¦é‡éŠƒå”夙宿淑ç¥ç¸®ç²›å¡¾ç†Ÿå‡ºè¡“述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡éµé†‡é †å‡¦åˆæ‰€æš‘曙渚庶緒署書薯藷諸助å™å¥³åºå¾æ•é‹¤é™¤å‚·å„Ÿ"], +["bea1","å‹åŒ å‡å¬å“¨å•†å”±å˜—奨妾娼宵将å°å°‘尚庄床廠彰承抄招掌æ·æ˜‡æ˜Œæ˜­æ™¶æ¾æ¢¢æ¨Ÿæ¨µæ²¼æ¶ˆæ¸‰æ¹˜ç„¼ç„¦ç…§ç—‡çœç¡ç¤ç¥¥ç§°ç« ç¬‘粧紹肖è–蒋蕉è¡è£³è¨Ÿè¨¼è©”詳象賞醤鉦é¾é˜éšœéž˜ä¸Šä¸ˆä¸žä¹—冗剰城場壌嬢常情擾æ¡æ–浄状畳穣蒸譲醸錠嘱埴飾"], +["bfa1","æ‹­æ¤æ®–燭織è·è‰²è§¦é£Ÿè•è¾±å°»ä¼¸ä¿¡ä¾µå”‡å¨ å¯å¯©å¿ƒæ…ŽæŒ¯æ–°æ™‹æ£®æ¦›æµ¸æ·±ç”³ç–¹çœŸç¥žç§¦ç´³è‡£èŠ¯è–ªè¦ªè¨ºèº«è¾›é€²é‡éœ‡äººä»åˆƒå¡µå£¬å°‹ç”šå°½è…Žè¨Šè¿…陣é­ç¬¥è«é ˆé…¢å›³åŽ¨é€—å¹åž‚帥推水炊ç¡ç²‹ç¿ è¡°é‚é…”éŒéŒ˜éšç‘žé«„崇嵩数枢趨雛æ®æ‰æ¤™è…頗雀裾"], +["c0a1","澄摺寸世瀬ç•æ˜¯å‡„制勢姓å¾æ€§æˆæ”¿æ•´æ˜Ÿæ™´æ£²æ –正清牲生盛精è–声製西誠誓請é€é†’é’é™æ–‰ç¨Žè„†éš»å¸­æƒœæˆšæ–¥æ˜”æžçŸ³ç©ç±ç¸¾è„Šè²¬èµ¤è·¡è¹Ÿç¢©åˆ‡æ‹™æŽ¥æ‘‚折設窃節説雪絶舌è‰ä»™å…ˆåƒå å®£å°‚å°–å·æˆ¦æ‰‡æ’°æ “栴泉浅洗染潜煎煽旋穿箭線"], +["c1a1","繊羨腺舛船薦詮賎践é¸é·éŠ­éŠ‘閃鮮å‰å–„漸然全禅繕膳糎噌塑岨措曾曽楚狙ç–疎礎祖租粗素組蘇訴阻é¡é¼ åƒ§å‰µåŒå¢å€‰å–ªå£®å¥çˆ½å®‹å±¤åŒæƒ£æƒ³æœæŽƒæŒ¿æŽ»æ“早曹巣æ§æ§½æ¼•ç‡¥äº‰ç—©ç›¸çª“糟ç·ç¶œè¡è‰è˜è‘¬è’¼è—»è£…èµ°é€é­éŽ—霜騒åƒå¢—憎"], +["c2a1","臓蔵贈造促å´å‰‡å³æ¯æ‰æŸæ¸¬è¶³é€Ÿä¿—属賊æ—続å’袖其æƒå­˜å­«å°Šææ‘éœä»–多太汰詑唾堕妥惰打æŸèˆµæ¥•é™€é§„騨体堆対è€å²±å¸¯å¾…怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代å°å¤§ç¬¬é†é¡Œé·¹æ»ç€§å“啄宅托択拓沢濯ç¢è¨—é¸æ¿è«¾èŒ¸å‡§è›¸åª"], +["c3a1","å©ä½†é”辰奪脱巽竪辿棚谷狸鱈樽誰丹å˜å˜†å¦æ‹…探旦歎淡湛炭短端箪綻耽胆蛋誕é›å›£å£‡å¼¾æ–­æš–檀段男談値知地弛æ¥æ™ºæ± ç—´ç¨šç½®è‡´èœ˜é…馳築畜竹筑蓄é€ç§©çª’茶嫡ç€ä¸­ä»²å®™å¿ æŠ½æ˜¼æŸ±æ³¨è™«è¡·è¨»é…Žé‹³é§æ¨—瀦猪苧著貯ä¸å…†å‡‹å–‹å¯µ"], +["c4a1","帖帳åºå¼”張彫徴懲挑暢æœæ½®ç‰’町眺è´è„¹è…¸è¶èª¿è«œè¶…跳銚長頂鳥勅æ—直朕沈ç賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴é”椿潰åªå£·å¬¬ç´¬çˆªåŠé‡£é¶´äº­ä½Žåœåµå‰ƒè²žå‘ˆå ¤å®šå¸åº•åº­å»·å¼Ÿæ‚ŒæŠµæŒºæ梯汀碇禎程締艇訂諦蹄逓"], +["c5a1","邸鄭釘鼎泥摘擢敵滴的笛é©é‘溺哲徹撤è½è¿­é‰„典填天展店添çºç”œè²¼è»¢é¡›ç‚¹ä¼æ®¿æ¾±ç”°é›»å…Žå堵塗妬屠徒斗æœæ¸¡ç™»èŸè³­é€”都é砥砺努度土奴怒倒党冬å‡åˆ€å”塔塘套宕島嶋悼投æ­æ±æ¡ƒæ¢¼æ£Ÿç›—淘湯涛ç¯ç‡ˆå½“痘祷等答筒糖統到"], +["c6a1","董蕩藤討謄豆è¸é€ƒé€é™é™¶é ­é¨°é—˜åƒå‹•åŒå ‚導憧撞洞瞳童胴è„é“銅峠鴇匿得徳涜特ç£ç¦¿ç¯¤æ¯’独読栃橡凸çªæ¤´å±Šé³¶è‹«å¯…酉瀞噸屯惇敦沌豚é頓呑曇éˆå¥ˆé‚£å†…ä¹å‡ªè–™è¬Žç˜æºé‹æ¥¢é¦´ç¸„ç•·å—楠軟難æ±äºŒå°¼å¼è¿©åŒ‚賑肉虹廿日乳入"], +["c7a1","如尿韮任妊å¿èªæ¿¡ç¦°ç¥¢å¯§è‘±çŒ«ç†±å¹´å¿µæ»æ’šç‡ƒç²˜ä¹ƒå»¼ä¹‹åŸœåš¢æ‚©æ¿ƒç´èƒ½è„³è†¿è¾²è¦—蚤巴把播覇æ·æ³¢æ´¾ç¶ç ´å©†ç½µèŠ­é¦¬ä¿³å»ƒæ‹æŽ’æ•—æ¯ç›ƒç‰ŒèƒŒè‚ºè¼©é…å€åŸ¹åª’梅楳煤狽買売賠陪這è¿ç§¤çŸ§è©ä¼¯å‰¥åšæ‹æŸæ³Šç™½ç®”粕舶薄迫æ›æ¼ çˆ†ç¸›èŽ«é§éº¦"], +["c8a1","函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪ä¼ç½°æŠœç­é–¥é³©å™ºå¡™è›¤éš¼ä¼´åˆ¤åŠåå›å¸†æ¬æ–‘æ¿æ°¾æ±Žç‰ˆçŠ¯ç­ç•”ç¹èˆ¬è—©è²©ç¯„釆煩頒飯挽晩番盤ç£è•ƒè›®åŒªå‘å¦å¦ƒåº‡å½¼æ‚²æ‰‰æ‰¹æŠ«æ–比泌疲皮碑秘緋罷肥被誹費é¿éžé£›æ¨‹ç°¸å‚™å°¾å¾®æž‡æ¯˜çµçœ‰ç¾Ž"], +["c9a1","鼻柊稗匹疋髭彦è†è±è‚˜å¼¼å¿…畢筆逼桧姫媛ç´ç™¾è¬¬ä¿µå½ªæ¨™æ°·æ¼‚瓢票表評豹廟æ病秒苗錨鋲蒜蛭鰭å“彬斌浜瀕貧賓頻æ•ç“¶ä¸ä»˜åŸ å¤«å©¦å¯Œå†¨å¸ƒåºœæ€–扶敷斧普浮父符è…膚芙譜負賦赴阜附侮撫武舞葡蕪部å°æ¥“風葺蕗ä¼å‰¯å¾©å¹…æœ"], +["caa1","ç¦è…¹è¤‡è¦†æ·µå¼—払沸ä»ç‰©é®’分å»å™´å¢³æ†¤æ‰®ç„šå¥®ç²‰ç³žç´›é›°æ–‡èžä¸™ä½µå…µå¡€å¹£å¹³å¼ŠæŸ„並蔽閉陛米é åƒ»å£ç™–碧別瞥蔑箆å変片篇編辺返é便勉娩å¼éž­ä¿èˆ—鋪圃æ•æ­©ç”«è£œè¼”穂募墓慕戊暮æ¯ç°¿è©å€£ä¿¸åŒ…呆報奉å®å³°å³¯å´©åº–抱æ§æ”¾æ–¹æœ‹"], +["cba1","法泡烹砲縫胞芳èŒè“¬èœ‚褒訪豊邦鋒飽鳳鵬ä¹äº¡å‚剖åŠå¦¨å¸½å¿˜å¿™æˆ¿æš´æœ›æŸæ£’冒紡肪膨謀貌貿鉾防å é ¬åŒ—僕åœå¢¨æ’²æœ´ç‰§ç¦ç©†é‡¦å‹ƒæ²¡æ®†å €å¹Œå¥”本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒æ¡äº¦ä¿£åˆæŠ¹æœ«æ²«è¿„侭繭麿万慢満"], +["cca1","漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙ç²æ°‘眠務夢無牟矛霧鵡椋婿娘冥å命明盟迷銘鳴姪ç‰æ»…å…棉綿緬é¢éººæ‘¸æ¨¡èŒ‚妄孟毛猛盲網耗蒙儲木黙目æ¢å‹¿é¤…尤戻籾貰å•æ‚¶ç´‹é–€åŒä¹Ÿå†¶å¤œçˆºè€¶é‡Žå¼¥çŸ¢åŽ„役約薬訳èºé–柳薮鑓愉愈油癒"], +["cda1","諭輸唯佑優勇å‹å®¥å¹½æ‚ æ†‚æ–有柚湧涌猶猷由ç¥è£•èª˜éŠé‚‘郵雄èžå¤•äºˆä½™ä¸Žèª‰è¼¿é å‚­å¹¼å¦–容庸æšæºæ“曜楊様洋溶熔用窯羊耀葉蓉è¦è¬¡è¸Šé¥é™½é¤Šæ…¾æŠ‘欲沃浴翌翼淀羅螺裸æ¥èŽ±é ¼é›·æ´›çµ¡è½é…ªä¹±åµåµæ¬„æ¿«è—蘭覧利åå±¥æŽæ¢¨ç†ç’ƒ"], +["cea1","ç—¢è£è£¡é‡Œé›¢é™¸å¾‹çŽ‡ç«‹è‘ŽæŽ ç•¥åŠ‰æµæºœç‰ç•™ç¡«ç²’隆竜é¾ä¾¶æ…®æ—…虜了亮僚両凌寮料æ¢æ¶¼çŒŸç™‚瞭稜糧良諒é¼é‡é™µé ˜åŠ›ç·‘倫厘林淋ç‡ç³è‡¨è¼ªéš£é±—麟瑠å¡æ¶™ç´¯é¡žä»¤ä¼¶ä¾‹å†·åŠ±å¶ºæ€œçŽ²ç¤¼è‹“鈴隷零霊麗齢暦歴列劣烈裂廉æ‹æ†æ¼£ç…‰ç°¾ç·´è¯"], +["cfa1","蓮連錬呂魯櫓炉賂路露労å©å»Šå¼„朗楼榔浪æ¼ç‰¢ç‹¼ç¯­è€è¾è‹éƒŽå…­éº“禄肋録論倭和話歪賄脇惑枠鷲亙亘é°è©«è—蕨椀湾碗腕"], +["d0a1","弌ä¸ä¸•ä¸ªä¸±ä¸¶ä¸¼ä¸¿ä¹‚乖乘亂亅豫亊舒å¼äºŽäºžäºŸäº äº¢äº°äº³äº¶ä»Žä»ä»„仆仂仗仞仭仟价伉佚估佛ä½ä½—佇佶侈ä¾ä¾˜ä½»ä½©ä½°ä¾‘佯來侖儘俔俟俎俘俛俑俚ä¿ä¿¤ä¿¥å€šå€¨å€”倪倥倅伜俶倡倩倬俾俯們倆åƒå‡æœƒå•ååˆåšå–å¬å¸å‚€å‚šå‚…傴傲"], +["d1a1","僉僊傳僂僖僞僥僭僣僮價僵儉å„儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉å†å†‘冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹å‰å‰„剋剌剞剔剪剴剩剳剿剽åŠåŠ”劒剱劈劑辨"], +["d2a1","辧劬劭劼劵å‹å‹å‹—勞勣勦飭勠勳勵勸勹匆匈甸åŒåŒåŒåŒ•åŒšåŒ£åŒ¯åŒ±åŒ³åŒ¸å€å†å…丗å‰å凖åžå©å®å¤˜å»å·åŽ‚厖厠厦厥厮厰厶åƒç°’é›™åŸæ›¼ç‡®å®å¨å­åºåå½å‘€å¬å­å¼å®å¶å©åå‘Žå’呵咎呟呱呷呰咒呻咀呶咄å’咆哇咢咸咥咬哄哈咨"], +["d3a1","咫哂咤咾咼哘哥哦å”唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳å•å–™å–€å’¯å–Šå–Ÿå•»å•¾å–˜å–žå–®å•¼å–ƒå–©å–‡å–¨å—šå—…嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎å™ç‡Ÿå˜´å˜¶å˜²å˜¸å™«å™¤å˜¯å™¬å™ªåš†åš€åšŠåš åš”åšåš¥åš®åš¶åš´å›‚åš¼å›å›ƒå›€å›ˆå›Žå›‘囓囗囮囹圀囿圄圉"], +["d4a1","圈國åœåœ“團圖嗇圜圦圷圸åŽåœ»å€åå©åŸ€åžˆå¡å¿åž‰åž“垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙å å¡²å ¡å¡¢å¡‹å¡°æ¯€å¡’堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊å¤å¤›æ¢¦å¤¥å¤¬å¤­å¤²å¤¸å¤¾ç«’奕å¥å¥Žå¥šå¥˜å¥¢å¥ å¥§å¥¬å¥©"], +["d5a1","奸å¦å¦ä½žä¾«å¦£å¦²å§†å§¨å§œå¦å§™å§šå¨¥å¨Ÿå¨‘娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲å«å¬ªå¬¶å¬¾å­ƒå­…孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔å¯å¯¤å¯¦å¯¢å¯žå¯¥å¯«å¯°å¯¶å¯³å°…將專å°å°“尠尢尨尸尹å±å±†å±Žå±“"], +["d6a1","å±å±å­±å±¬å±®ä¹¢å±¶å±¹å²Œå²‘岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢å¶å¶¬å¶®å¶½å¶å¶·å¶¼å·‰å·å·“巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠å»å»‚廈å»å»"], +["d7a1","廖廣å»å»šå»›å»¢å»¡å»¨å»©å»¬å»±å»³å»°å»´å»¸å»¾å¼ƒå¼‰å½å½œå¼‹å¼‘弖弩弭弸å½å½ˆå½Œå½Žå¼¯å½‘彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱å¿æ‚³å¿¿æ€¡æ æ€™æ€æ€©æ€Žæ€±æ€›æ€•æ€«æ€¦æ€æ€ºæšææªæ·æŸæŠæ†ææ£æƒæ¤æ‚æ¬æ«æ™æ‚æ‚惧悃悚"], +["d8a1","悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘æ…愕愆惶惷愀惴惺愃愡惻惱æ„愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟æ…慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹æ‡æ‡¦æ‡£æ‡¶æ‡ºæ‡´æ‡¿æ‡½æ‡¼æ‡¾æˆ€æˆˆæˆ‰æˆæˆŒæˆ”戛"], +["d9a1","戞戡截戮戰戲戳æ‰æ‰Žæ‰žæ‰£æ‰›æ‰ æ‰¨æ‰¼æŠ‚抉找抒抓抖拔抃抔拗拑抻æ‹æ‹¿æ‹†æ“”拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵æ挾ææœæ掖掎掀掫æ¶æŽ£æŽæŽ‰æŽŸæŽµæ«æ©æŽ¾æ©æ€æ†æ£æ‰æ’æ¶æ„æ–æ´æ†æ“æ¦æ¶æ”æ—æ¨æ摧摯摶摎攪撕撓撥撩撈撼"], +["daa1","據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕æ•æ•˜æ•žæ•æ•²æ•¸æ–‚斃變斛斟斫斷旃旆æ—旄旌旒旛旙无旡旱æ²æ˜Šæ˜ƒæ—»æ³æ˜µæ˜¶æ˜´æ˜œæ™æ™„晉æ™æ™žæ™æ™¤æ™§æ™¨æ™Ÿæ™¢æ™°æšƒæšˆæšŽæš‰æš„暘æšæ›æš¹æ›‰æš¾æš¼"], +["dba1","曄暸曖曚曠昿曦曩曰曵曷æœæœ–朞朦朧霸朮朿朶æ朸朷æ†æžæ æ™æ£æ¤æž‰æ°æž©æ¼æªæžŒæž‹æž¦æž¡æž…枷柯枴柬枳柩枸柤柞æŸæŸ¢æŸ®æž¹æŸŽæŸ†æŸ§æªœæ žæ¡†æ ©æ¡€æ¡æ ²æ¡Žæ¢³æ «æ¡™æ¡£æ¡·æ¡¿æ¢Ÿæ¢æ¢­æ¢”æ¢æ¢›æ¢ƒæª®æ¢¹æ¡´æ¢µæ¢ æ¢ºæ¤æ¢æ¡¾æ¤æ£Šæ¤ˆæ£˜æ¤¢æ¤¦æ£¡æ¤Œæ£"], +["dca1","棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞æ¥æ¦æ¥ªæ¦²æ¦®æ§æ¦¿æ§æ§“榾槎寨槊æ§æ¦»æ§ƒæ¦§æ¨®æ¦‘榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒æ«æ¨£æ¨“橄樌橲樶橸橇橢橙橦橈樸樢æªæªæª æª„檢檣"], +["dda1","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉æ­æ­™æ­”歛歟歡歸歹歿殀殄殃æ®æ®˜æ®•æ®žæ®¤æ®ªæ®«æ®¯æ®²æ®±æ®³æ®·æ®¼æ¯†æ¯‹æ¯“毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂æ²æ²šæ²æ²›æ±¾æ±¨æ±³æ²’æ²æ³„泱泓沽泗泅æ³æ²®æ²±æ²¾"], +["dea1","沺泛泯泙泪洟è¡æ´¶æ´«æ´½æ´¸æ´™æ´µæ´³æ´’洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶æ¹æ¸Ÿæ¹ƒæ¸ºæ¹Žæ¸¤æ»¿æ¸æ¸¸æº‚溪溘滉溷滓溽溯滄溲滔滕æºæº¥æ»‚溟æ½æ¼‘çŒæ»¬æ»¸æ»¾æ¼¿æ»²æ¼±æ»¯æ¼²æ»Œ"], +["dfa1","漾漓滷澆潺潸æ¾æ¾€æ½¯æ½›æ¿³æ½­æ¾‚潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑ç€ç€æ¿¾ç€›ç€šæ½´ç€ç€˜ç€Ÿç€°ç€¾ç€²ç‘ç£ç‚™ç‚’炯烱炬炸炳炮烟烋çƒçƒ™ç„‰çƒ½ç„œç„™ç…¥ç…•ç†ˆç…¦ç…¢ç…Œç…–ç…¬ç†ç‡»ç†„熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼"], +["e0a1","燹燿çˆçˆçˆ›çˆ¨çˆ­çˆ¬çˆ°çˆ²çˆ»çˆ¼çˆ¿ç‰€ç‰†ç‰‹ç‰˜ç‰´ç‰¾çŠ‚çŠçŠ‡çŠ’犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷å€çŒ—猊猜猖çŒçŒ´çŒ¯çŒ©çŒ¥çŒ¾çŽç默ç—çªç¨ç°ç¸çµç»çºçˆçŽ³çŽçŽ»ç€ç¥ç®çžç’¢ç…瑯ç¥ç¸ç²çºç‘•ç¿ç‘Ÿç‘™ç‘瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊ç“ç“”ç±"], +["e1a1","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎ç”甕甓甞甦甬甼畄ç•ç•Šç•‰ç•›ç•†ç•šç•©ç•¤ç•§ç•«ç•­ç•¸ç•¶ç–†ç–‡ç•´ç–Šç–‰ç–‚疔疚ç–疥疣痂疳痃疵疽疸疼疱ç—痊痒痙痣痞痾痿痼ç˜ç—°ç—ºç—²ç—³ç˜‹ç˜ç˜‰ç˜Ÿç˜§ç˜ ç˜¡ç˜¢ç˜¤ç˜´ç˜°ç˜»ç™‡ç™ˆç™†ç™œç™˜ç™¡ç™¢ç™¨ç™©ç™ªç™§ç™¬ç™°"], +["e2a1","癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂ç›ç›–盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸ç‡çšç¨ç«ç›ç¥ç¿ç¾ç¹çžŽçž‹çž‘瞠瞞瞰瞶瞹瞿瞼瞽瞻矇çŸçŸ—矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"], +["e3a1","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊ç¦ç¦§é½‹ç¦ªç¦®ç¦³ç¦¹ç¦ºç§‰ç§•ç§§ç§¬ç§¡ç§£ç¨ˆç¨ç¨˜ç¨™ç¨ ç¨Ÿç¦€ç¨±ç¨»ç¨¾ç¨·ç©ƒç©—穉穡穢穩é¾ç©°ç©¹ç©½çªˆçª—窕窘窖窩竈窰窶竅竄窿邃竇竊ç«ç«ç«•ç«“站竚ç«ç«¡ç«¢ç«¦ç«­ç«°ç¬‚ç¬ç¬Šç¬†ç¬³ç¬˜ç¬™ç¬žç¬µç¬¨ç¬¶ç­"], +["e4a1","筺笄ç­ç¬‹ç­Œç­…筵筥筴筧筰筱筬筮ç®ç®˜ç®Ÿç®ç®œç®šç®‹ç®’ç®ç­ç®™ç¯‹ç¯ç¯Œç¯ç®´ç¯†ç¯ç¯©ç°‘簔篦篥籠簀簇簓篳篷簗ç°ç¯¶ç°£ç°§ç°ªç°Ÿç°·ç°«ç°½ç±Œç±ƒç±”ç±ç±€ç±ç±˜ç±Ÿç±¤ç±–籥籬籵粃ç²ç²¤ç²­ç²¢ç²«ç²¡ç²¨ç²³ç²²ç²±ç²®ç²¹ç²½ç³€ç³…糂糘糒糜糢鬻糯糲糴糶糺紆"], +["e5a1","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮çµçµ£ç¶“綉絛ç¶çµ½ç¶›ç¶ºç¶®ç¶£ç¶µç·‡ç¶½ç¶«ç¸½ç¶¢ç¶¯ç·œç¶¸ç¶Ÿç¶°ç·˜ç·ç·¤ç·žç·»ç·²ç·¡ç¸…縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧ç¹ç¹–繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒çºçº“纔纖纎纛纜缸缺"], +["e6a1","罅罌ç½ç½Žç½ç½‘罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞ç¾ç¾šç¾£ç¾¯ç¾²ç¾¹ç¾®ç¾¶ç¾¸è­±ç¿…翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻èŠè†è’è˜èšèŸè¢è¨è³è²è°è¶è¹è½è¿è‚„肆肅肛肓肚肭å†è‚¬èƒ›èƒ¥èƒ™èƒèƒ„胚胖脉胯胱脛脩脣脯腋"], +["e7a1","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉è‡è‡‘臙臘臈臚臟臠臧臺臻臾èˆèˆ‚舅與舊èˆèˆèˆ–舩舫舸舳艀艙艘è‰è‰šè‰Ÿè‰¤è‰¢è‰¨è‰ªè‰«èˆ®è‰±è‰·è‰¸è‰¾èŠèŠ’芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙"], +["e8a1","茵茴茖茲茱è€èŒ¹èè…茯茫茗茘莅莚莪莟莢莖茣莎莇莊è¼èŽµè³èµèŽ èŽ‰èŽ¨è´è“è«èŽè½èƒè˜è‹èè·è‡è è²èè¢è èŽ½è¸è”†è»è‘­èªè¼è•šè’„葷葫蒭葮蒂葩葆è¬è‘¯è‘¹èµè“Šè‘¢è’¹è’¿è’Ÿè“™è“蒻蓚è“è“蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"], +["e9a1","è•è˜‚蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾è–藉薺è—è–¹è—è—•è—藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿è™ä¹•è™”號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉èœè›¹èœŠèœ´èœ¿èœ·èœ»èœ¥èœ©èœšè èŸè¸èŒèŽè´è—è¨è®è™"], +["eaa1","è“è£èªè …螢螟螂螯蟋螽蟀èŸé›–螫蟄螳蟇蟆螻蟯蟲蟠è è èŸ¾èŸ¶èŸ·è ŽèŸ’蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫è¢è¡¾è¢žè¡µè¡½è¢µè¡²è¢‚袗袒袮袙袢è¢è¢¤è¢°è¢¿è¢±è£ƒè£„裔裘裙è£è£¹è¤‚裼裴裨裲褄褌褊褓襃褞褥褪褫è¥è¥„褻褶褸襌è¤è¥ è¥ž"], +["eba1","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜è§è§§è§´è§¸è¨ƒè¨–è¨è¨Œè¨›è¨è¨¥è¨¶è©è©›è©’詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄è«è«‚諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖è¬è¬—謠謳鞫謦謫謾謨è­è­Œè­è­Žè­‰è­–譛譚譫"], +["eca1","譟譬譯譴譽讀讌讎讒讓讖讙讚谺è±è°¿è±ˆè±Œè±Žè±è±•è±¢è±¬è±¸è±ºè²‚貉貅貊è²è²Žè²”豼貘æˆè²­è²ªè²½è²²è²³è²®è²¶è³ˆè³è³¤è³£è³šè³½è³ºè³»è´„è´…è´Šè´‡è´è´è´é½Žè´“è³è´”贖赧赭赱赳è¶è¶™è·‚趾趺è·è·šè·–跌跛跋跪跫跟跣跼踈踉跿è¸è¸žè¸è¸Ÿè¹‚踵踰踴蹊"], +["eda1","蹇蹉蹌è¹è¹ˆè¹™è¹¤è¹ è¸ªè¹£è¹•è¹¶è¹²è¹¼èºèº‡èº…躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡é€é€žé€–逋逧逶逵逹迸"], +["eea1","ééé‘é’逎é‰é€¾é–é˜éžé¨é¯é¶éš¨é²é‚‚é½é‚邀邊邉é‚邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀é‡é‡‰é‡‹é‡é‡–釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋é‰éŠœéŠ–銓銛鉚é‹éŠ¹éŠ·é‹©éŒé‹ºé„錮"], +["efa1","錙錢錚錣錺錵錻éœé é¼é®é–鎰鎬鎭鎔鎹é–é—é¨é¥é˜éƒéééˆé¤éšé”é“éƒé‡éé¶é«éµé¡éºé‘鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾é’鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃é—闌闕闔闖關闡闥闢阡阨阮阯陂陌é™é™‹é™·é™œé™ž"], +["f0a1","é™é™Ÿé™¦é™²é™¬éšéš˜éš•éš—險隧隱隲隰隴隶隸隹雎雋雉é›è¥é›œéœé›•é›¹éœ„霆霈霓霎霑éœéœ–霙霤霪霰霹霽霾é„é†éˆé‚é‰éœé é¤é¦é¨å‹’é«é±é¹éž…é¼éžéºéž†éž‹éžéžéžœéž¨éž¦éž£éž³éž´éŸƒéŸ†éŸˆéŸ‹éŸœéŸ­é½éŸ²ç«ŸéŸ¶éŸµé é Œé ¸é ¤é ¡é ·é ½é¡†é¡é¡‹é¡«é¡¯é¡°"], +["f1a1","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡é¤é¤žé¤¤é¤ é¤¬é¤®é¤½é¤¾é¥‚饉饅é¥é¥‹é¥‘饒饌饕馗馘馥馭馮馼駟駛é§é§˜é§‘駭駮駱駲駻駸é¨é¨é¨…駢騙騫騷驅驂驀驃騾驕é©é©›é©—驟驢驥驤驩驫驪骭骰骼髀é«é«‘髓體髞髟髢髣髦髯髫髮髴髱髷"], +["f2a1","髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃é­é­é­Žé­‘魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆é¯é¯‘鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒éµé´¿é´¾éµ†éµˆ"], +["f3a1","éµéµžéµ¤éµ‘éµéµ™éµ²é¶‰é¶‡é¶«éµ¯éµºé¶šé¶¤é¶©é¶²é·„é·é¶»é¶¸é¶ºé·†é·é·‚鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽éºéºˆéº‹éºŒéº’麕麑éºéº¥éº©éº¸éºªéº­é¡é»Œé»Žé»é»é»”黜點é»é» é»¥é»¨é»¯é»´é»¶é»·é»¹é»»é»¼é»½é¼‡é¼ˆçš·é¼•é¼¡é¼¬é¼¾é½Šé½’齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠"], +["f4a1","堯槇é™ç‘¤å‡œç†™"], +["f9a1","纊褜éˆéŠˆè“œä¿‰ç‚»æ˜±æ£ˆé‹¹æ›»å½…丨仡仼伀伃伹佖侒侊侚侔ä¿å€å€¢ä¿¿å€žå†å°å‚傔僴僘兊兤å†å†¾å‡¬åˆ•åŠœåŠ¦å‹€å‹›åŒ€åŒ‡åŒ¤å²åŽ“厲å﨎咜咊咩哿喆å™å¥åž¬åŸˆåŸ‡ï¨ï¨å¢žå¢²å¤‹å¥“奛å¥å¥£å¦¤å¦ºå­–寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹å·å¼¡å¼´å½§å¾·"], +["faa1","å¿žæ悅悊惞惕愠惲愑愷愰憘戓抦æµæ‘ æ’擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗æ¦æž»æ¡’柀æ æ¡„æ£ï¨“楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬æ·æ·¸æ·²æ·¼æ¸¹æ¹œæ¸§æ¸¼æº¿æ¾ˆæ¾µæ¿µç€…瀇瀨炅炫ç„焄煜煆煇凞ç‡ç‡¾çŠ±"], +["fba1","犾猤猪ç·çŽ½ç‰ç–ç£ç’ç‡çµç¦çªç©ç®ç‘¢ç’‰ç’Ÿç”畯皂皜皞皛皦益ç†åŠ¯ç ¡ç¡Žç¡¤ç¡ºç¤°ï¨˜ï¨™ï¨šç¦”福禛竑竧靖竫箞ï¨çµˆçµœç¶·ç¶ ç·–繒罇羡羽èŒè¢è¿è‡è¶è‘ˆè’´è•“蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣è»ï¨¤ï¨¥é§éƒžï¨¦é„•é„§é‡š"], +["fca1","釗釞釭釮釤釥鈆éˆéˆŠéˆºé‰€éˆ¼é‰Žé‰™é‰‘鈹鉧銧鉷鉸鋧鋗鋙é‹ï¨§é‹•é‹ é‹“錥錡鋻﨨錞鋿éŒéŒ‚é°é—鎤é†éžé¸é±é‘…鑈閒隆﨩éšéš¯éœ³éœ»éƒééé‘é•é¡—顥飯飼餧館馞驎髙髜魵魲é®é®±é®»é°€éµ°éµ«ï¨­é¸™é»‘"], +["fcf1","â…°",9,"¬¦'""], +["8fa2af","˘ˇ¸˙˯˛˚~΄΅"], +["8fa2c2","¡¦¿"], +["8fa2eb","ºª©®™¤№"], +["8fa6e1","ΆΈΉΊΪ"], +["8fa6e7","ÎŒ"], +["8fa6e9","ΎΫ"], +["8fa6ec","Î"], +["8fa6f1","άέήίϊÎόςÏϋΰώ"], +["8fa7c2","Ђ",10,"ÐŽÐ"], +["8fa7f2","Ñ’",10,"ўџ"], +["8fa9a1","ÆÄ"], +["8fa9a4","Ħ"], +["8fa9a6","IJ"], +["8fa9a8","ÅÄ¿"], +["8fa9ab","ŊØŒ"], +["8fa9af","ŦÞ"], +["8fa9c1","æđðħıijĸłŀʼnŋøœßŧþ"], +["8faaa1","ÃÀÄÂĂÇĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ"], +["8faaba","ĜĞĢĠĤÃÃŒÃÃŽÇİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑÅŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴßŶŹŽŻ"], +["8faba1","áàäâăǎÄąåãćĉÄçċÄéèëêěėēęǵÄÄŸ"], +["8fabbd","ġĥíìïîÇ"], +["8fabc5","īįĩĵķĺľļńňņñóòöôǒőÅõŕřŗśÅšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż"], +["8fb0a1","丂丄丅丌丒丟丣两丨丫丮丯丰丵乀ä¹ä¹„乇乑乚乜乣乨乩乴乵乹乿äºäº–亗äºäº¯äº¹ä»ƒä»ä»šä»›ä» ä»¡ä»¢ä»¨ä»¯ä»±ä»³ä»µä»½ä»¾ä»¿ä¼€ä¼‚伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾ä¾ä¾‚侄"], +["8fb1a1","侅侉侊侌侎ä¾ä¾’侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀ä¿ä¿…俆俈俉俋俌ä¿ä¿ä¿’俜俠俢俰俲俼俽俿倀å€å€„倇倊倌倎å€å€“倗倘倛倜å€å€žå€¢å€§å€®å€°å€²å€³å€µå€åå‚å…å†åŠåŒåŽå‘å’å“å—å™åŸå å¢å£å¦å§åªå­å°å±å€»å‚傃傄傆傊傎å‚å‚"], +["8fb2a1","傒傓傔傖傛傜傞",4,"傪傯傰傹傺傽僀僃僄僇僌僎åƒåƒ“僔僘僜åƒåƒŸåƒ¢åƒ¤åƒ¦åƒ¨åƒ©åƒ¯åƒ±åƒ¶åƒºåƒ¾å„ƒå„†å„‡å„ˆå„‹å„Œå„儎僲å„儗儙儛儜å„儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊å…兓兕兗兘兟兤兦兾冃冄冋冎冘å†å†¡å†£å†­å†¸å†ºå†¼å†¾å†¿å‡‚"], +["8fb3a1","凈å‡å‡‘凒凓凕凘凞凢凥凮凲凳凴凷åˆåˆ‚刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌å‹å‹‘勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋"], +["8fb4a1","匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾å‚åŒå‹å™å›å¡å£å¥å¬å­å²å¹å¾åŽƒåŽ‡åŽˆåŽŽåŽ“厔厙åŽåŽ¡åŽ¤åŽªåŽ«åŽ¯åŽ²åŽ´åŽµåŽ·åŽ¸åŽºåŽ½å€å…åå’å“å•åšååžå å¦å§åµå‚å“åšå¡å§å¨åªå¯å±å´åµå‘ƒå‘„呇å‘å‘呞呢呤呦呧呩呫呭呮呴呿"], +["8fb5a1","å’咃咅咈咉å’咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊å“哎哠哪哬哯哶哼哾哿唀å”唅唈唉唌å”唎唕唪唫唲唵唶唻唼唽å•å•‡å•‰å•Šå•å•å•‘啘啚啛啞啠啡啤啦啿å–喂喆喈喎å–喑喒喓喔喗喣喤喭喲喿å—嗃嗆嗉嗋嗌嗎嗑嗒"], +["8fb6a1","嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊å˜",5,"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀å™å™ƒå™„噆噉噋å™å™å™”噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚åšåšžåšŸåš¦åš§åš¨åš©åš«åš¬åš­åš±åš³åš·åš¾å›…囉囊囋å›å›å›Œå›å›™å›œå›å›Ÿå›¡å›¤",4,"囱囫园"], +["8fb7a1","囶囷åœåœ‚圇圊圌圑圕圚圛åœåœ åœ¢åœ£åœ¤åœ¥åœ©åœªåœ¬åœ®åœ¯åœ³åœ´åœ½åœ¾åœ¿å…å†åŒåå’å¢å¥å§å¨å«å­",4,"å³å´åµå·å¹åºå»å¼å¾åžåžƒåžŒåž”垗垙垚垜åžåžžåžŸåž¡åž•åž§åž¨åž©åž¬åž¸åž½åŸ‡åŸˆåŸŒåŸåŸ•åŸåŸžåŸ¤åŸ¦åŸ§åŸ©åŸ­åŸ°åŸµåŸ¶åŸ¸åŸ½åŸ¾åŸ¿å ƒå „堈堉埡"], +["8fb8a1","å Œå å ›å žå Ÿå  å ¦å §å ­å ²å ¹å ¿å¡‰å¡Œå¡å¡å¡å¡•å¡Ÿå¡¡å¡¤å¡§å¡¨å¡¸å¡¼å¡¿å¢€å¢å¢‡å¢ˆå¢‰å¢Šå¢Œå¢å¢å¢å¢”墖å¢å¢ å¢¡å¢¢å¢¦å¢©å¢±å¢²å£„墼壂壈å£å£Žå£å£’壔壖壚å£å£¡å£¢å£©å£³å¤…夆夋夌夒夓夔è™å¤å¤¡å¤£å¤¤å¤¨å¤¯å¤°å¤³å¤µå¤¶å¤¿å¥ƒå¥†å¥’奓奙奛å¥å¥žå¥Ÿå¥¡å¥£å¥«å¥­"], +["8fb9a1","奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼å§å§ƒå§„姈姊å§å§’å§å§žå§Ÿå§£å§¤å§§å§®å§¯å§±å§²å§´å§·å¨€å¨„娌å¨å¨Žå¨’娓娞娣娤娧娨娪娭娰婄婅婇婈婌å©å©•å©žå©£å©¥å©§å©­å©·å©ºå©»å©¾åª‹åªåª“媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿"], +["8fbaa1","嫄嫆嫈å«å«šå«œå« å«¥å«ªå«®å«µå«¶å«½å¬€å¬å¬ˆå¬—嬴嬙嬛å¬å¬¡å¬¥å¬­å¬¸å­å­‹å­Œå­’孖孞孨孮孯孼孽孾孿å®å®„宆宊宎å®å®‘宓宔宖宨宩宬宭宯宱宲宷宺宼寀å¯å¯å¯å¯–",4,"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩"], +["8fbba1","屭屰屴屵屺屻屼屽岇岈岊å²å²’å²å²Ÿå² å²¢å²£å²¦å²ªå²²å²´å²µå²ºå³‰å³‹å³’å³å³—峮峱峲峴å´å´†å´å´’崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿å¶å¶ƒå¶ˆå¶Šå¶’嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋å·å·Žå·˜å·™å· å·¤"], +["8fbca1","巩巸巹帀帇å¸å¸’帔帕帘帟帠帮帨帲帵帾幋å¹å¹‰å¹‘幖幘幛幜幞幨幪",4,"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜å¼å¼¡å¼¢å¼£å¼¤å¼¨å¼«å¼¬å¼®å¼°å¼´å¼¶å¼»å¼½å¼¿å½€å½„彅彇å½å½å½”彘彛彠彣彤彧"], +["8fbda1","彯彲彴彵彸彺彽彾徉å¾å¾å¾–徜å¾å¾¢å¾§å¾«å¾¤å¾¬å¾¯å¾°å¾±å¾¸å¿„忇忈忉忋å¿",4,"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊æ€æ€“怔怗怘怚怟怤怭怳怵æ€æ‡æˆæ‰æŒæ‘æ”æ–æ—ææ¡æ§æ±æ¾æ¿æ‚‚悆悈悊悎悑悓悕悘æ‚悞悢悤悥您悰悱悷"], +["8fbea1","悻悾惂惄惈惉惊惋惎æƒæƒ”惕惙惛æƒæƒžæƒ¢æƒ¥æƒ²æƒµæƒ¸æƒ¼æƒ½æ„‚愇愊愌æ„",4,"愖愗愙愜愞愢愪愫愰愱愵愶愷愹æ…慅慆慉慞慠慬慲慸慻慼慿憀æ†æ†ƒæ†„憋æ†æ†’憓憗憘憜æ†æ†Ÿæ† æ†¥æ†¨æ†ªæ†­æ†¸æ†¹æ†¼æ‡€æ‡æ‡‚懎æ‡æ‡•æ‡œæ‡æ‡žæ‡Ÿæ‡¡æ‡¢æ‡§æ‡©æ‡¥"], +["8fbfa1","懬懭懯æˆæˆƒæˆ„戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌æ‰æ‰‘扒扔扖扚扜扤扭扯扳扺扽æŠæŠŽæŠæŠæŠ¦æŠ¨æŠ³æŠ¶æŠ·æŠºæŠ¾æŠ¿æ‹„拎拕拖拚拪拲拴拼拽挃挄挊挋æŒæŒæŒ“挖挘挩挪挭挵挶挹挼ææ‚æƒæ„æ†æŠæ‹æŽæ’æ“æ”æ˜æ›æ¥æ¦æ¬æ­æ±æ´æµ"], +["8fc0a1","æ¸æ¼æ½æ¿æŽ‚掄掇掊æŽæŽ”掕掙掚掞掤掦掭掮掯掽ææ…æˆæŽæ‘æ“æ”æ•æœæ æ¥æªæ¬æ²æ³æµæ¸æ¹æ‰æŠææ’æ”æ˜æžæ æ¢æ¤æ¥æ©æªæ¯æ°æµæ½æ¿æ‘‹æ‘摑摒摓摔摚摛摜æ‘摟摠摡摣摭摳摴摻摽撅撇æ’æ’撑撘撙撛æ’撟撡撣撦撨撬撳撽撾撿"], +["8fc1a1","擄擉擊擋擌擎æ“擑擕擗擤擥擩擪擭擰擵擷擻擿æ”攄攈攉攊æ”攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉æ•æ•’敔敟敠敧敫敺敽æ–æ–…æ–Šæ–’æ–•æ–˜æ–斠斣斦斮斲斳斴斿旂旈旉旎æ—旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉æ˜æ˜‘昒昕昖æ˜"], +["8fc2a1","昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌æšæšæš’暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎æ›æ›”曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾æ…æ‡æˆæŒæ”æ•æ"], +["8fc3a1","æ¦æ¬æ®æ´æ¶æ»æžæž„枎æžæž‘枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙æ æ Ÿæ ¨æ §æ ¬æ ­æ ¯æ °æ ±æ ³æ »æ ¿æ¡„桅桊桌桕桗桘桛桫桮",4,"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌æ£"], +["8fc4a1","æ£æ£‘棓棖棙棜æ£æ£¥æ£¨æ£ªæ£«æ£¬æ£­æ£°æ£±æ£µæ£¶æ£»æ£¼æ£½æ¤†æ¤‰æ¤Šæ¤æ¤‘椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀æ¦æ¦’榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀æ¨æ¨ƒæ¨æ¨‘樕樚æ¨æ¨ æ¨¤æ¨¨æ¨°æ¨²"], +["8fc5a1","樴樷樻樾樿橅橆橉橊橎æ©æ©‘橒橕橖橛橤橧橪橱橳橾æªæªƒæª†æª‡æª‰æª‹æª‘檛æªæªžæªŸæª¥æª«æª¯æª°æª±æª´æª½æª¾æª¿æ«†æ«‰æ«ˆæ«Œæ«æ«”æ«•æ«–æ«œæ«æ«¤æ«§æ«¬æ«°æ«±æ«²æ«¼æ«½æ¬‚欃欆欇欉æ¬æ¬æ¬‘欗欛欞欤欨欫欬欯欵欶欻欿歆歊æ­æ­’æ­–æ­˜æ­æ­ æ­§æ­«æ­®æ­°æ­µæ­½"], +["8fc6a1","歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉æ°æ°Žæ°æ°’氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋æ±æ±æ±’汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆æ³æ³æ³æ³‘泒泔泖"], +["8fc7a1","泚泜泠泧泩泫泬泮泲泴洄洇洊洎æ´æ´‘洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎æ·æ·–æ·›æ·æ·Ÿæ· æ·¢æ·¥æ·©æ·¯æ·°æ·´æ·¶æ·¼æ¸€æ¸„渞渢渧渲渶渹渻渼湄湅湈湉湋æ¹æ¹‘湒湓湔湗湜æ¹æ¹ž"], +["8fc8a1","湢湣湨湳湻湽æºæº“溙溠溧溭溮溱溳溻溿滀æ»æ»ƒæ»‡æ»ˆæ»Šæ»æ»Žæ»æ»«æ»­æ»®æ»¹æ»»æ»½æ¼„漈漊漌æ¼æ¼–漘漚漛漦漩漪漯漰漳漶漻漼漭æ½æ½‘潒潓潗潙潚æ½æ½žæ½¡æ½¢æ½¨æ½¬æ½½æ½¾æ¾ƒæ¾‡æ¾ˆæ¾‹æ¾Œæ¾æ¾æ¾’澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊"], +["8fc9a1","濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇ç€ç€—瀠瀣瀯瀴瀷瀹瀼çƒç„çˆç‰çŠç‹ç”ç•ççžçŽç¤ç¥ç¬ç®çµç¶ç¾ç‚炅炆炔",4,"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃",4,"ç„‹ç„Œç„焞焠焫焭焯焰焱焸ç…煅煆煇煊煋ç…煒煗煚煜煞煠"], +["8fcaa1","煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀ç‡ç‡„燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚çˆçˆŸçˆ¤çˆ«çˆ¯çˆ´çˆ¸çˆ¹ç‰ç‰‚牃牅牎ç‰ç‰ç‰“牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉çŠçŠŽçŠ“犛犨犭犮犱犴犾ç‹ç‹‡ç‹‰ç‹Œç‹•ç‹–狘狟狥狳狴狺狻"], +["8fcba1","狾猂猄猅猇猋çŒçŒ’猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽çƒççç’ç–ç˜ççžçŸç ç¦ç§ç©ç«ç¬ç®ç¯ç±ç·ç¹ç¼çŽ€çŽçŽƒçŽ…玆玎çŽçŽ“玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿ç…ç†ç‰ç‹çŒçç’ç“ç–ç™çç¡ç£ç¦ç§ç©ç´çµç·ç¹çºç»ç½"], +["8fcca1","ç¿ç€çç„ç‡çŠç‘çšç›ç¤ç¦ç¨",9,"ç¹ç‘€ç‘ƒç‘„瑆瑇瑋ç‘ç‘‘ç‘’ç‘—ç‘瑢瑦瑧瑨瑫瑭瑮瑱瑲璀ç’璅璆璇璉ç’ç’璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌ç“瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆"], +["8fcda1","甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎ç•ç•’畗畞畟畡畯畱畹",5,"ç–ç–…ç–疒疓疕疙疜疢疤疴疺疿痀ç—痄痆痌痎ç—痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌ç˜ç˜’瘓瘕瘖瘙瘛瘜ç˜ç˜žç˜£ç˜¥ç˜¦ç˜©ç˜­ç˜²ç˜³ç˜µç˜¸ç˜¹"], +["8fcea1","瘺瘼癊癀ç™ç™ƒç™„癅癉癋癕癙癟癤癥癭癮癯癱癴çšçš…皌çšçš•çš›çšœçšçšŸçš çš¢",6,"皪皭皽ç›ç›…盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾ç‚ç…ç†çŠççŽçç’ç–ç—çœçžçŸç ç¢"], +["8fcfa1","ç¤ç§çªç¬ç°ç²ç³ç´çºç½çž€çž„瞌çžçž”瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉ç ç Žç ‘ç ç ¡ç ¢ç £ç ­ç ®ç °ç µç ·ç¡ƒç¡„硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊ç¢ç¢”碘碡ç¢ç¢žç¢Ÿç¢¤ç¢¨ç¢¬ç¢­ç¢°ç¢±ç¢²ç¢³"], +["8fd0a1","碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌ç¤ç¤šç¤œç¤žç¤Ÿç¤ ç¤¥ç¤§ç¤©ç¤­ç¤±ç¤´ç¤µç¤»ç¤½ç¤¿ç¥„祅祆祊祋ç¥ç¥‘祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊ç§ç§”秖秚ç§ç§ž"], +["8fd1a1","秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜ç©ç©Ÿç© ç©¥ç©§ç©ªç©­ç©µç©¸ç©¾çª€çª‚窅窆窊窋çªçª‘窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰"], +["8fd2a1","笱笴笽笿筀ç­ç­‡ç­Žç­•ç­ ç­¤ç­¦ç­©ç­ªç­­ç­¯ç­²ç­³ç­·ç®„箉箎ç®ç®‘箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾ç°ç°‚簃簄簆簉簋簌簎ç°ç°™ç°›ç° ç°¥ç°¦ç°¨ç°¬ç°±ç°³ç°´ç°¶ç°¹ç°ºç±†ç±Šç±•ç±‘籒籓籙",5], +["8fd3a1","籡籣籧籩籭籮籰籲籹籼籽粆粇ç²ç²”粞粠粦粰粶粷粺粻粼粿糄糇糈糉ç³ç³ç³“糔糕糗糙糚ç³ç³¦ç³©ç³«ç³µç´ƒç´‡ç´ˆç´‰ç´ç´‘ç´’ç´“ç´–ç´ç´žç´£ç´¦ç´ªç´­ç´±ç´¼ç´½ç´¾çµ€çµçµ‡çµˆçµçµ‘絓絗絙絚絜çµçµ¥çµ§çµªçµ°çµ¸çµºçµ»çµ¿ç¶ç¶‚綃綅綆綈綋綌ç¶ç¶‘綖綗ç¶"], +["8fd4a1","綞綦綧綪綳綶綷綹緂",4,"ç·Œç·ç·Žç·—緙縀緢緥緦緪緫緭緱緵緶緹緺縈ç¸ç¸‘縕縗縜ç¸ç¸ ç¸§ç¸¨ç¸¬ç¸­ç¸¯ç¸³ç¸¶ç¸¿ç¹„繅繇繎ç¹ç¹’繘繟繡繢繥繫繮繯繳繸繾çºçº†çº‡çºŠçºçº‘纕纘纚çºçºžç¼¼ç¼»ç¼½ç¼¾ç¼¿ç½ƒç½„罇ç½ç½’罓罛罜ç½ç½¡ç½£ç½¤ç½¥ç½¦ç½­"], +["8fd5a1","罱罽罾罿羀羋ç¾ç¾ç¾ç¾‘羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎ç¿ç¿›ç¿Ÿç¿£ç¿¥ç¿¨ç¿¬ç¿®ç¿¯ç¿²ç¿ºç¿½ç¿¾ç¿¿è€‡è€ˆè€Šè€è€Žè€è€‘耓耔耖è€è€žè€Ÿè€ è€¤è€¦è€¬è€®è€°è€´è€µè€·è€¹è€ºè€¼è€¾è€è„è è¤è¦è­è±èµè‚肈肎肜肞肦肧肫肸肹胈èƒèƒèƒ’胔胕胗胘胠胭胮"], +["8fd6a1","胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷è†è†è†„膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎è‡è‡•è‡—臛è‡è‡žè‡¡è‡¤è‡«è‡¬è‡°è‡±è‡²è‡µè‡¶è‡¸è‡¹è‡½è‡¿èˆ€èˆƒèˆèˆ“舔舙舚èˆèˆ¡èˆ¢èˆ¨èˆ²èˆ´èˆºè‰ƒè‰„艅艆"], +["8fd7a1","艋艎è‰è‰‘艖艜艠艣艧艭艴艻艽艿芀èŠèŠƒèŠ„芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆è‹è‹•è‹šè‹ è‹¢è‹¤è‹¨è‹ªè‹­è‹¯è‹¶è‹·è‹½è‹¾èŒ€èŒèŒ‡èŒˆèŒŠèŒ‹è”茛èŒèŒžèŒŸèŒ¡èŒ¢èŒ¬èŒ­èŒ®èŒ°èŒ³èŒ·èŒºèŒ¼èŒ½è‚èƒè„è‡èèŽè‘è•è–è—è°è¸"], +["8fd8a1","è½è¿èŽ€èŽ‚莄莆èŽèŽ’莔莕莘莙莛莜èŽèŽ¦èŽ§èŽ©èŽ¬èŽ¾èŽ¿è€è‡è‰èèè‘è”èè“è¨èªè¶è¸è¹è¼èè†èŠèè‘è•è™èŽ­è¯è¹è‘…葇葈葊è‘è‘葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽è’蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌è“è““"], +["8fd9a1","蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎è”蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆è•",4,"蕖蕙蕜",6,"蕤蕫蕯蕹蕺蕻蕽蕿è–薅薆薉薋薌è–è–“è–˜è–薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼"], +["8fdaa1","藿蘀蘄蘅è˜è˜Žè˜è˜‘蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙è™è™ ",4,"虩虬虯虵虶虷虺èšèš‘蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀è›è›ƒè›…蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎èœèœèœ“蜔蜙蜞蜟蜡蜣"], +["8fdba1","蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾è€èƒè…èè˜èè¡è¤è¥è¯è±è²è»èžƒ",6,"螋螌èžèž“螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿èŸèŸˆèŸ‰èŸŠèŸŽèŸ•èŸ–蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿è è ƒè †è ‰è Šè ‹è è ™è ’蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵"], +["8fdca1","蠺蠼è¡è¡ƒè¡…衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊",4,"裑裒裓裛裞裧裯裰裱裵裷è¤è¤†è¤è¤Žè¤è¤•è¤–褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉è¥è¥’襗襚襛襜襡襢襣襫襮襰襳襵襺"], +["8fdda1","襻襼襽覉è¦è¦è¦”覕覛覜覟覠覥覰覴覵覶覷覼觔",4,"觥觩觫觭觱觳觶觹觽觿訄訅訇è¨è¨‘訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉è©è©Žè©“詖詗詘詜è©è©¡è©¥è©§è©µè©¶è©·è©¹è©ºè©»è©¾è©¿èª€èªƒèª†èª‹èªèªèª’誖誗誙誟誧誩誮誯誳"], +["8fdea1","誶誷誻誾諃諆諈諉諊諑諓諔諕諗è«è«Ÿè«¬è«°è«´è«µè«¶è«¼è«¿è¬…謆謋謑謜謞謟謊謭謰謷謼譂",4,"譈譒譓譔譙è­è­žè­£è­­è­¶è­¸è­¹è­¼è­¾è®è®„讅讋è®è®è®”讕讜讞讟谸谹谽谾豅豇豉豋è±è±‘豓豔豗豘豛è±è±™è±£è±¤è±¦è±¨è±©è±­è±³è±µè±¶è±»è±¾è²†"], +["8fdfa1","貇貋è²è²’貓貙貛貜貤貹貺賅賆賉賋è³è³–賕賙è³è³¡è³¨è³¬è³¯è³°è³²è³µè³·è³¸è³¾è³¿è´è´ƒè´‰è´’贗贛赥赩赬赮赿趂趄趈è¶è¶è¶‘趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽è¸è¸„踅踆踋踑踔踖踠踡踢"], +["8fe0a1","踣踦踧踱踳踶踷踸踹踽蹀è¹è¹‹è¹è¹Žè¹è¹”蹛蹜è¹è¹žè¹¡è¹¢è¹©è¹¬è¹­è¹¯è¹°è¹±è¹¹è¹ºè¹»èº‚躃躉èºèº’躕躚躛èºèºžèº¢èº§èº©èº­èº®èº³èºµèººèº»è»€è»è»ƒè»„軇è»è»‘軔軜軨軮軰軱軷軹軺軭輀輂輇輈è¼è¼è¼–輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀è½"], +["8fe1a1","轃轇è½è½‘",4,"轘è½è½žè½¥è¾è¾ è¾¡è¾¤è¾¥è¾¦è¾µè¾¶è¾¸è¾¾è¿€è¿è¿†è¿Šè¿‹è¿è¿è¿’迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿éƒé„éŒé›éé¢é¦é§é¬é°é´é¹é‚…邈邋邌邎é‚邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃"], +["8fe2a1","郄郅郇郈郕郗郘郙郜éƒéƒŸéƒ¥éƒ’郶郫郯郰郴郾郿鄀鄄鄅鄆鄈é„é„鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈é…酓酗酙酚酛酡酤酧酭酴酹酺酻é†é†ƒé†…醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿"], +["8fe3a1","釂釃釅釓釔釗釙釚釞釤釥釩釪釬",5,"釷釹釻釽鈀éˆéˆ„鈅鈆鈇鈉鈊鈌éˆéˆ’鈓鈖鈘鈜éˆéˆ£éˆ¤éˆ¥éˆ¦éˆ¨éˆ®éˆ¯éˆ°éˆ³éˆµéˆ¶éˆ¸éˆ¹éˆºéˆ¼éˆ¾é‰€é‰‚鉃鉆鉇鉊é‰é‰Žé‰é‰‘鉘鉙鉜é‰é‰ é‰¡é‰¥é‰§é‰¨é‰©é‰®é‰¯é‰°é‰µ",4,"鉻鉼鉽鉿銈銉銊éŠéŠŽéŠ’銗"], +["8fe4a1","銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿",4,"鋅鋆鋇鋈鋋鋌é‹é‹Žé‹é‹“鋕鋗鋘鋙鋜é‹é‹Ÿé‹ é‹¡é‹£é‹¥é‹§é‹¨é‹¬é‹®é‹°é‹¹é‹»é‹¿éŒ€éŒ‚錈éŒéŒ‘錔錕錜éŒéŒžéŒŸéŒ¡éŒ¤éŒ¥éŒ§éŒ©éŒªéŒ³éŒ´éŒ¶éŒ·é‡éˆé‰éé‘é’é•é—é˜éšéžé¤é¥é§é©éªé­é¯é°é±é³é´é¶"], +["8fe5a1","éºé½é¿éŽ€éŽéŽ‚鎈鎊鎋éŽéŽéŽ’鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩éé„é…é†é‡é‰",4,"é“é™éœéžéŸé¢é¦é§é¹é·é¸éºé»é½éé‚é„éˆé‰ééŽéé•é–é—éŸé®é¯é±é²é³é´é»é¿é½é‘ƒé‘…鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹"], +["8fe6a1","镾閄閈閌é–é–Žé–閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋é—闑闒闓闙闚é—闞闟闠闤闦é˜é˜žé˜¢é˜¤é˜¥é˜¦é˜¬é˜±é˜³é˜·é˜¸é˜¹é˜ºé˜¼é˜½é™é™’陔陖陗陘陡陮陴陻陼陾陿éšéš‚隃隄隉隑隖隚éšéšŸéš¤éš¥éš¦éš©éš®éš¯éš³éšºé›Šé›’嶲雘雚é›é›žé›Ÿé›©é›¯é›±é›ºéœ‚"], +["8fe7a1","霃霅霉霚霛éœéœ¡éœ¢éœ£éœ¨éœ±éœ³ééƒéŠéŽéé•é—é˜éšé›é£é§éªé®é³é¶é·é¸é»é½é¿éž€éž‰éž•éž–鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿éŸéŸ„韅韇韉韊韌éŸéŸŽéŸéŸ‘韔韗韘韙éŸéŸžéŸ éŸ›éŸ¡éŸ¤éŸ¯éŸ±éŸ´éŸ·éŸ¸éŸºé ‡é Šé ™é é Žé ”頖頜頞頠頣頦"], +["8fe8a1","頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱",4,"餹餺餻餼饀é¥é¥†é¥‡é¥ˆé¥é¥Žé¥”饘饙饛饜饞饟饠馛é¦é¦Ÿé¦¦é¦°é¦±é¦²é¦µ"], +["8fe9a1","馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌é¨é¨‘騖騞騠騢騣騤騧騭騮騳騵騶騸驇é©é©„驊驋驌驎驑驔驖é©éªªéª¬éª®éª¯éª²éª´éªµéª¶éª¹éª»éª¾éª¿é«é«ƒé«†é«ˆé«Žé«é«’髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿",4], +["8feaa1","鬄鬅鬈鬉鬋鬌é¬é¬Žé¬é¬’鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪",4,"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋é®é®é®é®”鮚é®é®žé®¦é®§é®©é®¬é®°é®±é®²é®·é®¸é®»é®¼é®¾é®¿é¯é¯‡é¯ˆé¯Žé¯é¯—鯘é¯é¯Ÿé¯¥é¯§é¯ªé¯«é¯¯é¯³é¯·é¯¸"], +["8feba1","鯹鯺鯽鯿鰀鰂鰋é°é°‘鰖鰘鰙鰚鰜鰞鰢鰣鰦",4,"鰱鰵鰶鰷鰽é±é±ƒé±„鱅鱉鱊鱎é±é±é±“鱔鱖鱘鱛é±é±žé±Ÿé±£é±©é±ªé±œé±«é±¨é±®é±°é±²é±µé±·é±»é³¦é³²é³·é³¹é´‹é´‚鴑鴗鴘鴜é´é´žé´¯é´°é´²é´³é´´é´ºé´¼éµ…鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻"], +["8feca1","鵼鵾鶃鶄鶆鶊é¶é¶Žé¶’鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎é¸é¸‘鸒鸕鸖鸙鸜é¸é¹ºé¹»é¹¼éº€éº‚麃麄麅麇麎éºéº–麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵"], +["8feda1","黸黿鼂鼃鼉é¼é¼é¼‘鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿é½é½ƒ",4,"齓齕齖齗齘齚é½é½žé½¨é½©é½­",4,"齳齵齺齽é¾é¾é¾‘龒龔龖龗龞龡龢龣龥"] +] diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json new file mode 100755 index 0000000..85c6934 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json @@ -0,0 +1 @@ +{"uChars":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],"gbChars":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]} \ No newline at end of file diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gbk-added.json b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gbk-added.json new file mode 100755 index 0000000..8abfa9f --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gbk-added.json @@ -0,0 +1,55 @@ +[ +["a140","",62], +["a180","î”…",32], +["a240","",62], +["a280","î•¥",32], +["a2ab","î¦",5], +["a2e3","€î­"], +["a2ef","î®î¯"], +["a2fd","î°î±"], +["a340","î–†",62], +["a380","î—…",31," "], +["a440","î—¦",62], +["a480","",32], +["a4f4","î²",10], +["a540","",62], +["a580","îš…",32], +["a5f7","î½",7], +["a640","",62], +["a680","",32], +["a6b9","îž…",7], +["a6d9","îž",6], +["a6ec",""], +["a6f3","îž–"], +["a6f6","îž—",8], +["a740","",62], +["a780","î…",32], +["a7c2","îž ",14], +["a7f2","",12], +["a896","îž¼",10], +["a8bc",""], +["a8bf","ǹ"], +["a8c1",""], +["a8ea","îŸ",20], +["a958",""], +["a95b",""], +["a95d",""], +["a989","〾⿰",11], +["a997","",12], +["a9f0","î ",14], +["aaa1","",93], +["aba1","îž",93], +["aca1","",93], +["ada1","î„š",93], +["aea1","î…¸",93], +["afa1","",93], +["d7fa","î ",4], +["f8a1","",93], +["f9a1","",93], +["faa1","î‹°",93], +["fba1","îŽ",93], +["fca1","",93], +["fda1","îŠ",93], +["fe50","âºî –⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘ã§ã§Ÿã©³ã§î «î ¬ã­Žã±®ã³ âº§î ±î ²âºªä–䅟⺮䌷⺳⺶⺷䎱䎬⺻ä䓖䙡䙌"], +["fe80","䜣䜩ä¼äžâ»Šä¥‡ä¥ºä¥½ä¦‚䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓",6,"䶮",93] +] diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/shiftjis.json b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/shiftjis.json new file mode 100755 index 0000000..5a3a43c --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/tables/shiftjis.json @@ -0,0 +1,125 @@ +[ +["0","\u0000",128], +["a1","。",62], +["8140"," ã€ã€‚,.・:;?ï¼ã‚›ã‚œÂ´ï½€Â¨ï¼¾ï¿£ï¼¿ãƒ½ãƒ¾ã‚ゞ〃ä»ã€…〆〇ー―â€ï¼ï¼¼ï½žâˆ¥ï½œâ€¦â€¥â€˜â€™â€œâ€ï¼ˆï¼‰ã€”〕[]{ï½ã€ˆ",9,"+ï¼Â±Ã—"], +["8180","÷ï¼â‰ ï¼œï¼žâ‰¦â‰§âˆžâˆ´â™‚♀°′″℃¥$¢£%#&*@§☆★○â—◎◇◆□■△▲▽▼※〒→â†â†‘↓〓"], +["81b8","∈∋⊆⊇⊂⊃∪∩"], +["81c8","∧∨¬⇒⇔∀∃"], +["81da","∠⊥⌒∂∇≡≒≪≫√∽âˆâˆµâˆ«âˆ¬"], +["81f0","ʼn♯♭♪†‡¶"], +["81fc","â—¯"], +["824f","ï¼",9], +["8260","A",25], +["8281","ï½",25], +["829f","ã",82], +["8340","ã‚¡",62], +["8380","ム",22], +["839f","Α",16,"Σ",6], +["83bf","α",16,"σ",6], +["8440","Ð",5,"ÐЖ",25], +["8470","а",5,"ёж",7], +["8480","о",17], +["849f","─│┌â”┘└├┬┤┴┼â”┃â”┓┛┗┣┳┫┻╋┠┯┨┷┿â”┰┥┸╂"], +["8740","â‘ ",19,"â… ",9], +["875f","ã‰ãŒ”㌢ã㌘㌧㌃㌶ã‘ã—ãŒãŒ¦ãŒ£ãŒ«ãŠãŒ»ãŽœãŽãŽžãŽŽãŽã„㎡"], +["877e","ã»"], +["8780","ã€ã€Ÿâ„–ã℡㊤",4,"㈱㈲㈹ã¾ã½ã¼â‰’≡∫∮∑√⊥∠∟⊿∵∩∪"], +["889f","亜唖娃阿哀愛挨姶逢葵茜ç©æ‚ªæ¡æ¸¥æ—­è‘¦èŠ¦é¯µæ¢“圧斡扱宛å§è™»é£´çµ¢ç¶¾é®Žæˆ–粟袷安庵按暗案闇éžæ以伊ä½ä¾å‰å›²å¤·å§”å¨å°‰æƒŸæ„慰易椅為ç•ç•°ç§»ç¶­ç·¯èƒƒèŽè¡£è¬‚é•éºåŒ»äº•äº¥åŸŸè‚²éƒç£¯ä¸€å£±æº¢é€¸ç¨²èŒ¨èŠ‹é°¯å…å°å’½å“¡å› å§»å¼•é£²æ·«èƒ¤è”­"], +["8940","院陰隠韻å‹å³å®‡çƒç¾½è¿‚雨å¯éµœçªºä¸‘碓臼渦嘘唄æ¬è”šé°»å§¥åŽ©æµ¦ç“œé–噂云é‹é›²è餌å¡å–¶å¬°å½±æ˜ æ›³æ „永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦è¬è¶Šé–²æ¦ŽåŽ­å††"], +["8980","園堰奄宴延怨掩æ´æ²¿æ¼”炎焔煙燕猿ç¸è‰¶è‹‘è–—é é‰›é´›å¡©æ–¼æ±šç”¥å‡¹å¤®å¥¥å¾€å¿œæŠ¼æ—ºæ¨ªæ¬§æ®´çŽ‹ç¿è¥–鴬鴎黄岡沖è»å„„屋憶臆桶牡乙俺å¸æ©æ¸©ç©éŸ³ä¸‹åŒ–仮何伽価佳加å¯å˜‰å¤å«å®¶å¯¡ç§‘暇果架歌河ç«ç‚ç¦ç¦¾ç¨¼ç®‡èŠ±è‹›èŒ„è·è¯è“è¦èª²å˜©è²¨è¿¦éŽéœžèšŠä¿„峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔æ¢æ‡æˆ’æ‹æ”¹"], +["8a40","é­æ™¦æ¢°æµ·ç°ç•Œçš†çµµèŠ¥èŸ¹é–‹éšŽè²å‡±åŠ¾å¤–咳害崖慨概涯ç¢è“‹è¡—該鎧骸浬馨蛙垣柿蛎鈎劃嚇å„廓拡撹格核殻ç²ç¢ºç©«è¦šè§’赫較郭閣隔é©å­¦å²³æ¥½é¡é¡ŽæŽ›ç¬ æ¨«"], +["8a80","橿梶é°æ½Ÿå‰²å–æ°æ‹¬æ´»æ¸‡æ»‘è‘›è¤è½„且鰹å¶æ¤›æ¨ºéž„株兜竃蒲釜鎌噛鴨栢茅è±ç²¥åˆˆè‹…瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾æ›æ•¢æŸ‘桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰è‚艦莞観諌貫還鑑間閑関陥韓館舘丸å«å²¸å·ŒçŽ©ç™Œçœ¼å²©ç¿«è´‹é›é ‘顔願ä¼ä¼Žå±å–œå™¨åŸºå¥‡å¬‰å¯„å²å¸Œå¹¾å¿Œæ®æœºæ——既期棋棄"], +["8b40","機帰毅気汽畿祈季稀紀徽è¦è¨˜è²´èµ·è»Œè¼é£¢é¨Žé¬¼äº€å½å„€å¦“宜戯技擬欺犠疑祇義蟻誼議掬èŠéž å‰åƒå–«æ¡”橘詰砧æµé»å´å®¢è„šè™é€†ä¸˜ä¹…仇休åŠå¸å®®å¼“急救"], +["8b80","朽求汲泣ç¸çƒç©¶çª®ç¬ˆç´šç³¾çµ¦æ—§ç‰›åŽ»å±…巨拒拠挙渠虚許è·é‹¸æ¼ç¦¦é­šäº¨äº«äº¬ä¾›ä¾ åƒ‘兇競共凶å”匡å¿å«å–¬å¢ƒå³¡å¼·å½Šæ€¯ææ­æŒŸæ•™æ©‹æ³ç‹‚狭矯胸脅興蕎郷é¡éŸ¿é¥—é©šä»°å‡å°­æšæ¥­å±€æ›²æ¥µçŽ‰æ¡ç²åƒ…勤å‡å·¾éŒ¦æ–¤æ¬£æ¬½ç´ç¦ç¦½ç­‹ç·ŠèŠ¹èŒè¡¿è¥Ÿè¬¹è¿‘金åŸéŠ€ä¹å€¶å¥åŒºç‹—玖矩苦躯駆駈駒具愚虞喰空å¶å¯“é‡éš…串櫛釧屑屈"], +["8c40","掘窟沓é´è½¡çªªç†Šéšˆç²‚æ —ç¹°æ¡‘é¬å‹²å›è–«è¨“群è»éƒ¡å¦è¢ˆç¥ä¿‚傾刑兄啓圭çªåž‹å¥‘形径æµæ…¶æ…§æ†©æŽ²æºæ•¬æ™¯æ¡‚渓畦稽系経継繋罫茎èŠè›è¨ˆè©£è­¦è»½é šé¶èŠ¸è¿Žé¯¨"], +["8c80","劇戟撃激隙æ¡å‚‘欠決潔穴çµè¡€è¨£æœˆä»¶å€¹å€¦å¥å…¼åˆ¸å‰£å–§åœå …嫌建憲懸拳æ²æ¤œæ¨©ç‰½çŠ¬çŒ®ç ”硯絹県肩見謙賢軒é£éµé™ºé¡•é¨“鹸元原厳幻弦減æºçŽ„ç¾çµƒèˆ·è¨€è«ºé™ä¹Žå€‹å¤å‘¼å›ºå§‘孤己庫弧戸故枯湖ç‹ç³Šè¢´è‚¡èƒ¡è°è™Žèª‡è·¨éˆ·é›‡é¡§é¼“五互ä¼åˆå‘‰å¾å¨¯å¾Œå¾¡æ‚Ÿæ¢§æªŽç‘šç¢èªžèª¤è­·é†ä¹žé¯‰äº¤ä½¼ä¾¯å€™å€–光公功効勾厚å£å‘"], +["8d40","åŽå–‰å‘垢好孔å­å®å·¥å·§å··å¹¸åºƒåºšåº·å¼˜æ’慌抗拘控攻昂晃更æ­æ ¡æ¢—構江洪浩港æºç”²çš‡ç¡¬ç¨¿ç³ ç´…紘絞綱耕考肯肱腔è†èˆªè’行衡講貢購郊酵鉱砿鋼閤é™"], +["8d80","項香高鴻剛劫å·åˆå£•æ‹·æ¿ è±ªè½Ÿéº¹å…‹åˆ»å‘Šå›½ç©€é…·éµ é»’ç„漉腰甑忽惚骨狛込此頃今困å¤å¢¾å©šæ¨æ‡‡æ˜æ˜†æ ¹æ¢±æ··ç—•ç´ºè‰®é­‚些ä½å‰å”†åµ¯å·¦å·®æŸ»æ²™ç‘³ç ‚è©éŽ–裟å座挫債催å†æœ€å“‰å¡žå¦»å®°å½©æ‰æŽ¡æ ½æ­³æ¸ˆç½é‡‡çŠ€ç •ç ¦ç¥­æ–Žç´°èœè£è¼‰éš›å‰¤åœ¨æ罪財冴å‚阪堺榊肴咲崎埼碕鷺作削咋æ¾æ˜¨æœ”柵窄策索錯桜鮭笹匙冊刷"], +["8e40","察拶撮擦札殺薩雑çšé¯–æŒéŒ†é®«çš¿æ™’三傘å‚山惨撒散桟燦çŠç”£ç®—纂蚕讃賛酸é¤æ–¬æš«æ®‹ä»•ä»”伺使刺å¸å²å—£å››å£«å§‹å§‰å§¿å­å±å¸‚師志æ€æŒ‡æ”¯å­œæ–¯æ–½æ—¨æžæ­¢"], +["8e80","æ­»æ°ç…祉ç§ç³¸ç´™ç´«è‚¢è„‚至視詞詩試誌諮資賜雌飼歯事似ä¾å…字寺慈æŒæ™‚次滋治爾璽痔ç£ç¤ºè€Œè€³è‡ªè’”辞æ±é¹¿å¼è­˜é´«ç«ºè»¸å®é›«ä¸ƒå±åŸ·å¤±å«‰å®¤æ‚‰æ¹¿æ¼†ç–¾è³ªå®Ÿè”€ç¯ å²æŸ´èŠå±¡è•Šç¸žèˆŽå†™å°„æ¨èµ¦æ–œç…®ç¤¾ç´—者è¬è»Šé®è›‡é‚ªå€Ÿå‹ºå°ºæ“ç¼çˆµé…Œé‡ˆéŒ«è‹¥å¯‚弱惹主å–守手朱殊狩ç ç¨®è…«è¶£é…’首儒å—呪寿授樹綬需囚åŽå‘¨"], +["8f40","宗就州修æ„拾洲秀秋終ç¹ç¿’臭舟è’衆襲è®è¹´è¼¯é€±é…‹é…¬é›†é†œä»€ä½å……å従戎柔æ±æ¸‹ç£ç¸¦é‡éŠƒå”夙宿淑ç¥ç¸®ç²›å¡¾ç†Ÿå‡ºè¡“述俊峻春瞬竣舜駿准循旬楯殉淳"], +["8f80","準潤盾純巡éµé†‡é †å‡¦åˆæ‰€æš‘曙渚庶緒署書薯藷諸助å™å¥³åºå¾æ•é‹¤é™¤å‚·å„Ÿå‹åŒ å‡å¬å“¨å•†å”±å˜—奨妾娼宵将å°å°‘尚庄床廠彰承抄招掌æ·æ˜‡æ˜Œæ˜­æ™¶æ¾æ¢¢æ¨Ÿæ¨µæ²¼æ¶ˆæ¸‰æ¹˜ç„¼ç„¦ç…§ç—‡çœç¡ç¤ç¥¥ç§°ç« ç¬‘粧紹肖è–蒋蕉è¡è£³è¨Ÿè¨¼è©”詳象賞醤鉦é¾é˜éšœéž˜ä¸Šä¸ˆä¸žä¹—冗剰城場壌嬢常情擾æ¡æ–浄状畳穣蒸譲醸錠嘱埴飾"], +["9040","æ‹­æ¤æ®–燭織è·è‰²è§¦é£Ÿè•è¾±å°»ä¼¸ä¿¡ä¾µå”‡å¨ å¯å¯©å¿ƒæ…ŽæŒ¯æ–°æ™‹æ£®æ¦›æµ¸æ·±ç”³ç–¹çœŸç¥žç§¦ç´³è‡£èŠ¯è–ªè¦ªè¨ºèº«è¾›é€²é‡éœ‡äººä»åˆƒå¡µå£¬å°‹ç”šå°½è…Žè¨Šè¿…陣é­ç¬¥è«é ˆé…¢å›³åŽ¨"], +["9080","逗å¹åž‚帥推水炊ç¡ç²‹ç¿ è¡°é‚é…”éŒéŒ˜éšç‘žé«„崇嵩数枢趨雛æ®æ‰æ¤™è…頗雀裾澄摺寸世瀬ç•æ˜¯å‡„制勢姓å¾æ€§æˆæ”¿æ•´æ˜Ÿæ™´æ£²æ –正清牲生盛精è–声製西誠誓請é€é†’é’é™æ–‰ç¨Žè„†éš»å¸­æƒœæˆšæ–¥æ˜”æžçŸ³ç©ç±ç¸¾è„Šè²¬èµ¤è·¡è¹Ÿç¢©åˆ‡æ‹™æŽ¥æ‘‚折設窃節説雪絶舌è‰ä»™å…ˆåƒå å®£å°‚å°–å·æˆ¦æ‰‡æ’°æ “栴泉浅洗染潜煎煽旋穿箭線"], +["9140","繊羨腺舛船薦詮賎践é¸é·éŠ­éŠ‘閃鮮å‰å–„漸然全禅繕膳糎噌塑岨措曾曽楚狙ç–疎礎祖租粗素組蘇訴阻é¡é¼ åƒ§å‰µåŒå¢å€‰å–ªå£®å¥çˆ½å®‹å±¤åŒæƒ£æƒ³æœæŽƒæŒ¿æŽ»"], +["9180","æ“早曹巣æ§æ§½æ¼•ç‡¥äº‰ç—©ç›¸çª“糟ç·ç¶œè¡è‰è˜è‘¬è’¼è—»è£…èµ°é€é­éŽ—霜騒åƒå¢—憎臓蔵贈造促å´å‰‡å³æ¯æ‰æŸæ¸¬è¶³é€Ÿä¿—属賊æ—続å’袖其æƒå­˜å­«å°Šææ‘éœä»–多太汰詑唾堕妥惰打æŸèˆµæ¥•é™€é§„騨体堆対è€å²±å¸¯å¾…怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代å°å¤§ç¬¬é†é¡Œé·¹æ»ç€§å“啄宅托択拓沢濯ç¢è¨—é¸æ¿è«¾èŒ¸å‡§è›¸åª"], +["9240","å©ä½†é”辰奪脱巽竪辿棚谷狸鱈樽誰丹å˜å˜†å¦æ‹…探旦歎淡湛炭短端箪綻耽胆蛋誕é›å›£å£‡å¼¾æ–­æš–檀段男談値知地弛æ¥æ™ºæ± ç—´ç¨šç½®è‡´èœ˜é…馳築畜竹筑蓄"], +["9280","é€ç§©çª’茶嫡ç€ä¸­ä»²å®™å¿ æŠ½æ˜¼æŸ±æ³¨è™«è¡·è¨»é…Žé‹³é§æ¨—瀦猪苧著貯ä¸å…†å‡‹å–‹å¯µå¸–帳åºå¼”張彫徴懲挑暢æœæ½®ç‰’町眺è´è„¹è…¸è¶èª¿è«œè¶…跳銚長頂鳥勅æ—直朕沈ç賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴é”椿潰åªå£·å¬¬ç´¬çˆªåŠé‡£é¶´äº­ä½Žåœåµå‰ƒè²žå‘ˆå ¤å®šå¸åº•åº­å»·å¼Ÿæ‚ŒæŠµæŒºæ梯汀碇禎程締艇訂諦蹄逓"], +["9340","邸鄭釘鼎泥摘擢敵滴的笛é©é‘溺哲徹撤è½è¿­é‰„典填天展店添çºç”œè²¼è»¢é¡›ç‚¹ä¼æ®¿æ¾±ç”°é›»å…Žå堵塗妬屠徒斗æœæ¸¡ç™»èŸè³­é€”都é砥砺努度土奴怒倒党冬"], +["9380","å‡åˆ€å”塔塘套宕島嶋悼投æ­æ±æ¡ƒæ¢¼æ£Ÿç›—淘湯涛ç¯ç‡ˆå½“痘祷等答筒糖統到董蕩藤討謄豆è¸é€ƒé€é™é™¶é ­é¨°é—˜åƒå‹•åŒå ‚導憧撞洞瞳童胴è„é“銅峠鴇匿得徳涜特ç£ç¦¿ç¯¤æ¯’独読栃橡凸çªæ¤´å±Šé³¶è‹«å¯…酉瀞噸屯惇敦沌豚é頓呑曇éˆå¥ˆé‚£å†…ä¹å‡ªè–™è¬Žç˜æºé‹æ¥¢é¦´ç¸„ç•·å—楠軟難æ±äºŒå°¼å¼è¿©åŒ‚賑肉虹廿日乳入"], +["9440","如尿韮任妊å¿èªæ¿¡ç¦°ç¥¢å¯§è‘±çŒ«ç†±å¹´å¿µæ»æ’šç‡ƒç²˜ä¹ƒå»¼ä¹‹åŸœåš¢æ‚©æ¿ƒç´èƒ½è„³è†¿è¾²è¦—蚤巴把播覇æ·æ³¢æ´¾ç¶ç ´å©†ç½µèŠ­é¦¬ä¿³å»ƒæ‹æŽ’æ•—æ¯ç›ƒç‰ŒèƒŒè‚ºè¼©é…å€åŸ¹åª’梅"], +["9480","楳煤狽買売賠陪這è¿ç§¤çŸ§è©ä¼¯å‰¥åšæ‹æŸæ³Šç™½ç®”粕舶薄迫æ›æ¼ çˆ†ç¸›èŽ«é§éº¦å‡½ç®±ç¡²ç®¸è‚‡ç­ˆæ«¨å¹¡è‚Œç•‘畠八鉢溌発醗髪ä¼ç½°æŠœç­é–¥é³©å™ºå¡™è›¤éš¼ä¼´åˆ¤åŠåå›å¸†æ¬æ–‘æ¿æ°¾æ±Žç‰ˆçŠ¯ç­ç•”ç¹èˆ¬è—©è²©ç¯„釆煩頒飯挽晩番盤ç£è•ƒè›®åŒªå‘å¦å¦ƒåº‡å½¼æ‚²æ‰‰æ‰¹æŠ«æ–比泌疲皮碑秘緋罷肥被誹費é¿éžé£›æ¨‹ç°¸å‚™å°¾å¾®æž‡æ¯˜çµçœ‰ç¾Ž"], +["9540","鼻柊稗匹疋髭彦è†è±è‚˜å¼¼å¿…畢筆逼桧姫媛ç´ç™¾è¬¬ä¿µå½ªæ¨™æ°·æ¼‚瓢票表評豹廟æ病秒苗錨鋲蒜蛭鰭å“彬斌浜瀕貧賓頻æ•ç“¶ä¸ä»˜åŸ å¤«å©¦å¯Œå†¨å¸ƒåºœæ€–扶敷"], +["9580","斧普浮父符è…膚芙譜負賦赴阜附侮撫武舞葡蕪部å°æ¥“風葺蕗ä¼å‰¯å¾©å¹…æœç¦è…¹è¤‡è¦†æ·µå¼—払沸ä»ç‰©é®’分å»å™´å¢³æ†¤æ‰®ç„šå¥®ç²‰ç³žç´›é›°æ–‡èžä¸™ä½µå…µå¡€å¹£å¹³å¼ŠæŸ„並蔽閉陛米é åƒ»å£ç™–碧別瞥蔑箆å変片篇編辺返é便勉娩å¼éž­ä¿èˆ—鋪圃æ•æ­©ç”«è£œè¼”穂募墓慕戊暮æ¯ç°¿è©å€£ä¿¸åŒ…呆報奉å®å³°å³¯å´©åº–抱æ§æ”¾æ–¹æœ‹"], +["9640","法泡烹砲縫胞芳èŒè“¬èœ‚褒訪豊邦鋒飽鳳鵬ä¹äº¡å‚剖åŠå¦¨å¸½å¿˜å¿™æˆ¿æš´æœ›æŸæ£’冒紡肪膨謀貌貿鉾防å é ¬åŒ—僕åœå¢¨æ’²æœ´ç‰§ç¦ç©†é‡¦å‹ƒæ²¡æ®†å €å¹Œå¥”本翻凡盆"], +["9680","摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒æ¡äº¦ä¿£åˆæŠ¹æœ«æ²«è¿„侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙ç²æ°‘眠務夢無牟矛霧鵡椋婿娘冥å命明盟迷銘鳴姪ç‰æ»…å…棉綿緬é¢éººæ‘¸æ¨¡èŒ‚妄孟毛猛盲網耗蒙儲木黙目æ¢å‹¿é¤…尤戻籾貰å•æ‚¶ç´‹é–€åŒä¹Ÿå†¶å¤œçˆºè€¶é‡Žå¼¥çŸ¢åŽ„役約薬訳èºé–柳薮鑓愉愈油癒"], +["9740","諭輸唯佑優勇å‹å®¥å¹½æ‚ æ†‚æ–有柚湧涌猶猷由ç¥è£•èª˜éŠé‚‘郵雄èžå¤•äºˆä½™ä¸Žèª‰è¼¿é å‚­å¹¼å¦–容庸æšæºæ“曜楊様洋溶熔用窯羊耀葉蓉è¦è¬¡è¸Šé¥é™½é¤Šæ…¾æŠ‘欲"], +["9780","沃浴翌翼淀羅螺裸æ¥èŽ±é ¼é›·æ´›çµ¡è½é…ªä¹±åµåµæ¬„æ¿«è—蘭覧利åå±¥æŽæ¢¨ç†ç’ƒç—¢è£è£¡é‡Œé›¢é™¸å¾‹çŽ‡ç«‹è‘ŽæŽ ç•¥åŠ‰æµæºœç‰ç•™ç¡«ç²’隆竜é¾ä¾¶æ…®æ—…虜了亮僚両凌寮料æ¢æ¶¼çŒŸç™‚瞭稜糧良諒é¼é‡é™µé ˜åŠ›ç·‘倫厘林淋ç‡ç³è‡¨è¼ªéš£é±—麟瑠å¡æ¶™ç´¯é¡žä»¤ä¼¶ä¾‹å†·åŠ±å¶ºæ€œçŽ²ç¤¼è‹“鈴隷零霊麗齢暦歴列劣烈裂廉æ‹æ†æ¼£ç…‰ç°¾ç·´è¯"], +["9840","蓮連錬呂魯櫓炉賂路露労å©å»Šå¼„朗楼榔浪æ¼ç‰¢ç‹¼ç¯­è€è¾è‹éƒŽå…­éº“禄肋録論倭和話歪賄脇惑枠鷲亙亘é°è©«è—蕨椀湾碗腕"], +["989f","弌ä¸ä¸•ä¸ªä¸±ä¸¶ä¸¼ä¸¿ä¹‚乖乘亂亅豫亊舒å¼äºŽäºžäºŸäº äº¢äº°äº³äº¶ä»Žä»ä»„仆仂仗仞仭仟价伉佚估佛ä½ä½—佇佶侈ä¾ä¾˜ä½»ä½©ä½°ä¾‘佯來侖儘俔俟俎俘俛俑俚ä¿ä¿¤ä¿¥å€šå€¨å€”倪倥倅伜俶倡倩倬俾俯們倆åƒå‡æœƒå•ååˆåšå–å¬å¸å‚€å‚šå‚…傴傲"], +["9940","僉僊傳僂僖僞僥僭僣僮價僵儉å„儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉å†å†‘冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭"], +["9980","凰凵凾刄刋刔刎刧刪刮刳刹å‰å‰„剋剌剞剔剪剴剩剳剿剽åŠåŠ”劒剱劈劑辨辧劬劭劼劵å‹å‹å‹—勞勣勦飭勠勳勵勸勹匆匈甸åŒåŒåŒåŒ•åŒšåŒ£åŒ¯åŒ±åŒ³åŒ¸å€å†å…丗å‰å凖åžå©å®å¤˜å»å·åŽ‚厖厠厦厥厮厰厶åƒç°’é›™åŸæ›¼ç‡®å®å¨å­åºåå½å‘€å¬å­å¼å®å¶å©åå‘Žå’呵咎呟呱呷呰咒呻咀呶咄å’咆哇咢咸咥咬哄哈咨"], +["9a40","咫哂咤咾咼哘哥哦å”唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳å•å–™å–€å’¯å–Šå–Ÿå•»å•¾å–˜å–žå–®å•¼å–ƒå–©å–‡å–¨å—šå—…嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎å™ç‡Ÿå˜´å˜¶å˜²å˜¸"], +["9a80","噫噤嘯噬噪嚆嚀嚊嚠嚔åšåš¥åš®åš¶åš´å›‚åš¼å›å›ƒå›€å›ˆå›Žå›‘囓囗囮囹圀囿圄圉圈國åœåœ“團圖嗇圜圦圷圸åŽåœ»å€åå©åŸ€åžˆå¡å¿åž‰åž“垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙å å¡²å ¡å¡¢å¡‹å¡°æ¯€å¡’堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊å¤å¤›æ¢¦å¤¥å¤¬å¤­å¤²å¤¸å¤¾ç«’奕å¥å¥Žå¥šå¥˜å¥¢å¥ å¥§å¥¬å¥©"], +["9b40","奸å¦å¦ä½žä¾«å¦£å¦²å§†å§¨å§œå¦å§™å§šå¨¥å¨Ÿå¨‘娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲å«å¬ªå¬¶å¬¾å­ƒå­…孀孑孕孚孛孥孩孰孳孵學斈孺宀"], +["9b80","它宦宸寃寇寉寔å¯å¯¤å¯¦å¯¢å¯žå¯¥å¯«å¯°å¯¶å¯³å°…將專å°å°“尠尢尨尸尹å±å±†å±Žå±“å±å±å­±å±¬å±®ä¹¢å±¶å±¹å²Œå²‘岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢å¶å¶¬å¶®å¶½å¶å¶·å¶¼å·‰å·å·“巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠å»å»‚廈å»å»"], +["9c40","廖廣å»å»šå»›å»¢å»¡å»¨å»©å»¬å»±å»³å»°å»´å»¸å»¾å¼ƒå¼‰å½å½œå¼‹å¼‘弖弩弭弸å½å½ˆå½Œå½Žå¼¯å½‘彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱å¿æ‚³å¿¿æ€¡æ "], +["9c80","怙æ€æ€©æ€Žæ€±æ€›æ€•æ€«æ€¦æ€æ€ºæšææªæ·æŸæŠæ†ææ£æƒæ¤æ‚æ¬æ«æ™æ‚æ‚惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘æ…愕愆惶惷愀惴惺愃愡惻惱æ„愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟æ…慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹æ‡æ‡¦æ‡£æ‡¶æ‡ºæ‡´æ‡¿æ‡½æ‡¼æ‡¾æˆ€æˆˆæˆ‰æˆæˆŒæˆ”戛"], +["9d40","戞戡截戮戰戲戳æ‰æ‰Žæ‰žæ‰£æ‰›æ‰ æ‰¨æ‰¼æŠ‚抉找抒抓抖拔抃抔拗拑抻æ‹æ‹¿æ‹†æ“”拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵æ挾ææœæ掖掎掀掫æ¶æŽ£æŽæŽ‰æŽŸæŽµæ«"], +["9d80","æ©æŽ¾æ©æ€æ†æ£æ‰æ’æ¶æ„æ–æ´æ†æ“æ¦æ¶æ”æ—æ¨æ摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕æ•æ•˜æ•žæ•æ•²æ•¸æ–‚斃變斛斟斫斷旃旆æ—旄旌旒旛旙无旡旱æ²æ˜Šæ˜ƒæ—»æ³æ˜µæ˜¶æ˜´æ˜œæ™æ™„晉æ™æ™žæ™æ™¤æ™§æ™¨æ™Ÿæ™¢æ™°æšƒæšˆæšŽæš‰æš„暘æšæ›æš¹æ›‰æš¾æš¼"], +["9e40","曄暸曖曚曠昿曦曩曰曵曷æœæœ–朞朦朧霸朮朿朶æ朸朷æ†æžæ æ™æ£æ¤æž‰æ°æž©æ¼æªæžŒæž‹æž¦æž¡æž…枷柯枴柬枳柩枸柤柞æŸæŸ¢æŸ®æž¹æŸŽæŸ†æŸ§æªœæ žæ¡†æ ©æ¡€æ¡æ ²æ¡Ž"], +["9e80","梳栫桙档桷桿梟æ¢æ¢­æ¢”æ¢æ¢›æ¢ƒæª®æ¢¹æ¡´æ¢µæ¢ æ¢ºæ¤æ¢æ¡¾æ¤æ£Šæ¤ˆæ£˜æ¤¢æ¤¦æ£¡æ¤Œæ£æ£”棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞æ¥æ¦æ¥ªæ¦²æ¦®æ§æ¦¿æ§æ§“榾槎寨槊æ§æ¦»æ§ƒæ¦§æ¨®æ¦‘榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒æ«æ¨£æ¨“橄樌橲樶橸橇橢橙橦橈樸樢æªæªæª æª„檢檣"], +["9f40","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉æ­æ­™æ­”歛歟歡歸歹歿殀殄殃æ®æ®˜æ®•æ®žæ®¤æ®ªæ®«æ®¯æ®²æ®±æ®³æ®·æ®¼æ¯†æ¯‹æ¯“毟毬毫毳毯"], +["9f80","麾氈氓气氛氤氣汞汕汢汪沂æ²æ²šæ²æ²›æ±¾æ±¨æ±³æ²’æ²æ³„泱泓沽泗泅æ³æ²®æ²±æ²¾æ²ºæ³›æ³¯æ³™æ³ªæ´Ÿè¡æ´¶æ´«æ´½æ´¸æ´™æ´µæ´³æ´’洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶æ¹æ¸Ÿæ¹ƒæ¸ºæ¹Žæ¸¤æ»¿æ¸æ¸¸æº‚溪溘滉溷滓溽溯滄溲滔滕æºæº¥æ»‚溟æ½æ¼‘çŒæ»¬æ»¸æ»¾æ¼¿æ»²æ¼±æ»¯æ¼²æ»Œ"], +["e040","漾漓滷澆潺潸æ¾æ¾€æ½¯æ½›æ¿³æ½­æ¾‚潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑ç€ç€æ¿¾ç€›ç€šæ½´ç€ç€˜ç€Ÿç€°ç€¾ç€²ç‘ç£ç‚™ç‚’炯烱炬炸炳炮烟烋çƒ"], +["e080","烙焉烽焜焙煥煕熈煦煢煌煖煬ç†ç‡»ç†„熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿çˆçˆçˆ›çˆ¨çˆ­çˆ¬çˆ°çˆ²çˆ»çˆ¼çˆ¿ç‰€ç‰†ç‰‹ç‰˜ç‰´ç‰¾çŠ‚çŠçŠ‡çŠ’犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷å€çŒ—猊猜猖çŒçŒ´çŒ¯çŒ©çŒ¥çŒ¾çŽç默ç—çªç¨ç°ç¸çµç»çºçˆçŽ³çŽçŽ»ç€ç¥ç®çžç’¢ç…瑯ç¥ç¸ç²çºç‘•ç¿ç‘Ÿç‘™ç‘瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊ç“ç“”ç±"], +["e140","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎ç”甕甓甞甦甬甼畄ç•ç•Šç•‰ç•›ç•†ç•šç•©ç•¤ç•§ç•«ç•­ç•¸ç•¶ç–†ç–‡ç•´ç–Šç–‰ç–‚疔疚ç–疥疣痂疳痃疵疽疸疼疱ç—痊痒痙痣痞痾痿"], +["e180","ç—¼ç˜ç—°ç—ºç—²ç—³ç˜‹ç˜ç˜‰ç˜Ÿç˜§ç˜ ç˜¡ç˜¢ç˜¤ç˜´ç˜°ç˜»ç™‡ç™ˆç™†ç™œç™˜ç™¡ç™¢ç™¨ç™©ç™ªç™§ç™¬ç™°ç™²ç™¶ç™¸ç™¼çš€çšƒçšˆçš‹çšŽçš–皓皙皚皰皴皸皹皺盂ç›ç›–盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸ç‡çšç¨ç«ç›ç¥ç¿ç¾ç¹çžŽçž‹çž‘瞠瞞瞰瞶瞹瞿瞼瞽瞻矇çŸçŸ—矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"], +["e240","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊ç¦ç¦§é½‹ç¦ªç¦®ç¦³ç¦¹ç¦ºç§‰ç§•ç§§ç§¬ç§¡ç§£ç¨ˆç¨ç¨˜ç¨™ç¨ ç¨Ÿç¦€ç¨±ç¨»ç¨¾ç¨·ç©ƒç©—穉穡穢穩é¾ç©°ç©¹ç©½çªˆçª—窕窘窖窩竈窰"], +["e280","窶竅竄窿邃竇竊ç«ç«ç«•ç«“站竚ç«ç«¡ç«¢ç«¦ç«­ç«°ç¬‚ç¬ç¬Šç¬†ç¬³ç¬˜ç¬™ç¬žç¬µç¬¨ç¬¶ç­ç­ºç¬„ç­ç¬‹ç­Œç­…筵筥筴筧筰筱筬筮ç®ç®˜ç®Ÿç®ç®œç®šç®‹ç®’ç®ç­ç®™ç¯‹ç¯ç¯Œç¯ç®´ç¯†ç¯ç¯©ç°‘簔篦篥籠簀簇簓篳篷簗ç°ç¯¶ç°£ç°§ç°ªç°Ÿç°·ç°«ç°½ç±Œç±ƒç±”ç±ç±€ç±ç±˜ç±Ÿç±¤ç±–籥籬籵粃ç²ç²¤ç²­ç²¢ç²«ç²¡ç²¨ç²³ç²²ç²±ç²®ç²¹ç²½ç³€ç³…糂糘糒糜糢鬻糯糲糴糶糺紆"], +["e340","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮çµçµ£ç¶“綉絛ç¶çµ½ç¶›ç¶ºç¶®ç¶£ç¶µç·‡ç¶½ç¶«ç¸½ç¶¢ç¶¯ç·œç¶¸ç¶Ÿç¶°ç·˜ç·ç·¤ç·žç·»ç·²ç·¡ç¸…縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷"], +["e380","縲縺繧ç¹ç¹–繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒çºçº“纔纖纎纛纜缸缺罅罌ç½ç½Žç½ç½‘罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞ç¾ç¾šç¾£ç¾¯ç¾²ç¾¹ç¾®ç¾¶ç¾¸è­±ç¿…翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻èŠè†è’è˜èšèŸè¢è¨è³è²è°è¶è¹è½è¿è‚„肆肅肛肓肚肭å†è‚¬èƒ›èƒ¥èƒ™èƒèƒ„胚胖脉胯胱脛脩脣脯腋"], +["e440","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉è‡è‡‘臙臘臈臚臟臠臧臺臻臾èˆèˆ‚舅與舊èˆèˆèˆ–舩舫舸舳艀艙艘è‰è‰šè‰Ÿè‰¤"], +["e480","艢艨艪艫舮艱艷艸艾èŠèŠ’芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱è€èŒ¹èè…茯茫茗茘莅莚莪莟莢莖茣莎莇莊è¼èŽµè³èµèŽ èŽ‰èŽ¨è´è“è«èŽè½èƒè˜è‹èè·è‡è è²èè¢è èŽ½è¸è”†è»è‘­èªè¼è•šè’„葷葫蒭葮蒂葩葆è¬è‘¯è‘¹èµè“Šè‘¢è’¹è’¿è’Ÿè“™è“蒻蓚è“è“蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"], +["e540","è•è˜‚蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾è–藉薺è—è–¹è—è—•è—藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿è™ä¹•è™”號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬"], +["e580","蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉èœè›¹èœŠèœ´èœ¿èœ·èœ»èœ¥èœ©èœšè èŸè¸èŒèŽè´è—è¨è®è™è“è£èªè …螢螟螂螯蟋螽蟀èŸé›–螫蟄螳蟇蟆螻蟯蟲蟠è è èŸ¾èŸ¶èŸ·è ŽèŸ’蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫è¢è¡¾è¢žè¡µè¡½è¢µè¡²è¢‚袗袒袮袙袢è¢è¢¤è¢°è¢¿è¢±è£ƒè£„裔裘裙è£è£¹è¤‚裼裴裨裲褄褌褊褓襃褞褥褪褫è¥è¥„褻褶褸襌è¤è¥ è¥ž"], +["e640","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜è§è§§è§´è§¸è¨ƒè¨–è¨è¨Œè¨›è¨è¨¥è¨¶è©è©›è©’詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄è«è«‚諚諫諳諧"], +["e680","諤諱謔諠諢諷諞諛謌謇謚諡謖è¬è¬—謠謳鞫謦謫謾謨è­è­Œè­è­Žè­‰è­–譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺è±è°¿è±ˆè±Œè±Žè±è±•è±¢è±¬è±¸è±ºè²‚貉貅貊è²è²Žè²”豼貘æˆè²­è²ªè²½è²²è²³è²®è²¶è³ˆè³è³¤è³£è³šè³½è³ºè³»è´„è´…è´Šè´‡è´è´è´é½Žè´“è³è´”贖赧赭赱赳è¶è¶™è·‚趾趺è·è·šè·–跌跛跋跪跫跟跣跼踈踉跿è¸è¸žè¸è¸Ÿè¹‚踵踰踴蹊"], +["e740","蹇蹉蹌è¹è¹ˆè¹™è¹¤è¹ è¸ªè¹£è¹•è¹¶è¹²è¹¼èºèº‡èº…躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜"], +["e780","轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡é€é€žé€–逋逧逶逵逹迸ééé‘é’逎é‰é€¾é–é˜éžé¨é¯é¶éš¨é²é‚‚é½é‚邀邊邉é‚邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀é‡é‡‰é‡‹é‡é‡–釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋é‰éŠœéŠ–銓銛鉚é‹éŠ¹éŠ·é‹©éŒé‹ºé„錮"], +["e840","錙錢錚錣錺錵錻éœé é¼é®é–鎰鎬鎭鎔鎹é–é—é¨é¥é˜éƒéééˆé¤éšé”é“éƒé‡éé¶é«éµé¡éºé‘鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾é’鑿閂閇閊閔閖閘閙"], +["e880","閠閨閧閭閼閻閹閾闊濶闃é—闌闕闔闖關闡闥闢阡阨阮阯陂陌é™é™‹é™·é™œé™žé™é™Ÿé™¦é™²é™¬éšéš˜éš•éš—險隧隱隲隰隴隶隸隹雎雋雉é›è¥é›œéœé›•é›¹éœ„霆霈霓霎霑éœéœ–霙霤霪霰霹霽霾é„é†éˆé‚é‰éœé é¤é¦é¨å‹’é«é±é¹éž…é¼éžéºéž†éž‹éžéžéžœéž¨éž¦éž£éž³éž´éŸƒéŸ†éŸˆéŸ‹éŸœéŸ­é½éŸ²ç«ŸéŸ¶éŸµé é Œé ¸é ¤é ¡é ·é ½é¡†é¡é¡‹é¡«é¡¯é¡°"], +["e940","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡é¤é¤žé¤¤é¤ é¤¬é¤®é¤½é¤¾é¥‚饉饅é¥é¥‹é¥‘饒饌饕馗馘馥馭馮馼駟駛é§é§˜é§‘駭駮駱駲駻駸é¨é¨é¨…駢騙騫騷驅驂驀驃"], +["e980","騾驕é©é©›é©—驟驢驥驤驩驫驪骭骰骼髀é«é«‘髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃é­é­é­Žé­‘魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆é¯é¯‘鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒éµé´¿é´¾éµ†éµˆ"], +["ea40","éµéµžéµ¤éµ‘éµéµ™éµ²é¶‰é¶‡é¶«éµ¯éµºé¶šé¶¤é¶©é¶²é·„é·é¶»é¶¸é¶ºé·†é·é·‚鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽éºéºˆéº‹éºŒéº’麕麑éºéº¥éº©éº¸éºªéº­é¡é»Œé»Žé»é»é»”黜點é»é» é»¥é»¨é»¯"], +["ea80","黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇é™ç‘¤å‡œç†™"], +["ed40","纊褜éˆéŠˆè“œä¿‰ç‚»æ˜±æ£ˆé‹¹æ›»å½…丨仡仼伀伃伹佖侒侊侚侔ä¿å€å€¢ä¿¿å€žå†å°å‚傔僴僘兊兤å†å†¾å‡¬åˆ•åŠœåŠ¦å‹€å‹›åŒ€åŒ‡åŒ¤å²åŽ“厲å﨎咜咊咩哿喆å™å¥åž¬åŸˆåŸ‡ï¨"], +["ed80","ï¨å¢žå¢²å¤‹å¥“奛å¥å¥£å¦¤å¦ºå­–寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹å·å¼¡å¼´å½§å¾·å¿žæ悅悊惞惕愠惲愑愷愰憘戓抦æµæ‘ æ’擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗æ¦æž»æ¡’柀æ æ¡„æ£ï¨“楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬æ·æ·¸æ·²æ·¼æ¸¹æ¹œæ¸§æ¸¼æº¿æ¾ˆæ¾µæ¿µç€…瀇瀨炅炫ç„焄煜煆煇凞ç‡ç‡¾çŠ±"], +["ee40","犾猤猪ç·çŽ½ç‰ç–ç£ç’ç‡çµç¦çªç©ç®ç‘¢ç’‰ç’Ÿç”畯皂皜皞皛皦益ç†åŠ¯ç ¡ç¡Žç¡¤ç¡ºç¤°ï¨˜ï¨™ï¨šç¦”福禛竑竧靖竫箞ï¨çµˆçµœç¶·ç¶ ç·–繒罇羡羽èŒè¢è¿è‡è¶è‘ˆè’´è•“è•™"], +["ee80","蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣è»ï¨¤ï¨¥é§éƒžï¨¦é„•é„§é‡šé‡—釞釭釮釤釥鈆éˆéˆŠéˆºé‰€éˆ¼é‰Žé‰™é‰‘鈹鉧銧鉷鉸鋧鋗鋙é‹ï¨§é‹•é‹ é‹“錥錡鋻﨨錞鋿éŒéŒ‚é°é—鎤é†éžé¸é±é‘…鑈閒隆﨩éšéš¯éœ³éœ»éƒééé‘é•é¡—顥飯飼餧館馞驎髙髜魵魲é®é®±é®»é°€éµ°éµ«ï¨­é¸™é»‘"], +["eeef","â…°",9,"¬¦'""], +["f040","",62], +["f080","",124], +["f140","",62], +["f180","",124], +["f240","î…¸",62], +["f280","",124], +["f340","",62], +["f380","",124], +["f440","î‹°",62], +["f480","",124], +["f540","",62], +["f580","î«",124], +["f640","",62], +["f680","î’§",124], +["f740","",62], +["f780","î•£",124], +["f840","î— ",62], +["f880","",124], +["f940","îšœ"], +["fa40","â…°",9,"â… ",9,"¬¦'"㈱№℡∵纊褜éˆéŠˆè“œä¿‰ç‚»æ˜±æ£ˆé‹¹æ›»å½…丨仡仼伀伃伹佖侒侊侚侔ä¿å€å€¢ä¿¿å€žå†å°å‚傔僴僘兊"], +["fa80","å…¤å†å†¾å‡¬åˆ•åŠœåŠ¦å‹€å‹›åŒ€åŒ‡åŒ¤å²åŽ“厲å﨎咜咊咩哿喆å™å¥åž¬åŸˆåŸ‡ï¨ï¨å¢žå¢²å¤‹å¥“奛å¥å¥£å¦¤å¦ºå­–寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹å·å¼¡å¼´å½§å¾·å¿žæ悅悊惞惕愠惲愑愷愰憘戓抦æµæ‘ æ’擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗æ¦æž»æ¡’柀æ æ¡„æ£ï¨“楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯"], +["fb40","涖涬æ·æ·¸æ·²æ·¼æ¸¹æ¹œæ¸§æ¸¼æº¿æ¾ˆæ¾µæ¿µç€…瀇瀨炅炫ç„焄煜煆煇凞ç‡ç‡¾çŠ±çŠ¾çŒ¤ï¨–ç·çŽ½ç‰ç–ç£ç’ç‡çµç¦çªç©ç®ç‘¢ç’‰ç’Ÿç”畯皂皜皞皛皦益ç†åŠ¯ç ¡ç¡Žç¡¤ç¡ºç¤°ï¨˜ï¨™"], +["fb80","祥禔福禛竑竧靖竫箞ï¨çµˆçµœç¶·ç¶ ç·–繒罇羡羽èŒè¢è¿è‡è¶è‘ˆè’´è•“蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣è»ï¨¤ï¨¥é§éƒžï¨¦é„•é„§é‡šé‡—釞釭釮釤釥鈆éˆéˆŠéˆºé‰€éˆ¼é‰Žé‰™é‰‘鈹鉧銧鉷鉸鋧鋗鋙é‹ï¨§é‹•é‹ é‹“錥錡鋻﨨錞鋿éŒéŒ‚é°é—鎤é†éžé¸é±é‘…鑈閒隆﨩éšéš¯éœ³éœ»éƒééé‘é•é¡—顥飯飼餧館馞驎髙"], +["fc40","髜魵魲é®é®±é®»é°€éµ°éµ«ï¨­é¸™é»‘"] +] diff --git a/node_modules/body-parser/node_modules/iconv-lite/encodings/utf16.js b/node_modules/body-parser/node_modules/iconv-lite/encodings/utf16.js new file mode 100755 index 0000000..4cd425d --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/encodings/utf16.js @@ -0,0 +1,202 @@ + + +// == UTF16-BE codec. ========================================================== + +exports.utf16be = function(options) { + return { + encoder: utf16beEncoder, + decoder: utf16beDecoder, + + bom: new Buffer([0xFE, 0xFF]), + }; +}; + + +// -- Encoding + +function utf16beEncoder(options) { + return { + write: utf16beEncoderWrite, + end: function() {}, + } +} + +function utf16beEncoderWrite(str) { + var buf = new Buffer(str, 'ucs2'); + for (var i = 0; i < buf.length; i += 2) { + var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp; + } + return buf; +} + + +// -- Decoding + +function utf16beDecoder(options) { + return { + write: utf16beDecoderWrite, + end: function() {}, + + overflowByte: -1, + }; +} + +function utf16beDecoderWrite(buf) { + if (buf.length == 0) + return ''; + + var buf2 = new Buffer(buf.length + 1), + i = 0, j = 0; + + if (this.overflowByte !== -1) { + buf2[0] = buf[0]; + buf2[1] = this.overflowByte; + i = 1; j = 2; + } + + for (; i < buf.length-1; i += 2, j+= 2) { + buf2[j] = buf[i+1]; + buf2[j+1] = buf[i]; + } + + this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1; + + return buf2.slice(0, j).toString('ucs2'); +} + + +// == UTF-16 codec ============================================================= +// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic. +// Defaults to UTF-16BE, according to RFC 2781, although it is against some industry practices, see +// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le +// Decoder default can be changed: iconv.decode(buf, 'utf16', {default: 'utf-16le'}); + +// Encoder prepends BOM and uses UTF-16BE. +// Endianness can also be changed: iconv.encode(str, 'utf16', {use: 'utf-16le'}); + +exports.utf16 = function(options) { + return { + encoder: utf16Encoder, + decoder: utf16Decoder, + + getCodec: options.iconv.getCodec, + }; +}; + +// -- Encoding + +function utf16Encoder(options) { + options = options || {}; + var codec = this.getCodec(options.use || 'utf-16be'); + if (!codec.bom) + throw new Error("iconv-lite: in UTF-16 encoder, 'use' parameter should be either UTF-16BE or UTF16-LE."); + + return { + write: utf16EncoderWrite, + end: utf16EncoderEnd, + + bom: codec.bom, + internalEncoder: codec.encoder(options), + }; +} + +function utf16EncoderWrite(str) { + var buf = this.internalEncoder.write(str); + + if (this.bom) { + buf = Buffer.concat([this.bom, buf]); + this.bom = null; + } + + return buf; +} + +function utf16EncoderEnd() { + return this.internalEncoder.end(); +} + + +// -- Decoding + +function utf16Decoder(options) { + return { + write: utf16DecoderWrite, + end: utf16DecoderEnd, + + internalDecoder: null, + initialBytes: [], + initialBytesLen: 0, + + options: options || {}, + getCodec: this.getCodec, + }; +} + +function utf16DecoderWrite(buf) { + if (this.internalDecoder) + return this.internalDecoder.write(buf); + + // Codec is not chosen yet. Accumulate initial bytes. + this.initialBytes.push(buf); + this.initialBytesLen += buf.length; + + if (this.initialBytesLen < 16) // We need > 2 bytes to use space heuristic (see below) + return ''; + + // We have enough bytes -> decide endianness. + return utf16DecoderDecideEndianness.call(this); +} + +function utf16DecoderEnd() { + if (this.internalDecoder) + return this.internalDecoder.end(); + + var res = utf16DecoderDecideEndianness.call(this); + var trail; + + if (this.internalDecoder) + trail = this.internalDecoder.end(); + + return (trail && trail.length > 0) ? (res + trail) : res; +} + +function utf16DecoderDecideEndianness() { + var buf = Buffer.concat(this.initialBytes); + this.initialBytes.length = this.initialBytesLen = 0; + + if (buf.length < 2) + return ''; // Not a valid UTF-16 sequence anyway. + + // Default encoding. + var enc = this.options.default || 'utf-16be'; + + // Check BOM. + if (buf[0] == 0xFE && buf[1] == 0xFF) { // UTF-16BE BOM + enc = 'utf-16be'; buf = buf.slice(2); + } + else if (buf[0] == 0xFF && buf[1] == 0xFE) { // UTF-16LE BOM + enc = 'utf-16le'; buf = buf.slice(2); + } + else { + // No BOM found. Try to deduce encoding from initial content. + // Most of the time, the content has spaces (U+0020), but the opposite (U+2000) is very uncommon. + // So, we count spaces as if it was LE or BE, and decide from that. + var spaces = [0, 0], // Counts of space chars in both positions + _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even. + + for (var i = 0; i < _len; i += 2) { + if (buf[i] == 0x00 && buf[i+1] == 0x20) spaces[0]++; + if (buf[i] == 0x20 && buf[i+1] == 0x00) spaces[1]++; + } + + if (spaces[0] > 0 && spaces[1] == 0) + enc = 'utf-16be'; + else if (spaces[0] == 0 && spaces[1] > 0) + enc = 'utf-16le'; + } + + this.internalDecoder = this.getCodec(enc).decoder(this.options); + return this.internalDecoder.write(buf); +} + + diff --git a/node_modules/body-parser/node_modules/iconv-lite/lib/extend-node.js b/node_modules/body-parser/node_modules/iconv-lite/lib/extend-node.js new file mode 100755 index 0000000..000cee2 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/lib/extend-node.js @@ -0,0 +1,210 @@ + +// == Extend Node primitives to use iconv-lite ================================= + +module.exports = function (iconv) { + var original = undefined; // Place to keep original methods. + + iconv.extendNodeEncodings = function extendNodeEncodings() { + if (original) return; + original = {}; + + var nodeNativeEncodings = { + 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, + 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true, + }; + + Buffer.isNativeEncoding = function(enc) { + return nodeNativeEncodings[enc && enc.toLowerCase()]; + } + + // -- SlowBuffer ----------------------------------------------------------- + var SlowBuffer = require('buffer').SlowBuffer; + + original.SlowBufferToString = SlowBuffer.prototype.toString; + SlowBuffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + start = +start || 0; + if (typeof end !== 'number') end = this.length; + + // Fastpath empty strings + if (+end == start) + return ''; + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.SlowBufferToString.call(this, encoding, start, end); + + // Otherwise, use our decoding method. + if (typeof start == 'undefined') start = 0; + if (typeof end == 'undefined') end = this.length; + return iconv.decode(this.slice(start, end), encoding); + } + + original.SlowBufferWrite = SlowBuffer.prototype.write; + SlowBuffer.prototype.write = function(string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.SlowBufferWrite.call(this, string, offset, length, encoding); + + if (string.length > 0 && (length < 0 || offset < 0)) + throw new RangeError('attempt to write beyond buffer bounds'); + + // Otherwise, use our encoding method. + var buf = iconv.encode(string, encoding); + if (buf.length < length) length = buf.length; + buf.copy(this, offset, 0, length); + return length; + } + + // -- Buffer --------------------------------------------------------------- + + original.BufferIsEncoding = Buffer.isEncoding; + Buffer.isEncoding = function(encoding) { + return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding); + } + + original.BufferByteLength = Buffer.byteLength; + Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) { + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.BufferByteLength.call(this, str, encoding); + + // Slow, I know, but we don't have a better way yet. + return iconv.encode(str, encoding).length; + } + + original.BufferToString = Buffer.prototype.toString; + Buffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.BufferToString.call(this, encoding, start, end); + + // Otherwise, use our decoding method. + if (typeof start == 'undefined') start = 0; + if (typeof end == 'undefined') end = this.length; + return iconv.decode(this.slice(start, end), encoding); + } + + original.BufferWrite = Buffer.prototype.write; + Buffer.prototype.write = function(string, offset, length, encoding) { + var _offset = offset, _length = length, _encoding = encoding; + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + encoding = String(encoding || 'utf8').toLowerCase(); + + // Use native conversion when possible + if (Buffer.isNativeEncoding(encoding)) + return original.BufferWrite.call(this, string, _offset, _length, _encoding); + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + + if (string.length > 0 && (length < 0 || offset < 0)) + throw new RangeError('attempt to write beyond buffer bounds'); + + // Otherwise, use our encoding method. + var buf = iconv.encode(string, encoding); + if (buf.length < length) length = buf.length; + buf.copy(this, offset, 0, length); + return length; + + // TODO: Set _charsWritten. + } + + + // -- Readable ------------------------------------------------------------- + if (iconv.supportsStreams) { + var Readable = require('stream').Readable; + + original.ReadableSetEncoding = Readable.prototype.setEncoding; + Readable.prototype.setEncoding = function setEncoding(enc, options) { + // Try to use original function when possible. + if (Buffer.isNativeEncoding(enc)) + return original.ReadableSetEncoding.call(this, enc); + + // Try to use our own decoder, it has the same interface. + this._readableState.decoder = iconv.getCodec(enc).decoder(options); + this._readableState.encoding = enc; + } + + Readable.prototype.collect = iconv._collect; + } + } + + // Remove iconv-lite Node primitive extensions. + iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() { + if (!original) + throw new Error("require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.") + + delete Buffer.isNativeEncoding; + + var SlowBuffer = require('buffer').SlowBuffer; + + SlowBuffer.prototype.toString = original.SlowBufferToString; + SlowBuffer.prototype.write = original.SlowBufferWrite; + + Buffer.isEncoding = original.BufferIsEncoding; + Buffer.byteLength = original.BufferByteLength; + Buffer.prototype.toString = original.BufferToString; + Buffer.prototype.write = original.BufferWrite; + + if (iconv.supportsStreams) { + var Readable = require('stream').Readable; + + Readable.prototype.setEncoding = original.ReadableSetEncoding; + delete Readable.prototype.collect; + } + + original = undefined; + } +} diff --git a/node_modules/body-parser/node_modules/iconv-lite/lib/index.js b/node_modules/body-parser/node_modules/iconv-lite/lib/index.js new file mode 100755 index 0000000..0775589 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/lib/index.js @@ -0,0 +1,122 @@ + +var iconv = module.exports; + +// All codecs and aliases are kept here, keyed by encoding name/alias. +// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`. +iconv.encodings = null; + +// Characters emitted in case of error. +iconv.defaultCharUnicode = '�'; +iconv.defaultCharSingleByte = '?'; + +// Public API. +iconv.encode = function encode(str, encoding, options) { + str = "" + (str || ""); // Ensure string. + + var encoder = iconv.getCodec(encoding).encoder(options); + + var res = encoder.write(str); + var trail = encoder.end(); + + return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res; +} + +iconv.decode = function decode(buf, encoding, options) { + if (typeof buf === 'string') { + if (!iconv.skipDecodeWarning) { + console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding'); + iconv.skipDecodeWarning = true; + } + + buf = new Buffer("" + (buf || ""), "binary"); // Ensure buffer. + } + + var decoder = iconv.getCodec(encoding).decoder(options); + + var res = decoder.write(buf); + var trail = decoder.end(); + + return (trail && trail.length > 0) ? (res + trail) : res; +} + +iconv.encodingExists = function encodingExists(enc) { + try { + iconv.getCodec(enc); + return true; + } catch (e) { + return false; + } +} + +// Legacy aliases to convert functions +iconv.toEncoding = iconv.encode; +iconv.fromEncoding = iconv.decode; + +// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache. +iconv._codecDataCache = {}; +iconv.getCodec = function getCodec(encoding) { + if (!iconv.encodings) + iconv.encodings = require("../encodings"); // Lazy load all encoding definitions. + + // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. + var enc = (''+encoding).toLowerCase().replace(/[^0-9a-z]|:\d{4}$/g, ""); + + // Traverse iconv.encodings to find actual codec. + var codecData, codecOptions; + while (true) { + codecData = iconv._codecDataCache[enc]; + if (codecData) + return codecData; + + var codec = iconv.encodings[enc]; + + switch (typeof codec) { + case "string": // Direct alias to other encoding. + enc = codec; + break; + + case "object": // Alias with options. Can be layered. + if (!codecOptions) { + codecOptions = codec; + codecOptions.encodingName = enc; + } + else { + for (var key in codec) + codecOptions[key] = codec[key]; + } + + enc = codec.type; + break; + + case "function": // Codec itself. + if (!codecOptions) + codecOptions = { encodingName: enc }; + codecOptions.iconv = iconv; + + // The codec function must load all tables and return object with .encoder and .decoder methods. + // It'll be called only once (for each different options object). + codecData = codec.call(iconv.encodings, codecOptions); + + iconv._codecDataCache[codecOptions.encodingName] = codecData; // Save it to be reused later. + return codecData; + + default: + throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')"); + } + } +} + +// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json. +var nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node; +if (nodeVer) { + + // Load streaming support in Node v0.10+ + var nodeVerArr = nodeVer.split(".").map(Number); + if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) { + require("./streams")(iconv); + } + + // Load Node primitive extensions. + require("./extend-node")(iconv); +} + diff --git a/node_modules/body-parser/node_modules/iconv-lite/lib/streams.js b/node_modules/body-parser/node_modules/iconv-lite/lib/streams.js new file mode 100755 index 0000000..0563731 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/lib/streams.js @@ -0,0 +1,118 @@ +var Transform = require("stream").Transform; + + +// == Exports ================================================================== +module.exports = function(iconv) { + + // Additional Public API. + iconv.encodeStream = function encodeStream(encoding, options) { + return new IconvLiteEncoderStream(iconv.getCodec(encoding).encoder(options), options); + } + + iconv.decodeStream = function decodeStream(encoding, options) { + return new IconvLiteDecoderStream(iconv.getCodec(encoding).decoder(options), options); + } + + iconv.supportsStreams = true; + + + // Not published yet. + iconv.IconvLiteEncoderStream = IconvLiteEncoderStream; + iconv.IconvLiteDecoderStream = IconvLiteDecoderStream; + iconv._collect = IconvLiteDecoderStream.prototype.collect; +}; + + +// == Encoder stream ======================================================= +function IconvLiteEncoderStream(conv, options) { + this.conv = conv; + options = options || {}; + options.decodeStrings = false; // We accept only strings, so we don't need to decode them. + Transform.call(this, options); +} + +IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { + constructor: { value: IconvLiteEncoderStream } +}); + +IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { + if (typeof chunk != 'string') + return done(new Error("Iconv encoding stream needs strings as its input.")); + try { + var res = this.conv.write(chunk); + if (res && res.length) this.push(res); + done(); + } + catch (e) { + done(e); + } +} + +IconvLiteEncoderStream.prototype._flush = function(done) { + try { + var res = this.conv.end(); + if (res && res.length) this.push(res); + done(); + } + catch (e) { + done(e); + } +} + +IconvLiteEncoderStream.prototype.collect = function(cb) { + var chunks = []; + this.on('error', cb); + this.on('data', function(chunk) { chunks.push(chunk); }); + this.on('end', function() { + cb(null, Buffer.concat(chunks)); + }); + return this; +} + + +// == Decoder stream ======================================================= +function IconvLiteDecoderStream(conv, options) { + this.conv = conv; + options = options || {}; + options.encoding = this.encoding = 'utf8'; // We output strings. + Transform.call(this, options); +} + +IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { + constructor: { value: IconvLiteDecoderStream } +}); + +IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { + if (!Buffer.isBuffer(chunk)) + return done(new Error("Iconv decoding stream needs buffers as its input.")); + try { + var res = this.conv.write(chunk); + if (res && res.length) this.push(res, this.encoding); + done(); + } + catch (e) { + done(e); + } +} + +IconvLiteDecoderStream.prototype._flush = function(done) { + try { + var res = this.conv.end(); + if (res && res.length) this.push(res, this.encoding); + done(); + } + catch (e) { + done(e); + } +} + +IconvLiteDecoderStream.prototype.collect = function(cb) { + var res = ''; + this.on('error', cb); + this.on('data', function(chunk) { res += chunk; }); + this.on('end', function() { + cb(null, res); + }); + return this; +} + diff --git a/node_modules/body-parser/node_modules/iconv-lite/package.json b/node_modules/body-parser/node_modules/iconv-lite/package.json new file mode 100755 index 0000000..7e19b53 --- /dev/null +++ b/node_modules/body-parser/node_modules/iconv-lite/package.json @@ -0,0 +1,93 @@ +{ + "name": "iconv-lite", + "description": "Convert character encodings in pure javascript.", + "version": "0.4.3", + "license": "MIT", + "keywords": [ + "iconv", + "convert", + "charset", + "icu" + ], + "author": { + "name": "Alexander Shtuchkin", + "email": "ashtuchkin@gmail.com" + }, + "contributors": [ + { + "name": "Jinwu Zhan", + "url": "https://github.com/jenkinv" + }, + { + "name": "Adamansky Anton", + "url": "https://github.com/adamansky" + }, + { + "name": "George Stagas", + "url": "https://github.com/stagas" + }, + { + "name": "Mike D Pilsbury", + "url": "https://github.com/pekim" + }, + { + "name": "Niggler", + "url": "https://github.com/Niggler" + }, + { + "name": "wychi", + "url": "https://github.com/wychi" + }, + { + "name": "David Kuo", + "url": "https://github.com/david50407" + }, + { + "name": "ChangZhuo Chen", + "url": "https://github.com/czchen" + }, + { + "name": "Lee Treveil", + "url": "https://github.com/leetreveil" + }, + { + "name": "Brian White", + "url": "https://github.com/mscdex" + }, + { + "name": "Mithgol", + "url": "https://github.com/Mithgol" + } + ], + "main": "./lib/index.js", + "homepage": "https://github.com/ashtuchkin/iconv-lite", + "bugs": { + "url": "https://github.com/ashtuchkin/iconv-lite/issues" + }, + "repository": { + "type": "git", + "url": "git://github.com/ashtuchkin/iconv-lite.git" + }, + "engines": { + "node": ">=0.8.0" + }, + "scripts": { + "test": "mocha --reporter spec --grep ." + }, + "browser": { + "./extend-node": false, + "./streams": false + }, + "devDependencies": { + "mocha": "*", + "request": "*", + "unorm": "*", + "errto": "*", + "async": "*", + "iconv": "~2.1.4" + }, + "readme": "## Pure JS character encoding conversion\n\n\n\n * Doesn't need native code compilation. Works on Windows and in sandboxed environments like [Cloud9](http://c9.io).\n * Used in popular projects like [Grunt](http://gruntjs.com/), [Nodemailer](http://www.nodemailer.com/), [Yeoman](http://yeoman.io/) and others.\n * Faster than [node-iconv](https://github.com/bnoordhuis/node-iconv) (see below for performance comparison).\n * Intuitive encode/decode API\n * Streaming support for Node v0.10+\n * Can extend Node.js primitives (buffers, streams) to support all iconv-lite encodings.\n * In-browser usage via [Browserify](https://github.com/substack/node-browserify) (~180k gzip compressed with Buffer shim included).\n * License: MIT.\n\n[![NPM Stats](https://nodei.co/npm/iconv-lite.png?downloads=true)](https://npmjs.org/packages/iconv-lite/)\n\n## Usage\n### Basic API\n```javascript\nvar iconv = require('iconv-lite');\n\n// Convert from an encoded buffer to js string.\nstr = iconv.decode(new Buffer([0x68, 0x65, 0x6c, 0x6c, 0x6f]), 'win1251');\n\n// Convert from js string to an encoded buffer.\nbuf = iconv.encode(\"Sample input string\", 'win1251');\n\n// Check if encoding is supported\niconv.encodingExists(\"us-ascii\")\n```\n\n### Streaming API (Node v0.10+)\n```javascript\n\n// Decode stream (from binary stream to js strings)\nhttp.createServer(function(req, res) {\n var converterStream = iconv.decodeStream('win1251');\n req.pipe(converterStream);\n\n converterStream.on('data', function(str) {\n console.log(str); // Do something with decoded strings, chunk-by-chunk.\n });\n});\n\n// Convert encoding streaming example\nfs.createReadStream('file-in-win1251.txt')\n .pipe(iconv.decodeStream('win1251'))\n .pipe(iconv.encodeStream('ucs2'))\n .pipe(fs.createWriteStream('file-in-ucs2.txt'));\n\n// Sugar: all encode/decode streams have .collect(cb) method to accumulate data.\nhttp.createServer(function(req, res) {\n req.pipe(iconv.decodeStream('win1251')).collect(function(err, body) {\n assert(typeof body == 'string');\n console.log(body); // full request body string\n });\n});\n```\n\n### Extend Node.js own encodings\n```javascript\n// After this call all Node basic primitives will understand iconv-lite encodings.\niconv.extendNodeEncodings();\n\n// Examples:\nbuf = new Buffer(str, 'win1251');\nbuf.write(str, 'gbk');\nstr = buf.toString('latin1');\nassert(Buffer.isEncoding('iso-8859-15'));\nBuffer.byteLength(str, 'us-ascii');\n\nhttp.createServer(function(req, res) {\n req.setEncoding('big5');\n req.collect(function(err, body) {\n console.log(body);\n });\n});\n\nfs.createReadStream(\"file.txt\", \"shift_jis\");\n\n// External modules are also supported (if they use Node primitives, which they probably do).\nrequest = require('request');\nrequest({\n url: \"http://github.com/\", \n encoding: \"cp932\"\n});\n\n// To remove extensions\niconv.undoExtendNodeEncodings();\n```\n\n## Supported encodings\n\n * All node.js native encodings: utf8, ucs2 / utf16, ascii, binary, base64, hex.\n * Additional unicode encodings: utf16, utf16-be.\n * All widespread singlebyte encodings: Windows 125x family, ISO-8859 family, \n IBM/DOS codepages, Macintosh family, KOI8 family, all others supported by iconv library. \n Aliases like 'latin1', 'us-ascii' also supported.\n * All widespread multibyte encodings: CP932, CP936, CP949, CP950, GB2313, GBK, GB18030, Big5, Shift_JIS, EUC-JP.\n\nSee [all supported encodings on wiki](https://github.com/ashtuchkin/iconv-lite/wiki/Supported-Encodings).\n\nMost singlebyte encodings are generated automatically from [node-iconv](https://github.com/bnoordhuis/node-iconv). Thank you Ben Noordhuis and libiconv authors!\n\nMultibyte encodings are generated from [Unicode.org mappings](http://www.unicode.org/Public/MAPPINGS/) and [WHATWG Encoding Standard mappings](http://encoding.spec.whatwg.org/). Thank you, respective authors!\n\n\n## Encoding/decoding speed\n\nComparison with node-iconv module (1000x256kb, on MacBook Pro, Core i5/2.6 GHz, Node v0.10.26). \nNote: your results may vary, so please always check on your hardware.\n\n operation iconv@2.1.4 iconv-lite@0.4.0\n ----------------------------------------------------------\n encode('win1251') ~130 Mb/s ~380 Mb/s\n decode('win1251') ~127 Mb/s ~210 Mb/s\n\n\n## Notes\n\nWhen decoding, be sure to supply a Buffer to decode() method, otherwise [bad things usually happen](https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding). \nUntranslatable characters are set to � or ?. No transliteration is currently supported.\n\n## Testing\n\n```bash\n$ git clone git@github.com:ashtuchkin/iconv-lite.git\n$ cd iconv-lite\n$ npm install\n$ npm test\n \n$ # To view performance:\n$ node test/performance.js\n```\n\n## Adoption\n[![NPM](https://nodei.co/npm-dl/iconv-lite.png)](https://nodei.co/npm/iconv-lite/)\n\n", + "readmeFilename": "README.md", + "_id": "iconv-lite@0.4.3", + "_from": "iconv-lite@0.4.3" +} diff --git a/node_modules/body-parser/node_modules/media-typer/.npmignore b/node_modules/body-parser/node_modules/media-typer/.npmignore new file mode 100755 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/body-parser/node_modules/media-typer/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/body-parser/node_modules/media-typer/HISTORY.md b/node_modules/body-parser/node_modules/media-typer/HISTORY.md new file mode 100755 index 0000000..215cc22 --- /dev/null +++ b/node_modules/body-parser/node_modules/media-typer/HISTORY.md @@ -0,0 +1,16 @@ +0.2.0 / 2014-06-18 +================== + + * Add `typer.format()` to format media types + +0.1.0 / 2014-06-17 +================== + + * Accept `req` as argument to `parse` + * Accept `res` as argument to `parse` + * Parse media type with extra LWS between type and first parameter + +0.0.0 / 2014-06-13 +================== + + * Initial implementation diff --git a/node_modules/body-parser/node_modules/media-typer/README.md b/node_modules/body-parser/node_modules/media-typer/README.md new file mode 100755 index 0000000..338b7ce --- /dev/null +++ b/node_modules/body-parser/node_modules/media-typer/README.md @@ -0,0 +1,88 @@ +# media-typer + +[![NPM version](https://badge.fury.io/js/media-typer.svg)](https://badge.fury.io/js/media-typer) +[![Build Status](https://travis-ci.org/expressjs/media-typer.svg?branch=master)](https://travis-ci.org/expressjs/media-typer) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/media-typer.svg?branch=master)](https://coveralls.io/r/expressjs/media-typer) + +Simple RFC 6838 media type parser + +## Installation + +```sh +$ npm install media-typer +``` + +## API + +```js +var typer = require('media-typer') +``` + +### typer.parse(string) + +```js +var obj = typer.parse('image/svg+xml; charset=utf-8') +``` + +Parse a media type string. This will return an object with the following +properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`): + + - `type`: The type of the media type (always lower case). Example: `'image'` + + - `subtype`: The subtype of the media type (always lower case). Example: `'svg'` + + - `suffix`: The suffix of the media type (always lower case). Example: `'xml'` + + - `parameters`: An object of the parameters in the media type (name of parameter always lower case). Example: `{charset: 'utf-8'}` + +### typer.parse(req) + +```js +var obj = typer.parse(req) +``` + +Parse the `content-type` header from the given `req`. Short-cut for +`typer.parse(req.headers['content-type'])`. + +### typer.parse(res) + +```js +var obj = typer.parse(req) +``` + +Parse the `content-type` header set on the given `res`. Short-cut for +`typer.parse(res.getHeader('content-type'))`. + +### typer.format(obj) + +```js +var obj = typer.format({type: 'image', subtype: 'svg', suffix: 'xml'}) +``` + +Format an object into a media type string. This will return a string of the +mime type for the given object. For the properties of the object, see the +documentation for `typer.parse(string)`. + +## License + +The MIT License (MIT) + +Copyright (c) 2014 Douglas Christopher Wilson + +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/node_modules/body-parser/node_modules/media-typer/index.js b/node_modules/body-parser/node_modules/media-typer/index.js new file mode 100755 index 0000000..cbf2e17 --- /dev/null +++ b/node_modules/body-parser/node_modules/media-typer/index.js @@ -0,0 +1,261 @@ +/*! + * media-typer + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * RegExp to match *( ";" parameter ) in RFC 2616 sec 3.7 + * + * parameter = token "=" ( token | quoted-string ) + * token = 1* + * separators = "(" | ")" | "<" | ">" | "@" + * | "," | ";" | ":" | "\" | <"> + * | "/" | "[" | "]" | "?" | "=" + * | "{" | "}" | SP | HT + * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) + * qdtext = > + * quoted-pair = "\" CHAR + * CHAR = + * TEXT = + * LWS = [CRLF] 1*( SP | HT ) + * CRLF = CR LF + * CR = + * LF = + * SP = + * SHT = + * CTL = + * OCTET = + */ +var paramRegExp = /; *([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *= *("(?:[ !\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u0020-\u007e])*"|[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) */g; +var textRegExp = /^[\u0020-\u007e\u0080-\u00ff]+$/ +var tokenRegExp = /^[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+$/ + +/** + * RegExp to match quoted-pair in RFC 2616 + * + * quoted-pair = "\" CHAR + * CHAR = + */ +var qescRegExp = /\\([\u0000-\u007f])/g; + +/** + * RegExp to match chars that must be quoted-pair in RFC 2616 + */ +var quoteRegExp = /([\\"])/g; + +/** + * RegExp to match type in RFC 6838 + * + * type-name = restricted-name + * subtype-name = restricted-name + * restricted-name = restricted-name-first *126restricted-name-chars + * restricted-name-first = ALPHA / DIGIT + * restricted-name-chars = ALPHA / DIGIT / "!" / "#" / + * "$" / "&" / "-" / "^" / "_" + * restricted-name-chars =/ "." ; Characters before first dot always + * ; specify a facet name + * restricted-name-chars =/ "+" ; Characters after last plus always + * ; specify a structured syntax suffix + * ALPHA = %x41-5A / %x61-7A ; A-Z / a-z + * DIGIT = %x30-39 ; 0-9 + */ +var subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/ +var typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/ +var typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/; + +/** + * Module exports. + */ + +exports.format = format +exports.parse = parse + +/** + * Format object to media type. + * + * @param {object} obj + * @return {string} + * @api public + */ + +function format(obj) { + if (!obj || typeof obj !== 'object') { + throw new TypeError('argument obj is required') + } + + var parameters = obj.parameters + var subtype = obj.subtype + var suffix = obj.suffix + var type = obj.type + + if (!type || !typeNameRegExp.test(type)) { + throw new TypeError('invalid type') + } + + if (!subtype || !subtypeNameRegExp.test(subtype)) { + throw new TypeError('invalid subtype') + } + + // format as type/subtype + var string = type + '/' + subtype + + // append +suffix + if (suffix) { + if (!typeNameRegExp.test(suffix)) { + throw new TypeError('invalid suffix') + } + + string += '+' + suffix + } + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + if (!tokenRegExp.test(param)) { + throw new TypeError('invalid parameter name') + } + + string += '; ' + param + '=' + qstring(parameters[param]) + } + } + + return string +} + +/** + * Parse media type to object. + * + * @param {string|object} string + * @return {Object} + * @api public + */ + +function parse(string) { + if (!string) { + throw new TypeError('argument string is required') + } + + // support req/res-like objects as argument + if (typeof string === 'object') { + string = getcontenttype(string) + } + + if (typeof string !== 'string') { + throw new TypeError('argument string is required to be a string') + } + + var index = string.indexOf(';') + var type = index !== -1 + ? string.substr(0, index) + : string + + var key + var match + var obj = splitType(type) + var params = {} + var value + + paramRegExp.lastIndex = index + + while (match = paramRegExp.exec(string)) { + key = match[1].toLowerCase() + value = match[2] + + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(qescRegExp, '$1') + } + + params[key] = value + } + + obj.parameters = params + + return obj +} + +/** + * Get content-type from req/res objects. + * + * @param {object} + * @return {Object} + * @api private + */ + +function getcontenttype(obj) { + if (typeof obj.getHeader === 'function') { + // res-like + return obj.getHeader('content-type') + } + + if (typeof obj.headers === 'object') { + // req-like + return obj.headers && obj.headers['content-type'] + } +} + +/** + * Quote a string if necessary. + * + * @param {string} val + * @return {string} + * @api private + */ + +function qstring(val) { + var str = String(val) + + // no need to quote tokens + if (tokenRegExp.test(str)) { + return str + } + + if (str.length > 0 && !textRegExp.test(str)) { + throw new TypeError('invalid parameter value') + } + + return '"' + str.replace(quoteRegExp, '\\$1') + '"' +} + +/** + * Simply "type/subtype+siffx" into parts. + * + * @param {string} string + * @return {Object} + * @api private + */ + +function splitType(string) { + var match = typeRegExp.exec(string.toLowerCase()) + + if (!match) { + throw new TypeError('invalid media type') + } + + var type = match[1] + var subtype = match[2] + var suffix + + // suffix after last + + var index = subtype.lastIndexOf('+') + if (index !== -1) { + suffix = subtype.substr(index + 1) + subtype = subtype.substr(0, index) + } + + var obj = { + type: type, + subtype: subtype, + suffix: suffix + } + + return obj +} diff --git a/node_modules/body-parser/node_modules/media-typer/package.json b/node_modules/body-parser/node_modules/media-typer/package.json new file mode 100755 index 0000000..786c692 --- /dev/null +++ b/node_modules/body-parser/node_modules/media-typer/package.json @@ -0,0 +1,34 @@ +{ + "name": "media-typer", + "description": "Simple RFC 6838 media type parser and formatter", + "version": "0.2.0", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/expressjs/media-typer" + }, + "devDependencies": { + "istanbul": "0.2.10", + "mocha": "~1.20.1", + "should": "~4.0.4" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --reporter dot test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec test/" + }, + "readme": "# media-typer\n\n[![NPM version](https://badge.fury.io/js/media-typer.svg)](https://badge.fury.io/js/media-typer)\n[![Build Status](https://travis-ci.org/expressjs/media-typer.svg?branch=master)](https://travis-ci.org/expressjs/media-typer)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/media-typer.svg?branch=master)](https://coveralls.io/r/expressjs/media-typer)\n\nSimple RFC 6838 media type parser\n\n## Installation\n\n```sh\n$ npm install media-typer\n```\n\n## API\n\n```js\nvar typer = require('media-typer')\n```\n\n### typer.parse(string)\n\n```js\nvar obj = typer.parse('image/svg+xml; charset=utf-8')\n```\n\nParse a media type string. This will return an object with the following\nproperties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):\n\n - `type`: The type of the media type (always lower case). Example: `'image'`\n\n - `subtype`: The subtype of the media type (always lower case). Example: `'svg'`\n\n - `suffix`: The suffix of the media type (always lower case). Example: `'xml'`\n\n - `parameters`: An object of the parameters in the media type (name of parameter always lower case). Example: `{charset: 'utf-8'}`\n\n### typer.parse(req)\n\n```js\nvar obj = typer.parse(req)\n```\n\nParse the `content-type` header from the given `req`. Short-cut for\n`typer.parse(req.headers['content-type'])`.\n\n### typer.parse(res)\n\n```js\nvar obj = typer.parse(req)\n```\n\nParse the `content-type` header set on the given `res`. Short-cut for\n`typer.parse(res.getHeader('content-type'))`.\n\n### typer.format(obj)\n\n```js\nvar obj = typer.format({type: 'image', subtype: 'svg', suffix: 'xml'})\n```\n\nFormat an object into a media type string. This will return a string of the\nmime type for the given object. For the properties of the object, see the\ndocumentation for `typer.parse(string)`.\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/media-typer/issues" + }, + "_id": "media-typer@0.2.0", + "_from": "media-typer@0.2.0" +} diff --git a/node_modules/body-parser/node_modules/qs/.gitmodules b/node_modules/body-parser/node_modules/qs/.gitmodules new file mode 100755 index 0000000..49e31da --- /dev/null +++ b/node_modules/body-parser/node_modules/qs/.gitmodules @@ -0,0 +1,6 @@ +[submodule "support/expresso"] + path = support/expresso + url = git://github.com/visionmedia/expresso.git +[submodule "support/should"] + path = support/should + url = git://github.com/visionmedia/should.js.git diff --git a/node_modules/body-parser/node_modules/qs/.npmignore b/node_modules/body-parser/node_modules/qs/.npmignore new file mode 100755 index 0000000..e85ce2a --- /dev/null +++ b/node_modules/body-parser/node_modules/qs/.npmignore @@ -0,0 +1,7 @@ +test +.travis.yml +benchmark.js +component.json +examples.js +History.md +Makefile diff --git a/node_modules/body-parser/node_modules/qs/Readme.md b/node_modules/body-parser/node_modules/qs/Readme.md new file mode 100755 index 0000000..27e54a4 --- /dev/null +++ b/node_modules/body-parser/node_modules/qs/Readme.md @@ -0,0 +1,58 @@ +# node-querystring + + query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others. + +## Installation + + $ npm install qs + +## Examples + +```js +var qs = require('qs'); + +qs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com'); +// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } } + +qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}) +// => user[name]=Tobi&user[email]=tobi%40learnboost.com +``` + +## Testing + +Install dev dependencies: + + $ npm install -d + +and execute: + + $ make test + +browser: + + $ open test/browser/index.html + +## License + +(The MIT License) + +Copyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca> + +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. \ No newline at end of file diff --git a/node_modules/body-parser/node_modules/qs/index.js b/node_modules/body-parser/node_modules/qs/index.js new file mode 100755 index 0000000..b05938a --- /dev/null +++ b/node_modules/body-parser/node_modules/qs/index.js @@ -0,0 +1,366 @@ +/** + * Object#toString() ref for stringify(). + */ + +var toString = Object.prototype.toString; + +/** + * Object#hasOwnProperty ref + */ + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * Array#indexOf shim. + */ + +var indexOf = typeof Array.prototype.indexOf === 'function' + ? function(arr, el) { return arr.indexOf(el); } + : function(arr, el) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] === el) return i; + } + return -1; + }; + +/** + * Array.isArray shim. + */ + +var isArray = Array.isArray || function(arr) { + return toString.call(arr) == '[object Array]'; +}; + +/** + * Object.keys shim. + */ + +var objectKeys = Object.keys || function(obj) { + var ret = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + ret.push(key); + } + } + return ret; +}; + +/** + * Array#forEach shim. + */ + +var forEach = typeof Array.prototype.forEach === 'function' + ? function(arr, fn) { return arr.forEach(fn); } + : function(arr, fn) { + for (var i = 0; i < arr.length; i++) fn(arr[i]); + }; + +/** + * Array#reduce shim. + */ + +var reduce = function(arr, fn, initial) { + if (typeof arr.reduce === 'function') return arr.reduce(fn, initial); + var res = initial; + for (var i = 0; i < arr.length; i++) res = fn(res, arr[i]); + return res; +}; + +/** + * Cache non-integer test regexp. + */ + +var isint = /^[0-9]+$/; + +function promote(parent, key) { + if (parent[key].length == 0) return parent[key] = {} + var t = {}; + for (var i in parent[key]) { + if (hasOwnProperty.call(parent[key], i)) { + t[i] = parent[key][i]; + } + } + parent[key] = t; + return t; +} + +function parse(parts, parent, key, val) { + var part = parts.shift(); + + // illegal + if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; + + // end + if (!part) { + if (isArray(parent[key])) { + parent[key].push(val); + } else if ('object' == typeof parent[key]) { + parent[key] = val; + } else if ('undefined' == typeof parent[key]) { + parent[key] = val; + } else { + parent[key] = [parent[key], val]; + } + // array + } else { + var obj = parent[key] = parent[key] || []; + if (']' == part) { + if (isArray(obj)) { + if ('' != val) obj.push(val); + } else if ('object' == typeof obj) { + obj[objectKeys(obj).length] = val; + } else { + obj = parent[key] = [parent[key], val]; + } + // prop + } else if (~indexOf(part, ']')) { + part = part.substr(0, part.length - 1); + if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); + parse(parts, obj, part, val); + // key + } else { + if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); + parse(parts, obj, part, val); + } + } +} + +/** + * Merge parent key/val pair. + */ + +function merge(parent, key, val){ + if (~indexOf(key, ']')) { + var parts = key.split('[') + , len = parts.length + , last = len - 1; + parse(parts, parent, 'base', val); + // optimize + } else { + if (!isint.test(key) && isArray(parent.base)) { + var t = {}; + for (var k in parent.base) t[k] = parent.base[k]; + parent.base = t; + } + set(parent.base, key, val); + } + + return parent; +} + +/** + * Compact sparse arrays. + */ + +function compact(obj) { + if ('object' != typeof obj) return obj; + + if (isArray(obj)) { + var ret = []; + + for (var i in obj) { + if (hasOwnProperty.call(obj, i)) { + ret.push(obj[i]); + } + } + + return ret; + } + + for (var key in obj) { + obj[key] = compact(obj[key]); + } + + return obj; +} + +/** + * Parse the given obj. + */ + +function parseObject(obj){ + var ret = { base: {} }; + + forEach(objectKeys(obj), function(name){ + merge(ret, name, obj[name]); + }); + + return compact(ret.base); +} + +/** + * Parse the given str. + */ + +function parseString(str){ + var ret = reduce(String(str).split('&'), function(ret, pair){ + var eql = indexOf(pair, '=') + , brace = lastBraceInKey(pair) + , key = pair.substr(0, brace || eql) + , val = pair.substr(brace || eql, pair.length) + , val = val.substr(indexOf(val, '=') + 1, val.length); + + // ?foo + if ('' == key) key = pair, val = ''; + if ('' == key) return ret; + + return merge(ret, decode(key), decode(val)); + }, { base: {} }).base; + + return compact(ret); +} + +/** + * Parse the given query `str` or `obj`, returning an object. + * + * @param {String} str | {Object} obj + * @return {Object} + * @api public + */ + +exports.parse = function(str){ + if (null == str || '' == str) return {}; + return 'object' == typeof str + ? parseObject(str) + : parseString(str); +}; + +/** + * Turn the given `obj` into a query string + * + * @param {Object} obj + * @return {String} + * @api public + */ + +var stringify = exports.stringify = function(obj, prefix) { + if (isArray(obj)) { + return stringifyArray(obj, prefix); + } else if ('[object Object]' == toString.call(obj)) { + return stringifyObject(obj, prefix); + } else if ('string' == typeof obj) { + return stringifyString(obj, prefix); + } else { + return prefix + '=' + encodeURIComponent(String(obj)); + } +}; + +/** + * Stringify the given `str`. + * + * @param {String} str + * @param {String} prefix + * @return {String} + * @api private + */ + +function stringifyString(str, prefix) { + if (!prefix) throw new TypeError('stringify expects an object'); + return prefix + '=' + encodeURIComponent(str); +} + +/** + * Stringify the given `arr`. + * + * @param {Array} arr + * @param {String} prefix + * @return {String} + * @api private + */ + +function stringifyArray(arr, prefix) { + var ret = []; + if (!prefix) throw new TypeError('stringify expects an object'); + for (var i = 0; i < arr.length; i++) { + ret.push(stringify(arr[i], prefix + '[' + i + ']')); + } + return ret.join('&'); +} + +/** + * Stringify the given `obj`. + * + * @param {Object} obj + * @param {String} prefix + * @return {String} + * @api private + */ + +function stringifyObject(obj, prefix) { + var ret = [] + , keys = objectKeys(obj) + , key; + + for (var i = 0, len = keys.length; i < len; ++i) { + key = keys[i]; + if ('' == key) continue; + if (null == obj[key]) { + ret.push(encodeURIComponent(key) + '='); + } else { + ret.push(stringify(obj[key], prefix + ? prefix + '[' + encodeURIComponent(key) + ']' + : encodeURIComponent(key))); + } + } + + return ret.join('&'); +} + +/** + * Set `obj`'s `key` to `val` respecting + * the weird and wonderful syntax of a qs, + * where "foo=bar&foo=baz" becomes an array. + * + * @param {Object} obj + * @param {String} key + * @param {String} val + * @api private + */ + +function set(obj, key, val) { + var v = obj[key]; + if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; + if (undefined === v) { + obj[key] = val; + } else if (isArray(v)) { + v.push(val); + } else { + obj[key] = [v, val]; + } +} + +/** + * Locate last brace in `str` within the key. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function lastBraceInKey(str) { + var len = str.length + , brace + , c; + for (var i = 0; i < len; ++i) { + c = str[i]; + if (']' == c) brace = false; + if ('[' == c) brace = true; + if ('=' == c && !brace) return i; + } +} + +/** + * Decode `str`. + * + * @param {String} str + * @return {String} + * @api private + */ + +function decode(str) { + try { + return decodeURIComponent(str.replace(/\+/g, ' ')); + } catch (err) { + return str; + } +} diff --git a/node_modules/body-parser/node_modules/qs/package.json b/node_modules/body-parser/node_modules/qs/package.json new file mode 100755 index 0000000..719725f --- /dev/null +++ b/node_modules/body-parser/node_modules/qs/package.json @@ -0,0 +1,37 @@ +{ + "name": "qs", + "description": "querystring parser", + "version": "0.6.6", + "keywords": [ + "query string", + "parser", + "component" + ], + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/node-querystring.git" + }, + "devDependencies": { + "mocha": "*", + "expect.js": "*" + }, + "scripts": { + "test": "make test" + }, + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "main": "index", + "engines": { + "node": "*" + }, + "readme": "# node-querystring\n\n query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others.\n\n## Installation\n\n $ npm install qs\n\n## Examples\n\n```js\nvar qs = require('qs');\n\nqs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com');\n// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } }\n\nqs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }})\n// => user[name]=Tobi&user[email]=tobi%40learnboost.com\n```\n\n## Testing\n\nInstall dev dependencies:\n\n $ npm install -d\n\nand execute:\n\n $ make test\n\nbrowser:\n\n $ open test/browser/index.html\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/node-querystring/issues" + }, + "_id": "qs@0.6.6", + "_from": "qs@0.6.6" +} diff --git a/node_modules/body-parser/node_modules/raw-body/.npmignore b/node_modules/body-parser/node_modules/raw-body/.npmignore new file mode 100755 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/body-parser/node_modules/raw-body/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/body-parser/node_modules/raw-body/HISTORY.md b/node_modules/body-parser/node_modules/raw-body/HISTORY.md new file mode 100755 index 0000000..5ed5886 --- /dev/null +++ b/node_modules/body-parser/node_modules/raw-body/HISTORY.md @@ -0,0 +1,102 @@ +1.2.2 / 2014-06-19 +================== + + * Send invalid encoding error to callback + +1.2.1 / 2014-06-15 +================== + + * deps: iconv-lite@0.4.3 + - Added encodings UTF-16BE and UTF-16 with BOM + +1.2.0 / 2014-06-13 +================== + + * Passing string as `options` interpreted as encoding + * Support all encodings from `iconv-lite` + +1.1.7 / 2014-06-12 +================== + + * use `string_decoder` module from npm + +1.1.6 / 2014-05-27 +================== + + * check encoding for old streams1 + * support node.js < 0.10.6 + +1.1.5 / 2014-05-14 +================== + + * bump bytes + +1.1.4 / 2014-04-19 +================== + + * allow true as an option + * bump bytes + +1.1.3 / 2014-03-02 +================== + + * fix case when length=null + +1.1.2 / 2013-12-01 +================== + + * be less strict on state.encoding check + +1.1.1 / 2013-11-27 +================== + + * add engines + +1.1.0 / 2013-11-27 +================== + + * add err.statusCode and err.type + * allow for encoding option to be true + * pause the stream instead of dumping on error + * throw if the stream's encoding is set + +1.0.1 / 2013-11-19 +================== + + * dont support streams1, throw if dev set encoding + +1.0.0 / 2013-11-17 +================== + + * rename `expected` option to `length` + +0.2.0 / 2013-11-15 +================== + + * republish + +0.1.1 / 2013-11-15 +================== + + * use bytes + +0.1.0 / 2013-11-11 +================== + + * generator support + +0.0.3 / 2013-10-10 +================== + + * update repo + +0.0.2 / 2013-09-14 +================== + + * dump stream on bad headers + * listen to events after defining received and buffers + +0.0.1 / 2013-09-14 +================== + + * Initial release diff --git a/node_modules/body-parser/node_modules/raw-body/README.md b/node_modules/body-parser/node_modules/raw-body/README.md new file mode 100755 index 0000000..ee3b3ec --- /dev/null +++ b/node_modules/body-parser/node_modules/raw-body/README.md @@ -0,0 +1,103 @@ +# raw-body + +[![NPM version](https://badge.fury.io/js/raw-body.svg)](http://badge.fury.io/js/raw-body) +[![Build Status](https://travis-ci.org/stream-utils/raw-body.svg?branch=master)](https://travis-ci.org/stream-utils/raw-body) +[![Coverage Status](https://img.shields.io/coveralls/stream-utils/raw-body.svg?branch=master)](https://coveralls.io/r/stream-utils/raw-body) + +Gets the entire buffer of a stream either as a `Buffer` or a string. +Validates the stream's length against an expected length and maximum limit. +Ideal for parsing request bodies. + +## API + +```js +var getRawBody = require('raw-body') +var typer = require('media-typer') + +app.use(function (req, res, next) { + getRawBody(req, { + length: req.headers['content-length'], + limit: '1mb', + encoding: typer.parse(req.headers['content-type']).parameters.charset + }, function (err, string) { + if (err) + return next(err) + + req.text = string + next() + }) +}) +``` + +or in a Koa generator: + +```js +app.use(function* (next) { + var string = yield getRawBody(this.req, { + length: this.length, + limit: '1mb', + encoding: this.charset + }) +}) +``` + +### getRawBody(stream, [options], [callback]) + +Returns a thunk for yielding with generators. + +Options: + +- `length` - The length length of the stream. + If the contents of the stream do not add up to this length, + an `400` error code is returned. +- `limit` - The byte limit of the body. + If the body ends up being larger than this limit, + a `413` error code is returned. +- `encoding` - The requested encoding. + By default, a `Buffer` instance will be returned. + Most likely, you want `utf8`. + You can use any type of encoding supported by [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme). + +You can also pass a string in place of options to just specify the encoding. + +`callback(err, res)`: + +- `err` - the following attributes will be defined if applicable: + + - `limit` - the limit in bytes + - `length` and `expected` - the expected length of the stream + - `received` - the received bytes + - `encoding` - the invalid encoding + - `status` and `statusCode` - the corresponding status code for the error + - `type` - either `entity.too.large`, `request.size.invalid`, `stream.encoding.set`, or `encoding.unsupported` + +- `res` - the result, either as a `String` if an encoding was set or a `Buffer` otherwise. + +If an error occurs, the stream will be paused, +and you are responsible for correctly disposing the stream. +For HTTP requests, no handling is required if you send a response. +For streams that use file descriptors, you should `stream.destroy()` or `stream.close()` to prevent leaks. + +## License + +The MIT License (MIT) + +Copyright (c) 2013 Jonathan Ong me@jongleberry.com + +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/node_modules/body-parser/node_modules/raw-body/index.js b/node_modules/body-parser/node_modules/raw-body/index.js new file mode 100755 index 0000000..dcb554d --- /dev/null +++ b/node_modules/body-parser/node_modules/raw-body/index.js @@ -0,0 +1,180 @@ +var bytes = require('bytes') +var iconv = require('iconv-lite') + +module.exports = function (stream, options, done) { + if (options === true || typeof options === 'string') { + // short cut for encoding + options = { + encoding: options + } + } + + options = options || {} + + if (typeof options === 'function') { + done = options + options = {} + } + + // get encoding + var encoding = options.encoding !== true + ? options.encoding + : 'utf-8' + + // convert the limit to an integer + var limit = null + if (typeof options.limit === 'number') + limit = options.limit + if (typeof options.limit === 'string') + limit = bytes(options.limit) + + // convert the expected length to an integer + var length = null + if (options.length != null && !isNaN(options.length)) + length = parseInt(options.length, 10) + + // check the length and limit options. + // note: we intentionally leave the stream paused, + // so users should handle the stream themselves. + if (limit !== null && length !== null && length > limit) { + if (typeof stream.pause === 'function') + stream.pause() + + process.nextTick(function () { + var err = makeError('request entity too large', 'entity.too.large') + err.status = err.statusCode = 413 + err.length = err.expected = length + err.limit = limit + done(err) + }) + return defer + } + + // streams1: assert request encoding is buffer. + // streams2+: assert the stream encoding is buffer. + // stream._decoder: streams1 + // state.encoding: streams2 + // state.decoder: streams2, specifically < 0.10.6 + var state = stream._readableState + if (stream._decoder || (state && (state.encoding || state.decoder))) { + if (typeof stream.pause === 'function') + stream.pause() + + process.nextTick(function () { + var err = makeError('stream encoding should not be set', + 'stream.encoding.set') + // developer error + err.status = err.statusCode = 500 + done(err) + }) + return defer + } + + var received = 0 + var decoder + + try { + decoder = getDecoder(encoding) + } catch (err) { + if (typeof stream.pause === 'function') + stream.pause() + + process.nextTick(function () { + done(err) + }) + return defer + } + + var buffer = decoder + ? '' + : [] + + stream.on('data', onData) + stream.once('end', onEnd) + stream.once('error', onEnd) + stream.once('close', cleanup) + + return defer + + // yieldable support + function defer(fn) { + done = fn + } + + function onData(chunk) { + received += chunk.length + decoder + ? buffer += decoder.write(chunk) + : buffer.push(chunk) + + if (limit !== null && received > limit) { + if (typeof stream.pause === 'function') + stream.pause() + var err = makeError('request entity too large', 'entity.too.large') + err.status = err.statusCode = 413 + err.received = received + err.limit = limit + done(err) + cleanup() + } + } + + function onEnd(err) { + if (err) { + if (typeof stream.pause === 'function') + stream.pause() + done(err) + } else if (length !== null && received !== length) { + err = makeError('request size did not match content length', + 'request.size.invalid') + err.status = err.statusCode = 400 + err.received = received + err.length = err.expected = length + done(err) + } else { + done(null, decoder + ? buffer + (decoder.end() || '') + : Buffer.concat(buffer) + ) + } + + cleanup() + } + + function cleanup() { + received = buffer = null + + stream.removeListener('data', onData) + stream.removeListener('end', onEnd) + stream.removeListener('error', onEnd) + stream.removeListener('close', cleanup) + } +} + +function getDecoder(encoding) { + if (!encoding) return null + + try { + return iconv.getCodec(encoding).decoder() + } catch (e) { + var err = makeError('specified encoding unsupported', 'encoding.unsupported') + err.status = err.statusCode = 415 + err.encoding = encoding + throw err + } +} + +// to create serializable errors you must re-set message so +// that it is enumerable and you must re configure the type +// property so that is writable and enumerable +function makeError(message, type) { + var error = new Error() + error.message = message + Object.defineProperty(error, 'type', { + value: type, + enumerable: true, + writable: true, + configurable: true + }) + return error +} diff --git a/node_modules/body-parser/node_modules/raw-body/package.json b/node_modules/body-parser/node_modules/raw-body/package.json new file mode 100755 index 0000000..1bf30bb --- /dev/null +++ b/node_modules/body-parser/node_modules/raw-body/package.json @@ -0,0 +1,51 @@ +{ + "name": "raw-body", + "description": "Get and validate the raw body of a readable stream.", + "version": "1.2.2", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Raynos", + "email": "raynos2@gmail.com" + } + ], + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/stream-utils/raw-body" + }, + "dependencies": { + "bytes": "1", + "iconv-lite": "0.4.3" + }, + "devDependencies": { + "istanbul": "0.2.10", + "mocha": "~1.20.1", + "readable-stream": "~1.0.17", + "request": ">= 2.36.0 < 3", + "through2": "~0.5.1" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --reporter spec --bail test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec test/" + }, + "readme": "# raw-body\n\n[![NPM version](https://badge.fury.io/js/raw-body.svg)](http://badge.fury.io/js/raw-body)\n[![Build Status](https://travis-ci.org/stream-utils/raw-body.svg?branch=master)](https://travis-ci.org/stream-utils/raw-body)\n[![Coverage Status](https://img.shields.io/coveralls/stream-utils/raw-body.svg?branch=master)](https://coveralls.io/r/stream-utils/raw-body)\n\nGets the entire buffer of a stream either as a `Buffer` or a string.\nValidates the stream's length against an expected length and maximum limit.\nIdeal for parsing request bodies.\n\n## API\n\n```js\nvar getRawBody = require('raw-body')\nvar typer = require('media-typer')\n\napp.use(function (req, res, next) {\n getRawBody(req, {\n length: req.headers['content-length'],\n limit: '1mb',\n encoding: typer.parse(req.headers['content-type']).parameters.charset\n }, function (err, string) {\n if (err)\n return next(err)\n\n req.text = string\n next()\n })\n})\n```\n\nor in a Koa generator:\n\n```js\napp.use(function* (next) {\n var string = yield getRawBody(this.req, {\n length: this.length,\n limit: '1mb',\n encoding: this.charset\n })\n})\n```\n\n### getRawBody(stream, [options], [callback])\n\nReturns a thunk for yielding with generators.\n\nOptions:\n\n- `length` - The length length of the stream.\n If the contents of the stream do not add up to this length,\n an `400` error code is returned.\n- `limit` - The byte limit of the body.\n If the body ends up being larger than this limit,\n a `413` error code is returned.\n- `encoding` - The requested encoding.\n By default, a `Buffer` instance will be returned.\n Most likely, you want `utf8`.\n You can use any type of encoding supported by [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme).\n\nYou can also pass a string in place of options to just specify the encoding.\n\n`callback(err, res)`:\n\n- `err` - the following attributes will be defined if applicable:\n\n - `limit` - the limit in bytes\n - `length` and `expected` - the expected length of the stream\n - `received` - the received bytes\n - `encoding` - the invalid encoding\n - `status` and `statusCode` - the corresponding status code for the error\n - `type` - either `entity.too.large`, `request.size.invalid`, `stream.encoding.set`, or `encoding.unsupported`\n\n- `res` - the result, either as a `String` if an encoding was set or a `Buffer` otherwise.\n\nIf an error occurs, the stream will be paused,\nand you are responsible for correctly disposing the stream.\nFor HTTP requests, no handling is required if you send a response.\nFor streams that use file descriptors, you should `stream.destroy()` or `stream.close()` to prevent leaks.\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/stream-utils/raw-body/issues" + }, + "_id": "raw-body@1.2.2", + "_from": "raw-body@1.2.2" +} diff --git a/node_modules/body-parser/node_modules/type-is/.npmignore b/node_modules/body-parser/node_modules/type-is/.npmignore new file mode 100755 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/body-parser/node_modules/type-is/HISTORY.md b/node_modules/body-parser/node_modules/type-is/HISTORY.md new file mode 100755 index 0000000..999a241 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/HISTORY.md @@ -0,0 +1,48 @@ +1.3.1 / 2014-06-19 +================== + + * fix global variable leak + +1.3.0 / 2014-06-19 +================== + + * improve type parsing + + - invalid media type never matches + - media type not case-sensitive + - extra LWS does not affect results + +1.2.2 / 2014-06-19 +================== + + * fix behavior on unknown type argument + +1.2.1 / 2014-06-03 +================== + + * switch dependency from `mime` to `mime-types@1.0.0` + +1.2.0 / 2014-05-11 +================== + + * support suffix matching: + + - `+json` matches `application/vnd+json` + - `*/vnd+json` matches `application/vnd+json` + - `application/*+json` matches `application/vnd+json` + +1.1.0 / 2014-04-12 +================== + + * add non-array values support + * expose internal utilities: + + - `.is()` + - `.hasBody()` + - `.normalize()` + - `.match()` + +1.0.1 / 2014-03-30 +================== + + * add `multipart` as a shorthand diff --git a/node_modules/body-parser/node_modules/type-is/README.md b/node_modules/body-parser/node_modules/type-is/README.md new file mode 100755 index 0000000..5d8b166 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/README.md @@ -0,0 +1,101 @@ +# type-is + +[![NPM version](https://badge.fury.io/js/type-is.svg)](https://badge.fury.io/js/type-is) +[![Build Status](https://travis-ci.org/expressjs/type-is.svg?branch=master)](https://travis-ci.org/expressjs/type-is) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/type-is.svg?branch=master)](https://coveralls.io/r/expressjs/type-is) + +Infer the content-type of a request. + +### Install + +```sh +$ npm install type-is +``` + +## API + +```js +var http = require('http') +var is = require('type-is') + +http.createServer(function (req, res) { + var istext = is(req, ['text/*']) + res.end('you ' + (istext ? 'sent' : 'did not send') + ' me text') +}) +``` + +### type = is(request, types) + +`request` is the node HTTP request. `types` is an array of types. + +```js +// req.headers.content-type = 'application/json' + +is(req, ['json']) // 'json' +is(req, ['html', 'json']) // 'json' +is(req, ['application/*']) // 'application/json' +is(req, ['application/json']) // 'application/json' + +is(req, ['html']) // false +``` + +#### Each type can be: + +- An extension name such as `json`. This name will be returned if matched. +- A mime type such as `application/json`. +- A mime type with a wildcard such as `*/json` or `application/*`. The full mime type will be returned if matched +- A suffix such as `+json`. This can be combined with a wildcard such as `*/vnd+json` or `application/*+json`. The full mime type will be returned if matched. + +`false` will be returned if no type matches. + +## Examples + +#### Example body parser + +```js +var is = require('type-is'); +var parse = require('body'); +var busboy = require('busboy'); + +function bodyParser(req, res, next) { + if (!is.hasBody(req)) return next(); + + switch (is(req, ['urlencoded', 'json', 'multipart'])) { + case 'urlencoded': + // parse urlencoded body + break + case 'json': + // parse json body + break + case 'multipart': + // parse multipart body + break + default: + // 415 error code + } +} +``` + +## License + +The MIT License (MIT) + +Copyright (c) 2013 Jonathan Ong me@jongleberry.com + +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/node_modules/body-parser/node_modules/type-is/index.js b/node_modules/body-parser/node_modules/type-is/index.js new file mode 100755 index 0000000..315907a --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/index.js @@ -0,0 +1,230 @@ + +var typer = require('media-typer') +var mime = require('mime-types') + +module.exports = typeofrequest; +typeofrequest.is = typeis; +typeofrequest.hasBody = hasbody; +typeofrequest.normalize = normalize; +typeofrequest.match = mimeMatch; + +/** + * Compare a `value` content-type with `types`. + * Each `type` can be an extension like `html`, + * a special shortcut like `multipart` or `urlencoded`, + * or a mime type. + * + * If no types match, `false` is returned. + * Otherwise, the first `type` that matches is returned. + * + * @param {String} value + * @param {Array} types + * @return String + */ + +function typeis(value, types_) { + var i + var types = types_ + + // remove parameters and normalize + value = typenormalize(value) + + // no type or invalid + if (!value) { + return false + } + + // support flattened arguments + if (types && !Array.isArray(types)) { + types = new Array(arguments.length - 1) + for (i = 0; i < types.length; i++) { + types[i] = arguments[i + 1] + } + } + + // no types, return the content type + if (!types || !types.length) return value; + + var type + for (i = 0; i < types.length; i++) { + if (mimeMatch(normalize(type = types[i]), value)) { + return type[0] === '+' || ~type.indexOf('*') + ? value + : type + } + } + + // no matches + return false; +} + +/** + * Check if a request has a request body. + * A request with a body __must__ either have `transfer-encoding` + * or `content-length` headers set. + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3 + * + * @param {Object} request + * @return {Boolean} + * @api public + */ + +function hasbody(req) { + var headers = req.headers; + if ('transfer-encoding' in headers) return true; + var length = headers['content-length']; + if (!length) return false; + // no idea when this would happen, but `isNaN(null) === false` + if (isNaN(length)) return false; + return !!parseInt(length, 10); +} + +/** + * Check if the incoming request contains the "Content-Type" + * header field, and it contains any of the give mime `type`s. + * If there is no request body, `null` is returned. + * If there is no content type, `false` is returned. + * Otherwise, it returns the first `type` that matches. + * + * Examples: + * + * // With Content-Type: text/html; charset=utf-8 + * this.is('html'); // => 'html' + * this.is('text/html'); // => 'text/html' + * this.is('text/*', 'application/json'); // => 'text/html' + * + * // When Content-Type is application/json + * this.is('json', 'urlencoded'); // => 'json' + * this.is('application/json'); // => 'application/json' + * this.is('html', 'application/*'); // => 'application/json' + * + * this.is('html'); // => false + * + * @param {String|Array} types... + * @return {String|false|null} + * @api public + */ + +function typeofrequest(req, types_) { + var types = types_ + + // no body + if (!hasbody(req)) { + return null + } + + // support flattened arguments + if (arguments.length > 2) { + types = new Array(arguments.length - 1) + for (var i = 0; i < types.length; i++) { + types[i] = arguments[i + 1] + } + } + + // request content type + var value = req.headers['content-type'] + + return typeis(value, types); +} + +/** + * Normalize a mime type. + * If it's a shorthand, expand it to a valid mime type. + * + * In general, you probably want: + * + * var type = is(req, ['urlencoded', 'json', 'multipart']); + * + * Then use the appropriate body parsers. + * These three are the most common request body types + * and are thus ensured to work. + * + * @param {String} type + * @api private + */ + +function normalize(type) { + switch (type) { + case 'urlencoded': return 'application/x-www-form-urlencoded'; + case 'multipart': + type = 'multipart/*'; + break; + } + + return type[0] === '+' || ~type.indexOf('/') + ? type + : mime.lookup(type) +} + +/** + * Check if `exected` mime type + * matches `actual` mime type with + * wildcard and +suffix support. + * + * @param {String} expected + * @param {String} actual + * @return {Boolean} + * @api private + */ + +function mimeMatch(expected, actual) { + // invalid type + if (expected === false) { + return false + } + + // exact match + if (expected === actual) { + return true + } + + actual = actual.split('/'); + + if (expected[0] === '+') { + // support +suffix + return Boolean(actual[1]) + && expected.length <= actual[1].length + && expected === actual[1].substr(0 - expected.length) + } + + if (!~expected.indexOf('*')) return false; + + expected = expected.split('/'); + + if (expected[0] === '*') { + // support */yyy + return expected[1] === actual[1] + } + + if (expected[1] === '*') { + // support xxx/* + return expected[0] === actual[0] + } + + if (expected[1][0] === '*' && expected[1][1] === '+') { + // support xxx/*+zzz + return expected[0] === actual[0] + && expected[1].length <= actual[1].length + 1 + && expected[1].substr(1) === actual[1].substr(1 - expected[1].length) + } + + return false +} + +/** + * Normalize a type and remove parameters. + * + * @param {string} value + * @return {string} + * @api private + */ + +function typenormalize(value) { + try { + var type = typer.parse(value) + delete type.parameters + return typer.format(type) + } catch (err) { + return null + } +} diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/.npmignore b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/.npmignore new file mode 100755 index 0000000..8453555 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/.npmignore @@ -0,0 +1,52 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store* +# Icon? +ehthumbs.db +Thumbs.db + +# Node.js # +########### +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +node_modules +npm-debug.log diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/.travis.yml b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/.travis.yml new file mode 100755 index 0000000..6e5919d --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/LICENSE b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/LICENSE new file mode 100755 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +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/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/Makefile b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/Makefile new file mode 100755 index 0000000..ceaf011 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/Makefile @@ -0,0 +1,9 @@ + +build: + node --harmony-generators build.js + +test: + node test/mime.js + mocha --require should --reporter spec test/test.js + +.PHONY: build test diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/README.md b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/README.md new file mode 100755 index 0000000..8e62de5 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/README.md @@ -0,0 +1,100 @@ +# mime-types [![Build Status](https://travis-ci.org/expressjs/mime-types.svg?branch=master)](https://travis-ci.org/expressjs/mime-types) [![NPM version](https://badge.fury.io/js/mime-types.svg)](https://badge.fury.io/js/mime-types) + +The ultimate javascript content-type utility. + +### Install + +```sh +$ npm install mime-types +``` + +#### Similar to [mime](https://github.com/broofa/node-mime) except: + +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- No fallbacks, so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- Additional mime types are added such as jade and stylus. Feel free to add more! +- Browser support via Browserify and Component by converting lists to JSON files. + +Otherwise, the API is compatible. + +### Adding Types + +If you'd like to add additional types, +simply create a PR adding the type to `custom.json` and +a reference link to the [sources](SOURCES.md). + +Do __NOT__ edit `mime.json` or `node.json`. +Those are pulled using `build.js`. +You should only touch `custom.json`. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/x-markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/x-markdown') // 'UTF-8' +``` + +### mime.types[extension] = type + +A map of content-types by extension. + +### mime.extensions[type] = [extensions] + +A map of extensions by content-type. + +### mime.define(types) + +Globally add definitions. +`types` must be an object of the form: + +```js +{ + "": [extensions...], + "": [extensions...] +} +``` + +See the `.json` files in `lib/` for examples. + +## License + +[MIT](LICENSE) diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/SOURCES.md b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/SOURCES.md new file mode 100755 index 0000000..4cc3cb1 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/SOURCES.md @@ -0,0 +1,16 @@ + +### Sources for custom types + +This is a list of sources for any custom mime types. +When adding custom mime types, please link to where you found the mime type, +even if it's from an unofficial source. + +- `text/coffeescript` - http://coffeescript.org/#scripts +- `text/x-handlebars-template` - https://handlebarsjs.com/#getting-started +- `text/x-sass` & `text/x-scss` - https://github.com/janlelis/rubybuntu-mime/blob/master/sass.xml + +[Sources for node.json types](https://github.com/broofa/node-mime/blob/master/types/node.types) + +### Notes on weird types + +- `font/opentype` - This type is technically invalid according to the spec. No valid types begin with `font/`. No-one uses the official type of `application/vnd.ms-opentype` as the community standardized `application/x-font-otf`. However, chrome logs nonsense warnings unless opentype fonts are served with `font/opentype`. [[1]](http://stackoverflow.com/questions/2871655/proper-mime-type-for-fonts) diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/build.js b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/build.js new file mode 100755 index 0000000..6ba0171 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/build.js @@ -0,0 +1,57 @@ + +/** + * http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types + * https://github.com/broofa/node-mime/blob/master/types/node.types + * + * Convert these text files to JSON for browser usage. + */ + +var co = require('co') +var fs = require('fs') +var path = require('path') +var cogent = require('cogent') + +function* get(url) { + var res = yield* cogent(url, { + string: true + }) + + if (res.statusCode !== 200) + throw new Error('got status code ' + res.statusCode + ' from ' + url) + + var text = res.text + var json = {} + // http://en.wikipedia.org/wiki/Internet_media_type#Naming + /** + * Mime types and associated extensions are stored in the form: + * + * + * + * And some are commented out with a leading `#` because they have no associated extensions. + * This regexp checks whether a single line matches this format, ignoring lines that are just comments. + * We could also just remove all lines that start with `#` if we want to make the JSON files smaller + * and ignore all mime types without associated extensions. + */ + var re = /^(?:# )?([\w-]+\/[\w\+\.-]+)(?:\s+\w+)*$/ + text = text.split('\n') + .filter(Boolean) + .forEach(function (line) { + line = line.trim() + if (!line) return + var match = re.exec(line) + if (!match) return + // remove the leading # and and return all the s + json[match[1]] = line.replace(/^(?:# )?([\w-]+\/[\w\+\.-]+)/, '') + .split(/\s+/) + .filter(Boolean) + }) + fs.writeFileSync('lib/' + path.basename(url).split('.')[0] + '.json', + JSON.stringify(json, null, 2) + '\n') +} + +co(function* () { + yield [ + get('http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types'), + get('https://raw.githubusercontent.com/broofa/node-mime/master/types/node.types') + ] +})() diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/component.json b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/component.json new file mode 100755 index 0000000..32f31b2 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/component.json @@ -0,0 +1,16 @@ +{ + "name": "mime-types", + "description": "ultimate mime type utility", + "version": "0.1.0", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com", + "twitter": "https://twitter.com/jongleberry" + }, + "repository": "expressjs/mime-types", + "license": "MIT", + "main": "lib/index.js", + "scripts": ["lib/index.js"], + "json": ["mime.json", "node.json", "custom.json"] +} diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/custom.json b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/custom.json new file mode 100755 index 0000000..ab145bf --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/custom.json @@ -0,0 +1,24 @@ +{ + "text/jade": [ + "jade" + ], + "text/stylus": [ + "stylus", + "styl" + ], + "text/less": [ + "less" + ], + "text/x-sass": [ + "sass" + ], + "text/x-scss": [ + "scss" + ], + "text/coffeescript": [ + "coffee" + ], + "text/x-handlebars-template": [ + "hbs" + ] +} diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/index.js b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/index.js new file mode 100755 index 0000000..27559ea --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/index.js @@ -0,0 +1,74 @@ + +// types[extension] = type +exports.types = Object.create(null) +// extensions[type] = [extensions] +exports.extensions = Object.create(null) +// define more mime types +exports.define = define + +// store the json files +exports.json = { + mime: require('./mime.json'), + node: require('./node.json'), + custom: require('./custom.json'), +} + +exports.lookup = function (string) { + if (!string || typeof string !== "string") return false + string = string.replace(/.*[\.\/\\]/, '').toLowerCase() + if (!string) return false + return exports.types[string] || false +} + +exports.extension = function (type) { + if (!type || typeof type !== "string") return false + type = type.match(/^\s*([^;\s]*)(?:;|\s|$)/) + if (!type) return false + var exts = exports.extensions[type[1].toLowerCase()] + if (!exts || !exts.length) return false + return exts[0] +} + +// type has to be an exact mime type +exports.charset = function (type) { + // special cases + switch (type) { + case 'application/json': return 'UTF-8' + } + + // default text/* to utf-8 + if (/^text\//.test(type)) return 'UTF-8' + + return false +} + +// backwards compatibility +exports.charsets = { + lookup: exports.charset +} + +exports.contentType = function (type) { + if (!type || typeof type !== "string") return false + if (!~type.indexOf('/')) type = exports.lookup(type) + if (!type) return false + if (!~type.indexOf('charset')) { + var charset = exports.charset(type) + if (charset) type += '; charset=' + charset.toLowerCase() + } + return type +} + +define(exports.json.mime) +define(exports.json.node) +define(exports.json.custom) + +function define(json) { + Object.keys(json).forEach(function (type) { + var exts = json[type] || [] + exports.extensions[type] = exports.extensions[type] || [] + exts.forEach(function (ext) { + if (!~exports.extensions[type].indexOf(ext)) exports.extensions[type].push(ext) + exports.types[ext] = type + }) + }) +} diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/mime.json b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/mime.json new file mode 100755 index 0000000..f445a86 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/mime.json @@ -0,0 +1,3317 @@ +{ + "application/1d-interleaved-parityfec": [], + "application/3gpp-ims+xml": [], + "application/activemessage": [], + "application/andrew-inset": [ + "ez" + ], + "application/applefile": [], + "application/applixware": [ + "aw" + ], + "application/atom+xml": [ + "atom" + ], + "application/atomcat+xml": [ + "atomcat" + ], + "application/atomicmail": [], + "application/atomsvc+xml": [ + "atomsvc" + ], + "application/auth-policy+xml": [], + "application/batch-smtp": [], + "application/beep+xml": [], + "application/calendar+xml": [], + "application/cals-1840": [], + "application/ccmp+xml": [], + "application/ccxml+xml": [ + "ccxml" + ], + "application/cdmi-capability": [ + "cdmia" + ], + "application/cdmi-container": [ + "cdmic" + ], + "application/cdmi-domain": [ + "cdmid" + ], + "application/cdmi-object": [ + "cdmio" + ], + "application/cdmi-queue": [ + "cdmiq" + ], + "application/cea-2018+xml": [], + "application/cellml+xml": [], + "application/cfw": [], + "application/cnrp+xml": [], + "application/commonground": [], + "application/conference-info+xml": [], + "application/cpl+xml": [], + "application/csta+xml": [], + "application/cstadata+xml": [], + "application/cu-seeme": [ + "cu" + ], + "application/cybercash": [], + "application/davmount+xml": [ + "davmount" + ], + "application/dca-rft": [], + "application/dec-dx": [], + "application/dialog-info+xml": [], + "application/dicom": [], + "application/dns": [], + "application/docbook+xml": [ + "dbk" + ], + "application/dskpp+xml": [], + "application/dssc+der": [ + "dssc" + ], + "application/dssc+xml": [ + "xdssc" + ], + "application/dvcs": [], + "application/ecmascript": [ + "ecma" + ], + "application/edi-consent": [], + "application/edi-x12": [], + "application/edifact": [], + "application/emma+xml": [ + "emma" + ], + "application/epp+xml": [], + "application/epub+zip": [ + "epub" + ], + "application/eshop": [], + "application/example": [], + "application/exi": [ + "exi" + ], + "application/fastinfoset": [], + "application/fastsoap": [], + "application/fits": [], + "application/font-tdpfr": [ + "pfr" + ], + "application/framework-attributes+xml": [], + "application/gml+xml": [ + "gml" + ], + "application/gpx+xml": [ + "gpx" + ], + "application/gxf": [ + "gxf" + ], + "application/h224": [], + "application/held+xml": [], + "application/http": [], + "application/hyperstudio": [ + "stk" + ], + "application/ibe-key-request+xml": [], + "application/ibe-pkg-reply+xml": [], + "application/ibe-pp-data": [], + "application/iges": [], + "application/im-iscomposing+xml": [], + "application/index": [], + "application/index.cmd": [], + "application/index.obj": [], + "application/index.response": [], + "application/index.vnd": [], + "application/inkml+xml": [ + "ink", + "inkml" + ], + "application/iotp": [], + "application/ipfix": [ + "ipfix" + ], + "application/ipp": [], + "application/isup": [], + "application/java-archive": [ + "jar" + ], + "application/java-serialized-object": [ + "ser" + ], + "application/java-vm": [ + "class" + ], + "application/javascript": [ + "js" + ], + "application/json": [ + "json" + ], + "application/jsonml+json": [ + "jsonml" + ], + "application/kpml-request+xml": [], + "application/kpml-response+xml": [], + "application/lost+xml": [ + "lostxml" + ], + "application/mac-binhex40": [ + "hqx" + ], + "application/mac-compactpro": [ + "cpt" + ], + "application/macwriteii": [], + "application/mads+xml": [ + "mads" + ], + "application/marc": [ + "mrc" + ], + "application/marcxml+xml": [ + "mrcx" + ], + "application/mathematica": [ + "ma", + "nb", + "mb" + ], + "application/mathml-content+xml": [], + "application/mathml-presentation+xml": [], + "application/mathml+xml": [ + "mathml" + ], + "application/mbms-associated-procedure-description+xml": [], + "application/mbms-deregister+xml": [], + "application/mbms-envelope+xml": [], + "application/mbms-msk+xml": [], + "application/mbms-msk-response+xml": [], + "application/mbms-protection-description+xml": [], + "application/mbms-reception-report+xml": [], + "application/mbms-register+xml": [], + "application/mbms-register-response+xml": [], + "application/mbms-user-service-description+xml": [], + "application/mbox": [ + "mbox" + ], + "application/media_control+xml": [], + "application/mediaservercontrol+xml": [ + "mscml" + ], + "application/metalink+xml": [ + "metalink" + ], + "application/metalink4+xml": [ + "meta4" + ], + "application/mets+xml": [ + "mets" + ], + "application/mikey": [], + "application/mods+xml": [ + "mods" + ], + "application/moss-keys": [], + "application/moss-signature": [], + "application/mosskey-data": [], + "application/mosskey-request": [], + "application/mp21": [ + "m21", + "mp21" + ], + "application/mp4": [ + "mp4s" + ], + "application/mpeg4-generic": [], + "application/mpeg4-iod": [], + "application/mpeg4-iod-xmt": [], + "application/msc-ivr+xml": [], + "application/msc-mixer+xml": [], + "application/msword": [ + "doc", + "dot" + ], + "application/mxf": [ + "mxf" + ], + "application/nasdata": [], + "application/news-checkgroups": [], + "application/news-groupinfo": [], + "application/news-transmission": [], + "application/nss": [], + "application/ocsp-request": [], + "application/ocsp-response": [], + "application/octet-stream": [ + "bin", + "dms", + "lrf", + "mar", + "so", + "dist", + "distz", + "pkg", + "bpk", + "dump", + "elc", + "deploy" + ], + "application/oda": [ + "oda" + ], + "application/oebps-package+xml": [ + "opf" + ], + "application/ogg": [ + "ogx" + ], + "application/omdoc+xml": [ + "omdoc" + ], + "application/onenote": [ + "onetoc", + "onetoc2", + "onetmp", + "onepkg" + ], + "application/oxps": [ + "oxps" + ], + "application/parityfec": [], + "application/patch-ops-error+xml": [ + "xer" + ], + "application/pdf": [ + "pdf" + ], + "application/pgp-encrypted": [ + "pgp" + ], + "application/pgp-keys": [], + "application/pgp-signature": [ + "asc", + "sig" + ], + "application/pics-rules": [ + "prf" + ], + "application/pidf+xml": [], + "application/pidf-diff+xml": [], + "application/pkcs10": [ + "p10" + ], + "application/pkcs7-mime": [ + "p7m", + "p7c" + ], + "application/pkcs7-signature": [ + "p7s" + ], + "application/pkcs8": [ + "p8" + ], + "application/pkix-attr-cert": [ + "ac" + ], + "application/pkix-cert": [ + "cer" + ], + "application/pkix-crl": [ + "crl" + ], + "application/pkix-pkipath": [ + "pkipath" + ], + "application/pkixcmp": [ + "pki" + ], + "application/pls+xml": [ + "pls" + ], + "application/poc-settings+xml": [], + "application/postscript": [ + "ai", + "eps", + "ps" + ], + "application/prs.alvestrand.titrax-sheet": [], + "application/prs.cww": [ + "cww" + ], + "application/prs.nprend": [], + "application/prs.plucker": [], + "application/prs.rdf-xml-crypt": [], + "application/prs.xsf+xml": [], + "application/pskc+xml": [ + "pskcxml" + ], + "application/qsig": [], + "application/rdf+xml": [ + "rdf" + ], + "application/reginfo+xml": [ + "rif" + ], + "application/relax-ng-compact-syntax": [ + "rnc" + ], + "application/remote-printing": [], + "application/resource-lists+xml": [ + "rl" + ], + "application/resource-lists-diff+xml": [ + "rld" + ], + "application/riscos": [], + "application/rlmi+xml": [], + "application/rls-services+xml": [ + "rs" + ], + "application/rpki-ghostbusters": [ + "gbr" + ], + "application/rpki-manifest": [ + "mft" + ], + "application/rpki-roa": [ + "roa" + ], + "application/rpki-updown": [], + "application/rsd+xml": [ + "rsd" + ], + "application/rss+xml": [ + "rss" + ], + "application/rtf": [ + "rtf" + ], + "application/rtx": [], + "application/samlassertion+xml": [], + "application/samlmetadata+xml": [], + "application/sbml+xml": [ + "sbml" + ], + "application/scvp-cv-request": [ + "scq" + ], + "application/scvp-cv-response": [ + "scs" + ], + "application/scvp-vp-request": [ + "spq" + ], + "application/scvp-vp-response": [ + "spp" + ], + "application/sdp": [ + "sdp" + ], + "application/set-payment": [], + "application/set-payment-initiation": [ + "setpay" + ], + "application/set-registration": [], + "application/set-registration-initiation": [ + "setreg" + ], + "application/sgml": [], + "application/sgml-open-catalog": [], + "application/shf+xml": [ + "shf" + ], + "application/sieve": [], + "application/simple-filter+xml": [], + "application/simple-message-summary": [], + "application/simplesymbolcontainer": [], + "application/slate": [], + "application/smil": [], + "application/smil+xml": [ + "smi", + "smil" + ], + "application/soap+fastinfoset": [], + "application/soap+xml": [], + "application/sparql-query": [ + "rq" + ], + "application/sparql-results+xml": [ + "srx" + ], + "application/spirits-event+xml": [], + "application/srgs": [ + "gram" + ], + "application/srgs+xml": [ + "grxml" + ], + "application/sru+xml": [ + "sru" + ], + "application/ssdl+xml": [ + "ssdl" + ], + "application/ssml+xml": [ + "ssml" + ], + "application/tamp-apex-update": [], + "application/tamp-apex-update-confirm": [], + "application/tamp-community-update": [], + "application/tamp-community-update-confirm": [], + "application/tamp-error": [], + "application/tamp-sequence-adjust": [], + "application/tamp-sequence-adjust-confirm": [], + "application/tamp-status-query": [], + "application/tamp-status-response": [], + "application/tamp-update": [], + "application/tamp-update-confirm": [], + "application/tei+xml": [ + "tei", + "teicorpus" + ], + "application/thraud+xml": [ + "tfi" + ], + "application/timestamp-query": [], + "application/timestamp-reply": [], + "application/timestamped-data": [ + "tsd" + ], + "application/tve-trigger": [], + "application/ulpfec": [], + "application/vcard+xml": [], + "application/vemmi": [], + "application/vividence.scriptfile": [], + "application/vnd.3gpp.bsf+xml": [], + "application/vnd.3gpp.pic-bw-large": [ + "plb" + ], + "application/vnd.3gpp.pic-bw-small": [ + "psb" + ], + "application/vnd.3gpp.pic-bw-var": [ + "pvb" + ], + "application/vnd.3gpp.sms": [], + "application/vnd.3gpp2.bcmcsinfo+xml": [], + "application/vnd.3gpp2.sms": [], + "application/vnd.3gpp2.tcap": [ + "tcap" + ], + "application/vnd.3m.post-it-notes": [ + "pwn" + ], + "application/vnd.accpac.simply.aso": [ + "aso" + ], + "application/vnd.accpac.simply.imp": [ + "imp" + ], + "application/vnd.acucobol": [ + "acu" + ], + "application/vnd.acucorp": [ + "atc", + "acutc" + ], + "application/vnd.adobe.air-application-installer-package+zip": [ + "air" + ], + "application/vnd.adobe.formscentral.fcdt": [ + "fcdt" + ], + "application/vnd.adobe.fxp": [ + "fxp", + "fxpl" + ], + "application/vnd.adobe.partial-upload": [], + "application/vnd.adobe.xdp+xml": [ + "xdp" + ], + "application/vnd.adobe.xfdf": [ + "xfdf" + ], + "application/vnd.aether.imp": [], + "application/vnd.ah-barcode": [], + "application/vnd.ahead.space": [ + "ahead" + ], + "application/vnd.airzip.filesecure.azf": [ + "azf" + ], + "application/vnd.airzip.filesecure.azs": [ + "azs" + ], + "application/vnd.amazon.ebook": [ + "azw" + ], + "application/vnd.americandynamics.acc": [ + "acc" + ], + "application/vnd.amiga.ami": [ + "ami" + ], + "application/vnd.amundsen.maze+xml": [], + "application/vnd.android.package-archive": [ + "apk" + ], + "application/vnd.anser-web-certificate-issue-initiation": [ + "cii" + ], + "application/vnd.anser-web-funds-transfer-initiation": [ + "fti" + ], + "application/vnd.antix.game-component": [ + "atx" + ], + "application/vnd.apple.installer+xml": [ + "mpkg" + ], + "application/vnd.apple.mpegurl": [ + "m3u8" + ], + "application/vnd.arastra.swi": [], + "application/vnd.aristanetworks.swi": [ + "swi" + ], + "application/vnd.astraea-software.iota": [ + "iota" + ], + "application/vnd.audiograph": [ + "aep" + ], + "application/vnd.autopackage": [], + "application/vnd.avistar+xml": [], + "application/vnd.blueice.multipass": [ + "mpm" + ], + "application/vnd.bluetooth.ep.oob": [], + "application/vnd.bmi": [ + "bmi" + ], + "application/vnd.businessobjects": [ + "rep" + ], + "application/vnd.cab-jscript": [], + "application/vnd.canon-cpdl": [], + "application/vnd.canon-lips": [], + "application/vnd.cendio.thinlinc.clientconf": [], + "application/vnd.chemdraw+xml": [ + "cdxml" + ], + "application/vnd.chipnuts.karaoke-mmd": [ + "mmd" + ], + "application/vnd.cinderella": [ + "cdy" + ], + "application/vnd.cirpack.isdn-ext": [], + "application/vnd.claymore": [ + "cla" + ], + "application/vnd.cloanto.rp9": [ + "rp9" + ], + "application/vnd.clonk.c4group": [ + "c4g", + "c4d", + "c4f", + "c4p", + "c4u" + ], + "application/vnd.cluetrust.cartomobile-config": [ + "c11amc" + ], + "application/vnd.cluetrust.cartomobile-config-pkg": [ + "c11amz" + ], + "application/vnd.collection+json": [], + "application/vnd.commerce-battelle": [], + "application/vnd.commonspace": [ + "csp" + ], + "application/vnd.contact.cmsg": [ + "cdbcmsg" + ], + "application/vnd.cosmocaller": [ + "cmc" + ], + "application/vnd.crick.clicker": [ + "clkx" + ], + "application/vnd.crick.clicker.keyboard": [ + "clkk" + ], + "application/vnd.crick.clicker.palette": [ + "clkp" + ], + "application/vnd.crick.clicker.template": [ + "clkt" + ], + "application/vnd.crick.clicker.wordbank": [ + "clkw" + ], + "application/vnd.criticaltools.wbs+xml": [ + "wbs" + ], + "application/vnd.ctc-posml": [ + "pml" + ], + "application/vnd.ctct.ws+xml": [], + "application/vnd.cups-pdf": [], + "application/vnd.cups-postscript": [], + "application/vnd.cups-ppd": [ + "ppd" + ], + "application/vnd.cups-raster": [], + "application/vnd.cups-raw": [], + "application/vnd.curl": [], + "application/vnd.curl.car": [ + "car" + ], + "application/vnd.curl.pcurl": [ + "pcurl" + ], + "application/vnd.cybank": [], + "application/vnd.dart": [ + "dart" + ], + "application/vnd.data-vision.rdz": [ + "rdz" + ], + "application/vnd.dece.data": [ + "uvf", + "uvvf", + "uvd", + "uvvd" + ], + "application/vnd.dece.ttml+xml": [ + "uvt", + "uvvt" + ], + "application/vnd.dece.unspecified": [ + "uvx", + "uvvx" + ], + "application/vnd.dece.zip": [ + "uvz", + "uvvz" + ], + "application/vnd.denovo.fcselayout-link": [ + "fe_launch" + ], + "application/vnd.dir-bi.plate-dl-nosuffix": [], + "application/vnd.dna": [ + "dna" + ], + "application/vnd.dolby.mlp": [ + "mlp" + ], + "application/vnd.dolby.mobile.1": [], + "application/vnd.dolby.mobile.2": [], + "application/vnd.dpgraph": [ + "dpg" + ], + "application/vnd.dreamfactory": [ + "dfac" + ], + "application/vnd.ds-keypoint": [ + "kpxx" + ], + "application/vnd.dvb.ait": [ + "ait" + ], + "application/vnd.dvb.dvbj": [], + "application/vnd.dvb.esgcontainer": [], + "application/vnd.dvb.ipdcdftnotifaccess": [], + "application/vnd.dvb.ipdcesgaccess": [], + "application/vnd.dvb.ipdcesgaccess2": [], + "application/vnd.dvb.ipdcesgpdd": [], + "application/vnd.dvb.ipdcroaming": [], + "application/vnd.dvb.iptv.alfec-base": [], + "application/vnd.dvb.iptv.alfec-enhancement": [], + "application/vnd.dvb.notif-aggregate-root+xml": [], + "application/vnd.dvb.notif-container+xml": [], + "application/vnd.dvb.notif-generic+xml": [], + "application/vnd.dvb.notif-ia-msglist+xml": [], + "application/vnd.dvb.notif-ia-registration-request+xml": [], + "application/vnd.dvb.notif-ia-registration-response+xml": [], + "application/vnd.dvb.notif-init+xml": [], + "application/vnd.dvb.pfr": [], + "application/vnd.dvb.service": [ + "svc" + ], + "application/vnd.dxr": [], + "application/vnd.dynageo": [ + "geo" + ], + "application/vnd.easykaraoke.cdgdownload": [], + "application/vnd.ecdis-update": [], + "application/vnd.ecowin.chart": [ + "mag" + ], + "application/vnd.ecowin.filerequest": [], + "application/vnd.ecowin.fileupdate": [], + "application/vnd.ecowin.series": [], + "application/vnd.ecowin.seriesrequest": [], + "application/vnd.ecowin.seriesupdate": [], + "application/vnd.emclient.accessrequest+xml": [], + "application/vnd.enliven": [ + "nml" + ], + "application/vnd.eprints.data+xml": [], + "application/vnd.epson.esf": [ + "esf" + ], + "application/vnd.epson.msf": [ + "msf" + ], + "application/vnd.epson.quickanime": [ + "qam" + ], + "application/vnd.epson.salt": [ + "slt" + ], + "application/vnd.epson.ssf": [ + "ssf" + ], + "application/vnd.ericsson.quickcall": [], + "application/vnd.eszigno3+xml": [ + "es3", + "et3" + ], + "application/vnd.etsi.aoc+xml": [], + "application/vnd.etsi.cug+xml": [], + "application/vnd.etsi.iptvcommand+xml": [], + "application/vnd.etsi.iptvdiscovery+xml": [], + "application/vnd.etsi.iptvprofile+xml": [], + "application/vnd.etsi.iptvsad-bc+xml": [], + "application/vnd.etsi.iptvsad-cod+xml": [], + "application/vnd.etsi.iptvsad-npvr+xml": [], + "application/vnd.etsi.iptvservice+xml": [], + "application/vnd.etsi.iptvsync+xml": [], + "application/vnd.etsi.iptvueprofile+xml": [], + "application/vnd.etsi.mcid+xml": [], + "application/vnd.etsi.overload-control-policy-dataset+xml": [], + "application/vnd.etsi.sci+xml": [], + "application/vnd.etsi.simservs+xml": [], + "application/vnd.etsi.tsl+xml": [], + "application/vnd.etsi.tsl.der": [], + "application/vnd.eudora.data": [], + "application/vnd.ezpix-album": [ + "ez2" + ], + "application/vnd.ezpix-package": [ + "ez3" + ], + "application/vnd.f-secure.mobile": [], + "application/vnd.fdf": [ + "fdf" + ], + "application/vnd.fdsn.mseed": [ + "mseed" + ], + "application/vnd.fdsn.seed": [ + "seed", + "dataless" + ], + "application/vnd.ffsns": [], + "application/vnd.fints": [], + "application/vnd.flographit": [ + "gph" + ], + "application/vnd.fluxtime.clip": [ + "ftc" + ], + "application/vnd.font-fontforge-sfd": [], + "application/vnd.framemaker": [ + "fm", + "frame", + "maker", + "book" + ], + "application/vnd.frogans.fnc": [ + "fnc" + ], + "application/vnd.frogans.ltf": [ + "ltf" + ], + "application/vnd.fsc.weblaunch": [ + "fsc" + ], + "application/vnd.fujitsu.oasys": [ + "oas" + ], + "application/vnd.fujitsu.oasys2": [ + "oa2" + ], + "application/vnd.fujitsu.oasys3": [ + "oa3" + ], + "application/vnd.fujitsu.oasysgp": [ + "fg5" + ], + "application/vnd.fujitsu.oasysprs": [ + "bh2" + ], + "application/vnd.fujixerox.art-ex": [], + "application/vnd.fujixerox.art4": [], + "application/vnd.fujixerox.hbpl": [], + "application/vnd.fujixerox.ddd": [ + "ddd" + ], + "application/vnd.fujixerox.docuworks": [ + "xdw" + ], + "application/vnd.fujixerox.docuworks.binder": [ + "xbd" + ], + "application/vnd.fut-misnet": [], + "application/vnd.fuzzysheet": [ + "fzs" + ], + "application/vnd.genomatix.tuxedo": [ + "txd" + ], + "application/vnd.geocube+xml": [], + "application/vnd.geogebra.file": [ + "ggb" + ], + "application/vnd.geogebra.tool": [ + "ggt" + ], + "application/vnd.geometry-explorer": [ + "gex", + "gre" + ], + "application/vnd.geonext": [ + "gxt" + ], + "application/vnd.geoplan": [ + "g2w" + ], + "application/vnd.geospace": [ + "g3w" + ], + "application/vnd.globalplatform.card-content-mgt": [], + "application/vnd.globalplatform.card-content-mgt-response": [], + "application/vnd.gmx": [ + "gmx" + ], + "application/vnd.google-earth.kml+xml": [ + "kml" + ], + "application/vnd.google-earth.kmz": [ + "kmz" + ], + "application/vnd.grafeq": [ + "gqf", + "gqs" + ], + "application/vnd.gridmp": [], + "application/vnd.groove-account": [ + "gac" + ], + "application/vnd.groove-help": [ + "ghf" + ], + "application/vnd.groove-identity-message": [ + "gim" + ], + "application/vnd.groove-injector": [ + "grv" + ], + "application/vnd.groove-tool-message": [ + "gtm" + ], + "application/vnd.groove-tool-template": [ + "tpl" + ], + "application/vnd.groove-vcard": [ + "vcg" + ], + "application/vnd.hal+json": [], + "application/vnd.hal+xml": [ + "hal" + ], + "application/vnd.handheld-entertainment+xml": [ + "zmm" + ], + "application/vnd.hbci": [ + "hbci" + ], + "application/vnd.hcl-bireports": [], + "application/vnd.hhe.lesson-player": [ + "les" + ], + "application/vnd.hp-hpgl": [ + "hpgl" + ], + "application/vnd.hp-hpid": [ + "hpid" + ], + "application/vnd.hp-hps": [ + "hps" + ], + "application/vnd.hp-jlyt": [ + "jlt" + ], + "application/vnd.hp-pcl": [ + "pcl" + ], + "application/vnd.hp-pclxl": [ + "pclxl" + ], + "application/vnd.httphone": [], + "application/vnd.hzn-3d-crossword": [], + "application/vnd.ibm.afplinedata": [], + "application/vnd.ibm.electronic-media": [], + "application/vnd.ibm.minipay": [ + "mpy" + ], + "application/vnd.ibm.modcap": [ + "afp", + "listafp", + "list3820" + ], + "application/vnd.ibm.rights-management": [ + "irm" + ], + "application/vnd.ibm.secure-container": [ + "sc" + ], + "application/vnd.iccprofile": [ + "icc", + "icm" + ], + "application/vnd.igloader": [ + "igl" + ], + "application/vnd.immervision-ivp": [ + "ivp" + ], + "application/vnd.immervision-ivu": [ + "ivu" + ], + "application/vnd.informedcontrol.rms+xml": [], + "application/vnd.informix-visionary": [], + "application/vnd.infotech.project": [], + "application/vnd.infotech.project+xml": [], + "application/vnd.innopath.wamp.notification": [], + "application/vnd.insors.igm": [ + "igm" + ], + "application/vnd.intercon.formnet": [ + "xpw", + "xpx" + ], + "application/vnd.intergeo": [ + "i2g" + ], + "application/vnd.intertrust.digibox": [], + "application/vnd.intertrust.nncp": [], + "application/vnd.intu.qbo": [ + "qbo" + ], + "application/vnd.intu.qfx": [ + "qfx" + ], + "application/vnd.iptc.g2.conceptitem+xml": [], + "application/vnd.iptc.g2.knowledgeitem+xml": [], + "application/vnd.iptc.g2.newsitem+xml": [], + "application/vnd.iptc.g2.newsmessage+xml": [], + "application/vnd.iptc.g2.packageitem+xml": [], + "application/vnd.iptc.g2.planningitem+xml": [], + "application/vnd.ipunplugged.rcprofile": [ + "rcprofile" + ], + "application/vnd.irepository.package+xml": [ + "irp" + ], + "application/vnd.is-xpr": [ + "xpr" + ], + "application/vnd.isac.fcs": [ + "fcs" + ], + "application/vnd.jam": [ + "jam" + ], + "application/vnd.japannet-directory-service": [], + "application/vnd.japannet-jpnstore-wakeup": [], + "application/vnd.japannet-payment-wakeup": [], + "application/vnd.japannet-registration": [], + "application/vnd.japannet-registration-wakeup": [], + "application/vnd.japannet-setstore-wakeup": [], + "application/vnd.japannet-verification": [], + "application/vnd.japannet-verification-wakeup": [], + "application/vnd.jcp.javame.midlet-rms": [ + "rms" + ], + "application/vnd.jisp": [ + "jisp" + ], + "application/vnd.joost.joda-archive": [ + "joda" + ], + "application/vnd.kahootz": [ + "ktz", + "ktr" + ], + "application/vnd.kde.karbon": [ + "karbon" + ], + "application/vnd.kde.kchart": [ + "chrt" + ], + "application/vnd.kde.kformula": [ + "kfo" + ], + "application/vnd.kde.kivio": [ + "flw" + ], + "application/vnd.kde.kontour": [ + "kon" + ], + "application/vnd.kde.kpresenter": [ + "kpr", + "kpt" + ], + "application/vnd.kde.kspread": [ + "ksp" + ], + "application/vnd.kde.kword": [ + "kwd", + "kwt" + ], + "application/vnd.kenameaapp": [ + "htke" + ], + "application/vnd.kidspiration": [ + "kia" + ], + "application/vnd.kinar": [ + "kne", + "knp" + ], + "application/vnd.koan": [ + "skp", + "skd", + "skt", + "skm" + ], + "application/vnd.kodak-descriptor": [ + "sse" + ], + "application/vnd.las.las+xml": [ + "lasxml" + ], + "application/vnd.liberty-request+xml": [], + "application/vnd.llamagraphics.life-balance.desktop": [ + "lbd" + ], + "application/vnd.llamagraphics.life-balance.exchange+xml": [ + "lbe" + ], + "application/vnd.lotus-1-2-3": [ + "123" + ], + "application/vnd.lotus-approach": [ + "apr" + ], + "application/vnd.lotus-freelance": [ + "pre" + ], + "application/vnd.lotus-notes": [ + "nsf" + ], + "application/vnd.lotus-organizer": [ + "org" + ], + "application/vnd.lotus-screencam": [ + "scm" + ], + "application/vnd.lotus-wordpro": [ + "lwp" + ], + "application/vnd.macports.portpkg": [ + "portpkg" + ], + "application/vnd.marlin.drm.actiontoken+xml": [], + "application/vnd.marlin.drm.conftoken+xml": [], + "application/vnd.marlin.drm.license+xml": [], + "application/vnd.marlin.drm.mdcf": [], + "application/vnd.mcd": [ + "mcd" + ], + "application/vnd.medcalcdata": [ + "mc1" + ], + "application/vnd.mediastation.cdkey": [ + "cdkey" + ], + "application/vnd.meridian-slingshot": [], + "application/vnd.mfer": [ + "mwf" + ], + "application/vnd.mfmp": [ + "mfm" + ], + "application/vnd.micrografx.flo": [ + "flo" + ], + "application/vnd.micrografx.igx": [ + "igx" + ], + "application/vnd.mif": [ + "mif" + ], + "application/vnd.minisoft-hp3000-save": [], + "application/vnd.mitsubishi.misty-guard.trustweb": [], + "application/vnd.mobius.daf": [ + "daf" + ], + "application/vnd.mobius.dis": [ + "dis" + ], + "application/vnd.mobius.mbk": [ + "mbk" + ], + "application/vnd.mobius.mqy": [ + "mqy" + ], + "application/vnd.mobius.msl": [ + "msl" + ], + "application/vnd.mobius.plc": [ + "plc" + ], + "application/vnd.mobius.txf": [ + "txf" + ], + "application/vnd.mophun.application": [ + "mpn" + ], + "application/vnd.mophun.certificate": [ + "mpc" + ], + "application/vnd.motorola.flexsuite": [], + "application/vnd.motorola.flexsuite.adsi": [], + "application/vnd.motorola.flexsuite.fis": [], + "application/vnd.motorola.flexsuite.gotap": [], + "application/vnd.motorola.flexsuite.kmr": [], + "application/vnd.motorola.flexsuite.ttc": [], + "application/vnd.motorola.flexsuite.wem": [], + "application/vnd.motorola.iprm": [], + "application/vnd.mozilla.xul+xml": [ + "xul" + ], + "application/vnd.ms-artgalry": [ + "cil" + ], + "application/vnd.ms-asf": [], + "application/vnd.ms-cab-compressed": [ + "cab" + ], + "application/vnd.ms-color.iccprofile": [], + "application/vnd.ms-excel": [ + "xls", + "xlm", + "xla", + "xlc", + "xlt", + "xlw" + ], + "application/vnd.ms-excel.addin.macroenabled.12": [ + "xlam" + ], + "application/vnd.ms-excel.sheet.binary.macroenabled.12": [ + "xlsb" + ], + "application/vnd.ms-excel.sheet.macroenabled.12": [ + "xlsm" + ], + "application/vnd.ms-excel.template.macroenabled.12": [ + "xltm" + ], + "application/vnd.ms-fontobject": [ + "eot" + ], + "application/vnd.ms-htmlhelp": [ + "chm" + ], + "application/vnd.ms-ims": [ + "ims" + ], + "application/vnd.ms-lrm": [ + "lrm" + ], + "application/vnd.ms-office.activex+xml": [], + "application/vnd.ms-officetheme": [ + "thmx" + ], + "application/vnd.ms-opentype": [], + "application/vnd.ms-package.obfuscated-opentype": [], + "application/vnd.ms-pki.seccat": [ + "cat" + ], + "application/vnd.ms-pki.stl": [ + "stl" + ], + "application/vnd.ms-playready.initiator+xml": [], + "application/vnd.ms-powerpoint": [ + "ppt", + "pps", + "pot" + ], + "application/vnd.ms-powerpoint.addin.macroenabled.12": [ + "ppam" + ], + "application/vnd.ms-powerpoint.presentation.macroenabled.12": [ + "pptm" + ], + "application/vnd.ms-powerpoint.slide.macroenabled.12": [ + "sldm" + ], + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": [ + "ppsm" + ], + "application/vnd.ms-powerpoint.template.macroenabled.12": [ + "potm" + ], + "application/vnd.ms-printing.printticket+xml": [], + "application/vnd.ms-project": [ + "mpp", + "mpt" + ], + "application/vnd.ms-tnef": [], + "application/vnd.ms-wmdrm.lic-chlg-req": [], + "application/vnd.ms-wmdrm.lic-resp": [], + "application/vnd.ms-wmdrm.meter-chlg-req": [], + "application/vnd.ms-wmdrm.meter-resp": [], + "application/vnd.ms-word.document.macroenabled.12": [ + "docm" + ], + "application/vnd.ms-word.template.macroenabled.12": [ + "dotm" + ], + "application/vnd.ms-works": [ + "wps", + "wks", + "wcm", + "wdb" + ], + "application/vnd.ms-wpl": [ + "wpl" + ], + "application/vnd.ms-xpsdocument": [ + "xps" + ], + "application/vnd.mseq": [ + "mseq" + ], + "application/vnd.msign": [], + "application/vnd.multiad.creator": [], + "application/vnd.multiad.creator.cif": [], + "application/vnd.music-niff": [], + "application/vnd.musician": [ + "mus" + ], + "application/vnd.muvee.style": [ + "msty" + ], + "application/vnd.mynfc": [ + "taglet" + ], + "application/vnd.ncd.control": [], + "application/vnd.ncd.reference": [], + "application/vnd.nervana": [], + "application/vnd.netfpx": [], + "application/vnd.neurolanguage.nlu": [ + "nlu" + ], + "application/vnd.nitf": [ + "ntf", + "nitf" + ], + "application/vnd.noblenet-directory": [ + "nnd" + ], + "application/vnd.noblenet-sealer": [ + "nns" + ], + "application/vnd.noblenet-web": [ + "nnw" + ], + "application/vnd.nokia.catalogs": [], + "application/vnd.nokia.conml+wbxml": [], + "application/vnd.nokia.conml+xml": [], + "application/vnd.nokia.isds-radio-presets": [], + "application/vnd.nokia.iptv.config+xml": [], + "application/vnd.nokia.landmark+wbxml": [], + "application/vnd.nokia.landmark+xml": [], + "application/vnd.nokia.landmarkcollection+xml": [], + "application/vnd.nokia.n-gage.ac+xml": [], + "application/vnd.nokia.n-gage.data": [ + "ngdat" + ], + "application/vnd.nokia.ncd": [], + "application/vnd.nokia.pcd+wbxml": [], + "application/vnd.nokia.pcd+xml": [], + "application/vnd.nokia.radio-preset": [ + "rpst" + ], + "application/vnd.nokia.radio-presets": [ + "rpss" + ], + "application/vnd.novadigm.edm": [ + "edm" + ], + "application/vnd.novadigm.edx": [ + "edx" + ], + "application/vnd.novadigm.ext": [ + "ext" + ], + "application/vnd.ntt-local.file-transfer": [], + "application/vnd.ntt-local.sip-ta_remote": [], + "application/vnd.ntt-local.sip-ta_tcp_stream": [], + "application/vnd.oasis.opendocument.chart": [ + "odc" + ], + "application/vnd.oasis.opendocument.chart-template": [ + "otc" + ], + "application/vnd.oasis.opendocument.database": [ + "odb" + ], + "application/vnd.oasis.opendocument.formula": [ + "odf" + ], + "application/vnd.oasis.opendocument.formula-template": [ + "odft" + ], + "application/vnd.oasis.opendocument.graphics": [ + "odg" + ], + "application/vnd.oasis.opendocument.graphics-template": [ + "otg" + ], + "application/vnd.oasis.opendocument.image": [ + "odi" + ], + "application/vnd.oasis.opendocument.image-template": [ + "oti" + ], + "application/vnd.oasis.opendocument.presentation": [ + "odp" + ], + "application/vnd.oasis.opendocument.presentation-template": [ + "otp" + ], + "application/vnd.oasis.opendocument.spreadsheet": [ + "ods" + ], + "application/vnd.oasis.opendocument.spreadsheet-template": [ + "ots" + ], + "application/vnd.oasis.opendocument.text": [ + "odt" + ], + "application/vnd.oasis.opendocument.text-master": [ + "odm" + ], + "application/vnd.oasis.opendocument.text-template": [ + "ott" + ], + "application/vnd.oasis.opendocument.text-web": [ + "oth" + ], + "application/vnd.obn": [], + "application/vnd.oftn.l10n+json": [], + "application/vnd.oipf.contentaccessdownload+xml": [], + "application/vnd.oipf.contentaccessstreaming+xml": [], + "application/vnd.oipf.cspg-hexbinary": [], + "application/vnd.oipf.dae.svg+xml": [], + "application/vnd.oipf.dae.xhtml+xml": [], + "application/vnd.oipf.mippvcontrolmessage+xml": [], + "application/vnd.oipf.pae.gem": [], + "application/vnd.oipf.spdiscovery+xml": [], + "application/vnd.oipf.spdlist+xml": [], + "application/vnd.oipf.ueprofile+xml": [], + "application/vnd.oipf.userprofile+xml": [], + "application/vnd.olpc-sugar": [ + "xo" + ], + "application/vnd.oma-scws-config": [], + "application/vnd.oma-scws-http-request": [], + "application/vnd.oma-scws-http-response": [], + "application/vnd.oma.bcast.associated-procedure-parameter+xml": [], + "application/vnd.oma.bcast.drm-trigger+xml": [], + "application/vnd.oma.bcast.imd+xml": [], + "application/vnd.oma.bcast.ltkm": [], + "application/vnd.oma.bcast.notification+xml": [], + "application/vnd.oma.bcast.provisioningtrigger": [], + "application/vnd.oma.bcast.sgboot": [], + "application/vnd.oma.bcast.sgdd+xml": [], + "application/vnd.oma.bcast.sgdu": [], + "application/vnd.oma.bcast.simple-symbol-container": [], + "application/vnd.oma.bcast.smartcard-trigger+xml": [], + "application/vnd.oma.bcast.sprov+xml": [], + "application/vnd.oma.bcast.stkm": [], + "application/vnd.oma.cab-address-book+xml": [], + "application/vnd.oma.cab-feature-handler+xml": [], + "application/vnd.oma.cab-pcc+xml": [], + "application/vnd.oma.cab-user-prefs+xml": [], + "application/vnd.oma.dcd": [], + "application/vnd.oma.dcdc": [], + "application/vnd.oma.dd2+xml": [ + "dd2" + ], + "application/vnd.oma.drm.risd+xml": [], + "application/vnd.oma.group-usage-list+xml": [], + "application/vnd.oma.pal+xml": [], + "application/vnd.oma.poc.detailed-progress-report+xml": [], + "application/vnd.oma.poc.final-report+xml": [], + "application/vnd.oma.poc.groups+xml": [], + "application/vnd.oma.poc.invocation-descriptor+xml": [], + "application/vnd.oma.poc.optimized-progress-report+xml": [], + "application/vnd.oma.push": [], + "application/vnd.oma.scidm.messages+xml": [], + "application/vnd.oma.xcap-directory+xml": [], + "application/vnd.omads-email+xml": [], + "application/vnd.omads-file+xml": [], + "application/vnd.omads-folder+xml": [], + "application/vnd.omaloc-supl-init": [], + "application/vnd.openofficeorg.extension": [ + "oxt" + ], + "application/vnd.openxmlformats-officedocument.custom-properties+xml": [], + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": [], + "application/vnd.openxmlformats-officedocument.drawing+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": [], + "application/vnd.openxmlformats-officedocument.extended-properties+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.presentation": [ + "pptx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slide": [ + "sldx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": [ + "ppsx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.template": [ + "potx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": [ + "xlsx" + ], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": [ + "xltx" + ], + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": [], + "application/vnd.openxmlformats-officedocument.theme+xml": [], + "application/vnd.openxmlformats-officedocument.themeoverride+xml": [], + "application/vnd.openxmlformats-officedocument.vmldrawing": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": [ + "docx" + ], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": [ + "dotx" + ], + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": [], + "application/vnd.openxmlformats-package.core-properties+xml": [], + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": [], + "application/vnd.openxmlformats-package.relationships+xml": [], + "application/vnd.quobject-quoxdocument": [], + "application/vnd.osa.netdeploy": [], + "application/vnd.osgeo.mapguide.package": [ + "mgp" + ], + "application/vnd.osgi.bundle": [], + "application/vnd.osgi.dp": [ + "dp" + ], + "application/vnd.osgi.subsystem": [ + "esa" + ], + "application/vnd.otps.ct-kip+xml": [], + "application/vnd.palm": [ + "pdb", + "pqa", + "oprc" + ], + "application/vnd.paos.xml": [], + "application/vnd.pawaafile": [ + "paw" + ], + "application/vnd.pg.format": [ + "str" + ], + "application/vnd.pg.osasli": [ + "ei6" + ], + "application/vnd.piaccess.application-licence": [], + "application/vnd.picsel": [ + "efif" + ], + "application/vnd.pmi.widget": [ + "wg" + ], + "application/vnd.poc.group-advertisement+xml": [], + "application/vnd.pocketlearn": [ + "plf" + ], + "application/vnd.powerbuilder6": [ + "pbd" + ], + "application/vnd.powerbuilder6-s": [], + "application/vnd.powerbuilder7": [], + "application/vnd.powerbuilder7-s": [], + "application/vnd.powerbuilder75": [], + "application/vnd.powerbuilder75-s": [], + "application/vnd.preminet": [], + "application/vnd.previewsystems.box": [ + "box" + ], + "application/vnd.proteus.magazine": [ + "mgz" + ], + "application/vnd.publishare-delta-tree": [ + "qps" + ], + "application/vnd.pvi.ptid1": [ + "ptid" + ], + "application/vnd.pwg-multiplexed": [], + "application/vnd.pwg-xhtml-print+xml": [], + "application/vnd.qualcomm.brew-app-res": [], + "application/vnd.quark.quarkxpress": [ + "qxd", + "qxt", + "qwd", + "qwt", + "qxl", + "qxb" + ], + "application/vnd.radisys.moml+xml": [], + "application/vnd.radisys.msml+xml": [], + "application/vnd.radisys.msml-audit+xml": [], + "application/vnd.radisys.msml-audit-conf+xml": [], + "application/vnd.radisys.msml-audit-conn+xml": [], + "application/vnd.radisys.msml-audit-dialog+xml": [], + "application/vnd.radisys.msml-audit-stream+xml": [], + "application/vnd.radisys.msml-conf+xml": [], + "application/vnd.radisys.msml-dialog+xml": [], + "application/vnd.radisys.msml-dialog-base+xml": [], + "application/vnd.radisys.msml-dialog-fax-detect+xml": [], + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": [], + "application/vnd.radisys.msml-dialog-group+xml": [], + "application/vnd.radisys.msml-dialog-speech+xml": [], + "application/vnd.radisys.msml-dialog-transform+xml": [], + "application/vnd.rainstor.data": [], + "application/vnd.rapid": [], + "application/vnd.realvnc.bed": [ + "bed" + ], + "application/vnd.recordare.musicxml": [ + "mxl" + ], + "application/vnd.recordare.musicxml+xml": [ + "musicxml" + ], + "application/vnd.renlearn.rlprint": [], + "application/vnd.rig.cryptonote": [ + "cryptonote" + ], + "application/vnd.rim.cod": [ + "cod" + ], + "application/vnd.rn-realmedia": [ + "rm" + ], + "application/vnd.rn-realmedia-vbr": [ + "rmvb" + ], + "application/vnd.route66.link66+xml": [ + "link66" + ], + "application/vnd.rs-274x": [], + "application/vnd.ruckus.download": [], + "application/vnd.s3sms": [], + "application/vnd.sailingtracker.track": [ + "st" + ], + "application/vnd.sbm.cid": [], + "application/vnd.sbm.mid2": [], + "application/vnd.scribus": [], + "application/vnd.sealed.3df": [], + "application/vnd.sealed.csf": [], + "application/vnd.sealed.doc": [], + "application/vnd.sealed.eml": [], + "application/vnd.sealed.mht": [], + "application/vnd.sealed.net": [], + "application/vnd.sealed.ppt": [], + "application/vnd.sealed.tiff": [], + "application/vnd.sealed.xls": [], + "application/vnd.sealedmedia.softseal.html": [], + "application/vnd.sealedmedia.softseal.pdf": [], + "application/vnd.seemail": [ + "see" + ], + "application/vnd.sema": [ + "sema" + ], + "application/vnd.semd": [ + "semd" + ], + "application/vnd.semf": [ + "semf" + ], + "application/vnd.shana.informed.formdata": [ + "ifm" + ], + "application/vnd.shana.informed.formtemplate": [ + "itp" + ], + "application/vnd.shana.informed.interchange": [ + "iif" + ], + "application/vnd.shana.informed.package": [ + "ipk" + ], + "application/vnd.simtech-mindmapper": [ + "twd", + "twds" + ], + "application/vnd.smaf": [ + "mmf" + ], + "application/vnd.smart.notebook": [], + "application/vnd.smart.teacher": [ + "teacher" + ], + "application/vnd.software602.filler.form+xml": [], + "application/vnd.software602.filler.form-xml-zip": [], + "application/vnd.solent.sdkm+xml": [ + "sdkm", + "sdkd" + ], + "application/vnd.spotfire.dxp": [ + "dxp" + ], + "application/vnd.spotfire.sfs": [ + "sfs" + ], + "application/vnd.sss-cod": [], + "application/vnd.sss-dtf": [], + "application/vnd.sss-ntf": [], + "application/vnd.stardivision.calc": [ + "sdc" + ], + "application/vnd.stardivision.draw": [ + "sda" + ], + "application/vnd.stardivision.impress": [ + "sdd" + ], + "application/vnd.stardivision.math": [ + "smf" + ], + "application/vnd.stardivision.writer": [ + "sdw", + "vor" + ], + "application/vnd.stardivision.writer-global": [ + "sgl" + ], + "application/vnd.stepmania.package": [ + "smzip" + ], + "application/vnd.stepmania.stepchart": [ + "sm" + ], + "application/vnd.street-stream": [], + "application/vnd.sun.xml.calc": [ + "sxc" + ], + "application/vnd.sun.xml.calc.template": [ + "stc" + ], + "application/vnd.sun.xml.draw": [ + "sxd" + ], + "application/vnd.sun.xml.draw.template": [ + "std" + ], + "application/vnd.sun.xml.impress": [ + "sxi" + ], + "application/vnd.sun.xml.impress.template": [ + "sti" + ], + "application/vnd.sun.xml.math": [ + "sxm" + ], + "application/vnd.sun.xml.writer": [ + "sxw" + ], + "application/vnd.sun.xml.writer.global": [ + "sxg" + ], + "application/vnd.sun.xml.writer.template": [ + "stw" + ], + "application/vnd.sun.wadl+xml": [], + "application/vnd.sus-calendar": [ + "sus", + "susp" + ], + "application/vnd.svd": [ + "svd" + ], + "application/vnd.swiftview-ics": [], + "application/vnd.symbian.install": [ + "sis", + "sisx" + ], + "application/vnd.syncml+xml": [ + "xsm" + ], + "application/vnd.syncml.dm+wbxml": [ + "bdm" + ], + "application/vnd.syncml.dm+xml": [ + "xdm" + ], + "application/vnd.syncml.dm.notification": [], + "application/vnd.syncml.ds.notification": [], + "application/vnd.tao.intent-module-archive": [ + "tao" + ], + "application/vnd.tcpdump.pcap": [ + "pcap", + "cap", + "dmp" + ], + "application/vnd.tmobile-livetv": [ + "tmo" + ], + "application/vnd.trid.tpt": [ + "tpt" + ], + "application/vnd.triscape.mxs": [ + "mxs" + ], + "application/vnd.trueapp": [ + "tra" + ], + "application/vnd.truedoc": [], + "application/vnd.ubisoft.webplayer": [], + "application/vnd.ufdl": [ + "ufd", + "ufdl" + ], + "application/vnd.uiq.theme": [ + "utz" + ], + "application/vnd.umajin": [ + "umj" + ], + "application/vnd.unity": [ + "unityweb" + ], + "application/vnd.uoml+xml": [ + "uoml" + ], + "application/vnd.uplanet.alert": [], + "application/vnd.uplanet.alert-wbxml": [], + "application/vnd.uplanet.bearer-choice": [], + "application/vnd.uplanet.bearer-choice-wbxml": [], + "application/vnd.uplanet.cacheop": [], + "application/vnd.uplanet.cacheop-wbxml": [], + "application/vnd.uplanet.channel": [], + "application/vnd.uplanet.channel-wbxml": [], + "application/vnd.uplanet.list": [], + "application/vnd.uplanet.list-wbxml": [], + "application/vnd.uplanet.listcmd": [], + "application/vnd.uplanet.listcmd-wbxml": [], + "application/vnd.uplanet.signal": [], + "application/vnd.vcx": [ + "vcx" + ], + "application/vnd.vd-study": [], + "application/vnd.vectorworks": [], + "application/vnd.verimatrix.vcas": [], + "application/vnd.vidsoft.vidconference": [], + "application/vnd.visio": [ + "vsd", + "vst", + "vss", + "vsw" + ], + "application/vnd.visionary": [ + "vis" + ], + "application/vnd.vividence.scriptfile": [], + "application/vnd.vsf": [ + "vsf" + ], + "application/vnd.wap.sic": [], + "application/vnd.wap.slc": [], + "application/vnd.wap.wbxml": [ + "wbxml" + ], + "application/vnd.wap.wmlc": [ + "wmlc" + ], + "application/vnd.wap.wmlscriptc": [ + "wmlsc" + ], + "application/vnd.webturbo": [ + "wtb" + ], + "application/vnd.wfa.wsc": [], + "application/vnd.wmc": [], + "application/vnd.wmf.bootstrap": [], + "application/vnd.wolfram.mathematica": [], + "application/vnd.wolfram.mathematica.package": [], + "application/vnd.wolfram.player": [ + "nbp" + ], + "application/vnd.wordperfect": [ + "wpd" + ], + "application/vnd.wqd": [ + "wqd" + ], + "application/vnd.wrq-hp3000-labelled": [], + "application/vnd.wt.stf": [ + "stf" + ], + "application/vnd.wv.csp+wbxml": [], + "application/vnd.wv.csp+xml": [], + "application/vnd.wv.ssp+xml": [], + "application/vnd.xara": [ + "xar" + ], + "application/vnd.xfdl": [ + "xfdl" + ], + "application/vnd.xfdl.webform": [], + "application/vnd.xmi+xml": [], + "application/vnd.xmpie.cpkg": [], + "application/vnd.xmpie.dpkg": [], + "application/vnd.xmpie.plan": [], + "application/vnd.xmpie.ppkg": [], + "application/vnd.xmpie.xlim": [], + "application/vnd.yamaha.hv-dic": [ + "hvd" + ], + "application/vnd.yamaha.hv-script": [ + "hvs" + ], + "application/vnd.yamaha.hv-voice": [ + "hvp" + ], + "application/vnd.yamaha.openscoreformat": [ + "osf" + ], + "application/vnd.yamaha.openscoreformat.osfpvg+xml": [ + "osfpvg" + ], + "application/vnd.yamaha.remote-setup": [], + "application/vnd.yamaha.smaf-audio": [ + "saf" + ], + "application/vnd.yamaha.smaf-phrase": [ + "spf" + ], + "application/vnd.yamaha.through-ngn": [], + "application/vnd.yamaha.tunnel-udpencap": [], + "application/vnd.yellowriver-custom-menu": [ + "cmp" + ], + "application/vnd.zul": [ + "zir", + "zirz" + ], + "application/vnd.zzazz.deck+xml": [ + "zaz" + ], + "application/voicexml+xml": [ + "vxml" + ], + "application/vq-rtcpxr": [], + "application/watcherinfo+xml": [], + "application/whoispp-query": [], + "application/whoispp-response": [], + "application/widget": [ + "wgt" + ], + "application/winhlp": [ + "hlp" + ], + "application/wita": [], + "application/wordperfect5.1": [], + "application/wsdl+xml": [ + "wsdl" + ], + "application/wspolicy+xml": [ + "wspolicy" + ], + "application/x-7z-compressed": [ + "7z" + ], + "application/x-abiword": [ + "abw" + ], + "application/x-ace-compressed": [ + "ace" + ], + "application/x-amf": [], + "application/x-apple-diskimage": [ + "dmg" + ], + "application/x-authorware-bin": [ + "aab", + "x32", + "u32", + "vox" + ], + "application/x-authorware-map": [ + "aam" + ], + "application/x-authorware-seg": [ + "aas" + ], + "application/x-bcpio": [ + "bcpio" + ], + "application/x-bittorrent": [ + "torrent" + ], + "application/x-blorb": [ + "blb", + "blorb" + ], + "application/x-bzip": [ + "bz" + ], + "application/x-bzip2": [ + "bz2", + "boz" + ], + "application/x-cbr": [ + "cbr", + "cba", + "cbt", + "cbz", + "cb7" + ], + "application/x-cdlink": [ + "vcd" + ], + "application/x-cfs-compressed": [ + "cfs" + ], + "application/x-chat": [ + "chat" + ], + "application/x-chess-pgn": [ + "pgn" + ], + "application/x-conference": [ + "nsc" + ], + "application/x-compress": [], + "application/x-cpio": [ + "cpio" + ], + "application/x-csh": [ + "csh" + ], + "application/x-debian-package": [ + "deb", + "udeb" + ], + "application/x-dgc-compressed": [ + "dgc" + ], + "application/x-director": [ + "dir", + "dcr", + "dxr", + "cst", + "cct", + "cxt", + "w3d", + "fgd", + "swa" + ], + "application/x-doom": [ + "wad" + ], + "application/x-dtbncx+xml": [ + "ncx" + ], + "application/x-dtbook+xml": [ + "dtb" + ], + "application/x-dtbresource+xml": [ + "res" + ], + "application/x-dvi": [ + "dvi" + ], + "application/x-envoy": [ + "evy" + ], + "application/x-eva": [ + "eva" + ], + "application/x-font-bdf": [ + "bdf" + ], + "application/x-font-dos": [], + "application/x-font-framemaker": [], + "application/x-font-ghostscript": [ + "gsf" + ], + "application/x-font-libgrx": [], + "application/x-font-linux-psf": [ + "psf" + ], + "application/x-font-otf": [ + "otf" + ], + "application/x-font-pcf": [ + "pcf" + ], + "application/x-font-snf": [ + "snf" + ], + "application/x-font-speedo": [], + "application/x-font-sunos-news": [], + "application/x-font-ttf": [ + "ttf", + "ttc" + ], + "application/x-font-type1": [ + "pfa", + "pfb", + "pfm", + "afm" + ], + "application/font-woff": [ + "woff" + ], + "application/x-font-vfont": [], + "application/x-freearc": [ + "arc" + ], + "application/x-futuresplash": [ + "spl" + ], + "application/x-gca-compressed": [ + "gca" + ], + "application/x-glulx": [ + "ulx" + ], + "application/x-gnumeric": [ + "gnumeric" + ], + "application/x-gramps-xml": [ + "gramps" + ], + "application/x-gtar": [ + "gtar" + ], + "application/x-gzip": [], + "application/x-hdf": [ + "hdf" + ], + "application/x-install-instructions": [ + "install" + ], + "application/x-iso9660-image": [ + "iso" + ], + "application/x-java-jnlp-file": [ + "jnlp" + ], + "application/x-latex": [ + "latex" + ], + "application/x-lzh-compressed": [ + "lzh", + "lha" + ], + "application/x-mie": [ + "mie" + ], + "application/x-mobipocket-ebook": [ + "prc", + "mobi" + ], + "application/x-ms-application": [ + "application" + ], + "application/x-ms-shortcut": [ + "lnk" + ], + "application/x-ms-wmd": [ + "wmd" + ], + "application/x-ms-wmz": [ + "wmz" + ], + "application/x-ms-xbap": [ + "xbap" + ], + "application/x-msaccess": [ + "mdb" + ], + "application/x-msbinder": [ + "obd" + ], + "application/x-mscardfile": [ + "crd" + ], + "application/x-msclip": [ + "clp" + ], + "application/x-msdownload": [ + "exe", + "dll", + "com", + "bat", + "msi" + ], + "application/x-msmediaview": [ + "mvb", + "m13", + "m14" + ], + "application/x-msmetafile": [ + "wmf", + "wmz", + "emf", + "emz" + ], + "application/x-msmoney": [ + "mny" + ], + "application/x-mspublisher": [ + "pub" + ], + "application/x-msschedule": [ + "scd" + ], + "application/x-msterminal": [ + "trm" + ], + "application/x-mswrite": [ + "wri" + ], + "application/x-netcdf": [ + "nc", + "cdf" + ], + "application/x-nzb": [ + "nzb" + ], + "application/x-pkcs12": [ + "p12", + "pfx" + ], + "application/x-pkcs7-certificates": [ + "p7b", + "spc" + ], + "application/x-pkcs7-certreqresp": [ + "p7r" + ], + "application/x-rar-compressed": [ + "rar" + ], + "application/x-research-info-systems": [ + "ris" + ], + "application/x-sh": [ + "sh" + ], + "application/x-shar": [ + "shar" + ], + "application/x-shockwave-flash": [ + "swf" + ], + "application/x-silverlight-app": [ + "xap" + ], + "application/x-sql": [ + "sql" + ], + "application/x-stuffit": [ + "sit" + ], + "application/x-stuffitx": [ + "sitx" + ], + "application/x-subrip": [ + "srt" + ], + "application/x-sv4cpio": [ + "sv4cpio" + ], + "application/x-sv4crc": [ + "sv4crc" + ], + "application/x-t3vm-image": [ + "t3" + ], + "application/x-tads": [ + "gam" + ], + "application/x-tar": [ + "tar" + ], + "application/x-tcl": [ + "tcl" + ], + "application/x-tex": [ + "tex" + ], + "application/x-tex-tfm": [ + "tfm" + ], + "application/x-texinfo": [ + "texinfo", + "texi" + ], + "application/x-tgif": [ + "obj" + ], + "application/x-ustar": [ + "ustar" + ], + "application/x-wais-source": [ + "src" + ], + "application/x-x509-ca-cert": [ + "der", + "crt" + ], + "application/x-xfig": [ + "fig" + ], + "application/x-xliff+xml": [ + "xlf" + ], + "application/x-xpinstall": [ + "xpi" + ], + "application/x-xz": [ + "xz" + ], + "application/x-zmachine": [ + "z1", + "z2", + "z3", + "z4", + "z5", + "z6", + "z7", + "z8" + ], + "application/x400-bp": [], + "application/xaml+xml": [ + "xaml" + ], + "application/xcap-att+xml": [], + "application/xcap-caps+xml": [], + "application/xcap-diff+xml": [ + "xdf" + ], + "application/xcap-el+xml": [], + "application/xcap-error+xml": [], + "application/xcap-ns+xml": [], + "application/xcon-conference-info-diff+xml": [], + "application/xcon-conference-info+xml": [], + "application/xenc+xml": [ + "xenc" + ], + "application/xhtml+xml": [ + "xhtml", + "xht" + ], + "application/xhtml-voice+xml": [], + "application/xml": [ + "xml", + "xsl" + ], + "application/xml-dtd": [ + "dtd" + ], + "application/xml-external-parsed-entity": [], + "application/xmpp+xml": [], + "application/xop+xml": [ + "xop" + ], + "application/xproc+xml": [ + "xpl" + ], + "application/xslt+xml": [ + "xslt" + ], + "application/xspf+xml": [ + "xspf" + ], + "application/xv+xml": [ + "mxml", + "xhvml", + "xvml", + "xvm" + ], + "application/yang": [ + "yang" + ], + "application/yin+xml": [ + "yin" + ], + "application/zip": [ + "zip" + ], + "audio/1d-interleaved-parityfec": [], + "audio/32kadpcm": [], + "audio/3gpp": [], + "audio/3gpp2": [], + "audio/ac3": [], + "audio/adpcm": [ + "adp" + ], + "audio/amr": [], + "audio/amr-wb": [], + "audio/amr-wb+": [], + "audio/asc": [], + "audio/atrac-advanced-lossless": [], + "audio/atrac-x": [], + "audio/atrac3": [], + "audio/basic": [ + "au", + "snd" + ], + "audio/bv16": [], + "audio/bv32": [], + "audio/clearmode": [], + "audio/cn": [], + "audio/dat12": [], + "audio/dls": [], + "audio/dsr-es201108": [], + "audio/dsr-es202050": [], + "audio/dsr-es202211": [], + "audio/dsr-es202212": [], + "audio/dv": [], + "audio/dvi4": [], + "audio/eac3": [], + "audio/evrc": [], + "audio/evrc-qcp": [], + "audio/evrc0": [], + "audio/evrc1": [], + "audio/evrcb": [], + "audio/evrcb0": [], + "audio/evrcb1": [], + "audio/evrcwb": [], + "audio/evrcwb0": [], + "audio/evrcwb1": [], + "audio/example": [], + "audio/fwdred": [], + "audio/g719": [], + "audio/g722": [], + "audio/g7221": [], + "audio/g723": [], + "audio/g726-16": [], + "audio/g726-24": [], + "audio/g726-32": [], + "audio/g726-40": [], + "audio/g728": [], + "audio/g729": [], + "audio/g7291": [], + "audio/g729d": [], + "audio/g729e": [], + "audio/gsm": [], + "audio/gsm-efr": [], + "audio/gsm-hr-08": [], + "audio/ilbc": [], + "audio/ip-mr_v2.5": [], + "audio/isac": [], + "audio/l16": [], + "audio/l20": [], + "audio/l24": [], + "audio/l8": [], + "audio/lpc": [], + "audio/midi": [ + "mid", + "midi", + "kar", + "rmi" + ], + "audio/mobile-xmf": [], + "audio/mp4": [ + "mp4a" + ], + "audio/mp4a-latm": [], + "audio/mpa": [], + "audio/mpa-robust": [], + "audio/mpeg": [ + "mpga", + "mp2", + "mp2a", + "mp3", + "m2a", + "m3a" + ], + "audio/mpeg4-generic": [], + "audio/musepack": [], + "audio/ogg": [ + "oga", + "ogg", + "spx" + ], + "audio/opus": [], + "audio/parityfec": [], + "audio/pcma": [], + "audio/pcma-wb": [], + "audio/pcmu-wb": [], + "audio/pcmu": [], + "audio/prs.sid": [], + "audio/qcelp": [], + "audio/red": [], + "audio/rtp-enc-aescm128": [], + "audio/rtp-midi": [], + "audio/rtx": [], + "audio/s3m": [ + "s3m" + ], + "audio/silk": [ + "sil" + ], + "audio/smv": [], + "audio/smv0": [], + "audio/smv-qcp": [], + "audio/sp-midi": [], + "audio/speex": [], + "audio/t140c": [], + "audio/t38": [], + "audio/telephone-event": [], + "audio/tone": [], + "audio/uemclip": [], + "audio/ulpfec": [], + "audio/vdvi": [], + "audio/vmr-wb": [], + "audio/vnd.3gpp.iufp": [], + "audio/vnd.4sb": [], + "audio/vnd.audiokoz": [], + "audio/vnd.celp": [], + "audio/vnd.cisco.nse": [], + "audio/vnd.cmles.radio-events": [], + "audio/vnd.cns.anp1": [], + "audio/vnd.cns.inf1": [], + "audio/vnd.dece.audio": [ + "uva", + "uvva" + ], + "audio/vnd.digital-winds": [ + "eol" + ], + "audio/vnd.dlna.adts": [], + "audio/vnd.dolby.heaac.1": [], + "audio/vnd.dolby.heaac.2": [], + "audio/vnd.dolby.mlp": [], + "audio/vnd.dolby.mps": [], + "audio/vnd.dolby.pl2": [], + "audio/vnd.dolby.pl2x": [], + "audio/vnd.dolby.pl2z": [], + "audio/vnd.dolby.pulse.1": [], + "audio/vnd.dra": [ + "dra" + ], + "audio/vnd.dts": [ + "dts" + ], + "audio/vnd.dts.hd": [ + "dtshd" + ], + "audio/vnd.dvb.file": [], + "audio/vnd.everad.plj": [], + "audio/vnd.hns.audio": [], + "audio/vnd.lucent.voice": [ + "lvp" + ], + "audio/vnd.ms-playready.media.pya": [ + "pya" + ], + "audio/vnd.nokia.mobile-xmf": [], + "audio/vnd.nortel.vbk": [], + "audio/vnd.nuera.ecelp4800": [ + "ecelp4800" + ], + "audio/vnd.nuera.ecelp7470": [ + "ecelp7470" + ], + "audio/vnd.nuera.ecelp9600": [ + "ecelp9600" + ], + "audio/vnd.octel.sbc": [], + "audio/vnd.qcelp": [], + "audio/vnd.rhetorex.32kadpcm": [], + "audio/vnd.rip": [ + "rip" + ], + "audio/vnd.sealedmedia.softseal.mpeg": [], + "audio/vnd.vmx.cvsd": [], + "audio/vorbis": [], + "audio/vorbis-config": [], + "audio/webm": [ + "weba" + ], + "audio/x-aac": [ + "aac" + ], + "audio/x-aiff": [ + "aif", + "aiff", + "aifc" + ], + "audio/x-caf": [ + "caf" + ], + "audio/x-flac": [ + "flac" + ], + "audio/x-matroska": [ + "mka" + ], + "audio/x-mpegurl": [ + "m3u" + ], + "audio/x-ms-wax": [ + "wax" + ], + "audio/x-ms-wma": [ + "wma" + ], + "audio/x-pn-realaudio": [ + "ram", + "ra" + ], + "audio/x-pn-realaudio-plugin": [ + "rmp" + ], + "audio/x-tta": [], + "audio/x-wav": [ + "wav" + ], + "audio/xm": [ + "xm" + ], + "chemical/x-cdx": [ + "cdx" + ], + "chemical/x-cif": [ + "cif" + ], + "chemical/x-cmdf": [ + "cmdf" + ], + "chemical/x-cml": [ + "cml" + ], + "chemical/x-csml": [ + "csml" + ], + "chemical/x-pdb": [], + "chemical/x-xyz": [ + "xyz" + ], + "image/bmp": [ + "bmp" + ], + "image/cgm": [ + "cgm" + ], + "image/example": [], + "image/fits": [], + "image/g3fax": [ + "g3" + ], + "image/gif": [ + "gif" + ], + "image/ief": [ + "ief" + ], + "image/jp2": [], + "image/jpeg": [ + "jpeg", + "jpg", + "jpe" + ], + "image/jpm": [], + "image/jpx": [], + "image/ktx": [ + "ktx" + ], + "image/naplps": [], + "image/png": [ + "png" + ], + "image/prs.btif": [ + "btif" + ], + "image/prs.pti": [], + "image/sgi": [ + "sgi" + ], + "image/svg+xml": [ + "svg", + "svgz" + ], + "image/t38": [], + "image/tiff": [ + "tiff", + "tif" + ], + "image/tiff-fx": [], + "image/vnd.adobe.photoshop": [ + "psd" + ], + "image/vnd.cns.inf2": [], + "image/vnd.dece.graphic": [ + "uvi", + "uvvi", + "uvg", + "uvvg" + ], + "image/vnd.dvb.subtitle": [ + "sub" + ], + "image/vnd.djvu": [ + "djvu", + "djv" + ], + "image/vnd.dwg": [ + "dwg" + ], + "image/vnd.dxf": [ + "dxf" + ], + "image/vnd.fastbidsheet": [ + "fbs" + ], + "image/vnd.fpx": [ + "fpx" + ], + "image/vnd.fst": [ + "fst" + ], + "image/vnd.fujixerox.edmics-mmr": [ + "mmr" + ], + "image/vnd.fujixerox.edmics-rlc": [ + "rlc" + ], + "image/vnd.globalgraphics.pgb": [], + "image/vnd.microsoft.icon": [], + "image/vnd.mix": [], + "image/vnd.ms-modi": [ + "mdi" + ], + "image/vnd.ms-photo": [ + "wdp" + ], + "image/vnd.net-fpx": [ + "npx" + ], + "image/vnd.radiance": [], + "image/vnd.sealed.png": [], + "image/vnd.sealedmedia.softseal.gif": [], + "image/vnd.sealedmedia.softseal.jpg": [], + "image/vnd.svf": [], + "image/vnd.wap.wbmp": [ + "wbmp" + ], + "image/vnd.xiff": [ + "xif" + ], + "image/webp": [ + "webp" + ], + "image/x-3ds": [ + "3ds" + ], + "image/x-cmu-raster": [ + "ras" + ], + "image/x-cmx": [ + "cmx" + ], + "image/x-freehand": [ + "fh", + "fhc", + "fh4", + "fh5", + "fh7" + ], + "image/x-icon": [ + "ico" + ], + "image/x-mrsid-image": [ + "sid" + ], + "image/x-pcx": [ + "pcx" + ], + "image/x-pict": [ + "pic", + "pct" + ], + "image/x-portable-anymap": [ + "pnm" + ], + "image/x-portable-bitmap": [ + "pbm" + ], + "image/x-portable-graymap": [ + "pgm" + ], + "image/x-portable-pixmap": [ + "ppm" + ], + "image/x-rgb": [ + "rgb" + ], + "image/x-tga": [ + "tga" + ], + "image/x-xbitmap": [ + "xbm" + ], + "image/x-xpixmap": [ + "xpm" + ], + "image/x-xwindowdump": [ + "xwd" + ], + "message/cpim": [], + "message/delivery-status": [], + "message/disposition-notification": [], + "message/example": [], + "message/external-body": [], + "message/feedback-report": [], + "message/global": [], + "message/global-delivery-status": [], + "message/global-disposition-notification": [], + "message/global-headers": [], + "message/http": [], + "message/imdn+xml": [], + "message/news": [], + "message/partial": [], + "message/rfc822": [ + "eml", + "mime" + ], + "message/s-http": [], + "message/sip": [], + "message/sipfrag": [], + "message/tracking-status": [], + "message/vnd.si.simp": [], + "model/example": [], + "model/iges": [ + "igs", + "iges" + ], + "model/mesh": [ + "msh", + "mesh", + "silo" + ], + "model/vnd.collada+xml": [ + "dae" + ], + "model/vnd.dwf": [ + "dwf" + ], + "model/vnd.flatland.3dml": [], + "model/vnd.gdl": [ + "gdl" + ], + "model/vnd.gs-gdl": [], + "model/vnd.gs.gdl": [], + "model/vnd.gtw": [ + "gtw" + ], + "model/vnd.moml+xml": [], + "model/vnd.mts": [ + "mts" + ], + "model/vnd.parasolid.transmit.binary": [], + "model/vnd.parasolid.transmit.text": [], + "model/vnd.vtu": [ + "vtu" + ], + "model/vrml": [ + "wrl", + "vrml" + ], + "model/x3d+binary": [ + "x3db", + "x3dbz" + ], + "model/x3d+vrml": [ + "x3dv", + "x3dvz" + ], + "model/x3d+xml": [ + "x3d", + "x3dz" + ], + "multipart/alternative": [], + "multipart/appledouble": [], + "multipart/byteranges": [], + "multipart/digest": [], + "multipart/encrypted": [], + "multipart/example": [], + "multipart/form-data": [], + "multipart/header-set": [], + "multipart/mixed": [], + "multipart/parallel": [], + "multipart/related": [], + "multipart/report": [], + "multipart/signed": [], + "multipart/voice-message": [], + "text/1d-interleaved-parityfec": [], + "text/cache-manifest": [ + "appcache" + ], + "text/calendar": [ + "ics", + "ifb" + ], + "text/css": [ + "css" + ], + "text/csv": [ + "csv" + ], + "text/directory": [], + "text/dns": [], + "text/ecmascript": [], + "text/enriched": [], + "text/example": [], + "text/fwdred": [], + "text/html": [ + "html", + "htm" + ], + "text/javascript": [], + "text/n3": [ + "n3" + ], + "text/parityfec": [], + "text/plain": [ + "txt", + "text", + "conf", + "def", + "list", + "log", + "in" + ], + "text/prs.fallenstein.rst": [], + "text/prs.lines.tag": [ + "dsc" + ], + "text/vnd.radisys.msml-basic-layout": [], + "text/red": [], + "text/rfc822-headers": [], + "text/richtext": [ + "rtx" + ], + "text/rtf": [], + "text/rtp-enc-aescm128": [], + "text/rtx": [], + "text/sgml": [ + "sgml", + "sgm" + ], + "text/t140": [], + "text/tab-separated-values": [ + "tsv" + ], + "text/troff": [ + "t", + "tr", + "roff", + "man", + "me", + "ms" + ], + "text/turtle": [ + "ttl" + ], + "text/ulpfec": [], + "text/uri-list": [ + "uri", + "uris", + "urls" + ], + "text/vcard": [ + "vcard" + ], + "text/vnd.abc": [], + "text/vnd.curl": [ + "curl" + ], + "text/vnd.curl.dcurl": [ + "dcurl" + ], + "text/vnd.curl.scurl": [ + "scurl" + ], + "text/vnd.curl.mcurl": [ + "mcurl" + ], + "text/vnd.dmclientscript": [], + "text/vnd.dvb.subtitle": [ + "sub" + ], + "text/vnd.esmertec.theme-descriptor": [], + "text/vnd.fly": [ + "fly" + ], + "text/vnd.fmi.flexstor": [ + "flx" + ], + "text/vnd.graphviz": [ + "gv" + ], + "text/vnd.in3d.3dml": [ + "3dml" + ], + "text/vnd.in3d.spot": [ + "spot" + ], + "text/vnd.iptc.newsml": [], + "text/vnd.iptc.nitf": [], + "text/vnd.latex-z": [], + "text/vnd.motorola.reflex": [], + "text/vnd.ms-mediapackage": [], + "text/vnd.net2phone.commcenter.command": [], + "text/vnd.si.uricatalogue": [], + "text/vnd.sun.j2me.app-descriptor": [ + "jad" + ], + "text/vnd.trolltech.linguist": [], + "text/vnd.wap.si": [], + "text/vnd.wap.sl": [], + "text/vnd.wap.wml": [ + "wml" + ], + "text/vnd.wap.wmlscript": [ + "wmls" + ], + "text/x-asm": [ + "s", + "asm" + ], + "text/x-c": [ + "c", + "cc", + "cxx", + "cpp", + "h", + "hh", + "dic" + ], + "text/x-fortran": [ + "f", + "for", + "f77", + "f90" + ], + "text/x-java-source": [ + "java" + ], + "text/x-opml": [ + "opml" + ], + "text/x-pascal": [ + "p", + "pas" + ], + "text/x-nfo": [ + "nfo" + ], + "text/x-setext": [ + "etx" + ], + "text/x-sfv": [ + "sfv" + ], + "text/x-uuencode": [ + "uu" + ], + "text/x-vcalendar": [ + "vcs" + ], + "text/x-vcard": [ + "vcf" + ], + "text/xml": [], + "text/xml-external-parsed-entity": [], + "video/1d-interleaved-parityfec": [], + "video/3gpp": [ + "3gp" + ], + "video/3gpp-tt": [], + "video/3gpp2": [ + "3g2" + ], + "video/bmpeg": [], + "video/bt656": [], + "video/celb": [], + "video/dv": [], + "video/example": [], + "video/h261": [ + "h261" + ], + "video/h263": [ + "h263" + ], + "video/h263-1998": [], + "video/h263-2000": [], + "video/h264": [ + "h264" + ], + "video/h264-rcdo": [], + "video/h264-svc": [], + "video/jpeg": [ + "jpgv" + ], + "video/jpeg2000": [], + "video/jpm": [ + "jpm", + "jpgm" + ], + "video/mj2": [ + "mj2", + "mjp2" + ], + "video/mp1s": [], + "video/mp2p": [], + "video/mp2t": [], + "video/mp4": [ + "mp4", + "mp4v", + "mpg4" + ], + "video/mp4v-es": [], + "video/mpeg": [ + "mpeg", + "mpg", + "mpe", + "m1v", + "m2v" + ], + "video/mpeg4-generic": [], + "video/mpv": [], + "video/nv": [], + "video/ogg": [ + "ogv" + ], + "video/parityfec": [], + "video/pointer": [], + "video/quicktime": [ + "qt", + "mov" + ], + "video/raw": [], + "video/rtp-enc-aescm128": [], + "video/rtx": [], + "video/smpte292m": [], + "video/ulpfec": [], + "video/vc1": [], + "video/vnd.cctv": [], + "video/vnd.dece.hd": [ + "uvh", + "uvvh" + ], + "video/vnd.dece.mobile": [ + "uvm", + "uvvm" + ], + "video/vnd.dece.mp4": [], + "video/vnd.dece.pd": [ + "uvp", + "uvvp" + ], + "video/vnd.dece.sd": [ + "uvs", + "uvvs" + ], + "video/vnd.dece.video": [ + "uvv", + "uvvv" + ], + "video/vnd.directv.mpeg": [], + "video/vnd.directv.mpeg-tts": [], + "video/vnd.dlna.mpeg-tts": [], + "video/vnd.dvb.file": [ + "dvb" + ], + "video/vnd.fvt": [ + "fvt" + ], + "video/vnd.hns.video": [], + "video/vnd.iptvforum.1dparityfec-1010": [], + "video/vnd.iptvforum.1dparityfec-2005": [], + "video/vnd.iptvforum.2dparityfec-1010": [], + "video/vnd.iptvforum.2dparityfec-2005": [], + "video/vnd.iptvforum.ttsavc": [], + "video/vnd.iptvforum.ttsmpeg2": [], + "video/vnd.motorola.video": [], + "video/vnd.motorola.videop": [], + "video/vnd.mpegurl": [ + "mxu", + "m4u" + ], + "video/vnd.ms-playready.media.pyv": [ + "pyv" + ], + "video/vnd.nokia.interleaved-multimedia": [], + "video/vnd.nokia.videovoip": [], + "video/vnd.objectvideo": [], + "video/vnd.sealed.mpeg1": [], + "video/vnd.sealed.mpeg4": [], + "video/vnd.sealed.swf": [], + "video/vnd.sealedmedia.softseal.mov": [], + "video/vnd.uvvu.mp4": [ + "uvu", + "uvvu" + ], + "video/vnd.vivo": [ + "viv" + ], + "video/webm": [ + "webm" + ], + "video/x-f4v": [ + "f4v" + ], + "video/x-fli": [ + "fli" + ], + "video/x-flv": [ + "flv" + ], + "video/x-m4v": [ + "m4v" + ], + "video/x-matroska": [ + "mkv", + "mk3d", + "mks" + ], + "video/x-mng": [ + "mng" + ], + "video/x-ms-asf": [ + "asf", + "asx" + ], + "video/x-ms-vob": [ + "vob" + ], + "video/x-ms-wm": [ + "wm" + ], + "video/x-ms-wmv": [ + "wmv" + ], + "video/x-ms-wmx": [ + "wmx" + ], + "video/x-ms-wvx": [ + "wvx" + ], + "video/x-msvideo": [ + "avi" + ], + "video/x-sgi-movie": [ + "movie" + ], + "video/x-smv": [ + "smv" + ], + "x-conference/x-cooltalk": [ + "ice" + ] +} diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/node.json b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/node.json new file mode 100755 index 0000000..ad50d61 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/lib/node.json @@ -0,0 +1,55 @@ +{ + "text/vtt": [ + "vtt" + ], + "application/x-chrome-extension": [ + "crx" + ], + "text/x-component": [ + "htc" + ], + "text/cache-manifest": [ + "manifest" + ], + "application/octet-stream": [ + "buffer" + ], + "application/mp4": [ + "m4p" + ], + "audio/mp4": [ + "m4a" + ], + "video/MP2T": [ + "ts" + ], + "application/x-web-app-manifest+json": [ + "webapp" + ], + "text/x-lua": [ + "lua" + ], + "application/x-lua-bytecode": [ + "luac" + ], + "text/x-markdown": [ + "markdown", + "md", + "mkd" + ], + "text/plain": [ + "ini" + ], + "application/dash+xml": [ + "mdp" + ], + "font/opentype": [ + "otf" + ], + "application/json": [ + "map" + ], + "application/xml": [ + "xsd" + ] +} diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/package.json b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/package.json new file mode 100755 index 0000000..3d83380 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/package.json @@ -0,0 +1,39 @@ +{ + "name": "mime-types", + "description": "ultimate mime type utility", + "version": "1.0.0", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "contributors": [ + { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": "https://searchbeam.jit.su" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/expressjs/mime-types" + }, + "license": "MIT", + "main": "lib", + "devDependencies": { + "co": "3", + "cogent": "0", + "mocha": "1", + "should": "3" + }, + "scripts": { + "test": "make test" + }, + "readme": "# mime-types [![Build Status](https://travis-ci.org/expressjs/mime-types.svg?branch=master)](https://travis-ci.org/expressjs/mime-types) [![NPM version](https://badge.fury.io/js/mime-types.svg)](https://badge.fury.io/js/mime-types)\n\nThe ultimate javascript content-type utility.\n\n### Install\n\n```sh\n$ npm install mime-types\n```\n\n#### Similar to [mime](https://github.com/broofa/node-mime) except:\n\n- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.\n- No fallbacks, so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.\n- Additional mime types are added such as jade and stylus. Feel free to add more!\n- Browser support via Browserify and Component by converting lists to JSON files.\n\nOtherwise, the API is compatible.\n\n### Adding Types\n\nIf you'd like to add additional types,\nsimply create a PR adding the type to `custom.json` and\na reference link to the [sources](SOURCES.md).\n\nDo __NOT__ edit `mime.json` or `node.json`.\nThose are pulled using `build.js`.\nYou should only touch `custom.json`.\n\n## API\n\n```js\nvar mime = require('mime-types')\n```\n\nAll functions return `false` if input is invalid or not found.\n\n### mime.lookup(path)\n\nLookup the content-type associated with a file.\n\n```js\nmime.lookup('json') // 'application/json'\nmime.lookup('.md') // 'text/x-markdown'\nmime.lookup('file.html') // 'text/html'\nmime.lookup('folder/file.js') // 'application/javascript'\n\nmime.lookup('cats') // false\n```\n\n### mime.contentType(type)\n\nCreate a full content-type header given a content-type or extension.\n\n```js\nmime.contentType('markdown') // 'text/x-markdown; charset=utf-8'\nmime.contentType('file.json') // 'application/json; charset=utf-8'\n```\n\n### mime.extension(type)\n\nGet the default extension for a content-type.\n\n```js\nmime.extension('application/octet-stream') // 'bin'\n```\n\n### mime.charset(type)\n\nLookup the implied default charset of a content-type.\n\n```js\nmime.charset('text/x-markdown') // 'UTF-8'\n```\n\n### mime.types[extension] = type\n\nA map of content-types by extension.\n\n### mime.extensions[type] = [extensions]\n\nA map of extensions by content-type.\n\n### mime.define(types)\n\nGlobally add definitions.\n`types` must be an object of the form:\n\n```js\n{\n \"\": [extensions...],\n \"\": [extensions...]\n}\n```\n\nSee the `.json` files in `lib/` for examples.\n\n## License\n\n[MIT](LICENSE)\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/mime-types/issues" + }, + "_id": "mime-types@1.0.0", + "_from": "mime-types@1.0.0" +} diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/test/mime.js b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/test/mime.js new file mode 100755 index 0000000..3e6bd10 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/test/mime.js @@ -0,0 +1,65 @@ +/** + * Usage: node test.js + */ + +var mime = require(".."); +var assert = require('assert'); +var path = require('path'); + +function eq(a, b) { + console.log('Test: ' + a + ' === ' + b); + assert.strictEqual.apply(null, arguments); +} + +console.log(Object.keys(mime.extensions).length + ' types'); +console.log(Object.keys(mime.types).length + ' extensions\n'); + +// +// Test mime lookups +// + +eq('text/plain', mime.lookup('text.txt')); // normal file +eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase +eq('text/plain', mime.lookup('dir/text.txt')); // dir + file +eq('text/plain', mime.lookup('.text.txt')); // hidden file +eq('text/plain', mime.lookup('.txt')); // nameless +eq('text/plain', mime.lookup('txt')); // extension-only +eq('text/plain', mime.lookup('/txt')); // extension-less () +eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less +// eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized +// eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default + +// +// Test extensions +// + +eq('txt', mime.extension(mime.types.text)); +eq('html', mime.extension(mime.types.htm)); +eq('bin', mime.extension('application/octet-stream')); +eq('bin', mime.extension('application/octet-stream ')); +eq('html', mime.extension(' text/html; charset=UTF-8')); +eq('html', mime.extension('text/html; charset=UTF-8 ')); +eq('html', mime.extension('text/html; charset=UTF-8')); +eq('html', mime.extension('text/html ; charset=UTF-8')); +eq('html', mime.extension('text/html;charset=UTF-8')); +eq('html', mime.extension('text/Html;charset=UTF-8')); +eq(false, mime.extension('unrecognized')); + +// +// Test node.types lookups +// + +eq('application/font-woff', mime.lookup('file.woff')); +eq('application/octet-stream', mime.lookup('file.buffer')); +eq('audio/mp4', mime.lookup('file.m4a')); +eq('font/opentype', mime.lookup('file.otf')); + +// +// Test charsets +// + +eq('UTF-8', mime.charset('text/plain')); +eq(false, mime.charset(mime.types.js)); +eq('UTF-8', mime.charset('application/json')) +eq('UTF-8', mime.charsets.lookup('text/something')); +// eq('fallback', mime.charset('application/octet-stream', 'fallback')); diff --git a/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/test/test.js b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/test/test.js new file mode 100755 index 0000000..2ecee92 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/node_modules/mime-types/test/test.js @@ -0,0 +1,100 @@ + +var assert = require('assert') + +var mime = require('..') + +var lookup = mime.lookup +var extension = mime.extension +var charset = mime.charset +var contentType = mime.contentType + +describe('.lookup()', function () { + + it('jade', function () { + assert.equal(lookup('jade'), 'text/jade') + assert.equal(lookup('.jade'), 'text/jade') + assert.equal(lookup('file.jade'), 'text/jade') + assert.equal(lookup('folder/file.jade'), 'text/jade') + }) + + it('should not error on non-string types', function () { + assert.doesNotThrow(function () { + lookup({ noteven: "once" }) + lookup(null) + lookup(true) + lookup(Infinity) + }) + }) + + it('should return false for unknown types', function () { + assert.equal(lookup('.jalksdjflakjsdjfasdf'), false) + }) +}) + +describe('.extension()', function () { + + it('should not error on non-string types', function () { + assert.doesNotThrow(function () { + extension({ noteven: "once" }) + extension(null) + extension(true) + extension(Infinity) + }) + }) + + it('should return false for unknown types', function () { + assert.equal(extension('.jalksdjflakjsdjfasdf'), false) + }) +}) + +describe('.charset()', function () { + + it('should not error on non-string types', function () { + assert.doesNotThrow(function () { + charset({ noteven: "once" }) + charset(null) + charset(true) + charset(Infinity) + }) + }) + + it('should return false for unknown types', function () { + assert.equal(charset('.jalksdjflakjsdjfasdf'), false) + }) +}) + +describe('.contentType()', function () { + + it('html', function () { + assert.equal(contentType('html'), 'text/html; charset=utf-8') + }) + + it('text/html; charset=ascii', function () { + assert.equal(contentType('text/html; charset=ascii'), 'text/html; charset=ascii') + }) + + it('json', function () { + assert.equal(contentType('json'), 'application/json; charset=utf-8') + }) + + it('application/json', function () { + assert.equal(contentType('application/json'), 'application/json; charset=utf-8') + }) + + it('jade', function () { + assert.equal(contentType('jade'), 'text/jade; charset=utf-8') + }) + + it('should not error on non-string types', function () { + assert.doesNotThrow(function () { + contentType({ noteven: "once" }) + contentType(null) + contentType(true) + contentType(Infinity) + }) + }) + + it('should return false for unknown types', function () { + assert.equal(contentType('.jalksdjflakjsdjfasdf'), false) + }) +}) diff --git a/node_modules/body-parser/node_modules/type-is/package.json b/node_modules/body-parser/node_modules/type-is/package.json new file mode 100755 index 0000000..807b727 --- /dev/null +++ b/node_modules/body-parser/node_modules/type-is/package.json @@ -0,0 +1,45 @@ +{ + "name": "type-is", + "description": "Infer the content-type of a request.", + "version": "1.3.1", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/expressjs/type-is" + }, + "dependencies": { + "media-typer": "0.2.0", + "mime-types": "1.0.0" + }, + "devDependencies": { + "istanbul": "0.2.10", + "mocha": "*", + "should": "*" + }, + "engines": { + "node": ">= 0.8" + }, + "scripts": { + "test": "mocha --require should --reporter spec --check-leaks --bail test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + }, + "readme": "# type-is\n\n[![NPM version](https://badge.fury.io/js/type-is.svg)](https://badge.fury.io/js/type-is)\n[![Build Status](https://travis-ci.org/expressjs/type-is.svg?branch=master)](https://travis-ci.org/expressjs/type-is)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/type-is.svg?branch=master)](https://coveralls.io/r/expressjs/type-is)\n\nInfer the content-type of a request.\n\n### Install\n\n```sh\n$ npm install type-is\n```\n\n## API\n\n```js\nvar http = require('http')\nvar is = require('type-is')\n\nhttp.createServer(function (req, res) {\n var istext = is(req, ['text/*'])\n res.end('you ' + (istext ? 'sent' : 'did not send') + ' me text')\n})\n```\n\n### type = is(request, types)\n\n`request` is the node HTTP request. `types` is an array of types.\n\n```js\n// req.headers.content-type = 'application/json'\n\nis(req, ['json']) // 'json'\nis(req, ['html', 'json']) // 'json'\nis(req, ['application/*']) // 'application/json'\nis(req, ['application/json']) // 'application/json'\n\nis(req, ['html']) // false\n```\n\n#### Each type can be:\n\n- An extension name such as `json`. This name will be returned if matched.\n- A mime type such as `application/json`.\n- A mime type with a wildcard such as `*/json` or `application/*`. The full mime type will be returned if matched\n- A suffix such as `+json`. This can be combined with a wildcard such as `*/vnd+json` or `application/*+json`. The full mime type will be returned if matched.\n\n`false` will be returned if no type matches.\n\n## Examples\n\n#### Example body parser\n\n```js\nvar is = require('type-is');\nvar parse = require('body');\nvar busboy = require('busboy');\n\nfunction bodyParser(req, res, next) {\n if (!is.hasBody(req)) return next();\n\n switch (is(req, ['urlencoded', 'json', 'multipart'])) {\n case 'urlencoded':\n // parse urlencoded body\n break\n case 'json':\n // parse json body\n break\n case 'multipart':\n // parse multipart body\n break\n default:\n // 415 error code\n }\n}\n```\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/type-is/issues" + }, + "_id": "type-is@1.3.1", + "_from": "type-is@1.3.1" +} diff --git a/node_modules/body-parser/package.json b/node_modules/body-parser/package.json new file mode 100755 index 0000000..e21a9dd --- /dev/null +++ b/node_modules/body-parser/package.json @@ -0,0 +1,51 @@ +{ + "name": "body-parser", + "description": "Node.js body parsing middleware", + "version": "1.4.3", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/expressjs/body-parser" + }, + "dependencies": { + "bytes": "1.0.0", + "depd": "0.3.0", + "iconv-lite": "0.4.3", + "media-typer": "0.2.0", + "qs": "0.6.6", + "raw-body": "1.2.2", + "type-is": "1.3.1" + }, + "devDependencies": { + "istanbul": "0.2.10", + "mocha": "~1.20.1", + "should": "~4.0.4", + "supertest": "~0.13.0" + }, + "engines": { + "node": ">= 0.8" + }, + "scripts": { + "test": "mocha --require should --require test/support/env --reporter spec --check-leaks --bail test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/" + }, + "readme": "# body-parser\n\n[![NPM version](https://badge.fury.io/js/body-parser.svg)](https://badge.fury.io/js/body-parser)\n[![Build Status](https://travis-ci.org/expressjs/body-parser.svg?branch=master)](https://travis-ci.org/expressjs/body-parser)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/body-parser.svg?branch=master)](https://coveralls.io/r/expressjs/body-parser)\n\nNode.js body parsing middleware.\n\nThis does not handle multipart bodies, due to their complex and typically large nature. For multipart bodies, you may be interested in the following modules:\n\n- [busboy](https://www.npmjs.org/package/busboy#readme) and [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)\n- [multiparty](https://www.npmjs.org/package/multiparty#readme) and [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)\n- [formidable](https://www.npmjs.org/package/formidable#readme)\n- [multer](https://www.npmjs.org/package/multer#readme)\n\nOther body parsers you might be interested in:\n\n- [body](https://www.npmjs.org/package/body#readme)\n- [co-body](https://www.npmjs.org/package/co-body#readme)\n\n## Installation\n\n```sh\n$ npm install body-parser\n```\n\n## API\n\n```js\nvar express = require('express')\nvar bodyParser = require('body-parser')\n\nvar app = express()\n\n// parse application/x-www-form-urlencoded\napp.use(bodyParser.urlencoded())\n\n// parse application/json\napp.use(bodyParser.json())\n\n// parse application/vnd.api+json as json\napp.use(bodyParser.json({ type: 'application/vnd.api+json' }))\n\napp.use(function (req, res, next) {\n console.log(req.body) // populated!\n next()\n})\n```\n\n### bodyParser.json(options)\n\nReturns middleware that only parses `json`. This parser accepts any Unicode encoding of the body and supports automatic inflation of `gzip` and `deflate` encodings.\n\nThe options are:\n\n- `strict` - only parse objects and arrays. (default: `true`)\n- `inflate` - if deflated bodies will be inflated. (default: `true`)\n- `limit` - maximum request body size. (default: `<100kb>`)\n- `reviver` - passed to `JSON.parse()`\n- `type` - request content-type to parse (default: `json`)\n- `verify` - function to verify body content\n\nThe `type` argument is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) library. This can be an extension name (like `json`), a mime type (like `application/json`), or a mime time with a wildcard (like `*/json`).\n\nThe `verify` argument, if supplied, is called as `verify(req, res, buf, encoding)`, where `buf` is a `Buffer` of the raw request body and `encoding` is the encoding of the request. The parsing can be aborted by throwing an error.\n\nThe `reviver` argument is passed directly to `JSON.parse` as the second argument. You can find more information on this argument [in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).\n\n### bodyParser.raw(options)\n\nReturns middleware that parses all bodies as a `Buffer`. This parser supports automatic inflation of `gzip` and `deflate` encodings.\n\nThe options are:\n\n- `inflate` - if deflated bodies will be inflated. (default: `true`)\n- `limit` - maximum request body size. (default: `<100kb>`)\n- `type` - request content-type to parse (default: `application/octet-stream`)\n- `verify` - function to verify body content\n\nThe `type` argument is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) library. This can be an extension name (like `bin`), a mime type (like `application/octet-stream`), or a mime time with a wildcard (like `application/*`).\n\nThe `verify` argument, if supplied, is called as `verify(req, res, buf, encoding)`, where `buf` is a `Buffer` of the raw request body and `encoding` is the encoding of the request. The parsing can be aborted by throwing an error.\n\n### bodyParser.text(options)\n\nReturns middleware that parses all bodies as a string. This parser supports automatic inflation of `gzip` and `deflate` encodings.\n\nThe options are:\n\n- `defaultCharset` - the default charset to parse as, if not specified in content-type. (default: `utf-8`)\n- `inflate` - if deflated bodies will be inflated. (default: `true`)\n- `limit` - maximum request body size. (default: `<100kb>`)\n- `type` - request content-type to parse (default: `text/plain`)\n- `verify` - function to verify body content\n\nThe `type` argument is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) library. This can be an extension name (like `txt`), a mime type (like `text/plain`), or a mime time with a wildcard (like `text/*`).\n\nThe `verify` argument, if supplied, is called as `verify(req, res, buf, encoding)`, where `buf` is a `Buffer` of the raw request body and `encoding` is the encoding of the request. The parsing can be aborted by throwing an error.\n\n### bodyParser.urlencoded(options)\n\nReturns middleware that only parses `urlencoded` bodies. This parser accepts only UTF-8 encoding of the body and supports automatic inflation of `gzip` and `deflate` encodings.\n\nThe options are:\n\n- `extended` - parse extended syntax with the [qs](https://www.npmjs.org/package/qs#readme) module. (default: `true`)\n- `inflate` - if deflated bodies will be inflated. (default: `true`)\n- `limit` - maximum request body size. (default: `<100kb>`)\n- `type` - request content-type to parse (default: `urlencoded`)\n- `verify` - function to verify body content\n\nThe `extended` argument allows to choose between parsing the urlencoded data with the `querystring` library (when `false`) or the `qs` library (when `true`). The \"extended\" syntax allows for rich objects and arrays to be encoded into the urlencoded format, allowing for a JSON-like exterience with urlencoded. For more information, please [see the qs library](https://www.npmjs.org/package/qs#readme).\n\nThe `type` argument is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme) library. This can be an extension name (like `urlencoded`), a mime type (like `application/x-www-form-urlencoded`), or a mime time with a wildcard (like `*/x-www-form-urlencoded`).\n\nThe `verify` argument, if supplied, is called as `verify(req, res, buf, encoding)`, where `buf` is a `Buffer` of the raw request body and `encoding` is the encoding of the request. The parsing can be aborted by throwing an error.\n\n### req.body\n\nA new `body` object containing the parsed data is populated on the `request` object after the middleware.\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/body-parser/issues" + }, + "_id": "body-parser@1.4.3", + "_from": "body-parser@" +} diff --git a/node_modules/chronometer.js b/node_modules/chronometer.js new file mode 100755 index 0000000..5b5cb8c --- /dev/null +++ b/node_modules/chronometer.js @@ -0,0 +1,53 @@ +//////////////////////////////////////////// +// Chronometer +//////////////////////////////////////////// + +// number padding: 0 to 00 +function pad(number) { return (number < 10 ? '0' : '') + number } + +function xdateTime() { + var xdatetime= new Date(); + var now=xdatetime.toString() + return now +} + + +// the chronometer initial states +function zeroChron(){ + zecsec = 0; seconds = 0; + mins = 0; hours = 0; + zero = pad(hours) +":"+pad(mins)+ ':'+ pad(seconds) + chron = zero + return zero +} + +zeroChron() + +/* +function chronCtrl (state,interval){ + console.log("=========================== chronstate=" + state) + if (state==1){ + var date = new Date() + var starttime = new Date().getTime() / 1000; + //var interval = 1020 - date.getMilliseconds(); + xstopwatch = setInterval(function () { + var nowtime = new Date().getTime() / 1000; + now = nowtime-starttime + hours = parseInt( now / 3600 ) % 24; + minutes = parseInt( now / 60 ) % 60; + seconds = parseInt(now % 60); + milliseconds = Math.floor((now-seconds)*10)%60; + time = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds) + "."+milliseconds; + console.log(time) +// socket.broadcast.emit('chronFromServer', time) +// socket.emit('chronFromServer', time) + }, 100) + } + if (state==0) { + clearInterval(xstopwatch); + } + } +*/ +//exports.chronCtrl = chronCtrl; +exports.xdateTime = xdateTime; +exports.zeroChron = zeroChron; diff --git a/node_modules/errorhandler/.npmignore b/node_modules/errorhandler/.npmignore new file mode 100755 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/errorhandler/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/errorhandler/History.md b/node_modules/errorhandler/History.md new file mode 100755 index 0000000..44a060a --- /dev/null +++ b/node_modules/errorhandler/History.md @@ -0,0 +1,32 @@ +1.1.1 / 2014-06-20 +================== + + * deps: accepts@~1.0.4 + - use `mime-types` + +1.1.0 / 2014-06-16 +================== + + * Display error on console formatted like `throw` + * Escape HTML with `escape-html` module + * Escape HTML in stack trace + * Escape HTML in title + * Fix up edge cases with error sent in response + * Set `X-Content-Type-Options: nosniff` header + * Use accepts for negotiation + +1.0.2 / 2014-06-05 +================== + + * Pass on errors from reading error files + +1.0.1 / 2014-04-29 +================== + + * Clean up error CSS + * Do not respond after headers sent + +1.0.0 / 2014-03-03 +================== + + * Genesis from `connect` diff --git a/node_modules/errorhandler/README.md b/node_modules/errorhandler/README.md new file mode 100755 index 0000000..ca10d41 --- /dev/null +++ b/node_modules/errorhandler/README.md @@ -0,0 +1,59 @@ +# errorhandler + +[![NPM version](https://badge.fury.io/js/errorhandler.svg)](http://badge.fury.io/js/errorhandler) +[![Build Status](https://travis-ci.org/expressjs/errorhandler.svg?branch=master)](https://travis-ci.org/expressjs/errorhandler) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/errorhandler.svg?branch=master)](https://coveralls.io/r/expressjs/errorhandler) + +Previously `connect.errorHandler()`. + +## Install + +```sh +$ npm install errorhandler +``` + +## API + +### errorhandler() + +Create new middleware to handle errors and respond with content negotiation. +This middleware is only intended to be used in a development environment, as +the full error stack traces will be send back to the client when an error +occurs. + +## Example + +```js +var connect = require('connect') +var errorhandler = require('errorhandler') + +var app = connect() + +if (process.env.NODE_ENV === 'development') { + app.use(errorhandler()) +} +``` + +## License + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +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/node_modules/errorhandler/index.js b/node_modules/errorhandler/index.js new file mode 100755 index 0000000..16e044f --- /dev/null +++ b/node_modules/errorhandler/index.js @@ -0,0 +1,111 @@ +/*! + * errorhandler + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var accepts = require('accepts') +var escapeHtml = require('escape-html'); +var fs = require('fs'); + +/** + * Error handler: + * + * Development error handler, providing stack traces + * and error message responses for requests accepting text, html, + * or json. + * + * Text: + * + * By default, and when _text/plain_ is accepted a simple stack trace + * or error message will be returned. + * + * JSON: + * + * When _application/json_ is accepted, connect will respond with + * an object in the form of `{ "error": error }`. + * + * HTML: + * + * When accepted connect will output a nice html stack trace. + * + * @return {Function} + * @api public + */ + +exports = module.exports = function errorHandler(){ + // get environment + var env = process.env.NODE_ENV || 'development' + + return function errorHandler(err, req, res, next){ + // respect err.status + if (err.status) { + res.statusCode = err.status + } + + // default status code to 500 + if (res.statusCode < 400) { + res.statusCode = 500 + } + + // write error to console + if (env !== 'test') { + console.error(err.stack || String(err)) + } + + // cannot actually respond + if (res._header) { + return req.socket.destroy() + } + + // negotiate + var accept = accepts(req) + var type = accept.types('html', 'json', 'text') + + // Security header for content sniffing + res.setHeader('X-Content-Type-Options', 'nosniff') + + // html + if (type === 'html') { + fs.readFile(__dirname + '/public/style.css', 'utf8', function(e, style){ + if (e) return next(e); + fs.readFile(__dirname + '/public/error.html', 'utf8', function(e, html){ + if (e) return next(e); + var stack = (err.stack || '') + .split('\n').slice(1) + .map(function(v){ return '
  • ' + escapeHtml(v).replace(/ /g, '  ') + '
  • '; }).join(''); + html = html + .replace('{style}', style) + .replace('{stack}', stack) + .replace('{title}', escapeHtml(exports.title)) + .replace('{statusCode}', res.statusCode) + .replace(/\{error\}/g, escapeHtml(String(err)).replace(/ /g, '  ').replace(/\n/g, '
    ')); + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + res.end(html); + }); + }); + // json + } else if (type === 'json') { + var error = { message: err.message, stack: err.stack }; + for (var prop in err) error[prop] = err[prop]; + var json = JSON.stringify({ error: error }); + res.setHeader('Content-Type', 'application/json'); + res.end(json); + // plain text + } else { + res.setHeader('Content-Type', 'text/plain'); + res.end(err.stack || String(err)); + } + }; +}; + +/** + * Template title, framework authors may override this value. + */ + +exports.title = 'Connect'; diff --git a/node_modules/errorhandler/node_modules/accepts/.npmignore b/node_modules/errorhandler/node_modules/accepts/.npmignore new file mode 100755 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/errorhandler/node_modules/accepts/History.md b/node_modules/errorhandler/node_modules/accepts/History.md new file mode 100755 index 0000000..ef8b48d --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/History.md @@ -0,0 +1,38 @@ + +1.0.6 / 2014-06-24 +================== + + * deps: negotiator@0.4.7 + +1.0.5 / 2014-06-20 +================== + + * fix crash when unknown extension given + +1.0.4 / 2014-06-19 +================== + + * use `mime-types` + +1.0.3 / 2014-06-11 +================== + + * deps: negotiator@0.4.6 + - Order by specificity when quality is the same + +1.0.2 / 2014-05-29 +================== + + * Fix interpretation when header not in request + * deps: pin negotiator@0.4.5 + +1.0.1 / 2014-01-18 +================== + + * Identity encoding isn't always acceptable + * deps: negotiator@~0.4.0 + +1.0.0 / 2013-12-27 +================== + + * Genesis diff --git a/node_modules/errorhandler/node_modules/accepts/README.md b/node_modules/errorhandler/node_modules/accepts/README.md new file mode 100755 index 0000000..f65596a --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/README.md @@ -0,0 +1,101 @@ +# Accepts + +[![NPM version](https://badge.fury.io/js/accepts.svg)](http://badge.fury.io/js/accepts) +[![Build Status](https://travis-ci.org/expressjs/accepts.svg?branch=master)](https://travis-ci.org/expressjs/accepts) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/accepts.svg?branch=master)](https://coveralls.io/r/expressjs/accepts) + +Higher level content negotation based on [negotiator](https://github.com/federomero/negotiator). Extracted from [koa](https://github.com/koajs/koa) for general use. + +In addition to negotatior, it allows: + +- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` as well as `('text/html', 'application/json')`. +- Allows type shorthands such as `json`. +- Returns `false` when no types match +- Treats non-existent headers as `*` + +## API + +### var accept = new Accepts(req) + +```js +var accepts = require('accepts') + +http.createServer(function (req, res) { + var accept = accepts(req) +}) +``` + +### accept\[property\]\(\) + +Returns all the explicitly accepted content property as an array in descending priority. + +- `accept.types()` +- `accept.encodings()` +- `accept.charsets()` +- `accept.languages()` + +They are also aliased in singular form such as `accept.type()`. `accept.languages()` is also aliased as `accept.langs()`, etc. + +Note: you should almost never do this in a real app as it defeats the purpose of content negotiation. + +Example: + +```js +// in Google Chrome +var encodings = accept.encodings() // -> ['sdch', 'gzip', 'deflate'] +``` + +Since you probably don't support `sdch`, you should just supply the encodings you support: + +```js +var encoding = accept.encodings('gzip', 'deflate') // -> 'gzip', probably +``` + +### accept\[property\]\(values, ...\) + +You can either have `values` be an array or have an argument list of values. + +If the client does not accept any `values`, `false` will be returned. +If the client accepts any `values`, the preferred `value` will be return. + +For `accept.types()`, shorthand mime types are allowed. + +Example: + +```js +// req.headers.accept = 'application/json' + +accept.types('json') // -> 'json' +accept.types('html', 'json') // -> 'json' +accept.types('html') // -> false + +// req.headers.accept = '' +// which is equivalent to `*` + +accept.types() // -> [], no explicit types +accept.types('text/html', 'text/json') // -> 'text/html', since it was first +``` + +## License + +The MIT License (MIT) + +Copyright (c) 2013 Jonathan Ong me@jongleberry.com + +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. \ No newline at end of file diff --git a/node_modules/errorhandler/node_modules/accepts/index.js b/node_modules/errorhandler/node_modules/accepts/index.js new file mode 100755 index 0000000..75c2b50 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/index.js @@ -0,0 +1,160 @@ +var Negotiator = require('negotiator') +var mime = require('mime-types') + +var slice = [].slice + +module.exports = Accepts + +function Accepts(req) { + if (!(this instanceof Accepts)) + return new Accepts(req) + + this.headers = req.headers + this.negotiator = Negotiator(req) +} + +/** + * Check if the given `type(s)` is acceptable, returning + * the best match when true, otherwise `undefined`, in which + * case you should respond with 406 "Not Acceptable". + * + * The `type` value may be a single mime type string + * such as "application/json", the extension name + * such as "json" or an array `["json", "html", "text/plain"]`. When a list + * or array is given the _best_ match, if any is returned. + * + * Examples: + * + * // Accept: text/html + * this.types('html'); + * // => "html" + * + * // Accept: text/*, application/json + * this.types('html'); + * // => "html" + * this.types('text/html'); + * // => "text/html" + * this.types('json', 'text'); + * // => "json" + * this.types('application/json'); + * // => "application/json" + * + * // Accept: text/*, application/json + * this.types('image/png'); + * this.types('png'); + * // => undefined + * + * // Accept: text/*;q=.5, application/json + * this.types(['html', 'json']); + * this.types('html', 'json'); + * // => "json" + * + * @param {String|Array} type(s)... + * @return {String|Array|Boolean} + * @api public + */ + +Accepts.prototype.type = +Accepts.prototype.types = function (types) { + if (!Array.isArray(types)) types = slice.call(arguments); + var n = this.negotiator; + if (!types.length) return n.mediaTypes(); + if (!this.headers.accept) return types[0]; + var mimes = types.map(extToMime).filter(validMime); + var accepts = n.mediaTypes(mimes); + var first = accepts[0]; + if (!first) return false; + return types[mimes.indexOf(first)]; +} + +/** + * Return accepted encodings or best fit based on `encodings`. + * + * Given `Accept-Encoding: gzip, deflate` + * an array sorted by quality is returned: + * + * ['gzip', 'deflate'] + * + * @param {String|Array} encoding(s)... + * @return {String|Array} + * @api public + */ + +Accepts.prototype.encoding = +Accepts.prototype.encodings = function (encodings) { + if (!Array.isArray(encodings)) encodings = slice.call(arguments); + var n = this.negotiator; + if (!encodings.length) return n.encodings(); + return n.encodings(encodings)[0] || false; +} + +/** + * Return accepted charsets or best fit based on `charsets`. + * + * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5` + * an array sorted by quality is returned: + * + * ['utf-8', 'utf-7', 'iso-8859-1'] + * + * @param {String|Array} charset(s)... + * @return {String|Array} + * @api public + */ + +Accepts.prototype.charset = +Accepts.prototype.charsets = function (charsets) { + if (!Array.isArray(charsets)) charsets = [].slice.call(arguments); + var n = this.negotiator; + if (!charsets.length) return n.charsets(); + if (!this.headers['accept-charset']) return charsets[0]; + return n.charsets(charsets)[0] || false; +} + +/** + * Return accepted languages or best fit based on `langs`. + * + * Given `Accept-Language: en;q=0.8, es, pt` + * an array sorted by quality is returned: + * + * ['es', 'pt', 'en'] + * + * @param {String|Array} lang(s)... + * @return {Array|String} + * @api public + */ + +Accepts.prototype.lang = +Accepts.prototype.langs = +Accepts.prototype.language = +Accepts.prototype.languages = function (langs) { + if (!Array.isArray(langs)) langs = slice.call(arguments); + var n = this.negotiator; + if (!langs.length) return n.languages(); + if (!this.headers['accept-language']) return langs[0]; + return n.languages(langs)[0] || false; +} + +/** + * Convert extnames to mime. + * + * @param {String} type + * @return {String} + * @api private + */ + +function extToMime(type) { + if (~type.indexOf('/')) return type; + return mime.lookup(type); +} + +/** + * Check if mime is valid. + * + * @param {String} type + * @return {String} + * @api private + */ + +function validMime(type) { + return typeof type === 'string'; +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/.npmignore b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/.npmignore new file mode 100755 index 0000000..919d51b --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/.npmignore @@ -0,0 +1,14 @@ +test +build.js + +# OS generated files # +###################### +.DS_Store* +# Icon? +ehthumbs.db +Thumbs.db + +# Node.js # +########### +node_modules +npm-debug.log diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/.travis.yml b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/.travis.yml new file mode 100755 index 0000000..73c85c6 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/.travis.yml @@ -0,0 +1,12 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.11" +matrix: + allow_failures: + - node_js: "0.11" + fast_finish: true +before_install: + # remove build script deps before install + - node -pe 'f="./package.json";p=require(f);d=p.devDependencies;for(k in d){if("co"===k.substr(0,2))delete d[k]}require("fs").writeFileSync(f,JSON.stringify(p,null,2))' diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/LICENSE b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/LICENSE new file mode 100755 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +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/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/Makefile b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/Makefile new file mode 100755 index 0000000..ceaf011 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/Makefile @@ -0,0 +1,9 @@ + +build: + node --harmony-generators build.js + +test: + node test/mime.js + mocha --require should --reporter spec test/test.js + +.PHONY: build test diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/README.md b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/README.md new file mode 100755 index 0000000..8e21ee1 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/README.md @@ -0,0 +1,101 @@ +# mime-types +[![NPM version](https://badge.fury.io/js/mime-types.svg)](https://badge.fury.io/js/mime-types) [![Build Status](https://travis-ci.org/expressjs/mime-types.svg?branch=master)](https://travis-ci.org/expressjs/mime-types) + +The ultimate javascript content-type utility. + +### Install + +```sh +$ npm install mime-types +``` + +#### Similar to [node-mime](https://github.com/broofa/node-mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`, so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- Additional mime types are added such as jade and stylus. Feel free to add more! +- Browser support via Browserify and Component by converting lists to JSON files. + +Otherwise, the API is compatible. + +### Adding Types + +If you'd like to add additional types, +simply create a PR adding the type to `custom.json` and +a reference link to the [sources](SOURCES.md). + +Do __NOT__ edit `mime.json` or `node.json`. +Those are pulled using `build.js`. +You should only touch `custom.json`. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/x-markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/x-markdown') // 'UTF-8' +``` + +### mime.types[extension] = type + +A map of content-types by extension. + +### mime.extensions[type] = [extensions] + +A map of extensions by content-type. + +### mime.define(types) + +Globally add definitions. +`types` must be an object of the form: + +```js +{ + "": [extensions...], + "": [extensions...] +} +``` + +See the `.json` files in `lib/` for examples. + +## License + +[MIT](LICENSE) diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/SOURCES.md b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/SOURCES.md new file mode 100755 index 0000000..1d65012 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/SOURCES.md @@ -0,0 +1,17 @@ + +### Sources for custom types + +This is a list of sources for any custom mime types. +When adding custom mime types, please link to where you found the mime type, +even if it's from an unofficial source. + +- `text/coffeescript` - http://coffeescript.org/#scripts +- `text/x-handlebars-template` - https://handlebarsjs.com/#getting-started +- `text/x-sass` & `text/x-scss` - https://github.com/janlelis/rubybuntu-mime/blob/master/sass.xml +- `text.jsx` - http://facebook.github.io/react/docs/getting-started.html [[2]](https://github.com/facebook/react/blob/f230e0a03154e6f8a616e0da1fb3d97ffa1a6472/vendor/browser-transforms.js#L210) + +[Sources for node.json types](https://github.com/broofa/node-mime/blob/master/types/node.types) + +### Notes on weird types + +- `font/opentype` - This type is technically invalid according to the spec. No valid types begin with `font/`. No-one uses the official type of `application/vnd.ms-opentype` as the community standardized `application/x-font-otf`. However, chrome logs nonsense warnings unless opentype fonts are served with `font/opentype`. [[1]](http://stackoverflow.com/questions/2871655/proper-mime-type-for-fonts) diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/component.json b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/component.json new file mode 100755 index 0000000..fa67a6d --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/component.json @@ -0,0 +1,16 @@ +{ + "name": "mime-types", + "description": "The ultimate javascript content-type utility.", + "version": "0.1.0", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com", + "twitter": "https://twitter.com/jongleberry" + }, + "repository": "expressjs/mime-types", + "license": "MIT", + "main": "lib/index.js", + "scripts": ["lib/index.js"], + "json": ["mime.json", "node.json", "custom.json"] +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/custom.json b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/custom.json new file mode 100755 index 0000000..6137da3 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/custom.json @@ -0,0 +1,27 @@ +{ + "text/jade": [ + "jade" + ], + "text/stylus": [ + "stylus", + "styl" + ], + "text/less": [ + "less" + ], + "text/x-sass": [ + "sass" + ], + "text/x-scss": [ + "scss" + ], + "text/coffeescript": [ + "coffee" + ], + "text/x-handlebars-template": [ + "hbs" + ], + "text/jsx": [ + "jsx" + ] +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/index.js b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/index.js new file mode 100755 index 0000000..27559ea --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/index.js @@ -0,0 +1,74 @@ + +// types[extension] = type +exports.types = Object.create(null) +// extensions[type] = [extensions] +exports.extensions = Object.create(null) +// define more mime types +exports.define = define + +// store the json files +exports.json = { + mime: require('./mime.json'), + node: require('./node.json'), + custom: require('./custom.json'), +} + +exports.lookup = function (string) { + if (!string || typeof string !== "string") return false + string = string.replace(/.*[\.\/\\]/, '').toLowerCase() + if (!string) return false + return exports.types[string] || false +} + +exports.extension = function (type) { + if (!type || typeof type !== "string") return false + type = type.match(/^\s*([^;\s]*)(?:;|\s|$)/) + if (!type) return false + var exts = exports.extensions[type[1].toLowerCase()] + if (!exts || !exts.length) return false + return exts[0] +} + +// type has to be an exact mime type +exports.charset = function (type) { + // special cases + switch (type) { + case 'application/json': return 'UTF-8' + } + + // default text/* to utf-8 + if (/^text\//.test(type)) return 'UTF-8' + + return false +} + +// backwards compatibility +exports.charsets = { + lookup: exports.charset +} + +exports.contentType = function (type) { + if (!type || typeof type !== "string") return false + if (!~type.indexOf('/')) type = exports.lookup(type) + if (!type) return false + if (!~type.indexOf('charset')) { + var charset = exports.charset(type) + if (charset) type += '; charset=' + charset.toLowerCase() + } + return type +} + +define(exports.json.mime) +define(exports.json.node) +define(exports.json.custom) + +function define(json) { + Object.keys(json).forEach(function (type) { + var exts = json[type] || [] + exports.extensions[type] = exports.extensions[type] || [] + exts.forEach(function (ext) { + if (!~exports.extensions[type].indexOf(ext)) exports.extensions[type].push(ext) + exports.types[ext] = type + }) + }) +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/mime.json b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/mime.json new file mode 100755 index 0000000..f445a86 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/mime.json @@ -0,0 +1,3317 @@ +{ + "application/1d-interleaved-parityfec": [], + "application/3gpp-ims+xml": [], + "application/activemessage": [], + "application/andrew-inset": [ + "ez" + ], + "application/applefile": [], + "application/applixware": [ + "aw" + ], + "application/atom+xml": [ + "atom" + ], + "application/atomcat+xml": [ + "atomcat" + ], + "application/atomicmail": [], + "application/atomsvc+xml": [ + "atomsvc" + ], + "application/auth-policy+xml": [], + "application/batch-smtp": [], + "application/beep+xml": [], + "application/calendar+xml": [], + "application/cals-1840": [], + "application/ccmp+xml": [], + "application/ccxml+xml": [ + "ccxml" + ], + "application/cdmi-capability": [ + "cdmia" + ], + "application/cdmi-container": [ + "cdmic" + ], + "application/cdmi-domain": [ + "cdmid" + ], + "application/cdmi-object": [ + "cdmio" + ], + "application/cdmi-queue": [ + "cdmiq" + ], + "application/cea-2018+xml": [], + "application/cellml+xml": [], + "application/cfw": [], + "application/cnrp+xml": [], + "application/commonground": [], + "application/conference-info+xml": [], + "application/cpl+xml": [], + "application/csta+xml": [], + "application/cstadata+xml": [], + "application/cu-seeme": [ + "cu" + ], + "application/cybercash": [], + "application/davmount+xml": [ + "davmount" + ], + "application/dca-rft": [], + "application/dec-dx": [], + "application/dialog-info+xml": [], + "application/dicom": [], + "application/dns": [], + "application/docbook+xml": [ + "dbk" + ], + "application/dskpp+xml": [], + "application/dssc+der": [ + "dssc" + ], + "application/dssc+xml": [ + "xdssc" + ], + "application/dvcs": [], + "application/ecmascript": [ + "ecma" + ], + "application/edi-consent": [], + "application/edi-x12": [], + "application/edifact": [], + "application/emma+xml": [ + "emma" + ], + "application/epp+xml": [], + "application/epub+zip": [ + "epub" + ], + "application/eshop": [], + "application/example": [], + "application/exi": [ + "exi" + ], + "application/fastinfoset": [], + "application/fastsoap": [], + "application/fits": [], + "application/font-tdpfr": [ + "pfr" + ], + "application/framework-attributes+xml": [], + "application/gml+xml": [ + "gml" + ], + "application/gpx+xml": [ + "gpx" + ], + "application/gxf": [ + "gxf" + ], + "application/h224": [], + "application/held+xml": [], + "application/http": [], + "application/hyperstudio": [ + "stk" + ], + "application/ibe-key-request+xml": [], + "application/ibe-pkg-reply+xml": [], + "application/ibe-pp-data": [], + "application/iges": [], + "application/im-iscomposing+xml": [], + "application/index": [], + "application/index.cmd": [], + "application/index.obj": [], + "application/index.response": [], + "application/index.vnd": [], + "application/inkml+xml": [ + "ink", + "inkml" + ], + "application/iotp": [], + "application/ipfix": [ + "ipfix" + ], + "application/ipp": [], + "application/isup": [], + "application/java-archive": [ + "jar" + ], + "application/java-serialized-object": [ + "ser" + ], + "application/java-vm": [ + "class" + ], + "application/javascript": [ + "js" + ], + "application/json": [ + "json" + ], + "application/jsonml+json": [ + "jsonml" + ], + "application/kpml-request+xml": [], + "application/kpml-response+xml": [], + "application/lost+xml": [ + "lostxml" + ], + "application/mac-binhex40": [ + "hqx" + ], + "application/mac-compactpro": [ + "cpt" + ], + "application/macwriteii": [], + "application/mads+xml": [ + "mads" + ], + "application/marc": [ + "mrc" + ], + "application/marcxml+xml": [ + "mrcx" + ], + "application/mathematica": [ + "ma", + "nb", + "mb" + ], + "application/mathml-content+xml": [], + "application/mathml-presentation+xml": [], + "application/mathml+xml": [ + "mathml" + ], + "application/mbms-associated-procedure-description+xml": [], + "application/mbms-deregister+xml": [], + "application/mbms-envelope+xml": [], + "application/mbms-msk+xml": [], + "application/mbms-msk-response+xml": [], + "application/mbms-protection-description+xml": [], + "application/mbms-reception-report+xml": [], + "application/mbms-register+xml": [], + "application/mbms-register-response+xml": [], + "application/mbms-user-service-description+xml": [], + "application/mbox": [ + "mbox" + ], + "application/media_control+xml": [], + "application/mediaservercontrol+xml": [ + "mscml" + ], + "application/metalink+xml": [ + "metalink" + ], + "application/metalink4+xml": [ + "meta4" + ], + "application/mets+xml": [ + "mets" + ], + "application/mikey": [], + "application/mods+xml": [ + "mods" + ], + "application/moss-keys": [], + "application/moss-signature": [], + "application/mosskey-data": [], + "application/mosskey-request": [], + "application/mp21": [ + "m21", + "mp21" + ], + "application/mp4": [ + "mp4s" + ], + "application/mpeg4-generic": [], + "application/mpeg4-iod": [], + "application/mpeg4-iod-xmt": [], + "application/msc-ivr+xml": [], + "application/msc-mixer+xml": [], + "application/msword": [ + "doc", + "dot" + ], + "application/mxf": [ + "mxf" + ], + "application/nasdata": [], + "application/news-checkgroups": [], + "application/news-groupinfo": [], + "application/news-transmission": [], + "application/nss": [], + "application/ocsp-request": [], + "application/ocsp-response": [], + "application/octet-stream": [ + "bin", + "dms", + "lrf", + "mar", + "so", + "dist", + "distz", + "pkg", + "bpk", + "dump", + "elc", + "deploy" + ], + "application/oda": [ + "oda" + ], + "application/oebps-package+xml": [ + "opf" + ], + "application/ogg": [ + "ogx" + ], + "application/omdoc+xml": [ + "omdoc" + ], + "application/onenote": [ + "onetoc", + "onetoc2", + "onetmp", + "onepkg" + ], + "application/oxps": [ + "oxps" + ], + "application/parityfec": [], + "application/patch-ops-error+xml": [ + "xer" + ], + "application/pdf": [ + "pdf" + ], + "application/pgp-encrypted": [ + "pgp" + ], + "application/pgp-keys": [], + "application/pgp-signature": [ + "asc", + "sig" + ], + "application/pics-rules": [ + "prf" + ], + "application/pidf+xml": [], + "application/pidf-diff+xml": [], + "application/pkcs10": [ + "p10" + ], + "application/pkcs7-mime": [ + "p7m", + "p7c" + ], + "application/pkcs7-signature": [ + "p7s" + ], + "application/pkcs8": [ + "p8" + ], + "application/pkix-attr-cert": [ + "ac" + ], + "application/pkix-cert": [ + "cer" + ], + "application/pkix-crl": [ + "crl" + ], + "application/pkix-pkipath": [ + "pkipath" + ], + "application/pkixcmp": [ + "pki" + ], + "application/pls+xml": [ + "pls" + ], + "application/poc-settings+xml": [], + "application/postscript": [ + "ai", + "eps", + "ps" + ], + "application/prs.alvestrand.titrax-sheet": [], + "application/prs.cww": [ + "cww" + ], + "application/prs.nprend": [], + "application/prs.plucker": [], + "application/prs.rdf-xml-crypt": [], + "application/prs.xsf+xml": [], + "application/pskc+xml": [ + "pskcxml" + ], + "application/qsig": [], + "application/rdf+xml": [ + "rdf" + ], + "application/reginfo+xml": [ + "rif" + ], + "application/relax-ng-compact-syntax": [ + "rnc" + ], + "application/remote-printing": [], + "application/resource-lists+xml": [ + "rl" + ], + "application/resource-lists-diff+xml": [ + "rld" + ], + "application/riscos": [], + "application/rlmi+xml": [], + "application/rls-services+xml": [ + "rs" + ], + "application/rpki-ghostbusters": [ + "gbr" + ], + "application/rpki-manifest": [ + "mft" + ], + "application/rpki-roa": [ + "roa" + ], + "application/rpki-updown": [], + "application/rsd+xml": [ + "rsd" + ], + "application/rss+xml": [ + "rss" + ], + "application/rtf": [ + "rtf" + ], + "application/rtx": [], + "application/samlassertion+xml": [], + "application/samlmetadata+xml": [], + "application/sbml+xml": [ + "sbml" + ], + "application/scvp-cv-request": [ + "scq" + ], + "application/scvp-cv-response": [ + "scs" + ], + "application/scvp-vp-request": [ + "spq" + ], + "application/scvp-vp-response": [ + "spp" + ], + "application/sdp": [ + "sdp" + ], + "application/set-payment": [], + "application/set-payment-initiation": [ + "setpay" + ], + "application/set-registration": [], + "application/set-registration-initiation": [ + "setreg" + ], + "application/sgml": [], + "application/sgml-open-catalog": [], + "application/shf+xml": [ + "shf" + ], + "application/sieve": [], + "application/simple-filter+xml": [], + "application/simple-message-summary": [], + "application/simplesymbolcontainer": [], + "application/slate": [], + "application/smil": [], + "application/smil+xml": [ + "smi", + "smil" + ], + "application/soap+fastinfoset": [], + "application/soap+xml": [], + "application/sparql-query": [ + "rq" + ], + "application/sparql-results+xml": [ + "srx" + ], + "application/spirits-event+xml": [], + "application/srgs": [ + "gram" + ], + "application/srgs+xml": [ + "grxml" + ], + "application/sru+xml": [ + "sru" + ], + "application/ssdl+xml": [ + "ssdl" + ], + "application/ssml+xml": [ + "ssml" + ], + "application/tamp-apex-update": [], + "application/tamp-apex-update-confirm": [], + "application/tamp-community-update": [], + "application/tamp-community-update-confirm": [], + "application/tamp-error": [], + "application/tamp-sequence-adjust": [], + "application/tamp-sequence-adjust-confirm": [], + "application/tamp-status-query": [], + "application/tamp-status-response": [], + "application/tamp-update": [], + "application/tamp-update-confirm": [], + "application/tei+xml": [ + "tei", + "teicorpus" + ], + "application/thraud+xml": [ + "tfi" + ], + "application/timestamp-query": [], + "application/timestamp-reply": [], + "application/timestamped-data": [ + "tsd" + ], + "application/tve-trigger": [], + "application/ulpfec": [], + "application/vcard+xml": [], + "application/vemmi": [], + "application/vividence.scriptfile": [], + "application/vnd.3gpp.bsf+xml": [], + "application/vnd.3gpp.pic-bw-large": [ + "plb" + ], + "application/vnd.3gpp.pic-bw-small": [ + "psb" + ], + "application/vnd.3gpp.pic-bw-var": [ + "pvb" + ], + "application/vnd.3gpp.sms": [], + "application/vnd.3gpp2.bcmcsinfo+xml": [], + "application/vnd.3gpp2.sms": [], + "application/vnd.3gpp2.tcap": [ + "tcap" + ], + "application/vnd.3m.post-it-notes": [ + "pwn" + ], + "application/vnd.accpac.simply.aso": [ + "aso" + ], + "application/vnd.accpac.simply.imp": [ + "imp" + ], + "application/vnd.acucobol": [ + "acu" + ], + "application/vnd.acucorp": [ + "atc", + "acutc" + ], + "application/vnd.adobe.air-application-installer-package+zip": [ + "air" + ], + "application/vnd.adobe.formscentral.fcdt": [ + "fcdt" + ], + "application/vnd.adobe.fxp": [ + "fxp", + "fxpl" + ], + "application/vnd.adobe.partial-upload": [], + "application/vnd.adobe.xdp+xml": [ + "xdp" + ], + "application/vnd.adobe.xfdf": [ + "xfdf" + ], + "application/vnd.aether.imp": [], + "application/vnd.ah-barcode": [], + "application/vnd.ahead.space": [ + "ahead" + ], + "application/vnd.airzip.filesecure.azf": [ + "azf" + ], + "application/vnd.airzip.filesecure.azs": [ + "azs" + ], + "application/vnd.amazon.ebook": [ + "azw" + ], + "application/vnd.americandynamics.acc": [ + "acc" + ], + "application/vnd.amiga.ami": [ + "ami" + ], + "application/vnd.amundsen.maze+xml": [], + "application/vnd.android.package-archive": [ + "apk" + ], + "application/vnd.anser-web-certificate-issue-initiation": [ + "cii" + ], + "application/vnd.anser-web-funds-transfer-initiation": [ + "fti" + ], + "application/vnd.antix.game-component": [ + "atx" + ], + "application/vnd.apple.installer+xml": [ + "mpkg" + ], + "application/vnd.apple.mpegurl": [ + "m3u8" + ], + "application/vnd.arastra.swi": [], + "application/vnd.aristanetworks.swi": [ + "swi" + ], + "application/vnd.astraea-software.iota": [ + "iota" + ], + "application/vnd.audiograph": [ + "aep" + ], + "application/vnd.autopackage": [], + "application/vnd.avistar+xml": [], + "application/vnd.blueice.multipass": [ + "mpm" + ], + "application/vnd.bluetooth.ep.oob": [], + "application/vnd.bmi": [ + "bmi" + ], + "application/vnd.businessobjects": [ + "rep" + ], + "application/vnd.cab-jscript": [], + "application/vnd.canon-cpdl": [], + "application/vnd.canon-lips": [], + "application/vnd.cendio.thinlinc.clientconf": [], + "application/vnd.chemdraw+xml": [ + "cdxml" + ], + "application/vnd.chipnuts.karaoke-mmd": [ + "mmd" + ], + "application/vnd.cinderella": [ + "cdy" + ], + "application/vnd.cirpack.isdn-ext": [], + "application/vnd.claymore": [ + "cla" + ], + "application/vnd.cloanto.rp9": [ + "rp9" + ], + "application/vnd.clonk.c4group": [ + "c4g", + "c4d", + "c4f", + "c4p", + "c4u" + ], + "application/vnd.cluetrust.cartomobile-config": [ + "c11amc" + ], + "application/vnd.cluetrust.cartomobile-config-pkg": [ + "c11amz" + ], + "application/vnd.collection+json": [], + "application/vnd.commerce-battelle": [], + "application/vnd.commonspace": [ + "csp" + ], + "application/vnd.contact.cmsg": [ + "cdbcmsg" + ], + "application/vnd.cosmocaller": [ + "cmc" + ], + "application/vnd.crick.clicker": [ + "clkx" + ], + "application/vnd.crick.clicker.keyboard": [ + "clkk" + ], + "application/vnd.crick.clicker.palette": [ + "clkp" + ], + "application/vnd.crick.clicker.template": [ + "clkt" + ], + "application/vnd.crick.clicker.wordbank": [ + "clkw" + ], + "application/vnd.criticaltools.wbs+xml": [ + "wbs" + ], + "application/vnd.ctc-posml": [ + "pml" + ], + "application/vnd.ctct.ws+xml": [], + "application/vnd.cups-pdf": [], + "application/vnd.cups-postscript": [], + "application/vnd.cups-ppd": [ + "ppd" + ], + "application/vnd.cups-raster": [], + "application/vnd.cups-raw": [], + "application/vnd.curl": [], + "application/vnd.curl.car": [ + "car" + ], + "application/vnd.curl.pcurl": [ + "pcurl" + ], + "application/vnd.cybank": [], + "application/vnd.dart": [ + "dart" + ], + "application/vnd.data-vision.rdz": [ + "rdz" + ], + "application/vnd.dece.data": [ + "uvf", + "uvvf", + "uvd", + "uvvd" + ], + "application/vnd.dece.ttml+xml": [ + "uvt", + "uvvt" + ], + "application/vnd.dece.unspecified": [ + "uvx", + "uvvx" + ], + "application/vnd.dece.zip": [ + "uvz", + "uvvz" + ], + "application/vnd.denovo.fcselayout-link": [ + "fe_launch" + ], + "application/vnd.dir-bi.plate-dl-nosuffix": [], + "application/vnd.dna": [ + "dna" + ], + "application/vnd.dolby.mlp": [ + "mlp" + ], + "application/vnd.dolby.mobile.1": [], + "application/vnd.dolby.mobile.2": [], + "application/vnd.dpgraph": [ + "dpg" + ], + "application/vnd.dreamfactory": [ + "dfac" + ], + "application/vnd.ds-keypoint": [ + "kpxx" + ], + "application/vnd.dvb.ait": [ + "ait" + ], + "application/vnd.dvb.dvbj": [], + "application/vnd.dvb.esgcontainer": [], + "application/vnd.dvb.ipdcdftnotifaccess": [], + "application/vnd.dvb.ipdcesgaccess": [], + "application/vnd.dvb.ipdcesgaccess2": [], + "application/vnd.dvb.ipdcesgpdd": [], + "application/vnd.dvb.ipdcroaming": [], + "application/vnd.dvb.iptv.alfec-base": [], + "application/vnd.dvb.iptv.alfec-enhancement": [], + "application/vnd.dvb.notif-aggregate-root+xml": [], + "application/vnd.dvb.notif-container+xml": [], + "application/vnd.dvb.notif-generic+xml": [], + "application/vnd.dvb.notif-ia-msglist+xml": [], + "application/vnd.dvb.notif-ia-registration-request+xml": [], + "application/vnd.dvb.notif-ia-registration-response+xml": [], + "application/vnd.dvb.notif-init+xml": [], + "application/vnd.dvb.pfr": [], + "application/vnd.dvb.service": [ + "svc" + ], + "application/vnd.dxr": [], + "application/vnd.dynageo": [ + "geo" + ], + "application/vnd.easykaraoke.cdgdownload": [], + "application/vnd.ecdis-update": [], + "application/vnd.ecowin.chart": [ + "mag" + ], + "application/vnd.ecowin.filerequest": [], + "application/vnd.ecowin.fileupdate": [], + "application/vnd.ecowin.series": [], + "application/vnd.ecowin.seriesrequest": [], + "application/vnd.ecowin.seriesupdate": [], + "application/vnd.emclient.accessrequest+xml": [], + "application/vnd.enliven": [ + "nml" + ], + "application/vnd.eprints.data+xml": [], + "application/vnd.epson.esf": [ + "esf" + ], + "application/vnd.epson.msf": [ + "msf" + ], + "application/vnd.epson.quickanime": [ + "qam" + ], + "application/vnd.epson.salt": [ + "slt" + ], + "application/vnd.epson.ssf": [ + "ssf" + ], + "application/vnd.ericsson.quickcall": [], + "application/vnd.eszigno3+xml": [ + "es3", + "et3" + ], + "application/vnd.etsi.aoc+xml": [], + "application/vnd.etsi.cug+xml": [], + "application/vnd.etsi.iptvcommand+xml": [], + "application/vnd.etsi.iptvdiscovery+xml": [], + "application/vnd.etsi.iptvprofile+xml": [], + "application/vnd.etsi.iptvsad-bc+xml": [], + "application/vnd.etsi.iptvsad-cod+xml": [], + "application/vnd.etsi.iptvsad-npvr+xml": [], + "application/vnd.etsi.iptvservice+xml": [], + "application/vnd.etsi.iptvsync+xml": [], + "application/vnd.etsi.iptvueprofile+xml": [], + "application/vnd.etsi.mcid+xml": [], + "application/vnd.etsi.overload-control-policy-dataset+xml": [], + "application/vnd.etsi.sci+xml": [], + "application/vnd.etsi.simservs+xml": [], + "application/vnd.etsi.tsl+xml": [], + "application/vnd.etsi.tsl.der": [], + "application/vnd.eudora.data": [], + "application/vnd.ezpix-album": [ + "ez2" + ], + "application/vnd.ezpix-package": [ + "ez3" + ], + "application/vnd.f-secure.mobile": [], + "application/vnd.fdf": [ + "fdf" + ], + "application/vnd.fdsn.mseed": [ + "mseed" + ], + "application/vnd.fdsn.seed": [ + "seed", + "dataless" + ], + "application/vnd.ffsns": [], + "application/vnd.fints": [], + "application/vnd.flographit": [ + "gph" + ], + "application/vnd.fluxtime.clip": [ + "ftc" + ], + "application/vnd.font-fontforge-sfd": [], + "application/vnd.framemaker": [ + "fm", + "frame", + "maker", + "book" + ], + "application/vnd.frogans.fnc": [ + "fnc" + ], + "application/vnd.frogans.ltf": [ + "ltf" + ], + "application/vnd.fsc.weblaunch": [ + "fsc" + ], + "application/vnd.fujitsu.oasys": [ + "oas" + ], + "application/vnd.fujitsu.oasys2": [ + "oa2" + ], + "application/vnd.fujitsu.oasys3": [ + "oa3" + ], + "application/vnd.fujitsu.oasysgp": [ + "fg5" + ], + "application/vnd.fujitsu.oasysprs": [ + "bh2" + ], + "application/vnd.fujixerox.art-ex": [], + "application/vnd.fujixerox.art4": [], + "application/vnd.fujixerox.hbpl": [], + "application/vnd.fujixerox.ddd": [ + "ddd" + ], + "application/vnd.fujixerox.docuworks": [ + "xdw" + ], + "application/vnd.fujixerox.docuworks.binder": [ + "xbd" + ], + "application/vnd.fut-misnet": [], + "application/vnd.fuzzysheet": [ + "fzs" + ], + "application/vnd.genomatix.tuxedo": [ + "txd" + ], + "application/vnd.geocube+xml": [], + "application/vnd.geogebra.file": [ + "ggb" + ], + "application/vnd.geogebra.tool": [ + "ggt" + ], + "application/vnd.geometry-explorer": [ + "gex", + "gre" + ], + "application/vnd.geonext": [ + "gxt" + ], + "application/vnd.geoplan": [ + "g2w" + ], + "application/vnd.geospace": [ + "g3w" + ], + "application/vnd.globalplatform.card-content-mgt": [], + "application/vnd.globalplatform.card-content-mgt-response": [], + "application/vnd.gmx": [ + "gmx" + ], + "application/vnd.google-earth.kml+xml": [ + "kml" + ], + "application/vnd.google-earth.kmz": [ + "kmz" + ], + "application/vnd.grafeq": [ + "gqf", + "gqs" + ], + "application/vnd.gridmp": [], + "application/vnd.groove-account": [ + "gac" + ], + "application/vnd.groove-help": [ + "ghf" + ], + "application/vnd.groove-identity-message": [ + "gim" + ], + "application/vnd.groove-injector": [ + "grv" + ], + "application/vnd.groove-tool-message": [ + "gtm" + ], + "application/vnd.groove-tool-template": [ + "tpl" + ], + "application/vnd.groove-vcard": [ + "vcg" + ], + "application/vnd.hal+json": [], + "application/vnd.hal+xml": [ + "hal" + ], + "application/vnd.handheld-entertainment+xml": [ + "zmm" + ], + "application/vnd.hbci": [ + "hbci" + ], + "application/vnd.hcl-bireports": [], + "application/vnd.hhe.lesson-player": [ + "les" + ], + "application/vnd.hp-hpgl": [ + "hpgl" + ], + "application/vnd.hp-hpid": [ + "hpid" + ], + "application/vnd.hp-hps": [ + "hps" + ], + "application/vnd.hp-jlyt": [ + "jlt" + ], + "application/vnd.hp-pcl": [ + "pcl" + ], + "application/vnd.hp-pclxl": [ + "pclxl" + ], + "application/vnd.httphone": [], + "application/vnd.hzn-3d-crossword": [], + "application/vnd.ibm.afplinedata": [], + "application/vnd.ibm.electronic-media": [], + "application/vnd.ibm.minipay": [ + "mpy" + ], + "application/vnd.ibm.modcap": [ + "afp", + "listafp", + "list3820" + ], + "application/vnd.ibm.rights-management": [ + "irm" + ], + "application/vnd.ibm.secure-container": [ + "sc" + ], + "application/vnd.iccprofile": [ + "icc", + "icm" + ], + "application/vnd.igloader": [ + "igl" + ], + "application/vnd.immervision-ivp": [ + "ivp" + ], + "application/vnd.immervision-ivu": [ + "ivu" + ], + "application/vnd.informedcontrol.rms+xml": [], + "application/vnd.informix-visionary": [], + "application/vnd.infotech.project": [], + "application/vnd.infotech.project+xml": [], + "application/vnd.innopath.wamp.notification": [], + "application/vnd.insors.igm": [ + "igm" + ], + "application/vnd.intercon.formnet": [ + "xpw", + "xpx" + ], + "application/vnd.intergeo": [ + "i2g" + ], + "application/vnd.intertrust.digibox": [], + "application/vnd.intertrust.nncp": [], + "application/vnd.intu.qbo": [ + "qbo" + ], + "application/vnd.intu.qfx": [ + "qfx" + ], + "application/vnd.iptc.g2.conceptitem+xml": [], + "application/vnd.iptc.g2.knowledgeitem+xml": [], + "application/vnd.iptc.g2.newsitem+xml": [], + "application/vnd.iptc.g2.newsmessage+xml": [], + "application/vnd.iptc.g2.packageitem+xml": [], + "application/vnd.iptc.g2.planningitem+xml": [], + "application/vnd.ipunplugged.rcprofile": [ + "rcprofile" + ], + "application/vnd.irepository.package+xml": [ + "irp" + ], + "application/vnd.is-xpr": [ + "xpr" + ], + "application/vnd.isac.fcs": [ + "fcs" + ], + "application/vnd.jam": [ + "jam" + ], + "application/vnd.japannet-directory-service": [], + "application/vnd.japannet-jpnstore-wakeup": [], + "application/vnd.japannet-payment-wakeup": [], + "application/vnd.japannet-registration": [], + "application/vnd.japannet-registration-wakeup": [], + "application/vnd.japannet-setstore-wakeup": [], + "application/vnd.japannet-verification": [], + "application/vnd.japannet-verification-wakeup": [], + "application/vnd.jcp.javame.midlet-rms": [ + "rms" + ], + "application/vnd.jisp": [ + "jisp" + ], + "application/vnd.joost.joda-archive": [ + "joda" + ], + "application/vnd.kahootz": [ + "ktz", + "ktr" + ], + "application/vnd.kde.karbon": [ + "karbon" + ], + "application/vnd.kde.kchart": [ + "chrt" + ], + "application/vnd.kde.kformula": [ + "kfo" + ], + "application/vnd.kde.kivio": [ + "flw" + ], + "application/vnd.kde.kontour": [ + "kon" + ], + "application/vnd.kde.kpresenter": [ + "kpr", + "kpt" + ], + "application/vnd.kde.kspread": [ + "ksp" + ], + "application/vnd.kde.kword": [ + "kwd", + "kwt" + ], + "application/vnd.kenameaapp": [ + "htke" + ], + "application/vnd.kidspiration": [ + "kia" + ], + "application/vnd.kinar": [ + "kne", + "knp" + ], + "application/vnd.koan": [ + "skp", + "skd", + "skt", + "skm" + ], + "application/vnd.kodak-descriptor": [ + "sse" + ], + "application/vnd.las.las+xml": [ + "lasxml" + ], + "application/vnd.liberty-request+xml": [], + "application/vnd.llamagraphics.life-balance.desktop": [ + "lbd" + ], + "application/vnd.llamagraphics.life-balance.exchange+xml": [ + "lbe" + ], + "application/vnd.lotus-1-2-3": [ + "123" + ], + "application/vnd.lotus-approach": [ + "apr" + ], + "application/vnd.lotus-freelance": [ + "pre" + ], + "application/vnd.lotus-notes": [ + "nsf" + ], + "application/vnd.lotus-organizer": [ + "org" + ], + "application/vnd.lotus-screencam": [ + "scm" + ], + "application/vnd.lotus-wordpro": [ + "lwp" + ], + "application/vnd.macports.portpkg": [ + "portpkg" + ], + "application/vnd.marlin.drm.actiontoken+xml": [], + "application/vnd.marlin.drm.conftoken+xml": [], + "application/vnd.marlin.drm.license+xml": [], + "application/vnd.marlin.drm.mdcf": [], + "application/vnd.mcd": [ + "mcd" + ], + "application/vnd.medcalcdata": [ + "mc1" + ], + "application/vnd.mediastation.cdkey": [ + "cdkey" + ], + "application/vnd.meridian-slingshot": [], + "application/vnd.mfer": [ + "mwf" + ], + "application/vnd.mfmp": [ + "mfm" + ], + "application/vnd.micrografx.flo": [ + "flo" + ], + "application/vnd.micrografx.igx": [ + "igx" + ], + "application/vnd.mif": [ + "mif" + ], + "application/vnd.minisoft-hp3000-save": [], + "application/vnd.mitsubishi.misty-guard.trustweb": [], + "application/vnd.mobius.daf": [ + "daf" + ], + "application/vnd.mobius.dis": [ + "dis" + ], + "application/vnd.mobius.mbk": [ + "mbk" + ], + "application/vnd.mobius.mqy": [ + "mqy" + ], + "application/vnd.mobius.msl": [ + "msl" + ], + "application/vnd.mobius.plc": [ + "plc" + ], + "application/vnd.mobius.txf": [ + "txf" + ], + "application/vnd.mophun.application": [ + "mpn" + ], + "application/vnd.mophun.certificate": [ + "mpc" + ], + "application/vnd.motorola.flexsuite": [], + "application/vnd.motorola.flexsuite.adsi": [], + "application/vnd.motorola.flexsuite.fis": [], + "application/vnd.motorola.flexsuite.gotap": [], + "application/vnd.motorola.flexsuite.kmr": [], + "application/vnd.motorola.flexsuite.ttc": [], + "application/vnd.motorola.flexsuite.wem": [], + "application/vnd.motorola.iprm": [], + "application/vnd.mozilla.xul+xml": [ + "xul" + ], + "application/vnd.ms-artgalry": [ + "cil" + ], + "application/vnd.ms-asf": [], + "application/vnd.ms-cab-compressed": [ + "cab" + ], + "application/vnd.ms-color.iccprofile": [], + "application/vnd.ms-excel": [ + "xls", + "xlm", + "xla", + "xlc", + "xlt", + "xlw" + ], + "application/vnd.ms-excel.addin.macroenabled.12": [ + "xlam" + ], + "application/vnd.ms-excel.sheet.binary.macroenabled.12": [ + "xlsb" + ], + "application/vnd.ms-excel.sheet.macroenabled.12": [ + "xlsm" + ], + "application/vnd.ms-excel.template.macroenabled.12": [ + "xltm" + ], + "application/vnd.ms-fontobject": [ + "eot" + ], + "application/vnd.ms-htmlhelp": [ + "chm" + ], + "application/vnd.ms-ims": [ + "ims" + ], + "application/vnd.ms-lrm": [ + "lrm" + ], + "application/vnd.ms-office.activex+xml": [], + "application/vnd.ms-officetheme": [ + "thmx" + ], + "application/vnd.ms-opentype": [], + "application/vnd.ms-package.obfuscated-opentype": [], + "application/vnd.ms-pki.seccat": [ + "cat" + ], + "application/vnd.ms-pki.stl": [ + "stl" + ], + "application/vnd.ms-playready.initiator+xml": [], + "application/vnd.ms-powerpoint": [ + "ppt", + "pps", + "pot" + ], + "application/vnd.ms-powerpoint.addin.macroenabled.12": [ + "ppam" + ], + "application/vnd.ms-powerpoint.presentation.macroenabled.12": [ + "pptm" + ], + "application/vnd.ms-powerpoint.slide.macroenabled.12": [ + "sldm" + ], + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": [ + "ppsm" + ], + "application/vnd.ms-powerpoint.template.macroenabled.12": [ + "potm" + ], + "application/vnd.ms-printing.printticket+xml": [], + "application/vnd.ms-project": [ + "mpp", + "mpt" + ], + "application/vnd.ms-tnef": [], + "application/vnd.ms-wmdrm.lic-chlg-req": [], + "application/vnd.ms-wmdrm.lic-resp": [], + "application/vnd.ms-wmdrm.meter-chlg-req": [], + "application/vnd.ms-wmdrm.meter-resp": [], + "application/vnd.ms-word.document.macroenabled.12": [ + "docm" + ], + "application/vnd.ms-word.template.macroenabled.12": [ + "dotm" + ], + "application/vnd.ms-works": [ + "wps", + "wks", + "wcm", + "wdb" + ], + "application/vnd.ms-wpl": [ + "wpl" + ], + "application/vnd.ms-xpsdocument": [ + "xps" + ], + "application/vnd.mseq": [ + "mseq" + ], + "application/vnd.msign": [], + "application/vnd.multiad.creator": [], + "application/vnd.multiad.creator.cif": [], + "application/vnd.music-niff": [], + "application/vnd.musician": [ + "mus" + ], + "application/vnd.muvee.style": [ + "msty" + ], + "application/vnd.mynfc": [ + "taglet" + ], + "application/vnd.ncd.control": [], + "application/vnd.ncd.reference": [], + "application/vnd.nervana": [], + "application/vnd.netfpx": [], + "application/vnd.neurolanguage.nlu": [ + "nlu" + ], + "application/vnd.nitf": [ + "ntf", + "nitf" + ], + "application/vnd.noblenet-directory": [ + "nnd" + ], + "application/vnd.noblenet-sealer": [ + "nns" + ], + "application/vnd.noblenet-web": [ + "nnw" + ], + "application/vnd.nokia.catalogs": [], + "application/vnd.nokia.conml+wbxml": [], + "application/vnd.nokia.conml+xml": [], + "application/vnd.nokia.isds-radio-presets": [], + "application/vnd.nokia.iptv.config+xml": [], + "application/vnd.nokia.landmark+wbxml": [], + "application/vnd.nokia.landmark+xml": [], + "application/vnd.nokia.landmarkcollection+xml": [], + "application/vnd.nokia.n-gage.ac+xml": [], + "application/vnd.nokia.n-gage.data": [ + "ngdat" + ], + "application/vnd.nokia.ncd": [], + "application/vnd.nokia.pcd+wbxml": [], + "application/vnd.nokia.pcd+xml": [], + "application/vnd.nokia.radio-preset": [ + "rpst" + ], + "application/vnd.nokia.radio-presets": [ + "rpss" + ], + "application/vnd.novadigm.edm": [ + "edm" + ], + "application/vnd.novadigm.edx": [ + "edx" + ], + "application/vnd.novadigm.ext": [ + "ext" + ], + "application/vnd.ntt-local.file-transfer": [], + "application/vnd.ntt-local.sip-ta_remote": [], + "application/vnd.ntt-local.sip-ta_tcp_stream": [], + "application/vnd.oasis.opendocument.chart": [ + "odc" + ], + "application/vnd.oasis.opendocument.chart-template": [ + "otc" + ], + "application/vnd.oasis.opendocument.database": [ + "odb" + ], + "application/vnd.oasis.opendocument.formula": [ + "odf" + ], + "application/vnd.oasis.opendocument.formula-template": [ + "odft" + ], + "application/vnd.oasis.opendocument.graphics": [ + "odg" + ], + "application/vnd.oasis.opendocument.graphics-template": [ + "otg" + ], + "application/vnd.oasis.opendocument.image": [ + "odi" + ], + "application/vnd.oasis.opendocument.image-template": [ + "oti" + ], + "application/vnd.oasis.opendocument.presentation": [ + "odp" + ], + "application/vnd.oasis.opendocument.presentation-template": [ + "otp" + ], + "application/vnd.oasis.opendocument.spreadsheet": [ + "ods" + ], + "application/vnd.oasis.opendocument.spreadsheet-template": [ + "ots" + ], + "application/vnd.oasis.opendocument.text": [ + "odt" + ], + "application/vnd.oasis.opendocument.text-master": [ + "odm" + ], + "application/vnd.oasis.opendocument.text-template": [ + "ott" + ], + "application/vnd.oasis.opendocument.text-web": [ + "oth" + ], + "application/vnd.obn": [], + "application/vnd.oftn.l10n+json": [], + "application/vnd.oipf.contentaccessdownload+xml": [], + "application/vnd.oipf.contentaccessstreaming+xml": [], + "application/vnd.oipf.cspg-hexbinary": [], + "application/vnd.oipf.dae.svg+xml": [], + "application/vnd.oipf.dae.xhtml+xml": [], + "application/vnd.oipf.mippvcontrolmessage+xml": [], + "application/vnd.oipf.pae.gem": [], + "application/vnd.oipf.spdiscovery+xml": [], + "application/vnd.oipf.spdlist+xml": [], + "application/vnd.oipf.ueprofile+xml": [], + "application/vnd.oipf.userprofile+xml": [], + "application/vnd.olpc-sugar": [ + "xo" + ], + "application/vnd.oma-scws-config": [], + "application/vnd.oma-scws-http-request": [], + "application/vnd.oma-scws-http-response": [], + "application/vnd.oma.bcast.associated-procedure-parameter+xml": [], + "application/vnd.oma.bcast.drm-trigger+xml": [], + "application/vnd.oma.bcast.imd+xml": [], + "application/vnd.oma.bcast.ltkm": [], + "application/vnd.oma.bcast.notification+xml": [], + "application/vnd.oma.bcast.provisioningtrigger": [], + "application/vnd.oma.bcast.sgboot": [], + "application/vnd.oma.bcast.sgdd+xml": [], + "application/vnd.oma.bcast.sgdu": [], + "application/vnd.oma.bcast.simple-symbol-container": [], + "application/vnd.oma.bcast.smartcard-trigger+xml": [], + "application/vnd.oma.bcast.sprov+xml": [], + "application/vnd.oma.bcast.stkm": [], + "application/vnd.oma.cab-address-book+xml": [], + "application/vnd.oma.cab-feature-handler+xml": [], + "application/vnd.oma.cab-pcc+xml": [], + "application/vnd.oma.cab-user-prefs+xml": [], + "application/vnd.oma.dcd": [], + "application/vnd.oma.dcdc": [], + "application/vnd.oma.dd2+xml": [ + "dd2" + ], + "application/vnd.oma.drm.risd+xml": [], + "application/vnd.oma.group-usage-list+xml": [], + "application/vnd.oma.pal+xml": [], + "application/vnd.oma.poc.detailed-progress-report+xml": [], + "application/vnd.oma.poc.final-report+xml": [], + "application/vnd.oma.poc.groups+xml": [], + "application/vnd.oma.poc.invocation-descriptor+xml": [], + "application/vnd.oma.poc.optimized-progress-report+xml": [], + "application/vnd.oma.push": [], + "application/vnd.oma.scidm.messages+xml": [], + "application/vnd.oma.xcap-directory+xml": [], + "application/vnd.omads-email+xml": [], + "application/vnd.omads-file+xml": [], + "application/vnd.omads-folder+xml": [], + "application/vnd.omaloc-supl-init": [], + "application/vnd.openofficeorg.extension": [ + "oxt" + ], + "application/vnd.openxmlformats-officedocument.custom-properties+xml": [], + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": [], + "application/vnd.openxmlformats-officedocument.drawing+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": [], + "application/vnd.openxmlformats-officedocument.extended-properties+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.presentation": [ + "pptx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slide": [ + "sldx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": [ + "ppsx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.template": [ + "potx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": [ + "xlsx" + ], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": [ + "xltx" + ], + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": [], + "application/vnd.openxmlformats-officedocument.theme+xml": [], + "application/vnd.openxmlformats-officedocument.themeoverride+xml": [], + "application/vnd.openxmlformats-officedocument.vmldrawing": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": [ + "docx" + ], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": [ + "dotx" + ], + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": [], + "application/vnd.openxmlformats-package.core-properties+xml": [], + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": [], + "application/vnd.openxmlformats-package.relationships+xml": [], + "application/vnd.quobject-quoxdocument": [], + "application/vnd.osa.netdeploy": [], + "application/vnd.osgeo.mapguide.package": [ + "mgp" + ], + "application/vnd.osgi.bundle": [], + "application/vnd.osgi.dp": [ + "dp" + ], + "application/vnd.osgi.subsystem": [ + "esa" + ], + "application/vnd.otps.ct-kip+xml": [], + "application/vnd.palm": [ + "pdb", + "pqa", + "oprc" + ], + "application/vnd.paos.xml": [], + "application/vnd.pawaafile": [ + "paw" + ], + "application/vnd.pg.format": [ + "str" + ], + "application/vnd.pg.osasli": [ + "ei6" + ], + "application/vnd.piaccess.application-licence": [], + "application/vnd.picsel": [ + "efif" + ], + "application/vnd.pmi.widget": [ + "wg" + ], + "application/vnd.poc.group-advertisement+xml": [], + "application/vnd.pocketlearn": [ + "plf" + ], + "application/vnd.powerbuilder6": [ + "pbd" + ], + "application/vnd.powerbuilder6-s": [], + "application/vnd.powerbuilder7": [], + "application/vnd.powerbuilder7-s": [], + "application/vnd.powerbuilder75": [], + "application/vnd.powerbuilder75-s": [], + "application/vnd.preminet": [], + "application/vnd.previewsystems.box": [ + "box" + ], + "application/vnd.proteus.magazine": [ + "mgz" + ], + "application/vnd.publishare-delta-tree": [ + "qps" + ], + "application/vnd.pvi.ptid1": [ + "ptid" + ], + "application/vnd.pwg-multiplexed": [], + "application/vnd.pwg-xhtml-print+xml": [], + "application/vnd.qualcomm.brew-app-res": [], + "application/vnd.quark.quarkxpress": [ + "qxd", + "qxt", + "qwd", + "qwt", + "qxl", + "qxb" + ], + "application/vnd.radisys.moml+xml": [], + "application/vnd.radisys.msml+xml": [], + "application/vnd.radisys.msml-audit+xml": [], + "application/vnd.radisys.msml-audit-conf+xml": [], + "application/vnd.radisys.msml-audit-conn+xml": [], + "application/vnd.radisys.msml-audit-dialog+xml": [], + "application/vnd.radisys.msml-audit-stream+xml": [], + "application/vnd.radisys.msml-conf+xml": [], + "application/vnd.radisys.msml-dialog+xml": [], + "application/vnd.radisys.msml-dialog-base+xml": [], + "application/vnd.radisys.msml-dialog-fax-detect+xml": [], + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": [], + "application/vnd.radisys.msml-dialog-group+xml": [], + "application/vnd.radisys.msml-dialog-speech+xml": [], + "application/vnd.radisys.msml-dialog-transform+xml": [], + "application/vnd.rainstor.data": [], + "application/vnd.rapid": [], + "application/vnd.realvnc.bed": [ + "bed" + ], + "application/vnd.recordare.musicxml": [ + "mxl" + ], + "application/vnd.recordare.musicxml+xml": [ + "musicxml" + ], + "application/vnd.renlearn.rlprint": [], + "application/vnd.rig.cryptonote": [ + "cryptonote" + ], + "application/vnd.rim.cod": [ + "cod" + ], + "application/vnd.rn-realmedia": [ + "rm" + ], + "application/vnd.rn-realmedia-vbr": [ + "rmvb" + ], + "application/vnd.route66.link66+xml": [ + "link66" + ], + "application/vnd.rs-274x": [], + "application/vnd.ruckus.download": [], + "application/vnd.s3sms": [], + "application/vnd.sailingtracker.track": [ + "st" + ], + "application/vnd.sbm.cid": [], + "application/vnd.sbm.mid2": [], + "application/vnd.scribus": [], + "application/vnd.sealed.3df": [], + "application/vnd.sealed.csf": [], + "application/vnd.sealed.doc": [], + "application/vnd.sealed.eml": [], + "application/vnd.sealed.mht": [], + "application/vnd.sealed.net": [], + "application/vnd.sealed.ppt": [], + "application/vnd.sealed.tiff": [], + "application/vnd.sealed.xls": [], + "application/vnd.sealedmedia.softseal.html": [], + "application/vnd.sealedmedia.softseal.pdf": [], + "application/vnd.seemail": [ + "see" + ], + "application/vnd.sema": [ + "sema" + ], + "application/vnd.semd": [ + "semd" + ], + "application/vnd.semf": [ + "semf" + ], + "application/vnd.shana.informed.formdata": [ + "ifm" + ], + "application/vnd.shana.informed.formtemplate": [ + "itp" + ], + "application/vnd.shana.informed.interchange": [ + "iif" + ], + "application/vnd.shana.informed.package": [ + "ipk" + ], + "application/vnd.simtech-mindmapper": [ + "twd", + "twds" + ], + "application/vnd.smaf": [ + "mmf" + ], + "application/vnd.smart.notebook": [], + "application/vnd.smart.teacher": [ + "teacher" + ], + "application/vnd.software602.filler.form+xml": [], + "application/vnd.software602.filler.form-xml-zip": [], + "application/vnd.solent.sdkm+xml": [ + "sdkm", + "sdkd" + ], + "application/vnd.spotfire.dxp": [ + "dxp" + ], + "application/vnd.spotfire.sfs": [ + "sfs" + ], + "application/vnd.sss-cod": [], + "application/vnd.sss-dtf": [], + "application/vnd.sss-ntf": [], + "application/vnd.stardivision.calc": [ + "sdc" + ], + "application/vnd.stardivision.draw": [ + "sda" + ], + "application/vnd.stardivision.impress": [ + "sdd" + ], + "application/vnd.stardivision.math": [ + "smf" + ], + "application/vnd.stardivision.writer": [ + "sdw", + "vor" + ], + "application/vnd.stardivision.writer-global": [ + "sgl" + ], + "application/vnd.stepmania.package": [ + "smzip" + ], + "application/vnd.stepmania.stepchart": [ + "sm" + ], + "application/vnd.street-stream": [], + "application/vnd.sun.xml.calc": [ + "sxc" + ], + "application/vnd.sun.xml.calc.template": [ + "stc" + ], + "application/vnd.sun.xml.draw": [ + "sxd" + ], + "application/vnd.sun.xml.draw.template": [ + "std" + ], + "application/vnd.sun.xml.impress": [ + "sxi" + ], + "application/vnd.sun.xml.impress.template": [ + "sti" + ], + "application/vnd.sun.xml.math": [ + "sxm" + ], + "application/vnd.sun.xml.writer": [ + "sxw" + ], + "application/vnd.sun.xml.writer.global": [ + "sxg" + ], + "application/vnd.sun.xml.writer.template": [ + "stw" + ], + "application/vnd.sun.wadl+xml": [], + "application/vnd.sus-calendar": [ + "sus", + "susp" + ], + "application/vnd.svd": [ + "svd" + ], + "application/vnd.swiftview-ics": [], + "application/vnd.symbian.install": [ + "sis", + "sisx" + ], + "application/vnd.syncml+xml": [ + "xsm" + ], + "application/vnd.syncml.dm+wbxml": [ + "bdm" + ], + "application/vnd.syncml.dm+xml": [ + "xdm" + ], + "application/vnd.syncml.dm.notification": [], + "application/vnd.syncml.ds.notification": [], + "application/vnd.tao.intent-module-archive": [ + "tao" + ], + "application/vnd.tcpdump.pcap": [ + "pcap", + "cap", + "dmp" + ], + "application/vnd.tmobile-livetv": [ + "tmo" + ], + "application/vnd.trid.tpt": [ + "tpt" + ], + "application/vnd.triscape.mxs": [ + "mxs" + ], + "application/vnd.trueapp": [ + "tra" + ], + "application/vnd.truedoc": [], + "application/vnd.ubisoft.webplayer": [], + "application/vnd.ufdl": [ + "ufd", + "ufdl" + ], + "application/vnd.uiq.theme": [ + "utz" + ], + "application/vnd.umajin": [ + "umj" + ], + "application/vnd.unity": [ + "unityweb" + ], + "application/vnd.uoml+xml": [ + "uoml" + ], + "application/vnd.uplanet.alert": [], + "application/vnd.uplanet.alert-wbxml": [], + "application/vnd.uplanet.bearer-choice": [], + "application/vnd.uplanet.bearer-choice-wbxml": [], + "application/vnd.uplanet.cacheop": [], + "application/vnd.uplanet.cacheop-wbxml": [], + "application/vnd.uplanet.channel": [], + "application/vnd.uplanet.channel-wbxml": [], + "application/vnd.uplanet.list": [], + "application/vnd.uplanet.list-wbxml": [], + "application/vnd.uplanet.listcmd": [], + "application/vnd.uplanet.listcmd-wbxml": [], + "application/vnd.uplanet.signal": [], + "application/vnd.vcx": [ + "vcx" + ], + "application/vnd.vd-study": [], + "application/vnd.vectorworks": [], + "application/vnd.verimatrix.vcas": [], + "application/vnd.vidsoft.vidconference": [], + "application/vnd.visio": [ + "vsd", + "vst", + "vss", + "vsw" + ], + "application/vnd.visionary": [ + "vis" + ], + "application/vnd.vividence.scriptfile": [], + "application/vnd.vsf": [ + "vsf" + ], + "application/vnd.wap.sic": [], + "application/vnd.wap.slc": [], + "application/vnd.wap.wbxml": [ + "wbxml" + ], + "application/vnd.wap.wmlc": [ + "wmlc" + ], + "application/vnd.wap.wmlscriptc": [ + "wmlsc" + ], + "application/vnd.webturbo": [ + "wtb" + ], + "application/vnd.wfa.wsc": [], + "application/vnd.wmc": [], + "application/vnd.wmf.bootstrap": [], + "application/vnd.wolfram.mathematica": [], + "application/vnd.wolfram.mathematica.package": [], + "application/vnd.wolfram.player": [ + "nbp" + ], + "application/vnd.wordperfect": [ + "wpd" + ], + "application/vnd.wqd": [ + "wqd" + ], + "application/vnd.wrq-hp3000-labelled": [], + "application/vnd.wt.stf": [ + "stf" + ], + "application/vnd.wv.csp+wbxml": [], + "application/vnd.wv.csp+xml": [], + "application/vnd.wv.ssp+xml": [], + "application/vnd.xara": [ + "xar" + ], + "application/vnd.xfdl": [ + "xfdl" + ], + "application/vnd.xfdl.webform": [], + "application/vnd.xmi+xml": [], + "application/vnd.xmpie.cpkg": [], + "application/vnd.xmpie.dpkg": [], + "application/vnd.xmpie.plan": [], + "application/vnd.xmpie.ppkg": [], + "application/vnd.xmpie.xlim": [], + "application/vnd.yamaha.hv-dic": [ + "hvd" + ], + "application/vnd.yamaha.hv-script": [ + "hvs" + ], + "application/vnd.yamaha.hv-voice": [ + "hvp" + ], + "application/vnd.yamaha.openscoreformat": [ + "osf" + ], + "application/vnd.yamaha.openscoreformat.osfpvg+xml": [ + "osfpvg" + ], + "application/vnd.yamaha.remote-setup": [], + "application/vnd.yamaha.smaf-audio": [ + "saf" + ], + "application/vnd.yamaha.smaf-phrase": [ + "spf" + ], + "application/vnd.yamaha.through-ngn": [], + "application/vnd.yamaha.tunnel-udpencap": [], + "application/vnd.yellowriver-custom-menu": [ + "cmp" + ], + "application/vnd.zul": [ + "zir", + "zirz" + ], + "application/vnd.zzazz.deck+xml": [ + "zaz" + ], + "application/voicexml+xml": [ + "vxml" + ], + "application/vq-rtcpxr": [], + "application/watcherinfo+xml": [], + "application/whoispp-query": [], + "application/whoispp-response": [], + "application/widget": [ + "wgt" + ], + "application/winhlp": [ + "hlp" + ], + "application/wita": [], + "application/wordperfect5.1": [], + "application/wsdl+xml": [ + "wsdl" + ], + "application/wspolicy+xml": [ + "wspolicy" + ], + "application/x-7z-compressed": [ + "7z" + ], + "application/x-abiword": [ + "abw" + ], + "application/x-ace-compressed": [ + "ace" + ], + "application/x-amf": [], + "application/x-apple-diskimage": [ + "dmg" + ], + "application/x-authorware-bin": [ + "aab", + "x32", + "u32", + "vox" + ], + "application/x-authorware-map": [ + "aam" + ], + "application/x-authorware-seg": [ + "aas" + ], + "application/x-bcpio": [ + "bcpio" + ], + "application/x-bittorrent": [ + "torrent" + ], + "application/x-blorb": [ + "blb", + "blorb" + ], + "application/x-bzip": [ + "bz" + ], + "application/x-bzip2": [ + "bz2", + "boz" + ], + "application/x-cbr": [ + "cbr", + "cba", + "cbt", + "cbz", + "cb7" + ], + "application/x-cdlink": [ + "vcd" + ], + "application/x-cfs-compressed": [ + "cfs" + ], + "application/x-chat": [ + "chat" + ], + "application/x-chess-pgn": [ + "pgn" + ], + "application/x-conference": [ + "nsc" + ], + "application/x-compress": [], + "application/x-cpio": [ + "cpio" + ], + "application/x-csh": [ + "csh" + ], + "application/x-debian-package": [ + "deb", + "udeb" + ], + "application/x-dgc-compressed": [ + "dgc" + ], + "application/x-director": [ + "dir", + "dcr", + "dxr", + "cst", + "cct", + "cxt", + "w3d", + "fgd", + "swa" + ], + "application/x-doom": [ + "wad" + ], + "application/x-dtbncx+xml": [ + "ncx" + ], + "application/x-dtbook+xml": [ + "dtb" + ], + "application/x-dtbresource+xml": [ + "res" + ], + "application/x-dvi": [ + "dvi" + ], + "application/x-envoy": [ + "evy" + ], + "application/x-eva": [ + "eva" + ], + "application/x-font-bdf": [ + "bdf" + ], + "application/x-font-dos": [], + "application/x-font-framemaker": [], + "application/x-font-ghostscript": [ + "gsf" + ], + "application/x-font-libgrx": [], + "application/x-font-linux-psf": [ + "psf" + ], + "application/x-font-otf": [ + "otf" + ], + "application/x-font-pcf": [ + "pcf" + ], + "application/x-font-snf": [ + "snf" + ], + "application/x-font-speedo": [], + "application/x-font-sunos-news": [], + "application/x-font-ttf": [ + "ttf", + "ttc" + ], + "application/x-font-type1": [ + "pfa", + "pfb", + "pfm", + "afm" + ], + "application/font-woff": [ + "woff" + ], + "application/x-font-vfont": [], + "application/x-freearc": [ + "arc" + ], + "application/x-futuresplash": [ + "spl" + ], + "application/x-gca-compressed": [ + "gca" + ], + "application/x-glulx": [ + "ulx" + ], + "application/x-gnumeric": [ + "gnumeric" + ], + "application/x-gramps-xml": [ + "gramps" + ], + "application/x-gtar": [ + "gtar" + ], + "application/x-gzip": [], + "application/x-hdf": [ + "hdf" + ], + "application/x-install-instructions": [ + "install" + ], + "application/x-iso9660-image": [ + "iso" + ], + "application/x-java-jnlp-file": [ + "jnlp" + ], + "application/x-latex": [ + "latex" + ], + "application/x-lzh-compressed": [ + "lzh", + "lha" + ], + "application/x-mie": [ + "mie" + ], + "application/x-mobipocket-ebook": [ + "prc", + "mobi" + ], + "application/x-ms-application": [ + "application" + ], + "application/x-ms-shortcut": [ + "lnk" + ], + "application/x-ms-wmd": [ + "wmd" + ], + "application/x-ms-wmz": [ + "wmz" + ], + "application/x-ms-xbap": [ + "xbap" + ], + "application/x-msaccess": [ + "mdb" + ], + "application/x-msbinder": [ + "obd" + ], + "application/x-mscardfile": [ + "crd" + ], + "application/x-msclip": [ + "clp" + ], + "application/x-msdownload": [ + "exe", + "dll", + "com", + "bat", + "msi" + ], + "application/x-msmediaview": [ + "mvb", + "m13", + "m14" + ], + "application/x-msmetafile": [ + "wmf", + "wmz", + "emf", + "emz" + ], + "application/x-msmoney": [ + "mny" + ], + "application/x-mspublisher": [ + "pub" + ], + "application/x-msschedule": [ + "scd" + ], + "application/x-msterminal": [ + "trm" + ], + "application/x-mswrite": [ + "wri" + ], + "application/x-netcdf": [ + "nc", + "cdf" + ], + "application/x-nzb": [ + "nzb" + ], + "application/x-pkcs12": [ + "p12", + "pfx" + ], + "application/x-pkcs7-certificates": [ + "p7b", + "spc" + ], + "application/x-pkcs7-certreqresp": [ + "p7r" + ], + "application/x-rar-compressed": [ + "rar" + ], + "application/x-research-info-systems": [ + "ris" + ], + "application/x-sh": [ + "sh" + ], + "application/x-shar": [ + "shar" + ], + "application/x-shockwave-flash": [ + "swf" + ], + "application/x-silverlight-app": [ + "xap" + ], + "application/x-sql": [ + "sql" + ], + "application/x-stuffit": [ + "sit" + ], + "application/x-stuffitx": [ + "sitx" + ], + "application/x-subrip": [ + "srt" + ], + "application/x-sv4cpio": [ + "sv4cpio" + ], + "application/x-sv4crc": [ + "sv4crc" + ], + "application/x-t3vm-image": [ + "t3" + ], + "application/x-tads": [ + "gam" + ], + "application/x-tar": [ + "tar" + ], + "application/x-tcl": [ + "tcl" + ], + "application/x-tex": [ + "tex" + ], + "application/x-tex-tfm": [ + "tfm" + ], + "application/x-texinfo": [ + "texinfo", + "texi" + ], + "application/x-tgif": [ + "obj" + ], + "application/x-ustar": [ + "ustar" + ], + "application/x-wais-source": [ + "src" + ], + "application/x-x509-ca-cert": [ + "der", + "crt" + ], + "application/x-xfig": [ + "fig" + ], + "application/x-xliff+xml": [ + "xlf" + ], + "application/x-xpinstall": [ + "xpi" + ], + "application/x-xz": [ + "xz" + ], + "application/x-zmachine": [ + "z1", + "z2", + "z3", + "z4", + "z5", + "z6", + "z7", + "z8" + ], + "application/x400-bp": [], + "application/xaml+xml": [ + "xaml" + ], + "application/xcap-att+xml": [], + "application/xcap-caps+xml": [], + "application/xcap-diff+xml": [ + "xdf" + ], + "application/xcap-el+xml": [], + "application/xcap-error+xml": [], + "application/xcap-ns+xml": [], + "application/xcon-conference-info-diff+xml": [], + "application/xcon-conference-info+xml": [], + "application/xenc+xml": [ + "xenc" + ], + "application/xhtml+xml": [ + "xhtml", + "xht" + ], + "application/xhtml-voice+xml": [], + "application/xml": [ + "xml", + "xsl" + ], + "application/xml-dtd": [ + "dtd" + ], + "application/xml-external-parsed-entity": [], + "application/xmpp+xml": [], + "application/xop+xml": [ + "xop" + ], + "application/xproc+xml": [ + "xpl" + ], + "application/xslt+xml": [ + "xslt" + ], + "application/xspf+xml": [ + "xspf" + ], + "application/xv+xml": [ + "mxml", + "xhvml", + "xvml", + "xvm" + ], + "application/yang": [ + "yang" + ], + "application/yin+xml": [ + "yin" + ], + "application/zip": [ + "zip" + ], + "audio/1d-interleaved-parityfec": [], + "audio/32kadpcm": [], + "audio/3gpp": [], + "audio/3gpp2": [], + "audio/ac3": [], + "audio/adpcm": [ + "adp" + ], + "audio/amr": [], + "audio/amr-wb": [], + "audio/amr-wb+": [], + "audio/asc": [], + "audio/atrac-advanced-lossless": [], + "audio/atrac-x": [], + "audio/atrac3": [], + "audio/basic": [ + "au", + "snd" + ], + "audio/bv16": [], + "audio/bv32": [], + "audio/clearmode": [], + "audio/cn": [], + "audio/dat12": [], + "audio/dls": [], + "audio/dsr-es201108": [], + "audio/dsr-es202050": [], + "audio/dsr-es202211": [], + "audio/dsr-es202212": [], + "audio/dv": [], + "audio/dvi4": [], + "audio/eac3": [], + "audio/evrc": [], + "audio/evrc-qcp": [], + "audio/evrc0": [], + "audio/evrc1": [], + "audio/evrcb": [], + "audio/evrcb0": [], + "audio/evrcb1": [], + "audio/evrcwb": [], + "audio/evrcwb0": [], + "audio/evrcwb1": [], + "audio/example": [], + "audio/fwdred": [], + "audio/g719": [], + "audio/g722": [], + "audio/g7221": [], + "audio/g723": [], + "audio/g726-16": [], + "audio/g726-24": [], + "audio/g726-32": [], + "audio/g726-40": [], + "audio/g728": [], + "audio/g729": [], + "audio/g7291": [], + "audio/g729d": [], + "audio/g729e": [], + "audio/gsm": [], + "audio/gsm-efr": [], + "audio/gsm-hr-08": [], + "audio/ilbc": [], + "audio/ip-mr_v2.5": [], + "audio/isac": [], + "audio/l16": [], + "audio/l20": [], + "audio/l24": [], + "audio/l8": [], + "audio/lpc": [], + "audio/midi": [ + "mid", + "midi", + "kar", + "rmi" + ], + "audio/mobile-xmf": [], + "audio/mp4": [ + "mp4a" + ], + "audio/mp4a-latm": [], + "audio/mpa": [], + "audio/mpa-robust": [], + "audio/mpeg": [ + "mpga", + "mp2", + "mp2a", + "mp3", + "m2a", + "m3a" + ], + "audio/mpeg4-generic": [], + "audio/musepack": [], + "audio/ogg": [ + "oga", + "ogg", + "spx" + ], + "audio/opus": [], + "audio/parityfec": [], + "audio/pcma": [], + "audio/pcma-wb": [], + "audio/pcmu-wb": [], + "audio/pcmu": [], + "audio/prs.sid": [], + "audio/qcelp": [], + "audio/red": [], + "audio/rtp-enc-aescm128": [], + "audio/rtp-midi": [], + "audio/rtx": [], + "audio/s3m": [ + "s3m" + ], + "audio/silk": [ + "sil" + ], + "audio/smv": [], + "audio/smv0": [], + "audio/smv-qcp": [], + "audio/sp-midi": [], + "audio/speex": [], + "audio/t140c": [], + "audio/t38": [], + "audio/telephone-event": [], + "audio/tone": [], + "audio/uemclip": [], + "audio/ulpfec": [], + "audio/vdvi": [], + "audio/vmr-wb": [], + "audio/vnd.3gpp.iufp": [], + "audio/vnd.4sb": [], + "audio/vnd.audiokoz": [], + "audio/vnd.celp": [], + "audio/vnd.cisco.nse": [], + "audio/vnd.cmles.radio-events": [], + "audio/vnd.cns.anp1": [], + "audio/vnd.cns.inf1": [], + "audio/vnd.dece.audio": [ + "uva", + "uvva" + ], + "audio/vnd.digital-winds": [ + "eol" + ], + "audio/vnd.dlna.adts": [], + "audio/vnd.dolby.heaac.1": [], + "audio/vnd.dolby.heaac.2": [], + "audio/vnd.dolby.mlp": [], + "audio/vnd.dolby.mps": [], + "audio/vnd.dolby.pl2": [], + "audio/vnd.dolby.pl2x": [], + "audio/vnd.dolby.pl2z": [], + "audio/vnd.dolby.pulse.1": [], + "audio/vnd.dra": [ + "dra" + ], + "audio/vnd.dts": [ + "dts" + ], + "audio/vnd.dts.hd": [ + "dtshd" + ], + "audio/vnd.dvb.file": [], + "audio/vnd.everad.plj": [], + "audio/vnd.hns.audio": [], + "audio/vnd.lucent.voice": [ + "lvp" + ], + "audio/vnd.ms-playready.media.pya": [ + "pya" + ], + "audio/vnd.nokia.mobile-xmf": [], + "audio/vnd.nortel.vbk": [], + "audio/vnd.nuera.ecelp4800": [ + "ecelp4800" + ], + "audio/vnd.nuera.ecelp7470": [ + "ecelp7470" + ], + "audio/vnd.nuera.ecelp9600": [ + "ecelp9600" + ], + "audio/vnd.octel.sbc": [], + "audio/vnd.qcelp": [], + "audio/vnd.rhetorex.32kadpcm": [], + "audio/vnd.rip": [ + "rip" + ], + "audio/vnd.sealedmedia.softseal.mpeg": [], + "audio/vnd.vmx.cvsd": [], + "audio/vorbis": [], + "audio/vorbis-config": [], + "audio/webm": [ + "weba" + ], + "audio/x-aac": [ + "aac" + ], + "audio/x-aiff": [ + "aif", + "aiff", + "aifc" + ], + "audio/x-caf": [ + "caf" + ], + "audio/x-flac": [ + "flac" + ], + "audio/x-matroska": [ + "mka" + ], + "audio/x-mpegurl": [ + "m3u" + ], + "audio/x-ms-wax": [ + "wax" + ], + "audio/x-ms-wma": [ + "wma" + ], + "audio/x-pn-realaudio": [ + "ram", + "ra" + ], + "audio/x-pn-realaudio-plugin": [ + "rmp" + ], + "audio/x-tta": [], + "audio/x-wav": [ + "wav" + ], + "audio/xm": [ + "xm" + ], + "chemical/x-cdx": [ + "cdx" + ], + "chemical/x-cif": [ + "cif" + ], + "chemical/x-cmdf": [ + "cmdf" + ], + "chemical/x-cml": [ + "cml" + ], + "chemical/x-csml": [ + "csml" + ], + "chemical/x-pdb": [], + "chemical/x-xyz": [ + "xyz" + ], + "image/bmp": [ + "bmp" + ], + "image/cgm": [ + "cgm" + ], + "image/example": [], + "image/fits": [], + "image/g3fax": [ + "g3" + ], + "image/gif": [ + "gif" + ], + "image/ief": [ + "ief" + ], + "image/jp2": [], + "image/jpeg": [ + "jpeg", + "jpg", + "jpe" + ], + "image/jpm": [], + "image/jpx": [], + "image/ktx": [ + "ktx" + ], + "image/naplps": [], + "image/png": [ + "png" + ], + "image/prs.btif": [ + "btif" + ], + "image/prs.pti": [], + "image/sgi": [ + "sgi" + ], + "image/svg+xml": [ + "svg", + "svgz" + ], + "image/t38": [], + "image/tiff": [ + "tiff", + "tif" + ], + "image/tiff-fx": [], + "image/vnd.adobe.photoshop": [ + "psd" + ], + "image/vnd.cns.inf2": [], + "image/vnd.dece.graphic": [ + "uvi", + "uvvi", + "uvg", + "uvvg" + ], + "image/vnd.dvb.subtitle": [ + "sub" + ], + "image/vnd.djvu": [ + "djvu", + "djv" + ], + "image/vnd.dwg": [ + "dwg" + ], + "image/vnd.dxf": [ + "dxf" + ], + "image/vnd.fastbidsheet": [ + "fbs" + ], + "image/vnd.fpx": [ + "fpx" + ], + "image/vnd.fst": [ + "fst" + ], + "image/vnd.fujixerox.edmics-mmr": [ + "mmr" + ], + "image/vnd.fujixerox.edmics-rlc": [ + "rlc" + ], + "image/vnd.globalgraphics.pgb": [], + "image/vnd.microsoft.icon": [], + "image/vnd.mix": [], + "image/vnd.ms-modi": [ + "mdi" + ], + "image/vnd.ms-photo": [ + "wdp" + ], + "image/vnd.net-fpx": [ + "npx" + ], + "image/vnd.radiance": [], + "image/vnd.sealed.png": [], + "image/vnd.sealedmedia.softseal.gif": [], + "image/vnd.sealedmedia.softseal.jpg": [], + "image/vnd.svf": [], + "image/vnd.wap.wbmp": [ + "wbmp" + ], + "image/vnd.xiff": [ + "xif" + ], + "image/webp": [ + "webp" + ], + "image/x-3ds": [ + "3ds" + ], + "image/x-cmu-raster": [ + "ras" + ], + "image/x-cmx": [ + "cmx" + ], + "image/x-freehand": [ + "fh", + "fhc", + "fh4", + "fh5", + "fh7" + ], + "image/x-icon": [ + "ico" + ], + "image/x-mrsid-image": [ + "sid" + ], + "image/x-pcx": [ + "pcx" + ], + "image/x-pict": [ + "pic", + "pct" + ], + "image/x-portable-anymap": [ + "pnm" + ], + "image/x-portable-bitmap": [ + "pbm" + ], + "image/x-portable-graymap": [ + "pgm" + ], + "image/x-portable-pixmap": [ + "ppm" + ], + "image/x-rgb": [ + "rgb" + ], + "image/x-tga": [ + "tga" + ], + "image/x-xbitmap": [ + "xbm" + ], + "image/x-xpixmap": [ + "xpm" + ], + "image/x-xwindowdump": [ + "xwd" + ], + "message/cpim": [], + "message/delivery-status": [], + "message/disposition-notification": [], + "message/example": [], + "message/external-body": [], + "message/feedback-report": [], + "message/global": [], + "message/global-delivery-status": [], + "message/global-disposition-notification": [], + "message/global-headers": [], + "message/http": [], + "message/imdn+xml": [], + "message/news": [], + "message/partial": [], + "message/rfc822": [ + "eml", + "mime" + ], + "message/s-http": [], + "message/sip": [], + "message/sipfrag": [], + "message/tracking-status": [], + "message/vnd.si.simp": [], + "model/example": [], + "model/iges": [ + "igs", + "iges" + ], + "model/mesh": [ + "msh", + "mesh", + "silo" + ], + "model/vnd.collada+xml": [ + "dae" + ], + "model/vnd.dwf": [ + "dwf" + ], + "model/vnd.flatland.3dml": [], + "model/vnd.gdl": [ + "gdl" + ], + "model/vnd.gs-gdl": [], + "model/vnd.gs.gdl": [], + "model/vnd.gtw": [ + "gtw" + ], + "model/vnd.moml+xml": [], + "model/vnd.mts": [ + "mts" + ], + "model/vnd.parasolid.transmit.binary": [], + "model/vnd.parasolid.transmit.text": [], + "model/vnd.vtu": [ + "vtu" + ], + "model/vrml": [ + "wrl", + "vrml" + ], + "model/x3d+binary": [ + "x3db", + "x3dbz" + ], + "model/x3d+vrml": [ + "x3dv", + "x3dvz" + ], + "model/x3d+xml": [ + "x3d", + "x3dz" + ], + "multipart/alternative": [], + "multipart/appledouble": [], + "multipart/byteranges": [], + "multipart/digest": [], + "multipart/encrypted": [], + "multipart/example": [], + "multipart/form-data": [], + "multipart/header-set": [], + "multipart/mixed": [], + "multipart/parallel": [], + "multipart/related": [], + "multipart/report": [], + "multipart/signed": [], + "multipart/voice-message": [], + "text/1d-interleaved-parityfec": [], + "text/cache-manifest": [ + "appcache" + ], + "text/calendar": [ + "ics", + "ifb" + ], + "text/css": [ + "css" + ], + "text/csv": [ + "csv" + ], + "text/directory": [], + "text/dns": [], + "text/ecmascript": [], + "text/enriched": [], + "text/example": [], + "text/fwdred": [], + "text/html": [ + "html", + "htm" + ], + "text/javascript": [], + "text/n3": [ + "n3" + ], + "text/parityfec": [], + "text/plain": [ + "txt", + "text", + "conf", + "def", + "list", + "log", + "in" + ], + "text/prs.fallenstein.rst": [], + "text/prs.lines.tag": [ + "dsc" + ], + "text/vnd.radisys.msml-basic-layout": [], + "text/red": [], + "text/rfc822-headers": [], + "text/richtext": [ + "rtx" + ], + "text/rtf": [], + "text/rtp-enc-aescm128": [], + "text/rtx": [], + "text/sgml": [ + "sgml", + "sgm" + ], + "text/t140": [], + "text/tab-separated-values": [ + "tsv" + ], + "text/troff": [ + "t", + "tr", + "roff", + "man", + "me", + "ms" + ], + "text/turtle": [ + "ttl" + ], + "text/ulpfec": [], + "text/uri-list": [ + "uri", + "uris", + "urls" + ], + "text/vcard": [ + "vcard" + ], + "text/vnd.abc": [], + "text/vnd.curl": [ + "curl" + ], + "text/vnd.curl.dcurl": [ + "dcurl" + ], + "text/vnd.curl.scurl": [ + "scurl" + ], + "text/vnd.curl.mcurl": [ + "mcurl" + ], + "text/vnd.dmclientscript": [], + "text/vnd.dvb.subtitle": [ + "sub" + ], + "text/vnd.esmertec.theme-descriptor": [], + "text/vnd.fly": [ + "fly" + ], + "text/vnd.fmi.flexstor": [ + "flx" + ], + "text/vnd.graphviz": [ + "gv" + ], + "text/vnd.in3d.3dml": [ + "3dml" + ], + "text/vnd.in3d.spot": [ + "spot" + ], + "text/vnd.iptc.newsml": [], + "text/vnd.iptc.nitf": [], + "text/vnd.latex-z": [], + "text/vnd.motorola.reflex": [], + "text/vnd.ms-mediapackage": [], + "text/vnd.net2phone.commcenter.command": [], + "text/vnd.si.uricatalogue": [], + "text/vnd.sun.j2me.app-descriptor": [ + "jad" + ], + "text/vnd.trolltech.linguist": [], + "text/vnd.wap.si": [], + "text/vnd.wap.sl": [], + "text/vnd.wap.wml": [ + "wml" + ], + "text/vnd.wap.wmlscript": [ + "wmls" + ], + "text/x-asm": [ + "s", + "asm" + ], + "text/x-c": [ + "c", + "cc", + "cxx", + "cpp", + "h", + "hh", + "dic" + ], + "text/x-fortran": [ + "f", + "for", + "f77", + "f90" + ], + "text/x-java-source": [ + "java" + ], + "text/x-opml": [ + "opml" + ], + "text/x-pascal": [ + "p", + "pas" + ], + "text/x-nfo": [ + "nfo" + ], + "text/x-setext": [ + "etx" + ], + "text/x-sfv": [ + "sfv" + ], + "text/x-uuencode": [ + "uu" + ], + "text/x-vcalendar": [ + "vcs" + ], + "text/x-vcard": [ + "vcf" + ], + "text/xml": [], + "text/xml-external-parsed-entity": [], + "video/1d-interleaved-parityfec": [], + "video/3gpp": [ + "3gp" + ], + "video/3gpp-tt": [], + "video/3gpp2": [ + "3g2" + ], + "video/bmpeg": [], + "video/bt656": [], + "video/celb": [], + "video/dv": [], + "video/example": [], + "video/h261": [ + "h261" + ], + "video/h263": [ + "h263" + ], + "video/h263-1998": [], + "video/h263-2000": [], + "video/h264": [ + "h264" + ], + "video/h264-rcdo": [], + "video/h264-svc": [], + "video/jpeg": [ + "jpgv" + ], + "video/jpeg2000": [], + "video/jpm": [ + "jpm", + "jpgm" + ], + "video/mj2": [ + "mj2", + "mjp2" + ], + "video/mp1s": [], + "video/mp2p": [], + "video/mp2t": [], + "video/mp4": [ + "mp4", + "mp4v", + "mpg4" + ], + "video/mp4v-es": [], + "video/mpeg": [ + "mpeg", + "mpg", + "mpe", + "m1v", + "m2v" + ], + "video/mpeg4-generic": [], + "video/mpv": [], + "video/nv": [], + "video/ogg": [ + "ogv" + ], + "video/parityfec": [], + "video/pointer": [], + "video/quicktime": [ + "qt", + "mov" + ], + "video/raw": [], + "video/rtp-enc-aescm128": [], + "video/rtx": [], + "video/smpte292m": [], + "video/ulpfec": [], + "video/vc1": [], + "video/vnd.cctv": [], + "video/vnd.dece.hd": [ + "uvh", + "uvvh" + ], + "video/vnd.dece.mobile": [ + "uvm", + "uvvm" + ], + "video/vnd.dece.mp4": [], + "video/vnd.dece.pd": [ + "uvp", + "uvvp" + ], + "video/vnd.dece.sd": [ + "uvs", + "uvvs" + ], + "video/vnd.dece.video": [ + "uvv", + "uvvv" + ], + "video/vnd.directv.mpeg": [], + "video/vnd.directv.mpeg-tts": [], + "video/vnd.dlna.mpeg-tts": [], + "video/vnd.dvb.file": [ + "dvb" + ], + "video/vnd.fvt": [ + "fvt" + ], + "video/vnd.hns.video": [], + "video/vnd.iptvforum.1dparityfec-1010": [], + "video/vnd.iptvforum.1dparityfec-2005": [], + "video/vnd.iptvforum.2dparityfec-1010": [], + "video/vnd.iptvforum.2dparityfec-2005": [], + "video/vnd.iptvforum.ttsavc": [], + "video/vnd.iptvforum.ttsmpeg2": [], + "video/vnd.motorola.video": [], + "video/vnd.motorola.videop": [], + "video/vnd.mpegurl": [ + "mxu", + "m4u" + ], + "video/vnd.ms-playready.media.pyv": [ + "pyv" + ], + "video/vnd.nokia.interleaved-multimedia": [], + "video/vnd.nokia.videovoip": [], + "video/vnd.objectvideo": [], + "video/vnd.sealed.mpeg1": [], + "video/vnd.sealed.mpeg4": [], + "video/vnd.sealed.swf": [], + "video/vnd.sealedmedia.softseal.mov": [], + "video/vnd.uvvu.mp4": [ + "uvu", + "uvvu" + ], + "video/vnd.vivo": [ + "viv" + ], + "video/webm": [ + "webm" + ], + "video/x-f4v": [ + "f4v" + ], + "video/x-fli": [ + "fli" + ], + "video/x-flv": [ + "flv" + ], + "video/x-m4v": [ + "m4v" + ], + "video/x-matroska": [ + "mkv", + "mk3d", + "mks" + ], + "video/x-mng": [ + "mng" + ], + "video/x-ms-asf": [ + "asf", + "asx" + ], + "video/x-ms-vob": [ + "vob" + ], + "video/x-ms-wm": [ + "wm" + ], + "video/x-ms-wmv": [ + "wmv" + ], + "video/x-ms-wmx": [ + "wmx" + ], + "video/x-ms-wvx": [ + "wvx" + ], + "video/x-msvideo": [ + "avi" + ], + "video/x-sgi-movie": [ + "movie" + ], + "video/x-smv": [ + "smv" + ], + "x-conference/x-cooltalk": [ + "ice" + ] +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/node.json b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/node.json new file mode 100755 index 0000000..ad50d61 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/lib/node.json @@ -0,0 +1,55 @@ +{ + "text/vtt": [ + "vtt" + ], + "application/x-chrome-extension": [ + "crx" + ], + "text/x-component": [ + "htc" + ], + "text/cache-manifest": [ + "manifest" + ], + "application/octet-stream": [ + "buffer" + ], + "application/mp4": [ + "m4p" + ], + "audio/mp4": [ + "m4a" + ], + "video/MP2T": [ + "ts" + ], + "application/x-web-app-manifest+json": [ + "webapp" + ], + "text/x-lua": [ + "lua" + ], + "application/x-lua-bytecode": [ + "luac" + ], + "text/x-markdown": [ + "markdown", + "md", + "mkd" + ], + "text/plain": [ + "ini" + ], + "application/dash+xml": [ + "mdp" + ], + "font/opentype": [ + "otf" + ], + "application/json": [ + "map" + ], + "application/xml": [ + "xsd" + ] +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/package.json b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/package.json new file mode 100755 index 0000000..01bb1c1 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/mime-types/package.json @@ -0,0 +1,42 @@ +{ + "name": "mime-types", + "description": "The ultimate javascript content-type utility.", + "version": "1.0.1", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "contributors": [ + { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": "https://searchbeam.jit.su" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/expressjs/mime-types" + }, + "license": "MIT", + "main": "lib", + "devDependencies": { + "co": "3", + "cogent": "0", + "mocha": "1", + "should": "3" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "make test" + }, + "readme": "# mime-types\n[![NPM version](https://badge.fury.io/js/mime-types.svg)](https://badge.fury.io/js/mime-types) [![Build Status](https://travis-ci.org/expressjs/mime-types.svg?branch=master)](https://travis-ci.org/expressjs/mime-types)\n\nThe ultimate javascript content-type utility.\n\n### Install\n\n```sh\n$ npm install mime-types\n```\n\n#### Similar to [node-mime](https://github.com/broofa/node-mime), except:\n\n- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`, so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.\n- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.\n- Additional mime types are added such as jade and stylus. Feel free to add more!\n- Browser support via Browserify and Component by converting lists to JSON files.\n\nOtherwise, the API is compatible.\n\n### Adding Types\n\nIf you'd like to add additional types,\nsimply create a PR adding the type to `custom.json` and\na reference link to the [sources](SOURCES.md).\n\nDo __NOT__ edit `mime.json` or `node.json`.\nThose are pulled using `build.js`.\nYou should only touch `custom.json`.\n\n## API\n\n```js\nvar mime = require('mime-types')\n```\n\nAll functions return `false` if input is invalid or not found.\n\n### mime.lookup(path)\n\nLookup the content-type associated with a file.\n\n```js\nmime.lookup('json') // 'application/json'\nmime.lookup('.md') // 'text/x-markdown'\nmime.lookup('file.html') // 'text/html'\nmime.lookup('folder/file.js') // 'application/javascript'\n\nmime.lookup('cats') // false\n```\n\n### mime.contentType(type)\n\nCreate a full content-type header given a content-type or extension.\n\n```js\nmime.contentType('markdown') // 'text/x-markdown; charset=utf-8'\nmime.contentType('file.json') // 'application/json; charset=utf-8'\n```\n\n### mime.extension(type)\n\nGet the default extension for a content-type.\n\n```js\nmime.extension('application/octet-stream') // 'bin'\n```\n\n### mime.charset(type)\n\nLookup the implied default charset of a content-type.\n\n```js\nmime.charset('text/x-markdown') // 'UTF-8'\n```\n\n### mime.types[extension] = type\n\nA map of content-types by extension.\n\n### mime.extensions[type] = [extensions]\n\nA map of extensions by content-type.\n\n### mime.define(types)\n\nGlobally add definitions.\n`types` must be an object of the form:\n\n```js\n{\n \"\": [extensions...],\n \"\": [extensions...]\n}\n```\n\nSee the `.json` files in `lib/` for examples.\n\n## License\n\n[MIT](LICENSE)\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/mime-types/issues" + }, + "_id": "mime-types@1.0.1", + "_from": "mime-types@~1.0.0" +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/.npmignore b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/.npmignore new file mode 100755 index 0000000..a6a8d17 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/.npmignore @@ -0,0 +1,3 @@ +examples +test +.travis.yml diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/LICENSE b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/LICENSE new file mode 100755 index 0000000..42ca2e7 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/LICENSE @@ -0,0 +1,27 @@ +Original "Negotiator" program Copyright Federico Romero +Port to JavaScript Copyright Isaac Z. Schlueter + +All rights reserved. + +MIT License + +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/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/charset.js b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/charset.js new file mode 100755 index 0000000..d231291 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/charset.js @@ -0,0 +1,90 @@ +module.exports = preferredCharsets; +preferredCharsets.preferredCharsets = preferredCharsets; + +function parseAcceptCharset(accept) { + return accept.split(',').map(function(e) { + return parseCharset(e.trim()); + }).filter(function(e) { + return e; + }); +} + +function parseCharset(s) { + var match = s.match(/^\s*(\S+?)\s*(?:;(.*))?$/); + if (!match) return null; + + var charset = match[1]; + var q = 1; + if (match[2]) { + var params = match[2].split(';') + for (var i = 0; i < params.length; i ++) { + var p = params[i].trim().split('='); + if (p[0] === 'q') { + q = parseFloat(p[1]); + break; + } + } + } + + return { + charset: charset, + q: q + }; +} + +function getCharsetPriority(charset, accepted) { + return (accepted.map(function(a) { + return specify(charset, a); + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q:0}); +} + +function specify(charset, spec) { + var s = 0; + if(spec.charset === charset){ + s |= 1; + } else if (spec.charset !== '*' ) { + return null + } + + return { + s: s, + q: spec.q, + } +} + +function preferredCharsets(accept, provided) { + // RFC 2616 sec 14.2: no header = * + accept = parseAcceptCharset(accept === undefined ? '*' : accept || ''); + if (provided) { + return provided.map(function(type) { + return [type, getCharsetPriority(type, accept)]; + }).filter(function(pair) { + return pair[1].q > 0; + }).sort(function(a, b) { + var pa = a[1]; + var pb = b[1]; + if(pa.q == pb.q) { + return pa.s < pb.s ? 1 : -1; + } else { + return pa.q < pb.q ? 1 : -1; + } + }).map(function(pair) { + return pair[0]; + }); + } else { + return accept.sort(function (a, b) { + // revsort + return a.q < b.q ? 1 : -1; + }).filter(function(type) { + return type.q > 0; + }).map(function(type) { + return type.charset; + }); + } +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/encoding.js b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/encoding.js new file mode 100755 index 0000000..207291d --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/encoding.js @@ -0,0 +1,120 @@ +module.exports = preferredEncodings; +preferredEncodings.preferredEncodings = preferredEncodings; + +function parseAcceptEncoding(accept) { + var acceptableEncodings; + + if (accept) { + acceptableEncodings = accept.split(',').map(function(e) { + return parseEncoding(e.trim()); + }); + } else { + acceptableEncodings = []; + } + + if (!acceptableEncodings.some(function(e) { + return e && specify('identity', e); + })) { + /* + * If identity doesn't explicitly appear in the accept-encoding header, + * it's added to the list of acceptable encoding with the lowest q + * + */ + var lowestQ = 1; + + for(var i = 0; i < acceptableEncodings.length; i++){ + var e = acceptableEncodings[i]; + if(e && e.q < lowestQ){ + lowestQ = e.q; + } + } + acceptableEncodings.push({ + encoding: 'identity', + q: lowestQ / 2, + }); + } + + return acceptableEncodings.filter(function(e) { + return e; + }); +} + +function parseEncoding(s) { + var match = s.match(/^\s*(\S+?)\s*(?:;(.*))?$/); + + if (!match) return null; + + var encoding = match[1]; + var q = 1; + if (match[2]) { + var params = match[2].split(';'); + for (var i = 0; i < params.length; i ++) { + var p = params[i].trim().split('='); + if (p[0] === 'q') { + q = parseFloat(p[1]); + break; + } + } + } + + return { + encoding: encoding, + q: q + }; +} + +function getEncodingPriority(encoding, accepted) { + return (accepted.map(function(a) { + return specify(encoding, a); + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q: 0}); +} + +function specify(encoding, spec) { + var s = 0; + if(spec.encoding === encoding){ + s |= 1; + } else if (spec.encoding !== '*' ) { + return null + } + + return { + s: s, + q: spec.q, + } +}; + +function preferredEncodings(accept, provided) { + accept = parseAcceptEncoding(accept || ''); + if (provided) { + return provided.map(function(type) { + return [type, getEncodingPriority(type, accept)]; + }).filter(function(pair) { + return pair[1].q > 0; + }).sort(function(a, b) { + var pa = a[1]; + var pb = b[1]; + if(pa.q == pb.q) { + return pa.s < pb.s ? 1 : -1; + } else { + return pa.q < pb.q ? 1 : -1; + } + }).map(function(pair) { + return pair[0]; + }); + } else { + return accept.sort(function (a, b) { + // revsort + return a.q < b.q ? 1 : -1; + }).filter(function(type){ + return type.q > 0; + }).map(function(type) { + return type.encoding; + }); + } +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/language.js b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/language.js new file mode 100755 index 0000000..63036c7 --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/language.js @@ -0,0 +1,103 @@ +module.exports = preferredLanguages; +preferredLanguages.preferredLanguages = preferredLanguages; + +function parseAcceptLanguage(accept) { + return accept.split(',').map(function(e) { + return parseLanguage(e.trim()); + }).filter(function(e) { + return e; + }); +} + +function parseLanguage(s) { + var match = s.match(/^\s*(\S+?)(?:-(\S+?))?\s*(?:;(.*))?$/); + if (!match) return null; + + var prefix = match[1], + suffix = match[2], + full = prefix; + + if (suffix) full += "-" + suffix; + + var q = 1; + if (match[3]) { + var params = match[3].split(';') + for (var i = 0; i < params.length; i ++) { + var p = params[i].split('='); + if (p[0] === 'q') q = parseFloat(p[1]); + } + } + + return { + prefix: prefix, + suffix: suffix, + q: q, + full: full + }; +} + +function getLanguagePriority(language, accepted) { + return (accepted.map(function(a){ + return specify(language, a); + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q: 0}); +} + +function specify(language, spec) { + var p = parseLanguage(language) + if (!p) return null; + var s = 0; + if(spec.full === p.full){ + s |= 4; + } else if (spec.prefix === p.full) { + s |= 2; + } else if (spec.full === p.prefix) { + s |= 1; + } else if (spec.full !== '*' ) { + return null + } + + return { + s: s, + q: spec.q, + } +}; + +function preferredLanguages(accept, provided) { + // RFC 2616 sec 14.4: no header = * + accept = parseAcceptLanguage(accept === undefined ? '*' : accept || ''); + if (provided) { + + var ret = provided.map(function(type) { + return [type, getLanguagePriority(type, accept)]; + }).filter(function(pair) { + return pair[1].q > 0; + }).sort(function(a, b) { + var pa = a[1]; + var pb = b[1]; + if(pa.q == pb.q) { + return pa.s < pb.s ? 1 : -1; + } else { + return pa.q < pb.q ? 1 : -1; + } + }).map(function(pair) { + return pair[0]; + }); + return ret; + + } else { + return accept.sort(function (a, b) { + // revsort + return a.q < b.q ? 1 : -1; + }).filter(function(type) { + return type.q > 0; + }).map(function(type) { + return type.full; + }); + } +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/mediaType.js b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/mediaType.js new file mode 100755 index 0000000..f4dc1ca --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/mediaType.js @@ -0,0 +1,125 @@ +module.exports = preferredMediaTypes; +preferredMediaTypes.preferredMediaTypes = preferredMediaTypes; + +function parseAccept(accept) { + return accept.split(',').map(function(e) { + return parseMediaType(e.trim()); + }).filter(function(e) { + return e; + }); +}; + +function parseMediaType(s) { + var match = s.match(/\s*(\S+?)\/([^;\s]+)\s*(?:;(.*))?/); + if (!match) return null; + + var type = match[1], + subtype = match[2], + full = "" + type + "/" + subtype, + params = {}, + q = 1; + + if (match[3]) { + params = match[3].split(';').map(function(s) { + return s.trim().split('='); + }).reduce(function (set, p) { + set[p[0]] = p[1]; + return set + }, params); + + if (params.q != null) { + q = parseFloat(params.q); + delete params.q; + } + } + + return { + type: type, + subtype: subtype, + params: params, + q: q, + full: full + }; +} + +function getMediaTypePriority(type, accepted) { + return (accepted.map(function(a) { + return specify(type, a); + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q: 0}); +} + +function specify(type, spec) { + var p = parseMediaType(type); + var s = 0; + + if (!p) { + return null; + } + + if(spec.type == p.type) { + s |= 4 + } else if(spec.type != '*') { + return null; + } + + if(spec.subtype == p.subtype) { + s |= 2 + } else if(spec.subtype != '*') { + return null; + } + + var keys = Object.keys(spec.params); + if (keys.length > 0) { + if (keys.every(function (k) { + return spec.params[k] == '*' || spec.params[k] == p.params[k]; + })) { + s |= 1 + } else { + return null + } + } + + return { + q: spec.q, + s: s, + } + +} + +function preferredMediaTypes(accept, provided) { + // RFC 2616 sec 14.2: no header = */* + accept = parseAccept(accept === undefined ? '*/*' : accept || ''); + if (provided) { + return provided.map(function(type) { + return [type, getMediaTypePriority(type, accept)]; + }).filter(function(pair) { + return pair[1].q > 0; + }).sort(function(a, b) { + var pa = a[1]; + var pb = b[1]; + if(pa.q == pb.q) { + return pa.s < pb.s ? 1 : -1; + } else { + return pa.q < pb.q ? 1 : -1; + } + }).map(function(pair) { + return pair[0]; + }); + + } else { + return accept.sort(function (a, b) { + // revsort + return a.q < b.q ? 1 : -1; + }).filter(function(type) { + return type.q > 0; + }).map(function(type) { + return type.full; + }); + } +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/negotiator.js b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/negotiator.js new file mode 100755 index 0000000..ba0c48b --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/lib/negotiator.js @@ -0,0 +1,37 @@ +module.exports = Negotiator; +Negotiator.Negotiator = Negotiator; + +function Negotiator(request) { + if (!(this instanceof Negotiator)) return new Negotiator(request); + this.request = request; +} + +var set = { charset: 'accept-charset', + encoding: 'accept-encoding', + language: 'accept-language', + mediaType: 'accept' }; + + +function capitalize(string){ + return string.charAt(0).toUpperCase() + string.slice(1); +} + +Object.keys(set).forEach(function (k) { + var header = set[k], + method = require('./'+k+'.js'), + singular = k, + plural = k + 's'; + + Negotiator.prototype[plural] = function (available) { + return method(this.request.headers[header], available); + }; + + Negotiator.prototype[singular] = function(available) { + var set = this[plural](available); + if (set) return set[0]; + }; + + // Keep preferred* methods for legacy compatibility + Negotiator.prototype['preferred'+capitalize(plural)] = Negotiator.prototype[plural]; + Negotiator.prototype['preferred'+capitalize(singular)] = Negotiator.prototype[singular]; +}) diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/package.json b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/package.json new file mode 100755 index 0000000..8c25b3e --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/package.json @@ -0,0 +1,49 @@ +{ + "name": "negotiator", + "description": "HTTP content negotiation", + "version": "0.4.7", + "author": { + "name": "Federico Romero", + "email": "federico.romero@outboxlabs.com" + }, + "contributors": [ + { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/federomero/negotiator.git" + }, + "keywords": [ + "http", + "content negotiation", + "accept", + "accept-language", + "accept-encoding", + "accept-charset" + ], + "engine": "node >= 0.6", + "license": "MIT", + "devDependencies": { + "nodeunit": "0.8.x" + }, + "scripts": { + "test": "nodeunit test" + }, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "main": "lib/negotiator.js", + "readme": "# Negotiator [![Build Status](https://travis-ci.org/federomero/negotiator.png)](https://travis-ci.org/federomero/negotiator)\n\nAn HTTP content negotiator for node.js written in javascript.\n\n# Accept Negotiation\n\n Negotiator = require('negotiator')\n\n availableMediaTypes = ['text/html', 'text/plain', 'application/json']\n\n // The negotiator constructor receives a request object\n negotiator = new Negotiator(request)\n\n // Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'\n\n negotiator.mediaTypes()\n // -> ['text/html', 'image/jpeg', 'application/*']\n\n negotiator.mediaTypes(availableMediaTypes)\n // -> ['text/html', 'application/json']\n\n negotiator.mediaType(availableMediaTypes)\n // -> 'text/html'\n\nYou can check a working example at `examples/accept.js`.\n\n## Methods\n\n`mediaTypes(availableMediaTypes)`:\n\nReturns an array of preferred media types ordered by priority from a list of available media types.\n\n`mediaType(availableMediaType)`:\n\nReturns the top preferred media type from a list of available media types.\n\n# Accept-Language Negotiation\n\n Negotiator = require('negotiator')\n\n negotiator = new Negotiator(request)\n\n availableLanguages = 'en', 'es', 'fr'\n\n // Let's say Accept-Language header is 'en;q=0.8, es, pt'\n\n negotiator.languages()\n // -> ['es', 'pt', 'en']\n\n negotiator.languages(availableLanguages)\n // -> ['es', 'en']\n\n language = negotiator.language(availableLanguages)\n // -> 'es'\n\nYou can check a working example at `examples/language.js`.\n\n## Methods\n\n`languages(availableLanguages)`:\n\nReturns an array of preferred languages ordered by priority from a list of available languages.\n\n`language(availableLanguages)`:\n\nReturns the top preferred language from a list of available languages.\n\n# Accept-Charset Negotiation\n\n Negotiator = require('negotiator')\n\n availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']\n\n negotiator = new Negotiator(request)\n\n // Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'\n\n negotiator.charsets()\n // -> ['utf-8', 'iso-8859-1', 'utf-7']\n\n negotiator.charsets(availableCharsets)\n // -> ['utf-8', 'iso-8859-1']\n\n negotiator.charset(availableCharsets)\n // -> 'utf-8'\n\nYou can check a working example at `examples/charset.js`.\n\n## Methods\n\n`charsets(availableCharsets)`:\n\nReturns an array of preferred charsets ordered by priority from a list of available charsets.\n\n`charset(availableCharsets)`:\n\nReturns the top preferred charset from a list of available charsets.\n\n# Accept-Encoding Negotiation\n\n Negotiator = require('negotiator').Negotiator\n\n availableEncodings = ['identity', 'gzip']\n\n negotiator = new Negotiator(request)\n\n // Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'\n\n negotiator.encodings()\n // -> ['gzip', 'identity', 'compress']\n\n negotiator.encodings(availableEncodings)\n // -> ['gzip', 'identity']\n\n negotiator.encoding(availableEncodings)\n // -> 'gzip'\n\nYou can check a working example at `examples/encoding.js`.\n\n## Methods\n\n`encodings(availableEncodings)`:\n\nReturns an array of preferred encodings ordered by priority from a list of available encodings.\n\n`encoding(availableEncodings)`:\n\nReturns the top preferred encoding from a list of available encodings.\n\n# License\n\nMIT\n", + "readmeFilename": "readme.md", + "bugs": { + "url": "https://github.com/federomero/negotiator/issues" + }, + "dependencies": {}, + "_id": "negotiator@0.4.7", + "_from": "negotiator@0.4.7" +} diff --git a/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/readme.md b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/readme.md new file mode 100755 index 0000000..d982a9c --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/node_modules/negotiator/readme.md @@ -0,0 +1,132 @@ +# Negotiator [![Build Status](https://travis-ci.org/federomero/negotiator.png)](https://travis-ci.org/federomero/negotiator) + +An HTTP content negotiator for node.js written in javascript. + +# Accept Negotiation + + Negotiator = require('negotiator') + + availableMediaTypes = ['text/html', 'text/plain', 'application/json'] + + // The negotiator constructor receives a request object + negotiator = new Negotiator(request) + + // Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8' + + negotiator.mediaTypes() + // -> ['text/html', 'image/jpeg', 'application/*'] + + negotiator.mediaTypes(availableMediaTypes) + // -> ['text/html', 'application/json'] + + negotiator.mediaType(availableMediaTypes) + // -> 'text/html' + +You can check a working example at `examples/accept.js`. + +## Methods + +`mediaTypes(availableMediaTypes)`: + +Returns an array of preferred media types ordered by priority from a list of available media types. + +`mediaType(availableMediaType)`: + +Returns the top preferred media type from a list of available media types. + +# Accept-Language Negotiation + + Negotiator = require('negotiator') + + negotiator = new Negotiator(request) + + availableLanguages = 'en', 'es', 'fr' + + // Let's say Accept-Language header is 'en;q=0.8, es, pt' + + negotiator.languages() + // -> ['es', 'pt', 'en'] + + negotiator.languages(availableLanguages) + // -> ['es', 'en'] + + language = negotiator.language(availableLanguages) + // -> 'es' + +You can check a working example at `examples/language.js`. + +## Methods + +`languages(availableLanguages)`: + +Returns an array of preferred languages ordered by priority from a list of available languages. + +`language(availableLanguages)`: + +Returns the top preferred language from a list of available languages. + +# Accept-Charset Negotiation + + Negotiator = require('negotiator') + + availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5'] + + negotiator = new Negotiator(request) + + // Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2' + + negotiator.charsets() + // -> ['utf-8', 'iso-8859-1', 'utf-7'] + + negotiator.charsets(availableCharsets) + // -> ['utf-8', 'iso-8859-1'] + + negotiator.charset(availableCharsets) + // -> 'utf-8' + +You can check a working example at `examples/charset.js`. + +## Methods + +`charsets(availableCharsets)`: + +Returns an array of preferred charsets ordered by priority from a list of available charsets. + +`charset(availableCharsets)`: + +Returns the top preferred charset from a list of available charsets. + +# Accept-Encoding Negotiation + + Negotiator = require('negotiator').Negotiator + + availableEncodings = ['identity', 'gzip'] + + negotiator = new Negotiator(request) + + // Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5' + + negotiator.encodings() + // -> ['gzip', 'identity', 'compress'] + + negotiator.encodings(availableEncodings) + // -> ['gzip', 'identity'] + + negotiator.encoding(availableEncodings) + // -> 'gzip' + +You can check a working example at `examples/encoding.js`. + +## Methods + +`encodings(availableEncodings)`: + +Returns an array of preferred encodings ordered by priority from a list of available encodings. + +`encoding(availableEncodings)`: + +Returns the top preferred encoding from a list of available encodings. + +# License + +MIT diff --git a/node_modules/errorhandler/node_modules/accepts/package.json b/node_modules/errorhandler/node_modules/accepts/package.json new file mode 100755 index 0000000..e874cca --- /dev/null +++ b/node_modules/errorhandler/node_modules/accepts/package.json @@ -0,0 +1,39 @@ +{ + "name": "accepts", + "description": "Higher-level content negotiation", + "version": "1.0.6", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/expressjs/accepts" + }, + "dependencies": { + "mime-types": "~1.0.0", + "negotiator": "0.4.7" + }, + "devDependencies": { + "istanbul": "0.2.11", + "mocha": "*", + "should": "*" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --require should --reporter dot test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require should --reporter dot test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require should --reporter spec test/" + }, + "readme": "# Accepts\n\n[![NPM version](https://badge.fury.io/js/accepts.svg)](http://badge.fury.io/js/accepts)\n[![Build Status](https://travis-ci.org/expressjs/accepts.svg?branch=master)](https://travis-ci.org/expressjs/accepts)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/accepts.svg?branch=master)](https://coveralls.io/r/expressjs/accepts)\n\nHigher level content negotation based on [negotiator](https://github.com/federomero/negotiator). Extracted from [koa](https://github.com/koajs/koa) for general use.\n\nIn addition to negotatior, it allows:\n\n- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` as well as `('text/html', 'application/json')`.\n- Allows type shorthands such as `json`.\n- Returns `false` when no types match\n- Treats non-existent headers as `*`\n\n## API\n\n### var accept = new Accepts(req)\n\n```js\nvar accepts = require('accepts')\n\nhttp.createServer(function (req, res) {\n var accept = accepts(req)\n})\n```\n\n### accept\\[property\\]\\(\\)\n\nReturns all the explicitly accepted content property as an array in descending priority.\n\n- `accept.types()`\n- `accept.encodings()`\n- `accept.charsets()`\n- `accept.languages()`\n\nThey are also aliased in singular form such as `accept.type()`. `accept.languages()` is also aliased as `accept.langs()`, etc.\n\nNote: you should almost never do this in a real app as it defeats the purpose of content negotiation.\n\nExample:\n\n```js\n// in Google Chrome\nvar encodings = accept.encodings() // -> ['sdch', 'gzip', 'deflate']\n```\n\nSince you probably don't support `sdch`, you should just supply the encodings you support:\n\n```js\nvar encoding = accept.encodings('gzip', 'deflate') // -> 'gzip', probably\n```\n\n### accept\\[property\\]\\(values, ...\\)\n\nYou can either have `values` be an array or have an argument list of values.\n\nIf the client does not accept any `values`, `false` will be returned.\nIf the client accepts any `values`, the preferred `value` will be return.\n\nFor `accept.types()`, shorthand mime types are allowed.\n\nExample:\n\n```js\n// req.headers.accept = 'application/json'\n\naccept.types('json') // -> 'json'\naccept.types('html', 'json') // -> 'json'\naccept.types('html') // -> false\n\n// req.headers.accept = ''\n// which is equivalent to `*`\n\naccept.types() // -> [], no explicit types\naccept.types('text/html', 'text/json') // -> 'text/html', since it was first\n```\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/accepts/issues" + }, + "_id": "accepts@1.0.6", + "_from": "accepts@~1.0.4" +} diff --git a/node_modules/errorhandler/node_modules/escape-html/.npmignore b/node_modules/errorhandler/node_modules/escape-html/.npmignore new file mode 100755 index 0000000..48a2e24 --- /dev/null +++ b/node_modules/errorhandler/node_modules/escape-html/.npmignore @@ -0,0 +1,2 @@ +components +build diff --git a/node_modules/errorhandler/node_modules/escape-html/Makefile b/node_modules/errorhandler/node_modules/escape-html/Makefile new file mode 100755 index 0000000..3f6119d --- /dev/null +++ b/node_modules/errorhandler/node_modules/escape-html/Makefile @@ -0,0 +1,11 @@ + +build: components index.js + @component build + +components: + @Component install + +clean: + rm -fr build components template.js + +.PHONY: clean diff --git a/node_modules/errorhandler/node_modules/escape-html/Readme.md b/node_modules/errorhandler/node_modules/escape-html/Readme.md new file mode 100755 index 0000000..2cfcc99 --- /dev/null +++ b/node_modules/errorhandler/node_modules/escape-html/Readme.md @@ -0,0 +1,15 @@ + +# escape-html + + Escape HTML entities + +## Example + +```js +var escape = require('escape-html'); +escape(str); +``` + +## License + + MIT \ No newline at end of file diff --git a/node_modules/errorhandler/node_modules/escape-html/component.json b/node_modules/errorhandler/node_modules/escape-html/component.json new file mode 100755 index 0000000..cb9740f --- /dev/null +++ b/node_modules/errorhandler/node_modules/escape-html/component.json @@ -0,0 +1,10 @@ +{ + "name": "escape-html", + "description": "Escape HTML entities", + "version": "1.0.1", + "keywords": ["escape", "html", "utility"], + "dependencies": {}, + "scripts": [ + "index.js" + ] +} diff --git a/node_modules/errorhandler/node_modules/escape-html/index.js b/node_modules/errorhandler/node_modules/escape-html/index.js new file mode 100755 index 0000000..2765211 --- /dev/null +++ b/node_modules/errorhandler/node_modules/escape-html/index.js @@ -0,0 +1,16 @@ +/** + * Escape special characters in the given string of html. + * + * @param {String} html + * @return {String} + * @api private + */ + +module.exports = function(html) { + return String(html) + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(//g, '>'); +} diff --git a/node_modules/errorhandler/node_modules/escape-html/package.json b/node_modules/errorhandler/node_modules/escape-html/package.json new file mode 100755 index 0000000..833c227 --- /dev/null +++ b/node_modules/errorhandler/node_modules/escape-html/package.json @@ -0,0 +1,28 @@ +{ + "name": "escape-html", + "description": "Escape HTML entities", + "version": "1.0.1", + "keywords": [ + "escape", + "html", + "utility" + ], + "dependencies": {}, + "main": "index.js", + "component": { + "scripts": { + "escape-html/index.js": "index.js" + } + }, + "repository": { + "type": "git", + "url": "https://github.com/component/escape-html.git" + }, + "readme": "\n# escape-html\n\n Escape HTML entities\n\n## Example\n\n```js\nvar escape = require('escape-html');\nescape(str);\n```\n\n## License\n\n MIT", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/component/escape-html/issues" + }, + "_id": "escape-html@1.0.1", + "_from": "escape-html@1.0.1" +} diff --git a/node_modules/errorhandler/package.json b/node_modules/errorhandler/package.json new file mode 100755 index 0000000..a6c8b25 --- /dev/null +++ b/node_modules/errorhandler/package.json @@ -0,0 +1,41 @@ +{ + "name": "errorhandler", + "description": "connect's default error handler page", + "version": "1.1.1", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/expressjs/errorhandler" + }, + "dependencies": { + "accepts": "~1.0.4", + "escape-html": "1.0.1" + }, + "devDependencies": { + "connect": "3", + "istanbul": "0.2.10", + "mocha": "~1.20.1", + "should": "~4.0.1", + "supertest": "~0.13.0" + }, + "engines": { + "node": ">= 0.8" + }, + "scripts": { + "test": "mocha --reporter dot test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec test/" + }, + "readme": "# errorhandler\n\n[![NPM version](https://badge.fury.io/js/errorhandler.svg)](http://badge.fury.io/js/errorhandler)\n[![Build Status](https://travis-ci.org/expressjs/errorhandler.svg?branch=master)](https://travis-ci.org/expressjs/errorhandler)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/errorhandler.svg?branch=master)](https://coveralls.io/r/expressjs/errorhandler)\n\nPreviously `connect.errorHandler()`.\n\n## Install\n\n```sh\n$ npm install errorhandler\n```\n\n## API\n\n### errorhandler()\n\nCreate new middleware to handle errors and respond with content negotiation.\nThis middleware is only intended to be used in a development environment, as\nthe full error stack traces will be send back to the client when an error\noccurs.\n\n## Example\n\n```js\nvar connect = require('connect')\nvar errorhandler = require('errorhandler')\n\nvar app = connect()\n\nif (process.env.NODE_ENV === 'development') {\n app.use(errorhandler())\n}\n```\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/errorhandler/issues" + }, + "_id": "errorhandler@1.1.1", + "_from": "errorhandler@" +} diff --git a/node_modules/errorhandler/public/error.html b/node_modules/errorhandler/public/error.html new file mode 100755 index 0000000..a6d3faf --- /dev/null +++ b/node_modules/errorhandler/public/error.html @@ -0,0 +1,14 @@ + + + + {error} + + + +
    +

    {title}

    +

    {statusCode} {error}

    +
      {stack}
    +
    + + diff --git a/node_modules/errorhandler/public/style.css b/node_modules/errorhandler/public/style.css new file mode 100755 index 0000000..b571e98 --- /dev/null +++ b/node_modules/errorhandler/public/style.css @@ -0,0 +1,35 @@ +* { + margin: 0; + padding: 0; + outline: 0; +} + +body { + padding: 80px 100px; + font: 13px "Helvetica Neue", "Lucida Grande", "Arial"; + background: #ECE9E9 -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#ECE9E9)); + background: #ECE9E9 -moz-linear-gradient(top, #fff, #ECE9E9); + background-repeat: no-repeat; + color: #555; + -webkit-font-smoothing: antialiased; +} +h1, h2 { + font-size: 22px; + color: #343434; +} +h1 em, h2 em { + padding: 0 5px; + font-weight: normal; +} +h1 { + font-size: 60px; +} +h2 { + margin-top: 10px; +} +ul li { + list-style: none; +} +#stacktrace { + margin-left: 60px; +} diff --git a/node_modules/express/.npmignore b/node_modules/express/.npmignore new file mode 100755 index 0000000..52fcd60 --- /dev/null +++ b/node_modules/express/.npmignore @@ -0,0 +1,11 @@ +.git* +benchmarks/ +coverage/ +docs/ +examples/ +support/ +test/ +testing.js +.DS_Store +.travis.yml +Contributing.md diff --git a/node_modules/express/History.md b/node_modules/express/History.md new file mode 100755 index 0000000..9beb889 --- /dev/null +++ b/node_modules/express/History.md @@ -0,0 +1,1651 @@ +4.4.5 / 2014-06-26 +================== + + * deps: cookie-signature@1.0.4 + - fix for timing attacks + +4.4.4 / 2014-06-20 +================== + + * fix `res.attachment` Unicode filenames in Safari + * fix "trim prefix" debug message in `express:router` + * deps: accepts@~1.0.5 + * deps: buffer-crc32@0.2.3 + +4.4.3 / 2014-06-11 +================== + + * fix persistence of modified `req.params[name]` from `app.param()` + * deps: accepts@1.0.3 + - deps: negotiator@0.4.6 + * deps: debug@1.0.2 + * deps: send@0.4.3 + - Do not throw un-catchable error on file open race condition + - Use `escape-html` for HTML escaping + - deps: debug@1.0.2 + - deps: finished@1.2.2 + - deps: fresh@0.2.2 + * deps: serve-static@1.2.3 + - Do not throw un-catchable error on file open race condition + - deps: send@0.4.3 + +4.4.2 / 2014-06-09 +================== + + * fix catching errors from top-level handlers + * use `vary` module for `res.vary` + * deps: debug@1.0.1 + * deps: proxy-addr@1.0.1 + * deps: send@0.4.2 + - fix "event emitter leak" warnings + - deps: debug@1.0.1 + - deps: finished@1.2.1 + * deps: serve-static@1.2.2 + - fix "event emitter leak" warnings + - deps: send@0.4.2 + * deps: type-is@1.2.1 + +4.4.1 / 2014-06-02 +================== + + * deps: methods@1.0.1 + * deps: send@0.4.1 + - Send `max-age` in `Cache-Control` in correct format + * deps: serve-static@1.2.1 + - use `escape-html` for escaping + - deps: send@0.4.1 + +4.4.0 / 2014-05-30 +================== + + * custom etag control with `app.set('etag', val)` + - `app.set('etag', function(body, encoding){ return '"etag"' })` custom etag generation + - `app.set('etag', 'weak')` weak tag + - `app.set('etag', 'strong')` strong etag + - `app.set('etag', false)` turn off + - `app.set('etag', true)` standard etag + * mark `res.send` ETag as weak and reduce collisions + * update accepts to 1.0.2 + - Fix interpretation when header not in request + * update send to 0.4.0 + - Calculate ETag with md5 for reduced collisions + - Ignore stream errors after request ends + - deps: debug@0.8.1 + * update serve-static to 1.2.0 + - Calculate ETag with md5 for reduced collisions + - Ignore stream errors after request ends + - deps: send@0.4.0 + +4.3.2 / 2014-05-28 +================== + + * fix handling of errors from `router.param()` callbacks + +4.3.1 / 2014-05-23 +================== + + * revert "fix behavior of multiple `app.VERB` for the same path" + - this caused a regression in the order of route execution + +4.3.0 / 2014-05-21 +================== + + * add `req.baseUrl` to access the path stripped from `req.url` in routes + * fix behavior of multiple `app.VERB` for the same path + * fix issue routing requests among sub routers + * invoke `router.param()` only when necessary instead of every match + * proper proxy trust with `app.set('trust proxy', trust)` + - `app.set('trust proxy', 1)` trust first hop + - `app.set('trust proxy', 'loopback')` trust loopback addresses + - `app.set('trust proxy', '10.0.0.1')` trust single IP + - `app.set('trust proxy', '10.0.0.1/16')` trust subnet + - `app.set('trust proxy', '10.0.0.1, 10.0.0.2')` trust list + - `app.set('trust proxy', false)` turn off + - `app.set('trust proxy', true)` trust everything + * set proper `charset` in `Content-Type` for `res.send` + * update type-is to 1.2.0 + - support suffix matching + +4.2.0 / 2014-05-11 +================== + + * deprecate `app.del()` -- use `app.delete()` instead + * deprecate `res.json(obj, status)` -- use `res.json(status, obj)` instead + - the edge-case `res.json(status, num)` requires `res.status(status).json(num)` + * deprecate `res.jsonp(obj, status)` -- use `res.jsonp(status, obj)` instead + - the edge-case `res.jsonp(status, num)` requires `res.status(status).jsonp(num)` + * fix `req.next` when inside router instance + * include `ETag` header in `HEAD` requests + * keep previous `Content-Type` for `res.jsonp` + * support PURGE method + - add `app.purge` + - add `router.purge` + - include PURGE in `app.all` + * update debug to 0.8.0 + - add `enable()` method + - change from stderr to stdout + * update methods to 1.0.0 + - add PURGE + +4.1.2 / 2014-05-08 +================== + + * fix `req.host` for IPv6 literals + * fix `res.jsonp` error if callback param is object + +4.1.1 / 2014-04-27 +================== + + * fix package.json to reflect supported node version + +4.1.0 / 2014-04-24 +================== + + * pass options from `res.sendfile` to `send` + * preserve casing of headers in `res.header` and `res.set` + * support unicode file names in `res.attachment` and `res.download` + * update accepts to 1.0.1 + - deps: negotiator@0.4.0 + * update cookie to 0.1.2 + - Fix for maxAge == 0 + - made compat with expires field + * update send to 0.3.0 + - Accept API options in options object + - Coerce option types + - Control whether to generate etags + - Default directory access to 403 when index disabled + - Fix sending files with dots without root set + - Include file path in etag + - Make "Can't set headers after they are sent." catchable + - Send full entity-body for multi range requests + - Set etags to "weak" + - Support "If-Range" header + - Support multiple index paths + - deps: mime@1.2.11 + * update serve-static to 1.1.0 + - Accept options directly to `send` module + - Resolve relative paths at middleware setup + - Use parseurl to parse the URL from request + - deps: send@0.3.0 + * update type-is to 1.1.0 + - add non-array values support + - add `multipart` as a shorthand + +4.0.0 / 2014-04-09 +================== + + * remove: + - node 0.8 support + - connect and connect's patches except for charset handling + - express(1) - moved to [express-generator](https://github.com/expressjs/generator) + - `express.createServer()` - it has been deprecated for a long time. Use `express()` + - `app.configure` - use logic in your own app code + - `app.router` - is removed + - `req.auth` - use `basic-auth` instead + - `req.accepted*` - use `req.accepts*()` instead + - `res.location` - relative URL resolution is removed + - `res.charset` - include the charset in the content type when using `res.set()` + - all bundled middleware except `static` + * change: + - `app.route` -> `app.mountpath` when mounting an express app in another express app + - `json spaces` no longer enabled by default in development + - `req.accepts*` -> `req.accepts*s` - i.e. `req.acceptsEncoding` -> `req.acceptsEncodings` + - `req.params` is now an object instead of an array + - `res.locals` is no longer a function. It is a plain js object. Treat it as such. + - `res.headerSent` -> `res.headersSent` to match node.js ServerResponse object + * refactor: + - `req.accepts*` with [accepts](https://github.com/expressjs/accepts) + - `req.is` with [type-is](https://github.com/expressjs/type-is) + - [path-to-regexp](https://github.com/component/path-to-regexp) + * add: + - `app.router()` - returns the app Router instance + - `app.route()` - Proxy to the app's `Router#route()` method to create a new route + - Router & Route - public API + +3.10.5 / 2014-06-11 +=================== + + * deps: connect@2.19.6 + - deps: body-parser@1.3.1 + - deps: compression@1.0.7 + - deps: debug@1.0.2 + - deps: serve-index@1.1.1 + - deps: serve-static@1.2.3 + * deps: debug@1.0.2 + * deps: send@0.4.3 + - Do not throw un-catchable error on file open race condition + - Use `escape-html` for HTML escaping + - deps: debug@1.0.2 + - deps: finished@1.2.2 + - deps: fresh@0.2.2 + +3.10.4 / 2014-06-09 +=================== + + * deps: connect@2.19.5 + - fix "event emitter leak" warnings + - deps: csurf@1.2.1 + - deps: debug@1.0.1 + - deps: serve-static@1.2.2 + - deps: type-is@1.2.1 + * deps: debug@1.0.1 + * deps: send@0.4.2 + - fix "event emitter leak" warnings + - deps: finished@1.2.1 + - deps: debug@1.0.1 + +3.10.3 / 2014-06-05 +=================== + + * use `vary` module for `res.vary` + * deps: connect@2.19.4 + - deps: errorhandler@1.0.2 + - deps: method-override@2.0.2 + - deps: serve-favicon@2.0.1 + * deps: debug@1.0.0 + +3.10.2 / 2014-06-03 +=================== + + * deps: connect@2.19.3 + - deps: compression@1.0.6 + +3.10.1 / 2014-06-03 +=================== + + * deps: connect@2.19.2 + - deps: compression@1.0.4 + * deps: proxy-addr@1.0.1 + +3.10.0 / 2014-06-02 +=================== + + * deps: connect@2.19.1 + - deprecate `methodOverride()` -- use `method-override` module directly + - deps: body-parser@1.3.0 + - deps: method-override@2.0.1 + - deps: multiparty@3.2.8 + - deps: response-time@2.0.0 + - deps: serve-static@1.2.1 + * deps: methods@1.0.1 + * deps: send@0.4.1 + - Send `max-age` in `Cache-Control` in correct format + +3.9.0 / 2014-05-30 +================== + + * custom etag control with `app.set('etag', val)` + - `app.set('etag', function(body, encoding){ return '"etag"' })` custom etag generation + - `app.set('etag', 'weak')` weak tag + - `app.set('etag', 'strong')` strong etag + - `app.set('etag', false)` turn off + - `app.set('etag', true)` standard etag + * Include ETag in HEAD requests + * mark `res.send` ETag as weak and reduce collisions + * update connect to 2.18.0 + - deps: compression@1.0.3 + - deps: serve-index@1.1.0 + - deps: serve-static@1.2.0 + * update send to 0.4.0 + - Calculate ETag with md5 for reduced collisions + - Ignore stream errors after request ends + - deps: debug@0.8.1 + +3.8.1 / 2014-05-27 +================== + + * update connect to 2.17.3 + - deps: body-parser@1.2.2 + - deps: express-session@1.2.1 + - deps: method-override@1.0.2 + +3.8.0 / 2014-05-21 +================== + + * keep previous `Content-Type` for `res.jsonp` + * set proper `charset` in `Content-Type` for `res.send` + * update connect to 2.17.1 + - fix `res.charset` appending charset when `content-type` has one + - deps: express-session@1.2.0 + - deps: morgan@1.1.1 + - deps: serve-index@1.0.3 + +3.7.0 / 2014-05-18 +================== + + * proper proxy trust with `app.set('trust proxy', trust)` + - `app.set('trust proxy', 1)` trust first hop + - `app.set('trust proxy', 'loopback')` trust loopback addresses + - `app.set('trust proxy', '10.0.0.1')` trust single IP + - `app.set('trust proxy', '10.0.0.1/16')` trust subnet + - `app.set('trust proxy', '10.0.0.1, 10.0.0.2')` trust list + - `app.set('trust proxy', false)` turn off + - `app.set('trust proxy', true)` trust everything + * update connect to 2.16.2 + - deprecate `res.headerSent` -- use `res.headersSent` + - deprecate `res.on("header")` -- use on-headers module instead + - fix edge-case in `res.appendHeader` that would append in wrong order + - json: use body-parser + - urlencoded: use body-parser + - dep: bytes@1.0.0 + - dep: cookie-parser@1.1.0 + - dep: csurf@1.2.0 + - dep: express-session@1.1.0 + - dep: method-override@1.0.1 + +3.6.0 / 2014-05-09 +================== + + * deprecate `app.del()` -- use `app.delete()` instead + * deprecate `res.json(obj, status)` -- use `res.json(status, obj)` instead + - the edge-case `res.json(status, num)` requires `res.status(status).json(num)` + * deprecate `res.jsonp(obj, status)` -- use `res.jsonp(status, obj)` instead + - the edge-case `res.jsonp(status, num)` requires `res.status(status).jsonp(num)` + * support PURGE method + - add `app.purge` + - add `router.purge` + - include PURGE in `app.all` + * update connect to 2.15.0 + * Add `res.appendHeader` + * Call error stack even when response has been sent + * Patch `res.headerSent` to return Boolean + * Patch `res.headersSent` for node.js 0.8 + * Prevent default 404 handler after response sent + * dep: compression@1.0.2 + * dep: connect-timeout@1.1.0 + * dep: debug@^0.8.0 + * dep: errorhandler@1.0.1 + * dep: express-session@1.0.4 + * dep: morgan@1.0.1 + * dep: serve-favicon@2.0.0 + * dep: serve-index@1.0.2 + * update debug to 0.8.0 + * add `enable()` method + * change from stderr to stdout + * update methods to 1.0.0 + - add PURGE + * update mkdirp to 0.5.0 + +3.5.3 / 2014-05-08 +================== + + * fix `req.host` for IPv6 literals + * fix `res.jsonp` error if callback param is object + +3.5.2 / 2014-04-24 +================== + + * update connect to 2.14.5 + * update cookie to 0.1.2 + * update mkdirp to 0.4.0 + * update send to 0.3.0 + +3.5.1 / 2014-03-25 +================== + + * pin less-middleware in generated app + +3.5.0 / 2014-03-06 +================== + + * bump deps + +3.4.8 / 2014-01-13 +================== + + * prevent incorrect automatic OPTIONS responses #1868 @dpatti + * update binary and examples for jade 1.0 #1876 @yossi, #1877 @reqshark, #1892 @matheusazzi + * throw 400 in case of malformed paths @rlidwka + +3.4.7 / 2013-12-10 +================== + + * update connect + +3.4.6 / 2013-12-01 +================== + + * update connect (raw-body) + +3.4.5 / 2013-11-27 +================== + + * update connect + * res.location: remove leading ./ #1802 @kapouer + * res.redirect: fix `res.redirect('toString') #1829 @michaelficarra + * res.send: always send ETag when content-length > 0 + * router: add Router.all() method + +3.4.4 / 2013-10-29 +================== + + * update connect + * update supertest + * update methods + * express(1): replace bodyParser() with urlencoded() and json() #1795 @chirag04 + +3.4.3 / 2013-10-23 +================== + + * update connect + +3.4.2 / 2013-10-18 +================== + + * update connect + * downgrade commander + +3.4.1 / 2013-10-15 +================== + + * update connect + * update commander + * jsonp: check if callback is a function + * router: wrap encodeURIComponent in a try/catch #1735 (@lxe) + * res.format: now includes chraset @1747 (@sorribas) + * res.links: allow multiple calls @1746 (@sorribas) + +3.4.0 / 2013-09-07 +================== + + * add res.vary(). Closes #1682 + * update connect + +3.3.8 / 2013-09-02 +================== + + * update connect + +3.3.7 / 2013-08-28 +================== + + * update connect + +3.3.6 / 2013-08-27 +================== + + * Revert "remove charset from json responses. Closes #1631" (causes issues in some clients) + * add: req.accepts take an argument list + +3.3.4 / 2013-07-08 +================== + + * update send and connect + +3.3.3 / 2013-07-04 +================== + + * update connect + +3.3.2 / 2013-07-03 +================== + + * update connect + * update send + * remove .version export + +3.3.1 / 2013-06-27 +================== + + * update connect + +3.3.0 / 2013-06-26 +================== + + * update connect + * add support for multiple X-Forwarded-Proto values. Closes #1646 + * change: remove charset from json responses. Closes #1631 + * change: return actual booleans from req.accept* functions + * fix jsonp callback array throw + +3.2.6 / 2013-06-02 +================== + + * update connect + +3.2.5 / 2013-05-21 +================== + + * update connect + * update node-cookie + * add: throw a meaningful error when there is no default engine + * change generation of ETags with res.send() to GET requests only. Closes #1619 + +3.2.4 / 2013-05-09 +================== + + * fix `req.subdomains` when no Host is present + * fix `req.host` when no Host is present, return undefined + +3.2.3 / 2013-05-07 +================== + + * update connect / qs + +3.2.2 / 2013-05-03 +================== + + * update qs + +3.2.1 / 2013-04-29 +================== + + * add app.VERB() paths array deprecation warning + * update connect + * update qs and remove all ~ semver crap + * fix: accept number as value of Signed Cookie + +3.2.0 / 2013-04-15 +================== + + * add "view" constructor setting to override view behaviour + * add req.acceptsEncoding(name) + * add req.acceptedEncodings + * revert cookie signature change causing session race conditions + * fix sorting of Accept values of the same quality + +3.1.2 / 2013-04-12 +================== + + * add support for custom Accept parameters + * update cookie-signature + +3.1.1 / 2013-04-01 +================== + + * add X-Forwarded-Host support to `req.host` + * fix relative redirects + * update mkdirp + * update buffer-crc32 + * remove legacy app.configure() method from app template. + +3.1.0 / 2013-01-25 +================== + + * add support for leading "." in "view engine" setting + * add array support to `res.set()` + * add node 0.8.x to travis.yml + * add "subdomain offset" setting for tweaking `req.subdomains` + * add `res.location(url)` implementing `res.redirect()`-like setting of Location + * use app.get() for x-powered-by setting for inheritance + * fix colons in passwords for `req.auth` + +3.0.6 / 2013-01-04 +================== + + * add http verb methods to Router + * update connect + * fix mangling of the `res.cookie()` options object + * fix jsonp whitespace escape. Closes #1132 + +3.0.5 / 2012-12-19 +================== + + * add throwing when a non-function is passed to a route + * fix: explicitly remove Transfer-Encoding header from 204 and 304 responses + * revert "add 'etag' option" + +3.0.4 / 2012-12-05 +================== + + * add 'etag' option to disable `res.send()` Etags + * add escaping of urls in text/plain in `res.redirect()` + for old browsers interpreting as html + * change crc32 module for a more liberal license + * update connect + +3.0.3 / 2012-11-13 +================== + + * update connect + * update cookie module + * fix cookie max-age + +3.0.2 / 2012-11-08 +================== + + * add OPTIONS to cors example. Closes #1398 + * fix route chaining regression. Closes #1397 + +3.0.1 / 2012-11-01 +================== + + * update connect + +3.0.0 / 2012-10-23 +================== + + * add `make clean` + * add "Basic" check to req.auth + * add `req.auth` test coverage + * add cb && cb(payload) to `res.jsonp()`. Closes #1374 + * add backwards compat for `res.redirect()` status. Closes #1336 + * add support for `res.json()` to retain previously defined Content-Types. Closes #1349 + * update connect + * change `res.redirect()` to utilize a pathname-relative Location again. Closes #1382 + * remove non-primitive string support for `res.send()` + * fix view-locals example. Closes #1370 + * fix route-separation example + +3.0.0rc5 / 2012-09-18 +================== + + * update connect + * add redis search example + * add static-files example + * add "x-powered-by" setting (`app.disable('x-powered-by')`) + * add "application/octet-stream" redirect Accept test case. Closes #1317 + +3.0.0rc4 / 2012-08-30 +================== + + * add `res.jsonp()`. Closes #1307 + * add "verbose errors" option to error-pages example + * add another route example to express(1) so people are not so confused + * add redis online user activity tracking example + * update connect dep + * fix etag quoting. Closes #1310 + * fix error-pages 404 status + * fix jsonp callback char restrictions + * remove old OPTIONS default response + +3.0.0rc3 / 2012-08-13 +================== + + * update connect dep + * fix signed cookies to work with `connect.cookieParser()` ("s:" prefix was missing) [tnydwrds] + * fix `res.render()` clobbering of "locals" + +3.0.0rc2 / 2012-08-03 +================== + + * add CORS example + * update connect dep + * deprecate `.createServer()` & remove old stale examples + * fix: escape `res.redirect()` link + * fix vhost example + +3.0.0rc1 / 2012-07-24 +================== + + * add more examples to view-locals + * add scheme-relative redirects (`res.redirect("//foo.com")`) support + * update cookie dep + * update connect dep + * update send dep + * fix `express(1)` -h flag, use -H for hogan. Closes #1245 + * fix `res.sendfile()` socket error handling regression + +3.0.0beta7 / 2012-07-16 +================== + + * update connect dep for `send()` root normalization regression + +3.0.0beta6 / 2012-07-13 +================== + + * add `err.view` property for view errors. Closes #1226 + * add "jsonp callback name" setting + * add support for "/foo/:bar*" non-greedy matches + * change `res.sendfile()` to use `send()` module + * change `res.send` to use "response-send" module + * remove `app.locals.use` and `res.locals.use`, use regular middleware + +3.0.0beta5 / 2012-07-03 +================== + + * add "make check" support + * add route-map example + * add `res.json(obj, status)` support back for BC + * add "methods" dep, remove internal methods module + * update connect dep + * update auth example to utilize cores pbkdf2 + * updated tests to use "supertest" + +3.0.0beta4 / 2012-06-25 +================== + + * Added `req.auth` + * Added `req.range(size)` + * Added `res.links(obj)` + * Added `res.send(body, status)` support back for backwards compat + * Added `.default()` support to `res.format()` + * Added 2xx / 304 check to `req.fresh` + * Revert "Added + support to the router" + * Fixed `res.send()` freshness check, respect res.statusCode + +3.0.0beta3 / 2012-06-15 +================== + + * Added hogan `--hjs` to express(1) [nullfirm] + * Added another example to content-negotiation + * Added `fresh` dep + * Changed: `res.send()` always checks freshness + * Fixed: expose connects mime module. Cloases #1165 + +3.0.0beta2 / 2012-06-06 +================== + + * Added `+` support to the router + * Added `req.host` + * Changed `req.param()` to check route first + * Update connect dep + +3.0.0beta1 / 2012-06-01 +================== + + * Added `res.format()` callback to override default 406 behaviour + * Fixed `res.redirect()` 406. Closes #1154 + +3.0.0alpha5 / 2012-05-30 +================== + + * Added `req.ip` + * Added `{ signed: true }` option to `res.cookie()` + * Removed `res.signedCookie()` + * Changed: dont reverse `req.ips` + * Fixed "trust proxy" setting check for `req.ips` + +3.0.0alpha4 / 2012-05-09 +================== + + * Added: allow `[]` in jsonp callback. Closes #1128 + * Added `PORT` env var support in generated template. Closes #1118 [benatkin] + * Updated: connect 2.2.2 + +3.0.0alpha3 / 2012-05-04 +================== + + * Added public `app.routes`. Closes #887 + * Added _view-locals_ example + * Added _mvc_ example + * Added `res.locals.use()`. Closes #1120 + * Added conditional-GET support to `res.send()` + * Added: coerce `res.set()` values to strings + * Changed: moved `static()` in generated apps below router + * Changed: `res.send()` only set ETag when not previously set + * Changed connect 2.2.1 dep + * Changed: `make test` now runs unit / acceptance tests + * Fixed req/res proto inheritance + +3.0.0alpha2 / 2012-04-26 +================== + + * Added `make benchmark` back + * Added `res.send()` support for `String` objects + * Added client-side data exposing example + * Added `res.header()` and `req.header()` aliases for BC + * Added `express.createServer()` for BC + * Perf: memoize parsed urls + * Perf: connect 2.2.0 dep + * Changed: make `expressInit()` middleware self-aware + * Fixed: use app.get() for all core settings + * Fixed redis session example + * Fixed session example. Closes #1105 + * Fixed generated express dep. Closes #1078 + +3.0.0alpha1 / 2012-04-15 +================== + + * Added `app.locals.use(callback)` + * Added `app.locals` object + * Added `app.locals(obj)` + * Added `res.locals` object + * Added `res.locals(obj)` + * Added `res.format()` for content-negotiation + * Added `app.engine()` + * Added `res.cookie()` JSON cookie support + * Added "trust proxy" setting + * Added `req.subdomains` + * Added `req.protocol` + * Added `req.secure` + * Added `req.path` + * Added `req.ips` + * Added `req.fresh` + * Added `req.stale` + * Added comma-delmited / array support for `req.accepts()` + * Added debug instrumentation + * Added `res.set(obj)` + * Added `res.set(field, value)` + * Added `res.get(field)` + * Added `app.get(setting)`. Closes #842 + * Added `req.acceptsLanguage()` + * Added `req.acceptsCharset()` + * Added `req.accepted` + * Added `req.acceptedLanguages` + * Added `req.acceptedCharsets` + * Added "json replacer" setting + * Added "json spaces" setting + * Added X-Forwarded-Proto support to `res.redirect()`. Closes #92 + * Added `--less` support to express(1) + * Added `express.response` prototype + * Added `express.request` prototype + * Added `express.application` prototype + * Added `app.path()` + * Added `app.render()` + * Added `res.type()` to replace `res.contentType()` + * Changed: `res.redirect()` to add relative support + * Changed: enable "jsonp callback" by default + * Changed: renamed "case sensitive routes" to "case sensitive routing" + * Rewrite of all tests with mocha + * Removed "root" setting + * Removed `res.redirect('home')` support + * Removed `req.notify()` + * Removed `app.register()` + * Removed `app.redirect()` + * Removed `app.is()` + * Removed `app.helpers()` + * Removed `app.dynamicHelpers()` + * Fixed `res.sendfile()` with non-GET. Closes #723 + * Fixed express(1) public dir for windows. Closes #866 + +2.5.9/ 2012-04-02 +================== + + * Added support for PURGE request method [pbuyle] + * Fixed `express(1)` generated app `app.address()` before `listening` [mmalecki] + +2.5.8 / 2012-02-08 +================== + + * Update mkdirp dep. Closes #991 + +2.5.7 / 2012-02-06 +================== + + * Fixed `app.all` duplicate DELETE requests [mscdex] + +2.5.6 / 2012-01-13 +================== + + * Updated hamljs dev dep. Closes #953 + +2.5.5 / 2012-01-08 +================== + + * Fixed: set `filename` on cached templates [matthewleon] + +2.5.4 / 2012-01-02 +================== + + * Fixed `express(1)` eol on 0.4.x. Closes #947 + +2.5.3 / 2011-12-30 +================== + + * Fixed `req.is()` when a charset is present + +2.5.2 / 2011-12-10 +================== + + * Fixed: express(1) LF -> CRLF for windows + +2.5.1 / 2011-11-17 +================== + + * Changed: updated connect to 1.8.x + * Removed sass.js support from express(1) + +2.5.0 / 2011-10-24 +================== + + * Added ./routes dir for generated app by default + * Added npm install reminder to express(1) app gen + * Added 0.5.x support + * Removed `make test-cov` since it wont work with node 0.5.x + * Fixed express(1) public dir for windows. Closes #866 + +2.4.7 / 2011-10-05 +================== + + * Added mkdirp to express(1). Closes #795 + * Added simple _json-config_ example + * Added shorthand for the parsed request's pathname via `req.path` + * Changed connect dep to 1.7.x to fix npm issue... + * Fixed `res.redirect()` __HEAD__ support. [reported by xerox] + * Fixed `req.flash()`, only escape args + * Fixed absolute path checking on windows. Closes #829 [reported by andrewpmckenzie] + +2.4.6 / 2011-08-22 +================== + + * Fixed multiple param callback regression. Closes #824 [reported by TroyGoode] + +2.4.5 / 2011-08-19 +================== + + * Added support for routes to handle errors. Closes #809 + * Added `app.routes.all()`. Closes #803 + * Added "basepath" setting to work in conjunction with reverse proxies etc. + * Refactored `Route` to use a single array of callbacks + * Added support for multiple callbacks for `app.param()`. Closes #801 +Closes #805 + * Changed: removed .call(self) for route callbacks + * Dependency: `qs >= 0.3.1` + * Fixed `res.redirect()` on windows due to `join()` usage. Closes #808 + +2.4.4 / 2011-08-05 +================== + + * Fixed `res.header()` intention of a set, even when `undefined` + * Fixed `*`, value no longer required + * Fixed `res.send(204)` support. Closes #771 + +2.4.3 / 2011-07-14 +================== + + * Added docs for `status` option special-case. Closes #739 + * Fixed `options.filename`, exposing the view path to template engines + +2.4.2. / 2011-07-06 +================== + + * Revert "removed jsonp stripping" for XSS + +2.4.1 / 2011-07-06 +================== + + * Added `res.json()` JSONP support. Closes #737 + * Added _extending-templates_ example. Closes #730 + * Added "strict routing" setting for trailing slashes + * Added support for multiple envs in `app.configure()` calls. Closes #735 + * Changed: `res.send()` using `res.json()` + * Changed: when cookie `path === null` don't default it + * Changed; default cookie path to "home" setting. Closes #731 + * Removed _pids/logs_ creation from express(1) + +2.4.0 / 2011-06-28 +================== + + * Added chainable `res.status(code)` + * Added `res.json()`, an explicit version of `res.send(obj)` + * Added simple web-service example + +2.3.12 / 2011-06-22 +================== + + * \#express is now on freenode! come join! + * Added `req.get(field, param)` + * Added links to Japanese documentation, thanks @hideyukisaito! + * Added; the `express(1)` generated app outputs the env + * Added `content-negotiation` example + * Dependency: connect >= 1.5.1 < 2.0.0 + * Fixed view layout bug. Closes #720 + * Fixed; ignore body on 304. Closes #701 + +2.3.11 / 2011-06-04 +================== + + * Added `npm test` + * Removed generation of dummy test file from `express(1)` + * Fixed; `express(1)` adds express as a dep + * Fixed; prune on `prepublish` + +2.3.10 / 2011-05-27 +================== + + * Added `req.route`, exposing the current route + * Added _package.json_ generation support to `express(1)` + * Fixed call to `app.param()` function for optional params. Closes #682 + +2.3.9 / 2011-05-25 +================== + + * Fixed bug-ish with `../' in `res.partial()` calls + +2.3.8 / 2011-05-24 +================== + + * Fixed `app.options()` + +2.3.7 / 2011-05-23 +================== + + * Added route `Collection`, ex: `app.get('/user/:id').remove();` + * Added support for `app.param(fn)` to define param logic + * Removed `app.param()` support for callback with return value + * Removed module.parent check from express(1) generated app. Closes #670 + * Refactored router. Closes #639 + +2.3.6 / 2011-05-20 +================== + + * Changed; using devDependencies instead of git submodules + * Fixed redis session example + * Fixed markdown example + * Fixed view caching, should not be enabled in development + +2.3.5 / 2011-05-20 +================== + + * Added export `.view` as alias for `.View` + +2.3.4 / 2011-05-08 +================== + + * Added `./examples/say` + * Fixed `res.sendfile()` bug preventing the transfer of files with spaces + +2.3.3 / 2011-05-03 +================== + + * Added "case sensitive routes" option. + * Changed; split methods supported per rfc [slaskis] + * Fixed route-specific middleware when using the same callback function several times + +2.3.2 / 2011-04-27 +================== + + * Fixed view hints + +2.3.1 / 2011-04-26 +================== + + * Added `app.match()` as `app.match.all()` + * Added `app.lookup()` as `app.lookup.all()` + * Added `app.remove()` for `app.remove.all()` + * Added `app.remove.VERB()` + * Fixed template caching collision issue. Closes #644 + * Moved router over from connect and started refactor + +2.3.0 / 2011-04-25 +================== + + * Added options support to `res.clearCookie()` + * Added `res.helpers()` as alias of `res.locals()` + * Added; json defaults to UTF-8 with `res.send()`. Closes #632. [Daniel * Dependency `connect >= 1.4.0` + * Changed; auto set Content-Type in res.attachement [Aaron Heckmann] + * Renamed "cache views" to "view cache". Closes #628 + * Fixed caching of views when using several apps. Closes #637 + * Fixed gotcha invoking `app.param()` callbacks once per route middleware. +Closes #638 + * Fixed partial lookup precedence. Closes #631 +Shaw] + +2.2.2 / 2011-04-12 +================== + + * Added second callback support for `res.download()` connection errors + * Fixed `filename` option passing to template engine + +2.2.1 / 2011-04-04 +================== + + * Added `layout(path)` helper to change the layout within a view. Closes #610 + * Fixed `partial()` collection object support. + Previously only anything with `.length` would work. + When `.length` is present one must still be aware of holes, + however now `{ collection: {foo: 'bar'}}` is valid, exposes + `keyInCollection` and `keysInCollection`. + + * Performance improved with better view caching + * Removed `request` and `response` locals + * Changed; errorHandler page title is now `Express` instead of `Connect` + +2.2.0 / 2011-03-30 +================== + + * Added `app.lookup.VERB()`, ex `app.lookup.put('/user/:id')`. Closes #606 + * Added `app.match.VERB()`, ex `app.match.put('/user/12')`. Closes #606 + * Added `app.VERB(path)` as alias of `app.lookup.VERB()`. + * Dependency `connect >= 1.2.0` + +2.1.1 / 2011-03-29 +================== + + * Added; expose `err.view` object when failing to locate a view + * Fixed `res.partial()` call `next(err)` when no callback is given [reported by aheckmann] + * Fixed; `res.send(undefined)` responds with 204 [aheckmann] + +2.1.0 / 2011-03-24 +================== + + * Added `/_?` partial lookup support. Closes #447 + * Added `request`, `response`, and `app` local variables + * Added `settings` local variable, containing the app's settings + * Added `req.flash()` exception if `req.session` is not available + * Added `res.send(bool)` support (json response) + * Fixed stylus example for latest version + * Fixed; wrap try/catch around `res.render()` + +2.0.0 / 2011-03-17 +================== + + * Fixed up index view path alternative. + * Changed; `res.locals()` without object returns the locals + +2.0.0rc3 / 2011-03-17 +================== + + * Added `res.locals(obj)` to compliment `res.local(key, val)` + * Added `res.partial()` callback support + * Fixed recursive error reporting issue in `res.render()` + +2.0.0rc2 / 2011-03-17 +================== + + * Changed; `partial()` "locals" are now optional + * Fixed `SlowBuffer` support. Closes #584 [reported by tyrda01] + * Fixed .filename view engine option [reported by drudge] + * Fixed blog example + * Fixed `{req,res}.app` reference when mounting [Ben Weaver] + +2.0.0rc / 2011-03-14 +================== + + * Fixed; expose `HTTPSServer` constructor + * Fixed express(1) default test charset. Closes #579 [reported by secoif] + * Fixed; default charset to utf-8 instead of utf8 for lame IE [reported by NickP] + +2.0.0beta3 / 2011-03-09 +================== + + * Added support for `res.contentType()` literal + The original `res.contentType('.json')`, + `res.contentType('application/json')`, and `res.contentType('json')` + will work now. + * Added `res.render()` status option support back + * Added charset option for `res.render()` + * Added `.charset` support (via connect 1.0.4) + * Added view resolution hints when in development and a lookup fails + * Added layout lookup support relative to the page view. + For example while rendering `./views/user/index.jade` if you create + `./views/user/layout.jade` it will be used in favour of the root layout. + * Fixed `res.redirect()`. RFC states absolute url [reported by unlink] + * Fixed; default `res.send()` string charset to utf8 + * Removed `Partial` constructor (not currently used) + +2.0.0beta2 / 2011-03-07 +================== + + * Added res.render() `.locals` support back to aid in migration process + * Fixed flash example + +2.0.0beta / 2011-03-03 +================== + + * Added HTTPS support + * Added `res.cookie()` maxAge support + * Added `req.header()` _Referrer_ / _Referer_ special-case, either works + * Added mount support for `res.redirect()`, now respects the mount-point + * Added `union()` util, taking place of `merge(clone())` combo + * Added stylus support to express(1) generated app + * Added secret to session middleware used in examples and generated app + * Added `res.local(name, val)` for progressive view locals + * Added default param support to `req.param(name, default)` + * Added `app.disabled()` and `app.enabled()` + * Added `app.register()` support for omitting leading ".", either works + * Added `res.partial()`, using the same interface as `partial()` within a view. Closes #539 + * Added `app.param()` to map route params to async/sync logic + * Added; aliased `app.helpers()` as `app.locals()`. Closes #481 + * Added extname with no leading "." support to `res.contentType()` + * Added `cache views` setting, defaulting to enabled in "production" env + * Added index file partial resolution, eg: partial('user') may try _views/user/index.jade_. + * Added `req.accepts()` support for extensions + * Changed; `res.download()` and `res.sendfile()` now utilize Connect's + static file server `connect.static.send()`. + * Changed; replaced `connect.utils.mime()` with npm _mime_ module + * Changed; allow `req.query` to be pre-defined (via middleware or other parent + * Changed view partial resolution, now relative to parent view + * Changed view engine signature. no longer `engine.render(str, options, callback)`, now `engine.compile(str, options) -> Function`, the returned function accepts `fn(locals)`. + * Fixed `req.param()` bug returning Array.prototype methods. Closes #552 + * Fixed; using `Stream#pipe()` instead of `sys.pump()` in `res.sendfile()` + * Fixed; using _qs_ module instead of _querystring_ + * Fixed; strip unsafe chars from jsonp callbacks + * Removed "stream threshold" setting + +1.0.8 / 2011-03-01 +================== + + * Allow `req.query` to be pre-defined (via middleware or other parent app) + * "connect": ">= 0.5.0 < 1.0.0". Closes #547 + * Removed the long deprecated __EXPRESS_ENV__ support + +1.0.7 / 2011-02-07 +================== + + * Fixed `render()` setting inheritance. + Mounted apps would not inherit "view engine" + +1.0.6 / 2011-02-07 +================== + + * Fixed `view engine` setting bug when period is in dirname + +1.0.5 / 2011-02-05 +================== + + * Added secret to generated app `session()` call + +1.0.4 / 2011-02-05 +================== + + * Added `qs` dependency to _package.json_ + * Fixed namespaced `require()`s for latest connect support + +1.0.3 / 2011-01-13 +================== + + * Remove unsafe characters from JSONP callback names [Ryan Grove] + +1.0.2 / 2011-01-10 +================== + + * Removed nested require, using `connect.router` + +1.0.1 / 2010-12-29 +================== + + * Fixed for middleware stacked via `createServer()` + previously the `foo` middleware passed to `createServer(foo)` + would not have access to Express methods such as `res.send()` + or props like `req.query` etc. + +1.0.0 / 2010-11-16 +================== + + * Added; deduce partial object names from the last segment. + For example by default `partial('forum/post', postObject)` will + give you the _post_ object, providing a meaningful default. + * Added http status code string representation to `res.redirect()` body + * Added; `res.redirect()` supporting _text/plain_ and _text/html_ via __Accept__. + * Added `req.is()` to aid in content negotiation + * Added partial local inheritance [suggested by masylum]. Closes #102 + providing access to parent template locals. + * Added _-s, --session[s]_ flag to express(1) to add session related middleware + * Added _--template_ flag to express(1) to specify the + template engine to use. + * Added _--css_ flag to express(1) to specify the + stylesheet engine to use (or just plain css by default). + * Added `app.all()` support [thanks aheckmann] + * Added partial direct object support. + You may now `partial('user', user)` providing the "user" local, + vs previously `partial('user', { object: user })`. + * Added _route-separation_ example since many people question ways + to do this with CommonJS modules. Also view the _blog_ example for + an alternative. + * Performance; caching view path derived partial object names + * Fixed partial local inheritance precedence. [reported by Nick Poulden] Closes #454 + * Fixed jsonp support; _text/javascript_ as per mailinglist discussion + +1.0.0rc4 / 2010-10-14 +================== + + * Added _NODE_ENV_ support, _EXPRESS_ENV_ is deprecated and will be removed in 1.0.0 + * Added route-middleware support (very helpful, see the [docs](http://expressjs.com/guide.html#Route-Middleware)) + * Added _jsonp callback_ setting to enable/disable jsonp autowrapping [Dav Glass] + * Added callback query check on response.send to autowrap JSON objects for simple webservice implementations [Dav Glass] + * Added `partial()` support for array-like collections. Closes #434 + * Added support for swappable querystring parsers + * Added session usage docs. Closes #443 + * Added dynamic helper caching. Closes #439 [suggested by maritz] + * Added authentication example + * Added basic Range support to `res.sendfile()` (and `res.download()` etc) + * Changed; `express(1)` generated app using 2 spaces instead of 4 + * Default env to "development" again [aheckmann] + * Removed _context_ option is no more, use "scope" + * Fixed; exposing _./support_ libs to examples so they can run without installs + * Fixed mvc example + +1.0.0rc3 / 2010-09-20 +================== + + * Added confirmation for `express(1)` app generation. Closes #391 + * Added extending of flash formatters via `app.flashFormatters` + * Added flash formatter support. Closes #411 + * Added streaming support to `res.sendfile()` using `sys.pump()` when >= "stream threshold" + * Added _stream threshold_ setting for `res.sendfile()` + * Added `res.send()` __HEAD__ support + * Added `res.clearCookie()` + * Added `res.cookie()` + * Added `res.render()` headers option + * Added `res.redirect()` response bodies + * Added `res.render()` status option support. Closes #425 [thanks aheckmann] + * Fixed `res.sendfile()` responding with 403 on malicious path + * Fixed `res.download()` bug; when an error occurs remove _Content-Disposition_ + * Fixed; mounted apps settings now inherit from parent app [aheckmann] + * Fixed; stripping Content-Length / Content-Type when 204 + * Fixed `res.send()` 204. Closes #419 + * Fixed multiple _Set-Cookie_ headers via `res.header()`. Closes #402 + * Fixed bug messing with error handlers when `listenFD()` is called instead of `listen()`. [thanks guillermo] + + +1.0.0rc2 / 2010-08-17 +================== + + * Added `app.register()` for template engine mapping. Closes #390 + * Added `res.render()` callback support as second argument (no options) + * Added callback support to `res.download()` + * Added callback support for `res.sendfile()` + * Added support for middleware access via `express.middlewareName()` vs `connect.middlewareName()` + * Added "partials" setting to docs + * Added default expresso tests to `express(1)` generated app. Closes #384 + * Fixed `res.sendfile()` error handling, defer via `next()` + * Fixed `res.render()` callback when a layout is used [thanks guillermo] + * Fixed; `make install` creating ~/.node_libraries when not present + * Fixed issue preventing error handlers from being defined anywhere. Closes #387 + +1.0.0rc / 2010-07-28 +================== + + * Added mounted hook. Closes #369 + * Added connect dependency to _package.json_ + + * Removed "reload views" setting and support code + development env never caches, production always caches. + + * Removed _param_ in route callbacks, signature is now + simply (req, res, next), previously (req, res, params, next). + Use _req.params_ for path captures, _req.query_ for GET params. + + * Fixed "home" setting + * Fixed middleware/router precedence issue. Closes #366 + * Fixed; _configure()_ callbacks called immediately. Closes #368 + +1.0.0beta2 / 2010-07-23 +================== + + * Added more examples + * Added; exporting `Server` constructor + * Added `Server#helpers()` for view locals + * Added `Server#dynamicHelpers()` for dynamic view locals. Closes #349 + * Added support for absolute view paths + * Added; _home_ setting defaults to `Server#route` for mounted apps. Closes #363 + * Added Guillermo Rauch to the contributor list + * Added support for "as" for non-collection partials. Closes #341 + * Fixed _install.sh_, ensuring _~/.node_libraries_ exists. Closes #362 [thanks jf] + * Fixed `res.render()` exceptions, now passed to `next()` when no callback is given [thanks guillermo] + * Fixed instanceof `Array` checks, now `Array.isArray()` + * Fixed express(1) expansion of public dirs. Closes #348 + * Fixed middleware precedence. Closes #345 + * Fixed view watcher, now async [thanks aheckmann] + +1.0.0beta / 2010-07-15 +================== + + * Re-write + - much faster + - much lighter + - Check [ExpressJS.com](http://expressjs.com) for migration guide and updated docs + +0.14.0 / 2010-06-15 +================== + + * Utilize relative requires + * Added Static bufferSize option [aheckmann] + * Fixed caching of view and partial subdirectories [aheckmann] + * Fixed mime.type() comments now that ".ext" is not supported + * Updated haml submodule + * Updated class submodule + * Removed bin/express + +0.13.0 / 2010-06-01 +================== + + * Added node v0.1.97 compatibility + * Added support for deleting cookies via Request#cookie('key', null) + * Updated haml submodule + * Fixed not-found page, now using using charset utf-8 + * Fixed show-exceptions page, now using using charset utf-8 + * Fixed view support due to fs.readFile Buffers + * Changed; mime.type() no longer accepts ".type" due to node extname() changes + +0.12.0 / 2010-05-22 +================== + + * Added node v0.1.96 compatibility + * Added view `helpers` export which act as additional local variables + * Updated haml submodule + * Changed ETag; removed inode, modified time only + * Fixed LF to CRLF for setting multiple cookies + * Fixed cookie complation; values are now urlencoded + * Fixed cookies parsing; accepts quoted values and url escaped cookies + +0.11.0 / 2010-05-06 +================== + + * Added support for layouts using different engines + - this.render('page.html.haml', { layout: 'super-cool-layout.html.ejs' }) + - this.render('page.html.haml', { layout: 'foo' }) // assumes 'foo.html.haml' + - this.render('page.html.haml', { layout: false }) // no layout + * Updated ext submodule + * Updated haml submodule + * Fixed EJS partial support by passing along the context. Issue #307 + +0.10.1 / 2010-05-03 +================== + + * Fixed binary uploads. + +0.10.0 / 2010-04-30 +================== + + * Added charset support via Request#charset (automatically assigned to 'UTF-8' when respond()'s + encoding is set to 'utf8' or 'utf-8'. + * Added "encoding" option to Request#render(). Closes #299 + * Added "dump exceptions" setting, which is enabled by default. + * Added simple ejs template engine support + * Added error reponse support for text/plain, application/json. Closes #297 + * Added callback function param to Request#error() + * Added Request#sendHead() + * Added Request#stream() + * Added support for Request#respond(304, null) for empty response bodies + * Added ETag support to Request#sendfile() + * Added options to Request#sendfile(), passed to fs.createReadStream() + * Added filename arg to Request#download() + * Performance enhanced due to pre-reversing plugins so that plugins.reverse() is not called on each request + * Performance enhanced by preventing several calls to toLowerCase() in Router#match() + * Changed; Request#sendfile() now streams + * Changed; Renamed Request#halt() to Request#respond(). Closes #289 + * Changed; Using sys.inspect() instead of JSON.encode() for error output + * Changed; run() returns the http.Server instance. Closes #298 + * Changed; Defaulting Server#host to null (INADDR_ANY) + * Changed; Logger "common" format scale of 0.4f + * Removed Logger "request" format + * Fixed; Catching ENOENT in view caching, preventing error when "views/partials" is not found + * Fixed several issues with http client + * Fixed Logger Content-Length output + * Fixed bug preventing Opera from retaining the generated session id. Closes #292 + +0.9.0 / 2010-04-14 +================== + + * Added DSL level error() route support + * Added DSL level notFound() route support + * Added Request#error() + * Added Request#notFound() + * Added Request#render() callback function. Closes #258 + * Added "max upload size" setting + * Added "magic" variables to collection partials (\_\_index\_\_, \_\_length\_\_, \_\_isFirst\_\_, \_\_isLast\_\_). Closes #254 + * Added [haml.js](http://github.com/visionmedia/haml.js) submodule; removed haml-js + * Added callback function support to Request#halt() as 3rd/4th arg + * Added preprocessing of route param wildcards using param(). Closes #251 + * Added view partial support (with collections etc) + * Fixed bug preventing falsey params (such as ?page=0). Closes #286 + * Fixed setting of multiple cookies. Closes #199 + * Changed; view naming convention is now NAME.TYPE.ENGINE (for example page.html.haml) + * Changed; session cookie is now httpOnly + * Changed; Request is no longer global + * Changed; Event is no longer global + * Changed; "sys" module is no longer global + * Changed; moved Request#download to Static plugin where it belongs + * Changed; Request instance created before body parsing. Closes #262 + * Changed; Pre-caching views in memory when "cache view contents" is enabled. Closes #253 + * Changed; Pre-caching view partials in memory when "cache view partials" is enabled + * Updated support to node --version 0.1.90 + * Updated dependencies + * Removed set("session cookie") in favour of use(Session, { cookie: { ... }}) + * Removed utils.mixin(); use Object#mergeDeep() + +0.8.0 / 2010-03-19 +================== + + * Added coffeescript example app. Closes #242 + * Changed; cache api now async friendly. Closes #240 + * Removed deprecated 'express/static' support. Use 'express/plugins/static' + +0.7.6 / 2010-03-19 +================== + + * Added Request#isXHR. Closes #229 + * Added `make install` (for the executable) + * Added `express` executable for setting up simple app templates + * Added "GET /public/*" to Static plugin, defaulting to /public + * Added Static plugin + * Fixed; Request#render() only calls cache.get() once + * Fixed; Namespacing View caches with "view:" + * Fixed; Namespacing Static caches with "static:" + * Fixed; Both example apps now use the Static plugin + * Fixed set("views"). Closes #239 + * Fixed missing space for combined log format + * Deprecated Request#sendfile() and 'express/static' + * Removed Server#running + +0.7.5 / 2010-03-16 +================== + + * Added Request#flash() support without args, now returns all flashes + * Updated ext submodule + +0.7.4 / 2010-03-16 +================== + + * Fixed session reaper + * Changed; class.js replacing js-oo Class implementation (quite a bit faster, no browser cruft) + +0.7.3 / 2010-03-16 +================== + + * Added package.json + * Fixed requiring of haml / sass due to kiwi removal + +0.7.2 / 2010-03-16 +================== + + * Fixed GIT submodules (HAH!) + +0.7.1 / 2010-03-16 +================== + + * Changed; Express now using submodules again until a PM is adopted + * Changed; chat example using millisecond conversions from ext + +0.7.0 / 2010-03-15 +================== + + * Added Request#pass() support (finds the next matching route, or the given path) + * Added Logger plugin (default "common" format replaces CommonLogger) + * Removed Profiler plugin + * Removed CommonLogger plugin + +0.6.0 / 2010-03-11 +================== + + * Added seed.yml for kiwi package management support + * Added HTTP client query string support when method is GET. Closes #205 + + * Added support for arbitrary view engines. + For example "foo.engine.html" will now require('engine'), + the exports from this module are cached after the first require(). + + * Added async plugin support + + * Removed usage of RESTful route funcs as http client + get() etc, use http.get() and friends + + * Removed custom exceptions + +0.5.0 / 2010-03-10 +================== + + * Added ext dependency (library of js extensions) + * Removed extname() / basename() utils. Use path module + * Removed toArray() util. Use arguments.values + * Removed escapeRegexp() util. Use RegExp.escape() + * Removed process.mixin() dependency. Use utils.mixin() + * Removed Collection + * Removed ElementCollection + * Shameless self promotion of ebook "Advanced JavaScript" (http://dev-mag.com) ;) + +0.4.0 / 2010-02-11 +================== + + * Added flash() example to sample upload app + * Added high level restful http client module (express/http) + * Changed; RESTful route functions double as HTTP clients. Closes #69 + * Changed; throwing error when routes are added at runtime + * Changed; defaulting render() context to the current Request. Closes #197 + * Updated haml submodule + +0.3.0 / 2010-02-11 +================== + + * Updated haml / sass submodules. Closes #200 + * Added flash message support. Closes #64 + * Added accepts() now allows multiple args. fixes #117 + * Added support for plugins to halt. Closes #189 + * Added alternate layout support. Closes #119 + * Removed Route#run(). Closes #188 + * Fixed broken specs due to use(Cookie) missing + +0.2.1 / 2010-02-05 +================== + + * Added "plot" format option for Profiler (for gnuplot processing) + * Added request number to Profiler plugin + * Fixed binary encoding for multi-part file uploads, was previously defaulting to UTF8 + * Fixed issue with routes not firing when not files are present. Closes #184 + * Fixed process.Promise -> events.Promise + +0.2.0 / 2010-02-03 +================== + + * Added parseParam() support for name[] etc. (allows for file inputs with "multiple" attr) Closes #180 + * Added Both Cache and Session option "reapInterval" may be "reapEvery". Closes #174 + * Added expiration support to cache api with reaper. Closes #133 + * Added cache Store.Memory#reap() + * Added Cache; cache api now uses first class Cache instances + * Added abstract session Store. Closes #172 + * Changed; cache Memory.Store#get() utilizing Collection + * Renamed MemoryStore -> Store.Memory + * Fixed use() of the same plugin several time will always use latest options. Closes #176 + +0.1.0 / 2010-02-03 +================== + + * Changed; Hooks (before / after) pass request as arg as well as evaluated in their context + * Updated node support to 0.1.27 Closes #169 + * Updated dirname(__filename) -> __dirname + * Updated libxmljs support to v0.2.0 + * Added session support with memory store / reaping + * Added quick uid() helper + * Added multi-part upload support + * Added Sass.js support / submodule + * Added production env caching view contents and static files + * Added static file caching. Closes #136 + * Added cache plugin with memory stores + * Added support to StaticFile so that it works with non-textual files. + * Removed dirname() helper + * Removed several globals (now their modules must be required) + +0.0.2 / 2010-01-10 +================== + + * Added view benchmarks; currently haml vs ejs + * Added Request#attachment() specs. Closes #116 + * Added use of node's parseQuery() util. Closes #123 + * Added `make init` for submodules + * Updated Haml + * Updated sample chat app to show messages on load + * Updated libxmljs parseString -> parseHtmlString + * Fixed `make init` to work with older versions of git + * Fixed specs can now run independant specs for those who cant build deps. Closes #127 + * Fixed issues introduced by the node url module changes. Closes 126. + * Fixed two assertions failing due to Collection#keys() returning strings + * Fixed faulty Collection#toArray() spec due to keys() returning strings + * Fixed `make test` now builds libxmljs.node before testing + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/express/LICENSE b/node_modules/express/LICENSE new file mode 100755 index 0000000..0f3c767 --- /dev/null +++ b/node_modules/express/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2009-2014 TJ Holowaychuk + +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/node_modules/express/Readme.md b/node_modules/express/Readme.md new file mode 100755 index 0000000..33caf7f --- /dev/null +++ b/node_modules/express/Readme.md @@ -0,0 +1,113 @@ +[![express logo](https://i.cloudup.com/zfY6lL7eFa-3000x3000.png)](http://expressjs.com/) + + Fast, unopinionated, minimalist web framework for [node](http://nodejs.org). + + [![NPM version](https://badge.fury.io/js/express.svg)](http://badge.fury.io/js/express) + [![Build Status](https://travis-ci.org/visionmedia/express.svg?branch=master)](https://travis-ci.org/visionmedia/express) + [![Coverage Status](https://img.shields.io/coveralls/visionmedia/express.svg)](https://coveralls.io/r/visionmedia/express) + [![Gittip](http://img.shields.io/gittip/visionmedia.svg)](https://www.gittip.com/visionmedia/) + +```js +var express = require('express'); +var app = express(); + +app.get('/', function(req, res){ + res.send('Hello World'); +}); + +app.listen(3000); +``` + +**PROTIP** Be sure to read [Migrating from 3.x to 4.x](https://github.com/visionmedia/express/wiki/Migrating-from-3.x-to-4.x) as well as [New features in 4.x](https://github.com/visionmedia/express/wiki/New-features-in-4.x). + +## Installation + + $ npm install express + +## Quick Start + + The quickest way to get started with express is to utilize the executable [`express(1)`](http://github.com/expressjs/generator) to generate an application as shown below: + + Install the executable. The executable's major version will match Express's: + + $ npm install -g express-generator@3 + + Create the app: + + $ express /tmp/foo && cd /tmp/foo + + Install dependencies: + + $ npm install + + Start the server: + + $ npm start + +## Features + + * Robust routing + * HTTP helpers (redirection, caching, etc) + * View system supporting 14+ template engines + * Content negotiation + * Focus on high performance + * Executable for generating applications quickly + * High test coverage + +## Philosophy + + The Express philosophy is to provide small, robust tooling for HTTP servers, making + it a great solution for single page applications, web sites, hybrids, or public + HTTP APIs. + + Express does not force you to use any specific ORM or template engine. With support for over + 14 template engines via [Consolidate.js](http://github.com/visionmedia/consolidate.js), + you can quickly craft your perfect framework. + +## More Information + + * [Website and Documentation](http://expressjs.com/) stored at [visionmedia/expressjs.com](https://github.com/visionmedia/expressjs.com) + * Join #express on freenode + * [Google Group](http://groups.google.com/group/express-js) for discussion + * Follow [tjholowaychuk](http://twitter.com/tjholowaychuk) and [defunctzombie](https://twitter.com/defunctzombie) on twitter for updates + * Visit the [Wiki](http://github.com/visionmedia/express/wiki) + * [РуÑÑкоÑÐ·Ñ‹Ñ‡Ð½Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ](http://jsman.ru/express/) + * Run express examples [online](https://runnable.com/express) + +## Viewing Examples + +Clone the Express repo, then install the dev dependencies to install all the example / test suite dependencies: + + $ git clone git://github.com/visionmedia/express.git --depth 1 + $ cd express + $ npm install + +Then run whichever tests you want: + + $ node examples/content-negotiation + +You can also view live examples here: + + + +## Running Tests + +To run the test suite, first invoke the following command within the repo, installing the development dependencies: + + $ npm install + +Then run the tests: + +```sh +$ npm test +``` + +## Contributors + + Author: [TJ Holowaychuk](http://github.com/visionmedia) + Lead Maintainer: [Roman Shtylman](https://github.com/defunctzombie) + Contributors: https://github.com/visionmedia/express/graphs/contributors + +## License + +MIT diff --git a/node_modules/express/index.js b/node_modules/express/index.js new file mode 100755 index 0000000..3da3378 --- /dev/null +++ b/node_modules/express/index.js @@ -0,0 +1,2 @@ + +module.exports = require('./lib/express'); diff --git a/node_modules/express/lib/application.js b/node_modules/express/lib/application.js new file mode 100755 index 0000000..a126020 --- /dev/null +++ b/node_modules/express/lib/application.js @@ -0,0 +1,549 @@ +/** + * Module dependencies. + */ + +var mixin = require('utils-merge'); +var escapeHtml = require('escape-html'); +var Router = require('./router'); +var methods = require('methods'); +var middleware = require('./middleware/init'); +var query = require('./middleware/query'); +var debug = require('debug')('express:application'); +var View = require('./view'); +var http = require('http'); +var compileETag = require('./utils').compileETag; +var compileTrust = require('./utils').compileTrust; +var deprecate = require('./utils').deprecate; +var resolve = require('path').resolve; + +/** + * Application prototype. + */ + +var app = exports = module.exports = {}; + +/** + * Initialize the server. + * + * - setup default configuration + * - setup default middleware + * - setup route reflection methods + * + * @api private + */ + +app.init = function(){ + this.cache = {}; + this.settings = {}; + this.engines = {}; + this.defaultConfiguration(); +}; + +/** + * Initialize application configuration. + * + * @api private + */ + +app.defaultConfiguration = function(){ + // default settings + this.enable('x-powered-by'); + this.set('etag', 'weak'); + var env = process.env.NODE_ENV || 'development'; + this.set('env', env); + this.set('subdomain offset', 2); + this.set('trust proxy', false); + + debug('booting in %s mode', env); + + // inherit protos + this.on('mount', function(parent){ + this.request.__proto__ = parent.request; + this.response.__proto__ = parent.response; + this.engines.__proto__ = parent.engines; + this.settings.__proto__ = parent.settings; + }); + + // setup locals + this.locals = Object.create(null); + + // top-most app is mounted at / + this.mountpath = '/'; + + // default locals + this.locals.settings = this.settings; + + // default configuration + this.set('view', View); + this.set('views', resolve('views')); + this.set('jsonp callback name', 'callback'); + + if (env === 'production') { + this.enable('view cache'); + } + + Object.defineProperty(this, 'router', { + get: function() { + throw new Error('\'app.router\' is deprecated!\nPlease see the 3.x to 4.x migration guide for details on how to update your app.'); + } + }); +}; + +/** + * lazily adds the base router if it has not yet been added. + * + * We cannot add the base router in the defaultConfiguration because + * it reads app settings which might be set after that has run. + * + * @api private + */ +app.lazyrouter = function() { + if (!this._router) { + this._router = new Router({ + caseSensitive: this.enabled('case sensitive routing'), + strict: this.enabled('strict routing') + }); + + this._router.use(query()); + this._router.use(middleware.init(this)); + } +}; + +/** + * Dispatch a req, res pair into the application. Starts pipeline processing. + * + * If no _done_ callback is provided, then default error handlers will respond + * in the event of an error bubbling through the stack. + * + * @api private + */ + +app.handle = function(req, res, done) { + var env = this.get('env'); + + this._router.handle(req, res, function(err) { + if (done) { + return done(err); + } + + // unhandled error + if (err) { + // default to 500 + if (res.statusCode < 400) res.statusCode = 500; + debug('default %s', res.statusCode); + + // respect err.status + if (err.status) res.statusCode = err.status; + + // production gets a basic error message + var msg = 'production' == env + ? http.STATUS_CODES[res.statusCode] + : err.stack || err.toString(); + msg = escapeHtml(msg); + + // log to stderr in a non-test env + if ('test' != env) console.error(err.stack || err.toString()); + if (res.headersSent) return req.socket.destroy(); + res.setHeader('Content-Type', 'text/html'); + res.setHeader('Content-Length', Buffer.byteLength(msg)); + if ('HEAD' == req.method) return res.end(); + res.end(msg); + return; + } + + // 404 + debug('default 404'); + res.statusCode = 404; + res.setHeader('Content-Type', 'text/html'); + if ('HEAD' == req.method) return res.end(); + res.end('Cannot ' + escapeHtml(req.method) + ' ' + escapeHtml(req.originalUrl) + '\n'); + }); +}; + +/** + * Proxy `Router#use()` to add middleware to the app router. + * See Router#use() documentation for details. + * + * If the _fn_ parameter is an express app, then it will be + * mounted at the _route_ specified. + * + * @api public + */ + +app.use = function(route, fn){ + var mount_app; + + // default route to '/' + if ('string' != typeof route) fn = route, route = '/'; + + // express app + if (fn.handle && fn.set) mount_app = fn; + + // restore .app property on req and res + if (mount_app) { + debug('.use app under %s', route); + mount_app.mountpath = route; + fn = function(req, res, next) { + var orig = req.app; + mount_app.handle(req, res, function(err) { + req.__proto__ = orig.request; + res.__proto__ = orig.response; + next(err); + }); + }; + } + + this.lazyrouter(); + this._router.use(route, fn); + + // mounted an app + if (mount_app) { + mount_app.parent = this; + mount_app.emit('mount', this); + } + + return this; +}; + +/** + * Proxy to the app `Router#route()` + * Returns a new `Route` instance for the _path_. + * + * Routes are isolated middleware stacks for specific paths. + * See the Route api docs for details. + * + * @api public + */ + +app.route = function(path){ + this.lazyrouter(); + return this._router.route(path); +}; + +/** + * Register the given template engine callback `fn` + * as `ext`. + * + * By default will `require()` the engine based on the + * file extension. For example if you try to render + * a "foo.jade" file Express will invoke the following internally: + * + * app.engine('jade', require('jade').__express); + * + * For engines that do not provide `.__express` out of the box, + * or if you wish to "map" a different extension to the template engine + * you may use this method. For example mapping the EJS template engine to + * ".html" files: + * + * app.engine('html', require('ejs').renderFile); + * + * In this case EJS provides a `.renderFile()` method with + * the same signature that Express expects: `(path, options, callback)`, + * though note that it aliases this method as `ejs.__express` internally + * so if you're using ".ejs" extensions you dont need to do anything. + * + * Some template engines do not follow this convention, the + * [Consolidate.js](https://github.com/visionmedia/consolidate.js) + * library was created to map all of node's popular template + * engines to follow this convention, thus allowing them to + * work seamlessly within Express. + * + * @param {String} ext + * @param {Function} fn + * @return {app} for chaining + * @api public + */ + +app.engine = function(ext, fn){ + if ('function' != typeof fn) throw new Error('callback function required'); + if ('.' != ext[0]) ext = '.' + ext; + this.engines[ext] = fn; + return this; +}; + +/** + * Proxy to `Router#param()` with one added api feature. The _name_ parameter + * can be an array of names. + * + * See the Router#param() docs for more details. + * + * @param {String|Array} name + * @param {Function} fn + * @return {app} for chaining + * @api public + */ + +app.param = function(name, fn){ + var self = this; + self.lazyrouter(); + + if (Array.isArray(name)) { + name.forEach(function(key) { + self.param(key, fn); + }); + return this; + } + + self._router.param(name, fn); + return this; +}; + +/** + * Assign `setting` to `val`, or return `setting`'s value. + * + * app.set('foo', 'bar'); + * app.get('foo'); + * // => "bar" + * + * Mounted servers inherit their parent server's settings. + * + * @param {String} setting + * @param {*} [val] + * @return {Server} for chaining + * @api public + */ + +app.set = function(setting, val){ + if (arguments.length === 1) { + // app.get(setting) + return this.settings[setting]; + } + + // set value + this.settings[setting] = val; + + // trigger matched settings + switch (setting) { + case 'etag': + debug('compile etag %s', val); + this.set('etag fn', compileETag(val)); + break; + case 'trust proxy': + debug('compile trust proxy %s', val); + this.set('trust proxy fn', compileTrust(val)); + break; + } + + return this; +}; + +/** + * Return the app's absolute pathname + * based on the parent(s) that have + * mounted it. + * + * For example if the application was + * mounted as "/admin", which itself + * was mounted as "/blog" then the + * return value would be "/blog/admin". + * + * @return {String} + * @api private + */ + +app.path = function(){ + return this.parent + ? this.parent.path() + this.mountpath + : ''; +}; + +/** + * Check if `setting` is enabled (truthy). + * + * app.enabled('foo') + * // => false + * + * app.enable('foo') + * app.enabled('foo') + * // => true + * + * @param {String} setting + * @return {Boolean} + * @api public + */ + +app.enabled = function(setting){ + return !!this.set(setting); +}; + +/** + * Check if `setting` is disabled. + * + * app.disabled('foo') + * // => true + * + * app.enable('foo') + * app.disabled('foo') + * // => false + * + * @param {String} setting + * @return {Boolean} + * @api public + */ + +app.disabled = function(setting){ + return !this.set(setting); +}; + +/** + * Enable `setting`. + * + * @param {String} setting + * @return {app} for chaining + * @api public + */ + +app.enable = function(setting){ + return this.set(setting, true); +}; + +/** + * Disable `setting`. + * + * @param {String} setting + * @return {app} for chaining + * @api public + */ + +app.disable = function(setting){ + return this.set(setting, false); +}; + +/** + * Delegate `.VERB(...)` calls to `router.VERB(...)`. + */ + +methods.forEach(function(method){ + app[method] = function(path){ + if ('get' == method && 1 == arguments.length) return this.set(path); + + this.lazyrouter(); + + var route = this._router.route(path); + route[method].apply(route, [].slice.call(arguments, 1)); + return this; + }; +}); + +/** + * Special-cased "all" method, applying the given route `path`, + * middleware, and callback to _every_ HTTP method. + * + * @param {String} path + * @param {Function} ... + * @return {app} for chaining + * @api public + */ + +app.all = function(path){ + this.lazyrouter(); + + var route = this._router.route(path); + var args = [].slice.call(arguments, 1); + methods.forEach(function(method){ + route[method].apply(route, args); + }); + + return this; +}; + +// del -> delete alias + +app.del = deprecate(app.delete, 'app.del: Use app.delete instead'); + +/** + * Render the given view `name` name with `options` + * and a callback accepting an error and the + * rendered template string. + * + * Example: + * + * app.render('email', { name: 'Tobi' }, function(err, html){ + * // ... + * }) + * + * @param {String} name + * @param {String|Function} options or fn + * @param {Function} fn + * @api public + */ + +app.render = function(name, options, fn){ + var opts = {}; + var cache = this.cache; + var engines = this.engines; + var view; + + // support callback function as second arg + if ('function' == typeof options) { + fn = options, options = {}; + } + + // merge app.locals + mixin(opts, this.locals); + + // merge options._locals + if (options._locals) mixin(opts, options._locals); + + // merge options + mixin(opts, options); + + // set .cache unless explicitly provided + opts.cache = null == opts.cache + ? this.enabled('view cache') + : opts.cache; + + // primed cache + if (opts.cache) view = cache[name]; + + // view + if (!view) { + view = new (this.get('view'))(name, { + defaultEngine: this.get('view engine'), + root: this.get('views'), + engines: engines + }); + + if (!view.path) { + var err = new Error('Failed to lookup view "' + name + '" in views directory "' + view.root + '"'); + err.view = view; + return fn(err); + } + + // prime the cache + if (opts.cache) cache[name] = view; + } + + // render + try { + view.render(opts, fn); + } catch (err) { + fn(err); + } +}; + +/** + * Listen for connections. + * + * A node `http.Server` is returned, with this + * application (which is a `Function`) as its + * callback. If you wish to create both an HTTP + * and HTTPS server you may do so with the "http" + * and "https" modules as shown here: + * + * var http = require('http') + * , https = require('https') + * , express = require('express') + * , app = express(); + * + * http.createServer(app).listen(80); + * https.createServer({ ... }, app).listen(443); + * + * @return {http.Server} + * @api public + */ + +app.listen = function(){ + var server = http.createServer(this); + return server.listen.apply(server, arguments); +}; diff --git a/node_modules/express/lib/express.js b/node_modules/express/lib/express.js new file mode 100755 index 0000000..7be6832 --- /dev/null +++ b/node_modules/express/lib/express.js @@ -0,0 +1,93 @@ +/** + * Module dependencies. + */ + +var EventEmitter = require('events').EventEmitter; +var mixin = require('utils-merge'); +var proto = require('./application'); +var Route = require('./router/route'); +var Router = require('./router'); +var req = require('./request'); +var res = require('./response'); + +/** + * Expose `createApplication()`. + */ + +exports = module.exports = createApplication; + +/** + * Create an express application. + * + * @return {Function} + * @api public + */ + +function createApplication() { + var app = function(req, res, next) { + app.handle(req, res, next); + }; + + mixin(app, proto); + mixin(app, EventEmitter.prototype); + + app.request = { __proto__: req, app: app }; + app.response = { __proto__: res, app: app }; + app.init(); + return app; +} + +/** + * Expose the prototypes. + */ + +exports.application = proto; +exports.request = req; +exports.response = res; + +/** + * Expose constructors. + */ + +exports.Route = Route; +exports.Router = Router; + +/** + * Expose middleware + */ + +exports.query = require('./middleware/query'); +exports.static = require('serve-static'); + +/** + * Replace removed middleware with an appropriate error message. + */ + +[ + 'json', + 'urlencoded', + 'bodyParser', + 'compress', + 'cookieSession', + 'session', + 'logger', + 'cookieParser', + 'favicon', + 'responseTime', + 'errorHandler', + 'timeout', + 'methodOverride', + 'vhost', + 'csrf', + 'directory', + 'limit', + 'multipart', + 'staticCache', +].forEach(function (name) { + Object.defineProperty(exports, name, { + get: function () { + throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.'); + }, + configurable: true + }); +}); diff --git a/node_modules/express/lib/middleware/init.js b/node_modules/express/lib/middleware/init.js new file mode 100755 index 0000000..c09cf0c --- /dev/null +++ b/node_modules/express/lib/middleware/init.js @@ -0,0 +1,26 @@ +/** + * Initialization middleware, exposing the + * request and response to eachother, as well + * as defaulting the X-Powered-By header field. + * + * @param {Function} app + * @return {Function} + * @api private + */ + +exports.init = function(app){ + return function expressInit(req, res, next){ + if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express'); + req.res = res; + res.req = req; + req.next = next; + + req.__proto__ = app.request; + res.__proto__ = app.response; + + res.locals = res.locals || Object.create(null); + + next(); + }; +}; + diff --git a/node_modules/express/lib/middleware/query.js b/node_modules/express/lib/middleware/query.js new file mode 100755 index 0000000..b828c85 --- /dev/null +++ b/node_modules/express/lib/middleware/query.js @@ -0,0 +1,39 @@ +/** + * Module dependencies. + */ + +var qs = require('qs'); +var parseUrl = require('parseurl'); + +/** + * Query: + * + * Automatically parse the query-string when available, + * populating the `req.query` object using + * [qs](https://github.com/visionmedia/node-querystring). + * + * Examples: + * + * .use(connect.query()) + * .use(function(req, res){ + * res.end(JSON.stringify(req.query)); + * }); + * + * The `options` passed are provided to qs.parse function. + * + * @param {Object} options + * @return {Function} + * @api public + */ + +module.exports = function query(options){ + return function query(req, res, next){ + if (!req.query) { + req.query = ~req.url.indexOf('?') + ? qs.parse(parseUrl(req).query, options) + : {}; + } + + next(); + }; +}; diff --git a/node_modules/express/lib/request.js b/node_modules/express/lib/request.js new file mode 100755 index 0000000..ce35431 --- /dev/null +++ b/node_modules/express/lib/request.js @@ -0,0 +1,426 @@ +/** + * Module dependencies. + */ + +var accepts = require('accepts'); +var typeis = require('type-is'); +var http = require('http'); +var fresh = require('fresh'); +var parseRange = require('range-parser'); +var parse = require('parseurl'); +var proxyaddr = require('proxy-addr'); + +/** + * Request prototype. + */ + +var req = exports = module.exports = { + __proto__: http.IncomingMessage.prototype +}; + +/** + * Return request header. + * + * The `Referrer` header field is special-cased, + * both `Referrer` and `Referer` are interchangeable. + * + * Examples: + * + * req.get('Content-Type'); + * // => "text/plain" + * + * req.get('content-type'); + * // => "text/plain" + * + * req.get('Something'); + * // => undefined + * + * Aliased as `req.header()`. + * + * @param {String} name + * @return {String} + * @api public + */ + +req.get = +req.header = function(name){ + switch (name = name.toLowerCase()) { + case 'referer': + case 'referrer': + return this.headers.referrer + || this.headers.referer; + default: + return this.headers[name]; + } +}; + +/** + * To do: update docs. + * + * Check if the given `type(s)` is acceptable, returning + * the best match when true, otherwise `undefined`, in which + * case you should respond with 406 "Not Acceptable". + * + * The `type` value may be a single mime type string + * such as "application/json", the extension name + * such as "json", a comma-delimted list such as "json, html, text/plain", + * an argument list such as `"json", "html", "text/plain"`, + * or an array `["json", "html", "text/plain"]`. When a list + * or array is given the _best_ match, if any is returned. + * + * Examples: + * + * // Accept: text/html + * req.accepts('html'); + * // => "html" + * + * // Accept: text/*, application/json + * req.accepts('html'); + * // => "html" + * req.accepts('text/html'); + * // => "text/html" + * req.accepts('json, text'); + * // => "json" + * req.accepts('application/json'); + * // => "application/json" + * + * // Accept: text/*, application/json + * req.accepts('image/png'); + * req.accepts('png'); + * // => undefined + * + * // Accept: text/*;q=.5, application/json + * req.accepts(['html', 'json']); + * req.accepts('html', 'json'); + * req.accepts('html, json'); + * // => "json" + * + * @param {String|Array} type(s) + * @return {String} + * @api public + */ + +req.accepts = function(){ + var accept = accepts(this); + return accept.types.apply(accept, arguments); +}; + +/** + * Check if the given `encoding` is accepted. + * + * @param {String} encoding + * @return {Boolean} + * @api public + */ + +req.acceptsEncoding = // backwards compatibility +req.acceptsEncodings = function(){ + var accept = accepts(this); + return accept.encodings.apply(accept, arguments); +}; + +/** + * To do: update docs. + * + * Check if the given `charset` is acceptable, + * otherwise you should respond with 406 "Not Acceptable". + * + * @param {String} charset + * @return {Boolean} + * @api public + */ + +req.acceptsCharset = // backwards compatibility +req.acceptsCharsets = function(){ + var accept = accepts(this); + return accept.charsets.apply(accept, arguments); +}; + +/** + * To do: update docs. + * + * Check if the given `lang` is acceptable, + * otherwise you should respond with 406 "Not Acceptable". + * + * @param {String} lang + * @return {Boolean} + * @api public + */ + +req.acceptsLanguage = // backwards compatibility +req.acceptsLanguages = function(){ + var accept = accepts(this); + return accept.languages.apply(accept, arguments); +}; + +/** + * Parse Range header field, + * capping to the given `size`. + * + * Unspecified ranges such as "0-" require + * knowledge of your resource length. In + * the case of a byte range this is of course + * the total number of bytes. If the Range + * header field is not given `null` is returned, + * `-1` when unsatisfiable, `-2` when syntactically invalid. + * + * NOTE: remember that ranges are inclusive, so + * for example "Range: users=0-3" should respond + * with 4 users when available, not 3. + * + * @param {Number} size + * @return {Array} + * @api public + */ + +req.range = function(size){ + var range = this.get('Range'); + if (!range) return; + return parseRange(size, range); +}; + +/** + * Return the value of param `name` when present or `defaultValue`. + * + * - Checks route placeholders, ex: _/user/:id_ + * - Checks body params, ex: id=12, {"id":12} + * - Checks query string params, ex: ?id=12 + * + * To utilize request bodies, `req.body` + * should be an object. This can be done by using + * the `bodyParser()` middleware. + * + * @param {String} name + * @param {Mixed} [defaultValue] + * @return {String} + * @api public + */ + +req.param = function(name, defaultValue){ + var params = this.params || {}; + var body = this.body || {}; + var query = this.query || {}; + if (null != params[name] && params.hasOwnProperty(name)) return params[name]; + if (null != body[name]) return body[name]; + if (null != query[name]) return query[name]; + return defaultValue; +}; + +/** + * Check if the incoming request contains the "Content-Type" + * header field, and it contains the give mime `type`. + * + * Examples: + * + * // With Content-Type: text/html; charset=utf-8 + * req.is('html'); + * req.is('text/html'); + * req.is('text/*'); + * // => true + * + * // When Content-Type is application/json + * req.is('json'); + * req.is('application/json'); + * req.is('application/*'); + * // => true + * + * req.is('html'); + * // => false + * + * @param {String} type + * @return {Boolean} + * @api public + */ + +req.is = function(types){ + if (!Array.isArray(types)) types = [].slice.call(arguments); + return typeis(this, types); +}; + +/** + * Return the protocol string "http" or "https" + * when requested with TLS. When the "trust proxy" + * setting trusts the socket address, the + * "X-Forwarded-Proto" header field will be trusted. + * If you're running behind a reverse proxy that + * supplies https for you this may be enabled. + * + * @return {String} + * @api public + */ + +req.__defineGetter__('protocol', function(){ + var trust = this.app.get('trust proxy fn'); + + if (!trust(this.connection.remoteAddress)) { + return this.connection.encrypted + ? 'https' + : 'http'; + } + + // Note: X-Forwarded-Proto is normally only ever a + // single value, but this is to be safe. + var proto = this.get('X-Forwarded-Proto') || 'http'; + return proto.split(/\s*,\s*/)[0]; +}); + +/** + * Short-hand for: + * + * req.protocol == 'https' + * + * @return {Boolean} + * @api public + */ + +req.__defineGetter__('secure', function(){ + return 'https' == this.protocol; +}); + +/** + * Return the remote address from the trusted proxy. + * + * The is the remote address on the socket unless + * "trust proxy" is set. + * + * @return {String} + * @api public + */ + +req.__defineGetter__('ip', function(){ + var trust = this.app.get('trust proxy fn'); + return proxyaddr(this, trust); +}); + +/** + * When "trust proxy" is set, trusted proxy addresses + client. + * + * For example if the value were "client, proxy1, proxy2" + * you would receive the array `["client", "proxy1", "proxy2"]` + * where "proxy2" is the furthest down-stream and "proxy1" and + * "proxy2" were trusted. + * + * @return {Array} + * @api public + */ + +req.__defineGetter__('ips', function(){ + var trust = this.app.get('trust proxy fn'); + var addrs = proxyaddr.all(this, trust); + return addrs.slice(1).reverse(); +}); + +/** + * Return subdomains as an array. + * + * Subdomains are the dot-separated parts of the host before the main domain of + * the app. By default, the domain of the app is assumed to be the last two + * parts of the host. This can be changed by setting "subdomain offset". + * + * For example, if the domain is "tobi.ferrets.example.com": + * If "subdomain offset" is not set, req.subdomains is `["ferrets", "tobi"]`. + * If "subdomain offset" is 3, req.subdomains is `["tobi"]`. + * + * @return {Array} + * @api public + */ + +req.__defineGetter__('subdomains', function(){ + var offset = this.app.get('subdomain offset'); + return (this.host || '') + .split('.') + .reverse() + .slice(offset); +}); + +/** + * Short-hand for `url.parse(req.url).pathname`. + * + * @return {String} + * @api public + */ + +req.__defineGetter__('path', function(){ + return parse(this).pathname; +}); + +/** + * Parse the "Host" header field hostname. + * + * When the "trust proxy" setting trusts the socket + * address, the "X-Forwarded-Host" header field will + * be trusted. + * + * @return {String} + * @api public + */ + +req.__defineGetter__('host', function(){ + var trust = this.app.get('trust proxy fn'); + var host = this.get('X-Forwarded-Host'); + + if (!host || !trust(this.connection.remoteAddress)) { + host = this.get('Host'); + } + + if (!host) return; + + // IPv6 literal support + var offset = host[0] === '[' + ? host.indexOf(']') + 1 + : 0; + var index = host.indexOf(':', offset); + + return ~index + ? host.substring(0, index) + : host; +}); + +/** + * Check if the request is fresh, aka + * Last-Modified and/or the ETag + * still match. + * + * @return {Boolean} + * @api public + */ + +req.__defineGetter__('fresh', function(){ + var method = this.method; + var s = this.res.statusCode; + + // GET or HEAD for weak freshness validation only + if ('GET' != method && 'HEAD' != method) return false; + + // 2xx or 304 as per rfc2616 14.26 + if ((s >= 200 && s < 300) || 304 == s) { + return fresh(this.headers, this.res._headers); + } + + return false; +}); + +/** + * Check if the request is stale, aka + * "Last-Modified" and / or the "ETag" for the + * resource has changed. + * + * @return {Boolean} + * @api public + */ + +req.__defineGetter__('stale', function(){ + return !this.fresh; +}); + +/** + * Check if the request was an _XMLHttpRequest_. + * + * @return {Boolean} + * @api public + */ + +req.__defineGetter__('xhr', function(){ + var val = this.get('X-Requested-With') || ''; + return 'xmlhttprequest' == val.toLowerCase(); +}); diff --git a/node_modules/express/lib/response.js b/node_modules/express/lib/response.js new file mode 100755 index 0000000..fbe5de3 --- /dev/null +++ b/node_modules/express/lib/response.js @@ -0,0 +1,783 @@ +/** + * Module dependencies. + */ + +var escapeHtml = require('escape-html'); +var http = require('http'); +var path = require('path'); +var mixin = require('utils-merge'); +var sign = require('cookie-signature').sign; +var normalizeType = require('./utils').normalizeType; +var normalizeTypes = require('./utils').normalizeTypes; +var setCharset = require('./utils').setCharset; +var contentDisposition = require('./utils').contentDisposition; +var deprecate = require('./utils').deprecate; +var statusCodes = http.STATUS_CODES; +var cookie = require('cookie'); +var send = require('send'); +var basename = path.basename; +var extname = path.extname; +var mime = send.mime; +var vary = require('vary'); + +/** + * Response prototype. + */ + +var res = module.exports = { + __proto__: http.ServerResponse.prototype +}; + +/** + * Set status `code`. + * + * @param {Number} code + * @return {ServerResponse} + * @api public + */ + +res.status = function(code){ + this.statusCode = code; + return this; +}; + +/** + * Set Link header field with the given `links`. + * + * Examples: + * + * res.links({ + * next: 'http://api.example.com/users?page=2', + * last: 'http://api.example.com/users?page=5' + * }); + * + * @param {Object} links + * @return {ServerResponse} + * @api public + */ + +res.links = function(links){ + var link = this.get('Link') || ''; + if (link) link += ', '; + return this.set('Link', link + Object.keys(links).map(function(rel){ + return '<' + links[rel] + '>; rel="' + rel + '"'; + }).join(', ')); +}; + +/** + * Send a response. + * + * Examples: + * + * res.send(new Buffer('wahoo')); + * res.send({ some: 'json' }); + * res.send('

    some html

    '); + * res.send(404, 'Sorry, cant find that'); + * res.send(404); + * + * @api public + */ + +res.send = function(body){ + var req = this.req; + var head = 'HEAD' == req.method; + var type; + var encoding; + var len; + + // settings + var app = this.app; + + // allow status / body + if (2 == arguments.length) { + // res.send(body, status) backwards compat + if ('number' != typeof body && 'number' == typeof arguments[1]) { + this.statusCode = arguments[1]; + } else { + this.statusCode = body; + body = arguments[1]; + } + } + + switch (typeof body) { + // response status + case 'number': + this.get('Content-Type') || this.type('txt'); + this.statusCode = body; + body = http.STATUS_CODES[body]; + break; + // string defaulting to html + case 'string': + if (!this.get('Content-Type')) this.type('html'); + break; + case 'boolean': + case 'object': + if (null == body) { + body = ''; + } else if (Buffer.isBuffer(body)) { + this.get('Content-Type') || this.type('bin'); + } else { + return this.json(body); + } + break; + } + + // write strings in utf-8 + if ('string' === typeof body) { + encoding = 'utf8'; + type = this.get('Content-Type'); + + // reflect this in content-type + if ('string' === typeof type) { + this.set('Content-Type', setCharset(type, 'utf-8')); + } + } + + // populate Content-Length + if (undefined !== body && !this.get('Content-Length')) { + len = Buffer.isBuffer(body) + ? body.length + : Buffer.byteLength(body, encoding); + this.set('Content-Length', len); + } + + // ETag support + var etag = len !== undefined && app.get('etag fn'); + if (etag && ('GET' === req.method || 'HEAD' === req.method)) { + if (!this.get('ETag')) { + etag = etag(body, encoding); + etag && this.set('ETag', etag); + } + } + + // freshness + if (req.fresh) this.statusCode = 304; + + // strip irrelevant headers + if (204 == this.statusCode || 304 == this.statusCode) { + this.removeHeader('Content-Type'); + this.removeHeader('Content-Length'); + this.removeHeader('Transfer-Encoding'); + body = ''; + } + + // respond + this.end((head ? null : body), encoding); + + return this; +}; + +/** + * Send JSON response. + * + * Examples: + * + * res.json(null); + * res.json({ user: 'tj' }); + * res.json(500, 'oh noes!'); + * res.json(404, 'I dont have that'); + * + * @api public + */ + +res.json = function(obj){ + // allow status / body + if (2 == arguments.length) { + // res.json(body, status) backwards compat + if ('number' == typeof arguments[1]) { + this.statusCode = arguments[1]; + return 'number' === typeof obj + ? jsonNumDeprecated.call(this, obj) + : jsonDeprecated.call(this, obj); + } else { + this.statusCode = obj; + obj = arguments[1]; + } + } + + // settings + var app = this.app; + var replacer = app.get('json replacer'); + var spaces = app.get('json spaces'); + var body = JSON.stringify(obj, replacer, spaces); + + // content-type + this.get('Content-Type') || this.set('Content-Type', 'application/json'); + + return this.send(body); +}; + +var jsonDeprecated = deprecate(res.json, + 'res.json(obj, status): Use res.json(status, obj) instead'); + +var jsonNumDeprecated = deprecate(res.json, + 'res.json(num, status): Use res.status(status).json(num) instead'); + +/** + * Send JSON response with JSONP callback support. + * + * Examples: + * + * res.jsonp(null); + * res.jsonp({ user: 'tj' }); + * res.jsonp(500, 'oh noes!'); + * res.jsonp(404, 'I dont have that'); + * + * @api public + */ + +res.jsonp = function(obj){ + // allow status / body + if (2 == arguments.length) { + // res.json(body, status) backwards compat + if ('number' == typeof arguments[1]) { + this.statusCode = arguments[1]; + return 'number' === typeof obj + ? jsonpNumDeprecated.call(this, obj) + : jsonpDeprecated.call(this, obj); + } else { + this.statusCode = obj; + obj = arguments[1]; + } + } + + // settings + var app = this.app; + var replacer = app.get('json replacer'); + var spaces = app.get('json spaces'); + var body = JSON.stringify(obj, replacer, spaces) + .replace(/\u2028/g, '\\u2028') + .replace(/\u2029/g, '\\u2029'); + var callback = this.req.query[app.get('jsonp callback name')]; + + // content-type + this.get('Content-Type') || this.set('Content-Type', 'application/json'); + + // fixup callback + if (Array.isArray(callback)) { + callback = callback[0]; + } + + // jsonp + if (callback && 'string' === typeof callback) { + this.set('Content-Type', 'text/javascript'); + var cb = callback.replace(/[^\[\]\w$.]/g, ''); + body = 'typeof ' + cb + ' === \'function\' && ' + cb + '(' + body + ');'; + } + + return this.send(body); +}; + +var jsonpDeprecated = deprecate(res.json, + 'res.jsonp(obj, status): Use res.jsonp(status, obj) instead'); + +var jsonpNumDeprecated = deprecate(res.json, + 'res.jsonp(num, status): Use res.status(status).jsonp(num) instead'); + +/** + * Transfer the file at the given `path`. + * + * Automatically sets the _Content-Type_ response header field. + * The callback `fn(err)` is invoked when the transfer is complete + * or when an error occurs. Be sure to check `res.sentHeader` + * if you wish to attempt responding, as the header and some data + * may have already been transferred. + * + * Options: + * + * - `maxAge` defaulting to 0 + * - `root` root directory for relative filenames + * - `hidden` serve hidden files, defaulting to false + * + * Other options are passed along to `send`. + * + * Examples: + * + * The following example illustrates how `res.sendfile()` may + * be used as an alternative for the `static()` middleware for + * dynamic situations. The code backing `res.sendfile()` is actually + * the same code, so HTTP cache support etc is identical. + * + * app.get('/user/:uid/photos/:file', function(req, res){ + * var uid = req.params.uid + * , file = req.params.file; + * + * req.user.mayViewFilesFrom(uid, function(yes){ + * if (yes) { + * res.sendfile('/uploads/' + uid + '/' + file); + * } else { + * res.send(403, 'Sorry! you cant see that.'); + * } + * }); + * }); + * + * @api public + */ + +res.sendfile = function(path, options, fn){ + options = options || {}; + var self = this; + var req = self.req; + var next = this.req.next; + var done; + + + // support function as second arg + if ('function' == typeof options) { + fn = options; + options = {}; + } + + // socket errors + req.socket.on('error', error); + + // errors + function error(err) { + if (done) return; + done = true; + + // clean up + cleanup(); + if (!self.headersSent) self.removeHeader('Content-Disposition'); + + // callback available + if (fn) return fn(err); + + // list in limbo if there's no callback + if (self.headersSent) return; + + // delegate + next(err); + } + + // streaming + function stream(stream) { + if (done) return; + cleanup(); + if (fn) stream.on('end', fn); + } + + // cleanup + function cleanup() { + req.socket.removeListener('error', error); + } + + // Back-compat + options.maxage = options.maxage || options.maxAge || 0; + + // transfer + var file = send(req, path, options); + file.on('error', error); + file.on('directory', next); + file.on('stream', stream); + file.pipe(this); + this.on('finish', cleanup); +}; + +/** + * Transfer the file at the given `path` as an attachment. + * + * Optionally providing an alternate attachment `filename`, + * and optional callback `fn(err)`. The callback is invoked + * when the data transfer is complete, or when an error has + * ocurred. Be sure to check `res.headersSent` if you plan to respond. + * + * This method uses `res.sendfile()`. + * + * @api public + */ + +res.download = function(path, filename, fn){ + // support function as second arg + if ('function' == typeof filename) { + fn = filename; + filename = null; + } + + filename = filename || path; + this.set('Content-Disposition', contentDisposition(filename)); + return this.sendfile(path, fn); +}; + +/** + * Set _Content-Type_ response header with `type` through `mime.lookup()` + * when it does not contain "/", or set the Content-Type to `type` otherwise. + * + * Examples: + * + * res.type('.html'); + * res.type('html'); + * res.type('json'); + * res.type('application/json'); + * res.type('png'); + * + * @param {String} type + * @return {ServerResponse} for chaining + * @api public + */ + +res.contentType = +res.type = function(type){ + return this.set('Content-Type', ~type.indexOf('/') + ? type + : mime.lookup(type)); +}; + +/** + * Respond to the Acceptable formats using an `obj` + * of mime-type callbacks. + * + * This method uses `req.accepted`, an array of + * acceptable types ordered by their quality values. + * When "Accept" is not present the _first_ callback + * is invoked, otherwise the first match is used. When + * no match is performed the server responds with + * 406 "Not Acceptable". + * + * Content-Type is set for you, however if you choose + * you may alter this within the callback using `res.type()` + * or `res.set('Content-Type', ...)`. + * + * res.format({ + * 'text/plain': function(){ + * res.send('hey'); + * }, + * + * 'text/html': function(){ + * res.send('

    hey

    '); + * }, + * + * 'appliation/json': function(){ + * res.send({ message: 'hey' }); + * } + * }); + * + * In addition to canonicalized MIME types you may + * also use extnames mapped to these types: + * + * res.format({ + * text: function(){ + * res.send('hey'); + * }, + * + * html: function(){ + * res.send('

    hey

    '); + * }, + * + * json: function(){ + * res.send({ message: 'hey' }); + * } + * }); + * + * By default Express passes an `Error` + * with a `.status` of 406 to `next(err)` + * if a match is not made. If you provide + * a `.default` callback it will be invoked + * instead. + * + * @param {Object} obj + * @return {ServerResponse} for chaining + * @api public + */ + +res.format = function(obj){ + var req = this.req; + var next = req.next; + + var fn = obj.default; + if (fn) delete obj.default; + var keys = Object.keys(obj); + + var key = req.accepts(keys); + + this.vary("Accept"); + + if (key) { + this.set('Content-Type', normalizeType(key).value); + obj[key](req, this, next); + } else if (fn) { + fn(); + } else { + var err = new Error('Not Acceptable'); + err.status = 406; + err.types = normalizeTypes(keys).map(function(o){ return o.value }); + next(err); + } + + return this; +}; + +/** + * Set _Content-Disposition_ header to _attachment_ with optional `filename`. + * + * @param {String} filename + * @return {ServerResponse} + * @api public + */ + +res.attachment = function(filename){ + if (filename) this.type(extname(filename)); + this.set('Content-Disposition', contentDisposition(filename)); + return this; +}; + +/** + * Set header `field` to `val`, or pass + * an object of header fields. + * + * Examples: + * + * res.set('Foo', ['bar', 'baz']); + * res.set('Accept', 'application/json'); + * res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' }); + * + * Aliased as `res.header()`. + * + * @param {String|Object|Array} field + * @param {String} val + * @return {ServerResponse} for chaining + * @api public + */ + +res.set = +res.header = function(field, val){ + if (2 == arguments.length) { + if (Array.isArray(val)) val = val.map(String); + else val = String(val); + if ('content-type' == field.toLowerCase() && !/;\s*charset\s*=/.test(val)) { + var charset = mime.charsets.lookup(val.split(';')[0]); + if (charset) val += '; charset=' + charset.toLowerCase(); + } + this.setHeader(field, val); + } else { + for (var key in field) { + this.set(key, field[key]); + } + } + return this; +}; + +/** + * Get value for header `field`. + * + * @param {String} field + * @return {String} + * @api public + */ + +res.get = function(field){ + return this.getHeader(field); +}; + +/** + * Clear cookie `name`. + * + * @param {String} name + * @param {Object} options + * @param {ServerResponse} for chaining + * @api public + */ + +res.clearCookie = function(name, options){ + var opts = { expires: new Date(1), path: '/' }; + return this.cookie(name, '', options + ? mixin(opts, options) + : opts); +}; + +/** + * Set cookie `name` to `val`, with the given `options`. + * + * Options: + * + * - `maxAge` max-age in milliseconds, converted to `expires` + * - `signed` sign the cookie + * - `path` defaults to "/" + * + * Examples: + * + * // "Remember Me" for 15 minutes + * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true }); + * + * // save as above + * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) + * + * @param {String} name + * @param {String|Object} val + * @param {Options} options + * @api public + */ + +res.cookie = function(name, val, options){ + options = mixin({}, options); + var secret = this.req.secret; + var signed = options.signed; + if (signed && !secret) throw new Error('cookieParser("secret") required for signed cookies'); + if ('number' == typeof val) val = val.toString(); + if ('object' == typeof val) val = 'j:' + JSON.stringify(val); + if (signed) val = 's:' + sign(val, secret); + if ('maxAge' in options) { + options.expires = new Date(Date.now() + options.maxAge); + options.maxAge /= 1000; + } + if (null == options.path) options.path = '/'; + var headerVal = cookie.serialize(name, String(val), options); + + // supports multiple 'res.cookie' calls by getting previous value + var prev = this.get('Set-Cookie'); + if (prev) { + if (Array.isArray(prev)) { + headerVal = prev.concat(headerVal); + } else { + headerVal = [prev, headerVal]; + } + } + this.set('Set-Cookie', headerVal); + return this; +}; + + +/** + * Set the location header to `url`. + * + * The given `url` can also be "back", which redirects + * to the _Referrer_ or _Referer_ headers or "/". + * + * Examples: + * + * res.location('/foo/bar').; + * res.location('http://example.com'); + * res.location('../login'); + * + * @param {String} url + * @api public + */ + +res.location = function(url){ + var req = this.req; + + // "back" is an alias for the referrer + if ('back' == url) url = req.get('Referrer') || '/'; + + // Respond + this.set('Location', url); + return this; +}; + +/** + * Redirect to the given `url` with optional response `status` + * defaulting to 302. + * + * The resulting `url` is determined by `res.location()`, so + * it will play nicely with mounted apps, relative paths, + * `"back"` etc. + * + * Examples: + * + * res.redirect('/foo/bar'); + * res.redirect('http://example.com'); + * res.redirect(301, 'http://example.com'); + * res.redirect('http://example.com', 301); + * res.redirect('../login'); // /blog/post/1 -> /blog/login + * + * @param {String} url + * @param {Number} code + * @api public + */ + +res.redirect = function(url){ + var head = 'HEAD' == this.req.method; + var status = 302; + var body; + + // allow status / url + if (2 == arguments.length) { + if ('number' == typeof url) { + status = url; + url = arguments[1]; + } else { + status = arguments[1]; + } + } + + // Set location header + this.location(url); + url = this.get('Location'); + + // Support text/{plain,html} by default + this.format({ + text: function(){ + body = statusCodes[status] + '. Redirecting to ' + encodeURI(url); + }, + + html: function(){ + var u = escapeHtml(url); + body = '

    ' + statusCodes[status] + '. Redirecting to ' + u + '

    '; + }, + + default: function(){ + body = ''; + } + }); + + // Respond + this.statusCode = status; + this.set('Content-Length', Buffer.byteLength(body)); + this.end(head ? null : body); +}; + +/** + * Add `field` to Vary. If already present in the Vary set, then + * this call is simply ignored. + * + * @param {Array|String} field + * @param {ServerResponse} for chaining + * @api public + */ + +res.vary = function(field){ + // checks for back-compat + if (!field) return this; + if (Array.isArray(field) && !field.length) return this; + + vary(this, field); + + return this; +}; + +/** + * Render `view` with the given `options` and optional callback `fn`. + * When a callback function is given a response will _not_ be made + * automatically, otherwise a response of _200_ and _text/html_ is given. + * + * Options: + * + * - `cache` boolean hinting to the engine it should cache + * - `filename` filename of the view being rendered + * + * @api public + */ + +res.render = function(view, options, fn){ + options = options || {}; + var self = this; + var req = this.req; + var app = req.app; + + // support callback function as second arg + if ('function' == typeof options) { + fn = options, options = {}; + } + + // merge res.locals + options._locals = self.locals; + + // default callback to respond + fn = fn || function(err, str){ + if (err) return req.next(err); + self.send(str); + }; + + // render + app.render(view, options, fn); +}; diff --git a/node_modules/express/lib/router/index.js b/node_modules/express/lib/router/index.js new file mode 100755 index 0000000..08462c1 --- /dev/null +++ b/node_modules/express/lib/router/index.js @@ -0,0 +1,452 @@ +/** + * Module dependencies. + */ + +var Route = require('./route'); +var Layer = require('./layer'); +var methods = require('methods'); +var debug = require('debug')('express:router'); +var parseUrl = require('parseurl'); +var slice = Array.prototype.slice; + +/** + * Initialize a new `Router` with the given `options`. + * + * @param {Object} options + * @return {Router} which is an callable function + * @api public + */ + +var proto = module.exports = function(options) { + options = options || {}; + + function router(req, res, next) { + router.handle(req, res, next); + } + + // mixin Router class functions + router.__proto__ = proto; + + router.params = {}; + router._params = []; + router.caseSensitive = options.caseSensitive; + router.strict = options.strict; + router.stack = []; + + return router; +}; + +/** + * Map the given param placeholder `name`(s) to the given callback. + * + * Parameter mapping is used to provide pre-conditions to routes + * which use normalized placeholders. For example a _:user_id_ parameter + * could automatically load a user's information from the database without + * any additional code, + * + * The callback uses the same signature as middleware, the only difference + * being that the value of the placeholder is passed, in this case the _id_ + * of the user. Once the `next()` function is invoked, just like middleware + * it will continue on to execute the route, or subsequent parameter functions. + * + * Just like in middleware, you must either respond to the request or call next + * to avoid stalling the request. + * + * app.param('user_id', function(req, res, next, id){ + * User.find(id, function(err, user){ + * if (err) { + * return next(err); + * } else if (!user) { + * return next(new Error('failed to load user')); + * } + * req.user = user; + * next(); + * }); + * }); + * + * @param {String} name + * @param {Function} fn + * @return {app} for chaining + * @api public + */ + +proto.param = function(name, fn){ + // param logic + if ('function' == typeof name) { + this._params.push(name); + return; + } + + // apply param functions + var params = this._params; + var len = params.length; + var ret; + + if (name[0] === ':') { + name = name.substr(1); + } + + for (var i = 0; i < len; ++i) { + if (ret = params[i](name, fn)) { + fn = ret; + } + } + + // ensure we end up with a + // middleware function + if ('function' != typeof fn) { + throw new Error('invalid param() call for ' + name + ', got ' + fn); + } + + (this.params[name] = this.params[name] || []).push(fn); + return this; +}; + +/** + * Dispatch a req, res into the router. + * + * @api private + */ + +proto.handle = function(req, res, done) { + var self = this; + + debug('dispatching %s %s', req.method, req.url); + + var method = req.method.toLowerCase(); + + var search = 1 + req.url.indexOf('?'); + var pathlength = search ? search - 1 : req.url.length; + var fqdn = 1 + req.url.substr(0, pathlength).indexOf('://'); + var protohost = fqdn ? req.url.substr(0, req.url.indexOf('/', 2 + fqdn)) : ''; + var idx = 0; + var removed = ''; + var slashAdded = false; + var paramcalled = {}; + + // store options for OPTIONS request + // only used if OPTIONS request + var options = []; + + // middleware and routes + var stack = self.stack; + + // manage inter-router variables + var parent = req.next; + var parentUrl = req.baseUrl || ''; + done = wrap(done, function(old, err) { + req.baseUrl = parentUrl; + req.next = parent; + old(err); + }); + req.next = next; + + // for options requests, respond with a default if nothing else responds + if (method === 'options') { + done = wrap(done, function(old, err) { + if (err || options.length === 0) return old(err); + + var body = options.join(','); + return res.set('Allow', body).send(body); + }); + } + + next(); + + function next(err) { + if (err === 'route') { + err = undefined; + } + + var layer = stack[idx++]; + var layerPath; + + if (!layer) { + return done(err); + } + + if (slashAdded) { + req.url = req.url.substr(1); + slashAdded = false; + } + + req.baseUrl = parentUrl; + req.url = protohost + removed + req.url.substr(protohost.length); + req.originalUrl = req.originalUrl || req.url; + removed = ''; + + try { + var path = parseUrl(req).pathname; + if (undefined == path) path = '/'; + + if (!layer.match(path)) return next(err); + + // route object and not middleware + var route = layer.route; + + // if final route, then we support options + if (route) { + // we don't run any routes with error first + if (err) { + return next(err); + } + + req.route = route; + + // we can now dispatch to the route + if (method === 'options' && !route.methods['options']) { + options.push.apply(options, route._options()); + } + } + + // Capture one-time layer values + req.params = layer.params; + layerPath = layer.path; + + // this should be done for the layer + return self.process_params(layer, paramcalled, req, res, function(err) { + if (err) { + return next(err); + } + + if (route) { + return layer.handle(req, res, next); + } + + trim_prefix(); + }); + + } catch (err) { + next(err); + } + + function trim_prefix() { + var c = path[layerPath.length]; + if (c && '/' != c && '.' != c) return next(err); + + // Trim off the part of the url that matches the route + // middleware (.use stuff) needs to have the path stripped + removed = layerPath; + if (removed.length) { + debug('trim prefix (%s) from url %s', layerPath, req.url); + req.url = protohost + req.url.substr(protohost.length + removed.length); + } + + // Ensure leading slash + if (!fqdn && req.url[0] !== '/') { + req.url = '/' + req.url; + slashAdded = true; + } + + // Setup base URL (no trailing slash) + if (removed.length && removed.substr(-1) === '/') { + req.baseUrl = parentUrl + removed.substring(0, removed.length - 1); + } else { + req.baseUrl = parentUrl + removed; + } + + debug('%s %s : %s', layer.handle.name || 'anonymous', layerPath, req.originalUrl); + var arity = layer.handle.length; + try { + if (err && arity === 4) { + layer.handle(err, req, res, next); + } else if (!err && arity < 4) { + layer.handle(req, res, next); + } else { + next(err); + } + } catch (err) { + next(err); + } + } + } + + function wrap(old, fn) { + return function () { + var args = [old].concat(slice.call(arguments)); + fn.apply(this, args); + }; + } +}; + +/** + * Process any parameters for the layer. + * + * @api private + */ + +proto.process_params = function(layer, called, req, res, done) { + var params = this.params; + + // captured parameters from the layer, keys and values + var keys = layer.keys; + + // fast track + if (!keys || keys.length === 0) { + return done(); + } + + var i = 0; + var name; + var paramIndex = 0; + var key; + var paramVal; + var paramCallbacks; + var paramCalled; + + // process params in order + // param callbacks can be async + function param(err) { + if (err) { + return done(err); + } + + if (i >= keys.length ) { + return done(); + } + + paramIndex = 0; + key = keys[i++]; + + if (!key) { + return done(); + } + + name = key.name; + paramVal = req.params[name]; + paramCallbacks = params[name]; + paramCalled = called[name]; + + if (paramVal === undefined || !paramCallbacks) { + return param(); + } + + // param previously called with same value or error occurred + if (paramCalled && (paramCalled.error || paramCalled.match === paramVal)) { + // restore value + req.params[name] = paramCalled.value; + + // next param + return param(paramCalled.error); + } + + called[name] = paramCalled = { + error: null, + match: paramVal, + value: paramVal + }; + + try { + return paramCallback(); + } catch (err) { + return done(err); + } + } + + // single param callbacks + function paramCallback(err) { + var fn = paramCallbacks[paramIndex++]; + + // store updated value + paramCalled.value = req.params[key.name]; + + if (err) { + // store error + paramCalled.error = err; + param(err); + return; + } + + if (!fn) return param(); + + fn(req, res, paramCallback, paramVal, key.name); + } + + param(); +}; + +/** + * Use the given middleware function, with optional path, defaulting to "/". + * + * Use (like `.all`) will run for any http METHOD, but it will not add + * handlers for those methods so OPTIONS requests will not consider `.use` + * functions even if they could respond. + * + * The other difference is that _route_ path is stripped and not visible + * to the handler function. The main effect of this feature is that mounted + * handlers can operate without any code changes regardless of the "prefix" + * pathname. + * + * @param {String|Function} route + * @param {Function} fn + * @return {app} for chaining + * @api public + */ + +proto.use = function(route, fn){ + // default route to '/' + if ('string' != typeof route) { + fn = route; + route = '/'; + } + + if (typeof fn !== 'function') { + var type = {}.toString.call(fn); + var msg = 'Router.use() requires callback functions but got a ' + type; + throw new Error(msg); + } + + // strip trailing slash + if ('/' == route[route.length - 1]) { + route = route.slice(0, -1); + } + + var layer = new Layer(route, { + sensitive: this.caseSensitive, + strict: this.strict, + end: false + }, fn); + + // add the middleware + debug('use %s %s', route || '/', fn.name || 'anonymous'); + + this.stack.push(layer); + return this; +}; + +/** + * Create a new Route for the given path. + * + * Each route contains a separate middleware stack and VERB handlers. + * + * See the Route api documentation for details on adding handlers + * and middleware to routes. + * + * @param {String} path + * @return {Route} + * @api public + */ + +proto.route = function(path){ + var route = new Route(path); + + var layer = new Layer(path, { + sensitive: this.caseSensitive, + strict: this.strict, + end: true + }, route.dispatch.bind(route)); + + layer.route = route; + + this.stack.push(layer); + return route; +}; + +// create Router#VERB functions +methods.concat('all').forEach(function(method){ + proto[method] = function(path){ + var route = this.route(path) + route[method].apply(route, [].slice.call(arguments, 1)); + return this; + }; +}); diff --git a/node_modules/express/lib/router/layer.js b/node_modules/express/lib/router/layer.js new file mode 100755 index 0000000..2dcb288 --- /dev/null +++ b/node_modules/express/lib/router/layer.js @@ -0,0 +1,67 @@ +/** + * Module dependencies. + */ + +var pathRegexp = require('path-to-regexp'); +var debug = require('debug')('express:router:layer'); + +/** + * Expose `Layer`. + */ + +module.exports = Layer; + +function Layer(path, options, fn) { + if (!(this instanceof Layer)) { + return new Layer(path, options, fn); + } + + debug('new %s', path); + options = options || {}; + this.regexp = pathRegexp(path, this.keys = [], options); + this.handle = fn; +} + +/** + * Check if this route matches `path`, if so + * populate `.params`. + * + * @param {String} path + * @return {Boolean} + * @api private + */ + +Layer.prototype.match = function(path){ + var keys = this.keys; + var params = this.params = {}; + var m = this.regexp.exec(path); + var n = 0; + var key; + var val; + + if (!m) return false; + + this.path = m[0]; + + for (var i = 1, len = m.length; i < len; ++i) { + key = keys[i - 1]; + + try { + val = 'string' == typeof m[i] + ? decodeURIComponent(m[i]) + : m[i]; + } catch(e) { + var err = new Error("Failed to decode param '" + m[i] + "'"); + err.status = 400; + throw err; + } + + if (key) { + params[key.name] = val; + } else { + params[n++] = val; + } + } + + return true; +}; diff --git a/node_modules/express/lib/router/route.js b/node_modules/express/lib/router/route.js new file mode 100755 index 0000000..dca4b1b --- /dev/null +++ b/node_modules/express/lib/router/route.js @@ -0,0 +1,191 @@ +/** + * Module dependencies. + */ + +var debug = require('debug')('express:router:route'); +var methods = require('methods'); +var utils = require('../utils'); + +/** + * Expose `Route`. + */ + +module.exports = Route; + +/** + * Initialize `Route` with the given `path`, + * + * @param {String} path + * @api private + */ + +function Route(path) { + debug('new %s', path); + this.path = path; + this.stack = undefined; + + // route handlers for various http methods + this.methods = {}; +} + +/** + * @return {Array} supported HTTP methods + * @api private + */ + +Route.prototype._options = function(){ + return Object.keys(this.methods).map(function(method) { + return method.toUpperCase(); + }); +}; + +/** + * dispatch req, res into this route + * + * @api private + */ + +Route.prototype.dispatch = function(req, res, done){ + var self = this; + var method = req.method.toLowerCase(); + + if (method === 'head' && !this.methods['head']) { + method = 'get'; + } + + req.route = self; + + // single middleware route case + if (typeof this.stack === 'function') { + this.stack(req, res, done); + return; + } + + var stack = self.stack; + if (!stack) { + return done(); + } + + var idx = 0; + (function next_layer(err) { + if (err && err === 'route') { + return done(); + } + + var layer = stack[idx++]; + if (!layer) { + return done(err); + } + + if (layer.method && layer.method !== method) { + return next_layer(err); + } + + var arity = layer.handle.length; + if (err) { + if (arity < 4) { + return next_layer(err); + } + + try { + layer.handle(err, req, res, next_layer); + } catch (err) { + next_layer(err); + } + return; + } + + if (arity > 3) { + return next_layer(); + } + + try { + layer.handle(req, res, next_layer); + } catch (err) { + next_layer(err); + } + })(); +}; + +/** + * Add a handler for all HTTP verbs to this route. + * + * Behaves just like middleware and can respond or call `next` + * to continue processing. + * + * You can use multiple `.all` call to add multiple handlers. + * + * function check_something(req, res, next){ + * next(); + * }; + * + * function validate_user(req, res, next){ + * next(); + * }; + * + * route + * .all(validate_user) + * .all(check_something) + * .get(function(req, res, next){ + * res.send('hello world'); + * }); + * + * @param {function} handler + * @return {Route} for chaining + * @api public + */ + +Route.prototype.all = function(){ + var self = this; + var callbacks = utils.flatten([].slice.call(arguments)); + callbacks.forEach(function(fn) { + if (typeof fn !== 'function') { + var type = {}.toString.call(fn); + var msg = 'Route.all() requires callback functions but got a ' + type; + throw new Error(msg); + } + + if (!self.stack) { + self.stack = fn; + } + else if (typeof self.stack === 'function') { + self.stack = [{ handle: self.stack }, { handle: fn }]; + } + else { + self.stack.push({ handle: fn }); + } + }); + + return self; +}; + +methods.forEach(function(method){ + Route.prototype[method] = function(){ + var self = this; + var callbacks = utils.flatten([].slice.call(arguments)); + + callbacks.forEach(function(fn) { + if (typeof fn !== 'function') { + var type = {}.toString.call(fn); + var msg = 'Route.' + method + '() requires callback functions but got a ' + type; + throw new Error(msg); + } + + debug('%s %s', method, self.path); + + if (!self.methods[method]) { + self.methods[method] = true; + } + + if (!self.stack) { + self.stack = []; + } + else if (typeof self.stack === 'function') { + self.stack = [{ handle: self.stack }]; + } + + self.stack.push({ method: method, handle: fn }); + }); + return self; + }; +}); diff --git a/node_modules/express/lib/utils.js b/node_modules/express/lib/utils.js new file mode 100755 index 0000000..d629fb9 --- /dev/null +++ b/node_modules/express/lib/utils.js @@ -0,0 +1,292 @@ +/** + * Module dependencies. + */ + +var mime = require('send').mime; +var crc32 = require('buffer-crc32'); +var crypto = require('crypto'); +var basename = require('path').basename; +var deprecate = require('util').deprecate; +var proxyaddr = require('proxy-addr'); + +/** + * Simple detection of charset parameter in content-type + */ +var charsetRegExp = /;\s*charset\s*=/; + +/** + * Deprecate function, like core `util.deprecate`, + * but with NODE_ENV and color support. + * + * @param {Function} fn + * @param {String} msg + * @return {Function} + * @api private + */ + +exports.deprecate = function(fn, msg){ + if (process.env.NODE_ENV === 'test') return fn; + + // prepend module name + msg = 'express: ' + msg; + + if (process.stderr.isTTY) { + // colorize + msg = '\x1b[31;1m' + msg + '\x1b[0m'; + } + + return deprecate(fn, msg); +}; + +/** + * Return strong ETag for `body`. + * + * @param {String|Buffer} body + * @param {String} [encoding] + * @return {String} + * @api private + */ + +exports.etag = function etag(body, encoding){ + if (body.length === 0) { + // fast-path empty body + return '"1B2M2Y8AsgTpgAmY7PhCfg=="' + } + + var hash = crypto + .createHash('md5') + .update(body, encoding) + .digest('base64') + return '"' + hash + '"' +}; + +/** + * Return weak ETag for `body`. + * + * @param {String|Buffer} body + * @param {String} [encoding] + * @return {String} + * @api private + */ + +exports.wetag = function wetag(body, encoding){ + if (body.length === 0) { + // fast-path empty body + return 'W/"0-0"' + } + + var buf = Buffer.isBuffer(body) + ? body + : new Buffer(body, encoding) + var len = buf.length + return 'W/"' + len.toString(16) + '-' + crc32.unsigned(buf) + '"' +}; + +/** + * Check if `path` looks absolute. + * + * @param {String} path + * @return {Boolean} + * @api private + */ + +exports.isAbsolute = function(path){ + if ('/' == path[0]) return true; + if (':' == path[1] && '\\' == path[2]) return true; + if ('\\\\' == path.substring(0, 2)) return true; // Microsoft Azure absolute path +}; + +/** + * Flatten the given `arr`. + * + * @param {Array} arr + * @return {Array} + * @api private + */ + +exports.flatten = function(arr, ret){ + ret = ret || []; + var len = arr.length; + for (var i = 0; i < len; ++i) { + if (Array.isArray(arr[i])) { + exports.flatten(arr[i], ret); + } else { + ret.push(arr[i]); + } + } + return ret; +}; + +/** + * Normalize the given `type`, for example "html" becomes "text/html". + * + * @param {String} type + * @return {Object} + * @api private + */ + +exports.normalizeType = function(type){ + return ~type.indexOf('/') + ? acceptParams(type) + : { value: mime.lookup(type), params: {} }; +}; + +/** + * Normalize `types`, for example "html" becomes "text/html". + * + * @param {Array} types + * @return {Array} + * @api private + */ + +exports.normalizeTypes = function(types){ + var ret = []; + + for (var i = 0; i < types.length; ++i) { + ret.push(exports.normalizeType(types[i])); + } + + return ret; +}; + +/** + * Generate Content-Disposition header appropriate for the filename. + * non-ascii filenames are urlencoded and a filename* parameter is added + * + * @param {String} filename + * @return {String} + * @api private + */ + +exports.contentDisposition = function(filename){ + var ret = 'attachment'; + if (filename) { + filename = basename(filename); + // if filename contains non-ascii characters, add a utf-8 version ala RFC 5987 + ret = /[^\040-\176]/.test(filename) + ? 'attachment; filename="' + encodeURI(filename) + '"; filename*=UTF-8\'\'' + encodeURI(filename) + : 'attachment; filename="' + filename + '"'; + } + + return ret; +}; + +/** + * Parse accept params `str` returning an + * object with `.value`, `.quality` and `.params`. + * also includes `.originalIndex` for stable sorting + * + * @param {String} str + * @return {Object} + * @api private + */ + +function acceptParams(str, index) { + var parts = str.split(/ *; */); + var ret = { value: parts[0], quality: 1, params: {}, originalIndex: index }; + + for (var i = 1; i < parts.length; ++i) { + var pms = parts[i].split(/ *= */); + if ('q' == pms[0]) { + ret.quality = parseFloat(pms[1]); + } else { + ret.params[pms[0]] = pms[1]; + } + } + + return ret; +} + +/** + * Compile "etag" value to function. + * + * @param {Boolean|String|Function} val + * @return {Function} + * @api private + */ + +exports.compileETag = function(val) { + var fn; + + if (typeof val === 'function') { + return val; + } + + switch (val) { + case true: + fn = exports.wetag; + break; + case false: + break; + case 'strong': + fn = exports.etag; + break; + case 'weak': + fn = exports.wetag; + break; + default: + throw new TypeError('unknown value for etag function: ' + val); + } + + return fn; +} + +/** + * Compile "proxy trust" value to function. + * + * @param {Boolean|String|Number|Array|Function} val + * @return {Function} + * @api private + */ + +exports.compileTrust = function(val) { + if (typeof val === 'function') return val; + + if (val === true) { + // Support plain true/false + return function(){ return true }; + } + + if (typeof val === 'number') { + // Support trusting hop count + return function(a, i){ return i < val }; + } + + if (typeof val === 'string') { + // Support comma-separated values + val = val.split(/ *, */); + } + + return proxyaddr.compile(val || []); +} + +/** + * Set the charset in a given Content-Type string. + * + * @param {String} type + * @param {String} charset + * @return {String} + * @api private + */ + +exports.setCharset = function(type, charset){ + if (!type || !charset) return type; + + var exists = charsetRegExp.test(type); + + // removing existing charset + if (exists) { + var parts = type.split(';'); + + for (var i = 1; i < parts.length; i++) { + if (charsetRegExp.test(';' + parts[i])) { + parts.splice(i, 1); + break; + } + } + + type = parts.join(';'); + } + + return type + '; charset=' + charset; +}; diff --git a/node_modules/express/lib/view.js b/node_modules/express/lib/view.js new file mode 100755 index 0000000..989e8bb --- /dev/null +++ b/node_modules/express/lib/view.js @@ -0,0 +1,77 @@ +/** + * Module dependencies. + */ + +var path = require('path'); +var fs = require('fs'); +var utils = require('./utils'); +var dirname = path.dirname; +var basename = path.basename; +var extname = path.extname; +var exists = fs.existsSync || path.existsSync; +var join = path.join; + +/** + * Expose `View`. + */ + +module.exports = View; + +/** + * Initialize a new `View` with the given `name`. + * + * Options: + * + * - `defaultEngine` the default template engine name + * - `engines` template engine require() cache + * - `root` root path for view lookup + * + * @param {String} name + * @param {Object} options + * @api private + */ + +function View(name, options) { + options = options || {}; + this.name = name; + this.root = options.root; + var engines = options.engines; + this.defaultEngine = options.defaultEngine; + var ext = this.ext = extname(name); + if (!ext && !this.defaultEngine) throw new Error('No default engine was specified and no extension was provided.'); + if (!ext) name += (ext = this.ext = ('.' != this.defaultEngine[0] ? '.' : '') + this.defaultEngine); + this.engine = engines[ext] || (engines[ext] = require(ext.slice(1)).__express); + this.path = this.lookup(name); +} + +/** + * Lookup view by the given `path` + * + * @param {String} path + * @return {String} + * @api private + */ + +View.prototype.lookup = function(path){ + var ext = this.ext; + + // . + if (!utils.isAbsolute(path)) path = join(this.root, path); + if (exists(path)) return path; + + // /index. + path = join(dirname(path), basename(path, ext), 'index' + ext); + if (exists(path)) return path; +}; + +/** + * Render with the given `options` and callback `fn(err, str)`. + * + * @param {Object} options + * @param {Function} fn + * @api private + */ + +View.prototype.render = function(options, fn){ + this.engine(this.path, options, fn); +}; diff --git a/node_modules/express/node_modules/accepts/.npmignore b/node_modules/express/node_modules/accepts/.npmignore new file mode 100755 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/express/node_modules/accepts/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/express/node_modules/accepts/History.md b/node_modules/express/node_modules/accepts/History.md new file mode 100755 index 0000000..ef8b48d --- /dev/null +++ b/node_modules/express/node_modules/accepts/History.md @@ -0,0 +1,38 @@ + +1.0.6 / 2014-06-24 +================== + + * deps: negotiator@0.4.7 + +1.0.5 / 2014-06-20 +================== + + * fix crash when unknown extension given + +1.0.4 / 2014-06-19 +================== + + * use `mime-types` + +1.0.3 / 2014-06-11 +================== + + * deps: negotiator@0.4.6 + - Order by specificity when quality is the same + +1.0.2 / 2014-05-29 +================== + + * Fix interpretation when header not in request + * deps: pin negotiator@0.4.5 + +1.0.1 / 2014-01-18 +================== + + * Identity encoding isn't always acceptable + * deps: negotiator@~0.4.0 + +1.0.0 / 2013-12-27 +================== + + * Genesis diff --git a/node_modules/express/node_modules/accepts/README.md b/node_modules/express/node_modules/accepts/README.md new file mode 100755 index 0000000..f65596a --- /dev/null +++ b/node_modules/express/node_modules/accepts/README.md @@ -0,0 +1,101 @@ +# Accepts + +[![NPM version](https://badge.fury.io/js/accepts.svg)](http://badge.fury.io/js/accepts) +[![Build Status](https://travis-ci.org/expressjs/accepts.svg?branch=master)](https://travis-ci.org/expressjs/accepts) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/accepts.svg?branch=master)](https://coveralls.io/r/expressjs/accepts) + +Higher level content negotation based on [negotiator](https://github.com/federomero/negotiator). Extracted from [koa](https://github.com/koajs/koa) for general use. + +In addition to negotatior, it allows: + +- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` as well as `('text/html', 'application/json')`. +- Allows type shorthands such as `json`. +- Returns `false` when no types match +- Treats non-existent headers as `*` + +## API + +### var accept = new Accepts(req) + +```js +var accepts = require('accepts') + +http.createServer(function (req, res) { + var accept = accepts(req) +}) +``` + +### accept\[property\]\(\) + +Returns all the explicitly accepted content property as an array in descending priority. + +- `accept.types()` +- `accept.encodings()` +- `accept.charsets()` +- `accept.languages()` + +They are also aliased in singular form such as `accept.type()`. `accept.languages()` is also aliased as `accept.langs()`, etc. + +Note: you should almost never do this in a real app as it defeats the purpose of content negotiation. + +Example: + +```js +// in Google Chrome +var encodings = accept.encodings() // -> ['sdch', 'gzip', 'deflate'] +``` + +Since you probably don't support `sdch`, you should just supply the encodings you support: + +```js +var encoding = accept.encodings('gzip', 'deflate') // -> 'gzip', probably +``` + +### accept\[property\]\(values, ...\) + +You can either have `values` be an array or have an argument list of values. + +If the client does not accept any `values`, `false` will be returned. +If the client accepts any `values`, the preferred `value` will be return. + +For `accept.types()`, shorthand mime types are allowed. + +Example: + +```js +// req.headers.accept = 'application/json' + +accept.types('json') // -> 'json' +accept.types('html', 'json') // -> 'json' +accept.types('html') // -> false + +// req.headers.accept = '' +// which is equivalent to `*` + +accept.types() // -> [], no explicit types +accept.types('text/html', 'text/json') // -> 'text/html', since it was first +``` + +## License + +The MIT License (MIT) + +Copyright (c) 2013 Jonathan Ong me@jongleberry.com + +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. \ No newline at end of file diff --git a/node_modules/express/node_modules/accepts/index.js b/node_modules/express/node_modules/accepts/index.js new file mode 100755 index 0000000..75c2b50 --- /dev/null +++ b/node_modules/express/node_modules/accepts/index.js @@ -0,0 +1,160 @@ +var Negotiator = require('negotiator') +var mime = require('mime-types') + +var slice = [].slice + +module.exports = Accepts + +function Accepts(req) { + if (!(this instanceof Accepts)) + return new Accepts(req) + + this.headers = req.headers + this.negotiator = Negotiator(req) +} + +/** + * Check if the given `type(s)` is acceptable, returning + * the best match when true, otherwise `undefined`, in which + * case you should respond with 406 "Not Acceptable". + * + * The `type` value may be a single mime type string + * such as "application/json", the extension name + * such as "json" or an array `["json", "html", "text/plain"]`. When a list + * or array is given the _best_ match, if any is returned. + * + * Examples: + * + * // Accept: text/html + * this.types('html'); + * // => "html" + * + * // Accept: text/*, application/json + * this.types('html'); + * // => "html" + * this.types('text/html'); + * // => "text/html" + * this.types('json', 'text'); + * // => "json" + * this.types('application/json'); + * // => "application/json" + * + * // Accept: text/*, application/json + * this.types('image/png'); + * this.types('png'); + * // => undefined + * + * // Accept: text/*;q=.5, application/json + * this.types(['html', 'json']); + * this.types('html', 'json'); + * // => "json" + * + * @param {String|Array} type(s)... + * @return {String|Array|Boolean} + * @api public + */ + +Accepts.prototype.type = +Accepts.prototype.types = function (types) { + if (!Array.isArray(types)) types = slice.call(arguments); + var n = this.negotiator; + if (!types.length) return n.mediaTypes(); + if (!this.headers.accept) return types[0]; + var mimes = types.map(extToMime).filter(validMime); + var accepts = n.mediaTypes(mimes); + var first = accepts[0]; + if (!first) return false; + return types[mimes.indexOf(first)]; +} + +/** + * Return accepted encodings or best fit based on `encodings`. + * + * Given `Accept-Encoding: gzip, deflate` + * an array sorted by quality is returned: + * + * ['gzip', 'deflate'] + * + * @param {String|Array} encoding(s)... + * @return {String|Array} + * @api public + */ + +Accepts.prototype.encoding = +Accepts.prototype.encodings = function (encodings) { + if (!Array.isArray(encodings)) encodings = slice.call(arguments); + var n = this.negotiator; + if (!encodings.length) return n.encodings(); + return n.encodings(encodings)[0] || false; +} + +/** + * Return accepted charsets or best fit based on `charsets`. + * + * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5` + * an array sorted by quality is returned: + * + * ['utf-8', 'utf-7', 'iso-8859-1'] + * + * @param {String|Array} charset(s)... + * @return {String|Array} + * @api public + */ + +Accepts.prototype.charset = +Accepts.prototype.charsets = function (charsets) { + if (!Array.isArray(charsets)) charsets = [].slice.call(arguments); + var n = this.negotiator; + if (!charsets.length) return n.charsets(); + if (!this.headers['accept-charset']) return charsets[0]; + return n.charsets(charsets)[0] || false; +} + +/** + * Return accepted languages or best fit based on `langs`. + * + * Given `Accept-Language: en;q=0.8, es, pt` + * an array sorted by quality is returned: + * + * ['es', 'pt', 'en'] + * + * @param {String|Array} lang(s)... + * @return {Array|String} + * @api public + */ + +Accepts.prototype.lang = +Accepts.prototype.langs = +Accepts.prototype.language = +Accepts.prototype.languages = function (langs) { + if (!Array.isArray(langs)) langs = slice.call(arguments); + var n = this.negotiator; + if (!langs.length) return n.languages(); + if (!this.headers['accept-language']) return langs[0]; + return n.languages(langs)[0] || false; +} + +/** + * Convert extnames to mime. + * + * @param {String} type + * @return {String} + * @api private + */ + +function extToMime(type) { + if (~type.indexOf('/')) return type; + return mime.lookup(type); +} + +/** + * Check if mime is valid. + * + * @param {String} type + * @return {String} + * @api private + */ + +function validMime(type) { + return typeof type === 'string'; +} diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/.npmignore b/node_modules/express/node_modules/accepts/node_modules/mime-types/.npmignore new file mode 100755 index 0000000..919d51b --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/.npmignore @@ -0,0 +1,14 @@ +test +build.js + +# OS generated files # +###################### +.DS_Store* +# Icon? +ehthumbs.db +Thumbs.db + +# Node.js # +########### +node_modules +npm-debug.log diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/.travis.yml b/node_modules/express/node_modules/accepts/node_modules/mime-types/.travis.yml new file mode 100755 index 0000000..73c85c6 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/.travis.yml @@ -0,0 +1,12 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.11" +matrix: + allow_failures: + - node_js: "0.11" + fast_finish: true +before_install: + # remove build script deps before install + - node -pe 'f="./package.json";p=require(f);d=p.devDependencies;for(k in d){if("co"===k.substr(0,2))delete d[k]}require("fs").writeFileSync(f,JSON.stringify(p,null,2))' diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/LICENSE b/node_modules/express/node_modules/accepts/node_modules/mime-types/LICENSE new file mode 100755 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +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/node_modules/express/node_modules/accepts/node_modules/mime-types/Makefile b/node_modules/express/node_modules/accepts/node_modules/mime-types/Makefile new file mode 100755 index 0000000..ceaf011 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/Makefile @@ -0,0 +1,9 @@ + +build: + node --harmony-generators build.js + +test: + node test/mime.js + mocha --require should --reporter spec test/test.js + +.PHONY: build test diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/README.md b/node_modules/express/node_modules/accepts/node_modules/mime-types/README.md new file mode 100755 index 0000000..8e21ee1 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/README.md @@ -0,0 +1,101 @@ +# mime-types +[![NPM version](https://badge.fury.io/js/mime-types.svg)](https://badge.fury.io/js/mime-types) [![Build Status](https://travis-ci.org/expressjs/mime-types.svg?branch=master)](https://travis-ci.org/expressjs/mime-types) + +The ultimate javascript content-type utility. + +### Install + +```sh +$ npm install mime-types +``` + +#### Similar to [node-mime](https://github.com/broofa/node-mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`, so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- Additional mime types are added such as jade and stylus. Feel free to add more! +- Browser support via Browserify and Component by converting lists to JSON files. + +Otherwise, the API is compatible. + +### Adding Types + +If you'd like to add additional types, +simply create a PR adding the type to `custom.json` and +a reference link to the [sources](SOURCES.md). + +Do __NOT__ edit `mime.json` or `node.json`. +Those are pulled using `build.js`. +You should only touch `custom.json`. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/x-markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/x-markdown') // 'UTF-8' +``` + +### mime.types[extension] = type + +A map of content-types by extension. + +### mime.extensions[type] = [extensions] + +A map of extensions by content-type. + +### mime.define(types) + +Globally add definitions. +`types` must be an object of the form: + +```js +{ + "": [extensions...], + "": [extensions...] +} +``` + +See the `.json` files in `lib/` for examples. + +## License + +[MIT](LICENSE) diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/SOURCES.md b/node_modules/express/node_modules/accepts/node_modules/mime-types/SOURCES.md new file mode 100755 index 0000000..1d65012 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/SOURCES.md @@ -0,0 +1,17 @@ + +### Sources for custom types + +This is a list of sources for any custom mime types. +When adding custom mime types, please link to where you found the mime type, +even if it's from an unofficial source. + +- `text/coffeescript` - http://coffeescript.org/#scripts +- `text/x-handlebars-template` - https://handlebarsjs.com/#getting-started +- `text/x-sass` & `text/x-scss` - https://github.com/janlelis/rubybuntu-mime/blob/master/sass.xml +- `text.jsx` - http://facebook.github.io/react/docs/getting-started.html [[2]](https://github.com/facebook/react/blob/f230e0a03154e6f8a616e0da1fb3d97ffa1a6472/vendor/browser-transforms.js#L210) + +[Sources for node.json types](https://github.com/broofa/node-mime/blob/master/types/node.types) + +### Notes on weird types + +- `font/opentype` - This type is technically invalid according to the spec. No valid types begin with `font/`. No-one uses the official type of `application/vnd.ms-opentype` as the community standardized `application/x-font-otf`. However, chrome logs nonsense warnings unless opentype fonts are served with `font/opentype`. [[1]](http://stackoverflow.com/questions/2871655/proper-mime-type-for-fonts) diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/component.json b/node_modules/express/node_modules/accepts/node_modules/mime-types/component.json new file mode 100755 index 0000000..fa67a6d --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/component.json @@ -0,0 +1,16 @@ +{ + "name": "mime-types", + "description": "The ultimate javascript content-type utility.", + "version": "0.1.0", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com", + "twitter": "https://twitter.com/jongleberry" + }, + "repository": "expressjs/mime-types", + "license": "MIT", + "main": "lib/index.js", + "scripts": ["lib/index.js"], + "json": ["mime.json", "node.json", "custom.json"] +} diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/custom.json b/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/custom.json new file mode 100755 index 0000000..6137da3 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/custom.json @@ -0,0 +1,27 @@ +{ + "text/jade": [ + "jade" + ], + "text/stylus": [ + "stylus", + "styl" + ], + "text/less": [ + "less" + ], + "text/x-sass": [ + "sass" + ], + "text/x-scss": [ + "scss" + ], + "text/coffeescript": [ + "coffee" + ], + "text/x-handlebars-template": [ + "hbs" + ], + "text/jsx": [ + "jsx" + ] +} diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/index.js b/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/index.js new file mode 100755 index 0000000..27559ea --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/index.js @@ -0,0 +1,74 @@ + +// types[extension] = type +exports.types = Object.create(null) +// extensions[type] = [extensions] +exports.extensions = Object.create(null) +// define more mime types +exports.define = define + +// store the json files +exports.json = { + mime: require('./mime.json'), + node: require('./node.json'), + custom: require('./custom.json'), +} + +exports.lookup = function (string) { + if (!string || typeof string !== "string") return false + string = string.replace(/.*[\.\/\\]/, '').toLowerCase() + if (!string) return false + return exports.types[string] || false +} + +exports.extension = function (type) { + if (!type || typeof type !== "string") return false + type = type.match(/^\s*([^;\s]*)(?:;|\s|$)/) + if (!type) return false + var exts = exports.extensions[type[1].toLowerCase()] + if (!exts || !exts.length) return false + return exts[0] +} + +// type has to be an exact mime type +exports.charset = function (type) { + // special cases + switch (type) { + case 'application/json': return 'UTF-8' + } + + // default text/* to utf-8 + if (/^text\//.test(type)) return 'UTF-8' + + return false +} + +// backwards compatibility +exports.charsets = { + lookup: exports.charset +} + +exports.contentType = function (type) { + if (!type || typeof type !== "string") return false + if (!~type.indexOf('/')) type = exports.lookup(type) + if (!type) return false + if (!~type.indexOf('charset')) { + var charset = exports.charset(type) + if (charset) type += '; charset=' + charset.toLowerCase() + } + return type +} + +define(exports.json.mime) +define(exports.json.node) +define(exports.json.custom) + +function define(json) { + Object.keys(json).forEach(function (type) { + var exts = json[type] || [] + exports.extensions[type] = exports.extensions[type] || [] + exts.forEach(function (ext) { + if (!~exports.extensions[type].indexOf(ext)) exports.extensions[type].push(ext) + exports.types[ext] = type + }) + }) +} diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/mime.json b/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/mime.json new file mode 100755 index 0000000..f445a86 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/mime.json @@ -0,0 +1,3317 @@ +{ + "application/1d-interleaved-parityfec": [], + "application/3gpp-ims+xml": [], + "application/activemessage": [], + "application/andrew-inset": [ + "ez" + ], + "application/applefile": [], + "application/applixware": [ + "aw" + ], + "application/atom+xml": [ + "atom" + ], + "application/atomcat+xml": [ + "atomcat" + ], + "application/atomicmail": [], + "application/atomsvc+xml": [ + "atomsvc" + ], + "application/auth-policy+xml": [], + "application/batch-smtp": [], + "application/beep+xml": [], + "application/calendar+xml": [], + "application/cals-1840": [], + "application/ccmp+xml": [], + "application/ccxml+xml": [ + "ccxml" + ], + "application/cdmi-capability": [ + "cdmia" + ], + "application/cdmi-container": [ + "cdmic" + ], + "application/cdmi-domain": [ + "cdmid" + ], + "application/cdmi-object": [ + "cdmio" + ], + "application/cdmi-queue": [ + "cdmiq" + ], + "application/cea-2018+xml": [], + "application/cellml+xml": [], + "application/cfw": [], + "application/cnrp+xml": [], + "application/commonground": [], + "application/conference-info+xml": [], + "application/cpl+xml": [], + "application/csta+xml": [], + "application/cstadata+xml": [], + "application/cu-seeme": [ + "cu" + ], + "application/cybercash": [], + "application/davmount+xml": [ + "davmount" + ], + "application/dca-rft": [], + "application/dec-dx": [], + "application/dialog-info+xml": [], + "application/dicom": [], + "application/dns": [], + "application/docbook+xml": [ + "dbk" + ], + "application/dskpp+xml": [], + "application/dssc+der": [ + "dssc" + ], + "application/dssc+xml": [ + "xdssc" + ], + "application/dvcs": [], + "application/ecmascript": [ + "ecma" + ], + "application/edi-consent": [], + "application/edi-x12": [], + "application/edifact": [], + "application/emma+xml": [ + "emma" + ], + "application/epp+xml": [], + "application/epub+zip": [ + "epub" + ], + "application/eshop": [], + "application/example": [], + "application/exi": [ + "exi" + ], + "application/fastinfoset": [], + "application/fastsoap": [], + "application/fits": [], + "application/font-tdpfr": [ + "pfr" + ], + "application/framework-attributes+xml": [], + "application/gml+xml": [ + "gml" + ], + "application/gpx+xml": [ + "gpx" + ], + "application/gxf": [ + "gxf" + ], + "application/h224": [], + "application/held+xml": [], + "application/http": [], + "application/hyperstudio": [ + "stk" + ], + "application/ibe-key-request+xml": [], + "application/ibe-pkg-reply+xml": [], + "application/ibe-pp-data": [], + "application/iges": [], + "application/im-iscomposing+xml": [], + "application/index": [], + "application/index.cmd": [], + "application/index.obj": [], + "application/index.response": [], + "application/index.vnd": [], + "application/inkml+xml": [ + "ink", + "inkml" + ], + "application/iotp": [], + "application/ipfix": [ + "ipfix" + ], + "application/ipp": [], + "application/isup": [], + "application/java-archive": [ + "jar" + ], + "application/java-serialized-object": [ + "ser" + ], + "application/java-vm": [ + "class" + ], + "application/javascript": [ + "js" + ], + "application/json": [ + "json" + ], + "application/jsonml+json": [ + "jsonml" + ], + "application/kpml-request+xml": [], + "application/kpml-response+xml": [], + "application/lost+xml": [ + "lostxml" + ], + "application/mac-binhex40": [ + "hqx" + ], + "application/mac-compactpro": [ + "cpt" + ], + "application/macwriteii": [], + "application/mads+xml": [ + "mads" + ], + "application/marc": [ + "mrc" + ], + "application/marcxml+xml": [ + "mrcx" + ], + "application/mathematica": [ + "ma", + "nb", + "mb" + ], + "application/mathml-content+xml": [], + "application/mathml-presentation+xml": [], + "application/mathml+xml": [ + "mathml" + ], + "application/mbms-associated-procedure-description+xml": [], + "application/mbms-deregister+xml": [], + "application/mbms-envelope+xml": [], + "application/mbms-msk+xml": [], + "application/mbms-msk-response+xml": [], + "application/mbms-protection-description+xml": [], + "application/mbms-reception-report+xml": [], + "application/mbms-register+xml": [], + "application/mbms-register-response+xml": [], + "application/mbms-user-service-description+xml": [], + "application/mbox": [ + "mbox" + ], + "application/media_control+xml": [], + "application/mediaservercontrol+xml": [ + "mscml" + ], + "application/metalink+xml": [ + "metalink" + ], + "application/metalink4+xml": [ + "meta4" + ], + "application/mets+xml": [ + "mets" + ], + "application/mikey": [], + "application/mods+xml": [ + "mods" + ], + "application/moss-keys": [], + "application/moss-signature": [], + "application/mosskey-data": [], + "application/mosskey-request": [], + "application/mp21": [ + "m21", + "mp21" + ], + "application/mp4": [ + "mp4s" + ], + "application/mpeg4-generic": [], + "application/mpeg4-iod": [], + "application/mpeg4-iod-xmt": [], + "application/msc-ivr+xml": [], + "application/msc-mixer+xml": [], + "application/msword": [ + "doc", + "dot" + ], + "application/mxf": [ + "mxf" + ], + "application/nasdata": [], + "application/news-checkgroups": [], + "application/news-groupinfo": [], + "application/news-transmission": [], + "application/nss": [], + "application/ocsp-request": [], + "application/ocsp-response": [], + "application/octet-stream": [ + "bin", + "dms", + "lrf", + "mar", + "so", + "dist", + "distz", + "pkg", + "bpk", + "dump", + "elc", + "deploy" + ], + "application/oda": [ + "oda" + ], + "application/oebps-package+xml": [ + "opf" + ], + "application/ogg": [ + "ogx" + ], + "application/omdoc+xml": [ + "omdoc" + ], + "application/onenote": [ + "onetoc", + "onetoc2", + "onetmp", + "onepkg" + ], + "application/oxps": [ + "oxps" + ], + "application/parityfec": [], + "application/patch-ops-error+xml": [ + "xer" + ], + "application/pdf": [ + "pdf" + ], + "application/pgp-encrypted": [ + "pgp" + ], + "application/pgp-keys": [], + "application/pgp-signature": [ + "asc", + "sig" + ], + "application/pics-rules": [ + "prf" + ], + "application/pidf+xml": [], + "application/pidf-diff+xml": [], + "application/pkcs10": [ + "p10" + ], + "application/pkcs7-mime": [ + "p7m", + "p7c" + ], + "application/pkcs7-signature": [ + "p7s" + ], + "application/pkcs8": [ + "p8" + ], + "application/pkix-attr-cert": [ + "ac" + ], + "application/pkix-cert": [ + "cer" + ], + "application/pkix-crl": [ + "crl" + ], + "application/pkix-pkipath": [ + "pkipath" + ], + "application/pkixcmp": [ + "pki" + ], + "application/pls+xml": [ + "pls" + ], + "application/poc-settings+xml": [], + "application/postscript": [ + "ai", + "eps", + "ps" + ], + "application/prs.alvestrand.titrax-sheet": [], + "application/prs.cww": [ + "cww" + ], + "application/prs.nprend": [], + "application/prs.plucker": [], + "application/prs.rdf-xml-crypt": [], + "application/prs.xsf+xml": [], + "application/pskc+xml": [ + "pskcxml" + ], + "application/qsig": [], + "application/rdf+xml": [ + "rdf" + ], + "application/reginfo+xml": [ + "rif" + ], + "application/relax-ng-compact-syntax": [ + "rnc" + ], + "application/remote-printing": [], + "application/resource-lists+xml": [ + "rl" + ], + "application/resource-lists-diff+xml": [ + "rld" + ], + "application/riscos": [], + "application/rlmi+xml": [], + "application/rls-services+xml": [ + "rs" + ], + "application/rpki-ghostbusters": [ + "gbr" + ], + "application/rpki-manifest": [ + "mft" + ], + "application/rpki-roa": [ + "roa" + ], + "application/rpki-updown": [], + "application/rsd+xml": [ + "rsd" + ], + "application/rss+xml": [ + "rss" + ], + "application/rtf": [ + "rtf" + ], + "application/rtx": [], + "application/samlassertion+xml": [], + "application/samlmetadata+xml": [], + "application/sbml+xml": [ + "sbml" + ], + "application/scvp-cv-request": [ + "scq" + ], + "application/scvp-cv-response": [ + "scs" + ], + "application/scvp-vp-request": [ + "spq" + ], + "application/scvp-vp-response": [ + "spp" + ], + "application/sdp": [ + "sdp" + ], + "application/set-payment": [], + "application/set-payment-initiation": [ + "setpay" + ], + "application/set-registration": [], + "application/set-registration-initiation": [ + "setreg" + ], + "application/sgml": [], + "application/sgml-open-catalog": [], + "application/shf+xml": [ + "shf" + ], + "application/sieve": [], + "application/simple-filter+xml": [], + "application/simple-message-summary": [], + "application/simplesymbolcontainer": [], + "application/slate": [], + "application/smil": [], + "application/smil+xml": [ + "smi", + "smil" + ], + "application/soap+fastinfoset": [], + "application/soap+xml": [], + "application/sparql-query": [ + "rq" + ], + "application/sparql-results+xml": [ + "srx" + ], + "application/spirits-event+xml": [], + "application/srgs": [ + "gram" + ], + "application/srgs+xml": [ + "grxml" + ], + "application/sru+xml": [ + "sru" + ], + "application/ssdl+xml": [ + "ssdl" + ], + "application/ssml+xml": [ + "ssml" + ], + "application/tamp-apex-update": [], + "application/tamp-apex-update-confirm": [], + "application/tamp-community-update": [], + "application/tamp-community-update-confirm": [], + "application/tamp-error": [], + "application/tamp-sequence-adjust": [], + "application/tamp-sequence-adjust-confirm": [], + "application/tamp-status-query": [], + "application/tamp-status-response": [], + "application/tamp-update": [], + "application/tamp-update-confirm": [], + "application/tei+xml": [ + "tei", + "teicorpus" + ], + "application/thraud+xml": [ + "tfi" + ], + "application/timestamp-query": [], + "application/timestamp-reply": [], + "application/timestamped-data": [ + "tsd" + ], + "application/tve-trigger": [], + "application/ulpfec": [], + "application/vcard+xml": [], + "application/vemmi": [], + "application/vividence.scriptfile": [], + "application/vnd.3gpp.bsf+xml": [], + "application/vnd.3gpp.pic-bw-large": [ + "plb" + ], + "application/vnd.3gpp.pic-bw-small": [ + "psb" + ], + "application/vnd.3gpp.pic-bw-var": [ + "pvb" + ], + "application/vnd.3gpp.sms": [], + "application/vnd.3gpp2.bcmcsinfo+xml": [], + "application/vnd.3gpp2.sms": [], + "application/vnd.3gpp2.tcap": [ + "tcap" + ], + "application/vnd.3m.post-it-notes": [ + "pwn" + ], + "application/vnd.accpac.simply.aso": [ + "aso" + ], + "application/vnd.accpac.simply.imp": [ + "imp" + ], + "application/vnd.acucobol": [ + "acu" + ], + "application/vnd.acucorp": [ + "atc", + "acutc" + ], + "application/vnd.adobe.air-application-installer-package+zip": [ + "air" + ], + "application/vnd.adobe.formscentral.fcdt": [ + "fcdt" + ], + "application/vnd.adobe.fxp": [ + "fxp", + "fxpl" + ], + "application/vnd.adobe.partial-upload": [], + "application/vnd.adobe.xdp+xml": [ + "xdp" + ], + "application/vnd.adobe.xfdf": [ + "xfdf" + ], + "application/vnd.aether.imp": [], + "application/vnd.ah-barcode": [], + "application/vnd.ahead.space": [ + "ahead" + ], + "application/vnd.airzip.filesecure.azf": [ + "azf" + ], + "application/vnd.airzip.filesecure.azs": [ + "azs" + ], + "application/vnd.amazon.ebook": [ + "azw" + ], + "application/vnd.americandynamics.acc": [ + "acc" + ], + "application/vnd.amiga.ami": [ + "ami" + ], + "application/vnd.amundsen.maze+xml": [], + "application/vnd.android.package-archive": [ + "apk" + ], + "application/vnd.anser-web-certificate-issue-initiation": [ + "cii" + ], + "application/vnd.anser-web-funds-transfer-initiation": [ + "fti" + ], + "application/vnd.antix.game-component": [ + "atx" + ], + "application/vnd.apple.installer+xml": [ + "mpkg" + ], + "application/vnd.apple.mpegurl": [ + "m3u8" + ], + "application/vnd.arastra.swi": [], + "application/vnd.aristanetworks.swi": [ + "swi" + ], + "application/vnd.astraea-software.iota": [ + "iota" + ], + "application/vnd.audiograph": [ + "aep" + ], + "application/vnd.autopackage": [], + "application/vnd.avistar+xml": [], + "application/vnd.blueice.multipass": [ + "mpm" + ], + "application/vnd.bluetooth.ep.oob": [], + "application/vnd.bmi": [ + "bmi" + ], + "application/vnd.businessobjects": [ + "rep" + ], + "application/vnd.cab-jscript": [], + "application/vnd.canon-cpdl": [], + "application/vnd.canon-lips": [], + "application/vnd.cendio.thinlinc.clientconf": [], + "application/vnd.chemdraw+xml": [ + "cdxml" + ], + "application/vnd.chipnuts.karaoke-mmd": [ + "mmd" + ], + "application/vnd.cinderella": [ + "cdy" + ], + "application/vnd.cirpack.isdn-ext": [], + "application/vnd.claymore": [ + "cla" + ], + "application/vnd.cloanto.rp9": [ + "rp9" + ], + "application/vnd.clonk.c4group": [ + "c4g", + "c4d", + "c4f", + "c4p", + "c4u" + ], + "application/vnd.cluetrust.cartomobile-config": [ + "c11amc" + ], + "application/vnd.cluetrust.cartomobile-config-pkg": [ + "c11amz" + ], + "application/vnd.collection+json": [], + "application/vnd.commerce-battelle": [], + "application/vnd.commonspace": [ + "csp" + ], + "application/vnd.contact.cmsg": [ + "cdbcmsg" + ], + "application/vnd.cosmocaller": [ + "cmc" + ], + "application/vnd.crick.clicker": [ + "clkx" + ], + "application/vnd.crick.clicker.keyboard": [ + "clkk" + ], + "application/vnd.crick.clicker.palette": [ + "clkp" + ], + "application/vnd.crick.clicker.template": [ + "clkt" + ], + "application/vnd.crick.clicker.wordbank": [ + "clkw" + ], + "application/vnd.criticaltools.wbs+xml": [ + "wbs" + ], + "application/vnd.ctc-posml": [ + "pml" + ], + "application/vnd.ctct.ws+xml": [], + "application/vnd.cups-pdf": [], + "application/vnd.cups-postscript": [], + "application/vnd.cups-ppd": [ + "ppd" + ], + "application/vnd.cups-raster": [], + "application/vnd.cups-raw": [], + "application/vnd.curl": [], + "application/vnd.curl.car": [ + "car" + ], + "application/vnd.curl.pcurl": [ + "pcurl" + ], + "application/vnd.cybank": [], + "application/vnd.dart": [ + "dart" + ], + "application/vnd.data-vision.rdz": [ + "rdz" + ], + "application/vnd.dece.data": [ + "uvf", + "uvvf", + "uvd", + "uvvd" + ], + "application/vnd.dece.ttml+xml": [ + "uvt", + "uvvt" + ], + "application/vnd.dece.unspecified": [ + "uvx", + "uvvx" + ], + "application/vnd.dece.zip": [ + "uvz", + "uvvz" + ], + "application/vnd.denovo.fcselayout-link": [ + "fe_launch" + ], + "application/vnd.dir-bi.plate-dl-nosuffix": [], + "application/vnd.dna": [ + "dna" + ], + "application/vnd.dolby.mlp": [ + "mlp" + ], + "application/vnd.dolby.mobile.1": [], + "application/vnd.dolby.mobile.2": [], + "application/vnd.dpgraph": [ + "dpg" + ], + "application/vnd.dreamfactory": [ + "dfac" + ], + "application/vnd.ds-keypoint": [ + "kpxx" + ], + "application/vnd.dvb.ait": [ + "ait" + ], + "application/vnd.dvb.dvbj": [], + "application/vnd.dvb.esgcontainer": [], + "application/vnd.dvb.ipdcdftnotifaccess": [], + "application/vnd.dvb.ipdcesgaccess": [], + "application/vnd.dvb.ipdcesgaccess2": [], + "application/vnd.dvb.ipdcesgpdd": [], + "application/vnd.dvb.ipdcroaming": [], + "application/vnd.dvb.iptv.alfec-base": [], + "application/vnd.dvb.iptv.alfec-enhancement": [], + "application/vnd.dvb.notif-aggregate-root+xml": [], + "application/vnd.dvb.notif-container+xml": [], + "application/vnd.dvb.notif-generic+xml": [], + "application/vnd.dvb.notif-ia-msglist+xml": [], + "application/vnd.dvb.notif-ia-registration-request+xml": [], + "application/vnd.dvb.notif-ia-registration-response+xml": [], + "application/vnd.dvb.notif-init+xml": [], + "application/vnd.dvb.pfr": [], + "application/vnd.dvb.service": [ + "svc" + ], + "application/vnd.dxr": [], + "application/vnd.dynageo": [ + "geo" + ], + "application/vnd.easykaraoke.cdgdownload": [], + "application/vnd.ecdis-update": [], + "application/vnd.ecowin.chart": [ + "mag" + ], + "application/vnd.ecowin.filerequest": [], + "application/vnd.ecowin.fileupdate": [], + "application/vnd.ecowin.series": [], + "application/vnd.ecowin.seriesrequest": [], + "application/vnd.ecowin.seriesupdate": [], + "application/vnd.emclient.accessrequest+xml": [], + "application/vnd.enliven": [ + "nml" + ], + "application/vnd.eprints.data+xml": [], + "application/vnd.epson.esf": [ + "esf" + ], + "application/vnd.epson.msf": [ + "msf" + ], + "application/vnd.epson.quickanime": [ + "qam" + ], + "application/vnd.epson.salt": [ + "slt" + ], + "application/vnd.epson.ssf": [ + "ssf" + ], + "application/vnd.ericsson.quickcall": [], + "application/vnd.eszigno3+xml": [ + "es3", + "et3" + ], + "application/vnd.etsi.aoc+xml": [], + "application/vnd.etsi.cug+xml": [], + "application/vnd.etsi.iptvcommand+xml": [], + "application/vnd.etsi.iptvdiscovery+xml": [], + "application/vnd.etsi.iptvprofile+xml": [], + "application/vnd.etsi.iptvsad-bc+xml": [], + "application/vnd.etsi.iptvsad-cod+xml": [], + "application/vnd.etsi.iptvsad-npvr+xml": [], + "application/vnd.etsi.iptvservice+xml": [], + "application/vnd.etsi.iptvsync+xml": [], + "application/vnd.etsi.iptvueprofile+xml": [], + "application/vnd.etsi.mcid+xml": [], + "application/vnd.etsi.overload-control-policy-dataset+xml": [], + "application/vnd.etsi.sci+xml": [], + "application/vnd.etsi.simservs+xml": [], + "application/vnd.etsi.tsl+xml": [], + "application/vnd.etsi.tsl.der": [], + "application/vnd.eudora.data": [], + "application/vnd.ezpix-album": [ + "ez2" + ], + "application/vnd.ezpix-package": [ + "ez3" + ], + "application/vnd.f-secure.mobile": [], + "application/vnd.fdf": [ + "fdf" + ], + "application/vnd.fdsn.mseed": [ + "mseed" + ], + "application/vnd.fdsn.seed": [ + "seed", + "dataless" + ], + "application/vnd.ffsns": [], + "application/vnd.fints": [], + "application/vnd.flographit": [ + "gph" + ], + "application/vnd.fluxtime.clip": [ + "ftc" + ], + "application/vnd.font-fontforge-sfd": [], + "application/vnd.framemaker": [ + "fm", + "frame", + "maker", + "book" + ], + "application/vnd.frogans.fnc": [ + "fnc" + ], + "application/vnd.frogans.ltf": [ + "ltf" + ], + "application/vnd.fsc.weblaunch": [ + "fsc" + ], + "application/vnd.fujitsu.oasys": [ + "oas" + ], + "application/vnd.fujitsu.oasys2": [ + "oa2" + ], + "application/vnd.fujitsu.oasys3": [ + "oa3" + ], + "application/vnd.fujitsu.oasysgp": [ + "fg5" + ], + "application/vnd.fujitsu.oasysprs": [ + "bh2" + ], + "application/vnd.fujixerox.art-ex": [], + "application/vnd.fujixerox.art4": [], + "application/vnd.fujixerox.hbpl": [], + "application/vnd.fujixerox.ddd": [ + "ddd" + ], + "application/vnd.fujixerox.docuworks": [ + "xdw" + ], + "application/vnd.fujixerox.docuworks.binder": [ + "xbd" + ], + "application/vnd.fut-misnet": [], + "application/vnd.fuzzysheet": [ + "fzs" + ], + "application/vnd.genomatix.tuxedo": [ + "txd" + ], + "application/vnd.geocube+xml": [], + "application/vnd.geogebra.file": [ + "ggb" + ], + "application/vnd.geogebra.tool": [ + "ggt" + ], + "application/vnd.geometry-explorer": [ + "gex", + "gre" + ], + "application/vnd.geonext": [ + "gxt" + ], + "application/vnd.geoplan": [ + "g2w" + ], + "application/vnd.geospace": [ + "g3w" + ], + "application/vnd.globalplatform.card-content-mgt": [], + "application/vnd.globalplatform.card-content-mgt-response": [], + "application/vnd.gmx": [ + "gmx" + ], + "application/vnd.google-earth.kml+xml": [ + "kml" + ], + "application/vnd.google-earth.kmz": [ + "kmz" + ], + "application/vnd.grafeq": [ + "gqf", + "gqs" + ], + "application/vnd.gridmp": [], + "application/vnd.groove-account": [ + "gac" + ], + "application/vnd.groove-help": [ + "ghf" + ], + "application/vnd.groove-identity-message": [ + "gim" + ], + "application/vnd.groove-injector": [ + "grv" + ], + "application/vnd.groove-tool-message": [ + "gtm" + ], + "application/vnd.groove-tool-template": [ + "tpl" + ], + "application/vnd.groove-vcard": [ + "vcg" + ], + "application/vnd.hal+json": [], + "application/vnd.hal+xml": [ + "hal" + ], + "application/vnd.handheld-entertainment+xml": [ + "zmm" + ], + "application/vnd.hbci": [ + "hbci" + ], + "application/vnd.hcl-bireports": [], + "application/vnd.hhe.lesson-player": [ + "les" + ], + "application/vnd.hp-hpgl": [ + "hpgl" + ], + "application/vnd.hp-hpid": [ + "hpid" + ], + "application/vnd.hp-hps": [ + "hps" + ], + "application/vnd.hp-jlyt": [ + "jlt" + ], + "application/vnd.hp-pcl": [ + "pcl" + ], + "application/vnd.hp-pclxl": [ + "pclxl" + ], + "application/vnd.httphone": [], + "application/vnd.hzn-3d-crossword": [], + "application/vnd.ibm.afplinedata": [], + "application/vnd.ibm.electronic-media": [], + "application/vnd.ibm.minipay": [ + "mpy" + ], + "application/vnd.ibm.modcap": [ + "afp", + "listafp", + "list3820" + ], + "application/vnd.ibm.rights-management": [ + "irm" + ], + "application/vnd.ibm.secure-container": [ + "sc" + ], + "application/vnd.iccprofile": [ + "icc", + "icm" + ], + "application/vnd.igloader": [ + "igl" + ], + "application/vnd.immervision-ivp": [ + "ivp" + ], + "application/vnd.immervision-ivu": [ + "ivu" + ], + "application/vnd.informedcontrol.rms+xml": [], + "application/vnd.informix-visionary": [], + "application/vnd.infotech.project": [], + "application/vnd.infotech.project+xml": [], + "application/vnd.innopath.wamp.notification": [], + "application/vnd.insors.igm": [ + "igm" + ], + "application/vnd.intercon.formnet": [ + "xpw", + "xpx" + ], + "application/vnd.intergeo": [ + "i2g" + ], + "application/vnd.intertrust.digibox": [], + "application/vnd.intertrust.nncp": [], + "application/vnd.intu.qbo": [ + "qbo" + ], + "application/vnd.intu.qfx": [ + "qfx" + ], + "application/vnd.iptc.g2.conceptitem+xml": [], + "application/vnd.iptc.g2.knowledgeitem+xml": [], + "application/vnd.iptc.g2.newsitem+xml": [], + "application/vnd.iptc.g2.newsmessage+xml": [], + "application/vnd.iptc.g2.packageitem+xml": [], + "application/vnd.iptc.g2.planningitem+xml": [], + "application/vnd.ipunplugged.rcprofile": [ + "rcprofile" + ], + "application/vnd.irepository.package+xml": [ + "irp" + ], + "application/vnd.is-xpr": [ + "xpr" + ], + "application/vnd.isac.fcs": [ + "fcs" + ], + "application/vnd.jam": [ + "jam" + ], + "application/vnd.japannet-directory-service": [], + "application/vnd.japannet-jpnstore-wakeup": [], + "application/vnd.japannet-payment-wakeup": [], + "application/vnd.japannet-registration": [], + "application/vnd.japannet-registration-wakeup": [], + "application/vnd.japannet-setstore-wakeup": [], + "application/vnd.japannet-verification": [], + "application/vnd.japannet-verification-wakeup": [], + "application/vnd.jcp.javame.midlet-rms": [ + "rms" + ], + "application/vnd.jisp": [ + "jisp" + ], + "application/vnd.joost.joda-archive": [ + "joda" + ], + "application/vnd.kahootz": [ + "ktz", + "ktr" + ], + "application/vnd.kde.karbon": [ + "karbon" + ], + "application/vnd.kde.kchart": [ + "chrt" + ], + "application/vnd.kde.kformula": [ + "kfo" + ], + "application/vnd.kde.kivio": [ + "flw" + ], + "application/vnd.kde.kontour": [ + "kon" + ], + "application/vnd.kde.kpresenter": [ + "kpr", + "kpt" + ], + "application/vnd.kde.kspread": [ + "ksp" + ], + "application/vnd.kde.kword": [ + "kwd", + "kwt" + ], + "application/vnd.kenameaapp": [ + "htke" + ], + "application/vnd.kidspiration": [ + "kia" + ], + "application/vnd.kinar": [ + "kne", + "knp" + ], + "application/vnd.koan": [ + "skp", + "skd", + "skt", + "skm" + ], + "application/vnd.kodak-descriptor": [ + "sse" + ], + "application/vnd.las.las+xml": [ + "lasxml" + ], + "application/vnd.liberty-request+xml": [], + "application/vnd.llamagraphics.life-balance.desktop": [ + "lbd" + ], + "application/vnd.llamagraphics.life-balance.exchange+xml": [ + "lbe" + ], + "application/vnd.lotus-1-2-3": [ + "123" + ], + "application/vnd.lotus-approach": [ + "apr" + ], + "application/vnd.lotus-freelance": [ + "pre" + ], + "application/vnd.lotus-notes": [ + "nsf" + ], + "application/vnd.lotus-organizer": [ + "org" + ], + "application/vnd.lotus-screencam": [ + "scm" + ], + "application/vnd.lotus-wordpro": [ + "lwp" + ], + "application/vnd.macports.portpkg": [ + "portpkg" + ], + "application/vnd.marlin.drm.actiontoken+xml": [], + "application/vnd.marlin.drm.conftoken+xml": [], + "application/vnd.marlin.drm.license+xml": [], + "application/vnd.marlin.drm.mdcf": [], + "application/vnd.mcd": [ + "mcd" + ], + "application/vnd.medcalcdata": [ + "mc1" + ], + "application/vnd.mediastation.cdkey": [ + "cdkey" + ], + "application/vnd.meridian-slingshot": [], + "application/vnd.mfer": [ + "mwf" + ], + "application/vnd.mfmp": [ + "mfm" + ], + "application/vnd.micrografx.flo": [ + "flo" + ], + "application/vnd.micrografx.igx": [ + "igx" + ], + "application/vnd.mif": [ + "mif" + ], + "application/vnd.minisoft-hp3000-save": [], + "application/vnd.mitsubishi.misty-guard.trustweb": [], + "application/vnd.mobius.daf": [ + "daf" + ], + "application/vnd.mobius.dis": [ + "dis" + ], + "application/vnd.mobius.mbk": [ + "mbk" + ], + "application/vnd.mobius.mqy": [ + "mqy" + ], + "application/vnd.mobius.msl": [ + "msl" + ], + "application/vnd.mobius.plc": [ + "plc" + ], + "application/vnd.mobius.txf": [ + "txf" + ], + "application/vnd.mophun.application": [ + "mpn" + ], + "application/vnd.mophun.certificate": [ + "mpc" + ], + "application/vnd.motorola.flexsuite": [], + "application/vnd.motorola.flexsuite.adsi": [], + "application/vnd.motorola.flexsuite.fis": [], + "application/vnd.motorola.flexsuite.gotap": [], + "application/vnd.motorola.flexsuite.kmr": [], + "application/vnd.motorola.flexsuite.ttc": [], + "application/vnd.motorola.flexsuite.wem": [], + "application/vnd.motorola.iprm": [], + "application/vnd.mozilla.xul+xml": [ + "xul" + ], + "application/vnd.ms-artgalry": [ + "cil" + ], + "application/vnd.ms-asf": [], + "application/vnd.ms-cab-compressed": [ + "cab" + ], + "application/vnd.ms-color.iccprofile": [], + "application/vnd.ms-excel": [ + "xls", + "xlm", + "xla", + "xlc", + "xlt", + "xlw" + ], + "application/vnd.ms-excel.addin.macroenabled.12": [ + "xlam" + ], + "application/vnd.ms-excel.sheet.binary.macroenabled.12": [ + "xlsb" + ], + "application/vnd.ms-excel.sheet.macroenabled.12": [ + "xlsm" + ], + "application/vnd.ms-excel.template.macroenabled.12": [ + "xltm" + ], + "application/vnd.ms-fontobject": [ + "eot" + ], + "application/vnd.ms-htmlhelp": [ + "chm" + ], + "application/vnd.ms-ims": [ + "ims" + ], + "application/vnd.ms-lrm": [ + "lrm" + ], + "application/vnd.ms-office.activex+xml": [], + "application/vnd.ms-officetheme": [ + "thmx" + ], + "application/vnd.ms-opentype": [], + "application/vnd.ms-package.obfuscated-opentype": [], + "application/vnd.ms-pki.seccat": [ + "cat" + ], + "application/vnd.ms-pki.stl": [ + "stl" + ], + "application/vnd.ms-playready.initiator+xml": [], + "application/vnd.ms-powerpoint": [ + "ppt", + "pps", + "pot" + ], + "application/vnd.ms-powerpoint.addin.macroenabled.12": [ + "ppam" + ], + "application/vnd.ms-powerpoint.presentation.macroenabled.12": [ + "pptm" + ], + "application/vnd.ms-powerpoint.slide.macroenabled.12": [ + "sldm" + ], + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": [ + "ppsm" + ], + "application/vnd.ms-powerpoint.template.macroenabled.12": [ + "potm" + ], + "application/vnd.ms-printing.printticket+xml": [], + "application/vnd.ms-project": [ + "mpp", + "mpt" + ], + "application/vnd.ms-tnef": [], + "application/vnd.ms-wmdrm.lic-chlg-req": [], + "application/vnd.ms-wmdrm.lic-resp": [], + "application/vnd.ms-wmdrm.meter-chlg-req": [], + "application/vnd.ms-wmdrm.meter-resp": [], + "application/vnd.ms-word.document.macroenabled.12": [ + "docm" + ], + "application/vnd.ms-word.template.macroenabled.12": [ + "dotm" + ], + "application/vnd.ms-works": [ + "wps", + "wks", + "wcm", + "wdb" + ], + "application/vnd.ms-wpl": [ + "wpl" + ], + "application/vnd.ms-xpsdocument": [ + "xps" + ], + "application/vnd.mseq": [ + "mseq" + ], + "application/vnd.msign": [], + "application/vnd.multiad.creator": [], + "application/vnd.multiad.creator.cif": [], + "application/vnd.music-niff": [], + "application/vnd.musician": [ + "mus" + ], + "application/vnd.muvee.style": [ + "msty" + ], + "application/vnd.mynfc": [ + "taglet" + ], + "application/vnd.ncd.control": [], + "application/vnd.ncd.reference": [], + "application/vnd.nervana": [], + "application/vnd.netfpx": [], + "application/vnd.neurolanguage.nlu": [ + "nlu" + ], + "application/vnd.nitf": [ + "ntf", + "nitf" + ], + "application/vnd.noblenet-directory": [ + "nnd" + ], + "application/vnd.noblenet-sealer": [ + "nns" + ], + "application/vnd.noblenet-web": [ + "nnw" + ], + "application/vnd.nokia.catalogs": [], + "application/vnd.nokia.conml+wbxml": [], + "application/vnd.nokia.conml+xml": [], + "application/vnd.nokia.isds-radio-presets": [], + "application/vnd.nokia.iptv.config+xml": [], + "application/vnd.nokia.landmark+wbxml": [], + "application/vnd.nokia.landmark+xml": [], + "application/vnd.nokia.landmarkcollection+xml": [], + "application/vnd.nokia.n-gage.ac+xml": [], + "application/vnd.nokia.n-gage.data": [ + "ngdat" + ], + "application/vnd.nokia.ncd": [], + "application/vnd.nokia.pcd+wbxml": [], + "application/vnd.nokia.pcd+xml": [], + "application/vnd.nokia.radio-preset": [ + "rpst" + ], + "application/vnd.nokia.radio-presets": [ + "rpss" + ], + "application/vnd.novadigm.edm": [ + "edm" + ], + "application/vnd.novadigm.edx": [ + "edx" + ], + "application/vnd.novadigm.ext": [ + "ext" + ], + "application/vnd.ntt-local.file-transfer": [], + "application/vnd.ntt-local.sip-ta_remote": [], + "application/vnd.ntt-local.sip-ta_tcp_stream": [], + "application/vnd.oasis.opendocument.chart": [ + "odc" + ], + "application/vnd.oasis.opendocument.chart-template": [ + "otc" + ], + "application/vnd.oasis.opendocument.database": [ + "odb" + ], + "application/vnd.oasis.opendocument.formula": [ + "odf" + ], + "application/vnd.oasis.opendocument.formula-template": [ + "odft" + ], + "application/vnd.oasis.opendocument.graphics": [ + "odg" + ], + "application/vnd.oasis.opendocument.graphics-template": [ + "otg" + ], + "application/vnd.oasis.opendocument.image": [ + "odi" + ], + "application/vnd.oasis.opendocument.image-template": [ + "oti" + ], + "application/vnd.oasis.opendocument.presentation": [ + "odp" + ], + "application/vnd.oasis.opendocument.presentation-template": [ + "otp" + ], + "application/vnd.oasis.opendocument.spreadsheet": [ + "ods" + ], + "application/vnd.oasis.opendocument.spreadsheet-template": [ + "ots" + ], + "application/vnd.oasis.opendocument.text": [ + "odt" + ], + "application/vnd.oasis.opendocument.text-master": [ + "odm" + ], + "application/vnd.oasis.opendocument.text-template": [ + "ott" + ], + "application/vnd.oasis.opendocument.text-web": [ + "oth" + ], + "application/vnd.obn": [], + "application/vnd.oftn.l10n+json": [], + "application/vnd.oipf.contentaccessdownload+xml": [], + "application/vnd.oipf.contentaccessstreaming+xml": [], + "application/vnd.oipf.cspg-hexbinary": [], + "application/vnd.oipf.dae.svg+xml": [], + "application/vnd.oipf.dae.xhtml+xml": [], + "application/vnd.oipf.mippvcontrolmessage+xml": [], + "application/vnd.oipf.pae.gem": [], + "application/vnd.oipf.spdiscovery+xml": [], + "application/vnd.oipf.spdlist+xml": [], + "application/vnd.oipf.ueprofile+xml": [], + "application/vnd.oipf.userprofile+xml": [], + "application/vnd.olpc-sugar": [ + "xo" + ], + "application/vnd.oma-scws-config": [], + "application/vnd.oma-scws-http-request": [], + "application/vnd.oma-scws-http-response": [], + "application/vnd.oma.bcast.associated-procedure-parameter+xml": [], + "application/vnd.oma.bcast.drm-trigger+xml": [], + "application/vnd.oma.bcast.imd+xml": [], + "application/vnd.oma.bcast.ltkm": [], + "application/vnd.oma.bcast.notification+xml": [], + "application/vnd.oma.bcast.provisioningtrigger": [], + "application/vnd.oma.bcast.sgboot": [], + "application/vnd.oma.bcast.sgdd+xml": [], + "application/vnd.oma.bcast.sgdu": [], + "application/vnd.oma.bcast.simple-symbol-container": [], + "application/vnd.oma.bcast.smartcard-trigger+xml": [], + "application/vnd.oma.bcast.sprov+xml": [], + "application/vnd.oma.bcast.stkm": [], + "application/vnd.oma.cab-address-book+xml": [], + "application/vnd.oma.cab-feature-handler+xml": [], + "application/vnd.oma.cab-pcc+xml": [], + "application/vnd.oma.cab-user-prefs+xml": [], + "application/vnd.oma.dcd": [], + "application/vnd.oma.dcdc": [], + "application/vnd.oma.dd2+xml": [ + "dd2" + ], + "application/vnd.oma.drm.risd+xml": [], + "application/vnd.oma.group-usage-list+xml": [], + "application/vnd.oma.pal+xml": [], + "application/vnd.oma.poc.detailed-progress-report+xml": [], + "application/vnd.oma.poc.final-report+xml": [], + "application/vnd.oma.poc.groups+xml": [], + "application/vnd.oma.poc.invocation-descriptor+xml": [], + "application/vnd.oma.poc.optimized-progress-report+xml": [], + "application/vnd.oma.push": [], + "application/vnd.oma.scidm.messages+xml": [], + "application/vnd.oma.xcap-directory+xml": [], + "application/vnd.omads-email+xml": [], + "application/vnd.omads-file+xml": [], + "application/vnd.omads-folder+xml": [], + "application/vnd.omaloc-supl-init": [], + "application/vnd.openofficeorg.extension": [ + "oxt" + ], + "application/vnd.openxmlformats-officedocument.custom-properties+xml": [], + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": [], + "application/vnd.openxmlformats-officedocument.drawing+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": [], + "application/vnd.openxmlformats-officedocument.extended-properties+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.presentation": [ + "pptx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slide": [ + "sldx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": [ + "ppsx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.template": [ + "potx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": [ + "xlsx" + ], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": [ + "xltx" + ], + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": [], + "application/vnd.openxmlformats-officedocument.theme+xml": [], + "application/vnd.openxmlformats-officedocument.themeoverride+xml": [], + "application/vnd.openxmlformats-officedocument.vmldrawing": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": [ + "docx" + ], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": [ + "dotx" + ], + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": [], + "application/vnd.openxmlformats-package.core-properties+xml": [], + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": [], + "application/vnd.openxmlformats-package.relationships+xml": [], + "application/vnd.quobject-quoxdocument": [], + "application/vnd.osa.netdeploy": [], + "application/vnd.osgeo.mapguide.package": [ + "mgp" + ], + "application/vnd.osgi.bundle": [], + "application/vnd.osgi.dp": [ + "dp" + ], + "application/vnd.osgi.subsystem": [ + "esa" + ], + "application/vnd.otps.ct-kip+xml": [], + "application/vnd.palm": [ + "pdb", + "pqa", + "oprc" + ], + "application/vnd.paos.xml": [], + "application/vnd.pawaafile": [ + "paw" + ], + "application/vnd.pg.format": [ + "str" + ], + "application/vnd.pg.osasli": [ + "ei6" + ], + "application/vnd.piaccess.application-licence": [], + "application/vnd.picsel": [ + "efif" + ], + "application/vnd.pmi.widget": [ + "wg" + ], + "application/vnd.poc.group-advertisement+xml": [], + "application/vnd.pocketlearn": [ + "plf" + ], + "application/vnd.powerbuilder6": [ + "pbd" + ], + "application/vnd.powerbuilder6-s": [], + "application/vnd.powerbuilder7": [], + "application/vnd.powerbuilder7-s": [], + "application/vnd.powerbuilder75": [], + "application/vnd.powerbuilder75-s": [], + "application/vnd.preminet": [], + "application/vnd.previewsystems.box": [ + "box" + ], + "application/vnd.proteus.magazine": [ + "mgz" + ], + "application/vnd.publishare-delta-tree": [ + "qps" + ], + "application/vnd.pvi.ptid1": [ + "ptid" + ], + "application/vnd.pwg-multiplexed": [], + "application/vnd.pwg-xhtml-print+xml": [], + "application/vnd.qualcomm.brew-app-res": [], + "application/vnd.quark.quarkxpress": [ + "qxd", + "qxt", + "qwd", + "qwt", + "qxl", + "qxb" + ], + "application/vnd.radisys.moml+xml": [], + "application/vnd.radisys.msml+xml": [], + "application/vnd.radisys.msml-audit+xml": [], + "application/vnd.radisys.msml-audit-conf+xml": [], + "application/vnd.radisys.msml-audit-conn+xml": [], + "application/vnd.radisys.msml-audit-dialog+xml": [], + "application/vnd.radisys.msml-audit-stream+xml": [], + "application/vnd.radisys.msml-conf+xml": [], + "application/vnd.radisys.msml-dialog+xml": [], + "application/vnd.radisys.msml-dialog-base+xml": [], + "application/vnd.radisys.msml-dialog-fax-detect+xml": [], + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": [], + "application/vnd.radisys.msml-dialog-group+xml": [], + "application/vnd.radisys.msml-dialog-speech+xml": [], + "application/vnd.radisys.msml-dialog-transform+xml": [], + "application/vnd.rainstor.data": [], + "application/vnd.rapid": [], + "application/vnd.realvnc.bed": [ + "bed" + ], + "application/vnd.recordare.musicxml": [ + "mxl" + ], + "application/vnd.recordare.musicxml+xml": [ + "musicxml" + ], + "application/vnd.renlearn.rlprint": [], + "application/vnd.rig.cryptonote": [ + "cryptonote" + ], + "application/vnd.rim.cod": [ + "cod" + ], + "application/vnd.rn-realmedia": [ + "rm" + ], + "application/vnd.rn-realmedia-vbr": [ + "rmvb" + ], + "application/vnd.route66.link66+xml": [ + "link66" + ], + "application/vnd.rs-274x": [], + "application/vnd.ruckus.download": [], + "application/vnd.s3sms": [], + "application/vnd.sailingtracker.track": [ + "st" + ], + "application/vnd.sbm.cid": [], + "application/vnd.sbm.mid2": [], + "application/vnd.scribus": [], + "application/vnd.sealed.3df": [], + "application/vnd.sealed.csf": [], + "application/vnd.sealed.doc": [], + "application/vnd.sealed.eml": [], + "application/vnd.sealed.mht": [], + "application/vnd.sealed.net": [], + "application/vnd.sealed.ppt": [], + "application/vnd.sealed.tiff": [], + "application/vnd.sealed.xls": [], + "application/vnd.sealedmedia.softseal.html": [], + "application/vnd.sealedmedia.softseal.pdf": [], + "application/vnd.seemail": [ + "see" + ], + "application/vnd.sema": [ + "sema" + ], + "application/vnd.semd": [ + "semd" + ], + "application/vnd.semf": [ + "semf" + ], + "application/vnd.shana.informed.formdata": [ + "ifm" + ], + "application/vnd.shana.informed.formtemplate": [ + "itp" + ], + "application/vnd.shana.informed.interchange": [ + "iif" + ], + "application/vnd.shana.informed.package": [ + "ipk" + ], + "application/vnd.simtech-mindmapper": [ + "twd", + "twds" + ], + "application/vnd.smaf": [ + "mmf" + ], + "application/vnd.smart.notebook": [], + "application/vnd.smart.teacher": [ + "teacher" + ], + "application/vnd.software602.filler.form+xml": [], + "application/vnd.software602.filler.form-xml-zip": [], + "application/vnd.solent.sdkm+xml": [ + "sdkm", + "sdkd" + ], + "application/vnd.spotfire.dxp": [ + "dxp" + ], + "application/vnd.spotfire.sfs": [ + "sfs" + ], + "application/vnd.sss-cod": [], + "application/vnd.sss-dtf": [], + "application/vnd.sss-ntf": [], + "application/vnd.stardivision.calc": [ + "sdc" + ], + "application/vnd.stardivision.draw": [ + "sda" + ], + "application/vnd.stardivision.impress": [ + "sdd" + ], + "application/vnd.stardivision.math": [ + "smf" + ], + "application/vnd.stardivision.writer": [ + "sdw", + "vor" + ], + "application/vnd.stardivision.writer-global": [ + "sgl" + ], + "application/vnd.stepmania.package": [ + "smzip" + ], + "application/vnd.stepmania.stepchart": [ + "sm" + ], + "application/vnd.street-stream": [], + "application/vnd.sun.xml.calc": [ + "sxc" + ], + "application/vnd.sun.xml.calc.template": [ + "stc" + ], + "application/vnd.sun.xml.draw": [ + "sxd" + ], + "application/vnd.sun.xml.draw.template": [ + "std" + ], + "application/vnd.sun.xml.impress": [ + "sxi" + ], + "application/vnd.sun.xml.impress.template": [ + "sti" + ], + "application/vnd.sun.xml.math": [ + "sxm" + ], + "application/vnd.sun.xml.writer": [ + "sxw" + ], + "application/vnd.sun.xml.writer.global": [ + "sxg" + ], + "application/vnd.sun.xml.writer.template": [ + "stw" + ], + "application/vnd.sun.wadl+xml": [], + "application/vnd.sus-calendar": [ + "sus", + "susp" + ], + "application/vnd.svd": [ + "svd" + ], + "application/vnd.swiftview-ics": [], + "application/vnd.symbian.install": [ + "sis", + "sisx" + ], + "application/vnd.syncml+xml": [ + "xsm" + ], + "application/vnd.syncml.dm+wbxml": [ + "bdm" + ], + "application/vnd.syncml.dm+xml": [ + "xdm" + ], + "application/vnd.syncml.dm.notification": [], + "application/vnd.syncml.ds.notification": [], + "application/vnd.tao.intent-module-archive": [ + "tao" + ], + "application/vnd.tcpdump.pcap": [ + "pcap", + "cap", + "dmp" + ], + "application/vnd.tmobile-livetv": [ + "tmo" + ], + "application/vnd.trid.tpt": [ + "tpt" + ], + "application/vnd.triscape.mxs": [ + "mxs" + ], + "application/vnd.trueapp": [ + "tra" + ], + "application/vnd.truedoc": [], + "application/vnd.ubisoft.webplayer": [], + "application/vnd.ufdl": [ + "ufd", + "ufdl" + ], + "application/vnd.uiq.theme": [ + "utz" + ], + "application/vnd.umajin": [ + "umj" + ], + "application/vnd.unity": [ + "unityweb" + ], + "application/vnd.uoml+xml": [ + "uoml" + ], + "application/vnd.uplanet.alert": [], + "application/vnd.uplanet.alert-wbxml": [], + "application/vnd.uplanet.bearer-choice": [], + "application/vnd.uplanet.bearer-choice-wbxml": [], + "application/vnd.uplanet.cacheop": [], + "application/vnd.uplanet.cacheop-wbxml": [], + "application/vnd.uplanet.channel": [], + "application/vnd.uplanet.channel-wbxml": [], + "application/vnd.uplanet.list": [], + "application/vnd.uplanet.list-wbxml": [], + "application/vnd.uplanet.listcmd": [], + "application/vnd.uplanet.listcmd-wbxml": [], + "application/vnd.uplanet.signal": [], + "application/vnd.vcx": [ + "vcx" + ], + "application/vnd.vd-study": [], + "application/vnd.vectorworks": [], + "application/vnd.verimatrix.vcas": [], + "application/vnd.vidsoft.vidconference": [], + "application/vnd.visio": [ + "vsd", + "vst", + "vss", + "vsw" + ], + "application/vnd.visionary": [ + "vis" + ], + "application/vnd.vividence.scriptfile": [], + "application/vnd.vsf": [ + "vsf" + ], + "application/vnd.wap.sic": [], + "application/vnd.wap.slc": [], + "application/vnd.wap.wbxml": [ + "wbxml" + ], + "application/vnd.wap.wmlc": [ + "wmlc" + ], + "application/vnd.wap.wmlscriptc": [ + "wmlsc" + ], + "application/vnd.webturbo": [ + "wtb" + ], + "application/vnd.wfa.wsc": [], + "application/vnd.wmc": [], + "application/vnd.wmf.bootstrap": [], + "application/vnd.wolfram.mathematica": [], + "application/vnd.wolfram.mathematica.package": [], + "application/vnd.wolfram.player": [ + "nbp" + ], + "application/vnd.wordperfect": [ + "wpd" + ], + "application/vnd.wqd": [ + "wqd" + ], + "application/vnd.wrq-hp3000-labelled": [], + "application/vnd.wt.stf": [ + "stf" + ], + "application/vnd.wv.csp+wbxml": [], + "application/vnd.wv.csp+xml": [], + "application/vnd.wv.ssp+xml": [], + "application/vnd.xara": [ + "xar" + ], + "application/vnd.xfdl": [ + "xfdl" + ], + "application/vnd.xfdl.webform": [], + "application/vnd.xmi+xml": [], + "application/vnd.xmpie.cpkg": [], + "application/vnd.xmpie.dpkg": [], + "application/vnd.xmpie.plan": [], + "application/vnd.xmpie.ppkg": [], + "application/vnd.xmpie.xlim": [], + "application/vnd.yamaha.hv-dic": [ + "hvd" + ], + "application/vnd.yamaha.hv-script": [ + "hvs" + ], + "application/vnd.yamaha.hv-voice": [ + "hvp" + ], + "application/vnd.yamaha.openscoreformat": [ + "osf" + ], + "application/vnd.yamaha.openscoreformat.osfpvg+xml": [ + "osfpvg" + ], + "application/vnd.yamaha.remote-setup": [], + "application/vnd.yamaha.smaf-audio": [ + "saf" + ], + "application/vnd.yamaha.smaf-phrase": [ + "spf" + ], + "application/vnd.yamaha.through-ngn": [], + "application/vnd.yamaha.tunnel-udpencap": [], + "application/vnd.yellowriver-custom-menu": [ + "cmp" + ], + "application/vnd.zul": [ + "zir", + "zirz" + ], + "application/vnd.zzazz.deck+xml": [ + "zaz" + ], + "application/voicexml+xml": [ + "vxml" + ], + "application/vq-rtcpxr": [], + "application/watcherinfo+xml": [], + "application/whoispp-query": [], + "application/whoispp-response": [], + "application/widget": [ + "wgt" + ], + "application/winhlp": [ + "hlp" + ], + "application/wita": [], + "application/wordperfect5.1": [], + "application/wsdl+xml": [ + "wsdl" + ], + "application/wspolicy+xml": [ + "wspolicy" + ], + "application/x-7z-compressed": [ + "7z" + ], + "application/x-abiword": [ + "abw" + ], + "application/x-ace-compressed": [ + "ace" + ], + "application/x-amf": [], + "application/x-apple-diskimage": [ + "dmg" + ], + "application/x-authorware-bin": [ + "aab", + "x32", + "u32", + "vox" + ], + "application/x-authorware-map": [ + "aam" + ], + "application/x-authorware-seg": [ + "aas" + ], + "application/x-bcpio": [ + "bcpio" + ], + "application/x-bittorrent": [ + "torrent" + ], + "application/x-blorb": [ + "blb", + "blorb" + ], + "application/x-bzip": [ + "bz" + ], + "application/x-bzip2": [ + "bz2", + "boz" + ], + "application/x-cbr": [ + "cbr", + "cba", + "cbt", + "cbz", + "cb7" + ], + "application/x-cdlink": [ + "vcd" + ], + "application/x-cfs-compressed": [ + "cfs" + ], + "application/x-chat": [ + "chat" + ], + "application/x-chess-pgn": [ + "pgn" + ], + "application/x-conference": [ + "nsc" + ], + "application/x-compress": [], + "application/x-cpio": [ + "cpio" + ], + "application/x-csh": [ + "csh" + ], + "application/x-debian-package": [ + "deb", + "udeb" + ], + "application/x-dgc-compressed": [ + "dgc" + ], + "application/x-director": [ + "dir", + "dcr", + "dxr", + "cst", + "cct", + "cxt", + "w3d", + "fgd", + "swa" + ], + "application/x-doom": [ + "wad" + ], + "application/x-dtbncx+xml": [ + "ncx" + ], + "application/x-dtbook+xml": [ + "dtb" + ], + "application/x-dtbresource+xml": [ + "res" + ], + "application/x-dvi": [ + "dvi" + ], + "application/x-envoy": [ + "evy" + ], + "application/x-eva": [ + "eva" + ], + "application/x-font-bdf": [ + "bdf" + ], + "application/x-font-dos": [], + "application/x-font-framemaker": [], + "application/x-font-ghostscript": [ + "gsf" + ], + "application/x-font-libgrx": [], + "application/x-font-linux-psf": [ + "psf" + ], + "application/x-font-otf": [ + "otf" + ], + "application/x-font-pcf": [ + "pcf" + ], + "application/x-font-snf": [ + "snf" + ], + "application/x-font-speedo": [], + "application/x-font-sunos-news": [], + "application/x-font-ttf": [ + "ttf", + "ttc" + ], + "application/x-font-type1": [ + "pfa", + "pfb", + "pfm", + "afm" + ], + "application/font-woff": [ + "woff" + ], + "application/x-font-vfont": [], + "application/x-freearc": [ + "arc" + ], + "application/x-futuresplash": [ + "spl" + ], + "application/x-gca-compressed": [ + "gca" + ], + "application/x-glulx": [ + "ulx" + ], + "application/x-gnumeric": [ + "gnumeric" + ], + "application/x-gramps-xml": [ + "gramps" + ], + "application/x-gtar": [ + "gtar" + ], + "application/x-gzip": [], + "application/x-hdf": [ + "hdf" + ], + "application/x-install-instructions": [ + "install" + ], + "application/x-iso9660-image": [ + "iso" + ], + "application/x-java-jnlp-file": [ + "jnlp" + ], + "application/x-latex": [ + "latex" + ], + "application/x-lzh-compressed": [ + "lzh", + "lha" + ], + "application/x-mie": [ + "mie" + ], + "application/x-mobipocket-ebook": [ + "prc", + "mobi" + ], + "application/x-ms-application": [ + "application" + ], + "application/x-ms-shortcut": [ + "lnk" + ], + "application/x-ms-wmd": [ + "wmd" + ], + "application/x-ms-wmz": [ + "wmz" + ], + "application/x-ms-xbap": [ + "xbap" + ], + "application/x-msaccess": [ + "mdb" + ], + "application/x-msbinder": [ + "obd" + ], + "application/x-mscardfile": [ + "crd" + ], + "application/x-msclip": [ + "clp" + ], + "application/x-msdownload": [ + "exe", + "dll", + "com", + "bat", + "msi" + ], + "application/x-msmediaview": [ + "mvb", + "m13", + "m14" + ], + "application/x-msmetafile": [ + "wmf", + "wmz", + "emf", + "emz" + ], + "application/x-msmoney": [ + "mny" + ], + "application/x-mspublisher": [ + "pub" + ], + "application/x-msschedule": [ + "scd" + ], + "application/x-msterminal": [ + "trm" + ], + "application/x-mswrite": [ + "wri" + ], + "application/x-netcdf": [ + "nc", + "cdf" + ], + "application/x-nzb": [ + "nzb" + ], + "application/x-pkcs12": [ + "p12", + "pfx" + ], + "application/x-pkcs7-certificates": [ + "p7b", + "spc" + ], + "application/x-pkcs7-certreqresp": [ + "p7r" + ], + "application/x-rar-compressed": [ + "rar" + ], + "application/x-research-info-systems": [ + "ris" + ], + "application/x-sh": [ + "sh" + ], + "application/x-shar": [ + "shar" + ], + "application/x-shockwave-flash": [ + "swf" + ], + "application/x-silverlight-app": [ + "xap" + ], + "application/x-sql": [ + "sql" + ], + "application/x-stuffit": [ + "sit" + ], + "application/x-stuffitx": [ + "sitx" + ], + "application/x-subrip": [ + "srt" + ], + "application/x-sv4cpio": [ + "sv4cpio" + ], + "application/x-sv4crc": [ + "sv4crc" + ], + "application/x-t3vm-image": [ + "t3" + ], + "application/x-tads": [ + "gam" + ], + "application/x-tar": [ + "tar" + ], + "application/x-tcl": [ + "tcl" + ], + "application/x-tex": [ + "tex" + ], + "application/x-tex-tfm": [ + "tfm" + ], + "application/x-texinfo": [ + "texinfo", + "texi" + ], + "application/x-tgif": [ + "obj" + ], + "application/x-ustar": [ + "ustar" + ], + "application/x-wais-source": [ + "src" + ], + "application/x-x509-ca-cert": [ + "der", + "crt" + ], + "application/x-xfig": [ + "fig" + ], + "application/x-xliff+xml": [ + "xlf" + ], + "application/x-xpinstall": [ + "xpi" + ], + "application/x-xz": [ + "xz" + ], + "application/x-zmachine": [ + "z1", + "z2", + "z3", + "z4", + "z5", + "z6", + "z7", + "z8" + ], + "application/x400-bp": [], + "application/xaml+xml": [ + "xaml" + ], + "application/xcap-att+xml": [], + "application/xcap-caps+xml": [], + "application/xcap-diff+xml": [ + "xdf" + ], + "application/xcap-el+xml": [], + "application/xcap-error+xml": [], + "application/xcap-ns+xml": [], + "application/xcon-conference-info-diff+xml": [], + "application/xcon-conference-info+xml": [], + "application/xenc+xml": [ + "xenc" + ], + "application/xhtml+xml": [ + "xhtml", + "xht" + ], + "application/xhtml-voice+xml": [], + "application/xml": [ + "xml", + "xsl" + ], + "application/xml-dtd": [ + "dtd" + ], + "application/xml-external-parsed-entity": [], + "application/xmpp+xml": [], + "application/xop+xml": [ + "xop" + ], + "application/xproc+xml": [ + "xpl" + ], + "application/xslt+xml": [ + "xslt" + ], + "application/xspf+xml": [ + "xspf" + ], + "application/xv+xml": [ + "mxml", + "xhvml", + "xvml", + "xvm" + ], + "application/yang": [ + "yang" + ], + "application/yin+xml": [ + "yin" + ], + "application/zip": [ + "zip" + ], + "audio/1d-interleaved-parityfec": [], + "audio/32kadpcm": [], + "audio/3gpp": [], + "audio/3gpp2": [], + "audio/ac3": [], + "audio/adpcm": [ + "adp" + ], + "audio/amr": [], + "audio/amr-wb": [], + "audio/amr-wb+": [], + "audio/asc": [], + "audio/atrac-advanced-lossless": [], + "audio/atrac-x": [], + "audio/atrac3": [], + "audio/basic": [ + "au", + "snd" + ], + "audio/bv16": [], + "audio/bv32": [], + "audio/clearmode": [], + "audio/cn": [], + "audio/dat12": [], + "audio/dls": [], + "audio/dsr-es201108": [], + "audio/dsr-es202050": [], + "audio/dsr-es202211": [], + "audio/dsr-es202212": [], + "audio/dv": [], + "audio/dvi4": [], + "audio/eac3": [], + "audio/evrc": [], + "audio/evrc-qcp": [], + "audio/evrc0": [], + "audio/evrc1": [], + "audio/evrcb": [], + "audio/evrcb0": [], + "audio/evrcb1": [], + "audio/evrcwb": [], + "audio/evrcwb0": [], + "audio/evrcwb1": [], + "audio/example": [], + "audio/fwdred": [], + "audio/g719": [], + "audio/g722": [], + "audio/g7221": [], + "audio/g723": [], + "audio/g726-16": [], + "audio/g726-24": [], + "audio/g726-32": [], + "audio/g726-40": [], + "audio/g728": [], + "audio/g729": [], + "audio/g7291": [], + "audio/g729d": [], + "audio/g729e": [], + "audio/gsm": [], + "audio/gsm-efr": [], + "audio/gsm-hr-08": [], + "audio/ilbc": [], + "audio/ip-mr_v2.5": [], + "audio/isac": [], + "audio/l16": [], + "audio/l20": [], + "audio/l24": [], + "audio/l8": [], + "audio/lpc": [], + "audio/midi": [ + "mid", + "midi", + "kar", + "rmi" + ], + "audio/mobile-xmf": [], + "audio/mp4": [ + "mp4a" + ], + "audio/mp4a-latm": [], + "audio/mpa": [], + "audio/mpa-robust": [], + "audio/mpeg": [ + "mpga", + "mp2", + "mp2a", + "mp3", + "m2a", + "m3a" + ], + "audio/mpeg4-generic": [], + "audio/musepack": [], + "audio/ogg": [ + "oga", + "ogg", + "spx" + ], + "audio/opus": [], + "audio/parityfec": [], + "audio/pcma": [], + "audio/pcma-wb": [], + "audio/pcmu-wb": [], + "audio/pcmu": [], + "audio/prs.sid": [], + "audio/qcelp": [], + "audio/red": [], + "audio/rtp-enc-aescm128": [], + "audio/rtp-midi": [], + "audio/rtx": [], + "audio/s3m": [ + "s3m" + ], + "audio/silk": [ + "sil" + ], + "audio/smv": [], + "audio/smv0": [], + "audio/smv-qcp": [], + "audio/sp-midi": [], + "audio/speex": [], + "audio/t140c": [], + "audio/t38": [], + "audio/telephone-event": [], + "audio/tone": [], + "audio/uemclip": [], + "audio/ulpfec": [], + "audio/vdvi": [], + "audio/vmr-wb": [], + "audio/vnd.3gpp.iufp": [], + "audio/vnd.4sb": [], + "audio/vnd.audiokoz": [], + "audio/vnd.celp": [], + "audio/vnd.cisco.nse": [], + "audio/vnd.cmles.radio-events": [], + "audio/vnd.cns.anp1": [], + "audio/vnd.cns.inf1": [], + "audio/vnd.dece.audio": [ + "uva", + "uvva" + ], + "audio/vnd.digital-winds": [ + "eol" + ], + "audio/vnd.dlna.adts": [], + "audio/vnd.dolby.heaac.1": [], + "audio/vnd.dolby.heaac.2": [], + "audio/vnd.dolby.mlp": [], + "audio/vnd.dolby.mps": [], + "audio/vnd.dolby.pl2": [], + "audio/vnd.dolby.pl2x": [], + "audio/vnd.dolby.pl2z": [], + "audio/vnd.dolby.pulse.1": [], + "audio/vnd.dra": [ + "dra" + ], + "audio/vnd.dts": [ + "dts" + ], + "audio/vnd.dts.hd": [ + "dtshd" + ], + "audio/vnd.dvb.file": [], + "audio/vnd.everad.plj": [], + "audio/vnd.hns.audio": [], + "audio/vnd.lucent.voice": [ + "lvp" + ], + "audio/vnd.ms-playready.media.pya": [ + "pya" + ], + "audio/vnd.nokia.mobile-xmf": [], + "audio/vnd.nortel.vbk": [], + "audio/vnd.nuera.ecelp4800": [ + "ecelp4800" + ], + "audio/vnd.nuera.ecelp7470": [ + "ecelp7470" + ], + "audio/vnd.nuera.ecelp9600": [ + "ecelp9600" + ], + "audio/vnd.octel.sbc": [], + "audio/vnd.qcelp": [], + "audio/vnd.rhetorex.32kadpcm": [], + "audio/vnd.rip": [ + "rip" + ], + "audio/vnd.sealedmedia.softseal.mpeg": [], + "audio/vnd.vmx.cvsd": [], + "audio/vorbis": [], + "audio/vorbis-config": [], + "audio/webm": [ + "weba" + ], + "audio/x-aac": [ + "aac" + ], + "audio/x-aiff": [ + "aif", + "aiff", + "aifc" + ], + "audio/x-caf": [ + "caf" + ], + "audio/x-flac": [ + "flac" + ], + "audio/x-matroska": [ + "mka" + ], + "audio/x-mpegurl": [ + "m3u" + ], + "audio/x-ms-wax": [ + "wax" + ], + "audio/x-ms-wma": [ + "wma" + ], + "audio/x-pn-realaudio": [ + "ram", + "ra" + ], + "audio/x-pn-realaudio-plugin": [ + "rmp" + ], + "audio/x-tta": [], + "audio/x-wav": [ + "wav" + ], + "audio/xm": [ + "xm" + ], + "chemical/x-cdx": [ + "cdx" + ], + "chemical/x-cif": [ + "cif" + ], + "chemical/x-cmdf": [ + "cmdf" + ], + "chemical/x-cml": [ + "cml" + ], + "chemical/x-csml": [ + "csml" + ], + "chemical/x-pdb": [], + "chemical/x-xyz": [ + "xyz" + ], + "image/bmp": [ + "bmp" + ], + "image/cgm": [ + "cgm" + ], + "image/example": [], + "image/fits": [], + "image/g3fax": [ + "g3" + ], + "image/gif": [ + "gif" + ], + "image/ief": [ + "ief" + ], + "image/jp2": [], + "image/jpeg": [ + "jpeg", + "jpg", + "jpe" + ], + "image/jpm": [], + "image/jpx": [], + "image/ktx": [ + "ktx" + ], + "image/naplps": [], + "image/png": [ + "png" + ], + "image/prs.btif": [ + "btif" + ], + "image/prs.pti": [], + "image/sgi": [ + "sgi" + ], + "image/svg+xml": [ + "svg", + "svgz" + ], + "image/t38": [], + "image/tiff": [ + "tiff", + "tif" + ], + "image/tiff-fx": [], + "image/vnd.adobe.photoshop": [ + "psd" + ], + "image/vnd.cns.inf2": [], + "image/vnd.dece.graphic": [ + "uvi", + "uvvi", + "uvg", + "uvvg" + ], + "image/vnd.dvb.subtitle": [ + "sub" + ], + "image/vnd.djvu": [ + "djvu", + "djv" + ], + "image/vnd.dwg": [ + "dwg" + ], + "image/vnd.dxf": [ + "dxf" + ], + "image/vnd.fastbidsheet": [ + "fbs" + ], + "image/vnd.fpx": [ + "fpx" + ], + "image/vnd.fst": [ + "fst" + ], + "image/vnd.fujixerox.edmics-mmr": [ + "mmr" + ], + "image/vnd.fujixerox.edmics-rlc": [ + "rlc" + ], + "image/vnd.globalgraphics.pgb": [], + "image/vnd.microsoft.icon": [], + "image/vnd.mix": [], + "image/vnd.ms-modi": [ + "mdi" + ], + "image/vnd.ms-photo": [ + "wdp" + ], + "image/vnd.net-fpx": [ + "npx" + ], + "image/vnd.radiance": [], + "image/vnd.sealed.png": [], + "image/vnd.sealedmedia.softseal.gif": [], + "image/vnd.sealedmedia.softseal.jpg": [], + "image/vnd.svf": [], + "image/vnd.wap.wbmp": [ + "wbmp" + ], + "image/vnd.xiff": [ + "xif" + ], + "image/webp": [ + "webp" + ], + "image/x-3ds": [ + "3ds" + ], + "image/x-cmu-raster": [ + "ras" + ], + "image/x-cmx": [ + "cmx" + ], + "image/x-freehand": [ + "fh", + "fhc", + "fh4", + "fh5", + "fh7" + ], + "image/x-icon": [ + "ico" + ], + "image/x-mrsid-image": [ + "sid" + ], + "image/x-pcx": [ + "pcx" + ], + "image/x-pict": [ + "pic", + "pct" + ], + "image/x-portable-anymap": [ + "pnm" + ], + "image/x-portable-bitmap": [ + "pbm" + ], + "image/x-portable-graymap": [ + "pgm" + ], + "image/x-portable-pixmap": [ + "ppm" + ], + "image/x-rgb": [ + "rgb" + ], + "image/x-tga": [ + "tga" + ], + "image/x-xbitmap": [ + "xbm" + ], + "image/x-xpixmap": [ + "xpm" + ], + "image/x-xwindowdump": [ + "xwd" + ], + "message/cpim": [], + "message/delivery-status": [], + "message/disposition-notification": [], + "message/example": [], + "message/external-body": [], + "message/feedback-report": [], + "message/global": [], + "message/global-delivery-status": [], + "message/global-disposition-notification": [], + "message/global-headers": [], + "message/http": [], + "message/imdn+xml": [], + "message/news": [], + "message/partial": [], + "message/rfc822": [ + "eml", + "mime" + ], + "message/s-http": [], + "message/sip": [], + "message/sipfrag": [], + "message/tracking-status": [], + "message/vnd.si.simp": [], + "model/example": [], + "model/iges": [ + "igs", + "iges" + ], + "model/mesh": [ + "msh", + "mesh", + "silo" + ], + "model/vnd.collada+xml": [ + "dae" + ], + "model/vnd.dwf": [ + "dwf" + ], + "model/vnd.flatland.3dml": [], + "model/vnd.gdl": [ + "gdl" + ], + "model/vnd.gs-gdl": [], + "model/vnd.gs.gdl": [], + "model/vnd.gtw": [ + "gtw" + ], + "model/vnd.moml+xml": [], + "model/vnd.mts": [ + "mts" + ], + "model/vnd.parasolid.transmit.binary": [], + "model/vnd.parasolid.transmit.text": [], + "model/vnd.vtu": [ + "vtu" + ], + "model/vrml": [ + "wrl", + "vrml" + ], + "model/x3d+binary": [ + "x3db", + "x3dbz" + ], + "model/x3d+vrml": [ + "x3dv", + "x3dvz" + ], + "model/x3d+xml": [ + "x3d", + "x3dz" + ], + "multipart/alternative": [], + "multipart/appledouble": [], + "multipart/byteranges": [], + "multipart/digest": [], + "multipart/encrypted": [], + "multipart/example": [], + "multipart/form-data": [], + "multipart/header-set": [], + "multipart/mixed": [], + "multipart/parallel": [], + "multipart/related": [], + "multipart/report": [], + "multipart/signed": [], + "multipart/voice-message": [], + "text/1d-interleaved-parityfec": [], + "text/cache-manifest": [ + "appcache" + ], + "text/calendar": [ + "ics", + "ifb" + ], + "text/css": [ + "css" + ], + "text/csv": [ + "csv" + ], + "text/directory": [], + "text/dns": [], + "text/ecmascript": [], + "text/enriched": [], + "text/example": [], + "text/fwdred": [], + "text/html": [ + "html", + "htm" + ], + "text/javascript": [], + "text/n3": [ + "n3" + ], + "text/parityfec": [], + "text/plain": [ + "txt", + "text", + "conf", + "def", + "list", + "log", + "in" + ], + "text/prs.fallenstein.rst": [], + "text/prs.lines.tag": [ + "dsc" + ], + "text/vnd.radisys.msml-basic-layout": [], + "text/red": [], + "text/rfc822-headers": [], + "text/richtext": [ + "rtx" + ], + "text/rtf": [], + "text/rtp-enc-aescm128": [], + "text/rtx": [], + "text/sgml": [ + "sgml", + "sgm" + ], + "text/t140": [], + "text/tab-separated-values": [ + "tsv" + ], + "text/troff": [ + "t", + "tr", + "roff", + "man", + "me", + "ms" + ], + "text/turtle": [ + "ttl" + ], + "text/ulpfec": [], + "text/uri-list": [ + "uri", + "uris", + "urls" + ], + "text/vcard": [ + "vcard" + ], + "text/vnd.abc": [], + "text/vnd.curl": [ + "curl" + ], + "text/vnd.curl.dcurl": [ + "dcurl" + ], + "text/vnd.curl.scurl": [ + "scurl" + ], + "text/vnd.curl.mcurl": [ + "mcurl" + ], + "text/vnd.dmclientscript": [], + "text/vnd.dvb.subtitle": [ + "sub" + ], + "text/vnd.esmertec.theme-descriptor": [], + "text/vnd.fly": [ + "fly" + ], + "text/vnd.fmi.flexstor": [ + "flx" + ], + "text/vnd.graphviz": [ + "gv" + ], + "text/vnd.in3d.3dml": [ + "3dml" + ], + "text/vnd.in3d.spot": [ + "spot" + ], + "text/vnd.iptc.newsml": [], + "text/vnd.iptc.nitf": [], + "text/vnd.latex-z": [], + "text/vnd.motorola.reflex": [], + "text/vnd.ms-mediapackage": [], + "text/vnd.net2phone.commcenter.command": [], + "text/vnd.si.uricatalogue": [], + "text/vnd.sun.j2me.app-descriptor": [ + "jad" + ], + "text/vnd.trolltech.linguist": [], + "text/vnd.wap.si": [], + "text/vnd.wap.sl": [], + "text/vnd.wap.wml": [ + "wml" + ], + "text/vnd.wap.wmlscript": [ + "wmls" + ], + "text/x-asm": [ + "s", + "asm" + ], + "text/x-c": [ + "c", + "cc", + "cxx", + "cpp", + "h", + "hh", + "dic" + ], + "text/x-fortran": [ + "f", + "for", + "f77", + "f90" + ], + "text/x-java-source": [ + "java" + ], + "text/x-opml": [ + "opml" + ], + "text/x-pascal": [ + "p", + "pas" + ], + "text/x-nfo": [ + "nfo" + ], + "text/x-setext": [ + "etx" + ], + "text/x-sfv": [ + "sfv" + ], + "text/x-uuencode": [ + "uu" + ], + "text/x-vcalendar": [ + "vcs" + ], + "text/x-vcard": [ + "vcf" + ], + "text/xml": [], + "text/xml-external-parsed-entity": [], + "video/1d-interleaved-parityfec": [], + "video/3gpp": [ + "3gp" + ], + "video/3gpp-tt": [], + "video/3gpp2": [ + "3g2" + ], + "video/bmpeg": [], + "video/bt656": [], + "video/celb": [], + "video/dv": [], + "video/example": [], + "video/h261": [ + "h261" + ], + "video/h263": [ + "h263" + ], + "video/h263-1998": [], + "video/h263-2000": [], + "video/h264": [ + "h264" + ], + "video/h264-rcdo": [], + "video/h264-svc": [], + "video/jpeg": [ + "jpgv" + ], + "video/jpeg2000": [], + "video/jpm": [ + "jpm", + "jpgm" + ], + "video/mj2": [ + "mj2", + "mjp2" + ], + "video/mp1s": [], + "video/mp2p": [], + "video/mp2t": [], + "video/mp4": [ + "mp4", + "mp4v", + "mpg4" + ], + "video/mp4v-es": [], + "video/mpeg": [ + "mpeg", + "mpg", + "mpe", + "m1v", + "m2v" + ], + "video/mpeg4-generic": [], + "video/mpv": [], + "video/nv": [], + "video/ogg": [ + "ogv" + ], + "video/parityfec": [], + "video/pointer": [], + "video/quicktime": [ + "qt", + "mov" + ], + "video/raw": [], + "video/rtp-enc-aescm128": [], + "video/rtx": [], + "video/smpte292m": [], + "video/ulpfec": [], + "video/vc1": [], + "video/vnd.cctv": [], + "video/vnd.dece.hd": [ + "uvh", + "uvvh" + ], + "video/vnd.dece.mobile": [ + "uvm", + "uvvm" + ], + "video/vnd.dece.mp4": [], + "video/vnd.dece.pd": [ + "uvp", + "uvvp" + ], + "video/vnd.dece.sd": [ + "uvs", + "uvvs" + ], + "video/vnd.dece.video": [ + "uvv", + "uvvv" + ], + "video/vnd.directv.mpeg": [], + "video/vnd.directv.mpeg-tts": [], + "video/vnd.dlna.mpeg-tts": [], + "video/vnd.dvb.file": [ + "dvb" + ], + "video/vnd.fvt": [ + "fvt" + ], + "video/vnd.hns.video": [], + "video/vnd.iptvforum.1dparityfec-1010": [], + "video/vnd.iptvforum.1dparityfec-2005": [], + "video/vnd.iptvforum.2dparityfec-1010": [], + "video/vnd.iptvforum.2dparityfec-2005": [], + "video/vnd.iptvforum.ttsavc": [], + "video/vnd.iptvforum.ttsmpeg2": [], + "video/vnd.motorola.video": [], + "video/vnd.motorola.videop": [], + "video/vnd.mpegurl": [ + "mxu", + "m4u" + ], + "video/vnd.ms-playready.media.pyv": [ + "pyv" + ], + "video/vnd.nokia.interleaved-multimedia": [], + "video/vnd.nokia.videovoip": [], + "video/vnd.objectvideo": [], + "video/vnd.sealed.mpeg1": [], + "video/vnd.sealed.mpeg4": [], + "video/vnd.sealed.swf": [], + "video/vnd.sealedmedia.softseal.mov": [], + "video/vnd.uvvu.mp4": [ + "uvu", + "uvvu" + ], + "video/vnd.vivo": [ + "viv" + ], + "video/webm": [ + "webm" + ], + "video/x-f4v": [ + "f4v" + ], + "video/x-fli": [ + "fli" + ], + "video/x-flv": [ + "flv" + ], + "video/x-m4v": [ + "m4v" + ], + "video/x-matroska": [ + "mkv", + "mk3d", + "mks" + ], + "video/x-mng": [ + "mng" + ], + "video/x-ms-asf": [ + "asf", + "asx" + ], + "video/x-ms-vob": [ + "vob" + ], + "video/x-ms-wm": [ + "wm" + ], + "video/x-ms-wmv": [ + "wmv" + ], + "video/x-ms-wmx": [ + "wmx" + ], + "video/x-ms-wvx": [ + "wvx" + ], + "video/x-msvideo": [ + "avi" + ], + "video/x-sgi-movie": [ + "movie" + ], + "video/x-smv": [ + "smv" + ], + "x-conference/x-cooltalk": [ + "ice" + ] +} diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/node.json b/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/node.json new file mode 100755 index 0000000..ad50d61 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/lib/node.json @@ -0,0 +1,55 @@ +{ + "text/vtt": [ + "vtt" + ], + "application/x-chrome-extension": [ + "crx" + ], + "text/x-component": [ + "htc" + ], + "text/cache-manifest": [ + "manifest" + ], + "application/octet-stream": [ + "buffer" + ], + "application/mp4": [ + "m4p" + ], + "audio/mp4": [ + "m4a" + ], + "video/MP2T": [ + "ts" + ], + "application/x-web-app-manifest+json": [ + "webapp" + ], + "text/x-lua": [ + "lua" + ], + "application/x-lua-bytecode": [ + "luac" + ], + "text/x-markdown": [ + "markdown", + "md", + "mkd" + ], + "text/plain": [ + "ini" + ], + "application/dash+xml": [ + "mdp" + ], + "font/opentype": [ + "otf" + ], + "application/json": [ + "map" + ], + "application/xml": [ + "xsd" + ] +} diff --git a/node_modules/express/node_modules/accepts/node_modules/mime-types/package.json b/node_modules/express/node_modules/accepts/node_modules/mime-types/package.json new file mode 100755 index 0000000..01bb1c1 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/mime-types/package.json @@ -0,0 +1,42 @@ +{ + "name": "mime-types", + "description": "The ultimate javascript content-type utility.", + "version": "1.0.1", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "contributors": [ + { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": "https://searchbeam.jit.su" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/expressjs/mime-types" + }, + "license": "MIT", + "main": "lib", + "devDependencies": { + "co": "3", + "cogent": "0", + "mocha": "1", + "should": "3" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "make test" + }, + "readme": "# mime-types\n[![NPM version](https://badge.fury.io/js/mime-types.svg)](https://badge.fury.io/js/mime-types) [![Build Status](https://travis-ci.org/expressjs/mime-types.svg?branch=master)](https://travis-ci.org/expressjs/mime-types)\n\nThe ultimate javascript content-type utility.\n\n### Install\n\n```sh\n$ npm install mime-types\n```\n\n#### Similar to [node-mime](https://github.com/broofa/node-mime), except:\n\n- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`, so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.\n- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.\n- Additional mime types are added such as jade and stylus. Feel free to add more!\n- Browser support via Browserify and Component by converting lists to JSON files.\n\nOtherwise, the API is compatible.\n\n### Adding Types\n\nIf you'd like to add additional types,\nsimply create a PR adding the type to `custom.json` and\na reference link to the [sources](SOURCES.md).\n\nDo __NOT__ edit `mime.json` or `node.json`.\nThose are pulled using `build.js`.\nYou should only touch `custom.json`.\n\n## API\n\n```js\nvar mime = require('mime-types')\n```\n\nAll functions return `false` if input is invalid or not found.\n\n### mime.lookup(path)\n\nLookup the content-type associated with a file.\n\n```js\nmime.lookup('json') // 'application/json'\nmime.lookup('.md') // 'text/x-markdown'\nmime.lookup('file.html') // 'text/html'\nmime.lookup('folder/file.js') // 'application/javascript'\n\nmime.lookup('cats') // false\n```\n\n### mime.contentType(type)\n\nCreate a full content-type header given a content-type or extension.\n\n```js\nmime.contentType('markdown') // 'text/x-markdown; charset=utf-8'\nmime.contentType('file.json') // 'application/json; charset=utf-8'\n```\n\n### mime.extension(type)\n\nGet the default extension for a content-type.\n\n```js\nmime.extension('application/octet-stream') // 'bin'\n```\n\n### mime.charset(type)\n\nLookup the implied default charset of a content-type.\n\n```js\nmime.charset('text/x-markdown') // 'UTF-8'\n```\n\n### mime.types[extension] = type\n\nA map of content-types by extension.\n\n### mime.extensions[type] = [extensions]\n\nA map of extensions by content-type.\n\n### mime.define(types)\n\nGlobally add definitions.\n`types` must be an object of the form:\n\n```js\n{\n \"\": [extensions...],\n \"\": [extensions...]\n}\n```\n\nSee the `.json` files in `lib/` for examples.\n\n## License\n\n[MIT](LICENSE)\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/mime-types/issues" + }, + "_id": "mime-types@1.0.1", + "_from": "mime-types@~1.0.0" +} diff --git a/node_modules/express/node_modules/accepts/node_modules/negotiator/.npmignore b/node_modules/express/node_modules/accepts/node_modules/negotiator/.npmignore new file mode 100755 index 0000000..a6a8d17 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/negotiator/.npmignore @@ -0,0 +1,3 @@ +examples +test +.travis.yml diff --git a/node_modules/express/node_modules/accepts/node_modules/negotiator/LICENSE b/node_modules/express/node_modules/accepts/node_modules/negotiator/LICENSE new file mode 100755 index 0000000..42ca2e7 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/negotiator/LICENSE @@ -0,0 +1,27 @@ +Original "Negotiator" program Copyright Federico Romero +Port to JavaScript Copyright Isaac Z. Schlueter + +All rights reserved. + +MIT License + +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/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/charset.js b/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/charset.js new file mode 100755 index 0000000..d231291 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/charset.js @@ -0,0 +1,90 @@ +module.exports = preferredCharsets; +preferredCharsets.preferredCharsets = preferredCharsets; + +function parseAcceptCharset(accept) { + return accept.split(',').map(function(e) { + return parseCharset(e.trim()); + }).filter(function(e) { + return e; + }); +} + +function parseCharset(s) { + var match = s.match(/^\s*(\S+?)\s*(?:;(.*))?$/); + if (!match) return null; + + var charset = match[1]; + var q = 1; + if (match[2]) { + var params = match[2].split(';') + for (var i = 0; i < params.length; i ++) { + var p = params[i].trim().split('='); + if (p[0] === 'q') { + q = parseFloat(p[1]); + break; + } + } + } + + return { + charset: charset, + q: q + }; +} + +function getCharsetPriority(charset, accepted) { + return (accepted.map(function(a) { + return specify(charset, a); + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q:0}); +} + +function specify(charset, spec) { + var s = 0; + if(spec.charset === charset){ + s |= 1; + } else if (spec.charset !== '*' ) { + return null + } + + return { + s: s, + q: spec.q, + } +} + +function preferredCharsets(accept, provided) { + // RFC 2616 sec 14.2: no header = * + accept = parseAcceptCharset(accept === undefined ? '*' : accept || ''); + if (provided) { + return provided.map(function(type) { + return [type, getCharsetPriority(type, accept)]; + }).filter(function(pair) { + return pair[1].q > 0; + }).sort(function(a, b) { + var pa = a[1]; + var pb = b[1]; + if(pa.q == pb.q) { + return pa.s < pb.s ? 1 : -1; + } else { + return pa.q < pb.q ? 1 : -1; + } + }).map(function(pair) { + return pair[0]; + }); + } else { + return accept.sort(function (a, b) { + // revsort + return a.q < b.q ? 1 : -1; + }).filter(function(type) { + return type.q > 0; + }).map(function(type) { + return type.charset; + }); + } +} diff --git a/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/encoding.js b/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/encoding.js new file mode 100755 index 0000000..207291d --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/encoding.js @@ -0,0 +1,120 @@ +module.exports = preferredEncodings; +preferredEncodings.preferredEncodings = preferredEncodings; + +function parseAcceptEncoding(accept) { + var acceptableEncodings; + + if (accept) { + acceptableEncodings = accept.split(',').map(function(e) { + return parseEncoding(e.trim()); + }); + } else { + acceptableEncodings = []; + } + + if (!acceptableEncodings.some(function(e) { + return e && specify('identity', e); + })) { + /* + * If identity doesn't explicitly appear in the accept-encoding header, + * it's added to the list of acceptable encoding with the lowest q + * + */ + var lowestQ = 1; + + for(var i = 0; i < acceptableEncodings.length; i++){ + var e = acceptableEncodings[i]; + if(e && e.q < lowestQ){ + lowestQ = e.q; + } + } + acceptableEncodings.push({ + encoding: 'identity', + q: lowestQ / 2, + }); + } + + return acceptableEncodings.filter(function(e) { + return e; + }); +} + +function parseEncoding(s) { + var match = s.match(/^\s*(\S+?)\s*(?:;(.*))?$/); + + if (!match) return null; + + var encoding = match[1]; + var q = 1; + if (match[2]) { + var params = match[2].split(';'); + for (var i = 0; i < params.length; i ++) { + var p = params[i].trim().split('='); + if (p[0] === 'q') { + q = parseFloat(p[1]); + break; + } + } + } + + return { + encoding: encoding, + q: q + }; +} + +function getEncodingPriority(encoding, accepted) { + return (accepted.map(function(a) { + return specify(encoding, a); + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q: 0}); +} + +function specify(encoding, spec) { + var s = 0; + if(spec.encoding === encoding){ + s |= 1; + } else if (spec.encoding !== '*' ) { + return null + } + + return { + s: s, + q: spec.q, + } +}; + +function preferredEncodings(accept, provided) { + accept = parseAcceptEncoding(accept || ''); + if (provided) { + return provided.map(function(type) { + return [type, getEncodingPriority(type, accept)]; + }).filter(function(pair) { + return pair[1].q > 0; + }).sort(function(a, b) { + var pa = a[1]; + var pb = b[1]; + if(pa.q == pb.q) { + return pa.s < pb.s ? 1 : -1; + } else { + return pa.q < pb.q ? 1 : -1; + } + }).map(function(pair) { + return pair[0]; + }); + } else { + return accept.sort(function (a, b) { + // revsort + return a.q < b.q ? 1 : -1; + }).filter(function(type){ + return type.q > 0; + }).map(function(type) { + return type.encoding; + }); + } +} diff --git a/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/language.js b/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/language.js new file mode 100755 index 0000000..63036c7 --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/language.js @@ -0,0 +1,103 @@ +module.exports = preferredLanguages; +preferredLanguages.preferredLanguages = preferredLanguages; + +function parseAcceptLanguage(accept) { + return accept.split(',').map(function(e) { + return parseLanguage(e.trim()); + }).filter(function(e) { + return e; + }); +} + +function parseLanguage(s) { + var match = s.match(/^\s*(\S+?)(?:-(\S+?))?\s*(?:;(.*))?$/); + if (!match) return null; + + var prefix = match[1], + suffix = match[2], + full = prefix; + + if (suffix) full += "-" + suffix; + + var q = 1; + if (match[3]) { + var params = match[3].split(';') + for (var i = 0; i < params.length; i ++) { + var p = params[i].split('='); + if (p[0] === 'q') q = parseFloat(p[1]); + } + } + + return { + prefix: prefix, + suffix: suffix, + q: q, + full: full + }; +} + +function getLanguagePriority(language, accepted) { + return (accepted.map(function(a){ + return specify(language, a); + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q: 0}); +} + +function specify(language, spec) { + var p = parseLanguage(language) + if (!p) return null; + var s = 0; + if(spec.full === p.full){ + s |= 4; + } else if (spec.prefix === p.full) { + s |= 2; + } else if (spec.full === p.prefix) { + s |= 1; + } else if (spec.full !== '*' ) { + return null + } + + return { + s: s, + q: spec.q, + } +}; + +function preferredLanguages(accept, provided) { + // RFC 2616 sec 14.4: no header = * + accept = parseAcceptLanguage(accept === undefined ? '*' : accept || ''); + if (provided) { + + var ret = provided.map(function(type) { + return [type, getLanguagePriority(type, accept)]; + }).filter(function(pair) { + return pair[1].q > 0; + }).sort(function(a, b) { + var pa = a[1]; + var pb = b[1]; + if(pa.q == pb.q) { + return pa.s < pb.s ? 1 : -1; + } else { + return pa.q < pb.q ? 1 : -1; + } + }).map(function(pair) { + return pair[0]; + }); + return ret; + + } else { + return accept.sort(function (a, b) { + // revsort + return a.q < b.q ? 1 : -1; + }).filter(function(type) { + return type.q > 0; + }).map(function(type) { + return type.full; + }); + } +} diff --git a/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js b/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js new file mode 100755 index 0000000..f4dc1ca --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/mediaType.js @@ -0,0 +1,125 @@ +module.exports = preferredMediaTypes; +preferredMediaTypes.preferredMediaTypes = preferredMediaTypes; + +function parseAccept(accept) { + return accept.split(',').map(function(e) { + return parseMediaType(e.trim()); + }).filter(function(e) { + return e; + }); +}; + +function parseMediaType(s) { + var match = s.match(/\s*(\S+?)\/([^;\s]+)\s*(?:;(.*))?/); + if (!match) return null; + + var type = match[1], + subtype = match[2], + full = "" + type + "/" + subtype, + params = {}, + q = 1; + + if (match[3]) { + params = match[3].split(';').map(function(s) { + return s.trim().split('='); + }).reduce(function (set, p) { + set[p[0]] = p[1]; + return set + }, params); + + if (params.q != null) { + q = parseFloat(params.q); + delete params.q; + } + } + + return { + type: type, + subtype: subtype, + params: params, + q: q, + full: full + }; +} + +function getMediaTypePriority(type, accepted) { + return (accepted.map(function(a) { + return specify(type, a); + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q: 0}); +} + +function specify(type, spec) { + var p = parseMediaType(type); + var s = 0; + + if (!p) { + return null; + } + + if(spec.type == p.type) { + s |= 4 + } else if(spec.type != '*') { + return null; + } + + if(spec.subtype == p.subtype) { + s |= 2 + } else if(spec.subtype != '*') { + return null; + } + + var keys = Object.keys(spec.params); + if (keys.length > 0) { + if (keys.every(function (k) { + return spec.params[k] == '*' || spec.params[k] == p.params[k]; + })) { + s |= 1 + } else { + return null + } + } + + return { + q: spec.q, + s: s, + } + +} + +function preferredMediaTypes(accept, provided) { + // RFC 2616 sec 14.2: no header = */* + accept = parseAccept(accept === undefined ? '*/*' : accept || ''); + if (provided) { + return provided.map(function(type) { + return [type, getMediaTypePriority(type, accept)]; + }).filter(function(pair) { + return pair[1].q > 0; + }).sort(function(a, b) { + var pa = a[1]; + var pb = b[1]; + if(pa.q == pb.q) { + return pa.s < pb.s ? 1 : -1; + } else { + return pa.q < pb.q ? 1 : -1; + } + }).map(function(pair) { + return pair[0]; + }); + + } else { + return accept.sort(function (a, b) { + // revsort + return a.q < b.q ? 1 : -1; + }).filter(function(type) { + return type.q > 0; + }).map(function(type) { + return type.full; + }); + } +} diff --git a/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/negotiator.js b/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/negotiator.js new file mode 100755 index 0000000..ba0c48b --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/negotiator/lib/negotiator.js @@ -0,0 +1,37 @@ +module.exports = Negotiator; +Negotiator.Negotiator = Negotiator; + +function Negotiator(request) { + if (!(this instanceof Negotiator)) return new Negotiator(request); + this.request = request; +} + +var set = { charset: 'accept-charset', + encoding: 'accept-encoding', + language: 'accept-language', + mediaType: 'accept' }; + + +function capitalize(string){ + return string.charAt(0).toUpperCase() + string.slice(1); +} + +Object.keys(set).forEach(function (k) { + var header = set[k], + method = require('./'+k+'.js'), + singular = k, + plural = k + 's'; + + Negotiator.prototype[plural] = function (available) { + return method(this.request.headers[header], available); + }; + + Negotiator.prototype[singular] = function(available) { + var set = this[plural](available); + if (set) return set[0]; + }; + + // Keep preferred* methods for legacy compatibility + Negotiator.prototype['preferred'+capitalize(plural)] = Negotiator.prototype[plural]; + Negotiator.prototype['preferred'+capitalize(singular)] = Negotiator.prototype[singular]; +}) diff --git a/node_modules/express/node_modules/accepts/node_modules/negotiator/package.json b/node_modules/express/node_modules/accepts/node_modules/negotiator/package.json new file mode 100755 index 0000000..8c25b3e --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/negotiator/package.json @@ -0,0 +1,49 @@ +{ + "name": "negotiator", + "description": "HTTP content negotiation", + "version": "0.4.7", + "author": { + "name": "Federico Romero", + "email": "federico.romero@outboxlabs.com" + }, + "contributors": [ + { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/federomero/negotiator.git" + }, + "keywords": [ + "http", + "content negotiation", + "accept", + "accept-language", + "accept-encoding", + "accept-charset" + ], + "engine": "node >= 0.6", + "license": "MIT", + "devDependencies": { + "nodeunit": "0.8.x" + }, + "scripts": { + "test": "nodeunit test" + }, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "main": "lib/negotiator.js", + "readme": "# Negotiator [![Build Status](https://travis-ci.org/federomero/negotiator.png)](https://travis-ci.org/federomero/negotiator)\n\nAn HTTP content negotiator for node.js written in javascript.\n\n# Accept Negotiation\n\n Negotiator = require('negotiator')\n\n availableMediaTypes = ['text/html', 'text/plain', 'application/json']\n\n // The negotiator constructor receives a request object\n negotiator = new Negotiator(request)\n\n // Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'\n\n negotiator.mediaTypes()\n // -> ['text/html', 'image/jpeg', 'application/*']\n\n negotiator.mediaTypes(availableMediaTypes)\n // -> ['text/html', 'application/json']\n\n negotiator.mediaType(availableMediaTypes)\n // -> 'text/html'\n\nYou can check a working example at `examples/accept.js`.\n\n## Methods\n\n`mediaTypes(availableMediaTypes)`:\n\nReturns an array of preferred media types ordered by priority from a list of available media types.\n\n`mediaType(availableMediaType)`:\n\nReturns the top preferred media type from a list of available media types.\n\n# Accept-Language Negotiation\n\n Negotiator = require('negotiator')\n\n negotiator = new Negotiator(request)\n\n availableLanguages = 'en', 'es', 'fr'\n\n // Let's say Accept-Language header is 'en;q=0.8, es, pt'\n\n negotiator.languages()\n // -> ['es', 'pt', 'en']\n\n negotiator.languages(availableLanguages)\n // -> ['es', 'en']\n\n language = negotiator.language(availableLanguages)\n // -> 'es'\n\nYou can check a working example at `examples/language.js`.\n\n## Methods\n\n`languages(availableLanguages)`:\n\nReturns an array of preferred languages ordered by priority from a list of available languages.\n\n`language(availableLanguages)`:\n\nReturns the top preferred language from a list of available languages.\n\n# Accept-Charset Negotiation\n\n Negotiator = require('negotiator')\n\n availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']\n\n negotiator = new Negotiator(request)\n\n // Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'\n\n negotiator.charsets()\n // -> ['utf-8', 'iso-8859-1', 'utf-7']\n\n negotiator.charsets(availableCharsets)\n // -> ['utf-8', 'iso-8859-1']\n\n negotiator.charset(availableCharsets)\n // -> 'utf-8'\n\nYou can check a working example at `examples/charset.js`.\n\n## Methods\n\n`charsets(availableCharsets)`:\n\nReturns an array of preferred charsets ordered by priority from a list of available charsets.\n\n`charset(availableCharsets)`:\n\nReturns the top preferred charset from a list of available charsets.\n\n# Accept-Encoding Negotiation\n\n Negotiator = require('negotiator').Negotiator\n\n availableEncodings = ['identity', 'gzip']\n\n negotiator = new Negotiator(request)\n\n // Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'\n\n negotiator.encodings()\n // -> ['gzip', 'identity', 'compress']\n\n negotiator.encodings(availableEncodings)\n // -> ['gzip', 'identity']\n\n negotiator.encoding(availableEncodings)\n // -> 'gzip'\n\nYou can check a working example at `examples/encoding.js`.\n\n## Methods\n\n`encodings(availableEncodings)`:\n\nReturns an array of preferred encodings ordered by priority from a list of available encodings.\n\n`encoding(availableEncodings)`:\n\nReturns the top preferred encoding from a list of available encodings.\n\n# License\n\nMIT\n", + "readmeFilename": "readme.md", + "bugs": { + "url": "https://github.com/federomero/negotiator/issues" + }, + "dependencies": {}, + "_id": "negotiator@0.4.7", + "_from": "negotiator@0.4.7" +} diff --git a/node_modules/express/node_modules/accepts/node_modules/negotiator/readme.md b/node_modules/express/node_modules/accepts/node_modules/negotiator/readme.md new file mode 100755 index 0000000..d982a9c --- /dev/null +++ b/node_modules/express/node_modules/accepts/node_modules/negotiator/readme.md @@ -0,0 +1,132 @@ +# Negotiator [![Build Status](https://travis-ci.org/federomero/negotiator.png)](https://travis-ci.org/federomero/negotiator) + +An HTTP content negotiator for node.js written in javascript. + +# Accept Negotiation + + Negotiator = require('negotiator') + + availableMediaTypes = ['text/html', 'text/plain', 'application/json'] + + // The negotiator constructor receives a request object + negotiator = new Negotiator(request) + + // Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8' + + negotiator.mediaTypes() + // -> ['text/html', 'image/jpeg', 'application/*'] + + negotiator.mediaTypes(availableMediaTypes) + // -> ['text/html', 'application/json'] + + negotiator.mediaType(availableMediaTypes) + // -> 'text/html' + +You can check a working example at `examples/accept.js`. + +## Methods + +`mediaTypes(availableMediaTypes)`: + +Returns an array of preferred media types ordered by priority from a list of available media types. + +`mediaType(availableMediaType)`: + +Returns the top preferred media type from a list of available media types. + +# Accept-Language Negotiation + + Negotiator = require('negotiator') + + negotiator = new Negotiator(request) + + availableLanguages = 'en', 'es', 'fr' + + // Let's say Accept-Language header is 'en;q=0.8, es, pt' + + negotiator.languages() + // -> ['es', 'pt', 'en'] + + negotiator.languages(availableLanguages) + // -> ['es', 'en'] + + language = negotiator.language(availableLanguages) + // -> 'es' + +You can check a working example at `examples/language.js`. + +## Methods + +`languages(availableLanguages)`: + +Returns an array of preferred languages ordered by priority from a list of available languages. + +`language(availableLanguages)`: + +Returns the top preferred language from a list of available languages. + +# Accept-Charset Negotiation + + Negotiator = require('negotiator') + + availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5'] + + negotiator = new Negotiator(request) + + // Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2' + + negotiator.charsets() + // -> ['utf-8', 'iso-8859-1', 'utf-7'] + + negotiator.charsets(availableCharsets) + // -> ['utf-8', 'iso-8859-1'] + + negotiator.charset(availableCharsets) + // -> 'utf-8' + +You can check a working example at `examples/charset.js`. + +## Methods + +`charsets(availableCharsets)`: + +Returns an array of preferred charsets ordered by priority from a list of available charsets. + +`charset(availableCharsets)`: + +Returns the top preferred charset from a list of available charsets. + +# Accept-Encoding Negotiation + + Negotiator = require('negotiator').Negotiator + + availableEncodings = ['identity', 'gzip'] + + negotiator = new Negotiator(request) + + // Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5' + + negotiator.encodings() + // -> ['gzip', 'identity', 'compress'] + + negotiator.encodings(availableEncodings) + // -> ['gzip', 'identity'] + + negotiator.encoding(availableEncodings) + // -> 'gzip' + +You can check a working example at `examples/encoding.js`. + +## Methods + +`encodings(availableEncodings)`: + +Returns an array of preferred encodings ordered by priority from a list of available encodings. + +`encoding(availableEncodings)`: + +Returns the top preferred encoding from a list of available encodings. + +# License + +MIT diff --git a/node_modules/express/node_modules/accepts/package.json b/node_modules/express/node_modules/accepts/package.json new file mode 100755 index 0000000..9c29c53 --- /dev/null +++ b/node_modules/express/node_modules/accepts/package.json @@ -0,0 +1,39 @@ +{ + "name": "accepts", + "description": "Higher-level content negotiation", + "version": "1.0.6", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/expressjs/accepts" + }, + "dependencies": { + "mime-types": "~1.0.0", + "negotiator": "0.4.7" + }, + "devDependencies": { + "istanbul": "0.2.11", + "mocha": "*", + "should": "*" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --require should --reporter dot test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require should --reporter dot test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require should --reporter spec test/" + }, + "readme": "# Accepts\n\n[![NPM version](https://badge.fury.io/js/accepts.svg)](http://badge.fury.io/js/accepts)\n[![Build Status](https://travis-ci.org/expressjs/accepts.svg?branch=master)](https://travis-ci.org/expressjs/accepts)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/accepts.svg?branch=master)](https://coveralls.io/r/expressjs/accepts)\n\nHigher level content negotation based on [negotiator](https://github.com/federomero/negotiator). Extracted from [koa](https://github.com/koajs/koa) for general use.\n\nIn addition to negotatior, it allows:\n\n- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` as well as `('text/html', 'application/json')`.\n- Allows type shorthands such as `json`.\n- Returns `false` when no types match\n- Treats non-existent headers as `*`\n\n## API\n\n### var accept = new Accepts(req)\n\n```js\nvar accepts = require('accepts')\n\nhttp.createServer(function (req, res) {\n var accept = accepts(req)\n})\n```\n\n### accept\\[property\\]\\(\\)\n\nReturns all the explicitly accepted content property as an array in descending priority.\n\n- `accept.types()`\n- `accept.encodings()`\n- `accept.charsets()`\n- `accept.languages()`\n\nThey are also aliased in singular form such as `accept.type()`. `accept.languages()` is also aliased as `accept.langs()`, etc.\n\nNote: you should almost never do this in a real app as it defeats the purpose of content negotiation.\n\nExample:\n\n```js\n// in Google Chrome\nvar encodings = accept.encodings() // -> ['sdch', 'gzip', 'deflate']\n```\n\nSince you probably don't support `sdch`, you should just supply the encodings you support:\n\n```js\nvar encoding = accept.encodings('gzip', 'deflate') // -> 'gzip', probably\n```\n\n### accept\\[property\\]\\(values, ...\\)\n\nYou can either have `values` be an array or have an argument list of values.\n\nIf the client does not accept any `values`, `false` will be returned.\nIf the client accepts any `values`, the preferred `value` will be return.\n\nFor `accept.types()`, shorthand mime types are allowed.\n\nExample:\n\n```js\n// req.headers.accept = 'application/json'\n\naccept.types('json') // -> 'json'\naccept.types('html', 'json') // -> 'json'\naccept.types('html') // -> false\n\n// req.headers.accept = ''\n// which is equivalent to `*`\n\naccept.types() // -> [], no explicit types\naccept.types('text/html', 'text/json') // -> 'text/html', since it was first\n```\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/accepts/issues" + }, + "_id": "accepts@1.0.6", + "_from": "accepts@~1.0.5" +} diff --git a/node_modules/express/node_modules/buffer-crc32/.npmignore b/node_modules/express/node_modules/buffer-crc32/.npmignore new file mode 100755 index 0000000..b512c09 --- /dev/null +++ b/node_modules/express/node_modules/buffer-crc32/.npmignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/node_modules/express/node_modules/buffer-crc32/.travis.yml b/node_modules/express/node_modules/buffer-crc32/.travis.yml new file mode 100755 index 0000000..7a902e8 --- /dev/null +++ b/node_modules/express/node_modules/buffer-crc32/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - 0.6 + - 0.8 +notifications: + email: + recipients: + - brianloveswords@gmail.com \ No newline at end of file diff --git a/node_modules/express/node_modules/buffer-crc32/LICENSE b/node_modules/express/node_modules/buffer-crc32/LICENSE new file mode 100755 index 0000000..caeb849 --- /dev/null +++ b/node_modules/express/node_modules/buffer-crc32/LICENSE @@ -0,0 +1,17 @@ +Copyright (c) 2013 Brian J. Brennan + +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/node_modules/express/node_modules/buffer-crc32/README.md b/node_modules/express/node_modules/buffer-crc32/README.md new file mode 100755 index 0000000..0d9d8b8 --- /dev/null +++ b/node_modules/express/node_modules/buffer-crc32/README.md @@ -0,0 +1,47 @@ +# buffer-crc32 + +[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32) + +crc32 that works with binary data and fancy character sets, outputs +buffer, signed or unsigned data and has tests. + +Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix + +# install +``` +npm install buffer-crc32 +``` + +# example +```js +var crc32 = require('buffer-crc32'); +// works with buffers +var buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]) +crc32(buf) // -> + +// has convenience methods for getting signed or unsigned ints +crc32.signed(buf) // -> -1805997238 +crc32.unsigned(buf) // -> 2488970058 + +// will cast to buffer if given a string, so you can +// directly use foreign characters safely +crc32('自動販売機') // -> + +// and works in append mode too +var partialCrc = crc32('hey'); +var partialCrc = crc32(' ', partialCrc); +var partialCrc = crc32('sup', partialCrc); +var partialCrc = crc32(' ', partialCrc); +var finalCrc = crc32('bros', partialCrc); // -> +``` + +# tests +This was tested against the output of zlib's crc32 method. You can run +the tests with`npm test` (requires tap) + +# see also +https://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also +supports buffer inputs and return unsigned ints (thanks @tjholowaychuk). + +# license +MIT/X11 diff --git a/node_modules/express/node_modules/buffer-crc32/index.js b/node_modules/express/node_modules/buffer-crc32/index.js new file mode 100755 index 0000000..8694c63 --- /dev/null +++ b/node_modules/express/node_modules/buffer-crc32/index.js @@ -0,0 +1,91 @@ +var Buffer = require('buffer').Buffer; + +var CRC_TABLE = [ + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d +]; + +if (typeof Int32Array !== 'undefined') + CRC_TABLE = new Int32Array(CRC_TABLE); + +function bufferizeInt(num) { + var tmp = Buffer(4); + tmp.writeInt32BE(num, 0); + return tmp; +} + +function _crc32(buf, previous) { + if (!Buffer.isBuffer(buf)) { + buf = Buffer(buf); + } + if (Buffer.isBuffer(previous)) { + previous = previous.readUInt32BE(0); + } + var crc = ~~previous ^ -1; + for (var n = 0; n < buf.length; n++) { + crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8); + } + return (crc ^ -1); +} + +function crc32() { + return bufferizeInt(_crc32.apply(null, arguments)); +} +crc32.signed = function () { + return _crc32.apply(null, arguments); +}; +crc32.unsigned = function () { + return _crc32.apply(null, arguments) >>> 0; +}; + +module.exports = crc32; diff --git a/node_modules/express/node_modules/buffer-crc32/package.json b/node_modules/express/node_modules/buffer-crc32/package.json new file mode 100755 index 0000000..1e6d26a --- /dev/null +++ b/node_modules/express/node_modules/buffer-crc32/package.json @@ -0,0 +1,39 @@ +{ + "author": { + "name": "Brian J. Brennan", + "email": "brianloveswords@gmail.com", + "url": "http://bjb.io" + }, + "name": "buffer-crc32", + "description": "A pure javascript CRC32 algorithm that plays nice with binary data", + "version": "0.2.3", + "contributors": [ + { + "name": "Vladimir Kuznetsov" + } + ], + "homepage": "https://github.com/brianloveswords/buffer-crc32", + "repository": { + "type": "git", + "url": "git://github.com/brianloveswords/buffer-crc32.git" + }, + "main": "index.js", + "scripts": { + "test": "./node_modules/.bin/tap tests/*.test.js" + }, + "dependencies": {}, + "devDependencies": { + "tap": "~0.2.5" + }, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "readme": "# buffer-crc32\n\n[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32)\n\ncrc32 that works with binary data and fancy character sets, outputs\nbuffer, signed or unsigned data and has tests.\n\nDerived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix\n\n# install\n```\nnpm install buffer-crc32\n```\n\n# example\n```js\nvar crc32 = require('buffer-crc32');\n// works with buffers\nvar buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00])\ncrc32(buf) // -> \n\n// has convenience methods for getting signed or unsigned ints\ncrc32.signed(buf) // -> -1805997238\ncrc32.unsigned(buf) // -> 2488970058\n\n// will cast to buffer if given a string, so you can\n// directly use foreign characters safely\ncrc32('自動販売機') // -> \n\n// and works in append mode too\nvar partialCrc = crc32('hey');\nvar partialCrc = crc32(' ', partialCrc);\nvar partialCrc = crc32('sup', partialCrc);\nvar partialCrc = crc32(' ', partialCrc);\nvar finalCrc = crc32('bros', partialCrc); // -> \n```\n\n# tests\nThis was tested against the output of zlib's crc32 method. You can run\nthe tests with`npm test` (requires tap)\n\n# see also\nhttps://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also\nsupports buffer inputs and return unsigned ints (thanks @tjholowaychuk).\n\n# license\nMIT/X11\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/brianloveswords/buffer-crc32/issues" + }, + "_id": "buffer-crc32@0.2.3", + "_from": "buffer-crc32@0.2.3" +} diff --git a/node_modules/express/node_modules/buffer-crc32/tests/crc.test.js b/node_modules/express/node_modules/buffer-crc32/tests/crc.test.js new file mode 100755 index 0000000..bb0f9ef --- /dev/null +++ b/node_modules/express/node_modules/buffer-crc32/tests/crc.test.js @@ -0,0 +1,89 @@ +var crc32 = require('..'); +var test = require('tap').test; + +test('simple crc32 is no problem', function (t) { + var input = Buffer('hey sup bros'); + var expected = Buffer([0x47, 0xfa, 0x55, 0x70]); + t.same(crc32(input), expected); + t.end(); +}); + +test('another simple one', function (t) { + var input = Buffer('IEND'); + var expected = Buffer([0xae, 0x42, 0x60, 0x82]); + t.same(crc32(input), expected); + t.end(); +}); + +test('slightly more complex', function (t) { + var input = Buffer([0x00, 0x00, 0x00]); + var expected = Buffer([0xff, 0x41, 0xd9, 0x12]); + t.same(crc32(input), expected); + t.end(); +}); + +test('complex crc32 gets calculated like a champ', function (t) { + var input = Buffer('शीरà¥à¤·à¤•'); + var expected = Buffer([0x17, 0xb8, 0xaf, 0xf1]); + t.same(crc32(input), expected); + t.end(); +}); + +test('casts to buffer if necessary', function (t) { + var input = 'शीरà¥à¤·à¤•'; + var expected = Buffer([0x17, 0xb8, 0xaf, 0xf1]); + t.same(crc32(input), expected); + t.end(); +}); + +test('can do signed', function (t) { + var input = 'ham sandwich'; + var expected = -1891873021; + t.same(crc32.signed(input), expected); + t.end(); +}); + +test('can do unsigned', function (t) { + var input = 'bear sandwich'; + var expected = 3711466352; + t.same(crc32.unsigned(input), expected); + t.end(); +}); + + +test('simple crc32 in append mode', function (t) { + var input = [Buffer('hey'), Buffer(' '), Buffer('sup'), Buffer(' '), Buffer('bros')]; + var expected = Buffer([0x47, 0xfa, 0x55, 0x70]); + for (var crc = 0, i = 0; i < input.length; i++) { + crc = crc32(input[i], crc); + } + t.same(crc, expected); + t.end(); +}); + + +test('can do signed in append mode', function (t) { + var input1 = 'ham'; + var input2 = ' '; + var input3 = 'sandwich'; + var expected = -1891873021; + + var crc = crc32.signed(input1); + crc = crc32.signed(input2, crc); + crc = crc32.signed(input3, crc); + + t.same(crc, expected); + t.end(); +}); + +test('can do unsigned in append mode', function (t) { + var input1 = 'bear san'; + var input2 = 'dwich'; + var expected = 3711466352; + + var crc = crc32.unsigned(input1); + crc = crc32.unsigned(input2, crc); + t.same(crc, expected); + t.end(); +}); + diff --git a/node_modules/express/node_modules/cookie-signature/.npmignore b/node_modules/express/node_modules/cookie-signature/.npmignore new file mode 100755 index 0000000..f1250e5 --- /dev/null +++ b/node_modules/express/node_modules/cookie-signature/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/node_modules/express/node_modules/cookie-signature/History.md b/node_modules/express/node_modules/cookie-signature/History.md new file mode 100755 index 0000000..2bbc4b3 --- /dev/null +++ b/node_modules/express/node_modules/cookie-signature/History.md @@ -0,0 +1,27 @@ +1.0.4 / 2014-06-25 +================== + + * corrected avoidance of timing attacks (thanks @tenbits!) + + +1.0.3 / 2014-01-28 +================== + + * [incorrect] fix for timing attacks + +1.0.2 / 2014-01-28 +================== + + * fix missing repository warning + * fix typo in test + +1.0.1 / 2013-04-15 +================== + + * Revert "Changed underlying HMAC algo. to sha512." + * Revert "Fix for timing attacks on MAC verification." + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/express/node_modules/cookie-signature/Makefile b/node_modules/express/node_modules/cookie-signature/Makefile new file mode 100755 index 0000000..4e9c8d3 --- /dev/null +++ b/node_modules/express/node_modules/cookie-signature/Makefile @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --require should \ + --reporter spec + +.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/cookie-signature/Readme.md b/node_modules/express/node_modules/cookie-signature/Readme.md new file mode 100755 index 0000000..2559e84 --- /dev/null +++ b/node_modules/express/node_modules/cookie-signature/Readme.md @@ -0,0 +1,42 @@ + +# cookie-signature + + Sign and unsign cookies. + +## Example + +```js +var cookie = require('cookie-signature'); + +var val = cookie.sign('hello', 'tobiiscool'); +val.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI'); + +var val = cookie.sign('hello', 'tobiiscool'); +cookie.unsign(val, 'tobiiscool').should.equal('hello'); +cookie.unsign(val, 'luna').should.be.false; +``` + +## License + +(The MIT License) + +Copyright (c) 2012 LearnBoost <tj@learnboost.com> + +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. \ No newline at end of file diff --git a/node_modules/express/node_modules/cookie-signature/index.js b/node_modules/express/node_modules/cookie-signature/index.js new file mode 100755 index 0000000..b63bf84 --- /dev/null +++ b/node_modules/express/node_modules/cookie-signature/index.js @@ -0,0 +1,51 @@ +/** + * Module dependencies. + */ + +var crypto = require('crypto'); + +/** + * Sign the given `val` with `secret`. + * + * @param {String} val + * @param {String} secret + * @return {String} + * @api private + */ + +exports.sign = function(val, secret){ + if ('string' != typeof val) throw new TypeError('cookie required'); + if ('string' != typeof secret) throw new TypeError('secret required'); + return val + '.' + crypto + .createHmac('sha256', secret) + .update(val) + .digest('base64') + .replace(/\=+$/, ''); +}; + +/** + * Unsign and decode the given `val` with `secret`, + * returning `false` if the signature is invalid. + * + * @param {String} val + * @param {String} secret + * @return {String|Boolean} + * @api private + */ + +exports.unsign = function(val, secret){ + if ('string' != typeof val) throw new TypeError('cookie required'); + if ('string' != typeof secret) throw new TypeError('secret required'); + var str = val.slice(0, val.lastIndexOf('.')) + , mac = exports.sign(str, secret); + + return sha1(mac) == sha1(val) ? str : false; +}; + +/** + * Private + */ + +function sha1(str){ + return crypto.createHash('sha1').update(str).digest('hex'); +} diff --git a/node_modules/express/node_modules/cookie-signature/package.json b/node_modules/express/node_modules/cookie-signature/package.json new file mode 100755 index 0000000..465aa80 --- /dev/null +++ b/node_modules/express/node_modules/cookie-signature/package.json @@ -0,0 +1,31 @@ +{ + "name": "cookie-signature", + "version": "1.0.4", + "description": "Sign and unsign cookies", + "keywords": [ + "cookie", + "sign", + "unsign" + ], + "author": { + "name": "TJ Holowaychuk", + "email": "tj@learnboost.com" + }, + "repository": { + "type": "git", + "url": "https://github.com/visionmedia/node-cookie-signature.git" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "main": "index", + "readme": "\n# cookie-signature\n\n Sign and unsign cookies.\n\n## Example\n\n```js\nvar cookie = require('cookie-signature');\n\nvar val = cookie.sign('hello', 'tobiiscool');\nval.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI');\n\nvar val = cookie.sign('hello', 'tobiiscool');\ncookie.unsign(val, 'tobiiscool').should.equal('hello');\ncookie.unsign(val, 'luna').should.be.false;\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 LearnBoost <tj@learnboost.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/node-cookie-signature/issues" + }, + "_id": "cookie-signature@1.0.4", + "_from": "cookie-signature@1.0.4" +} diff --git a/node_modules/express/node_modules/cookie/.npmignore b/node_modules/express/node_modules/cookie/.npmignore new file mode 100755 index 0000000..efab07f --- /dev/null +++ b/node_modules/express/node_modules/cookie/.npmignore @@ -0,0 +1,2 @@ +test +.travis.yml diff --git a/node_modules/express/node_modules/cookie/LICENSE b/node_modules/express/node_modules/cookie/LICENSE new file mode 100755 index 0000000..249d9de --- /dev/null +++ b/node_modules/express/node_modules/cookie/LICENSE @@ -0,0 +1,9 @@ +// MIT License + +Copyright (C) Roman Shtylman + +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/node_modules/express/node_modules/cookie/README.md b/node_modules/express/node_modules/cookie/README.md new file mode 100755 index 0000000..3170b4b --- /dev/null +++ b/node_modules/express/node_modules/cookie/README.md @@ -0,0 +1,44 @@ +# cookie [![Build Status](https://secure.travis-ci.org/defunctzombie/node-cookie.png?branch=master)](http://travis-ci.org/defunctzombie/node-cookie) # + +cookie is a basic cookie parser and serializer. It doesn't make assumptions about how you are going to deal with your cookies. It basically just provides a way to read and write the HTTP cookie headers. + +See [RFC6265](http://tools.ietf.org/html/rfc6265) for details about the http header for cookies. + +## how? + +``` +npm install cookie +``` + +```javascript +var cookie = require('cookie'); + +var hdr = cookie.serialize('foo', 'bar'); +// hdr = 'foo=bar'; + +var cookies = cookie.parse('foo=bar; cat=meow; dog=ruff'); +// cookies = { foo: 'bar', cat: 'meow', dog: 'ruff' }; +``` + +## more + +The serialize function takes a third parameter, an object, to set cookie options. See the RFC for valid values. + +### path +> cookie path + +### expires +> absolute expiration date for the cookie (Date object) + +### maxAge +> relative max age of the cookie from when the client receives it (seconds) + +### domain +> domain for the cookie + +### secure +> true or false + +### httpOnly +> true or false + diff --git a/node_modules/express/node_modules/cookie/index.js b/node_modules/express/node_modules/cookie/index.js new file mode 100755 index 0000000..00d54a7 --- /dev/null +++ b/node_modules/express/node_modules/cookie/index.js @@ -0,0 +1,75 @@ + +/// Serialize the a name value pair into a cookie string suitable for +/// http headers. An optional options object specified cookie parameters +/// +/// serialize('foo', 'bar', { httpOnly: true }) +/// => "foo=bar; httpOnly" +/// +/// @param {String} name +/// @param {String} val +/// @param {Object} options +/// @return {String} +var serialize = function(name, val, opt){ + opt = opt || {}; + var enc = opt.encode || encode; + var pairs = [name + '=' + enc(val)]; + + if (null != opt.maxAge) { + var maxAge = opt.maxAge - 0; + if (isNaN(maxAge)) throw new Error('maxAge should be a Number'); + pairs.push('Max-Age=' + maxAge); + } + + if (opt.domain) pairs.push('Domain=' + opt.domain); + if (opt.path) pairs.push('Path=' + opt.path); + if (opt.expires) pairs.push('Expires=' + opt.expires.toUTCString()); + if (opt.httpOnly) pairs.push('HttpOnly'); + if (opt.secure) pairs.push('Secure'); + + return pairs.join('; '); +}; + +/// Parse the given cookie header string into an object +/// The object has the various cookies as keys(names) => values +/// @param {String} str +/// @return {Object} +var parse = function(str, opt) { + opt = opt || {}; + var obj = {} + var pairs = str.split(/; */); + var dec = opt.decode || decode; + + pairs.forEach(function(pair) { + var eq_idx = pair.indexOf('=') + + // skip things that don't look like key=value + if (eq_idx < 0) { + return; + } + + var key = pair.substr(0, eq_idx).trim() + var val = pair.substr(++eq_idx, pair.length).trim(); + + // quoted values + if ('"' == val[0]) { + val = val.slice(1, -1); + } + + // only assign once + if (undefined == obj[key]) { + try { + obj[key] = dec(val); + } catch (e) { + obj[key] = val; + } + } + }); + + return obj; +}; + +var encode = encodeURIComponent; +var decode = decodeURIComponent; + +module.exports.serialize = serialize; +module.exports.parse = parse; diff --git a/node_modules/express/node_modules/cookie/package.json b/node_modules/express/node_modules/cookie/package.json new file mode 100755 index 0000000..361513c --- /dev/null +++ b/node_modules/express/node_modules/cookie/package.json @@ -0,0 +1,36 @@ +{ + "author": { + "name": "Roman Shtylman", + "email": "shtylman@gmail.com" + }, + "name": "cookie", + "description": "cookie parsing and serialization", + "version": "0.1.2", + "repository": { + "type": "git", + "url": "git://github.com/shtylman/node-cookie.git" + }, + "keywords": [ + "cookie", + "cookies" + ], + "main": "index.js", + "scripts": { + "test": "mocha" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "1.x.x" + }, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "readme": "# cookie [![Build Status](https://secure.travis-ci.org/defunctzombie/node-cookie.png?branch=master)](http://travis-ci.org/defunctzombie/node-cookie) #\n\ncookie is a basic cookie parser and serializer. It doesn't make assumptions about how you are going to deal with your cookies. It basically just provides a way to read and write the HTTP cookie headers.\n\nSee [RFC6265](http://tools.ietf.org/html/rfc6265) for details about the http header for cookies.\n\n## how?\n\n```\nnpm install cookie\n```\n\n```javascript\nvar cookie = require('cookie');\n\nvar hdr = cookie.serialize('foo', 'bar');\n// hdr = 'foo=bar';\n\nvar cookies = cookie.parse('foo=bar; cat=meow; dog=ruff');\n// cookies = { foo: 'bar', cat: 'meow', dog: 'ruff' };\n```\n\n## more\n\nThe serialize function takes a third parameter, an object, to set cookie options. See the RFC for valid values.\n\n### path\n> cookie path\n\n### expires\n> absolute expiration date for the cookie (Date object)\n\n### maxAge\n> relative max age of the cookie from when the client receives it (seconds)\n\n### domain\n> domain for the cookie\n\n### secure\n> true or false\n\n### httpOnly\n> true or false\n\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/shtylman/node-cookie/issues" + }, + "_id": "cookie@0.1.2", + "_from": "cookie@0.1.2" +} diff --git a/node_modules/express/node_modules/debug/.jshintrc b/node_modules/express/node_modules/debug/.jshintrc new file mode 100755 index 0000000..299877f --- /dev/null +++ b/node_modules/express/node_modules/debug/.jshintrc @@ -0,0 +1,3 @@ +{ + "laxbreak": true +} diff --git a/node_modules/express/node_modules/debug/.npmignore b/node_modules/express/node_modules/debug/.npmignore new file mode 100755 index 0000000..7e6163d --- /dev/null +++ b/node_modules/express/node_modules/debug/.npmignore @@ -0,0 +1,6 @@ +support +test +examples +example +*.sock +dist diff --git a/node_modules/express/node_modules/debug/History.md b/node_modules/express/node_modules/debug/History.md new file mode 100755 index 0000000..42139a8 --- /dev/null +++ b/node_modules/express/node_modules/debug/History.md @@ -0,0 +1,126 @@ + +1.0.2 / 2014-06-10 +================== + + * browser: update color palette (#113, @gscottolson) + * common: make console logging function configurable (#108, @timoxley) + * node: fix %o colors on old node <= 0.8.x + * Makefile: find node path using shell/which (#109, @timoxley) + +1.0.1 / 2014-06-06 +================== + + * browser: use `removeItem()` to clear localStorage + * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) + * package: add "contributors" section + * node: fix comment typo + * README: list authors + +1.0.0 / 2014-06-04 +================== + + * make ms diff be global, not be scope + * debug: ignore empty strings in enable() + * node: make DEBUG_COLORS able to disable coloring + * *: export the `colors` array + * npmignore: don't publish the `dist` dir + * Makefile: refactor to use browserify + * package: add "browserify" as a dev dependency + * Readme: add Web Inspector Colors section + * node: reset terminal color for the debug content + * node: map "%o" to `util.inspect()` + * browser: map "%j" to `JSON.stringify()` + * debug: add custom "formatters" + * debug: use "ms" module for humanizing the diff + * Readme: add "bash" syntax highlighting + * browser: add Firebug color support + * browser: add colors for WebKit browsers + * node: apply log to `console` + * rewrite: abstract common logic for Node & browsers + * add .jshintrc file + +0.8.1 / 2014-04-14 +================== + + * package: re-add the "component" section + +0.8.0 / 2014-03-30 +================== + + * add `enable()` method for nodejs. Closes #27 + * change from stderr to stdout + * remove unnecessary index.js file + +0.7.4 / 2013-11-13 +================== + + * remove "browserify" key from package.json (fixes something in browserify) + +0.7.3 / 2013-10-30 +================== + + * fix: catch localStorage security error when cookies are blocked (Chrome) + * add debug(err) support. Closes #46 + * add .browser prop to package.json. Closes #42 + +0.7.2 / 2013-02-06 +================== + + * fix package.json + * fix: Mobile Safari (private mode) is broken with debug + * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript + +0.7.1 / 2013-02-05 +================== + + * add repository URL to package.json + * add DEBUG_COLORED to force colored output + * add browserify support + * fix component. Closes #24 + +0.7.0 / 2012-05-04 +================== + + * Added .component to package.json + * Added debug.component.js build + +0.6.0 / 2012-03-16 +================== + + * Added support for "-" prefix in DEBUG [Vinay Pulim] + * Added `.enabled` flag to the node version [TooTallNate] + +0.5.0 / 2012-02-02 +================== + + * Added: humanize diffs. Closes #8 + * Added `debug.disable()` to the CS variant + * Removed padding. Closes #10 + * Fixed: persist client-side variant again. Closes #9 + +0.4.0 / 2012-02-01 +================== + + * Added browser variant support for older browsers [TooTallNate] + * Added `debug.enable('project:*')` to browser variant [TooTallNate] + * Added padding to diff (moved it to the right) + +0.3.0 / 2012-01-26 +================== + + * Added millisecond diff when isatty, otherwise UTC string + +0.2.0 / 2012-01-22 +================== + + * Added wildcard support + +0.1.0 / 2011-12-02 +================== + + * Added: remove colors unless stderr isatty [TooTallNate] + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/express/node_modules/debug/Makefile b/node_modules/express/node_modules/debug/Makefile new file mode 100755 index 0000000..b0bde6e --- /dev/null +++ b/node_modules/express/node_modules/debug/Makefile @@ -0,0 +1,33 @@ + +# get Makefile directory name: http://stackoverflow.com/a/5982798/376773 +THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) + +# BIN directory +BIN := $(THIS_DIR)/node_modules/.bin + +# applications +NODE ?= $(shell which node) +NPM ?= $(NODE) $(shell which npm) +BROWSERIFY ?= $(NODE) $(BIN)/browserify + +all: dist/debug.js + +install: node_modules + +clean: + @rm -rf node_modules dist + +dist: + @mkdir -p $@ + +dist/debug.js: node_modules browser.js debug.js dist + @$(BROWSERIFY) \ + --standalone debug \ + . > $@ + +node_modules: package.json + @NODE_ENV= $(NPM) install + @touch node_modules + +.PHONY: all install clean diff --git a/node_modules/express/node_modules/debug/Readme.md b/node_modules/express/node_modules/debug/Readme.md new file mode 100755 index 0000000..e3607db --- /dev/null +++ b/node_modules/express/node_modules/debug/Readme.md @@ -0,0 +1,153 @@ +# debug + + tiny node.js debugging utility modelled after node core's debugging technique. + +## Installation + +```bash +$ npm install debug +``` + +## Usage + + With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility. + +Example _app.js_: + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %s', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example _worker.js_: + +```js +var debug = require('debug')('worker'); + +setInterval(function(){ + debug('doing some work'); +}, 1000); +``` + + The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: + + ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) + + ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) + +## Millisecond diff + + When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) + + When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: + + ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) + +## Conventions + + If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". + +## Wildcards + + The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + + You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:". + +## Browser support + + Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + +#### Web Inspector Colors + + Colors are also enabled on "Web Inspectors" that understand the `%c` formatting + option. These are WebKit web inspectors, and the Firebug plugin for Firefox. + Colored output looks something like: + + ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) + +### stderr vs stdout + +You can set an alternative logging method per-namespace by overriding the `log` method on a per-namespace or globally: + +Example _stderr.js_: + +```js +var debug = require('../'); +var log = debug('app:log'); + +// by default console.log is used +log('goes to stdout!'); + +var error = debug('app:error'); +// set this namespace to log via console.error +error.log = console.error.bind(console); // don't forget to bind to console! +error('goes to stderr'); +log('still goes to stdout!'); + +// set all output to go via console.warn +// overrides all per-namespace log settings +debug.log = console.warn.bind(console); +log('now goes to stderr via console.warn'); +error('still goes to stderr, but via console.warn now'); +``` + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + +## License + +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca> + +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/node_modules/express/node_modules/debug/browser.js b/node_modules/express/node_modules/debug/browser.js new file mode 100755 index 0000000..41d957c --- /dev/null +++ b/node_modules/express/node_modules/debug/browser.js @@ -0,0 +1,144 @@ + +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' +]; + +/** + * Currently only WebKit-based Web Inspectors and the Firebug + * extension (*not* the built-in Firefox web inpector) are + * known to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // is webkit? http://stackoverflow.com/a/16459606/376773 + return ('WebkitAppearance' in document.documentElement.style) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (window.console && (console.firebug || (console.exception && console.table))); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + return JSON.stringify(v); +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs() { + var args = arguments; + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? '%c ' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return args + + var c = 'color: ' + this.color; + args = [args[0], c, ''].concat(Array.prototype.slice.call(args, 1)); + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); + return args; +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // This hackery is required for IE8, + // where the `console.log` function doesn't have 'apply' + return 'object' == typeof console + && 'function' == typeof console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + localStorage.removeItem('debug'); + } else { + localStorage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = localStorage.debug; + } catch(e) {} + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); diff --git a/node_modules/express/node_modules/debug/component.json b/node_modules/express/node_modules/debug/component.json new file mode 100755 index 0000000..dfb0311 --- /dev/null +++ b/node_modules/express/node_modules/debug/component.json @@ -0,0 +1,19 @@ +{ + "name": "debug", + "repo": "visionmedia/debug", + "description": "small debugging utility", + "version": "1.0.2", + "keywords": [ + "debug", + "log", + "debugger" + ], + "main": "browser.js", + "scripts": [ + "browser.js", + "debug.js" + ], + "dependencies": { + "guille/ms.js": "0.6.1" + } +} diff --git a/node_modules/express/node_modules/debug/debug.js b/node_modules/express/node_modules/debug/debug.js new file mode 100755 index 0000000..c514fb7 --- /dev/null +++ b/node_modules/express/node_modules/debug/debug.js @@ -0,0 +1,197 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = debug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = require('ms'); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lowercased letter, i.e. "n". + */ + +exports.formatters = {}; + +/** + * Previously assigned color. + */ + +var prevColor = 0; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * + * @return {Number} + * @api private + */ + +function selectColor() { + return exports.colors[prevColor++ % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function debug(namespace) { + + // define the `disabled` version + function disabled() { + } + disabled.enabled = false; + + // define the `enabled` version + function enabled() { + + var self = enabled; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // add the `color` if not set + if (null == self.useColors) self.useColors = exports.useColors(); + if (null == self.color && self.useColors) self.color = selectColor(); + + var args = Array.prototype.slice.call(arguments); + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %o + args = ['%o'].concat(args); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + if ('function' === typeof exports.formatArgs) { + args = exports.formatArgs.apply(self, args); + } + var logFn = exports.log || enabled.log || console.log.bind(console); + logFn.apply(self, args); + } + enabled.enabled = true; + + var fn = exports.enabled(namespace) ? enabled : disabled; + + fn.namespace = namespace; + + return fn; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + var split = (namespaces || '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace('*', '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} diff --git a/node_modules/express/node_modules/debug/node.js b/node_modules/express/node_modules/debug/node.js new file mode 100755 index 0000000..c94f7d1 --- /dev/null +++ b/node_modules/express/node_modules/debug/node.js @@ -0,0 +1,129 @@ + +/** + * Module dependencies. + */ + +var tty = require('tty'); +var util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + var debugColors = (process.env.DEBUG_COLORS || '').trim().toLowerCase(); + if (0 === debugColors.length) { + return tty.isatty(1); + } else { + return '0' !== debugColors + && 'no' !== debugColors + && 'false' !== debugColors + && 'disabled' !== debugColors; + } +} + +/** + * Map %o to `util.inspect()`, since Node doesn't do that out of the box. + */ + +var inspect = (4 === util.inspect.length ? + // node <= 0.8.x + function (v, colors) { + return util.inspect(v, void 0, void 0, colors); + } : + // node > 0.8.x + function (v, colors) { + return util.inspect(v, { colors: colors }); + } +); + +exports.formatters.o = function(v) { + return inspect(v, this.useColors) + .replace(/\s*\n\s*/g, ' '); +}; + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs() { + var args = arguments; + var useColors = this.useColors; + var name = this.namespace; + + if (useColors) { + var c = this.color; + + args[0] = ' \u001b[9' + c + 'm' + name + ' ' + + '\u001b[0m' + + args[0] + '\u001b[3' + c + 'm' + + ' +' + exports.humanize(this.diff) + '\u001b[0m'; + } else { + args[0] = new Date().toUTCString() + + ' ' + name + ' ' + args[0]; + } + return args; +} + +/** + * Invokes `console.log()` with the specified arguments. + */ + +function log() { + return console.log.apply(console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + if (null == namespaces) { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Enable namespaces listed in `process.env.DEBUG` initially. + */ + +exports.enable(load()); diff --git a/node_modules/express/node_modules/debug/node_modules/ms/.npmignore b/node_modules/express/node_modules/debug/node_modules/ms/.npmignore new file mode 100755 index 0000000..d1aa0ce --- /dev/null +++ b/node_modules/express/node_modules/debug/node_modules/ms/.npmignore @@ -0,0 +1,5 @@ +node_modules +test +History.md +Makefile +component.json diff --git a/node_modules/express/node_modules/debug/node_modules/ms/README.md b/node_modules/express/node_modules/debug/node_modules/ms/README.md new file mode 100755 index 0000000..d4ab12a --- /dev/null +++ b/node_modules/express/node_modules/debug/node_modules/ms/README.md @@ -0,0 +1,33 @@ +# ms.js: miliseconds conversion utility + +```js +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('100') // 100 +``` + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(ms('10 hours')) // "10h" +``` + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(ms('10 hours', { long: true })) // "10 hours" +``` + +- Node/Browser compatible. Published as `ms` in NPM. +- If a number is supplied to `ms`, a string with a unit is returned. +- If a string that contains the number is supplied, it returns it as +a number (e.g: it returns `100` for `'100'`). +- If you pass a string with a number and a valid unit, the number of +equivalent ms is returned. + +## License + +MIT \ No newline at end of file diff --git a/node_modules/express/node_modules/debug/node_modules/ms/index.js b/node_modules/express/node_modules/debug/node_modules/ms/index.js new file mode 100755 index 0000000..c5847f8 --- /dev/null +++ b/node_modules/express/node_modules/debug/node_modules/ms/index.js @@ -0,0 +1,111 @@ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} options + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options){ + options = options || {}; + if ('string' == typeof val) return parse(val); + return options.long + ? long(val) + : short(val); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + var match = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str); + if (!match) return; + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'y': + return n * y; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 's': + return n * s; + case 'ms': + return n; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function short(ms) { + if (ms >= d) return Math.round(ms / d) + 'd'; + if (ms >= h) return Math.round(ms / h) + 'h'; + if (ms >= m) return Math.round(ms / m) + 'm'; + if (ms >= s) return Math.round(ms / s) + 's'; + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function long(ms) { + return plural(ms, d, 'day') + || plural(ms, h, 'hour') + || plural(ms, m, 'minute') + || plural(ms, s, 'second') + || ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, n, name) { + if (ms < n) return; + if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name; + return Math.ceil(ms / n) + ' ' + name + 's'; +} diff --git a/node_modules/express/node_modules/debug/node_modules/ms/package.json b/node_modules/express/node_modules/debug/node_modules/ms/package.json new file mode 100755 index 0000000..2e1c336 --- /dev/null +++ b/node_modules/express/node_modules/debug/node_modules/ms/package.json @@ -0,0 +1,27 @@ +{ + "name": "ms", + "version": "0.6.2", + "description": "Tiny ms conversion utility", + "repository": { + "type": "git", + "url": "git://github.com/guille/ms.js.git" + }, + "main": "./index", + "devDependencies": { + "mocha": "*", + "expect.js": "*", + "serve": "*" + }, + "component": { + "scripts": { + "ms/index.js": "index.js" + } + }, + "readme": "# ms.js: miliseconds conversion utility\n\n```js\nms('1d') // 86400000\nms('10h') // 36000000\nms('2h') // 7200000\nms('1m') // 60000\nms('5s') // 5000\nms('100') // 100\n```\n\n```js\nms(60000) // \"1m\"\nms(2 * 60000) // \"2m\"\nms(ms('10 hours')) // \"10h\"\n```\n\n```js\nms(60000, { long: true }) // \"1 minute\"\nms(2 * 60000, { long: true }) // \"2 minutes\"\nms(ms('10 hours', { long: true })) // \"10 hours\"\n```\n\n- Node/Browser compatible. Published as `ms` in NPM.\n- If a number is supplied to `ms`, a string with a unit is returned.\n- If a string that contains the number is supplied, it returns it as\na number (e.g: it returns `100` for `'100'`).\n- If you pass a string with a number and a valid unit, the number of\nequivalent ms is returned.\n\n## License\n\nMIT", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/guille/ms.js/issues" + }, + "_id": "ms@0.6.2", + "_from": "ms@0.6.2" +} diff --git a/node_modules/express/node_modules/debug/package.json b/node_modules/express/node_modules/debug/package.json new file mode 100755 index 0000000..b5e6620 --- /dev/null +++ b/node_modules/express/node_modules/debug/package.json @@ -0,0 +1,47 @@ +{ + "name": "debug", + "version": "1.0.2", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/debug.git" + }, + "description": "small debugging utility", + "keywords": [ + "debug", + "log", + "debugger" + ], + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "contributors": [ + { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io" + } + ], + "dependencies": { + "ms": "0.6.2" + }, + "devDependencies": { + "browserify": "4.1.6", + "mocha": "*" + }, + "main": "./node.js", + "browser": "./browser.js", + "component": { + "scripts": { + "debug/index.js": "browser.js", + "debug/debug.js": "debug.js" + } + }, + "readme": "# debug\n\n tiny node.js debugging utility modelled after node core's debugging technique.\n\n## Installation\n\n```bash\n$ npm install debug\n```\n\n## Usage\n\n With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility.\n\nExample _app.js_:\n\n```js\nvar debug = require('debug')('http')\n , http = require('http')\n , name = 'My App';\n\n// fake app\n\ndebug('booting %s', name);\n\nhttp.createServer(function(req, res){\n debug(req.method + ' ' + req.url);\n res.end('hello\\n');\n}).listen(3000, function(){\n debug('listening');\n});\n\n// fake worker of some kind\n\nrequire('./worker');\n```\n\nExample _worker.js_:\n\n```js\nvar debug = require('debug')('worker');\n\nsetInterval(function(){\n debug('doing some work');\n}, 1000);\n```\n\n The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:\n\n ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)\n\n ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)\n\n## Millisecond diff\n\n When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the \"+NNNms\" will show you how much time was spent between calls.\n\n ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)\n\n When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:\n\n ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)\n\n## Conventions\n\n If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use \":\" to separate features. For example \"bodyParser\" from Connect would then be \"connect:bodyParser\".\n\n## Wildcards\n\n The `*` character may be used as a wildcard. Suppose for example your library has debuggers named \"connect:bodyParser\", \"connect:compress\", \"connect:session\", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.\n\n You can also exclude specific debuggers by prefixing them with a \"-\" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with \"connect:\".\n\n## Browser support\n\n Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`.\n\n```js\na = debug('worker:a');\nb = debug('worker:b');\n\nsetInterval(function(){\n a('doing some work');\n}, 1000);\n\nsetInterval(function(){\n b('doing some work');\n}, 1200);\n```\n\n#### Web Inspector Colors\n\n Colors are also enabled on \"Web Inspectors\" that understand the `%c` formatting\n option. These are WebKit web inspectors, and the Firebug plugin for Firefox.\n Colored output looks something like:\n\n ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png)\n\n### stderr vs stdout\n\nYou can set an alternative logging method per-namespace by overriding the `log` method on a per-namespace or globally:\n\nExample _stderr.js_:\n\n```js\nvar debug = require('../');\nvar log = debug('app:log');\n\n// by default console.log is used\nlog('goes to stdout!');\n\nvar error = debug('app:error');\n// set this namespace to log via console.error\nerror.log = console.error.bind(console); // don't forget to bind to console!\nerror('goes to stderr');\nlog('still goes to stdout!');\n\n// set all output to go via console.warn\n// overrides all per-namespace log settings\ndebug.log = console.warn.bind(console);\nlog('now goes to stderr via console.warn');\nerror('still goes to stderr, but via console.warn now');\n```\n\n## Authors\n\n - TJ Holowaychuk\n - Nathan Rajlich\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/debug/issues" + }, + "_id": "debug@1.0.2", + "_from": "debug@1.0.2" +} diff --git a/node_modules/express/node_modules/escape-html/.npmignore b/node_modules/express/node_modules/escape-html/.npmignore new file mode 100755 index 0000000..48a2e24 --- /dev/null +++ b/node_modules/express/node_modules/escape-html/.npmignore @@ -0,0 +1,2 @@ +components +build diff --git a/node_modules/express/node_modules/escape-html/Makefile b/node_modules/express/node_modules/escape-html/Makefile new file mode 100755 index 0000000..3f6119d --- /dev/null +++ b/node_modules/express/node_modules/escape-html/Makefile @@ -0,0 +1,11 @@ + +build: components index.js + @component build + +components: + @Component install + +clean: + rm -fr build components template.js + +.PHONY: clean diff --git a/node_modules/express/node_modules/escape-html/Readme.md b/node_modules/express/node_modules/escape-html/Readme.md new file mode 100755 index 0000000..2cfcc99 --- /dev/null +++ b/node_modules/express/node_modules/escape-html/Readme.md @@ -0,0 +1,15 @@ + +# escape-html + + Escape HTML entities + +## Example + +```js +var escape = require('escape-html'); +escape(str); +``` + +## License + + MIT \ No newline at end of file diff --git a/node_modules/express/node_modules/escape-html/component.json b/node_modules/express/node_modules/escape-html/component.json new file mode 100755 index 0000000..cb9740f --- /dev/null +++ b/node_modules/express/node_modules/escape-html/component.json @@ -0,0 +1,10 @@ +{ + "name": "escape-html", + "description": "Escape HTML entities", + "version": "1.0.1", + "keywords": ["escape", "html", "utility"], + "dependencies": {}, + "scripts": [ + "index.js" + ] +} diff --git a/node_modules/express/node_modules/escape-html/index.js b/node_modules/express/node_modules/escape-html/index.js new file mode 100755 index 0000000..2765211 --- /dev/null +++ b/node_modules/express/node_modules/escape-html/index.js @@ -0,0 +1,16 @@ +/** + * Escape special characters in the given string of html. + * + * @param {String} html + * @return {String} + * @api private + */ + +module.exports = function(html) { + return String(html) + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(//g, '>'); +} diff --git a/node_modules/express/node_modules/escape-html/package.json b/node_modules/express/node_modules/escape-html/package.json new file mode 100755 index 0000000..833c227 --- /dev/null +++ b/node_modules/express/node_modules/escape-html/package.json @@ -0,0 +1,28 @@ +{ + "name": "escape-html", + "description": "Escape HTML entities", + "version": "1.0.1", + "keywords": [ + "escape", + "html", + "utility" + ], + "dependencies": {}, + "main": "index.js", + "component": { + "scripts": { + "escape-html/index.js": "index.js" + } + }, + "repository": { + "type": "git", + "url": "https://github.com/component/escape-html.git" + }, + "readme": "\n# escape-html\n\n Escape HTML entities\n\n## Example\n\n```js\nvar escape = require('escape-html');\nescape(str);\n```\n\n## License\n\n MIT", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/component/escape-html/issues" + }, + "_id": "escape-html@1.0.1", + "_from": "escape-html@1.0.1" +} diff --git a/node_modules/express/node_modules/fresh/.npmignore b/node_modules/express/node_modules/fresh/.npmignore new file mode 100755 index 0000000..9daeafb --- /dev/null +++ b/node_modules/express/node_modules/fresh/.npmignore @@ -0,0 +1 @@ +test diff --git a/node_modules/express/node_modules/fresh/History.md b/node_modules/express/node_modules/fresh/History.md new file mode 100755 index 0000000..12e1b3e --- /dev/null +++ b/node_modules/express/node_modules/fresh/History.md @@ -0,0 +1,10 @@ + +0.2.1 / 2014-01-29 +================== + + * fix: support max-age=0 for end-to-end revalidation + +0.2.0 / 2013-08-11 +================== + + * fix: return false for no-cache diff --git a/node_modules/express/node_modules/fresh/Makefile b/node_modules/express/node_modules/fresh/Makefile new file mode 100755 index 0000000..8e8640f --- /dev/null +++ b/node_modules/express/node_modules/fresh/Makefile @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --reporter spec \ + --require should + +.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/fresh/Readme.md b/node_modules/express/node_modules/fresh/Readme.md new file mode 100755 index 0000000..61366c5 --- /dev/null +++ b/node_modules/express/node_modules/fresh/Readme.md @@ -0,0 +1,57 @@ + +# node-fresh + + HTTP response freshness testing + +## fresh(req, res) + + Check freshness of `req` and `res` headers. + + When the cache is "fresh" __true__ is returned, + otherwise __false__ is returned to indicate that + the cache is now stale. + +## Example: + +```js +var req = { 'if-none-match': 'tobi' }; +var res = { 'etag': 'luna' }; +fresh(req, res); +// => false + +var req = { 'if-none-match': 'tobi' }; +var res = { 'etag': 'tobi' }; +fresh(req, res); +// => true +``` + +## Installation + +``` +$ npm install fresh +``` + +## License + +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> + +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. \ No newline at end of file diff --git a/node_modules/express/node_modules/fresh/index.js b/node_modules/express/node_modules/fresh/index.js new file mode 100755 index 0000000..9c3f47d --- /dev/null +++ b/node_modules/express/node_modules/fresh/index.js @@ -0,0 +1,53 @@ + +/** + * Expose `fresh()`. + */ + +module.exports = fresh; + +/** + * Check freshness of `req` and `res` headers. + * + * When the cache is "fresh" __true__ is returned, + * otherwise __false__ is returned to indicate that + * the cache is now stale. + * + * @param {Object} req + * @param {Object} res + * @return {Boolean} + * @api public + */ + +function fresh(req, res) { + // defaults + var etagMatches = true; + var notModified = true; + + // fields + var modifiedSince = req['if-modified-since']; + var noneMatch = req['if-none-match']; + var lastModified = res['last-modified']; + var etag = res['etag']; + var cc = req['cache-control']; + + // unconditional request + if (!modifiedSince && !noneMatch) return false; + + // check for no-cache cache request directive + if (cc && cc.indexOf('no-cache') !== -1) return false; + + // parse if-none-match + if (noneMatch) noneMatch = noneMatch.split(/ *, */); + + // if-none-match + if (noneMatch) etagMatches = ~noneMatch.indexOf(etag) || '*' == noneMatch[0]; + + // if-modified-since + if (modifiedSince) { + modifiedSince = new Date(modifiedSince); + lastModified = new Date(lastModified); + notModified = lastModified <= modifiedSince; + } + + return !! (etagMatches && notModified); +} \ No newline at end of file diff --git a/node_modules/express/node_modules/fresh/package.json b/node_modules/express/node_modules/fresh/package.json new file mode 100755 index 0000000..44d2a88 --- /dev/null +++ b/node_modules/express/node_modules/fresh/package.json @@ -0,0 +1,33 @@ +{ + "name": "fresh", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "description": "HTTP response freshness testing", + "version": "0.2.2", + "main": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/visionmedia/node-fresh.git" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/visionmedia/node-fresh/blob/master/Readme.md#license" + } + ], + "readme": "\n# node-fresh\n\n HTTP response freshness testing\n\n## fresh(req, res)\n\n Check freshness of `req` and `res` headers.\n\n When the cache is \"fresh\" __true__ is returned,\n otherwise __false__ is returned to indicate that\n the cache is now stale.\n\n## Example:\n\n```js\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'luna' };\nfresh(req, res);\n// => false\n\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'tobi' };\nfresh(req, res);\n// => true\n```\n\n## Installation\n\n```\n$ npm install fresh\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/node-fresh/issues" + }, + "_id": "fresh@0.2.2", + "_from": "fresh@0.2.2" +} diff --git a/node_modules/express/node_modules/merge-descriptors/.npmignore b/node_modules/express/node_modules/merge-descriptors/.npmignore new file mode 100755 index 0000000..f62e605 --- /dev/null +++ b/node_modules/express/node_modules/merge-descriptors/.npmignore @@ -0,0 +1,59 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store* +ehthumbs.db +Icon? +Thumbs.db + +# Node.js # +########### +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +node_modules +npm-debug.log + +# Components # +############## + +/build +/components +/vendors \ No newline at end of file diff --git a/node_modules/express/node_modules/merge-descriptors/README.md b/node_modules/express/node_modules/merge-descriptors/README.md new file mode 100755 index 0000000..50cf50c --- /dev/null +++ b/node_modules/express/node_modules/merge-descriptors/README.md @@ -0,0 +1,49 @@ +# Merge Descriptors [![Build Status](https://travis-ci.org/component/merge-descriptors.png)](https://travis-ci.org/component/merge-descriptors) + +Merge objects using descriptors. + +```js +var thing = { + get name() { + return 'jon' + } +} + +var animal = { + +} + +merge(animal, thing) + +animal.name === 'jon' +``` + +## API + +### merge(destination, source) + +Overwrites `destination`'s descriptors with `source`'s. + +## License + +The MIT License (MIT) + +Copyright (c) 2013 Jonathan Ong me@jongleberry.com + +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. \ No newline at end of file diff --git a/node_modules/express/node_modules/merge-descriptors/component.json b/node_modules/express/node_modules/merge-descriptors/component.json new file mode 100755 index 0000000..7653906 --- /dev/null +++ b/node_modules/express/node_modules/merge-descriptors/component.json @@ -0,0 +1,10 @@ +{ + "name": "merge-descriptors", + "description": "Merge objects using descriptors", + "version": "0.0.2", + "scripts": [ + "index.js" + ], + "repo": "component/merge-descriptors", + "license": "MIT" +} \ No newline at end of file diff --git a/node_modules/express/node_modules/merge-descriptors/index.js b/node_modules/express/node_modules/merge-descriptors/index.js new file mode 100755 index 0000000..e4e2379 --- /dev/null +++ b/node_modules/express/node_modules/merge-descriptors/index.js @@ -0,0 +1,8 @@ +module.exports = function (dest, src) { + Object.getOwnPropertyNames(src).forEach(function (name) { + var descriptor = Object.getOwnPropertyDescriptor(src, name) + Object.defineProperty(dest, name, descriptor) + }) + + return dest +} \ No newline at end of file diff --git a/node_modules/express/node_modules/merge-descriptors/package.json b/node_modules/express/node_modules/merge-descriptors/package.json new file mode 100755 index 0000000..227a635 --- /dev/null +++ b/node_modules/express/node_modules/merge-descriptors/package.json @@ -0,0 +1,29 @@ +{ + "name": "merge-descriptors", + "description": "Merge objects using descriptors", + "version": "0.0.2", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/component/merge-descriptors.git" + }, + "bugs": { + "url": "https://github.com/component/merge-descriptors/issues" + }, + "scripts": { + "test": "make test;" + }, + "readme": "# Merge Descriptors [![Build Status](https://travis-ci.org/component/merge-descriptors.png)](https://travis-ci.org/component/merge-descriptors)\n\nMerge objects using descriptors.\n\n```js\nvar thing = {\n get name() {\n return 'jon'\n }\n}\n\nvar animal = {\n\n}\n\nmerge(animal, thing)\n\nanimal.name === 'jon'\n```\n\n## API\n\n### merge(destination, source)\n\nOverwrites `destination`'s descriptors with `source`'s.\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.", + "readmeFilename": "README.md", + "_id": "merge-descriptors@0.0.2", + "dist": { + "shasum": "64fe67a0481be3b6e66d4e03171af8da8e01d444" + }, + "_from": "merge-descriptors@0.0.2", + "_resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz" +} diff --git a/node_modules/express/node_modules/methods/.npmignore b/node_modules/express/node_modules/methods/.npmignore new file mode 100755 index 0000000..c2658d7 --- /dev/null +++ b/node_modules/express/node_modules/methods/.npmignore @@ -0,0 +1 @@ +node_modules/ diff --git a/node_modules/express/node_modules/methods/History.md b/node_modules/express/node_modules/methods/History.md new file mode 100755 index 0000000..12ab8c3 --- /dev/null +++ b/node_modules/express/node_modules/methods/History.md @@ -0,0 +1,15 @@ + +1.0.1 / 2014-06-02 +================== + + * fix index.js to work with harmony transform + +1.0.0 / 2014-05-08 +================== + + * add PURGE. Closes #9 + +0.1.0 / 2013-10-28 +================== + + * add http.METHODS support diff --git a/node_modules/express/node_modules/methods/LICENSE b/node_modules/express/node_modules/methods/LICENSE new file mode 100755 index 0000000..8bce401 --- /dev/null +++ b/node_modules/express/node_modules/methods/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2013-2014 TJ Holowaychuk + +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/node_modules/express/node_modules/methods/Readme.md b/node_modules/express/node_modules/methods/Readme.md new file mode 100755 index 0000000..ac0658e --- /dev/null +++ b/node_modules/express/node_modules/methods/Readme.md @@ -0,0 +1,4 @@ + +# Methods + + HTTP verbs that node core's parser supports. diff --git a/node_modules/express/node_modules/methods/index.js b/node_modules/express/node_modules/methods/index.js new file mode 100755 index 0000000..e3c5c0e --- /dev/null +++ b/node_modules/express/node_modules/methods/index.js @@ -0,0 +1,40 @@ + +var http = require('http'); + +if (http.METHODS) { + + module.exports = http.METHODS.map(function(method){ + return method.toLowerCase(); + }); + +} else { + + module.exports = [ + 'get', + 'post', + 'put', + 'head', + 'delete', + 'options', + 'trace', + 'copy', + 'lock', + 'mkcol', + 'move', + 'purge', + 'propfind', + 'proppatch', + 'unlock', + 'report', + 'mkactivity', + 'checkout', + 'merge', + 'm-search', + 'notify', + 'subscribe', + 'unsubscribe', + 'patch', + 'search' + ]; + +} diff --git a/node_modules/express/node_modules/methods/package.json b/node_modules/express/node_modules/methods/package.json new file mode 100755 index 0000000..e6b9b0d --- /dev/null +++ b/node_modules/express/node_modules/methods/package.json @@ -0,0 +1,31 @@ +{ + "name": "methods", + "version": "1.0.1", + "description": "HTTP methods that node supports", + "main": "index.js", + "scripts": { + "test": "./node_modules/mocha/bin/mocha" + }, + "keywords": [ + "http", + "methods" + ], + "author": { + "name": "TJ Holowaychuk" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/node-methods.git" + }, + "devDependencies": { + "mocha": "1.17.x" + }, + "readme": "\n# Methods\n\n HTTP verbs that node core's parser supports.\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/node-methods/issues" + }, + "_id": "methods@1.0.1", + "_from": "methods@1.0.1" +} diff --git a/node_modules/express/node_modules/methods/test/methods.js b/node_modules/express/node_modules/methods/test/methods.js new file mode 100755 index 0000000..527beab --- /dev/null +++ b/node_modules/express/node_modules/methods/test/methods.js @@ -0,0 +1,33 @@ +var http = require('http'); +var assert = require('assert'); +var methods = require('..'); + +describe('methods', function() { + + if (http.METHODS) { + + it('is a lowercased http.METHODS', function() { + var lowercased = http.METHODS.map(function(method) { + return method.toLowerCase(); + }); + assert.deepEqual(lowercased, methods); + }); + + } else { + + it('contains GET, POST, PUT, and DELETE', function() { + assert.notEqual(methods.indexOf('get'), -1); + assert.notEqual(methods.indexOf('post'), -1); + assert.notEqual(methods.indexOf('put'), -1); + assert.notEqual(methods.indexOf('delete'), -1); + }); + + it('is all lowercase', function() { + for (var i = 0; i < methods.length; i ++) { + assert(methods[i], methods[i].toLowerCase(), methods[i] + " isn't all lowercase"); + } + }); + + } + +}); diff --git a/node_modules/express/node_modules/parseurl/.npmignore b/node_modules/express/node_modules/parseurl/.npmignore new file mode 100755 index 0000000..b906d96 --- /dev/null +++ b/node_modules/express/node_modules/parseurl/.npmignore @@ -0,0 +1,59 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store* +# Icon? +ehthumbs.db +Thumbs.db + +# Node.js # +########### +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +node_modules +npm-debug.log + +# Components # +############## + +/build +/components +/public \ No newline at end of file diff --git a/node_modules/express/node_modules/parseurl/README.md b/node_modules/express/node_modules/parseurl/README.md new file mode 100755 index 0000000..6d043c9 --- /dev/null +++ b/node_modules/express/node_modules/parseurl/README.md @@ -0,0 +1,34 @@ +# parseurl + +Parse a URL with memoization. + +## API + +### var pathname = parseurl(req) + +`pathname` can then be passed to a router or something. + +## LICENSE + +(The MIT License) + +Copyright (c) 2014 Jonathan Ong + +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. \ No newline at end of file diff --git a/node_modules/express/node_modules/parseurl/index.js b/node_modules/express/node_modules/parseurl/index.js new file mode 100755 index 0000000..582c7de --- /dev/null +++ b/node_modules/express/node_modules/parseurl/index.js @@ -0,0 +1,26 @@ + +var parse = require('url').parse; + +/** + * Parse the `req` url with memoization. + * + * @param {ServerRequest} req + * @return {Object} + * @api private + */ + +module.exports = function parseUrl(req){ + var parsed = req._parsedUrl; + if (parsed && parsed.href == req.url) { + return parsed; + } else { + parsed = parse(req.url); + + if (parsed.auth && !parsed.protocol && ~parsed.href.indexOf('//')) { + // This parses pathnames, and a strange pathname like //r@e should work + parsed = parse(req.url.replace(/@/g, '%40')); + } + + return req._parsedUrl = parsed; + } +}; diff --git a/node_modules/express/node_modules/parseurl/package.json b/node_modules/express/node_modules/parseurl/package.json new file mode 100755 index 0000000..2ee408a --- /dev/null +++ b/node_modules/express/node_modules/parseurl/package.json @@ -0,0 +1,23 @@ +{ + "name": "parseurl", + "description": "parse a url with memoization", + "version": "1.0.1", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "repository": { + "type": "git", + "url": "https://github.com/expressjs/parseurl.git" + }, + "bugs": { + "url": "https://github.com/expressjs/parseurl/issues", + "email": "me@jongleberry.com" + }, + "license": "MIT", + "readme": "# parseurl\n\nParse a URL with memoization.\n\n## API\n\n### var pathname = parseurl(req)\n\n`pathname` can then be passed to a router or something.\n\n## LICENSE\n\n(The MIT License)\n\nCopyright (c) 2014 Jonathan Ong \n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", + "readmeFilename": "README.md", + "_id": "parseurl@1.0.1", + "_from": "parseurl@1.0.1" +} diff --git a/node_modules/express/node_modules/path-to-regexp/.npmignore b/node_modules/express/node_modules/path-to-regexp/.npmignore new file mode 100755 index 0000000..ba2a97b --- /dev/null +++ b/node_modules/express/node_modules/path-to-regexp/.npmignore @@ -0,0 +1,2 @@ +node_modules +coverage diff --git a/node_modules/express/node_modules/path-to-regexp/History.md b/node_modules/express/node_modules/path-to-regexp/History.md new file mode 100755 index 0000000..68aedb6 --- /dev/null +++ b/node_modules/express/node_modules/path-to-regexp/History.md @@ -0,0 +1,11 @@ + +0.1.0 / 2014-03-06 +================== + + * add options.end + +0.0.2 / 2013-02-10 +================== + + * Update to match current express + * add .license property to component.json diff --git a/node_modules/express/node_modules/path-to-regexp/Readme.md b/node_modules/express/node_modules/path-to-regexp/Readme.md new file mode 100755 index 0000000..9199e38 --- /dev/null +++ b/node_modules/express/node_modules/path-to-regexp/Readme.md @@ -0,0 +1,33 @@ + +# Path-to-RegExp + + Turn an Express-style path string such as `/user/:name` into a regular expression. + +## Usage + +```javascript +var pathToRegexp = require('path-to-regexp'); +``` +### pathToRegexp(path, keys, options) + + - **path** A string in the express format, an array of such strings, or a regular expression + - **keys** An array to be populated with the keys present in the url. Once the function completes, this will be an array of strings. + - **options** + - **options.sensitive** Defaults to false, set this to true to make routes case sensitive + - **options.strict** Defaults to false, set this to true to make the trailing slash matter. + - **options.end** Defaults to true, set this to false to only match the prefix of the URL. + +```javascript +var keys = []; +var exp = pathToRegexp('/foo/:bar', keys); +//keys = ['bar'] +//exp = /^\/foo\/(?:([^\/]+?))\/?$/i +``` + +## Live Demo + +You can see a live demo of this library in use at [express-route-tester](http://forbeslindesay.github.com/express-route-tester/). + +## License + + MIT \ No newline at end of file diff --git a/node_modules/express/node_modules/path-to-regexp/component.json b/node_modules/express/node_modules/path-to-regexp/component.json new file mode 100755 index 0000000..90f836c --- /dev/null +++ b/node_modules/express/node_modules/path-to-regexp/component.json @@ -0,0 +1,15 @@ +{ + "name": "path-to-regexp", + "description": "Express style path to RegExp utility", + "version": "0.1.0", + "keywords": [ + "express", + "regexp", + "route", + "routing" + ], + "scripts": [ + "index.js" + ], + "license": "MIT" +} diff --git a/node_modules/express/node_modules/path-to-regexp/index.js b/node_modules/express/node_modules/path-to-regexp/index.js new file mode 100755 index 0000000..11c32bf --- /dev/null +++ b/node_modules/express/node_modules/path-to-regexp/index.js @@ -0,0 +1,56 @@ +/** + * Expose `pathtoRegexp`. + */ + +module.exports = pathtoRegexp; + +/** + * Normalize the given path string, + * returning a regular expression. + * + * An empty array should be passed, + * which will contain the placeholder + * key names. For example "/user/:id" will + * then contain ["id"]. + * + * @param {String|RegExp|Array} path + * @param {Array} keys + * @param {Object} options + * @return {RegExp} + * @api private + */ + +function pathtoRegexp(path, keys, options) { + options = options || {}; + var sensitive = options.sensitive; + var strict = options.strict; + var end = options.end !== false; + keys = keys || []; + + if (path instanceof RegExp) return path; + if (path instanceof Array) path = '(' + path.join('|') + ')'; + + path = path + .concat(strict ? '' : '/?') + .replace(/\/\(/g, '/(?:') + .replace(/([\/\.])/g, '\\$1') + .replace(/(\\\/)?(\\\.)?:(\w+)(\(.*?\))?(\*)?(\?)?/g, function (match, slash, format, key, capture, star, optional) { + slash = slash || ''; + format = format || ''; + capture = capture || '([^/' + format + ']+?)'; + optional = optional || ''; + + keys.push({ name: key, optional: !!optional }); + + return '' + + (optional ? '' : slash) + + '(?:' + + format + (optional ? slash : '') + capture + + (star ? '((?:[\\/' + format + '].+?)?)' : '') + + ')' + + optional; + }) + .replace(/\*/g, '(.*)'); + + return new RegExp('^' + path + (end ? '$' : '(?=\/|$)'), sensitive ? '' : 'i'); +}; diff --git a/node_modules/express/node_modules/path-to-regexp/package.json b/node_modules/express/node_modules/path-to-regexp/package.json new file mode 100755 index 0000000..55d81fc --- /dev/null +++ b/node_modules/express/node_modules/path-to-regexp/package.json @@ -0,0 +1,36 @@ +{ + "name": "path-to-regexp", + "description": "Express style path to RegExp utility", + "version": "0.1.2", + "scripts": { + "test": "istanbul cover _mocha -- -R spec" + }, + "keywords": [ + "express", + "regexp" + ], + "component": { + "scripts": { + "path-to-regexp": "index.js" + } + }, + "repository": { + "type": "git", + "url": "https://github.com/component/path-to-regexp.git" + }, + "devDependencies": { + "mocha": "^1.17.1", + "istanbul": "^0.2.6" + }, + "readme": "\n# Path-to-RegExp\n\n Turn an Express-style path string such as `/user/:name` into a regular expression.\n\n## Usage\n\n```javascript\nvar pathToRegexp = require('path-to-regexp');\n```\n### pathToRegexp(path, keys, options)\n\n - **path** A string in the express format, an array of such strings, or a regular expression\n - **keys** An array to be populated with the keys present in the url. Once the function completes, this will be an array of strings.\n - **options**\n - **options.sensitive** Defaults to false, set this to true to make routes case sensitive\n - **options.strict** Defaults to false, set this to true to make the trailing slash matter.\n - **options.end** Defaults to true, set this to false to only match the prefix of the URL.\n\n```javascript\nvar keys = [];\nvar exp = pathToRegexp('/foo/:bar', keys);\n//keys = ['bar']\n//exp = /^\\/foo\\/(?:([^\\/]+?))\\/?$/i\n```\n\n## Live Demo\n\nYou can see a live demo of this library in use at [express-route-tester](http://forbeslindesay.github.com/express-route-tester/).\n\n## License\n\n MIT", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/component/path-to-regexp/issues" + }, + "_id": "path-to-regexp@0.1.2", + "dist": { + "shasum": "0baded381925a3a192624b76d23842a90948c281" + }, + "_from": "path-to-regexp@0.1.2", + "_resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.2.tgz" +} diff --git a/node_modules/express/node_modules/path-to-regexp/test.js b/node_modules/express/node_modules/path-to-regexp/test.js new file mode 100755 index 0000000..bdce042 --- /dev/null +++ b/node_modules/express/node_modules/path-to-regexp/test.js @@ -0,0 +1,510 @@ +var pathToRegExp = require('./'); +var assert = require('assert'); + +describe('path-to-regexp', function () { + describe('strings', function () { + it('should match simple paths', function () { + var params = []; + var m = pathToRegExp('/test', params).exec('/test'); + + assert.equal(params.length, 0); + + assert.equal(m.length, 1); + assert.equal(m[0], '/test'); + }); + + it('should match express format params', function () { + var params = []; + var m = pathToRegExp('/:test', params).exec('/pathname'); + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + assert.equal(m.length, 2); + assert.equal(m[0], '/pathname'); + assert.equal(m[1], 'pathname'); + }); + + it('should do strict matches', function () { + var params = []; + var re = pathToRegExp('/:test', params, { strict: true }); + var m; + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + m = re.exec('/route'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/route'); + assert.equal(m[1], 'route'); + + m = re.exec('/route/'); + + assert.ok(!m); + }); + + it('should allow optional express format params', function () { + var params = []; + var re = pathToRegExp('/:test?', params); + var m; + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, true); + + m = re.exec('/route'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/route'); + assert.equal(m[1], 'route'); + + m = re.exec('/'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/'); + assert.equal(m[1], undefined); + }); + + it('should allow express format param regexps', function () { + var params = []; + var m = pathToRegExp('/:page(\\d+)', params).exec('/56'); + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'page'); + assert.equal(params[0].optional, false); + + assert.equal(m.length, 2); + assert.equal(m[0], '/56'); + assert.equal(m[1], '56'); + }); + + it('should match without a prefixed slash', function () { + var params = []; + var m = pathToRegExp(':test', params).exec('string'); + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + assert.equal(m.length, 2); + assert.equal(m[0], 'string'); + assert.equal(m[1], 'string'); + }); + + it('should not match format parts', function () { + var params = []; + var m = pathToRegExp('/:test.json', params).exec('/route.json'); + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + assert.equal(m.length, 2); + assert.equal(m[0], '/route.json'); + assert.equal(m[1], 'route'); + }); + + it('should match format parts', function () { + var params = []; + var re = pathToRegExp('/:test.:format', params); + var m; + + assert.equal(params.length, 2); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + assert.equal(params[1].name, 'format'); + assert.equal(params[1].optional, false); + + m = re.exec('/route.json'); + + assert.equal(m.length, 3); + assert.equal(m[0], '/route.json'); + assert.equal(m[1], 'route'); + assert.equal(m[2], 'json'); + + m = re.exec('/route'); + + assert.ok(!m); + }); + + it('should match route parts with a trailing format', function () { + var params = []; + var m = pathToRegExp('/:test.json', params).exec('/route.json'); + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + assert.equal(m.length, 2); + assert.equal(m[0], '/route.json'); + assert.equal(m[1], 'route'); + }); + + it('should match optional trailing routes', function () { + var params = []; + var m = pathToRegExp('/test*', params).exec('/test/route'); + + assert.equal(params.length, 0); + + assert.equal(m.length, 2); + assert.equal(m[0], '/test/route'); + assert.equal(m[1], '/route'); + }); + + it('should match optional trailing routes after a param', function () { + var params = []; + var re = pathToRegExp('/:test*', params); + var m; + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + m = re.exec('/test/route'); + + assert.equal(m.length, 3); + assert.equal(m[0], '/test/route'); + assert.equal(m[1], 'test'); + assert.equal(m[2], '/route'); + + m = re.exec('/testing'); + + assert.equal(m.length, 3); + assert.equal(m[0], '/testing'); + assert.equal(m[1], 'testing'); + assert.equal(m[2], ''); + }); + + it('should match optional trailing routes before a format', function () { + var params = []; + var re = pathToRegExp('/test*.json', params); + var m; + + assert.equal(params.length, 0); + + m = re.exec('/test.json'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/test.json'); + assert.equal(m[1], ''); + + m = re.exec('/testing.json'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/testing.json'); + assert.equal(m[1], 'ing'); + + m = re.exec('/test/route.json'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/test/route.json'); + assert.equal(m[1], '/route'); + }); + + it('should match optional trailing routes after a param and before a format', function () { + var params = []; + var re = pathToRegExp('/:test*.json', params); + var m; + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + m = re.exec('/testing.json'); + + assert.equal(m.length, 3); + assert.equal(m[0], '/testing.json'); + assert.equal(m[1], 'testing'); + assert.equal(m[2], ''); + + m = re.exec('/test/route.json'); + + assert.equal(m.length, 3); + assert.equal(m[0], '/test/route.json'); + assert.equal(m[1], 'test'); + assert.equal(m[2], '/route'); + + m = re.exec('.json'); + + assert.ok(!m); + }); + + it('should match optional trailing routes between a normal param and a format param', function () { + var params = []; + var re = pathToRegExp('/:test*.:format', params); + var m; + + assert.equal(params.length, 2); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + assert.equal(params[1].name, 'format'); + assert.equal(params[1].optional, false); + + m = re.exec('/testing.json'); + + assert.equal(m.length, 4); + assert.equal(m[0], '/testing.json'); + assert.equal(m[1], 'testing'); + assert.equal(m[2], ''); + assert.equal(m[3], 'json'); + + m = re.exec('/test/route.json'); + + assert.equal(m.length, 4); + assert.equal(m[0], '/test/route.json'); + assert.equal(m[1], 'test'); + assert.equal(m[2], '/route'); + assert.equal(m[3], 'json'); + + m = re.exec('/test'); + + assert.ok(!m); + + m = re.exec('.json'); + + assert.ok(!m); + }); + + it('should match optional trailing routes after a param and before an optional format param', function () { + var params = []; + var re = pathToRegExp('/:test*.:format?', params); + var m; + + assert.equal(params.length, 2); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + assert.equal(params[1].name, 'format'); + assert.equal(params[1].optional, true); + + m = re.exec('/testing.json'); + + assert.equal(m.length, 4); + assert.equal(m[0], '/testing.json'); + assert.equal(m[1], 'testing'); + assert.equal(m[2], ''); + assert.equal(m[3], 'json'); + + m = re.exec('/test/route.json'); + + assert.equal(m.length, 4); + assert.equal(m[0], '/test/route.json'); + assert.equal(m[1], 'test'); + assert.equal(m[2], '/route'); + assert.equal(m[3], 'json'); + + m = re.exec('/test'); + + assert.equal(m.length, 4); + assert.equal(m[0], '/test'); + assert.equal(m[1], 'test'); + assert.equal(m[2], ''); + assert.equal(m[3], undefined); + + m = re.exec('.json'); + + assert.ok(!m); + }); + + it('should match optional trailing routes inside optional express param', function () { + var params = []; + var re = pathToRegExp('/:test*?', params); + var m; + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, true); + + m = re.exec('/test/route'); + + assert.equal(m.length, 3); + assert.equal(m[0], '/test/route'); + assert.equal(m[1], 'test'); + assert.equal(m[2], '/route'); + + m = re.exec('/test'); + + assert.equal(m.length, 3); + assert.equal(m[0], '/test'); + assert.equal(m[1], 'test'); + assert.equal(m[2], ''); + + m = re.exec('/'); + + assert.equal(m.length, 3); + assert.equal(m[0], '/'); + assert.equal(m[1], undefined); + assert.equal(m[2], undefined); + }); + + it('should do case insensitive matches', function () { + var m = pathToRegExp('/test').exec('/TEST'); + + assert.equal(m[0], '/TEST'); + }); + + it('should do case sensitive matches', function () { + var re = pathToRegExp('/test', null, { sensitive: true }); + var m; + + m = re.exec('/test'); + + assert.equal(m.length, 1); + assert.equal(m[0], '/test'); + + m = re.exec('/TEST'); + + assert.ok(!m); + }); + + it('should do non-ending matches', function () { + var params = []; + var m = pathToRegExp('/:test', params, { end: false }).exec('/test/route'); + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + assert.equal(m.length, 2); + assert.equal(m[0], '/test'); + assert.equal(m[1], 'test'); + }); + + it('should match trailing slashes in non-ending non-strict mode', function () { + var params = []; + var re = pathToRegExp('/:test', params, { end: false }); + var m; + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + m = re.exec('/test/'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/test/'); + assert.equal(m[1], 'test'); + }); + + it('should not match trailing slashes in non-ending strict mode', function () { + var params = []; + var re = pathToRegExp('/:test', params, { end: false, strict: true }); + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + m = re.exec('/test/'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/test'); + assert.equal(m[1], 'test'); + }); + + it('should match text after an express param', function () { + var params = []; + var re = pathToRegExp('/(:test)route', params); + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + m = re.exec('/route'); + + assert.ok(!m); + + m = re.exec('/testroute'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/testroute'); + assert.equal(m[1], 'test'); + + m = re.exec('testroute'); + + assert.ok(!m); + }); + + it('should match text after an optional express param', function () { + var params = []; + var re = pathToRegExp('/(:test?)route', params); + var m; + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, true); + + m = re.exec('/route'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/route'); + assert.equal(m[1], undefined); + + m = re.exec('/testroute'); + + assert.equal(m.length, 2); + assert.equal(m[0], '/testroute'); + assert.equal(m[1], 'test'); + + m = re.exec('route'); + + assert.ok(!m); + }); + + it('should match optional formats', function () { + var params = []; + var re = pathToRegExp('/:test.:format?', params); + var m; + + assert.equal(params.length, 2); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + assert.equal(params[1].name, 'format'); + assert.equal(params[1].optional, true); + + m = re.exec('/route'); + + assert.equal(m.length, 3); + assert.equal(m[0], '/route'); + assert.equal(m[1], 'route'); + assert.equal(m[2], undefined); + + m = re.exec('/route.json'); + + assert.equal(m.length, 3); + assert.equal(m[0], '/route.json'); + assert.equal(m[1], 'route'); + assert.equal(m[2], 'json'); + }); + + it('should match full paths with format by default', function () { + var params = []; + var m = pathToRegExp('/:test', params).exec('/test.json'); + + assert.equal(params.length, 1); + assert.equal(params[0].name, 'test'); + assert.equal(params[0].optional, false); + + assert.equal(m.length, 2); + assert.equal(m[0], '/test.json'); + assert.equal(m[1], 'test.json'); + }); + }); + + describe('regexps', function () { + it('should return the regexp', function () { + assert.deepEqual(pathToRegExp(/.*/), /.*/); + }); + }); + + describe('arrays', function () { + it('should join arrays parts', function () { + var re = pathToRegExp(['/test', '/route']); + + assert.ok(re.exec('/test')); + assert.ok(re.exec('/route')); + assert.ok(!re.exec('/else')); + }); + }); +}); diff --git a/node_modules/express/node_modules/proxy-addr/.npmignore b/node_modules/express/node_modules/proxy-addr/.npmignore new file mode 100755 index 0000000..85c82a5 --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/.npmignore @@ -0,0 +1,4 @@ +benchmark/ +coverage/ +test/ +.travis.yml diff --git a/node_modules/express/node_modules/proxy-addr/History.md b/node_modules/express/node_modules/proxy-addr/History.md new file mode 100755 index 0000000..61a0d50 --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/History.md @@ -0,0 +1,27 @@ +1.0.1 / 2014-06-03 +================== + + * Fix links in npm package + +1.0.0 / 2014-05-08 +================== + + * Add `trust` argument to determine proxy trust on + * Accepts custom function + * Accepts IPv4/IPv6 address(es) + * Accepts subnets + * Accepts pre-defined names + * Add optional `trust` argument to `proxyaddr.all` to + stop at first untrusted + * Add `proxyaddr.compile` to pre-compile `trust` function + to make subsequent calls faster + +0.0.1 / 2014-05-04 +================== + + * Fix bad npm publish + +0.0.0 / 2014-05-04 +================== + + * Initial release diff --git a/node_modules/express/node_modules/proxy-addr/LICENSE b/node_modules/express/node_modules/proxy-addr/LICENSE new file mode 100755 index 0000000..b7dce6c --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014 Douglas Christopher Wilson + +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/node_modules/express/node_modules/proxy-addr/README.md b/node_modules/express/node_modules/proxy-addr/README.md new file mode 100755 index 0000000..4fe57d3 --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/README.md @@ -0,0 +1,124 @@ +# proxy-addr + +[![NPM version](https://badge.fury.io/js/proxy-addr.svg)](http://badge.fury.io/js/proxy-addr) +[![Build Status](https://travis-ci.org/expressjs/proxy-addr.svg?branch=master)](https://travis-ci.org/expressjs/proxy-addr) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/proxy-addr.svg?branch=master)](https://coveralls.io/r/expressjs/proxy-addr) + +Determine address of proxied request + +## Install + +```sh +$ npm install proxy-addr +``` + +## API + +```js +var proxyaddr = require('proxy-addr') +``` + +### proxyaddr(req, trust) + +Return the address of the request, using the given `trust` parameter. + +The `trust` argument is a function that returns `true` if you trust +the address, `false` if you don't. The closest untrusted address is +returned. + +```js +proxyaddr(req, function(addr){ return addr === '127.0.0.1' }) +proxyaddr(req, function(addr, i){ return i < 1 }) +``` + +The `trust` arugment may also be a single IP address string or an +array of trusted addresses, as plain IP addresses, CIDR-formatted +strings, or IP/netmask strings. + +```js +proxyaddr(req, '127.0.0.1') +proxyaddr(req, ['127.0.0.0/8', '10.0.0.0/8']) +proxyaddr(req, ['127.0.0.0/255.0.0.0', '192.168.0.0/255.255.0.0']) +``` + +This module also supports IPv6. Your IPv6 addresses will be normalized +automatically (i.e. `fe80::00ed:1` equals `fe80:0:0:0:0:0:ed:1`). + +```js +proxyaddr(req, '::1') +proxyaddr(req, ['::1/128', 'fe80::/10']) +proxyaddr(req, ['fe80::/ffc0::']) +``` + +This module will automatically work with IPv4-mapped IPv6 addresses +as well to support node.js in IPv6-only mode. This means that you do +not have to specify both `::ffff:a00:1` and `10.0.0.1`. + +As a convenience, this module also takes certain pre-defined names +in addition to IP addresses, which expand into IP addresses: + +```js +proxyaddr(req, 'loopback') +proxyaddr(req, ['loopback', 'fc00:ac:1ab5:fff::1/64']) +``` + + * `loopback`: IPv4 and IPv6 loopback addresses (like `::1` and + `127.0.0.1`). + * `linklocal`: IPv4 and IPv6 link-local addresses (like + `fe80::1:1:1:1` and `169.254.0.1`). + * `uniquelocal`: IPv4 private addresses and IPv6 unique-local + addresses (like `fc00:ac:1ab5:fff::1` and `192.168.0.1`). + +When `trust` is specified as a function, it will be called for each +address to determine if it is a trusted address. The function is +given two arguments: `addr` and `i`, where `addr` is a string of +the address to check and `i` is a number that represents the distance +from the socket address. + +### proxyaddr.all(req, [trust]) + +Return all the addresses of the request, optionally stopping at the +first untrusted. This array is ordered from closest to furthest +(i.e. `arr[0] === req.connection.remoteAddress`). + +```js +proxyaddr.all(req) +``` + +The optional `trust` argument takes the same arguments as `trust` +does in `proxyaddr(req, trust)`. + +```js +proxyaddr.all(req, 'loopback') +``` + +### proxyaddr.compile(val) + +Compiles argument `val` into a `trust` function. This function takes +the same arguments as `trust` does in `proxyaddr(req, trust)` and +returns a function suitable for `proxyaddr(req, trust)`. + +```js +var trust = proxyaddr.compile('localhost') +var addr = proxyaddr(req, trust) +``` + +This function is meant to be optimized for use against every request. +It is recommend to compile a trust function up-front for the trusted +configuration and pass that to `proxyaddr(req, trust)` for each request. + +## Testing + +```sh +$ npm test +``` + +## Benchmarks + +```sh +$ npm run-script bench +``` + +## License + +[MIT](LICENSE) diff --git a/node_modules/express/node_modules/proxy-addr/index.js b/node_modules/express/node_modules/proxy-addr/index.js new file mode 100755 index 0000000..75ee432 --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/index.js @@ -0,0 +1,353 @@ +/*! + * proxy-addr + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = proxyaddr; +module.exports.all = alladdrs; +module.exports.compile = compile; + +/** + * Module dependencies. + */ + +var ipaddr = require('ipaddr.js'); + +/** + * Variables. + */ + +var digitre = /^[0-9]+$/; +var isip = ipaddr.isValid; +var parseip = ipaddr.parse; + +/** + * Pre-defined IP ranges. + */ + +var ipranges = { + linklocal: ['169.254.0.0/16', 'fe80::/10'], + loopback: ['127.0.0.1/8', '::1/128'], + uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7'] +}; + +/** + * Get all addresses in the request, optionally stopping + * at the first untrusted. + * + * @param {Object} request + * @param {Function|Array|String} [trust] + * @api public + */ + +function alladdrs(req, trust) { + if (!req) { + throw new TypeError('req argument is required'); + } + + var proxyAddrs = (req.headers['x-forwarded-for'] || '') + .split(/ *, */) + .filter(Boolean) + .reverse(); + var socketAddr = req.connection.remoteAddress; + var addrs = [socketAddr].concat(proxyAddrs); + + if (!trust) { + // Return all addresses + return addrs; + } + + if (typeof trust !== 'function') { + trust = compile(trust); + } + + for (var i = 0; i < addrs.length - 1; i++) { + if (trust(addrs[i], i)) continue; + + addrs.length = i + 1; + } + + return addrs; +} + +/** + * Compile argument into trust function. + * + * @param {Array|String} val + * @api private + */ + +function compile(val) { + if (!val) { + throw new TypeError('argument is required'); + } + + var trust = typeof val === 'string' + ? [val] + : val; + + if (!Array.isArray(trust)) { + throw new TypeError('unsupported trust argument'); + } + + for (var i = 0; i < trust.length; i++) { + val = trust[i]; + + if (!ipranges.hasOwnProperty(val)) { + continue; + } + + // Splice in pre-defined range + val = ipranges[val]; + trust.splice.apply(trust, [i, 1].concat(val)); + i += val.length - 1; + } + + return compileTrust(compileRangeSubnets(trust)); +} + +/** + * Compile `arr` elements into range subnets. + * + * @param {Array} arr + * @api private + */ + +function compileRangeSubnets(arr) { + var rangeSubnets = new Array(arr.length); + + for (var i = 0; i < arr.length; i++) { + rangeSubnets[i] = parseipNotation(arr[i]); + } + + return rangeSubnets; +} + +/** + * Compile range subnet array into trust function. + * + * @param {Array} rangeSubnets + * @api private + */ + +function compileTrust(rangeSubnets) { + // Return optimized function based on length + var len = rangeSubnets.length; + return len === 0 + ? trustNone + : len === 1 + ? trustSingle(rangeSubnets[0]) + : trustMulti(rangeSubnets); +} + +/** + * Parse IP notation string into range subnet. + * + * @param {String} note + * @api private + */ + +function parseipNotation(note) { + var ip; + var kind; + var max; + var pos = note.lastIndexOf('/'); + var range; + + ip = pos !== -1 + ? note.substring(0, pos) + : note; + + if (!isip(ip)) { + throw new TypeError('invalid IP address: ' + ip); + } + + ip = parseip(ip); + + kind = ip.kind(); + max = kind === 'ipv4' ? 32 + : kind === 'ipv6' ? 128 + : 0; + + range = pos !== -1 + ? note.substring(pos + 1, note.length) + : max; + + if (typeof range !== 'number') { + range = digitre.test(range) + ? parseInt(range, 10) + : isip(range) + ? parseNetmask(range) + : 0; + } + + if (ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) { + // Store as IPv4 + ip = ip.toIPv4Address(); + range = range <= max + ? range - 96 + : range; + } + + if (range <= 0 || range > max) { + throw new TypeError('invalid range on address: ' + note); + } + + return [ip, range]; +} + +/** + * Parse netmask string into CIDR range. + * + * @param {String} note + * @api private + */ + +function parseNetmask(netmask) { + var ip = parseip(netmask); + var parts; + var size; + + switch (ip.kind()) { + case 'ipv4': + parts = ip.octets; + size = 8; + break; + case 'ipv6': + parts = ip.parts; + size = 16; + break; + default: + throw new TypeError('unknown netmask'); + } + + var max = Math.pow(2, size) - 1; + var part; + var range = 0; + + for (var i = 0; i < parts.length; i++) { + part = parts[i] & max; + + if (part === max) { + range += size; + continue; + } + + while (part) { + part = (part << 1) & max; + range += 1; + } + + break; + } + + return range; +} + +/** + * Determine address of proxied request. + * + * @param {Object} request + * @param {Function|Array|String} trust + * @api public + */ + +function proxyaddr(req, trust) { + if (!req) { + throw new TypeError('req argument is required'); + } + + if (!trust) { + throw new TypeError('trust argument is required'); + } + + var addrs = alladdrs(req, trust); + var addr = addrs[addrs.length - 1]; + + return addr; +} + +/** + * Static trust function to trust nothing. + * + * @api private + */ + +function trustNone() { + return false; +} + +/** + * Compile trust function for multiple subnets. + * + * @param {Array} subnets + * @api private + */ + +function trustMulti(subnets) { + return function trust(addr) { + if (!isip(addr)) return false; + + var ip = parseip(addr); + var ipv4; + var kind = ip.kind(); + var subnet; + var subnetip; + var subnetkind; + var trusted; + + for (var i = 0; i < subnets.length; i++) { + subnet = subnets[i]; + subnetip = subnet[0]; + subnetkind = subnetip.kind(); + subnetrange = subnet[1]; + trusted = ip; + + if (kind !== subnetkind) { + if (kind !== 'ipv6' || subnetkind !== 'ipv4' || !ip.isIPv4MappedAddress()) { + continue; + } + + // Store addr as IPv4 + ipv4 = ipv4 || ip.toIPv4Address(); + trusted = ipv4; + } + + if (trusted.match(subnetip, subnetrange)) return true; + } + + return false; + }; +} + +/** + * Compile trust function for single subnet. + * + * @param {Object} subnet + * @api private + */ + +function trustSingle(subnet) { + var subnetip = subnet[0]; + var subnetkind = subnetip.kind(); + var subnetisipv4 = subnetkind === 'ipv4'; + var subnetrange = subnet[1]; + + return function trust(addr) { + if (!isip(addr)) return false; + + var ip = parseip(addr); + var kind = ip.kind(); + + return kind === subnetkind + ? ip.match(subnetip, subnetrange) + : subnetisipv4 && kind === 'ipv6' && ip.isIPv4MappedAddress() + ? ip.toIPv4Address().match(subnetip, subnetrange) + : false; + }; +} diff --git a/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/.npmignore b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/.npmignore new file mode 100755 index 0000000..7a1537b --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/.npmignore @@ -0,0 +1,2 @@ +.idea +node_modules diff --git a/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/Cakefile b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/Cakefile new file mode 100755 index 0000000..7fd355a --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/Cakefile @@ -0,0 +1,18 @@ +fs = require 'fs' +CoffeeScript = require 'coffee-script' +nodeunit = require 'nodeunit' +UglifyJS = require 'uglify-js' + +task 'build', 'build the JavaScript files from CoffeeScript source', build = (cb) -> + source = fs.readFileSync 'src/ipaddr.coffee' + fs.writeFileSync 'lib/ipaddr.js', CoffeeScript.compile source.toString() + + invoke 'test' + invoke 'compress' + +task 'test', 'run the bundled tests', (cb) -> + nodeunit.reporters.default.run ['test'] + +task 'compress', 'uglify the resulting javascript', (cb) -> + result = UglifyJS.minify('lib/ipaddr.js') + fs.writeFileSync('ipaddr.min.js', result.code) diff --git a/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/LICENSE b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/LICENSE new file mode 100755 index 0000000..3493f0d --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2011 Peter Zotov + +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. \ No newline at end of file diff --git a/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/README.md b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/README.md new file mode 100755 index 0000000..a816672 --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/README.md @@ -0,0 +1,149 @@ +# ipaddr.js — an IPv6 and IPv4 address manipulation library + +ipaddr.js is a small (1.9K minified and gzipped) library for manipulating +IP addresses in JavaScript environments. It runs on both CommonJS runtimes +(e.g. [nodejs]) and in a web browser. + +ipaddr.js allows you to verify and parse string representation of an IP +address, match it against a CIDR range or range list, determine if it falls +into some reserved ranges (examples include loopback and private ranges), +and convert between IPv4 and IPv4-mapped IPv6 addresses. + +[nodejs]: http://nodejs.org + +## Installation + +`npm install ipaddr.js` + +## API + +ipaddr.js defines one object in the global scope: `ipaddr`. In CommonJS, +it is exported from the module: + +```js +var ipaddr = require('ipaddr.js'); +``` + +The API consists of several global methods and two classes: ipaddr.IPv6 and ipaddr.IPv4. + +### Global methods + +There are three global methods defined: `ipaddr.isValid`, `ipaddr.parse` and +`ipaddr.process`. All of them receive a string as a single parameter. + +The `ipaddr.isValid` method returns `true` if the address is a valid IPv4 or +IPv6 address, and `false` otherwise. It does not throw any exceptions. + +The `ipaddr.parse` method returns an object representing the IP address, +or throws an `Error` if the passed string is not a valid representation of an +IP address. + +The `ipaddr.process` method works just like the `ipaddr.parse` one, but it +automatically converts IPv4-mapped IPv6 addresses to their IPv4 couterparts +before returning. It is useful when you have a Node.js instance listening +on an IPv6 socket, and the `net.ivp6.bindv6only` sysctl parameter (or its +equivalent on non-Linux OS) is set to 0. In this case, you can accept IPv4 +connections on your IPv6-only socket, but the remote address will be mangled. +Use `ipaddr.process` method to automatically demangle it. + +### Object representation + +Parsing methods return an object which descends from `ipaddr.IPv6` or +`ipaddr.IPv4`. These objects share some properties, but most of them differ. + +#### Shared properties + +One can determine the type of address by calling `addr.kind()`. It will return +either `"ipv6"` or `"ipv4"`. + +An address can be converted back to its string representation with `addr.toString()`. +Note that this method: + * does not return the original string used to create the object (in fact, there is + no way of getting that string) + * returns a compact representation (when it is applicable) + +A `match(range, bits)` method can be used to check if the address falls into a +certain CIDR range. +Note that an address can be (obviously) matched only against an address of the same type. + +For example: + +```js +var addr = ipaddr.parse("2001:db8:1234::1"); +var range = ipaddr.parse("2001:db8::"); + +addr.match(range, 32); // => true +``` + +A `range()` method returns one of predefined names for several special ranges defined +by IP protocols. The exact names (and their respective CIDR ranges) can be looked up +in the source: [IPv6 ranges] and [IPv4 ranges]. Some common ones include `"unicast"` +(the default one) and `"reserved"`. + +You can match against your own range list by using +`ipaddr.subnetMatch(address, rangeList, defaultName)` method. It can work with both +IPv6 and IPv4 addresses, and accepts a name-to-subnet map as the range list. For example: + +```js +var rangeList = { + documentationOnly: [ ipaddr.parse('2001:db8::'), 32 ], + tunnelProviders: [ + [ ipaddr.parse('2001:470::'), 32 ], // he.net + [ ipaddr.parse('2001:5c0::'), 32 ] // freenet6 + ] +}; +ipaddr.subnetMatch(ipaddr.parse('2001:470:8:66::1'), rangeList, 'unknown'); // => "he.net" +``` + +The addresses can be converted to their byte representation with `toByteArray()`. +(Actually, JavaScript mostly does not know about byte buffers. They are emulated with +arrays of numbers, each in range of 0..255.) + +```js +var bytes = ipaddr.parse('2a00:1450:8007::68').toByteArray(); // ipv6.google.com +bytes // => [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, , 0x00, 0x68 ] +``` + +The `ipaddr.IPv4` and `ipaddr.IPv6` objects have some methods defined, too. All of them +have the same interface for both protocols, and are similar to global methods. + +`ipaddr.IPvX.isValid(string)` can be used to check if the string is a valid address +for particular protocol, and `ipaddr.IPvX.parse(string)` is the error-throwing parser. + +[IPv6 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L186 +[IPv4 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L71 + +#### IPv6 properties + +Sometimes you will want to convert IPv6 not to a compact string representation (with +the `::` substitution); the `toNormalizedString()` method will return an address where +all zeroes are explicit. + +For example: + +```js +var addr = ipaddr.parse("2001:0db8::0001"); +addr.toString(); // => "2001:db8::1" +addr.toNormalizedString(); // => "2001:db8:0:0:0:0:0:1" +``` + +The `isIPv4MappedAddress()` method will return `true` if this address is an IPv4-mapped +one, and `toIPv4Address()` will return an IPv4 object address. + +To access the underlying binary representation of the address, use `addr.parts`. + +```js +var addr = ipaddr.parse("2001:db8:10::1234:DEAD"); +addr.parts // => [0x2001, 0xdb8, 0x10, 0, 0, 0, 0x1234, 0xdead] +``` + +#### IPv4 properties + +`toIPv4MappedAddress()` will return a corresponding IPv4-mapped IPv6 address. + +To access the underlying representation of the address, use `addr.octets`. + +```js +var addr = ipaddr.parse("192.168.1.1"); +addr.octets // => [192, 168, 1, 1] +``` diff --git a/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/ipaddr.min.js b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/ipaddr.min.js new file mode 100755 index 0000000..528d48b --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/ipaddr.min.js @@ -0,0 +1 @@ +(function(){var t,r,n,e,i,o,a,s;r={},s=this,"undefined"!=typeof module&&null!==module&&module.exports?module.exports=r:s.ipaddr=r,a=function(t,r,n,e){var i,o;if(t.length!==r.length)throw new Error("ipaddr: cannot match CIDR for objects with different lengths");for(i=0;e>0;){if(o=n-e,0>o&&(o=0),t[i]>>o!==r[i]>>o)return!1;e-=n,i+=1}return!0},r.subnetMatch=function(t,r,n){var e,i,o,a,s;null==n&&(n="unicast");for(e in r)for(i=r[e],"[object Array]"!==toString.call(i[0])&&(i=[i]),a=0,s=i.length;s>a;a++)if(o=i[a],t.match.apply(t,o))return e;return n},r.IPv4=function(){function t(t){var r,n,e;if(4!==t.length)throw new Error("ipaddr: ipv4 octet count should be 4");for(n=0,e=t.length;e>n;n++)if(r=t[n],!(r>=0&&255>=r))throw new Error("ipaddr: ipv4 octet is a byte");this.octets=t}return t.prototype.kind=function(){return"ipv4"},t.prototype.toString=function(){return this.octets.join(".")},t.prototype.toByteArray=function(){return this.octets.slice(0)},t.prototype.match=function(t,r){if("ipv4"!==t.kind())throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one");return a(this.octets,t.octets,8,r)},t.prototype.SpecialRanges={broadcast:[[new t([255,255,255,255]),32]],multicast:[[new t([224,0,0,0]),4]],linkLocal:[[new t([169,254,0,0]),16]],loopback:[[new t([127,0,0,0]),8]],"private":[[new t([10,0,0,0]),8],[new t([172,16,0,0]),12],[new t([192,168,0,0]),16]],reserved:[[new t([192,0,0,0]),24],[new t([192,0,2,0]),24],[new t([192,88,99,0]),24],[new t([198,51,100,0]),24],[new t([203,0,113,0]),24],[new t([240,0,0,0]),4]]},t.prototype.range=function(){return r.subnetMatch(this,this.SpecialRanges)},t.prototype.toIPv4MappedAddress=function(){return r.IPv6.parse("::ffff:"+this.toString())},t}(),n="(0?\\d+|0x[a-f0-9]+)",e={fourOctet:new RegExp("^"+n+"\\."+n+"\\."+n+"\\."+n+"$","i"),longValue:new RegExp("^"+n+"$","i")},r.IPv4.parser=function(t){var r,n,i,o,a;return n=function(t){return"0"===t[0]&&"x"!==t[1]?parseInt(t,8):parseInt(t)},(r=t.match(e.fourOctet))?function(){var t,e,o,a;for(o=r.slice(1,6),a=[],t=0,e=o.length;e>t;t++)i=o[t],a.push(n(i));return a}():(r=t.match(e.longValue))?(a=n(r[1]),function(){var t,r;for(r=[],o=t=0;24>=t;o=t+=8)r.push(a>>o&255);return r}().reverse()):null},r.IPv6=function(){function t(t){var r,n,e;if(8!==t.length)throw new Error("ipaddr: ipv6 part count should be 8");for(n=0,e=t.length;e>n;n++)if(r=t[n],!(r>=0&&65535>=r))throw new Error("ipaddr: ipv6 part should fit to two octets");this.parts=t}return t.prototype.kind=function(){return"ipv6"},t.prototype.toString=function(){var t,r,n,e,i,o,a;for(i=function(){var t,n,e,i;for(e=this.parts,i=[],t=0,n=e.length;n>t;t++)r=e[t],i.push(r.toString(16));return i}.call(this),t=[],n=function(r){return t.push(r)},e=0,o=0,a=i.length;a>o;o++)switch(r=i[o],e){case 0:"0"===r?n(""):n(r),e=1;break;case 1:"0"===r?e=2:n(r);break;case 2:"0"!==r&&(n(""),n(r),e=3);break;case 3:n(r)}return 2===e&&(n(""),n("")),t.join(":")},t.prototype.toByteArray=function(){var t,r,n,e,i;for(t=[],i=this.parts,n=0,e=i.length;e>n;n++)r=i[n],t.push(r>>8),t.push(255&r);return t},t.prototype.toNormalizedString=function(){var t;return function(){var r,n,e,i;for(e=this.parts,i=[],r=0,n=e.length;n>r;r++)t=e[r],i.push(t.toString(16));return i}.call(this).join(":")},t.prototype.match=function(t,r){if("ipv6"!==t.kind())throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one");return a(this.parts,t.parts,16,r)},t.prototype.SpecialRanges={unspecified:[new t([0,0,0,0,0,0,0,0]),128],linkLocal:[new t([65152,0,0,0,0,0,0,0]),10],multicast:[new t([65280,0,0,0,0,0,0,0]),8],loopback:[new t([0,0,0,0,0,0,0,1]),128],uniqueLocal:[new t([64512,0,0,0,0,0,0,0]),7],ipv4Mapped:[new t([0,0,0,0,0,65535,0,0]),96],rfc6145:[new t([0,0,0,0,65535,0,0,0]),96],rfc6052:[new t([100,65435,0,0,0,0,0,0]),96],"6to4":[new t([8194,0,0,0,0,0,0,0]),16],teredo:[new t([8193,0,0,0,0,0,0,0]),32],reserved:[[new t([8193,3512,0,0,0,0,0,0]),32]]},t.prototype.range=function(){return r.subnetMatch(this,this.SpecialRanges)},t.prototype.isIPv4MappedAddress=function(){return"ipv4Mapped"===this.range()},t.prototype.toIPv4Address=function(){var t,n,e;if(!this.isIPv4MappedAddress())throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4");return e=this.parts.slice(-2),t=e[0],n=e[1],new r.IPv4([t>>8,255&t,n>>8,255&n])},t}(),i="(?:[0-9a-f]+::?)+",o={"native":new RegExp("^(::)?("+i+")?([0-9a-f]+)?(::)?$","i"),transitional:new RegExp("^((?:"+i+")|(?:::)(?:"+i+")?)"+(""+n+"\\."+n+"\\."+n+"\\."+n+"$"),"i")},t=function(t,r){var n,e,i,o,a;if(t.indexOf("::")!==t.lastIndexOf("::"))return null;for(n=0,e=-1;(e=t.indexOf(":",e+1))>=0;)n++;for(":"===t[0]&&n--,":"===t[t.length-1]&&n--,a=r-n,o=":";a--;)o+="0:";return t=t.replace("::",o),":"===t[0]&&(t=t.slice(1)),":"===t[t.length-1]&&(t=t.slice(0,-1)),function(){var r,n,e,o;for(e=t.split(":"),o=[],r=0,n=e.length;n>r;r++)i=e[r],o.push(parseInt(i,16));return o}()},r.IPv6.parser=function(r){var n,e;return r.match(o["native"])?t(r,8):(n=r.match(o.transitional))&&(e=t(n[1].slice(0,-1),6))?(e.push(parseInt(n[2])<<8|parseInt(n[3])),e.push(parseInt(n[4])<<8|parseInt(n[5])),e):null},r.IPv4.isIPv4=r.IPv6.isIPv6=function(t){return null!==this.parser(t)},r.IPv4.isValid=r.IPv6.isValid=function(t){var r;try{return new this(this.parser(t)),!0}catch(n){return r=n,!1}},r.IPv4.parse=r.IPv6.parse=function(t){var r;if(r=this.parser(t),null===r)throw new Error("ipaddr: string is not formatted like ip address");return new this(r)},r.isValid=function(t){return r.IPv6.isValid(t)||r.IPv4.isValid(t)},r.parse=function(t){if(r.IPv6.isIPv6(t))return r.IPv6.parse(t);if(r.IPv4.isIPv4(t))return r.IPv4.parse(t);throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format")},r.process=function(t){var r;return r=this.parse(t),"ipv6"===r.kind()&&r.isIPv4MappedAddress()?r.toIPv4Address():r}}).call(this); \ No newline at end of file diff --git a/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/lib/ipaddr.js b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/lib/ipaddr.js new file mode 100755 index 0000000..2319737 --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/lib/ipaddr.js @@ -0,0 +1,401 @@ +(function() { + var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root; + + ipaddr = {}; + + root = this; + + if ((typeof module !== "undefined" && module !== null) && module.exports) { + module.exports = ipaddr; + } else { + root['ipaddr'] = ipaddr; + } + + matchCIDR = function(first, second, partSize, cidrBits) { + var part, shift; + if (first.length !== second.length) { + throw new Error("ipaddr: cannot match CIDR for objects with different lengths"); + } + part = 0; + while (cidrBits > 0) { + shift = partSize - cidrBits; + if (shift < 0) { + shift = 0; + } + if (first[part] >> shift !== second[part] >> shift) { + return false; + } + cidrBits -= partSize; + part += 1; + } + return true; + }; + + ipaddr.subnetMatch = function(address, rangeList, defaultName) { + var rangeName, rangeSubnets, subnet, _i, _len; + if (defaultName == null) { + defaultName = 'unicast'; + } + for (rangeName in rangeList) { + rangeSubnets = rangeList[rangeName]; + if (toString.call(rangeSubnets[0]) !== '[object Array]') { + rangeSubnets = [rangeSubnets]; + } + for (_i = 0, _len = rangeSubnets.length; _i < _len; _i++) { + subnet = rangeSubnets[_i]; + if (address.match.apply(address, subnet)) { + return rangeName; + } + } + } + return defaultName; + }; + + ipaddr.IPv4 = (function() { + function IPv4(octets) { + var octet, _i, _len; + if (octets.length !== 4) { + throw new Error("ipaddr: ipv4 octet count should be 4"); + } + for (_i = 0, _len = octets.length; _i < _len; _i++) { + octet = octets[_i]; + if (!((0 <= octet && octet <= 255))) { + throw new Error("ipaddr: ipv4 octet is a byte"); + } + } + this.octets = octets; + } + + IPv4.prototype.kind = function() { + return 'ipv4'; + }; + + IPv4.prototype.toString = function() { + return this.octets.join("."); + }; + + IPv4.prototype.toByteArray = function() { + return this.octets.slice(0); + }; + + IPv4.prototype.match = function(other, cidrRange) { + if (other.kind() !== 'ipv4') { + throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one"); + } + return matchCIDR(this.octets, other.octets, 8, cidrRange); + }; + + IPv4.prototype.SpecialRanges = { + broadcast: [[new IPv4([255, 255, 255, 255]), 32]], + multicast: [[new IPv4([224, 0, 0, 0]), 4]], + linkLocal: [[new IPv4([169, 254, 0, 0]), 16]], + loopback: [[new IPv4([127, 0, 0, 0]), 8]], + "private": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]], + reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]] + }; + + IPv4.prototype.range = function() { + return ipaddr.subnetMatch(this, this.SpecialRanges); + }; + + IPv4.prototype.toIPv4MappedAddress = function() { + return ipaddr.IPv6.parse("::ffff:" + (this.toString())); + }; + + return IPv4; + + })(); + + ipv4Part = "(0?\\d+|0x[a-f0-9]+)"; + + ipv4Regexes = { + fourOctet: new RegExp("^" + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "$", 'i'), + longValue: new RegExp("^" + ipv4Part + "$", 'i') + }; + + ipaddr.IPv4.parser = function(string) { + var match, parseIntAuto, part, shift, value; + parseIntAuto = function(string) { + if (string[0] === "0" && string[1] !== "x") { + return parseInt(string, 8); + } else { + return parseInt(string); + } + }; + if (match = string.match(ipv4Regexes.fourOctet)) { + return (function() { + var _i, _len, _ref, _results; + _ref = match.slice(1, 6); + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + part = _ref[_i]; + _results.push(parseIntAuto(part)); + } + return _results; + })(); + } else if (match = string.match(ipv4Regexes.longValue)) { + value = parseIntAuto(match[1]); + return ((function() { + var _i, _results; + _results = []; + for (shift = _i = 0; _i <= 24; shift = _i += 8) { + _results.push((value >> shift) & 0xff); + } + return _results; + })()).reverse(); + } else { + return null; + } + }; + + ipaddr.IPv6 = (function() { + function IPv6(parts) { + var part, _i, _len; + if (parts.length !== 8) { + throw new Error("ipaddr: ipv6 part count should be 8"); + } + for (_i = 0, _len = parts.length; _i < _len; _i++) { + part = parts[_i]; + if (!((0 <= part && part <= 0xffff))) { + throw new Error("ipaddr: ipv6 part should fit to two octets"); + } + } + this.parts = parts; + } + + IPv6.prototype.kind = function() { + return 'ipv6'; + }; + + IPv6.prototype.toString = function() { + var compactStringParts, part, pushPart, state, stringParts, _i, _len; + stringParts = (function() { + var _i, _len, _ref, _results; + _ref = this.parts; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + part = _ref[_i]; + _results.push(part.toString(16)); + } + return _results; + }).call(this); + compactStringParts = []; + pushPart = function(part) { + return compactStringParts.push(part); + }; + state = 0; + for (_i = 0, _len = stringParts.length; _i < _len; _i++) { + part = stringParts[_i]; + switch (state) { + case 0: + if (part === '0') { + pushPart(''); + } else { + pushPart(part); + } + state = 1; + break; + case 1: + if (part === '0') { + state = 2; + } else { + pushPart(part); + } + break; + case 2: + if (part !== '0') { + pushPart(''); + pushPart(part); + state = 3; + } + break; + case 3: + pushPart(part); + } + } + if (state === 2) { + pushPart(''); + pushPart(''); + } + return compactStringParts.join(":"); + }; + + IPv6.prototype.toByteArray = function() { + var bytes, part, _i, _len, _ref; + bytes = []; + _ref = this.parts; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + part = _ref[_i]; + bytes.push(part >> 8); + bytes.push(part & 0xff); + } + return bytes; + }; + + IPv6.prototype.toNormalizedString = function() { + var part; + return ((function() { + var _i, _len, _ref, _results; + _ref = this.parts; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + part = _ref[_i]; + _results.push(part.toString(16)); + } + return _results; + }).call(this)).join(":"); + }; + + IPv6.prototype.match = function(other, cidrRange) { + if (other.kind() !== 'ipv6') { + throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one"); + } + return matchCIDR(this.parts, other.parts, 16, cidrRange); + }; + + IPv6.prototype.SpecialRanges = { + unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128], + linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10], + multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8], + loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128], + uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7], + ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96], + rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96], + rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96], + '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16], + teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32], + reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]] + }; + + IPv6.prototype.range = function() { + return ipaddr.subnetMatch(this, this.SpecialRanges); + }; + + IPv6.prototype.isIPv4MappedAddress = function() { + return this.range() === 'ipv4Mapped'; + }; + + IPv6.prototype.toIPv4Address = function() { + var high, low, _ref; + if (!this.isIPv4MappedAddress()) { + throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4"); + } + _ref = this.parts.slice(-2), high = _ref[0], low = _ref[1]; + return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]); + }; + + return IPv6; + + })(); + + ipv6Part = "(?:[0-9a-f]+::?)+"; + + ipv6Regexes = { + "native": new RegExp("^(::)?(" + ipv6Part + ")?([0-9a-f]+)?(::)?$", 'i'), + transitional: new RegExp(("^((?:" + ipv6Part + ")|(?:::)(?:" + ipv6Part + ")?)") + ("" + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "$"), 'i') + }; + + expandIPv6 = function(string, parts) { + var colonCount, lastColon, part, replacement, replacementCount; + if (string.indexOf('::') !== string.lastIndexOf('::')) { + return null; + } + colonCount = 0; + lastColon = -1; + while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) { + colonCount++; + } + if (string[0] === ':') { + colonCount--; + } + if (string[string.length - 1] === ':') { + colonCount--; + } + replacementCount = parts - colonCount; + replacement = ':'; + while (replacementCount--) { + replacement += '0:'; + } + string = string.replace('::', replacement); + if (string[0] === ':') { + string = string.slice(1); + } + if (string[string.length - 1] === ':') { + string = string.slice(0, -1); + } + return (function() { + var _i, _len, _ref, _results; + _ref = string.split(":"); + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + part = _ref[_i]; + _results.push(parseInt(part, 16)); + } + return _results; + })(); + }; + + ipaddr.IPv6.parser = function(string) { + var match, parts; + if (string.match(ipv6Regexes['native'])) { + return expandIPv6(string, 8); + } else if (match = string.match(ipv6Regexes['transitional'])) { + parts = expandIPv6(match[1].slice(0, -1), 6); + if (parts) { + parts.push(parseInt(match[2]) << 8 | parseInt(match[3])); + parts.push(parseInt(match[4]) << 8 | parseInt(match[5])); + return parts; + } + } + return null; + }; + + ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) { + return this.parser(string) !== null; + }; + + ipaddr.IPv4.isValid = ipaddr.IPv6.isValid = function(string) { + var e; + try { + new this(this.parser(string)); + return true; + } catch (_error) { + e = _error; + return false; + } + }; + + ipaddr.IPv4.parse = ipaddr.IPv6.parse = function(string) { + var parts; + parts = this.parser(string); + if (parts === null) { + throw new Error("ipaddr: string is not formatted like ip address"); + } + return new this(parts); + }; + + ipaddr.isValid = function(string) { + return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string); + }; + + ipaddr.parse = function(string) { + if (ipaddr.IPv6.isIPv6(string)) { + return ipaddr.IPv6.parse(string); + } else if (ipaddr.IPv4.isIPv4(string)) { + return ipaddr.IPv4.parse(string); + } else { + throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format"); + } + }; + + ipaddr.process = function(string) { + var addr; + addr = this.parse(string); + if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) { + return addr.toIPv4Address(); + } else { + return addr; + } + }; + +}).call(this); diff --git a/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/package.json b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/package.json new file mode 100755 index 0000000..1556c40 --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/package.json @@ -0,0 +1,45 @@ +{ + "name": "ipaddr.js", + "description": "A library for manipulating IPv4 and IPv6 addresses in JavaScript.", + "version": "0.1.2", + "author": { + "name": "Peter Zotov", + "email": "whitequark@whitequark.org" + }, + "directories": { + "lib": "./lib" + }, + "dependencies": {}, + "devDependencies": { + "coffee-script": "~1.6", + "nodeunit": "~0.5.3", + "uglify-js": "latest" + }, + "scripts": { + "test": "cake build test" + }, + "keywords": [ + "ip", + "ipv4", + "ipv6" + ], + "repository": { + "type": "git", + "url": "git://github.com/whitequark/ipaddr.js" + }, + "main": "./lib/ipaddr", + "engines": { + "node": ">= 0.2.5" + }, + "readme": "# ipaddr.js — an IPv6 and IPv4 address manipulation library\n\nipaddr.js is a small (1.9K minified and gzipped) library for manipulating\nIP addresses in JavaScript environments. It runs on both CommonJS runtimes\n(e.g. [nodejs]) and in a web browser.\n\nipaddr.js allows you to verify and parse string representation of an IP\naddress, match it against a CIDR range or range list, determine if it falls\ninto some reserved ranges (examples include loopback and private ranges),\nand convert between IPv4 and IPv4-mapped IPv6 addresses.\n\n[nodejs]: http://nodejs.org\n\n## Installation\n\n`npm install ipaddr.js`\n\n## API\n\nipaddr.js defines one object in the global scope: `ipaddr`. In CommonJS,\nit is exported from the module:\n\n```js\nvar ipaddr = require('ipaddr.js');\n```\n\nThe API consists of several global methods and two classes: ipaddr.IPv6 and ipaddr.IPv4.\n\n### Global methods\n\nThere are three global methods defined: `ipaddr.isValid`, `ipaddr.parse` and\n`ipaddr.process`. All of them receive a string as a single parameter.\n\nThe `ipaddr.isValid` method returns `true` if the address is a valid IPv4 or\nIPv6 address, and `false` otherwise. It does not throw any exceptions.\n\nThe `ipaddr.parse` method returns an object representing the IP address,\nor throws an `Error` if the passed string is not a valid representation of an\nIP address.\n\nThe `ipaddr.process` method works just like the `ipaddr.parse` one, but it\nautomatically converts IPv4-mapped IPv6 addresses to their IPv4 couterparts\nbefore returning. It is useful when you have a Node.js instance listening\non an IPv6 socket, and the `net.ivp6.bindv6only` sysctl parameter (or its\nequivalent on non-Linux OS) is set to 0. In this case, you can accept IPv4\nconnections on your IPv6-only socket, but the remote address will be mangled.\nUse `ipaddr.process` method to automatically demangle it.\n\n### Object representation\n\nParsing methods return an object which descends from `ipaddr.IPv6` or\n`ipaddr.IPv4`. These objects share some properties, but most of them differ.\n\n#### Shared properties\n\nOne can determine the type of address by calling `addr.kind()`. It will return\neither `\"ipv6\"` or `\"ipv4\"`.\n\nAn address can be converted back to its string representation with `addr.toString()`.\nNote that this method:\n * does not return the original string used to create the object (in fact, there is\n no way of getting that string)\n * returns a compact representation (when it is applicable)\n\nA `match(range, bits)` method can be used to check if the address falls into a\ncertain CIDR range.\nNote that an address can be (obviously) matched only against an address of the same type.\n\nFor example:\n\n```js\nvar addr = ipaddr.parse(\"2001:db8:1234::1\");\nvar range = ipaddr.parse(\"2001:db8::\");\n\naddr.match(range, 32); // => true\n```\n\nA `range()` method returns one of predefined names for several special ranges defined\nby IP protocols. The exact names (and their respective CIDR ranges) can be looked up\nin the source: [IPv6 ranges] and [IPv4 ranges]. Some common ones include `\"unicast\"`\n(the default one) and `\"reserved\"`.\n\nYou can match against your own range list by using\n`ipaddr.subnetMatch(address, rangeList, defaultName)` method. It can work with both\nIPv6 and IPv4 addresses, and accepts a name-to-subnet map as the range list. For example:\n\n```js\nvar rangeList = {\n documentationOnly: [ ipaddr.parse('2001:db8::'), 32 ],\n tunnelProviders: [\n [ ipaddr.parse('2001:470::'), 32 ], // he.net\n [ ipaddr.parse('2001:5c0::'), 32 ] // freenet6\n ]\n};\nipaddr.subnetMatch(ipaddr.parse('2001:470:8:66::1'), rangeList, 'unknown'); // => \"he.net\"\n```\n\nThe addresses can be converted to their byte representation with `toByteArray()`.\n(Actually, JavaScript mostly does not know about byte buffers. They are emulated with\narrays of numbers, each in range of 0..255.)\n\n```js\nvar bytes = ipaddr.parse('2a00:1450:8007::68').toByteArray(); // ipv6.google.com\nbytes // => [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, , 0x00, 0x68 ]\n```\n\nThe `ipaddr.IPv4` and `ipaddr.IPv6` objects have some methods defined, too. All of them\nhave the same interface for both protocols, and are similar to global methods.\n\n`ipaddr.IPvX.isValid(string)` can be used to check if the string is a valid address\nfor particular protocol, and `ipaddr.IPvX.parse(string)` is the error-throwing parser.\n\n[IPv6 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L186\n[IPv4 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L71\n\n#### IPv6 properties\n\nSometimes you will want to convert IPv6 not to a compact string representation (with\nthe `::` substitution); the `toNormalizedString()` method will return an address where\nall zeroes are explicit.\n\nFor example:\n\n```js\nvar addr = ipaddr.parse(\"2001:0db8::0001\");\naddr.toString(); // => \"2001:db8::1\"\naddr.toNormalizedString(); // => \"2001:db8:0:0:0:0:0:1\"\n```\n\nThe `isIPv4MappedAddress()` method will return `true` if this address is an IPv4-mapped\none, and `toIPv4Address()` will return an IPv4 object address.\n\nTo access the underlying binary representation of the address, use `addr.parts`.\n\n```js\nvar addr = ipaddr.parse(\"2001:db8:10::1234:DEAD\");\naddr.parts // => [0x2001, 0xdb8, 0x10, 0, 0, 0, 0x1234, 0xdead]\n```\n\n#### IPv4 properties\n\n`toIPv4MappedAddress()` will return a corresponding IPv4-mapped IPv6 address.\n\nTo access the underlying representation of the address, use `addr.octets`.\n\n```js\nvar addr = ipaddr.parse(\"192.168.1.1\");\naddr.octets // => [192, 168, 1, 1]\n```\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/whitequark/ipaddr.js/issues" + }, + "_id": "ipaddr.js@0.1.2", + "dist": { + "shasum": "6a1fd3d854f5002965c34d7bbcd9b4a8d4b0467e" + }, + "_from": "ipaddr.js@0.1.2", + "_resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-0.1.2.tgz" +} diff --git a/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/src/ipaddr.coffee b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/src/ipaddr.coffee new file mode 100755 index 0000000..4c89ded --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/src/ipaddr.coffee @@ -0,0 +1,344 @@ +# Define the main object +ipaddr = {} + +root = this + +# Export for both the CommonJS and browser-like environment +if module? && module.exports + module.exports = ipaddr +else + root['ipaddr'] = ipaddr + +# A generic CIDR (Classless Inter-Domain Routing) RFC1518 range matcher. +matchCIDR = (first, second, partSize, cidrBits) -> + if first.length != second.length + throw new Error "ipaddr: cannot match CIDR for objects with different lengths" + + part = 0 + while cidrBits > 0 + shift = partSize - cidrBits + shift = 0 if shift < 0 + + if first[part] >> shift != second[part] >> shift + return false + + cidrBits -= partSize + part += 1 + + return true + +# An utility function to ease named range matching. See examples below. +ipaddr.subnetMatch = (address, rangeList, defaultName='unicast') -> + for rangeName, rangeSubnets of rangeList + # ECMA5 Array.isArray isn't available everywhere + if toString.call(rangeSubnets[0]) != '[object Array]' + rangeSubnets = [ rangeSubnets ] + + for subnet in rangeSubnets + return rangeName if address.match.apply(address, subnet) + + return defaultName + +# An IPv4 address (RFC791). +class ipaddr.IPv4 + # Constructs a new IPv4 address from an array of four octets. + # Verifies the input. + constructor: (octets) -> + if octets.length != 4 + throw new Error "ipaddr: ipv4 octet count should be 4" + + for octet in octets + if !(0 <= octet <= 255) + throw new Error "ipaddr: ipv4 octet is a byte" + + @octets = octets + + # The 'kind' method exists on both IPv4 and IPv6 classes. + kind: -> + return 'ipv4' + + # Returns the address in convenient, decimal-dotted format. + toString: -> + return @octets.join "." + + # Returns an array of byte-sized values in network order + toByteArray: -> + return @octets.slice(0) # octets.clone + + # Checks if this address matches other one within given CIDR range. + match: (other, cidrRange) -> + if other.kind() != 'ipv4' + throw new Error "ipaddr: cannot match ipv4 address with non-ipv4 one" + + return matchCIDR(this.octets, other.octets, 8, cidrRange) + + # Special IPv4 address ranges. + SpecialRanges: + broadcast: [ + [ new IPv4([255, 255, 255, 255]), 32 ] + ] + multicast: [ # RFC3171 + [ new IPv4([224, 0, 0, 0]), 4 ] + ] + linkLocal: [ # RFC3927 + [ new IPv4([169, 254, 0, 0]), 16 ] + ] + loopback: [ # RFC5735 + [ new IPv4([127, 0, 0, 0]), 8 ] + ] + private: [ # RFC1918 + [ new IPv4([10, 0, 0, 0]), 8 ] + [ new IPv4([172, 16, 0, 0]), 12 ] + [ new IPv4([192, 168, 0, 0]), 16 ] + ] + reserved: [ # Reserved and testing-only ranges; RFCs 5735, 5737, 2544, 1700 + [ new IPv4([192, 0, 0, 0]), 24 ] + [ new IPv4([192, 0, 2, 0]), 24 ] + [ new IPv4([192, 88, 99, 0]), 24 ] + [ new IPv4([198, 51, 100, 0]), 24 ] + [ new IPv4([203, 0, 113, 0]), 24 ] + [ new IPv4([240, 0, 0, 0]), 4 ] + ] + + # Checks if the address corresponds to one of the special ranges. + range: -> + return ipaddr.subnetMatch(this, @SpecialRanges) + + # Convrets this IPv4 address to an IPv4-mapped IPv6 address. + toIPv4MappedAddress: -> + return ipaddr.IPv6.parse "::ffff:#{@toString()}" + +# A list of regular expressions that match arbitrary IPv4 addresses, +# for which a number of weird notations exist. +# Note that an address like 0010.0xa5.1.1 is considered legal. +ipv4Part = "(0?\\d+|0x[a-f0-9]+)" +ipv4Regexes = + fourOctet: new RegExp "^#{ipv4Part}\\.#{ipv4Part}\\.#{ipv4Part}\\.#{ipv4Part}$", 'i' + longValue: new RegExp "^#{ipv4Part}$", 'i' + +# Classful variants (like a.b, where a is an octet, and b is a 24-bit +# value representing last three octets; this corresponds to a class C +# address) are omitted due to classless nature of modern Internet. +ipaddr.IPv4.parser = (string) -> + parseIntAuto = (string) -> + if string[0] == "0" && string[1] != "x" + parseInt(string, 8) + else + parseInt(string) + + # parseInt recognizes all that octal & hexadecimal weirdness for us + if match = string.match(ipv4Regexes.fourOctet) + return (parseIntAuto(part) for part in match[1..5]) + else if match = string.match(ipv4Regexes.longValue) + value = parseIntAuto(match[1]) + return ((value >> shift) & 0xff for shift in [0..24] by 8).reverse() + else + return null + +# An IPv6 address (RFC2460) +class ipaddr.IPv6 + # Constructs an IPv6 address from an array of eight 16-bit parts. + # Throws an error if the input is invalid. + constructor: (parts) -> + if parts.length != 8 + throw new Error "ipaddr: ipv6 part count should be 8" + + for part in parts + if !(0 <= part <= 0xffff) + throw new Error "ipaddr: ipv6 part should fit to two octets" + + @parts = parts + + # The 'kind' method exists on both IPv4 and IPv6 classes. + kind: -> + return 'ipv6' + + # Returns the address in compact, human-readable format like + # 2001:db8:8:66::1 + toString: -> + stringParts = (part.toString(16) for part in @parts) + + compactStringParts = [] + pushPart = (part) -> compactStringParts.push part + + state = 0 + for part in stringParts + switch state + when 0 + if part == '0' + pushPart('') + else + pushPart(part) + + state = 1 + when 1 + if part == '0' + state = 2 + else + pushPart(part) + when 2 + unless part == '0' + pushPart('') + pushPart(part) + state = 3 + when 3 + pushPart(part) + + if state == 2 + pushPart('') + pushPart('') + + return compactStringParts.join ":" + + # Returns an array of byte-sized values in network order + toByteArray: -> + bytes = [] + for part in @parts + bytes.push(part >> 8) + bytes.push(part & 0xff) + + return bytes + + # Returns the address in expanded format with all zeroes included, like + # 2001:db8:8:66:0:0:0:1 + toNormalizedString: -> + return (part.toString(16) for part in @parts).join ":" + + # Checks if this address matches other one within given CIDR range. + match: (other, cidrRange) -> + if other.kind() != 'ipv6' + throw new Error "ipaddr: cannot match ipv6 address with non-ipv6 one" + + return matchCIDR(this.parts, other.parts, 16, cidrRange) + + # Special IPv6 ranges + SpecialRanges: + unspecified: [ new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128 ] # RFC4291, here and after + linkLocal: [ new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10 ] + multicast: [ new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8 ] + loopback: [ new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128 ] + uniqueLocal: [ new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7 ] + ipv4Mapped: [ new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96 ] + rfc6145: [ new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96 ] # RFC6145 + rfc6052: [ new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96 ] # RFC6052 + '6to4': [ new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16 ] # RFC3056 + teredo: [ new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32 ] # RFC6052, RFC6146 + reserved: [ + [ new IPv6([ 0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32 ] # RFC4291 + ] + + # Checks if the address corresponds to one of the special ranges. + range: -> + return ipaddr.subnetMatch(this, @SpecialRanges) + + # Checks if this address is an IPv4-mapped IPv6 address. + isIPv4MappedAddress: -> + return @range() == 'ipv4Mapped' + + # Converts this address to IPv4 address if it is an IPv4-mapped IPv6 address. + # Throws an error otherwise. + toIPv4Address: -> + unless @isIPv4MappedAddress() + throw new Error "ipaddr: trying to convert a generic ipv6 address to ipv4" + + [high, low] = @parts[-2..-1] + + return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]) + +# IPv6-matching regular expressions. +# For IPv6, the task is simpler: it is enough to match the colon-delimited +# hexadecimal IPv6 and a transitional variant with dotted-decimal IPv4 at +# the end. +ipv6Part = "(?:[0-9a-f]+::?)+" +ipv6Regexes = + native: new RegExp "^(::)?(#{ipv6Part})?([0-9a-f]+)?(::)?$", 'i' + transitional: new RegExp "^((?:#{ipv6Part})|(?:::)(?:#{ipv6Part})?)" + + "#{ipv4Part}\\.#{ipv4Part}\\.#{ipv4Part}\\.#{ipv4Part}$", 'i' + +# Expand :: in an IPv6 address or address part consisting of `parts` groups. +expandIPv6 = (string, parts) -> + # More than one '::' means invalid adddress + if string.indexOf('::') != string.lastIndexOf('::') + return null + + # How many parts do we already have? + colonCount = 0 + lastColon = -1 + while (lastColon = string.indexOf(':', lastColon + 1)) >= 0 + colonCount++ + + # 0::0 is two parts more than :: + colonCount-- if string[0] == ':' + colonCount-- if string[string.length-1] == ':' + + # replacement = ':' + '0:' * (parts - colonCount) + replacementCount = parts - colonCount + replacement = ':' + while replacementCount-- + replacement += '0:' + + # Insert the missing zeroes + string = string.replace('::', replacement) + + # Trim any garbage which may be hanging around if :: was at the edge in + # the source string + string = string[1..-1] if string[0] == ':' + string = string[0..-2] if string[string.length-1] == ':' + + return (parseInt(part, 16) for part in string.split(":")) + +# Parse an IPv6 address. +ipaddr.IPv6.parser = (string) -> + if string.match(ipv6Regexes['native']) + return expandIPv6(string, 8) + + else if match = string.match(ipv6Regexes['transitional']) + parts = expandIPv6(match[1][0..-2], 6) + if parts + parts.push(parseInt(match[2]) << 8 | parseInt(match[3])) + parts.push(parseInt(match[4]) << 8 | parseInt(match[5])) + return parts + + return null + +# Checks if a given string is formatted like IPv4/IPv6 address. +ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = (string) -> + return @parser(string) != null + +# Checks if a given string is a valid IPv4/IPv6 address. +ipaddr.IPv4.isValid = ipaddr.IPv6.isValid = (string) -> + try + new this(@parser(string)) + return true + catch e + return false + +# Tries to parse and validate a string with IPv4/IPv6 address. +# Throws an error if it fails. +ipaddr.IPv4.parse = ipaddr.IPv6.parse = (string) -> + parts = @parser(string) + if parts == null + throw new Error "ipaddr: string is not formatted like ip address" + + return new this(parts) + +# Checks if the address is valid IP address +ipaddr.isValid = (string) -> + return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string) + +# Try to parse an address and throw an error if it is impossible +ipaddr.parse = (string) -> + if ipaddr.IPv6.isIPv6(string) + return ipaddr.IPv6.parse(string) + else if ipaddr.IPv4.isIPv4(string) + return ipaddr.IPv4.parse(string) + else + throw new Error "ipaddr: the address has neither IPv6 nor IPv4 format" + +# Parse an address and return plain IPv4 address if it is an IPv4-mapped address +ipaddr.process = (string) -> + addr = @parse(string) + if addr.kind() == 'ipv6' && addr.isIPv4MappedAddress() + return addr.toIPv4Address() + else + return addr diff --git a/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/test/ipaddr.test.coffee b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/test/ipaddr.test.coffee new file mode 100755 index 0000000..56751da --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/test/ipaddr.test.coffee @@ -0,0 +1,209 @@ +ipaddr = require '../lib/ipaddr' + +module.exports = + 'should define main classes': (test) -> + test.ok(ipaddr.IPv4?, 'defines IPv4 class') + test.ok(ipaddr.IPv6?, 'defines IPv6 class') + test.done() + + 'can construct IPv4 from octets': (test) -> + test.doesNotThrow -> + new ipaddr.IPv4([192, 168, 1, 2]) + test.done() + + 'refuses to construct invalid IPv4': (test) -> + test.throws -> + new ipaddr.IPv4([300, 1, 2, 3]) + test.throws -> + new ipaddr.IPv4([8, 8, 8]) + test.done() + + 'converts IPv4 to string correctly': (test) -> + addr = new ipaddr.IPv4([192, 168, 1, 1]) + test.equal(addr.toString(), '192.168.1.1') + test.done() + + 'returns correct kind for IPv4': (test) -> + addr = new ipaddr.IPv4([1, 2, 3, 4]) + test.equal(addr.kind(), 'ipv4') + test.done() + + 'allows to access IPv4 octets': (test) -> + addr = new ipaddr.IPv4([42, 0, 0, 0]) + test.equal(addr.octets[0], 42) + test.done() + + 'checks IPv4 address format': (test) -> + test.equal(ipaddr.IPv4.isIPv4('192.168.007.0xa'), true) + test.equal(ipaddr.IPv4.isIPv4('1024.0.0.1'), true) + test.equal(ipaddr.IPv4.isIPv4('8.0xa.wtf.6'), false) + test.done() + + 'validates IPv4 addresses': (test) -> + test.equal(ipaddr.IPv4.isValid('192.168.007.0xa'), true) + test.equal(ipaddr.IPv4.isValid('1024.0.0.1'), false) + test.equal(ipaddr.IPv4.isValid('8.0xa.wtf.6'), false) + test.done() + + 'parses IPv4 in several weird formats': (test) -> + test.deepEqual(ipaddr.IPv4.parse('192.168.1.1').octets, [192, 168, 1, 1]) + test.deepEqual(ipaddr.IPv4.parse('0xc0.168.1.1').octets, [192, 168, 1, 1]) + test.deepEqual(ipaddr.IPv4.parse('192.0250.1.1').octets, [192, 168, 1, 1]) + test.deepEqual(ipaddr.IPv4.parse('0xc0a80101').octets, [192, 168, 1, 1]) + test.deepEqual(ipaddr.IPv4.parse('030052000401').octets, [192, 168, 1, 1]) + test.deepEqual(ipaddr.IPv4.parse('3232235777').octets, [192, 168, 1, 1]) + test.done() + + 'barfs at invalid IPv4': (test) -> + test.throws -> + ipaddr.IPv4.parse('10.0.0.wtf') + test.done() + + 'matches IPv4 CIDR correctly': (test) -> + addr = new ipaddr.IPv4([10, 5, 0, 1]) + test.equal(addr.match(ipaddr.IPv4.parse('0.0.0.0'), 0), true) + test.equal(addr.match(ipaddr.IPv4.parse('11.0.0.0'), 8), false) + test.equal(addr.match(ipaddr.IPv4.parse('10.0.0.0'), 8), true) + test.equal(addr.match(ipaddr.IPv4.parse('10.0.0.1'), 8), true) + test.equal(addr.match(ipaddr.IPv4.parse('10.0.0.10'), 8), true) + test.equal(addr.match(ipaddr.IPv4.parse('10.5.5.0'), 16), true) + test.equal(addr.match(ipaddr.IPv4.parse('10.4.5.0'), 16), false) + test.equal(addr.match(ipaddr.IPv4.parse('10.4.5.0'), 15), true) + test.equal(addr.match(ipaddr.IPv4.parse('10.5.0.2'), 32), false) + test.equal(addr.match(addr, 32), true) + test.done() + + 'detects reserved IPv4 networks': (test) -> + test.equal(ipaddr.IPv4.parse('10.1.0.1').range(), 'private') + test.equal(ipaddr.IPv4.parse('192.168.2.1').range(), 'private') + test.equal(ipaddr.IPv4.parse('224.100.0.1').range(), 'multicast') + test.equal(ipaddr.IPv4.parse('169.254.15.0').range(), 'linkLocal') + test.equal(ipaddr.IPv4.parse('127.1.1.1').range(), 'loopback') + test.equal(ipaddr.IPv4.parse('255.255.255.255').range(), 'broadcast') + test.equal(ipaddr.IPv4.parse('240.1.2.3').range(), 'reserved') + test.equal(ipaddr.IPv4.parse('8.8.8.8').range(), 'unicast') + test.done() + + 'can construct IPv6 from parts': (test) -> + test.doesNotThrow -> + new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1]) + test.done() + + 'refuses to construct invalid IPv6': (test) -> + test.throws -> + new ipaddr.IPv6([0xfffff, 0, 0, 0, 0, 0, 0, 1]) + test.throws -> + new ipaddr.IPv6([0xfffff, 0, 0, 0, 0, 0, 1]) + test.done() + + 'converts IPv6 to string correctly': (test) -> + addr = new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1]) + test.equal(addr.toNormalizedString(), '2001:db8:f53a:0:0:0:0:1') + test.equal(addr.toString(), '2001:db8:f53a::1') + test.equal(new ipaddr.IPv6([0, 0, 0, 0, 0, 0, 0, 1]).toString(), '::1') + test.equal(new ipaddr.IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]).toString(), '2001:db8::') + test.done() + + 'returns correct kind for IPv6': (test) -> + addr = new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1]) + test.equal(addr.kind(), 'ipv6') + test.done() + + 'allows to access IPv6 address parts': (test) -> + addr = new ipaddr.IPv6([0x2001, 0xdb8, 0xf53a, 0, 0, 42, 0, 1]) + test.equal(addr.parts[5], 42) + test.done() + + 'checks IPv6 address format': (test) -> + test.equal(ipaddr.IPv6.isIPv6('2001:db8:F53A::1'), true) + test.equal(ipaddr.IPv6.isIPv6('200001::1'), true) + test.equal(ipaddr.IPv6.isIPv6('::ffff:192.168.1.1'), true) + test.equal(ipaddr.IPv6.isIPv6('::ffff:300.168.1.1'), true) + test.equal(ipaddr.IPv6.isIPv6('::ffff:300.168.1.1:0'), false) + test.equal(ipaddr.IPv6.isIPv6('fe80::wtf'), false) + test.done() + + 'validates IPv6 addresses': (test) -> + test.equal(ipaddr.IPv6.isValid('2001:db8:F53A::1'), true) + test.equal(ipaddr.IPv6.isValid('200001::1'), false) + test.equal(ipaddr.IPv6.isValid('::ffff:192.168.1.1'), true) + test.equal(ipaddr.IPv6.isValid('::ffff:300.168.1.1'), false) + test.equal(ipaddr.IPv6.isValid('::ffff:300.168.1.1:0'), false) + test.equal(ipaddr.IPv6.isValid('2001:db8::F53A::1'), false) + test.equal(ipaddr.IPv6.isValid('fe80::wtf'), false) + test.done() + + 'parses IPv6 in different formats': (test) -> + test.deepEqual(ipaddr.IPv6.parse('2001:db8:F53A:0:0:0:0:1').parts, [0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 1]) + test.deepEqual(ipaddr.IPv6.parse('fe80::10').parts, [0xfe80, 0, 0, 0, 0, 0, 0, 0x10]) + test.deepEqual(ipaddr.IPv6.parse('2001:db8:F53A::').parts, [0x2001, 0xdb8, 0xf53a, 0, 0, 0, 0, 0]) + test.deepEqual(ipaddr.IPv6.parse('::1').parts, [0, 0, 0, 0, 0, 0, 0, 1]) + test.deepEqual(ipaddr.IPv6.parse('::').parts, [0, 0, 0, 0, 0, 0, 0, 0]) + test.done() + + 'barfs at invalid IPv6': (test) -> + test.throws -> + ipaddr.IPv6.parse('fe80::0::1') + test.done() + + 'matches IPv6 CIDR correctly': (test) -> + addr = ipaddr.IPv6.parse('2001:db8:f53a::1') + test.equal(addr.match(ipaddr.IPv6.parse('::'), 0), true) + test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f53a::1:1'), 64), true) + test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f53b::1:1'), 48), false) + test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f531::1:1'), 44), true) + test.equal(addr.match(ipaddr.IPv6.parse('2001:db8:f500::1'), 40), true) + test.equal(addr.match(ipaddr.IPv6.parse('2001:db9:f500::1'), 40), false) + test.equal(addr.match(addr, 128), true) + test.done() + + 'converts between IPv4-mapped IPv6 addresses and IPv4 addresses': (test) -> + addr = ipaddr.IPv4.parse('77.88.21.11') + mapped = addr.toIPv4MappedAddress() + test.deepEqual(mapped.parts, [0, 0, 0, 0, 0, 0xffff, 0x4d58, 0x150b]) + test.deepEqual(mapped.toIPv4Address().octets, addr.octets) + test.done() + + 'refuses to convert non-IPv4-mapped IPv6 address to IPv4 address': (test) -> + test.throws -> + ipaddr.IPv6.parse('2001:db8::1').toIPv4Address() + test.done() + + 'detects reserved IPv6 networks': (test) -> + test.equal(ipaddr.IPv6.parse('::').range(), 'unspecified') + test.equal(ipaddr.IPv6.parse('fe80::1234:5678:abcd:0123').range(), 'linkLocal') + test.equal(ipaddr.IPv6.parse('ff00::1234').range(), 'multicast') + test.equal(ipaddr.IPv6.parse('::1').range(), 'loopback') + test.equal(ipaddr.IPv6.parse('fc00::').range(), 'uniqueLocal') + test.equal(ipaddr.IPv6.parse('::ffff:192.168.1.10').range(), 'ipv4Mapped') + test.equal(ipaddr.IPv6.parse('::ffff:0:192.168.1.10').range(), 'rfc6145') + test.equal(ipaddr.IPv6.parse('64:ff9b::1234').range(), 'rfc6052') + test.equal(ipaddr.IPv6.parse('2002:1f63:45e8::1').range(), '6to4') + test.equal(ipaddr.IPv6.parse('2001::4242').range(), 'teredo') + test.equal(ipaddr.IPv6.parse('2001:db8::3210').range(), 'reserved') + test.equal(ipaddr.IPv6.parse('2001:470:8:66::1').range(), 'unicast') + test.done() + + 'is able to determine IP address type': (test) -> + test.equal(ipaddr.parse('8.8.8.8').kind(), 'ipv4') + test.equal(ipaddr.parse('2001:db8:3312::1').kind(), 'ipv6') + test.done() + + 'throws an error if tried to parse an invalid address': (test) -> + test.throws -> + ipaddr.parse('::some.nonsense') + test.done() + + 'correctly processes IPv4-mapped addresses': (test) -> + test.equal(ipaddr.process('8.8.8.8').kind(), 'ipv4') + test.equal(ipaddr.process('2001:db8:3312::1').kind(), 'ipv6') + test.equal(ipaddr.process('::ffff:192.168.1.1').kind(), 'ipv4') + test.done() + + 'correctly converts IPv6 and IPv4 addresses to byte arrays': (test) -> + test.deepEqual(ipaddr.parse('1.2.3.4').toByteArray(), + [0x1, 0x2, 0x3, 0x4]); + # Fuck yeah. The first byte of Google's IPv6 address is 42. 42! + test.deepEqual(ipaddr.parse('2a00:1450:8007::68').toByteArray(), + [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68 ]) + test.done() diff --git a/node_modules/express/node_modules/proxy-addr/package.json b/node_modules/express/node_modules/proxy-addr/package.json new file mode 100755 index 0000000..e3cb0c3 --- /dev/null +++ b/node_modules/express/node_modules/proxy-addr/package.json @@ -0,0 +1,49 @@ +{ + "name": "proxy-addr", + "description": "Determine address of proxied request", + "version": "1.0.1", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "license": "MIT", + "keywords": [ + "ip", + "proxy", + "x-forwarded-for" + ], + "repository": { + "type": "git", + "url": "https://github.com/expressjs/proxy-addr.git" + }, + "bugs": { + "url": "https://github.com/expressjs/proxy-addr/issues" + }, + "dependencies": { + "ipaddr.js": "0.1.2" + }, + "devDependencies": { + "benchmark": "1.0.0", + "beautify-benchmark": "0.2.4", + "istanbul": "0.2.10", + "mocha": "~1.20.0", + "should": "~4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "bench": "node benchmark/index.js", + "test": "mocha --reporter dot test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec test/" + }, + "readme": "# proxy-addr\n\n[![NPM version](https://badge.fury.io/js/proxy-addr.svg)](http://badge.fury.io/js/proxy-addr)\n[![Build Status](https://travis-ci.org/expressjs/proxy-addr.svg?branch=master)](https://travis-ci.org/expressjs/proxy-addr)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/proxy-addr.svg?branch=master)](https://coveralls.io/r/expressjs/proxy-addr)\n\nDetermine address of proxied request\n\n## Install\n\n```sh\n$ npm install proxy-addr\n```\n\n## API\n\n```js\nvar proxyaddr = require('proxy-addr')\n```\n\n### proxyaddr(req, trust)\n\nReturn the address of the request, using the given `trust` parameter.\n\nThe `trust` argument is a function that returns `true` if you trust\nthe address, `false` if you don't. The closest untrusted address is\nreturned.\n\n```js\nproxyaddr(req, function(addr){ return addr === '127.0.0.1' })\nproxyaddr(req, function(addr, i){ return i < 1 })\n```\n\nThe `trust` arugment may also be a single IP address string or an\narray of trusted addresses, as plain IP addresses, CIDR-formatted\nstrings, or IP/netmask strings.\n\n```js\nproxyaddr(req, '127.0.0.1')\nproxyaddr(req, ['127.0.0.0/8', '10.0.0.0/8'])\nproxyaddr(req, ['127.0.0.0/255.0.0.0', '192.168.0.0/255.255.0.0'])\n```\n\nThis module also supports IPv6. Your IPv6 addresses will be normalized\nautomatically (i.e. `fe80::00ed:1` equals `fe80:0:0:0:0:0:ed:1`).\n\n```js\nproxyaddr(req, '::1')\nproxyaddr(req, ['::1/128', 'fe80::/10'])\nproxyaddr(req, ['fe80::/ffc0::'])\n```\n\nThis module will automatically work with IPv4-mapped IPv6 addresses\nas well to support node.js in IPv6-only mode. This means that you do\nnot have to specify both `::ffff:a00:1` and `10.0.0.1`.\n\nAs a convenience, this module also takes certain pre-defined names\nin addition to IP addresses, which expand into IP addresses:\n\n```js\nproxyaddr(req, 'loopback')\nproxyaddr(req, ['loopback', 'fc00:ac:1ab5:fff::1/64'])\n```\n\n * `loopback`: IPv4 and IPv6 loopback addresses (like `::1` and\n `127.0.0.1`).\n * `linklocal`: IPv4 and IPv6 link-local addresses (like\n `fe80::1:1:1:1` and `169.254.0.1`).\n * `uniquelocal`: IPv4 private addresses and IPv6 unique-local\n addresses (like `fc00:ac:1ab5:fff::1` and `192.168.0.1`).\n\nWhen `trust` is specified as a function, it will be called for each\naddress to determine if it is a trusted address. The function is\ngiven two arguments: `addr` and `i`, where `addr` is a string of\nthe address to check and `i` is a number that represents the distance\nfrom the socket address.\n\n### proxyaddr.all(req, [trust])\n\nReturn all the addresses of the request, optionally stopping at the\nfirst untrusted. This array is ordered from closest to furthest\n(i.e. `arr[0] === req.connection.remoteAddress`).\n\n```js\nproxyaddr.all(req)\n```\n\nThe optional `trust` argument takes the same arguments as `trust`\ndoes in `proxyaddr(req, trust)`.\n\n```js\nproxyaddr.all(req, 'loopback')\n```\n\n### proxyaddr.compile(val)\n\nCompiles argument `val` into a `trust` function. This function takes\nthe same arguments as `trust` does in `proxyaddr(req, trust)` and\nreturns a function suitable for `proxyaddr(req, trust)`.\n\n```js\nvar trust = proxyaddr.compile('localhost')\nvar addr = proxyaddr(req, trust)\n```\n\nThis function is meant to be optimized for use against every request.\nIt is recommend to compile a trust function up-front for the trusted\nconfiguration and pass that to `proxyaddr(req, trust)` for each request.\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## Benchmarks\n\n```sh\n$ npm run-script bench\n```\n\n## License\n\n[MIT](LICENSE)\n", + "readmeFilename": "README.md", + "_id": "proxy-addr@1.0.1", + "dist": { + "shasum": "3d7d454380e681bef88b57db20ada1901013588b" + }, + "_from": "proxy-addr@1.0.1", + "_resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.1.tgz" +} diff --git a/node_modules/express/node_modules/qs/.gitmodules b/node_modules/express/node_modules/qs/.gitmodules new file mode 100755 index 0000000..49e31da --- /dev/null +++ b/node_modules/express/node_modules/qs/.gitmodules @@ -0,0 +1,6 @@ +[submodule "support/expresso"] + path = support/expresso + url = git://github.com/visionmedia/expresso.git +[submodule "support/should"] + path = support/should + url = git://github.com/visionmedia/should.js.git diff --git a/node_modules/express/node_modules/qs/.npmignore b/node_modules/express/node_modules/qs/.npmignore new file mode 100755 index 0000000..e85ce2a --- /dev/null +++ b/node_modules/express/node_modules/qs/.npmignore @@ -0,0 +1,7 @@ +test +.travis.yml +benchmark.js +component.json +examples.js +History.md +Makefile diff --git a/node_modules/express/node_modules/qs/Readme.md b/node_modules/express/node_modules/qs/Readme.md new file mode 100755 index 0000000..27e54a4 --- /dev/null +++ b/node_modules/express/node_modules/qs/Readme.md @@ -0,0 +1,58 @@ +# node-querystring + + query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others. + +## Installation + + $ npm install qs + +## Examples + +```js +var qs = require('qs'); + +qs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com'); +// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } } + +qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}) +// => user[name]=Tobi&user[email]=tobi%40learnboost.com +``` + +## Testing + +Install dev dependencies: + + $ npm install -d + +and execute: + + $ make test + +browser: + + $ open test/browser/index.html + +## License + +(The MIT License) + +Copyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca> + +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. \ No newline at end of file diff --git a/node_modules/express/node_modules/qs/index.js b/node_modules/express/node_modules/qs/index.js new file mode 100755 index 0000000..b05938a --- /dev/null +++ b/node_modules/express/node_modules/qs/index.js @@ -0,0 +1,366 @@ +/** + * Object#toString() ref for stringify(). + */ + +var toString = Object.prototype.toString; + +/** + * Object#hasOwnProperty ref + */ + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * Array#indexOf shim. + */ + +var indexOf = typeof Array.prototype.indexOf === 'function' + ? function(arr, el) { return arr.indexOf(el); } + : function(arr, el) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] === el) return i; + } + return -1; + }; + +/** + * Array.isArray shim. + */ + +var isArray = Array.isArray || function(arr) { + return toString.call(arr) == '[object Array]'; +}; + +/** + * Object.keys shim. + */ + +var objectKeys = Object.keys || function(obj) { + var ret = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + ret.push(key); + } + } + return ret; +}; + +/** + * Array#forEach shim. + */ + +var forEach = typeof Array.prototype.forEach === 'function' + ? function(arr, fn) { return arr.forEach(fn); } + : function(arr, fn) { + for (var i = 0; i < arr.length; i++) fn(arr[i]); + }; + +/** + * Array#reduce shim. + */ + +var reduce = function(arr, fn, initial) { + if (typeof arr.reduce === 'function') return arr.reduce(fn, initial); + var res = initial; + for (var i = 0; i < arr.length; i++) res = fn(res, arr[i]); + return res; +}; + +/** + * Cache non-integer test regexp. + */ + +var isint = /^[0-9]+$/; + +function promote(parent, key) { + if (parent[key].length == 0) return parent[key] = {} + var t = {}; + for (var i in parent[key]) { + if (hasOwnProperty.call(parent[key], i)) { + t[i] = parent[key][i]; + } + } + parent[key] = t; + return t; +} + +function parse(parts, parent, key, val) { + var part = parts.shift(); + + // illegal + if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; + + // end + if (!part) { + if (isArray(parent[key])) { + parent[key].push(val); + } else if ('object' == typeof parent[key]) { + parent[key] = val; + } else if ('undefined' == typeof parent[key]) { + parent[key] = val; + } else { + parent[key] = [parent[key], val]; + } + // array + } else { + var obj = parent[key] = parent[key] || []; + if (']' == part) { + if (isArray(obj)) { + if ('' != val) obj.push(val); + } else if ('object' == typeof obj) { + obj[objectKeys(obj).length] = val; + } else { + obj = parent[key] = [parent[key], val]; + } + // prop + } else if (~indexOf(part, ']')) { + part = part.substr(0, part.length - 1); + if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); + parse(parts, obj, part, val); + // key + } else { + if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); + parse(parts, obj, part, val); + } + } +} + +/** + * Merge parent key/val pair. + */ + +function merge(parent, key, val){ + if (~indexOf(key, ']')) { + var parts = key.split('[') + , len = parts.length + , last = len - 1; + parse(parts, parent, 'base', val); + // optimize + } else { + if (!isint.test(key) && isArray(parent.base)) { + var t = {}; + for (var k in parent.base) t[k] = parent.base[k]; + parent.base = t; + } + set(parent.base, key, val); + } + + return parent; +} + +/** + * Compact sparse arrays. + */ + +function compact(obj) { + if ('object' != typeof obj) return obj; + + if (isArray(obj)) { + var ret = []; + + for (var i in obj) { + if (hasOwnProperty.call(obj, i)) { + ret.push(obj[i]); + } + } + + return ret; + } + + for (var key in obj) { + obj[key] = compact(obj[key]); + } + + return obj; +} + +/** + * Parse the given obj. + */ + +function parseObject(obj){ + var ret = { base: {} }; + + forEach(objectKeys(obj), function(name){ + merge(ret, name, obj[name]); + }); + + return compact(ret.base); +} + +/** + * Parse the given str. + */ + +function parseString(str){ + var ret = reduce(String(str).split('&'), function(ret, pair){ + var eql = indexOf(pair, '=') + , brace = lastBraceInKey(pair) + , key = pair.substr(0, brace || eql) + , val = pair.substr(brace || eql, pair.length) + , val = val.substr(indexOf(val, '=') + 1, val.length); + + // ?foo + if ('' == key) key = pair, val = ''; + if ('' == key) return ret; + + return merge(ret, decode(key), decode(val)); + }, { base: {} }).base; + + return compact(ret); +} + +/** + * Parse the given query `str` or `obj`, returning an object. + * + * @param {String} str | {Object} obj + * @return {Object} + * @api public + */ + +exports.parse = function(str){ + if (null == str || '' == str) return {}; + return 'object' == typeof str + ? parseObject(str) + : parseString(str); +}; + +/** + * Turn the given `obj` into a query string + * + * @param {Object} obj + * @return {String} + * @api public + */ + +var stringify = exports.stringify = function(obj, prefix) { + if (isArray(obj)) { + return stringifyArray(obj, prefix); + } else if ('[object Object]' == toString.call(obj)) { + return stringifyObject(obj, prefix); + } else if ('string' == typeof obj) { + return stringifyString(obj, prefix); + } else { + return prefix + '=' + encodeURIComponent(String(obj)); + } +}; + +/** + * Stringify the given `str`. + * + * @param {String} str + * @param {String} prefix + * @return {String} + * @api private + */ + +function stringifyString(str, prefix) { + if (!prefix) throw new TypeError('stringify expects an object'); + return prefix + '=' + encodeURIComponent(str); +} + +/** + * Stringify the given `arr`. + * + * @param {Array} arr + * @param {String} prefix + * @return {String} + * @api private + */ + +function stringifyArray(arr, prefix) { + var ret = []; + if (!prefix) throw new TypeError('stringify expects an object'); + for (var i = 0; i < arr.length; i++) { + ret.push(stringify(arr[i], prefix + '[' + i + ']')); + } + return ret.join('&'); +} + +/** + * Stringify the given `obj`. + * + * @param {Object} obj + * @param {String} prefix + * @return {String} + * @api private + */ + +function stringifyObject(obj, prefix) { + var ret = [] + , keys = objectKeys(obj) + , key; + + for (var i = 0, len = keys.length; i < len; ++i) { + key = keys[i]; + if ('' == key) continue; + if (null == obj[key]) { + ret.push(encodeURIComponent(key) + '='); + } else { + ret.push(stringify(obj[key], prefix + ? prefix + '[' + encodeURIComponent(key) + ']' + : encodeURIComponent(key))); + } + } + + return ret.join('&'); +} + +/** + * Set `obj`'s `key` to `val` respecting + * the weird and wonderful syntax of a qs, + * where "foo=bar&foo=baz" becomes an array. + * + * @param {Object} obj + * @param {String} key + * @param {String} val + * @api private + */ + +function set(obj, key, val) { + var v = obj[key]; + if (Object.getOwnPropertyDescriptor(Object.prototype, key)) return; + if (undefined === v) { + obj[key] = val; + } else if (isArray(v)) { + v.push(val); + } else { + obj[key] = [v, val]; + } +} + +/** + * Locate last brace in `str` within the key. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function lastBraceInKey(str) { + var len = str.length + , brace + , c; + for (var i = 0; i < len; ++i) { + c = str[i]; + if (']' == c) brace = false; + if ('[' == c) brace = true; + if ('=' == c && !brace) return i; + } +} + +/** + * Decode `str`. + * + * @param {String} str + * @return {String} + * @api private + */ + +function decode(str) { + try { + return decodeURIComponent(str.replace(/\+/g, ' ')); + } catch (err) { + return str; + } +} diff --git a/node_modules/express/node_modules/qs/package.json b/node_modules/express/node_modules/qs/package.json new file mode 100755 index 0000000..719725f --- /dev/null +++ b/node_modules/express/node_modules/qs/package.json @@ -0,0 +1,37 @@ +{ + "name": "qs", + "description": "querystring parser", + "version": "0.6.6", + "keywords": [ + "query string", + "parser", + "component" + ], + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/node-querystring.git" + }, + "devDependencies": { + "mocha": "*", + "expect.js": "*" + }, + "scripts": { + "test": "make test" + }, + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "main": "index", + "engines": { + "node": "*" + }, + "readme": "# node-querystring\n\n query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others.\n\n## Installation\n\n $ npm install qs\n\n## Examples\n\n```js\nvar qs = require('qs');\n\nqs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com');\n// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } }\n\nqs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }})\n// => user[name]=Tobi&user[email]=tobi%40learnboost.com\n```\n\n## Testing\n\nInstall dev dependencies:\n\n $ npm install -d\n\nand execute:\n\n $ make test\n\nbrowser:\n\n $ open test/browser/index.html\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/node-querystring/issues" + }, + "_id": "qs@0.6.6", + "_from": "qs@0.6.6" +} diff --git a/node_modules/express/node_modules/range-parser/.npmignore b/node_modules/express/node_modules/range-parser/.npmignore new file mode 100755 index 0000000..9daeafb --- /dev/null +++ b/node_modules/express/node_modules/range-parser/.npmignore @@ -0,0 +1 @@ +test diff --git a/node_modules/express/node_modules/range-parser/History.md b/node_modules/express/node_modules/range-parser/History.md new file mode 100755 index 0000000..b35ba51 --- /dev/null +++ b/node_modules/express/node_modules/range-parser/History.md @@ -0,0 +1,21 @@ + +1.0.0 / 2013-12-11 +================== + + * add repository to package.json + * add MIT license + +0.0.4 / 2012-06-17 +================== + + * changed: ret -1 for unsatisfiable and -2 when invalid + +0.0.3 / 2012-06-17 +================== + + * fix last-byte-pos default to len - 1 + +0.0.2 / 2012-06-14 +================== + + * add `.type` diff --git a/node_modules/express/node_modules/range-parser/Makefile b/node_modules/express/node_modules/range-parser/Makefile new file mode 100755 index 0000000..8e8640f --- /dev/null +++ b/node_modules/express/node_modules/range-parser/Makefile @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --reporter spec \ + --require should + +.PHONY: test \ No newline at end of file diff --git a/node_modules/express/node_modules/range-parser/Readme.md b/node_modules/express/node_modules/range-parser/Readme.md new file mode 100755 index 0000000..cb30a5a --- /dev/null +++ b/node_modules/express/node_modules/range-parser/Readme.md @@ -0,0 +1,53 @@ + +# node-range-parser + + Range header field parser. + +## Example: + +```js +assert(-1 == parse(200, 'bytes=500-20')); +assert(-2 == parse(200, 'bytes=malformed')); +parse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }])); +parse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }])); +parse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }])); +parse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }])); +parse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }])); +parse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }])); +parse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }])); +parse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }])); +parse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }])); +parse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }])); +parse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }])); +``` + +## Installation + +``` +$ npm install range-parser +``` + +## License + +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> + +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. \ No newline at end of file diff --git a/node_modules/express/node_modules/range-parser/index.js b/node_modules/express/node_modules/range-parser/index.js new file mode 100755 index 0000000..9b0f7a8 --- /dev/null +++ b/node_modules/express/node_modules/range-parser/index.js @@ -0,0 +1,49 @@ + +/** + * Parse "Range" header `str` relative to the given file `size`. + * + * @param {Number} size + * @param {String} str + * @return {Array} + * @api public + */ + +module.exports = function(size, str){ + var valid = true; + var i = str.indexOf('='); + + if (-1 == i) return -2; + + var arr = str.slice(i + 1).split(',').map(function(range){ + var range = range.split('-') + , start = parseInt(range[0], 10) + , end = parseInt(range[1], 10); + + // -nnn + if (isNaN(start)) { + start = size - end; + end = size - 1; + // nnn- + } else if (isNaN(end)) { + end = size - 1; + } + + // limit last-byte-pos to current length + if (end > size - 1) end = size - 1; + + // invalid + if (isNaN(start) + || isNaN(end) + || start > end + || start < 0) valid = false; + + return { + start: start, + end: end + }; + }); + + arr.type = str.slice(0, i); + + return valid ? arr : -1; +}; \ No newline at end of file diff --git a/node_modules/express/node_modules/range-parser/package.json b/node_modules/express/node_modules/range-parser/package.json new file mode 100755 index 0000000..a5e9be2 --- /dev/null +++ b/node_modules/express/node_modules/range-parser/package.json @@ -0,0 +1,37 @@ +{ + "name": "range-parser", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "description": "Range header field string parser", + "version": "1.0.0", + "repository": { + "type": "git", + "url": "https://github.com/visionmedia/node-range-parser.git" + }, + "main": "index.js", + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/visionmedia/node-range-parser#license" + } + ], + "readme": "\n# node-range-parser\n\n Range header field parser.\n\n## Example:\n\n```js\nassert(-1 == parse(200, 'bytes=500-20'));\nassert(-2 == parse(200, 'bytes=malformed'));\nparse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }]));\nparse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }]));\nparse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }]));\nparse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }]));\nparse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }]));\nparse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }]));\nparse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }]));\nparse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }]));\nparse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }]));\n```\n\n## Installation\n\n```\n$ npm install range-parser\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/node-range-parser/issues" + }, + "_id": "range-parser@1.0.0", + "dist": { + "shasum": "a9932fac2dceed3de5e20a3982195a256df0cf0c" + }, + "_from": "range-parser@1.0.0", + "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.0.tgz" +} diff --git a/node_modules/express/node_modules/send/.npmignore b/node_modules/express/node_modules/send/.npmignore new file mode 100755 index 0000000..223570e --- /dev/null +++ b/node_modules/express/node_modules/send/.npmignore @@ -0,0 +1,5 @@ +coverage +test +examples +.travis.yml +*.sock diff --git a/node_modules/express/node_modules/send/History.md b/node_modules/express/node_modules/send/History.md new file mode 100755 index 0000000..5474b10 --- /dev/null +++ b/node_modules/express/node_modules/send/History.md @@ -0,0 +1,92 @@ +0.4.3 / 2014-06-11 +================== + + * Do not throw un-catchable error on file open race condition + * Use `escape-html` for HTML escaping + * deps: debug@1.0.2 + - fix some debugging output colors on node.js 0.8 + * deps: finished@1.2.2 + * deps: fresh@0.2.2 + +0.4.2 / 2014-06-09 +================== + + * fix "event emitter leak" warnings + * deps: debug@1.0.1 + * deps: finished@1.2.1 + +0.4.1 / 2014-06-02 +================== + + * Send `max-age` in `Cache-Control` in correct format + +0.4.0 / 2014-05-27 +================== + + * Calculate ETag with md5 for reduced collisions + * Fix wrong behavior when index file matches directory + * Ignore stream errors after request ends + - Goodbye `EBADF, read` + * Skip directories in index file search + * deps: debug@0.8.1 + +0.3.0 / 2014-04-24 +================== + + * Fix sending files with dots without root set + * Coerce option types + * Accept API options in options object + * Set etags to "weak" + * Include file path in etag + * Make "Can't set headers after they are sent." catchable + * Send full entity-body for multi range requests + * Default directory access to 403 when index disabled + * Support multiple index paths + * Support "If-Range" header + * Control whether to generate etags + * deps: mime@1.2.11 + +0.2.0 / 2014-01-29 +================== + + * update range-parser and fresh + +0.1.4 / 2013-08-11 +================== + + * update fresh + +0.1.3 / 2013-07-08 +================== + + * Revert "Fix fd leak" + +0.1.2 / 2013-07-03 +================== + + * Fix fd leak + +0.1.0 / 2012-08-25 +================== + + * add options parameter to send() that is passed to fs.createReadStream() [kanongil] + +0.0.4 / 2012-08-16 +================== + + * allow custom "Accept-Ranges" definition + +0.0.3 / 2012-07-16 +================== + + * fix normalization of the root directory. Closes #3 + +0.0.2 / 2012-07-09 +================== + + * add passing of req explicitly for now (YUCK) + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/express/node_modules/send/Readme.md b/node_modules/express/node_modules/send/Readme.md new file mode 100755 index 0000000..4ccf9d2 --- /dev/null +++ b/node_modules/express/node_modules/send/Readme.md @@ -0,0 +1,160 @@ +# send + +[![NPM version](https://badge.fury.io/js/send.svg)](https://badge.fury.io/js/send) +[![Build Status](https://travis-ci.org/visionmedia/send.svg?branch=master)](https://travis-ci.org/visionmedia/send) +[![Coverage Status](https://img.shields.io/coveralls/visionmedia/send.svg?branch=master)](https://coveralls.io/r/visionmedia/send) + + Send is Connect's `static()` extracted for generalized use, a streaming static file + server supporting partial responses (Ranges), conditional-GET negotiation, high test coverage, and granular events which may be leveraged to take appropriate actions in your application or framework. + +## Installation + + $ npm install send + +## Examples + + Small: + +```js +var http = require('http'); +var send = require('send'); + +var app = http.createServer(function(req, res){ + send(req, req.url).pipe(res); +}).listen(3000); +``` + + Serving from a root directory with custom error-handling: + +```js +var http = require('http'); +var send = require('send'); +var url = require('url'); + +var app = http.createServer(function(req, res){ + // your custom error-handling logic: + function error(err) { + res.statusCode = err.status || 500; + res.end(err.message); + } + + // your custom directory handling logic: + function redirect() { + res.statusCode = 301; + res.setHeader('Location', req.url + '/'); + res.end('Redirecting to ' + req.url + '/'); + } + + // transfer arbitrary files from within + // /www/example.com/public/* + send(req, url.parse(req.url).pathname, {root: '/www/example.com/public'}) + .on('error', error) + .on('directory', redirect) + .pipe(res); +}).listen(3000); +``` + +## API + +### Options + +#### etag + + Enable or disable etag generation, defaults to true. + +#### hidden + + Enable or disable transfer of hidden files, defaults to false. + +#### index + + By default send supports "index.html" files, to disable this + set `false` or to supply a new index pass a string or an array + in preferred order. + +#### maxage + + Provide a max-age in milliseconds for http caching, defaults to 0. + +#### root + + Serve files relative to `path`. + +### Events + + - `error` an error occurred `(err)` + - `directory` a directory was requested + - `file` a file was requested `(path, stat)` + - `stream` file streaming has started `(stream)` + - `end` streaming has completed + +### .etag(bool) + + Enable or disable etag generation, defaults to true. + +### .root(dir) + + Serve files relative to `path`. Aliased as `.from(dir)`. + +### .index(paths) + + By default send supports "index.html" files, to disable this + invoke `.index(false)` or to supply a new index pass a string + or an array in preferred order. + +### .maxage(ms) + + Provide a max-age in milliseconds for http caching, defaults to 0. + +### .hidden(bool) + + Enable or disable transfer of hidden files, defaults to false. + +## Error-handling + + By default when no `error` listeners are present an automatic response will be made, otherwise you have full control over the response, aka you may show a 5xx page etc. + +## Caching + + It does _not_ perform internal caching, you should use a reverse proxy cache such + as Varnish for this, or those fancy things called CDNs. If your application is small enough that it would benefit from single-node memory caching, it's small enough that it does not need caching at all ;). + +## Debugging + + To enable `debug()` instrumentation output export __DEBUG__: + +``` +$ DEBUG=send node app +``` + +## Running tests + +``` +$ npm install +$ npm test +``` + +## License + +(The MIT License) + +Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> + +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/node_modules/express/node_modules/send/index.js b/node_modules/express/node_modules/send/index.js new file mode 100755 index 0000000..51b2b57 --- /dev/null +++ b/node_modules/express/node_modules/send/index.js @@ -0,0 +1,2 @@ + +module.exports = require('./lib/send'); diff --git a/node_modules/express/node_modules/send/lib/send.js b/node_modules/express/node_modules/send/lib/send.js new file mode 100755 index 0000000..ad52b22 --- /dev/null +++ b/node_modules/express/node_modules/send/lib/send.js @@ -0,0 +1,605 @@ + +/** + * Module dependencies. + */ + +var debug = require('debug')('send') +var escapeHtml = require('escape-html') + , parseRange = require('range-parser') + , Stream = require('stream') + , mime = require('mime') + , fresh = require('fresh') + , path = require('path') + , http = require('http') + , onFinished = require('finished') + , fs = require('fs') + , basename = path.basename + , normalize = path.normalize + , join = path.join + , utils = require('./utils'); + +var upPathRegexp = /(?:^|[\\\/])\.\.(?:[\\\/]|$)/; + +/** + * Expose `send`. + */ + +exports = module.exports = send; + +/** + * Expose mime module. + */ + +exports.mime = mime; + +/** + * Return a `SendStream` for `req` and `path`. + * + * @param {Request} req + * @param {String} path + * @param {Object} options + * @return {SendStream} + * @api public + */ + +function send(req, path, options) { + return new SendStream(req, path, options); +} + +/** + * Initialize a `SendStream` with the given `path`. + * + * Events: + * + * - `error` an error occurred + * - `stream` file streaming has started + * - `end` streaming has completed + * - `directory` a directory was requested + * + * @param {Request} req + * @param {String} path + * @param {Object} options + * @api private + */ + +function SendStream(req, path, options) { + var self = this; + options = options || {}; + this.req = req; + this.path = path; + this.options = options; + this.etag(('etag' in options) ? options.etag : true); + this.maxage(options.maxage); + this.hidden(options.hidden); + this.index(('index' in options) ? options.index : 'index.html'); + if (options.root || options.from) this.root(options.root || options.from); +} + +/** + * Inherits from `Stream.prototype`. + */ + +SendStream.prototype.__proto__ = Stream.prototype; + +/** + * Enable or disable etag generation. + * + * @param {Boolean} val + * @return {SendStream} + * @api public + */ + +SendStream.prototype.etag = function(val){ + val = Boolean(val); + debug('etag %s', val); + this._etag = val; + return this; +}; + +/** + * Enable or disable "hidden" (dot) files. + * + * @param {Boolean} path + * @return {SendStream} + * @api public + */ + +SendStream.prototype.hidden = function(val){ + val = Boolean(val); + debug('hidden %s', val); + this._hidden = val; + return this; +}; + +/** + * Set index `paths`, set to a falsy + * value to disable index support. + * + * @param {String|Boolean|Array} paths + * @return {SendStream} + * @api public + */ + +SendStream.prototype.index = function index(paths){ + var index = !paths ? [] : Array.isArray(paths) ? paths : [paths]; + debug('index %o', paths); + this._index = index; + return this; +}; + +/** + * Set root `path`. + * + * @param {String} path + * @return {SendStream} + * @api public + */ + +SendStream.prototype.root = +SendStream.prototype.from = function(path){ + path = String(path); + this._root = normalize(path); + return this; +}; + +/** + * Set max-age to `ms`. + * + * @param {Number} ms + * @return {SendStream} + * @api public + */ + +SendStream.prototype.maxage = function(ms){ + ms = Number(ms); + if (isNaN(ms)) ms = 0; + if (Infinity == ms) ms = 60 * 60 * 24 * 365 * 1000; + debug('max-age %d', ms); + this._maxage = ms; + return this; +}; + +/** + * Emit error with `status`. + * + * @param {Number} status + * @api private + */ + +SendStream.prototype.error = function(status, err){ + var res = this.res; + var msg = http.STATUS_CODES[status]; + + err = err || new Error(msg); + err.status = status; + + // emit if listeners instead of responding + if (this.listeners('error').length) { + return this.emit('error', err); + } + + // wipe all existing headers + res._headers = undefined; + + res.statusCode = err.status; + res.end(msg); +}; + +/** + * Check if the pathname is potentially malicious. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isMalicious = function(){ + return !this._root && ~this.path.indexOf('..') && upPathRegexp.test(this.path); +}; + +/** + * Check if the pathname ends with "/". + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.hasTrailingSlash = function(){ + return '/' == this.path[this.path.length - 1]; +}; + +/** + * Check if the basename leads with ".". + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.hasLeadingDot = function(){ + return '.' == basename(this.path)[0]; +}; + +/** + * Check if this is a conditional GET request. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isConditionalGET = function(){ + return this.req.headers['if-none-match'] + || this.req.headers['if-modified-since']; +}; + +/** + * Strip content-* header fields. + * + * @api private + */ + +SendStream.prototype.removeContentHeaderFields = function(){ + var res = this.res; + Object.keys(res._headers).forEach(function(field){ + if (0 == field.indexOf('content')) { + res.removeHeader(field); + } + }); +}; + +/** + * Respond with 304 not modified. + * + * @api private + */ + +SendStream.prototype.notModified = function(){ + var res = this.res; + debug('not modified'); + this.removeContentHeaderFields(); + res.statusCode = 304; + res.end(); +}; + +/** + * Raise error that headers already sent. + * + * @api private + */ + +SendStream.prototype.headersAlreadySent = function headersAlreadySent(){ + var err = new Error('Can\'t set headers after they are sent.'); + debug('headers already sent'); + this.error(500, err); +}; + +/** + * Check if the request is cacheable, aka + * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}). + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isCachable = function(){ + var res = this.res; + return (res.statusCode >= 200 && res.statusCode < 300) || 304 == res.statusCode; +}; + +/** + * Handle stat() error. + * + * @param {Error} err + * @api private + */ + +SendStream.prototype.onStatError = function(err){ + var notfound = ['ENOENT', 'ENAMETOOLONG', 'ENOTDIR']; + if (~notfound.indexOf(err.code)) return this.error(404, err); + this.error(500, err); +}; + +/** + * Check if the cache is fresh. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isFresh = function(){ + return fresh(this.req.headers, this.res._headers); +}; + +/** + * Check if the range is fresh. + * + * @return {Boolean} + * @api private + */ + +SendStream.prototype.isRangeFresh = function isRangeFresh(){ + var ifRange = this.req.headers['if-range']; + + if (!ifRange) return true; + + return ~ifRange.indexOf('"') + ? ~ifRange.indexOf(this.res._headers['etag']) + : Date.parse(this.res._headers['last-modified']) <= Date.parse(ifRange); +}; + +/** + * Redirect to `path`. + * + * @param {String} path + * @api private + */ + +SendStream.prototype.redirect = function(path){ + if (this.listeners('directory').length) return this.emit('directory'); + if (this.hasTrailingSlash()) return this.error(403); + var res = this.res; + path += '/'; + res.statusCode = 301; + res.setHeader('Location', path); + res.end('Redirecting to ' + escapeHtml(path)); +}; + +/** + * Pipe to `res. + * + * @param {Stream} res + * @return {Stream} res + * @api public + */ + +SendStream.prototype.pipe = function(res){ + var self = this + , args = arguments + , path = this.path + , root = this._root; + + // references + this.res = res; + + // invalid request uri + path = utils.decode(path); + if (-1 == path) return this.error(400); + + // null byte(s) + if (~path.indexOf('\0')) return this.error(400); + + // join / normalize from optional root dir + if (root) path = normalize(join(this._root, path)); + + // ".." is malicious without "root" + if (this.isMalicious()) return this.error(403); + + // malicious path + if (root && 0 != path.indexOf(root)) return this.error(403); + + // hidden file support + if (!this._hidden && this.hasLeadingDot()) return this.error(404); + + // index file support + if (this._index.length && this.hasTrailingSlash()) { + this.sendIndex(path); + return res; + } + + debug('stat "%s"', path); + fs.stat(path, function(err, stat){ + if (err) return self.onStatError(err); + if (stat.isDirectory()) return self.redirect(self.path); + self.emit('file', path, stat); + self.send(path, stat); + }); + + return res; +}; + +/** + * Transfer `path`. + * + * @param {String} path + * @api public + */ + +SendStream.prototype.send = function(path, stat){ + var options = this.options; + var len = stat.size; + var res = this.res; + var req = this.req; + var ranges = req.headers.range; + var offset = options.start || 0; + + if (res._header) { + // impossible to send now + return this.headersAlreadySent(); + } + + // set header fields + this.setHeader(path, stat); + + // set content-type + this.type(path); + + // conditional GET support + if (this.isConditionalGET() + && this.isCachable() + && this.isFresh()) { + return this.notModified(); + } + + // adjust len to start/end options + len = Math.max(0, len - offset); + if (options.end !== undefined) { + var bytes = options.end - offset + 1; + if (len > bytes) len = bytes; + } + + // Range support + if (ranges) { + ranges = parseRange(len, ranges); + + // If-Range support + if (!this.isRangeFresh()) { + debug('range stale'); + ranges = -2; + } + + // unsatisfiable + if (-1 == ranges) { + debug('range unsatisfiable'); + res.setHeader('Content-Range', 'bytes */' + stat.size); + return this.error(416); + } + + // valid (syntactically invalid/multiple ranges are treated as a regular response) + if (-2 != ranges && ranges.length === 1) { + debug('range %j', ranges); + + options.start = offset + ranges[0].start; + options.end = offset + ranges[0].end; + + // Content-Range + res.statusCode = 206; + res.setHeader('Content-Range', 'bytes ' + + ranges[0].start + + '-' + + ranges[0].end + + '/' + + len); + len = options.end - options.start + 1; + } + } + + // content-length + res.setHeader('Content-Length', len); + + // HEAD support + if ('HEAD' == req.method) return res.end(); + + this.stream(path, options); +}; + +/** + * Transfer index for `path`. + * + * @param {String} path + * @api private + */ +SendStream.prototype.sendIndex = function sendIndex(path){ + var i = -1; + var self = this; + + function next(err){ + if (++i >= self._index.length) { + if (err) return self.onStatError(err); + return self.error(404); + } + + var p = path + self._index[i]; + + debug('stat "%s"', p); + fs.stat(p, function(err, stat){ + if (err) return next(err); + if (stat.isDirectory()) return next(); + self.emit('file', p, stat); + self.send(p, stat); + }); + } + + if (!this.hasTrailingSlash()) path += '/'; + + next(); +}; + +/** + * Stream `path` to the response. + * + * @param {String} path + * @param {Object} options + * @api private + */ + +SendStream.prototype.stream = function(path, options){ + // TODO: this is all lame, refactor meeee + var finished = false; + var self = this; + var res = this.res; + var req = this.req; + + // pipe + var stream = fs.createReadStream(path, options); + this.emit('stream', stream); + stream.pipe(res); + + // response finished, done with the fd + onFinished(res, function onfinished(){ + finished = true; + stream.destroy(); + }); + + // error handling code-smell + stream.on('error', function onerror(err){ + // request already finished + if (finished) return; + + // clean up stream + finished = true; + stream.destroy(); + + // no hope in responding + if (res._header) { + console.error(err.stack); + req.destroy(); + return; + } + + // error + self.onStatError(err); + }); + + // end + stream.on('end', function onend(){ + self.emit('end'); + }); +}; + +/** + * Set content-type based on `path` + * if it hasn't been explicitly set. + * + * @param {String} path + * @api private + */ + +SendStream.prototype.type = function(path){ + var res = this.res; + if (res.getHeader('Content-Type')) return; + var type = mime.lookup(path); + var charset = mime.charsets.lookup(type); + debug('content-type %s', type); + res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : '')); +}; + +/** + * Set response header fields, most + * fields may be pre-defined. + * + * @param {String} path + * @param {Object} stat + * @api private + */ + +SendStream.prototype.setHeader = function setHeader(path, stat){ + var res = this.res; + if (!res.getHeader('Accept-Ranges')) res.setHeader('Accept-Ranges', 'bytes'); + if (!res.getHeader('Date')) res.setHeader('Date', new Date().toUTCString()); + if (!res.getHeader('Cache-Control')) res.setHeader('Cache-Control', 'public, max-age=' + Math.floor(this._maxage / 1000)); + if (!res.getHeader('Last-Modified')) res.setHeader('Last-Modified', stat.mtime.toUTCString()); + + if (this._etag && !res.getHeader('ETag')) { + var etag = utils.etag(path, stat); + debug('etag %s', etag); + res.setHeader('ETag', etag); + } +}; diff --git a/node_modules/express/node_modules/send/lib/utils.js b/node_modules/express/node_modules/send/lib/utils.js new file mode 100755 index 0000000..3a88bf9 --- /dev/null +++ b/node_modules/express/node_modules/send/lib/utils.js @@ -0,0 +1,42 @@ + +/** + * Module dependencies. + */ + +var crypto = require('crypto'); + +/** + * Return a weak ETag from the given `path` and `stat`. + * + * @param {String} path + * @param {Object} stat + * @return {String} + * @api private + */ + +exports.etag = function etag(path, stat) { + var tag = String(stat.mtime.getTime()) + ':' + String(stat.size) + ':' + path; + var str = crypto + .createHash('md5') + .update(tag, 'utf8') + .digest('base64'); + return 'W/"' + str + '"'; +}; + +/** + * decodeURIComponent. + * + * Allows V8 to only deoptimize this fn instead of all + * of send(). + * + * @param {String} path + * @api private + */ + +exports.decode = function(path){ + try { + return decodeURIComponent(path); + } catch (err) { + return -1; + } +}; diff --git a/node_modules/express/node_modules/send/node_modules/finished/.npmignore b/node_modules/express/node_modules/send/node_modules/finished/.npmignore new file mode 100755 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/express/node_modules/send/node_modules/finished/HISTORY.md b/node_modules/express/node_modules/send/node_modules/finished/HISTORY.md new file mode 100755 index 0000000..8937250 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/HISTORY.md @@ -0,0 +1,50 @@ +1.2.2 / 2014-06-10 +========== + + * reduce listeners added to emitters + - avoids "event emitter leak" warnings when used multiple times on same request + +1.2.1 / 2014-06-08 +================== + + * fix returned value when already finished + +1.2.0 / 2014-06-05 +================== + + * call callback when called on already-finished socket + +1.1.4 / 2014-05-27 +================== + + * support node.js 0.8 + +1.1.3 / 2014-04-30 +================== + + * make sure errors passed as instanceof `Error` + +1.1.2 / 2014-04-18 +================== + + * default the `socket` to passed-in object + +1.1.1 / 2014-01-16 +================== + + * rename module to `finished` + +1.1.0 / 2013-12-25 +================== + + * call callback when called on already-errored socket + +1.0.1 / 2013-12-20 +================== + + * actually pass the error to the callback + +1.0.0 / 2013-12-20 +================== + + * Initial release diff --git a/node_modules/express/node_modules/send/node_modules/finished/README.md b/node_modules/express/node_modules/send/node_modules/finished/README.md new file mode 100755 index 0000000..79facd5 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/README.md @@ -0,0 +1,88 @@ +# finished + +[![NPM Version](https://badge.fury.io/js/finished.svg)](http://badge.fury.io/js/finished) +[![Build Status](https://travis-ci.org/expressjs/finished.svg?branch=master)](https://travis-ci.org/expressjs/finished) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/finished.svg?branch=master)](https://coveralls.io/r/expressjs/finished) + +Execute a callback when a request closes, finishes, or errors. + +#### Install + +```sh +$ npm install finished +``` + +#### Uses + +This is useful for cleaning up streams. For example, you want to destroy any file streams you create on socket errors otherwise you will leak file descriptors. + +This is required to fix what many perceive as issues with node's streams. Relevant: + +- [node#6041](https://github.com/joyent/node/issues/6041) +- [koa#184](https://github.com/koajs/koa/issues/184) +- [koa#165](https://github.com/koajs/koa/issues/165) + +## API + +### finished(response, callback) + +```js +var onFinished = require('finished') + +onFinished(res, function (err) { + // do something maybe +}) +``` + +### Examples + +The following code ensures that file descriptors are always closed once the response finishes. + +#### Node / Connect / Express + +```js +var onFinished = require('finished') + +function (req, res, next) { + var stream = fs.createReadStream('thingie.json') + stream.pipe(res) + onFinished(res, function (err) { + stream.destroy() + }) +} +``` + +#### Koa + +```js +function* () { + var stream = this.body = fs.createReadStream('thingie.json') + onFinished(this, function (err) { + stream.destroy() + }) +} +``` + +## License + +The MIT License (MIT) + +Copyright (c) 2013 Jonathan Ong me@jongleberry.com + +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/node_modules/express/node_modules/send/node_modules/finished/index.js b/node_modules/express/node_modules/send/node_modules/finished/index.js new file mode 100755 index 0000000..90709d4 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/index.js @@ -0,0 +1,62 @@ +/*! + * finished + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ + +/** +* Module dependencies. +*/ + +var first = require('ee-first') + +/** +* Variables. +*/ + +/* istanbul ignore next */ +var defer = typeof setImmediate === 'function' + ? setImmediate + : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) } + +/** + * Invoke callback when the response has finished, useful for + * cleaning up resources afterwards. + * + * @param {object} thingie + * @param {function} callback + * @return {object} + * @api public + */ + +module.exports = function finished(thingie, callback) { + var socket = thingie.socket || thingie + var res = thingie.res || thingie + + if (res.finished || !socket.writable) { + defer(callback) + return thingie + } + + var listener = res.__onFinished + + // create a private single listener with queue + if (!listener || !listener.queue) { + listener = res.__onFinished = function onFinished(err) { + if (res.__onFinished === listener) res.__onFinished = null + var queue = listener.queue || [] + while (queue.length) queue.shift()(err) + } + listener.queue = [] + + // finished on first event + first([ + [socket, 'error', 'close'], + [res, 'finish'], + ], listener) + } + + listener.queue.push(callback) + + return thingie +} diff --git a/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/.npmignore b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/.npmignore new file mode 100755 index 0000000..72921ab --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/.npmignore @@ -0,0 +1,2 @@ +.DS_Store* +node_modules diff --git a/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/LICENSE b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/LICENSE new file mode 100755 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +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/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/README.md b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/README.md new file mode 100755 index 0000000..7eae173 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/README.md @@ -0,0 +1,5 @@ + +# EE First + +Get the first event in a set of event emitters and event pairs, +then clean up after itself. diff --git a/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/index.js b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/index.js new file mode 100755 index 0000000..d0c48c9 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/index.js @@ -0,0 +1,60 @@ + +module.exports = function first(stuff, done) { + if (!Array.isArray(stuff)) + throw new TypeError('arg must be an array of [ee, events...] arrays') + + var cleanups = [] + + for (var i = 0; i < stuff.length; i++) { + var arr = stuff[i] + + if (!Array.isArray(arr) || arr.length < 2) + throw new TypeError('each array member must be [ee, events...]') + + var ee = arr[0] + + for (var j = 1; j < arr.length; j++) { + var event = arr[j] + var fn = listener(event, cleanup) + + // listen to the event + ee.on(event, fn) + // push this listener to the list of cleanups + cleanups.push({ + ee: ee, + event: event, + fn: fn, + }) + } + } + + return function (fn) { + done = fn + } + + function cleanup() { + var x + for (var i = 0; i < cleanups.length; i++) { + x = cleanups[i] + x.ee.removeListener(x.event, x.fn) + } + done.apply(null, arguments) + } +} + +function listener(event, done) { + return function onevent(arg1) { + var args = new Array(arguments.length) + var ee = this + var err = event === 'error' + ? arg1 + : null + + // copy args to prevent arguments escaping scope + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + + done(err, ee, event, args) + } +} diff --git a/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/package.json b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/package.json new file mode 100755 index 0000000..334a996 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/package.json @@ -0,0 +1,28 @@ +{ + "name": "ee-first", + "description": "return the first event in a set of ee/event pairs", + "version": "1.0.3", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/jonathanong/ee-first" + }, + "devDependencies": { + "mocha": "1" + }, + "scripts": { + "test": "mocha --reporter spec" + }, + "readme": "\n# EE First\n\nGet the first event in a set of event emitters and event pairs,\nthen clean up after itself.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/jonathanong/ee-first/issues" + }, + "_id": "ee-first@1.0.3", + "_from": "ee-first@1.0.3" +} diff --git a/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/test.js b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/test.js new file mode 100755 index 0000000..adff984 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/node_modules/ee-first/test.js @@ -0,0 +1,60 @@ + +var EventEmitter = require('events').EventEmitter +var assert = require('assert') + +var first = require('./') + +describe('first', function () { + var ee1 = new EventEmitter() + var ee2 = new EventEmitter() + var ee3 = new EventEmitter() + + it('should emit the first event', function (done) { + first([ + [ee1, 'a', 'b', 'c'], + [ee2, 'a', 'b', 'c'], + [ee3, 'a', 'b', 'c'], + ], function (err, ee, event, args) { + assert.ifError(err) + assert.equal(ee, ee2) + assert.equal(event, 'b') + assert.deepEqual(args, [1, 2, 3]) + done() + }) + + ee2.emit('b', 1, 2, 3) + }) + + it('it should return an error if event === error', function (done) { + first([ + [ee1, 'error', 'b', 'c'], + [ee2, 'error', 'b', 'c'], + [ee3, 'error', 'b', 'c'], + ], function (err, ee, event, args) { + assert.equal(err.message, 'boom') + assert.equal(ee, ee3) + assert.equal(event, 'error') + done() + }) + + ee3.emit('error', new Error('boom')) + }) + + it('should cleanup after itself', function (done) { + first([ + [ee1, 'a', 'b', 'c'], + [ee2, 'a', 'b', 'c'], + [ee3, 'a', 'b', 'c'], + ], function (err, ee, event, args) { + assert.ifError(err) + ;[ee1, ee2, ee3].forEach(function (ee) { + ['a', 'b', 'c'].forEach(function (event) { + assert(!ee.listeners(event).length) + }) + }) + done() + }) + + ee1.emit('a') + }) +}) diff --git a/node_modules/express/node_modules/send/node_modules/finished/package.json b/node_modules/express/node_modules/send/node_modules/finished/package.json new file mode 100755 index 0000000..1280430 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/finished/package.json @@ -0,0 +1,38 @@ +{ + "name": "finished", + "description": "Execute a callback when a request closes, finishes, or errors", + "version": "1.2.2", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/expressjs/finished" + }, + "dependencies": { + "ee-first": "1.0.3" + }, + "devDependencies": { + "istanbul": "0.2.10", + "mocha": "~1.20.1", + "should": "~4.0.1" + }, + "engine": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --reporter spec test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec test/" + }, + "readme": "# finished\n\n[![NPM Version](https://badge.fury.io/js/finished.svg)](http://badge.fury.io/js/finished)\n[![Build Status](https://travis-ci.org/expressjs/finished.svg?branch=master)](https://travis-ci.org/expressjs/finished)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/finished.svg?branch=master)](https://coveralls.io/r/expressjs/finished)\n\nExecute a callback when a request closes, finishes, or errors.\n\n#### Install\n\n```sh\n$ npm install finished\n```\n\n#### Uses\n\nThis is useful for cleaning up streams. For example, you want to destroy any file streams you create on socket errors otherwise you will leak file descriptors.\n\nThis is required to fix what many perceive as issues with node's streams. Relevant:\n\n- [node#6041](https://github.com/joyent/node/issues/6041)\n- [koa#184](https://github.com/koajs/koa/issues/184)\n- [koa#165](https://github.com/koajs/koa/issues/165)\n\n## API\n\n### finished(response, callback)\n\n```js\nvar onFinished = require('finished')\n\nonFinished(res, function (err) {\n // do something maybe\n})\n```\n\n### Examples\n\nThe following code ensures that file descriptors are always closed once the response finishes.\n\n#### Node / Connect / Express\n\n```js\nvar onFinished = require('finished')\n\nfunction (req, res, next) {\n var stream = fs.createReadStream('thingie.json')\n stream.pipe(res)\n onFinished(res, function (err) {\n stream.destroy()\n })\n}\n```\n\n#### Koa\n\n```js\nfunction* () {\n var stream = this.body = fs.createReadStream('thingie.json')\n onFinished(this, function (err) {\n stream.destroy()\n })\n}\n```\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/finished/issues" + }, + "_id": "finished@1.2.2", + "_from": "finished@1.2.2" +} diff --git a/node_modules/express/node_modules/send/node_modules/mime/LICENSE b/node_modules/express/node_modules/send/node_modules/mime/LICENSE new file mode 100755 index 0000000..451fc45 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/mime/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010 Benjamin Thomas, Robert Kieffer + +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/node_modules/express/node_modules/send/node_modules/mime/README.md b/node_modules/express/node_modules/send/node_modules/mime/README.md new file mode 100755 index 0000000..6ca19bd --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/mime/README.md @@ -0,0 +1,66 @@ +# mime + +Comprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community. + +## Install + +Install with [npm](http://github.com/isaacs/npm): + + npm install mime + +## API - Queries + +### mime.lookup(path) +Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. + + var mime = require('mime'); + + mime.lookup('/path/to/file.txt'); // => 'text/plain' + mime.lookup('file.txt'); // => 'text/plain' + mime.lookup('.TXT'); // => 'text/plain' + mime.lookup('htm'); // => 'text/html' + +### mime.default_type +Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) + +### mime.extension(type) +Get the default extension for `type` + + mime.extension('text/html'); // => 'html' + mime.extension('application/octet-stream'); // => 'bin' + +### mime.charsets.lookup() + +Map mime-type to charset + + mime.charsets.lookup('text/plain'); // => 'UTF-8' + +(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) + +## API - Defining Custom Types + +The following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types). + +### mime.define() + +Add custom mime/extension mappings + + mime.define({ + 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], + 'application/x-my-type': ['x-mt', 'x-mtt'], + // etc ... + }); + + mime.lookup('x-sft'); // => 'text/x-some-format' + +The first entry in the extensions array is returned by `mime.extension()`. E.g. + + mime.extension('text/x-some-format'); // => 'x-sf' + +### mime.load(filepath) + +Load mappings from an Apache ".types" format file + + mime.load('./my_project.types'); + +The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/express/node_modules/send/node_modules/mime/mime.js b/node_modules/express/node_modules/send/node_modules/mime/mime.js new file mode 100755 index 0000000..48be0c5 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/mime/mime.js @@ -0,0 +1,114 @@ +var path = require('path'); +var fs = require('fs'); + +function Mime() { + // Map of extension -> mime type + this.types = Object.create(null); + + // Map of mime type -> extension + this.extensions = Object.create(null); +} + +/** + * Define mimetype -> extension mappings. Each key is a mime-type that maps + * to an array of extensions associated with the type. The first extension is + * used as the default extension for the type. + * + * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); + * + * @param map (Object) type definitions + */ +Mime.prototype.define = function (map) { + for (var type in map) { + var exts = map[type]; + + for (var i = 0; i < exts.length; i++) { + if (process.env.DEBUG_MIME && this.types[exts]) { + console.warn(this._loading.replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + + this.types[exts] + ' to ' + type); + } + + this.types[exts[i]] = type; + } + + // Default extension is the first one we encounter + if (!this.extensions[type]) { + this.extensions[type] = exts[0]; + } + } +}; + +/** + * Load an Apache2-style ".types" file + * + * This may be called multiple times (it's expected). Where files declare + * overlapping types/extensions, the last file wins. + * + * @param file (String) path of file to load. + */ +Mime.prototype.load = function(file) { + + this._loading = file; + // Read file and split into lines + var map = {}, + content = fs.readFileSync(file, 'ascii'), + lines = content.split(/[\r\n]+/); + + lines.forEach(function(line) { + // Clean up whitespace/comments, and split into fields + var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); + map[fields.shift()] = fields; + }); + + this.define(map); + + this._loading = null; +}; + +/** + * Lookup a mime type based on extension + */ +Mime.prototype.lookup = function(path, fallback) { + var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase(); + + return this.types[ext] || fallback || this.default_type; +}; + +/** + * Return file extension associated with a mime type + */ +Mime.prototype.extension = function(mimeType) { + var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); + return this.extensions[type]; +}; + +// Default instance +var mime = new Mime(); + +// Load local copy of +// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types +mime.load(path.join(__dirname, 'types/mime.types')); + +// Load additional types from node.js community +mime.load(path.join(__dirname, 'types/node.types')); + +// Default type +mime.default_type = mime.lookup('bin'); + +// +// Additional API specific to the default instance +// + +mime.Mime = Mime; + +/** + * Lookup a charset based on mime type. + */ +mime.charsets = { + lookup: function(mimeType, fallback) { + // Assume text types are utf8 + return (/^text\//).test(mimeType) ? 'UTF-8' : fallback; + } +}; + +module.exports = mime; diff --git a/node_modules/express/node_modules/send/node_modules/mime/package.json b/node_modules/express/node_modules/send/node_modules/mime/package.json new file mode 100755 index 0000000..37db567 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/mime/package.json @@ -0,0 +1,35 @@ +{ + "author": { + "name": "Robert Kieffer", + "email": "robert@broofa.com", + "url": "http://github.com/broofa" + }, + "contributors": [ + { + "name": "Benjamin Thomas", + "email": "benjamin@benjaminthomas.org", + "url": "http://github.com/bentomas" + } + ], + "dependencies": {}, + "description": "A comprehensive library for mime-type mapping", + "devDependencies": {}, + "keywords": [ + "util", + "mime" + ], + "main": "mime.js", + "name": "mime", + "repository": { + "url": "https://github.com/broofa/node-mime", + "type": "git" + }, + "version": "1.2.11", + "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/broofa/node-mime/issues" + }, + "_id": "mime@1.2.11", + "_from": "mime@1.2.11" +} diff --git a/node_modules/express/node_modules/send/node_modules/mime/test.js b/node_modules/express/node_modules/send/node_modules/mime/test.js new file mode 100755 index 0000000..2cda1c7 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/mime/test.js @@ -0,0 +1,84 @@ +/** + * Usage: node test.js + */ + +var mime = require('./mime'); +var assert = require('assert'); +var path = require('path'); + +function eq(a, b) { + console.log('Test: ' + a + ' === ' + b); + assert.strictEqual.apply(null, arguments); +} + +console.log(Object.keys(mime.extensions).length + ' types'); +console.log(Object.keys(mime.types).length + ' extensions\n'); + +// +// Test mime lookups +// + +eq('text/plain', mime.lookup('text.txt')); // normal file +eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase +eq('text/plain', mime.lookup('dir/text.txt')); // dir + file +eq('text/plain', mime.lookup('.text.txt')); // hidden file +eq('text/plain', mime.lookup('.txt')); // nameless +eq('text/plain', mime.lookup('txt')); // extension-only +eq('text/plain', mime.lookup('/txt')); // extension-less () +eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less +eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized +eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default + +// +// Test extensions +// + +eq('txt', mime.extension(mime.types.text)); +eq('html', mime.extension(mime.types.htm)); +eq('bin', mime.extension('application/octet-stream')); +eq('bin', mime.extension('application/octet-stream ')); +eq('html', mime.extension(' text/html; charset=UTF-8')); +eq('html', mime.extension('text/html; charset=UTF-8 ')); +eq('html', mime.extension('text/html; charset=UTF-8')); +eq('html', mime.extension('text/html ; charset=UTF-8')); +eq('html', mime.extension('text/html;charset=UTF-8')); +eq('html', mime.extension('text/Html;charset=UTF-8')); +eq(undefined, mime.extension('unrecognized')); + +// +// Test node.types lookups +// + +eq('application/font-woff', mime.lookup('file.woff')); +eq('application/octet-stream', mime.lookup('file.buffer')); +eq('audio/mp4', mime.lookup('file.m4a')); +eq('font/opentype', mime.lookup('file.otf')); + +// +// Test charsets +// + +eq('UTF-8', mime.charsets.lookup('text/plain')); +eq(undefined, mime.charsets.lookup(mime.types.js)); +eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); + +// +// Test for overlaps between mime.types and node.types +// + +var apacheTypes = new mime.Mime(), nodeTypes = new mime.Mime(); +apacheTypes.load(path.join(__dirname, 'types/mime.types')); +nodeTypes.load(path.join(__dirname, 'types/node.types')); + +var keys = [].concat(Object.keys(apacheTypes.types)) + .concat(Object.keys(nodeTypes.types)); +keys.sort(); +for (var i = 1; i < keys.length; i++) { + if (keys[i] == keys[i-1]) { + console.warn('Warning: ' + + 'node.types defines ' + keys[i] + '->' + nodeTypes.types[keys[i]] + + ', mime.types defines ' + keys[i] + '->' + apacheTypes.types[keys[i]]); + } +} + +console.log('\nOK'); diff --git a/node_modules/express/node_modules/send/node_modules/mime/types/mime.types b/node_modules/express/node_modules/send/node_modules/mime/types/mime.types new file mode 100755 index 0000000..da8cd69 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/mime/types/mime.types @@ -0,0 +1,1588 @@ +# This file maps Internet media types to unique file extension(s). +# Although created for httpd, this file is used by many software systems +# and has been placed in the public domain for unlimited redisribution. +# +# The table below contains both registered and (common) unregistered types. +# A type that has no unique extension can be ignored -- they are listed +# here to guide configurations toward known types and to make it easier to +# identify "new" types. File extensions are also commonly used to indicate +# content languages and encodings, so choose them carefully. +# +# Internet media types should be registered as described in RFC 4288. +# The registry is at . +# +# MIME type (lowercased) Extensions +# ============================================ ========== +# application/1d-interleaved-parityfec +# application/3gpp-ims+xml +# application/activemessage +application/andrew-inset ez +# application/applefile +application/applixware aw +application/atom+xml atom +application/atomcat+xml atomcat +# application/atomicmail +application/atomsvc+xml atomsvc +# application/auth-policy+xml +# application/batch-smtp +# application/beep+xml +# application/calendar+xml +# application/cals-1840 +# application/ccmp+xml +application/ccxml+xml ccxml +application/cdmi-capability cdmia +application/cdmi-container cdmic +application/cdmi-domain cdmid +application/cdmi-object cdmio +application/cdmi-queue cdmiq +# application/cea-2018+xml +# application/cellml+xml +# application/cfw +# application/cnrp+xml +# application/commonground +# application/conference-info+xml +# application/cpl+xml +# application/csta+xml +# application/cstadata+xml +application/cu-seeme cu +# application/cybercash +application/davmount+xml davmount +# application/dca-rft +# application/dec-dx +# application/dialog-info+xml +# application/dicom +# application/dns +application/docbook+xml dbk +# application/dskpp+xml +application/dssc+der dssc +application/dssc+xml xdssc +# application/dvcs +application/ecmascript ecma +# application/edi-consent +# application/edi-x12 +# application/edifact +application/emma+xml emma +# application/epp+xml +application/epub+zip epub +# application/eshop +# application/example +application/exi exi +# application/fastinfoset +# application/fastsoap +# application/fits +application/font-tdpfr pfr +# application/framework-attributes+xml +application/gml+xml gml +application/gpx+xml gpx +application/gxf gxf +# application/h224 +# application/held+xml +# application/http +application/hyperstudio stk +# application/ibe-key-request+xml +# application/ibe-pkg-reply+xml +# application/ibe-pp-data +# application/iges +# application/im-iscomposing+xml +# application/index +# application/index.cmd +# application/index.obj +# application/index.response +# application/index.vnd +application/inkml+xml ink inkml +# application/iotp +application/ipfix ipfix +# application/ipp +# application/isup +application/java-archive jar +application/java-serialized-object ser +application/java-vm class +application/javascript js +application/json json +application/jsonml+json jsonml +# application/kpml-request+xml +# application/kpml-response+xml +application/lost+xml lostxml +application/mac-binhex40 hqx +application/mac-compactpro cpt +# application/macwriteii +application/mads+xml mads +application/marc mrc +application/marcxml+xml mrcx +application/mathematica ma nb mb +# application/mathml-content+xml +# application/mathml-presentation+xml +application/mathml+xml mathml +# application/mbms-associated-procedure-description+xml +# application/mbms-deregister+xml +# application/mbms-envelope+xml +# application/mbms-msk+xml +# application/mbms-msk-response+xml +# application/mbms-protection-description+xml +# application/mbms-reception-report+xml +# application/mbms-register+xml +# application/mbms-register-response+xml +# application/mbms-user-service-description+xml +application/mbox mbox +# application/media_control+xml +application/mediaservercontrol+xml mscml +application/metalink+xml metalink +application/metalink4+xml meta4 +application/mets+xml mets +# application/mikey +application/mods+xml mods +# application/moss-keys +# application/moss-signature +# application/mosskey-data +# application/mosskey-request +application/mp21 m21 mp21 +application/mp4 mp4s +# application/mpeg4-generic +# application/mpeg4-iod +# application/mpeg4-iod-xmt +# application/msc-ivr+xml +# application/msc-mixer+xml +application/msword doc dot +application/mxf mxf +# application/nasdata +# application/news-checkgroups +# application/news-groupinfo +# application/news-transmission +# application/nss +# application/ocsp-request +# application/ocsp-response +application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy +application/oda oda +application/oebps-package+xml opf +application/ogg ogx +application/omdoc+xml omdoc +application/onenote onetoc onetoc2 onetmp onepkg +application/oxps oxps +# application/parityfec +application/patch-ops-error+xml xer +application/pdf pdf +application/pgp-encrypted pgp +# application/pgp-keys +application/pgp-signature asc sig +application/pics-rules prf +# application/pidf+xml +# application/pidf-diff+xml +application/pkcs10 p10 +application/pkcs7-mime p7m p7c +application/pkcs7-signature p7s +application/pkcs8 p8 +application/pkix-attr-cert ac +application/pkix-cert cer +application/pkix-crl crl +application/pkix-pkipath pkipath +application/pkixcmp pki +application/pls+xml pls +# application/poc-settings+xml +application/postscript ai eps ps +# application/prs.alvestrand.titrax-sheet +application/prs.cww cww +# application/prs.nprend +# application/prs.plucker +# application/prs.rdf-xml-crypt +# application/prs.xsf+xml +application/pskc+xml pskcxml +# application/qsig +application/rdf+xml rdf +application/reginfo+xml rif +application/relax-ng-compact-syntax rnc +# application/remote-printing +application/resource-lists+xml rl +application/resource-lists-diff+xml rld +# application/riscos +# application/rlmi+xml +application/rls-services+xml rs +application/rpki-ghostbusters gbr +application/rpki-manifest mft +application/rpki-roa roa +# application/rpki-updown +application/rsd+xml rsd +application/rss+xml rss +application/rtf rtf +# application/rtx +# application/samlassertion+xml +# application/samlmetadata+xml +application/sbml+xml sbml +application/scvp-cv-request scq +application/scvp-cv-response scs +application/scvp-vp-request spq +application/scvp-vp-response spp +application/sdp sdp +# application/set-payment +application/set-payment-initiation setpay +# application/set-registration +application/set-registration-initiation setreg +# application/sgml +# application/sgml-open-catalog +application/shf+xml shf +# application/sieve +# application/simple-filter+xml +# application/simple-message-summary +# application/simplesymbolcontainer +# application/slate +# application/smil +application/smil+xml smi smil +# application/soap+fastinfoset +# application/soap+xml +application/sparql-query rq +application/sparql-results+xml srx +# application/spirits-event+xml +application/srgs gram +application/srgs+xml grxml +application/sru+xml sru +application/ssdl+xml ssdl +application/ssml+xml ssml +# application/tamp-apex-update +# application/tamp-apex-update-confirm +# application/tamp-community-update +# application/tamp-community-update-confirm +# application/tamp-error +# application/tamp-sequence-adjust +# application/tamp-sequence-adjust-confirm +# application/tamp-status-query +# application/tamp-status-response +# application/tamp-update +# application/tamp-update-confirm +application/tei+xml tei teicorpus +application/thraud+xml tfi +# application/timestamp-query +# application/timestamp-reply +application/timestamped-data tsd +# application/tve-trigger +# application/ulpfec +# application/vcard+xml +# application/vemmi +# application/vividence.scriptfile +# application/vnd.3gpp.bsf+xml +application/vnd.3gpp.pic-bw-large plb +application/vnd.3gpp.pic-bw-small psb +application/vnd.3gpp.pic-bw-var pvb +# application/vnd.3gpp.sms +# application/vnd.3gpp2.bcmcsinfo+xml +# application/vnd.3gpp2.sms +application/vnd.3gpp2.tcap tcap +application/vnd.3m.post-it-notes pwn +application/vnd.accpac.simply.aso aso +application/vnd.accpac.simply.imp imp +application/vnd.acucobol acu +application/vnd.acucorp atc acutc +application/vnd.adobe.air-application-installer-package+zip air +application/vnd.adobe.formscentral.fcdt fcdt +application/vnd.adobe.fxp fxp fxpl +# application/vnd.adobe.partial-upload +application/vnd.adobe.xdp+xml xdp +application/vnd.adobe.xfdf xfdf +# application/vnd.aether.imp +# application/vnd.ah-barcode +application/vnd.ahead.space ahead +application/vnd.airzip.filesecure.azf azf +application/vnd.airzip.filesecure.azs azs +application/vnd.amazon.ebook azw +application/vnd.americandynamics.acc acc +application/vnd.amiga.ami ami +# application/vnd.amundsen.maze+xml +application/vnd.android.package-archive apk +application/vnd.anser-web-certificate-issue-initiation cii +application/vnd.anser-web-funds-transfer-initiation fti +application/vnd.antix.game-component atx +application/vnd.apple.installer+xml mpkg +application/vnd.apple.mpegurl m3u8 +# application/vnd.arastra.swi +application/vnd.aristanetworks.swi swi +application/vnd.astraea-software.iota iota +application/vnd.audiograph aep +# application/vnd.autopackage +# application/vnd.avistar+xml +application/vnd.blueice.multipass mpm +# application/vnd.bluetooth.ep.oob +application/vnd.bmi bmi +application/vnd.businessobjects rep +# application/vnd.cab-jscript +# application/vnd.canon-cpdl +# application/vnd.canon-lips +# application/vnd.cendio.thinlinc.clientconf +application/vnd.chemdraw+xml cdxml +application/vnd.chipnuts.karaoke-mmd mmd +application/vnd.cinderella cdy +# application/vnd.cirpack.isdn-ext +application/vnd.claymore cla +application/vnd.cloanto.rp9 rp9 +application/vnd.clonk.c4group c4g c4d c4f c4p c4u +application/vnd.cluetrust.cartomobile-config c11amc +application/vnd.cluetrust.cartomobile-config-pkg c11amz +# application/vnd.collection+json +# application/vnd.commerce-battelle +application/vnd.commonspace csp +application/vnd.contact.cmsg cdbcmsg +application/vnd.cosmocaller cmc +application/vnd.crick.clicker clkx +application/vnd.crick.clicker.keyboard clkk +application/vnd.crick.clicker.palette clkp +application/vnd.crick.clicker.template clkt +application/vnd.crick.clicker.wordbank clkw +application/vnd.criticaltools.wbs+xml wbs +application/vnd.ctc-posml pml +# application/vnd.ctct.ws+xml +# application/vnd.cups-pdf +# application/vnd.cups-postscript +application/vnd.cups-ppd ppd +# application/vnd.cups-raster +# application/vnd.cups-raw +# application/vnd.curl +application/vnd.curl.car car +application/vnd.curl.pcurl pcurl +# application/vnd.cybank +application/vnd.dart dart +application/vnd.data-vision.rdz rdz +application/vnd.dece.data uvf uvvf uvd uvvd +application/vnd.dece.ttml+xml uvt uvvt +application/vnd.dece.unspecified uvx uvvx +application/vnd.dece.zip uvz uvvz +application/vnd.denovo.fcselayout-link fe_launch +# application/vnd.dir-bi.plate-dl-nosuffix +application/vnd.dna dna +application/vnd.dolby.mlp mlp +# application/vnd.dolby.mobile.1 +# application/vnd.dolby.mobile.2 +application/vnd.dpgraph dpg +application/vnd.dreamfactory dfac +application/vnd.ds-keypoint kpxx +application/vnd.dvb.ait ait +# application/vnd.dvb.dvbj +# application/vnd.dvb.esgcontainer +# application/vnd.dvb.ipdcdftnotifaccess +# application/vnd.dvb.ipdcesgaccess +# application/vnd.dvb.ipdcesgaccess2 +# application/vnd.dvb.ipdcesgpdd +# application/vnd.dvb.ipdcroaming +# application/vnd.dvb.iptv.alfec-base +# application/vnd.dvb.iptv.alfec-enhancement +# application/vnd.dvb.notif-aggregate-root+xml +# application/vnd.dvb.notif-container+xml +# application/vnd.dvb.notif-generic+xml +# application/vnd.dvb.notif-ia-msglist+xml +# application/vnd.dvb.notif-ia-registration-request+xml +# application/vnd.dvb.notif-ia-registration-response+xml +# application/vnd.dvb.notif-init+xml +# application/vnd.dvb.pfr +application/vnd.dvb.service svc +# application/vnd.dxr +application/vnd.dynageo geo +# application/vnd.easykaraoke.cdgdownload +# application/vnd.ecdis-update +application/vnd.ecowin.chart mag +# application/vnd.ecowin.filerequest +# application/vnd.ecowin.fileupdate +# application/vnd.ecowin.series +# application/vnd.ecowin.seriesrequest +# application/vnd.ecowin.seriesupdate +# application/vnd.emclient.accessrequest+xml +application/vnd.enliven nml +# application/vnd.eprints.data+xml +application/vnd.epson.esf esf +application/vnd.epson.msf msf +application/vnd.epson.quickanime qam +application/vnd.epson.salt slt +application/vnd.epson.ssf ssf +# application/vnd.ericsson.quickcall +application/vnd.eszigno3+xml es3 et3 +# application/vnd.etsi.aoc+xml +# application/vnd.etsi.cug+xml +# application/vnd.etsi.iptvcommand+xml +# application/vnd.etsi.iptvdiscovery+xml +# application/vnd.etsi.iptvprofile+xml +# application/vnd.etsi.iptvsad-bc+xml +# application/vnd.etsi.iptvsad-cod+xml +# application/vnd.etsi.iptvsad-npvr+xml +# application/vnd.etsi.iptvservice+xml +# application/vnd.etsi.iptvsync+xml +# application/vnd.etsi.iptvueprofile+xml +# application/vnd.etsi.mcid+xml +# application/vnd.etsi.overload-control-policy-dataset+xml +# application/vnd.etsi.sci+xml +# application/vnd.etsi.simservs+xml +# application/vnd.etsi.tsl+xml +# application/vnd.etsi.tsl.der +# application/vnd.eudora.data +application/vnd.ezpix-album ez2 +application/vnd.ezpix-package ez3 +# application/vnd.f-secure.mobile +application/vnd.fdf fdf +application/vnd.fdsn.mseed mseed +application/vnd.fdsn.seed seed dataless +# application/vnd.ffsns +# application/vnd.fints +application/vnd.flographit gph +application/vnd.fluxtime.clip ftc +# application/vnd.font-fontforge-sfd +application/vnd.framemaker fm frame maker book +application/vnd.frogans.fnc fnc +application/vnd.frogans.ltf ltf +application/vnd.fsc.weblaunch fsc +application/vnd.fujitsu.oasys oas +application/vnd.fujitsu.oasys2 oa2 +application/vnd.fujitsu.oasys3 oa3 +application/vnd.fujitsu.oasysgp fg5 +application/vnd.fujitsu.oasysprs bh2 +# application/vnd.fujixerox.art-ex +# application/vnd.fujixerox.art4 +# application/vnd.fujixerox.hbpl +application/vnd.fujixerox.ddd ddd +application/vnd.fujixerox.docuworks xdw +application/vnd.fujixerox.docuworks.binder xbd +# application/vnd.fut-misnet +application/vnd.fuzzysheet fzs +application/vnd.genomatix.tuxedo txd +# application/vnd.geocube+xml +application/vnd.geogebra.file ggb +application/vnd.geogebra.tool ggt +application/vnd.geometry-explorer gex gre +application/vnd.geonext gxt +application/vnd.geoplan g2w +application/vnd.geospace g3w +# application/vnd.globalplatform.card-content-mgt +# application/vnd.globalplatform.card-content-mgt-response +application/vnd.gmx gmx +application/vnd.google-earth.kml+xml kml +application/vnd.google-earth.kmz kmz +application/vnd.grafeq gqf gqs +# application/vnd.gridmp +application/vnd.groove-account gac +application/vnd.groove-help ghf +application/vnd.groove-identity-message gim +application/vnd.groove-injector grv +application/vnd.groove-tool-message gtm +application/vnd.groove-tool-template tpl +application/vnd.groove-vcard vcg +# application/vnd.hal+json +application/vnd.hal+xml hal +application/vnd.handheld-entertainment+xml zmm +application/vnd.hbci hbci +# application/vnd.hcl-bireports +application/vnd.hhe.lesson-player les +application/vnd.hp-hpgl hpgl +application/vnd.hp-hpid hpid +application/vnd.hp-hps hps +application/vnd.hp-jlyt jlt +application/vnd.hp-pcl pcl +application/vnd.hp-pclxl pclxl +# application/vnd.httphone +application/vnd.hydrostatix.sof-data sfd-hdstx +# application/vnd.hzn-3d-crossword +# application/vnd.ibm.afplinedata +# application/vnd.ibm.electronic-media +application/vnd.ibm.minipay mpy +application/vnd.ibm.modcap afp listafp list3820 +application/vnd.ibm.rights-management irm +application/vnd.ibm.secure-container sc +application/vnd.iccprofile icc icm +application/vnd.igloader igl +application/vnd.immervision-ivp ivp +application/vnd.immervision-ivu ivu +# application/vnd.informedcontrol.rms+xml +# application/vnd.informix-visionary +# application/vnd.infotech.project +# application/vnd.infotech.project+xml +# application/vnd.innopath.wamp.notification +application/vnd.insors.igm igm +application/vnd.intercon.formnet xpw xpx +application/vnd.intergeo i2g +# application/vnd.intertrust.digibox +# application/vnd.intertrust.nncp +application/vnd.intu.qbo qbo +application/vnd.intu.qfx qfx +# application/vnd.iptc.g2.conceptitem+xml +# application/vnd.iptc.g2.knowledgeitem+xml +# application/vnd.iptc.g2.newsitem+xml +# application/vnd.iptc.g2.newsmessage+xml +# application/vnd.iptc.g2.packageitem+xml +# application/vnd.iptc.g2.planningitem+xml +application/vnd.ipunplugged.rcprofile rcprofile +application/vnd.irepository.package+xml irp +application/vnd.is-xpr xpr +application/vnd.isac.fcs fcs +application/vnd.jam jam +# application/vnd.japannet-directory-service +# application/vnd.japannet-jpnstore-wakeup +# application/vnd.japannet-payment-wakeup +# application/vnd.japannet-registration +# application/vnd.japannet-registration-wakeup +# application/vnd.japannet-setstore-wakeup +# application/vnd.japannet-verification +# application/vnd.japannet-verification-wakeup +application/vnd.jcp.javame.midlet-rms rms +application/vnd.jisp jisp +application/vnd.joost.joda-archive joda +application/vnd.kahootz ktz ktr +application/vnd.kde.karbon karbon +application/vnd.kde.kchart chrt +application/vnd.kde.kformula kfo +application/vnd.kde.kivio flw +application/vnd.kde.kontour kon +application/vnd.kde.kpresenter kpr kpt +application/vnd.kde.kspread ksp +application/vnd.kde.kword kwd kwt +application/vnd.kenameaapp htke +application/vnd.kidspiration kia +application/vnd.kinar kne knp +application/vnd.koan skp skd skt skm +application/vnd.kodak-descriptor sse +application/vnd.las.las+xml lasxml +# application/vnd.liberty-request+xml +application/vnd.llamagraphics.life-balance.desktop lbd +application/vnd.llamagraphics.life-balance.exchange+xml lbe +application/vnd.lotus-1-2-3 123 +application/vnd.lotus-approach apr +application/vnd.lotus-freelance pre +application/vnd.lotus-notes nsf +application/vnd.lotus-organizer org +application/vnd.lotus-screencam scm +application/vnd.lotus-wordpro lwp +application/vnd.macports.portpkg portpkg +# application/vnd.marlin.drm.actiontoken+xml +# application/vnd.marlin.drm.conftoken+xml +# application/vnd.marlin.drm.license+xml +# application/vnd.marlin.drm.mdcf +application/vnd.mcd mcd +application/vnd.medcalcdata mc1 +application/vnd.mediastation.cdkey cdkey +# application/vnd.meridian-slingshot +application/vnd.mfer mwf +application/vnd.mfmp mfm +application/vnd.micrografx.flo flo +application/vnd.micrografx.igx igx +application/vnd.mif mif +# application/vnd.minisoft-hp3000-save +# application/vnd.mitsubishi.misty-guard.trustweb +application/vnd.mobius.daf daf +application/vnd.mobius.dis dis +application/vnd.mobius.mbk mbk +application/vnd.mobius.mqy mqy +application/vnd.mobius.msl msl +application/vnd.mobius.plc plc +application/vnd.mobius.txf txf +application/vnd.mophun.application mpn +application/vnd.mophun.certificate mpc +# application/vnd.motorola.flexsuite +# application/vnd.motorola.flexsuite.adsi +# application/vnd.motorola.flexsuite.fis +# application/vnd.motorola.flexsuite.gotap +# application/vnd.motorola.flexsuite.kmr +# application/vnd.motorola.flexsuite.ttc +# application/vnd.motorola.flexsuite.wem +# application/vnd.motorola.iprm +application/vnd.mozilla.xul+xml xul +application/vnd.ms-artgalry cil +# application/vnd.ms-asf +application/vnd.ms-cab-compressed cab +# application/vnd.ms-color.iccprofile +application/vnd.ms-excel xls xlm xla xlc xlt xlw +application/vnd.ms-excel.addin.macroenabled.12 xlam +application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb +application/vnd.ms-excel.sheet.macroenabled.12 xlsm +application/vnd.ms-excel.template.macroenabled.12 xltm +application/vnd.ms-fontobject eot +application/vnd.ms-htmlhelp chm +application/vnd.ms-ims ims +application/vnd.ms-lrm lrm +# application/vnd.ms-office.activex+xml +application/vnd.ms-officetheme thmx +# application/vnd.ms-opentype +# application/vnd.ms-package.obfuscated-opentype +application/vnd.ms-pki.seccat cat +application/vnd.ms-pki.stl stl +# application/vnd.ms-playready.initiator+xml +application/vnd.ms-powerpoint ppt pps pot +application/vnd.ms-powerpoint.addin.macroenabled.12 ppam +application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm +application/vnd.ms-powerpoint.slide.macroenabled.12 sldm +application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm +application/vnd.ms-powerpoint.template.macroenabled.12 potm +# application/vnd.ms-printing.printticket+xml +application/vnd.ms-project mpp mpt +# application/vnd.ms-tnef +# application/vnd.ms-wmdrm.lic-chlg-req +# application/vnd.ms-wmdrm.lic-resp +# application/vnd.ms-wmdrm.meter-chlg-req +# application/vnd.ms-wmdrm.meter-resp +application/vnd.ms-word.document.macroenabled.12 docm +application/vnd.ms-word.template.macroenabled.12 dotm +application/vnd.ms-works wps wks wcm wdb +application/vnd.ms-wpl wpl +application/vnd.ms-xpsdocument xps +application/vnd.mseq mseq +# application/vnd.msign +# application/vnd.multiad.creator +# application/vnd.multiad.creator.cif +# application/vnd.music-niff +application/vnd.musician mus +application/vnd.muvee.style msty +application/vnd.mynfc taglet +# application/vnd.ncd.control +# application/vnd.ncd.reference +# application/vnd.nervana +# application/vnd.netfpx +application/vnd.neurolanguage.nlu nlu +application/vnd.nitf ntf nitf +application/vnd.noblenet-directory nnd +application/vnd.noblenet-sealer nns +application/vnd.noblenet-web nnw +# application/vnd.nokia.catalogs +# application/vnd.nokia.conml+wbxml +# application/vnd.nokia.conml+xml +# application/vnd.nokia.isds-radio-presets +# application/vnd.nokia.iptv.config+xml +# application/vnd.nokia.landmark+wbxml +# application/vnd.nokia.landmark+xml +# application/vnd.nokia.landmarkcollection+xml +# application/vnd.nokia.n-gage.ac+xml +application/vnd.nokia.n-gage.data ngdat +application/vnd.nokia.n-gage.symbian.install n-gage +# application/vnd.nokia.ncd +# application/vnd.nokia.pcd+wbxml +# application/vnd.nokia.pcd+xml +application/vnd.nokia.radio-preset rpst +application/vnd.nokia.radio-presets rpss +application/vnd.novadigm.edm edm +application/vnd.novadigm.edx edx +application/vnd.novadigm.ext ext +# application/vnd.ntt-local.file-transfer +# application/vnd.ntt-local.sip-ta_remote +# application/vnd.ntt-local.sip-ta_tcp_stream +application/vnd.oasis.opendocument.chart odc +application/vnd.oasis.opendocument.chart-template otc +application/vnd.oasis.opendocument.database odb +application/vnd.oasis.opendocument.formula odf +application/vnd.oasis.opendocument.formula-template odft +application/vnd.oasis.opendocument.graphics odg +application/vnd.oasis.opendocument.graphics-template otg +application/vnd.oasis.opendocument.image odi +application/vnd.oasis.opendocument.image-template oti +application/vnd.oasis.opendocument.presentation odp +application/vnd.oasis.opendocument.presentation-template otp +application/vnd.oasis.opendocument.spreadsheet ods +application/vnd.oasis.opendocument.spreadsheet-template ots +application/vnd.oasis.opendocument.text odt +application/vnd.oasis.opendocument.text-master odm +application/vnd.oasis.opendocument.text-template ott +application/vnd.oasis.opendocument.text-web oth +# application/vnd.obn +# application/vnd.oftn.l10n+json +# application/vnd.oipf.contentaccessdownload+xml +# application/vnd.oipf.contentaccessstreaming+xml +# application/vnd.oipf.cspg-hexbinary +# application/vnd.oipf.dae.svg+xml +# application/vnd.oipf.dae.xhtml+xml +# application/vnd.oipf.mippvcontrolmessage+xml +# application/vnd.oipf.pae.gem +# application/vnd.oipf.spdiscovery+xml +# application/vnd.oipf.spdlist+xml +# application/vnd.oipf.ueprofile+xml +# application/vnd.oipf.userprofile+xml +application/vnd.olpc-sugar xo +# application/vnd.oma-scws-config +# application/vnd.oma-scws-http-request +# application/vnd.oma-scws-http-response +# application/vnd.oma.bcast.associated-procedure-parameter+xml +# application/vnd.oma.bcast.drm-trigger+xml +# application/vnd.oma.bcast.imd+xml +# application/vnd.oma.bcast.ltkm +# application/vnd.oma.bcast.notification+xml +# application/vnd.oma.bcast.provisioningtrigger +# application/vnd.oma.bcast.sgboot +# application/vnd.oma.bcast.sgdd+xml +# application/vnd.oma.bcast.sgdu +# application/vnd.oma.bcast.simple-symbol-container +# application/vnd.oma.bcast.smartcard-trigger+xml +# application/vnd.oma.bcast.sprov+xml +# application/vnd.oma.bcast.stkm +# application/vnd.oma.cab-address-book+xml +# application/vnd.oma.cab-feature-handler+xml +# application/vnd.oma.cab-pcc+xml +# application/vnd.oma.cab-user-prefs+xml +# application/vnd.oma.dcd +# application/vnd.oma.dcdc +application/vnd.oma.dd2+xml dd2 +# application/vnd.oma.drm.risd+xml +# application/vnd.oma.group-usage-list+xml +# application/vnd.oma.pal+xml +# application/vnd.oma.poc.detailed-progress-report+xml +# application/vnd.oma.poc.final-report+xml +# application/vnd.oma.poc.groups+xml +# application/vnd.oma.poc.invocation-descriptor+xml +# application/vnd.oma.poc.optimized-progress-report+xml +# application/vnd.oma.push +# application/vnd.oma.scidm.messages+xml +# application/vnd.oma.xcap-directory+xml +# application/vnd.omads-email+xml +# application/vnd.omads-file+xml +# application/vnd.omads-folder+xml +# application/vnd.omaloc-supl-init +application/vnd.openofficeorg.extension oxt +# application/vnd.openxmlformats-officedocument.custom-properties+xml +# application/vnd.openxmlformats-officedocument.customxmlproperties+xml +# application/vnd.openxmlformats-officedocument.drawing+xml +# application/vnd.openxmlformats-officedocument.drawingml.chart+xml +# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml +# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml +# application/vnd.openxmlformats-officedocument.extended-properties+xml +# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml +# application/vnd.openxmlformats-officedocument.presentationml.comments+xml +# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml +# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml +application/vnd.openxmlformats-officedocument.presentationml.presentation pptx +# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml +application/vnd.openxmlformats-officedocument.presentationml.slide sldx +# application/vnd.openxmlformats-officedocument.presentationml.slide+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml +# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml +application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx +# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml +# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml +# application/vnd.openxmlformats-officedocument.presentationml.tags+xml +application/vnd.openxmlformats-officedocument.presentationml.template potx +# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml +# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml +application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx +# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml +# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml +# application/vnd.openxmlformats-officedocument.theme+xml +# application/vnd.openxmlformats-officedocument.themeoverride+xml +# application/vnd.openxmlformats-officedocument.vmldrawing +# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.document docx +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml +application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx +# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml +# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml +# application/vnd.openxmlformats-package.core-properties+xml +# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml +# application/vnd.openxmlformats-package.relationships+xml +# application/vnd.quobject-quoxdocument +# application/vnd.osa.netdeploy +application/vnd.osgeo.mapguide.package mgp +# application/vnd.osgi.bundle +application/vnd.osgi.dp dp +application/vnd.osgi.subsystem esa +# application/vnd.otps.ct-kip+xml +application/vnd.palm pdb pqa oprc +# application/vnd.paos.xml +application/vnd.pawaafile paw +application/vnd.pg.format str +application/vnd.pg.osasli ei6 +# application/vnd.piaccess.application-licence +application/vnd.picsel efif +application/vnd.pmi.widget wg +# application/vnd.poc.group-advertisement+xml +application/vnd.pocketlearn plf +application/vnd.powerbuilder6 pbd +# application/vnd.powerbuilder6-s +# application/vnd.powerbuilder7 +# application/vnd.powerbuilder7-s +# application/vnd.powerbuilder75 +# application/vnd.powerbuilder75-s +# application/vnd.preminet +application/vnd.previewsystems.box box +application/vnd.proteus.magazine mgz +application/vnd.publishare-delta-tree qps +application/vnd.pvi.ptid1 ptid +# application/vnd.pwg-multiplexed +# application/vnd.pwg-xhtml-print+xml +# application/vnd.qualcomm.brew-app-res +application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb +# application/vnd.radisys.moml+xml +# application/vnd.radisys.msml+xml +# application/vnd.radisys.msml-audit+xml +# application/vnd.radisys.msml-audit-conf+xml +# application/vnd.radisys.msml-audit-conn+xml +# application/vnd.radisys.msml-audit-dialog+xml +# application/vnd.radisys.msml-audit-stream+xml +# application/vnd.radisys.msml-conf+xml +# application/vnd.radisys.msml-dialog+xml +# application/vnd.radisys.msml-dialog-base+xml +# application/vnd.radisys.msml-dialog-fax-detect+xml +# application/vnd.radisys.msml-dialog-fax-sendrecv+xml +# application/vnd.radisys.msml-dialog-group+xml +# application/vnd.radisys.msml-dialog-speech+xml +# application/vnd.radisys.msml-dialog-transform+xml +# application/vnd.rainstor.data +# application/vnd.rapid +application/vnd.realvnc.bed bed +application/vnd.recordare.musicxml mxl +application/vnd.recordare.musicxml+xml musicxml +# application/vnd.renlearn.rlprint +application/vnd.rig.cryptonote cryptonote +application/vnd.rim.cod cod +application/vnd.rn-realmedia rm +application/vnd.rn-realmedia-vbr rmvb +application/vnd.route66.link66+xml link66 +# application/vnd.rs-274x +# application/vnd.ruckus.download +# application/vnd.s3sms +application/vnd.sailingtracker.track st +# application/vnd.sbm.cid +# application/vnd.sbm.mid2 +# application/vnd.scribus +# application/vnd.sealed.3df +# application/vnd.sealed.csf +# application/vnd.sealed.doc +# application/vnd.sealed.eml +# application/vnd.sealed.mht +# application/vnd.sealed.net +# application/vnd.sealed.ppt +# application/vnd.sealed.tiff +# application/vnd.sealed.xls +# application/vnd.sealedmedia.softseal.html +# application/vnd.sealedmedia.softseal.pdf +application/vnd.seemail see +application/vnd.sema sema +application/vnd.semd semd +application/vnd.semf semf +application/vnd.shana.informed.formdata ifm +application/vnd.shana.informed.formtemplate itp +application/vnd.shana.informed.interchange iif +application/vnd.shana.informed.package ipk +application/vnd.simtech-mindmapper twd twds +application/vnd.smaf mmf +# application/vnd.smart.notebook +application/vnd.smart.teacher teacher +# application/vnd.software602.filler.form+xml +# application/vnd.software602.filler.form-xml-zip +application/vnd.solent.sdkm+xml sdkm sdkd +application/vnd.spotfire.dxp dxp +application/vnd.spotfire.sfs sfs +# application/vnd.sss-cod +# application/vnd.sss-dtf +# application/vnd.sss-ntf +application/vnd.stardivision.calc sdc +application/vnd.stardivision.draw sda +application/vnd.stardivision.impress sdd +application/vnd.stardivision.math smf +application/vnd.stardivision.writer sdw vor +application/vnd.stardivision.writer-global sgl +application/vnd.stepmania.package smzip +application/vnd.stepmania.stepchart sm +# application/vnd.street-stream +application/vnd.sun.xml.calc sxc +application/vnd.sun.xml.calc.template stc +application/vnd.sun.xml.draw sxd +application/vnd.sun.xml.draw.template std +application/vnd.sun.xml.impress sxi +application/vnd.sun.xml.impress.template sti +application/vnd.sun.xml.math sxm +application/vnd.sun.xml.writer sxw +application/vnd.sun.xml.writer.global sxg +application/vnd.sun.xml.writer.template stw +# application/vnd.sun.wadl+xml +application/vnd.sus-calendar sus susp +application/vnd.svd svd +# application/vnd.swiftview-ics +application/vnd.symbian.install sis sisx +application/vnd.syncml+xml xsm +application/vnd.syncml.dm+wbxml bdm +application/vnd.syncml.dm+xml xdm +# application/vnd.syncml.dm.notification +# application/vnd.syncml.ds.notification +application/vnd.tao.intent-module-archive tao +application/vnd.tcpdump.pcap pcap cap dmp +application/vnd.tmobile-livetv tmo +application/vnd.trid.tpt tpt +application/vnd.triscape.mxs mxs +application/vnd.trueapp tra +# application/vnd.truedoc +# application/vnd.ubisoft.webplayer +application/vnd.ufdl ufd ufdl +application/vnd.uiq.theme utz +application/vnd.umajin umj +application/vnd.unity unityweb +application/vnd.uoml+xml uoml +# application/vnd.uplanet.alert +# application/vnd.uplanet.alert-wbxml +# application/vnd.uplanet.bearer-choice +# application/vnd.uplanet.bearer-choice-wbxml +# application/vnd.uplanet.cacheop +# application/vnd.uplanet.cacheop-wbxml +# application/vnd.uplanet.channel +# application/vnd.uplanet.channel-wbxml +# application/vnd.uplanet.list +# application/vnd.uplanet.list-wbxml +# application/vnd.uplanet.listcmd +# application/vnd.uplanet.listcmd-wbxml +# application/vnd.uplanet.signal +application/vnd.vcx vcx +# application/vnd.vd-study +# application/vnd.vectorworks +# application/vnd.verimatrix.vcas +# application/vnd.vidsoft.vidconference +application/vnd.visio vsd vst vss vsw +application/vnd.visionary vis +# application/vnd.vividence.scriptfile +application/vnd.vsf vsf +# application/vnd.wap.sic +# application/vnd.wap.slc +application/vnd.wap.wbxml wbxml +application/vnd.wap.wmlc wmlc +application/vnd.wap.wmlscriptc wmlsc +application/vnd.webturbo wtb +# application/vnd.wfa.wsc +# application/vnd.wmc +# application/vnd.wmf.bootstrap +# application/vnd.wolfram.mathematica +# application/vnd.wolfram.mathematica.package +application/vnd.wolfram.player nbp +application/vnd.wordperfect wpd +application/vnd.wqd wqd +# application/vnd.wrq-hp3000-labelled +application/vnd.wt.stf stf +# application/vnd.wv.csp+wbxml +# application/vnd.wv.csp+xml +# application/vnd.wv.ssp+xml +application/vnd.xara xar +application/vnd.xfdl xfdl +# application/vnd.xfdl.webform +# application/vnd.xmi+xml +# application/vnd.xmpie.cpkg +# application/vnd.xmpie.dpkg +# application/vnd.xmpie.plan +# application/vnd.xmpie.ppkg +# application/vnd.xmpie.xlim +application/vnd.yamaha.hv-dic hvd +application/vnd.yamaha.hv-script hvs +application/vnd.yamaha.hv-voice hvp +application/vnd.yamaha.openscoreformat osf +application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg +# application/vnd.yamaha.remote-setup +application/vnd.yamaha.smaf-audio saf +application/vnd.yamaha.smaf-phrase spf +# application/vnd.yamaha.through-ngn +# application/vnd.yamaha.tunnel-udpencap +application/vnd.yellowriver-custom-menu cmp +application/vnd.zul zir zirz +application/vnd.zzazz.deck+xml zaz +application/voicexml+xml vxml +# application/vq-rtcpxr +# application/watcherinfo+xml +# application/whoispp-query +# application/whoispp-response +application/widget wgt +application/winhlp hlp +# application/wita +# application/wordperfect5.1 +application/wsdl+xml wsdl +application/wspolicy+xml wspolicy +application/x-7z-compressed 7z +application/x-abiword abw +application/x-ace-compressed ace +# application/x-amf +application/x-apple-diskimage dmg +application/x-authorware-bin aab x32 u32 vox +application/x-authorware-map aam +application/x-authorware-seg aas +application/x-bcpio bcpio +application/x-bittorrent torrent +application/x-blorb blb blorb +application/x-bzip bz +application/x-bzip2 bz2 boz +application/x-cbr cbr cba cbt cbz cb7 +application/x-cdlink vcd +application/x-cfs-compressed cfs +application/x-chat chat +application/x-chess-pgn pgn +application/x-conference nsc +# application/x-compress +application/x-cpio cpio +application/x-csh csh +application/x-debian-package deb udeb +application/x-dgc-compressed dgc +application/x-director dir dcr dxr cst cct cxt w3d fgd swa +application/x-doom wad +application/x-dtbncx+xml ncx +application/x-dtbook+xml dtb +application/x-dtbresource+xml res +application/x-dvi dvi +application/x-envoy evy +application/x-eva eva +application/x-font-bdf bdf +# application/x-font-dos +# application/x-font-framemaker +application/x-font-ghostscript gsf +# application/x-font-libgrx +application/x-font-linux-psf psf +application/x-font-otf otf +application/x-font-pcf pcf +application/x-font-snf snf +# application/x-font-speedo +# application/x-font-sunos-news +application/x-font-ttf ttf ttc +application/x-font-type1 pfa pfb pfm afm +application/font-woff woff +# application/x-font-vfont +application/x-freearc arc +application/x-futuresplash spl +application/x-gca-compressed gca +application/x-glulx ulx +application/x-gnumeric gnumeric +application/x-gramps-xml gramps +application/x-gtar gtar +# application/x-gzip +application/x-hdf hdf +application/x-install-instructions install +application/x-iso9660-image iso +application/x-java-jnlp-file jnlp +application/x-latex latex +application/x-lzh-compressed lzh lha +application/x-mie mie +application/x-mobipocket-ebook prc mobi +application/x-ms-application application +application/x-ms-shortcut lnk +application/x-ms-wmd wmd +application/x-ms-wmz wmz +application/x-ms-xbap xbap +application/x-msaccess mdb +application/x-msbinder obd +application/x-mscardfile crd +application/x-msclip clp +application/x-msdownload exe dll com bat msi +application/x-msmediaview mvb m13 m14 +application/x-msmetafile wmf wmz emf emz +application/x-msmoney mny +application/x-mspublisher pub +application/x-msschedule scd +application/x-msterminal trm +application/x-mswrite wri +application/x-netcdf nc cdf +application/x-nzb nzb +application/x-pkcs12 p12 pfx +application/x-pkcs7-certificates p7b spc +application/x-pkcs7-certreqresp p7r +application/x-rar-compressed rar +application/x-research-info-systems ris +application/x-sh sh +application/x-shar shar +application/x-shockwave-flash swf +application/x-silverlight-app xap +application/x-sql sql +application/x-stuffit sit +application/x-stuffitx sitx +application/x-subrip srt +application/x-sv4cpio sv4cpio +application/x-sv4crc sv4crc +application/x-t3vm-image t3 +application/x-tads gam +application/x-tar tar +application/x-tcl tcl +application/x-tex tex +application/x-tex-tfm tfm +application/x-texinfo texinfo texi +application/x-tgif obj +application/x-ustar ustar +application/x-wais-source src +application/x-x509-ca-cert der crt +application/x-xfig fig +application/x-xliff+xml xlf +application/x-xpinstall xpi +application/x-xz xz +application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 +# application/x400-bp +application/xaml+xml xaml +# application/xcap-att+xml +# application/xcap-caps+xml +application/xcap-diff+xml xdf +# application/xcap-el+xml +# application/xcap-error+xml +# application/xcap-ns+xml +# application/xcon-conference-info-diff+xml +# application/xcon-conference-info+xml +application/xenc+xml xenc +application/xhtml+xml xhtml xht +# application/xhtml-voice+xml +application/xml xml xsl +application/xml-dtd dtd +# application/xml-external-parsed-entity +# application/xmpp+xml +application/xop+xml xop +application/xproc+xml xpl +application/xslt+xml xslt +application/xspf+xml xspf +application/xv+xml mxml xhvml xvml xvm +application/yang yang +application/yin+xml yin +application/zip zip +# audio/1d-interleaved-parityfec +# audio/32kadpcm +# audio/3gpp +# audio/3gpp2 +# audio/ac3 +audio/adpcm adp +# audio/amr +# audio/amr-wb +# audio/amr-wb+ +# audio/asc +# audio/atrac-advanced-lossless +# audio/atrac-x +# audio/atrac3 +audio/basic au snd +# audio/bv16 +# audio/bv32 +# audio/clearmode +# audio/cn +# audio/dat12 +# audio/dls +# audio/dsr-es201108 +# audio/dsr-es202050 +# audio/dsr-es202211 +# audio/dsr-es202212 +# audio/dv +# audio/dvi4 +# audio/eac3 +# audio/evrc +# audio/evrc-qcp +# audio/evrc0 +# audio/evrc1 +# audio/evrcb +# audio/evrcb0 +# audio/evrcb1 +# audio/evrcwb +# audio/evrcwb0 +# audio/evrcwb1 +# audio/example +# audio/fwdred +# audio/g719 +# audio/g722 +# audio/g7221 +# audio/g723 +# audio/g726-16 +# audio/g726-24 +# audio/g726-32 +# audio/g726-40 +# audio/g728 +# audio/g729 +# audio/g7291 +# audio/g729d +# audio/g729e +# audio/gsm +# audio/gsm-efr +# audio/gsm-hr-08 +# audio/ilbc +# audio/ip-mr_v2.5 +# audio/isac +# audio/l16 +# audio/l20 +# audio/l24 +# audio/l8 +# audio/lpc +audio/midi mid midi kar rmi +# audio/mobile-xmf +audio/mp4 mp4a +# audio/mp4a-latm +# audio/mpa +# audio/mpa-robust +audio/mpeg mpga mp2 mp2a mp3 m2a m3a +# audio/mpeg4-generic +# audio/musepack +audio/ogg oga ogg spx +# audio/opus +# audio/parityfec +# audio/pcma +# audio/pcma-wb +# audio/pcmu-wb +# audio/pcmu +# audio/prs.sid +# audio/qcelp +# audio/red +# audio/rtp-enc-aescm128 +# audio/rtp-midi +# audio/rtx +audio/s3m s3m +audio/silk sil +# audio/smv +# audio/smv0 +# audio/smv-qcp +# audio/sp-midi +# audio/speex +# audio/t140c +# audio/t38 +# audio/telephone-event +# audio/tone +# audio/uemclip +# audio/ulpfec +# audio/vdvi +# audio/vmr-wb +# audio/vnd.3gpp.iufp +# audio/vnd.4sb +# audio/vnd.audiokoz +# audio/vnd.celp +# audio/vnd.cisco.nse +# audio/vnd.cmles.radio-events +# audio/vnd.cns.anp1 +# audio/vnd.cns.inf1 +audio/vnd.dece.audio uva uvva +audio/vnd.digital-winds eol +# audio/vnd.dlna.adts +# audio/vnd.dolby.heaac.1 +# audio/vnd.dolby.heaac.2 +# audio/vnd.dolby.mlp +# audio/vnd.dolby.mps +# audio/vnd.dolby.pl2 +# audio/vnd.dolby.pl2x +# audio/vnd.dolby.pl2z +# audio/vnd.dolby.pulse.1 +audio/vnd.dra dra +audio/vnd.dts dts +audio/vnd.dts.hd dtshd +# audio/vnd.dvb.file +# audio/vnd.everad.plj +# audio/vnd.hns.audio +audio/vnd.lucent.voice lvp +audio/vnd.ms-playready.media.pya pya +# audio/vnd.nokia.mobile-xmf +# audio/vnd.nortel.vbk +audio/vnd.nuera.ecelp4800 ecelp4800 +audio/vnd.nuera.ecelp7470 ecelp7470 +audio/vnd.nuera.ecelp9600 ecelp9600 +# audio/vnd.octel.sbc +# audio/vnd.qcelp +# audio/vnd.rhetorex.32kadpcm +audio/vnd.rip rip +# audio/vnd.sealedmedia.softseal.mpeg +# audio/vnd.vmx.cvsd +# audio/vorbis +# audio/vorbis-config +audio/webm weba +audio/x-aac aac +audio/x-aiff aif aiff aifc +audio/x-caf caf +audio/x-flac flac +audio/x-matroska mka +audio/x-mpegurl m3u +audio/x-ms-wax wax +audio/x-ms-wma wma +audio/x-pn-realaudio ram ra +audio/x-pn-realaudio-plugin rmp +# audio/x-tta +audio/x-wav wav +audio/xm xm +chemical/x-cdx cdx +chemical/x-cif cif +chemical/x-cmdf cmdf +chemical/x-cml cml +chemical/x-csml csml +# chemical/x-pdb +chemical/x-xyz xyz +image/bmp bmp +image/cgm cgm +# image/example +# image/fits +image/g3fax g3 +image/gif gif +image/ief ief +# image/jp2 +image/jpeg jpeg jpg jpe +# image/jpm +# image/jpx +image/ktx ktx +# image/naplps +image/png png +image/prs.btif btif +# image/prs.pti +image/sgi sgi +image/svg+xml svg svgz +# image/t38 +image/tiff tiff tif +# image/tiff-fx +image/vnd.adobe.photoshop psd +# image/vnd.cns.inf2 +image/vnd.dece.graphic uvi uvvi uvg uvvg +image/vnd.dvb.subtitle sub +image/vnd.djvu djvu djv +image/vnd.dwg dwg +image/vnd.dxf dxf +image/vnd.fastbidsheet fbs +image/vnd.fpx fpx +image/vnd.fst fst +image/vnd.fujixerox.edmics-mmr mmr +image/vnd.fujixerox.edmics-rlc rlc +# image/vnd.globalgraphics.pgb +# image/vnd.microsoft.icon +# image/vnd.mix +image/vnd.ms-modi mdi +image/vnd.ms-photo wdp +image/vnd.net-fpx npx +# image/vnd.radiance +# image/vnd.sealed.png +# image/vnd.sealedmedia.softseal.gif +# image/vnd.sealedmedia.softseal.jpg +# image/vnd.svf +image/vnd.wap.wbmp wbmp +image/vnd.xiff xif +image/webp webp +image/x-3ds 3ds +image/x-cmu-raster ras +image/x-cmx cmx +image/x-freehand fh fhc fh4 fh5 fh7 +image/x-icon ico +image/x-mrsid-image sid +image/x-pcx pcx +image/x-pict pic pct +image/x-portable-anymap pnm +image/x-portable-bitmap pbm +image/x-portable-graymap pgm +image/x-portable-pixmap ppm +image/x-rgb rgb +image/x-tga tga +image/x-xbitmap xbm +image/x-xpixmap xpm +image/x-xwindowdump xwd +# message/cpim +# message/delivery-status +# message/disposition-notification +# message/example +# message/external-body +# message/feedback-report +# message/global +# message/global-delivery-status +# message/global-disposition-notification +# message/global-headers +# message/http +# message/imdn+xml +# message/news +# message/partial +message/rfc822 eml mime +# message/s-http +# message/sip +# message/sipfrag +# message/tracking-status +# message/vnd.si.simp +# model/example +model/iges igs iges +model/mesh msh mesh silo +model/vnd.collada+xml dae +model/vnd.dwf dwf +# model/vnd.flatland.3dml +model/vnd.gdl gdl +# model/vnd.gs-gdl +# model/vnd.gs.gdl +model/vnd.gtw gtw +# model/vnd.moml+xml +model/vnd.mts mts +# model/vnd.parasolid.transmit.binary +# model/vnd.parasolid.transmit.text +model/vnd.vtu vtu +model/vrml wrl vrml +model/x3d+binary x3db x3dbz +model/x3d+vrml x3dv x3dvz +model/x3d+xml x3d x3dz +# multipart/alternative +# multipart/appledouble +# multipart/byteranges +# multipart/digest +# multipart/encrypted +# multipart/example +# multipart/form-data +# multipart/header-set +# multipart/mixed +# multipart/parallel +# multipart/related +# multipart/report +# multipart/signed +# multipart/voice-message +# text/1d-interleaved-parityfec +text/cache-manifest appcache +text/calendar ics ifb +text/css css +text/csv csv +# text/directory +# text/dns +# text/ecmascript +# text/enriched +# text/example +# text/fwdred +text/html html htm +# text/javascript +text/n3 n3 +# text/parityfec +text/plain txt text conf def list log in +# text/prs.fallenstein.rst +text/prs.lines.tag dsc +# text/vnd.radisys.msml-basic-layout +# text/red +# text/rfc822-headers +text/richtext rtx +# text/rtf +# text/rtp-enc-aescm128 +# text/rtx +text/sgml sgml sgm +# text/t140 +text/tab-separated-values tsv +text/troff t tr roff man me ms +text/turtle ttl +# text/ulpfec +text/uri-list uri uris urls +text/vcard vcard +# text/vnd.abc +text/vnd.curl curl +text/vnd.curl.dcurl dcurl +text/vnd.curl.scurl scurl +text/vnd.curl.mcurl mcurl +# text/vnd.dmclientscript +text/vnd.dvb.subtitle sub +# text/vnd.esmertec.theme-descriptor +text/vnd.fly fly +text/vnd.fmi.flexstor flx +text/vnd.graphviz gv +text/vnd.in3d.3dml 3dml +text/vnd.in3d.spot spot +# text/vnd.iptc.newsml +# text/vnd.iptc.nitf +# text/vnd.latex-z +# text/vnd.motorola.reflex +# text/vnd.ms-mediapackage +# text/vnd.net2phone.commcenter.command +# text/vnd.si.uricatalogue +text/vnd.sun.j2me.app-descriptor jad +# text/vnd.trolltech.linguist +# text/vnd.wap.si +# text/vnd.wap.sl +text/vnd.wap.wml wml +text/vnd.wap.wmlscript wmls +text/x-asm s asm +text/x-c c cc cxx cpp h hh dic +text/x-fortran f for f77 f90 +text/x-java-source java +text/x-opml opml +text/x-pascal p pas +text/x-nfo nfo +text/x-setext etx +text/x-sfv sfv +text/x-uuencode uu +text/x-vcalendar vcs +text/x-vcard vcf +# text/xml +# text/xml-external-parsed-entity +# video/1d-interleaved-parityfec +video/3gpp 3gp +# video/3gpp-tt +video/3gpp2 3g2 +# video/bmpeg +# video/bt656 +# video/celb +# video/dv +# video/example +video/h261 h261 +video/h263 h263 +# video/h263-1998 +# video/h263-2000 +video/h264 h264 +# video/h264-rcdo +# video/h264-svc +video/jpeg jpgv +# video/jpeg2000 +video/jpm jpm jpgm +video/mj2 mj2 mjp2 +# video/mp1s +# video/mp2p +# video/mp2t +video/mp4 mp4 mp4v mpg4 +# video/mp4v-es +video/mpeg mpeg mpg mpe m1v m2v +# video/mpeg4-generic +# video/mpv +# video/nv +video/ogg ogv +# video/parityfec +# video/pointer +video/quicktime qt mov +# video/raw +# video/rtp-enc-aescm128 +# video/rtx +# video/smpte292m +# video/ulpfec +# video/vc1 +# video/vnd.cctv +video/vnd.dece.hd uvh uvvh +video/vnd.dece.mobile uvm uvvm +# video/vnd.dece.mp4 +video/vnd.dece.pd uvp uvvp +video/vnd.dece.sd uvs uvvs +video/vnd.dece.video uvv uvvv +# video/vnd.directv.mpeg +# video/vnd.directv.mpeg-tts +# video/vnd.dlna.mpeg-tts +video/vnd.dvb.file dvb +video/vnd.fvt fvt +# video/vnd.hns.video +# video/vnd.iptvforum.1dparityfec-1010 +# video/vnd.iptvforum.1dparityfec-2005 +# video/vnd.iptvforum.2dparityfec-1010 +# video/vnd.iptvforum.2dparityfec-2005 +# video/vnd.iptvforum.ttsavc +# video/vnd.iptvforum.ttsmpeg2 +# video/vnd.motorola.video +# video/vnd.motorola.videop +video/vnd.mpegurl mxu m4u +video/vnd.ms-playready.media.pyv pyv +# video/vnd.nokia.interleaved-multimedia +# video/vnd.nokia.videovoip +# video/vnd.objectvideo +# video/vnd.sealed.mpeg1 +# video/vnd.sealed.mpeg4 +# video/vnd.sealed.swf +# video/vnd.sealedmedia.softseal.mov +video/vnd.uvvu.mp4 uvu uvvu +video/vnd.vivo viv +video/webm webm +video/x-f4v f4v +video/x-fli fli +video/x-flv flv +video/x-m4v m4v +video/x-matroska mkv mk3d mks +video/x-mng mng +video/x-ms-asf asf asx +video/x-ms-vob vob +video/x-ms-wm wm +video/x-ms-wmv wmv +video/x-ms-wmx wmx +video/x-ms-wvx wvx +video/x-msvideo avi +video/x-sgi-movie movie +video/x-smv smv +x-conference/x-cooltalk ice diff --git a/node_modules/express/node_modules/send/node_modules/mime/types/node.types b/node_modules/express/node_modules/send/node_modules/mime/types/node.types new file mode 100755 index 0000000..55b2cf7 --- /dev/null +++ b/node_modules/express/node_modules/send/node_modules/mime/types/node.types @@ -0,0 +1,77 @@ +# What: WebVTT +# Why: To allow formats intended for marking up external text track resources. +# http://dev.w3.org/html5/webvtt/ +# Added by: niftylettuce +text/vtt vtt + +# What: Google Chrome Extension +# Why: To allow apps to (work) be served with the right content type header. +# http://codereview.chromium.org/2830017 +# Added by: niftylettuce +application/x-chrome-extension crx + +# What: HTC support +# Why: To properly render .htc files such as CSS3PIE +# Added by: niftylettuce +text/x-component htc + +# What: HTML5 application cache manifes ('.manifest' extension) +# Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps +# per https://developer.mozilla.org/en/offline_resources_in_firefox +# Added by: louisremi +text/cache-manifest manifest + +# What: node binary buffer format +# Why: semi-standard extension w/in the node community +# Added by: tootallnate +application/octet-stream buffer + +# What: The "protected" MP-4 formats used by iTunes. +# Why: Required for streaming music to browsers (?) +# Added by: broofa +application/mp4 m4p +audio/mp4 m4a + +# What: Video format, Part of RFC1890 +# Why: See https://github.com/bentomas/node-mime/pull/6 +# Added by: mjrusso +video/MP2T ts + +# What: EventSource mime type +# Why: mime type of Server-Sent Events stream +# http://www.w3.org/TR/eventsource/#text-event-stream +# Added by: francois2metz +text/event-stream event-stream + +# What: Mozilla App manifest mime type +# Why: https://developer.mozilla.org/en/Apps/Manifest#Serving_manifests +# Added by: ednapiranha +application/x-web-app-manifest+json webapp + +# What: Lua file types +# Why: Googling around shows de-facto consensus on these +# Added by: creationix (Issue #45) +text/x-lua lua +application/x-lua-bytecode luac + +# What: Markdown files, as per http://daringfireball.net/projects/markdown/syntax +# Why: http://stackoverflow.com/questions/10701983/what-is-the-mime-type-for-markdown +# Added by: avoidwork +text/x-markdown markdown md mkd + +# What: ini files +# Why: because they're just text files +# Added by: Matthew Kastor +text/plain ini + +# What: DASH Adaptive Streaming manifest +# Why: https://developer.mozilla.org/en-US/docs/DASH_Adaptive_Streaming_for_HTML_5_Video +# Added by: eelcocramer +application/dash+xml mdp + +# What: OpenType font files - http://www.microsoft.com/typography/otspec/ +# Why: Browsers usually ignore the font MIME types and sniff the content, +# but Chrome, shows a warning if OpenType fonts aren't served with +# the `font/opentype` MIME type: http://i.imgur.com/8c5RN8M.png. +# Added by: alrra +font/opentype otf diff --git a/node_modules/express/node_modules/send/package.json b/node_modules/express/node_modules/send/package.json new file mode 100755 index 0000000..629f452 --- /dev/null +++ b/node_modules/express/node_modules/send/package.json @@ -0,0 +1,54 @@ +{ + "name": "send", + "description": "Better streaming static file server with Range and conditional-GET support", + "version": "0.4.3", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/send" + }, + "keywords": [ + "static", + "file", + "server" + ], + "dependencies": { + "debug": "1.0.2", + "escape-html": "1.0.1", + "finished": "1.2.2", + "fresh": "0.2.2", + "mime": "1.2.11", + "range-parser": "~1.0.0" + }, + "devDependencies": { + "istanbul": "0.2.10", + "mocha": "~1.20.0", + "should": "~4.0.0", + "supertest": "~0.13.0" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --reporter dot", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec" + }, + "readme": "# send\n\n[![NPM version](https://badge.fury.io/js/send.svg)](https://badge.fury.io/js/send)\n[![Build Status](https://travis-ci.org/visionmedia/send.svg?branch=master)](https://travis-ci.org/visionmedia/send)\n[![Coverage Status](https://img.shields.io/coveralls/visionmedia/send.svg?branch=master)](https://coveralls.io/r/visionmedia/send)\n\n Send is Connect's `static()` extracted for generalized use, a streaming static file\n server supporting partial responses (Ranges), conditional-GET negotiation, high test coverage, and granular events which may be leveraged to take appropriate actions in your application or framework.\n\n## Installation\n\n $ npm install send\n\n## Examples\n\n Small:\n\n```js\nvar http = require('http');\nvar send = require('send');\n\nvar app = http.createServer(function(req, res){\n send(req, req.url).pipe(res);\n}).listen(3000);\n```\n\n Serving from a root directory with custom error-handling:\n\n```js\nvar http = require('http');\nvar send = require('send');\nvar url = require('url');\n\nvar app = http.createServer(function(req, res){\n // your custom error-handling logic:\n function error(err) {\n res.statusCode = err.status || 500;\n res.end(err.message);\n }\n\n // your custom directory handling logic:\n function redirect() {\n res.statusCode = 301;\n res.setHeader('Location', req.url + '/');\n res.end('Redirecting to ' + req.url + '/');\n }\n\n // transfer arbitrary files from within\n // /www/example.com/public/*\n send(req, url.parse(req.url).pathname, {root: '/www/example.com/public'})\n .on('error', error)\n .on('directory', redirect)\n .pipe(res);\n}).listen(3000);\n```\n\n## API\n\n### Options\n\n#### etag\n\n Enable or disable etag generation, defaults to true.\n\n#### hidden\n\n Enable or disable transfer of hidden files, defaults to false.\n\n#### index\n\n By default send supports \"index.html\" files, to disable this\n set `false` or to supply a new index pass a string or an array\n in preferred order.\n\n#### maxage\n\n Provide a max-age in milliseconds for http caching, defaults to 0.\n\n#### root\n\n Serve files relative to `path`.\n\n### Events\n\n - `error` an error occurred `(err)`\n - `directory` a directory was requested\n - `file` a file was requested `(path, stat)`\n - `stream` file streaming has started `(stream)`\n - `end` streaming has completed\n\n### .etag(bool)\n\n Enable or disable etag generation, defaults to true.\n\n### .root(dir)\n\n Serve files relative to `path`. Aliased as `.from(dir)`.\n\n### .index(paths)\n\n By default send supports \"index.html\" files, to disable this\n invoke `.index(false)` or to supply a new index pass a string\n or an array in preferred order.\n\n### .maxage(ms)\n\n Provide a max-age in milliseconds for http caching, defaults to 0.\n\n### .hidden(bool)\n\n Enable or disable transfer of hidden files, defaults to false.\n\n## Error-handling\n\n By default when no `error` listeners are present an automatic response will be made, otherwise you have full control over the response, aka you may show a 5xx page etc.\n\n## Caching\n\n It does _not_ perform internal caching, you should use a reverse proxy cache such\n as Varnish for this, or those fancy things called CDNs. If your application is small enough that it would benefit from single-node memory caching, it's small enough that it does not need caching at all ;).\n\n## Debugging\n\n To enable `debug()` instrumentation output export __DEBUG__:\n\n```\n$ DEBUG=send node app\n```\n\n## Running tests\n\n```\n$ npm install\n$ npm test\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/send/issues" + }, + "_id": "send@0.4.3", + "_from": "send@0.4.3" +} diff --git a/node_modules/express/node_modules/serve-static/.npmignore b/node_modules/express/node_modules/serve-static/.npmignore new file mode 100755 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/express/node_modules/serve-static/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/express/node_modules/serve-static/History.md b/node_modules/express/node_modules/serve-static/History.md new file mode 100755 index 0000000..423a29d --- /dev/null +++ b/node_modules/express/node_modules/serve-static/History.md @@ -0,0 +1,66 @@ +1.2.3 / 2014-06-11 +================== + + * deps: send@0.4.3 + - Do not throw un-catchable error on file open race condition + - Use `escape-html` for HTML escaping + - deps: debug@1.0.2 + - deps: finished@1.2.2 + - deps: fresh@0.2.2 + +1.2.2 / 2014-06-09 +================== + + * deps: send@0.4.2 + - fix "event emitter leak" warnings + - deps: debug@1.0.1 + - deps: finished@1.2.1 + +1.2.1 / 2014-06-02 +================== + + * use `escape-html` for escaping + * deps: send@0.4.1 + - Send `max-age` in `Cache-Control` in correct format + +1.2.0 / 2014-05-29 +================== + + * deps: send@0.4.0 + - Calculate ETag with md5 for reduced collisions + - Fix wrong behavior when index file matches directory + - Ignore stream errors after request ends + - Skip directories in index file search + - deps: debug@0.8.1 + +1.1.0 / 2014-04-24 +================== + + * Accept options directly to `send` module + * deps: send@0.3.0 + +1.0.4 / 2014-04-07 +================== + + * Resolve relative paths at middleware setup + * Use parseurl to parse the URL from request + +1.0.3 / 2014-03-20 +================== + + * Do not rely on connect-like environments + +1.0.2 / 2014-03-06 +================== + + * deps: send@0.2.0 + +1.0.1 / 2014-03-05 +================== + + * Add mime export for back-compat + +1.0.0 / 2014-03-05 +================== + + * Genesis from `connect` diff --git a/node_modules/express/node_modules/serve-static/LICENSE b/node_modules/express/node_modules/serve-static/LICENSE new file mode 100755 index 0000000..b7bc085 --- /dev/null +++ b/node_modules/express/node_modules/serve-static/LICENSE @@ -0,0 +1,25 @@ +(The MIT License) + +Copyright (c) 2010 Sencha Inc. +Copyright (c) 2011 LearnBoost +Copyright (c) 2011 TJ Holowaychuk +Copyright (c) 2014 Douglas Christopher Wilson + +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/node_modules/express/node_modules/serve-static/Readme.md b/node_modules/express/node_modules/serve-static/Readme.md new file mode 100755 index 0000000..177bebc --- /dev/null +++ b/node_modules/express/node_modules/serve-static/Readme.md @@ -0,0 +1,90 @@ +# serve-static + +[![NPM version](https://badge.fury.io/js/serve-static.svg)](http://badge.fury.io/js/serve-static) +[![Build Status](https://travis-ci.org/expressjs/serve-static.svg?branch=master)](https://travis-ci.org/expressjs/serve-static) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/serve-static.svg?branch=master)](https://coveralls.io/r/expressjs/serve-static) + +Previously `connect.static()`. + +## Install + +```sh +$ npm install serve-static +``` + +## API + +```js +var serveStatic = require('serve-static') +``` + +### serveStatic(root, options) + +Create a new middleware function to serve files from within a given root +directory. The file to serve will be determined by combining `req.url` +with the provided root directory. + +Options: + +- `hidden` Allow transfer of hidden files. defaults to `false` +- `index` Default file name, defaults to `'index.html'` +- `maxAge` Browser cache maxAge in milliseconds. defaults to `0` +- `redirect` Redirect to trailing "/" when the pathname is a dir. defaults to `true` + +## Examples + +### Serve files with vanilla node.js http server + +```js +var finalhandler = require('finalhandler') +var http = require('http') +var serveStatic = require('serve-static') + +// Serve up public/ftp folder +var serve = serveStatic('public/ftp', {'index': ['index.html', 'index.htm']}) + +// Create server +var server = http.createServer(function(req, res){ + var done = finalhandler(req, res) + serve(req, res, done) +}) + +// Listen +server.listen(3000) +``` + +### Serve all files from ftp folder + +```js +var connect = require('connect') +var serveStatic = require('serve-static') + +var app = connect() + +app.use(serveStatic('public/ftp', {'index': ['default.html', 'default.htm']})) +app.listen(3000) +``` + +## License + +The MIT License (MIT) + +Copyright (c) 2014 Douglas Christopher Wilson + +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/node_modules/express/node_modules/serve-static/index.js b/node_modules/express/node_modules/serve-static/index.js new file mode 100755 index 0000000..1be89c7 --- /dev/null +++ b/node_modules/express/node_modules/serve-static/index.js @@ -0,0 +1,124 @@ +/*! + * serve-static + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var escapeHtml = require('escape-html'); +var parseurl = require('parseurl'); +var resolve = require('path').resolve; +var send = require('send'); +var url = require('url'); + +/** + * Static: + * + * Static file server with the given `root` path. + * + * Examples: + * + * var oneDay = 86400000; + * var serveStatic = require('serve-static'); + * + * connect() + * .use(serveStatic(__dirname + '/public')) + * + * connect() + * .use(serveStatic(__dirname + '/public', { maxAge: oneDay })) + * + * Options: + * + * - `maxAge` Browser cache maxAge in milliseconds. defaults to 0 + * - `hidden` Allow transfer of hidden files. defaults to false + * - `redirect` Redirect to trailing "/" when the pathname is a dir. defaults to true + * - `index` Default file name, defaults to 'index.html' + * + * Further options are forwarded on to `send`. + * + * @param {String} root + * @param {Object} options + * @return {Function} + * @api public + */ + +exports = module.exports = function(root, options){ + options = extend({}, options); + + // root required + if (!root) throw new TypeError('root path required'); + + // resolve root to absolute + root = resolve(root); + + // default redirect + var redirect = false !== options.redirect; + + // setup options for send + options.maxage = options.maxage || options.maxAge || 0; + options.root = root; + + return function staticMiddleware(req, res, next) { + if ('GET' != req.method && 'HEAD' != req.method) return next(); + var opts = extend({}, options); + var originalUrl = url.parse(req.originalUrl || req.url); + var path = parseurl(req).pathname; + + if (path == '/' && originalUrl.pathname[originalUrl.pathname.length - 1] != '/') { + return directory(); + } + + function directory() { + if (!redirect) return next(); + var target; + originalUrl.pathname += '/'; + target = url.format(originalUrl); + res.statusCode = 303; + res.setHeader('Location', target); + res.end('Redirecting to ' + escapeHtml(target)); + } + + function error(err) { + if (404 == err.status) return next(); + next(err); + } + + send(req, path, opts) + .on('error', error) + .on('directory', directory) + .pipe(res); + }; +}; + +/** + * Expose mime module. + * + * If you wish to extend the mime table use this + * reference to the "mime" module in the npm registry. + */ + +exports.mime = send.mime; + +/** + * Shallow clone a single object. + * + * @param {Object} obj + * @param {Object} source + * @return {Object} + * @api private + */ + +function extend(obj, source) { + if (!source) return obj; + + for (var prop in source) { + obj[prop] = source[prop]; + } + + return obj; +}; diff --git a/node_modules/express/node_modules/serve-static/package.json b/node_modules/express/node_modules/serve-static/package.json new file mode 100755 index 0000000..892eac0 --- /dev/null +++ b/node_modules/express/node_modules/serve-static/package.json @@ -0,0 +1,40 @@ +{ + "name": "serve-static", + "description": "Serve static files", + "version": "1.2.3", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/expressjs/serve-static" + }, + "dependencies": { + "escape-html": "1.0.1", + "parseurl": "1.0.1", + "send": "0.4.3" + }, + "devDependencies": { + "istanbul": "0.2.10", + "mocha": "~1.20.0", + "should": "~4.0.0", + "supertest": "~0.13.0" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --reporter dot --require should test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --require should test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --require should test/" + }, + "readme": "# serve-static\n\n[![NPM version](https://badge.fury.io/js/serve-static.svg)](http://badge.fury.io/js/serve-static)\n[![Build Status](https://travis-ci.org/expressjs/serve-static.svg?branch=master)](https://travis-ci.org/expressjs/serve-static)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/serve-static.svg?branch=master)](https://coveralls.io/r/expressjs/serve-static)\n\nPreviously `connect.static()`.\n\n## Install\n\n```sh\n$ npm install serve-static\n```\n\n## API\n\n```js\nvar serveStatic = require('serve-static')\n```\n\n### serveStatic(root, options)\n\nCreate a new middleware function to serve files from within a given root\ndirectory. The file to serve will be determined by combining `req.url`\nwith the provided root directory.\n\nOptions:\n\n- `hidden` Allow transfer of hidden files. defaults to `false`\n- `index` Default file name, defaults to `'index.html'`\n- `maxAge` Browser cache maxAge in milliseconds. defaults to `0`\n- `redirect` Redirect to trailing \"/\" when the pathname is a dir. defaults to `true`\n\n## Examples\n\n### Serve files with vanilla node.js http server\n\n```js\nvar finalhandler = require('finalhandler')\nvar http = require('http')\nvar serveStatic = require('serve-static')\n\n// Serve up public/ftp folder\nvar serve = serveStatic('public/ftp', {'index': ['index.html', 'index.htm']})\n\n// Create server\nvar server = http.createServer(function(req, res){\n var done = finalhandler(req, res)\n serve(req, res, done)\n})\n\n// Listen\nserver.listen(3000)\n```\n\n### Serve all files from ftp folder\n\n```js\nvar connect = require('connect')\nvar serveStatic = require('serve-static')\n\nvar app = connect()\n\napp.use(serveStatic('public/ftp', {'index': ['default.html', 'default.htm']}))\napp.listen(3000)\n```\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Douglas Christopher Wilson\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/expressjs/serve-static/issues" + }, + "_id": "serve-static@1.2.3", + "_from": "serve-static@1.2.3" +} diff --git a/node_modules/express/node_modules/type-is/.npmignore b/node_modules/express/node_modules/type-is/.npmignore new file mode 100755 index 0000000..5acd1cf --- /dev/null +++ b/node_modules/express/node_modules/type-is/.npmignore @@ -0,0 +1,2 @@ +test.js +.travis.yml diff --git a/node_modules/express/node_modules/type-is/HISTORY.md b/node_modules/express/node_modules/type-is/HISTORY.md new file mode 100755 index 0000000..a2b796d --- /dev/null +++ b/node_modules/express/node_modules/type-is/HISTORY.md @@ -0,0 +1,30 @@ + +1.2.1 / 2014-06-03 +================== + +* Switch dependency from `mime` to `mime-types@1.0.0` + +1.2.0 / 2014-05-11 +================== + + * support suffix matching: + + - `+json` matches `application/vnd+json` + - `*/vnd+json` matches `application/vnd+json` + - `application/*+json` matches `application/vnd+json` + +1.1.0 / 2014-04-12 +================== + + * add non-array values support + * expose internal utilities: + + - `.is()` + - `.hasBody()` + - `.normalize()` + - `.match()` + +1.0.1 / 2014-03-30 +================== + + * add `multipart` as a shorthand diff --git a/node_modules/express/node_modules/type-is/README.md b/node_modules/express/node_modules/type-is/README.md new file mode 100755 index 0000000..35f383f --- /dev/null +++ b/node_modules/express/node_modules/type-is/README.md @@ -0,0 +1,98 @@ +# type-is [![Build Status](https://travis-ci.org/expressjs/type-is.svg?branch=master)](https://travis-ci.org/expressjs/type-is) [![NPM version](https://badge.fury.io/js/type-is.svg)](https://badge.fury.io/js/type-is) + +Infer the content-type of a request. + +### Install + +```sh +$ npm install type-is +``` + +## API + +```js +var http = require('http') +var is = require('type-is') + +http.createServer(function (req, res) { + is(req, ['text/*']) +}) +``` + +### type = is(request, types) + +`request` is the node HTTP request. `types` is an array of types. + +```js +// req.headers.content-type = 'application/json' + +is(req, ['json']) // 'json' +is(req, ['html', 'json']) // 'json' +is(req, ['application/*']) // 'application/json' +is(req, ['application/json']) // 'application/json' + +is(req, ['html']) // false +``` + +#### Each type can be: + +- An extension name such as `json`. This name will be returned if matched. +- A mime type such as `application/json`. +- A mime type with a wildcard such as `*/json` or `application/*`. The full mime type will be returned if matched +- A suffix such as `+json`. This can be combined with a wildcard such as `*/vnd+json` or `application/*+json`. The full mime type will be returned if matched. + +`false` will be returned if no type matches. + +## Examples + +#### Example body parser + +```js +var is = require('type-is'); +var parse = require('body'); +var busboy = require('busboy'); + +function bodyParser(req, res, next) { + var hasRequestBody = 'content-type' in req.headers + || 'transfer-encoding' in req.headers; + if (!hasRequestBody) return next(); + + switch (is(req, ['urlencoded', 'json', 'multipart'])) { + case 'urlencoded': + // parse urlencoded body + break + case 'json': + // parse json body + break + case 'multipart': + // parse multipart body + break + default: + // 415 error code + } +} +``` + +## License + +The MIT License (MIT) + +Copyright (c) 2013 Jonathan Ong me@jongleberry.com + +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/node_modules/express/node_modules/type-is/index.js b/node_modules/express/node_modules/type-is/index.js new file mode 100755 index 0000000..80afaf7 --- /dev/null +++ b/node_modules/express/node_modules/type-is/index.js @@ -0,0 +1,177 @@ + +var mime = require('mime-types'); + +var slice = [].slice; + +module.exports = typeofrequest; +typeofrequest.is = typeis; +typeofrequest.hasBody = hasbody; +typeofrequest.normalize = normalize; +typeofrequest.match = mimeMatch; + +/** + * Compare a `value` content-type with `types`. + * Each `type` can be an extension like `html`, + * a special shortcut like `multipart` or `urlencoded`, + * or a mime type. + * + * If no types match, `false` is returned. + * Otherwise, the first `type` that matches is returned. + * + * @param {String} value + * @param {Array} types + * @return String + */ + +function typeis(value, types) { + if (!value) return false; + if (types && !Array.isArray(types)) types = slice.call(arguments, 1); + + // remove stuff like charsets + var index = value.indexOf(';') + value = ~index ? value.slice(0, index) : value + + // no types, return the content type + if (!types || !types.length) return value; + + var type; + for (var i = 0; i < types.length; i++) { + if (mimeMatch(normalize(type = types[i]), value)) { + return type[0] === '+' || ~type.indexOf('*') + ? value + : type + } + } + + // no matches + return false; +} + +/** + * Check if a request has a request body. + * A request with a body __must__ either have `transfer-encoding` + * or `content-length` headers set. + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3 + * + * @param {Object} request + * @return {Boolean} + * @api public + */ + +function hasbody(req) { + var headers = req.headers; + if ('transfer-encoding' in headers) return true; + var length = headers['content-length']; + if (!length) return false; + // no idea when this would happen, but `isNaN(null) === false` + if (isNaN(length)) return false; + return !!parseInt(length, 10); +} + +/** + * Check if the incoming request contains the "Content-Type" + * header field, and it contains any of the give mime `type`s. + * If there is no request body, `null` is returned. + * If there is no content type, `false` is returned. + * Otherwise, it returns the first `type` that matches. + * + * Examples: + * + * // With Content-Type: text/html; charset=utf-8 + * this.is('html'); // => 'html' + * this.is('text/html'); // => 'text/html' + * this.is('text/*', 'application/json'); // => 'text/html' + * + * // When Content-Type is application/json + * this.is('json', 'urlencoded'); // => 'json' + * this.is('application/json'); // => 'application/json' + * this.is('html', 'application/*'); // => 'application/json' + * + * this.is('html'); // => false + * + * @param {String|Array} types... + * @return {String|false|null} + * @api public + */ + +function typeofrequest(req, types) { + if (!hasbody(req)) return null; + if (types && !Array.isArray(types)) types = slice.call(arguments, 1); + return typeis(req.headers['content-type'], types); +} + +/** + * Normalize a mime type. + * If it's a shorthand, expand it to a valid mime type. + * + * In general, you probably want: + * + * var type = is(req, ['urlencoded', 'json', 'multipart']); + * + * Then use the appropriate body parsers. + * These three are the most common request body types + * and are thus ensured to work. + * + * @param {String} type + * @api private + */ + +function normalize(type) { + switch (type) { + case 'urlencoded': return 'application/x-www-form-urlencoded'; + case 'multipart': + type = 'multipart/*'; + break; + } + + return type[0] === '+' || ~type.indexOf('/') + ? type + : mime.lookup(type) +} + +/** + * Check if `exected` mime type + * matches `actual` mime type with + * wildcard and +suffix support. + * + * @param {String} expected + * @param {String} actual + * @return {Boolean} + * @api private + */ + +function mimeMatch(expected, actual) { + if (expected === actual) return true; + + actual = actual.split('/'); + + if (expected[0] === '+') { + // support +suffix + return Boolean(actual[1]) + && expected.length <= actual[1].length + && expected === actual[1].substr(0 - expected.length) + } + + if (!~expected.indexOf('*')) return false; + + expected = expected.split('/'); + + if (expected[0] === '*') { + // support */yyy + return expected[1] === actual[1] + } + + if (expected[1] === '*') { + // support xxx/* + return expected[0] === actual[0] + } + + if (expected[1][0] === '*' && expected[1][1] === '+') { + // support xxx/*+zzz + return expected[0] === actual[0] + && expected[1].length <= actual[1].length + 1 + && expected[1].substr(1) === actual[1].substr(1 - expected[1].length) + } + + return false +} diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/.npmignore b/node_modules/express/node_modules/type-is/node_modules/mime-types/.npmignore new file mode 100755 index 0000000..8453555 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/.npmignore @@ -0,0 +1,52 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store* +# Icon? +ehthumbs.db +Thumbs.db + +# Node.js # +########### +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +node_modules +npm-debug.log diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/.travis.yml b/node_modules/express/node_modules/type-is/node_modules/mime-types/.travis.yml new file mode 100755 index 0000000..6e5919d --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/LICENSE b/node_modules/express/node_modules/type-is/node_modules/mime-types/LICENSE new file mode 100755 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +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/node_modules/express/node_modules/type-is/node_modules/mime-types/Makefile b/node_modules/express/node_modules/type-is/node_modules/mime-types/Makefile new file mode 100755 index 0000000..ceaf011 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/Makefile @@ -0,0 +1,9 @@ + +build: + node --harmony-generators build.js + +test: + node test/mime.js + mocha --require should --reporter spec test/test.js + +.PHONY: build test diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/README.md b/node_modules/express/node_modules/type-is/node_modules/mime-types/README.md new file mode 100755 index 0000000..8e62de5 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/README.md @@ -0,0 +1,100 @@ +# mime-types [![Build Status](https://travis-ci.org/expressjs/mime-types.svg?branch=master)](https://travis-ci.org/expressjs/mime-types) [![NPM version](https://badge.fury.io/js/mime-types.svg)](https://badge.fury.io/js/mime-types) + +The ultimate javascript content-type utility. + +### Install + +```sh +$ npm install mime-types +``` + +#### Similar to [mime](https://github.com/broofa/node-mime) except: + +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- No fallbacks, so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- Additional mime types are added such as jade and stylus. Feel free to add more! +- Browser support via Browserify and Component by converting lists to JSON files. + +Otherwise, the API is compatible. + +### Adding Types + +If you'd like to add additional types, +simply create a PR adding the type to `custom.json` and +a reference link to the [sources](SOURCES.md). + +Do __NOT__ edit `mime.json` or `node.json`. +Those are pulled using `build.js`. +You should only touch `custom.json`. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/x-markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/x-markdown') // 'UTF-8' +``` + +### mime.types[extension] = type + +A map of content-types by extension. + +### mime.extensions[type] = [extensions] + +A map of extensions by content-type. + +### mime.define(types) + +Globally add definitions. +`types` must be an object of the form: + +```js +{ + "": [extensions...], + "": [extensions...] +} +``` + +See the `.json` files in `lib/` for examples. + +## License + +[MIT](LICENSE) diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/SOURCES.md b/node_modules/express/node_modules/type-is/node_modules/mime-types/SOURCES.md new file mode 100755 index 0000000..4cc3cb1 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/SOURCES.md @@ -0,0 +1,16 @@ + +### Sources for custom types + +This is a list of sources for any custom mime types. +When adding custom mime types, please link to where you found the mime type, +even if it's from an unofficial source. + +- `text/coffeescript` - http://coffeescript.org/#scripts +- `text/x-handlebars-template` - https://handlebarsjs.com/#getting-started +- `text/x-sass` & `text/x-scss` - https://github.com/janlelis/rubybuntu-mime/blob/master/sass.xml + +[Sources for node.json types](https://github.com/broofa/node-mime/blob/master/types/node.types) + +### Notes on weird types + +- `font/opentype` - This type is technically invalid according to the spec. No valid types begin with `font/`. No-one uses the official type of `application/vnd.ms-opentype` as the community standardized `application/x-font-otf`. However, chrome logs nonsense warnings unless opentype fonts are served with `font/opentype`. [[1]](http://stackoverflow.com/questions/2871655/proper-mime-type-for-fonts) diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/build.js b/node_modules/express/node_modules/type-is/node_modules/mime-types/build.js new file mode 100755 index 0000000..6ba0171 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/build.js @@ -0,0 +1,57 @@ + +/** + * http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types + * https://github.com/broofa/node-mime/blob/master/types/node.types + * + * Convert these text files to JSON for browser usage. + */ + +var co = require('co') +var fs = require('fs') +var path = require('path') +var cogent = require('cogent') + +function* get(url) { + var res = yield* cogent(url, { + string: true + }) + + if (res.statusCode !== 200) + throw new Error('got status code ' + res.statusCode + ' from ' + url) + + var text = res.text + var json = {} + // http://en.wikipedia.org/wiki/Internet_media_type#Naming + /** + * Mime types and associated extensions are stored in the form: + * + * + * + * And some are commented out with a leading `#` because they have no associated extensions. + * This regexp checks whether a single line matches this format, ignoring lines that are just comments. + * We could also just remove all lines that start with `#` if we want to make the JSON files smaller + * and ignore all mime types without associated extensions. + */ + var re = /^(?:# )?([\w-]+\/[\w\+\.-]+)(?:\s+\w+)*$/ + text = text.split('\n') + .filter(Boolean) + .forEach(function (line) { + line = line.trim() + if (!line) return + var match = re.exec(line) + if (!match) return + // remove the leading # and and return all the s + json[match[1]] = line.replace(/^(?:# )?([\w-]+\/[\w\+\.-]+)/, '') + .split(/\s+/) + .filter(Boolean) + }) + fs.writeFileSync('lib/' + path.basename(url).split('.')[0] + '.json', + JSON.stringify(json, null, 2) + '\n') +} + +co(function* () { + yield [ + get('http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types'), + get('https://raw.githubusercontent.com/broofa/node-mime/master/types/node.types') + ] +})() diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/component.json b/node_modules/express/node_modules/type-is/node_modules/mime-types/component.json new file mode 100755 index 0000000..32f31b2 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/component.json @@ -0,0 +1,16 @@ +{ + "name": "mime-types", + "description": "ultimate mime type utility", + "version": "0.1.0", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com", + "twitter": "https://twitter.com/jongleberry" + }, + "repository": "expressjs/mime-types", + "license": "MIT", + "main": "lib/index.js", + "scripts": ["lib/index.js"], + "json": ["mime.json", "node.json", "custom.json"] +} diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/custom.json b/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/custom.json new file mode 100755 index 0000000..ab145bf --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/custom.json @@ -0,0 +1,24 @@ +{ + "text/jade": [ + "jade" + ], + "text/stylus": [ + "stylus", + "styl" + ], + "text/less": [ + "less" + ], + "text/x-sass": [ + "sass" + ], + "text/x-scss": [ + "scss" + ], + "text/coffeescript": [ + "coffee" + ], + "text/x-handlebars-template": [ + "hbs" + ] +} diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/index.js b/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/index.js new file mode 100755 index 0000000..27559ea --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/index.js @@ -0,0 +1,74 @@ + +// types[extension] = type +exports.types = Object.create(null) +// extensions[type] = [extensions] +exports.extensions = Object.create(null) +// define more mime types +exports.define = define + +// store the json files +exports.json = { + mime: require('./mime.json'), + node: require('./node.json'), + custom: require('./custom.json'), +} + +exports.lookup = function (string) { + if (!string || typeof string !== "string") return false + string = string.replace(/.*[\.\/\\]/, '').toLowerCase() + if (!string) return false + return exports.types[string] || false +} + +exports.extension = function (type) { + if (!type || typeof type !== "string") return false + type = type.match(/^\s*([^;\s]*)(?:;|\s|$)/) + if (!type) return false + var exts = exports.extensions[type[1].toLowerCase()] + if (!exts || !exts.length) return false + return exts[0] +} + +// type has to be an exact mime type +exports.charset = function (type) { + // special cases + switch (type) { + case 'application/json': return 'UTF-8' + } + + // default text/* to utf-8 + if (/^text\//.test(type)) return 'UTF-8' + + return false +} + +// backwards compatibility +exports.charsets = { + lookup: exports.charset +} + +exports.contentType = function (type) { + if (!type || typeof type !== "string") return false + if (!~type.indexOf('/')) type = exports.lookup(type) + if (!type) return false + if (!~type.indexOf('charset')) { + var charset = exports.charset(type) + if (charset) type += '; charset=' + charset.toLowerCase() + } + return type +} + +define(exports.json.mime) +define(exports.json.node) +define(exports.json.custom) + +function define(json) { + Object.keys(json).forEach(function (type) { + var exts = json[type] || [] + exports.extensions[type] = exports.extensions[type] || [] + exts.forEach(function (ext) { + if (!~exports.extensions[type].indexOf(ext)) exports.extensions[type].push(ext) + exports.types[ext] = type + }) + }) +} diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/mime.json b/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/mime.json new file mode 100755 index 0000000..f445a86 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/mime.json @@ -0,0 +1,3317 @@ +{ + "application/1d-interleaved-parityfec": [], + "application/3gpp-ims+xml": [], + "application/activemessage": [], + "application/andrew-inset": [ + "ez" + ], + "application/applefile": [], + "application/applixware": [ + "aw" + ], + "application/atom+xml": [ + "atom" + ], + "application/atomcat+xml": [ + "atomcat" + ], + "application/atomicmail": [], + "application/atomsvc+xml": [ + "atomsvc" + ], + "application/auth-policy+xml": [], + "application/batch-smtp": [], + "application/beep+xml": [], + "application/calendar+xml": [], + "application/cals-1840": [], + "application/ccmp+xml": [], + "application/ccxml+xml": [ + "ccxml" + ], + "application/cdmi-capability": [ + "cdmia" + ], + "application/cdmi-container": [ + "cdmic" + ], + "application/cdmi-domain": [ + "cdmid" + ], + "application/cdmi-object": [ + "cdmio" + ], + "application/cdmi-queue": [ + "cdmiq" + ], + "application/cea-2018+xml": [], + "application/cellml+xml": [], + "application/cfw": [], + "application/cnrp+xml": [], + "application/commonground": [], + "application/conference-info+xml": [], + "application/cpl+xml": [], + "application/csta+xml": [], + "application/cstadata+xml": [], + "application/cu-seeme": [ + "cu" + ], + "application/cybercash": [], + "application/davmount+xml": [ + "davmount" + ], + "application/dca-rft": [], + "application/dec-dx": [], + "application/dialog-info+xml": [], + "application/dicom": [], + "application/dns": [], + "application/docbook+xml": [ + "dbk" + ], + "application/dskpp+xml": [], + "application/dssc+der": [ + "dssc" + ], + "application/dssc+xml": [ + "xdssc" + ], + "application/dvcs": [], + "application/ecmascript": [ + "ecma" + ], + "application/edi-consent": [], + "application/edi-x12": [], + "application/edifact": [], + "application/emma+xml": [ + "emma" + ], + "application/epp+xml": [], + "application/epub+zip": [ + "epub" + ], + "application/eshop": [], + "application/example": [], + "application/exi": [ + "exi" + ], + "application/fastinfoset": [], + "application/fastsoap": [], + "application/fits": [], + "application/font-tdpfr": [ + "pfr" + ], + "application/framework-attributes+xml": [], + "application/gml+xml": [ + "gml" + ], + "application/gpx+xml": [ + "gpx" + ], + "application/gxf": [ + "gxf" + ], + "application/h224": [], + "application/held+xml": [], + "application/http": [], + "application/hyperstudio": [ + "stk" + ], + "application/ibe-key-request+xml": [], + "application/ibe-pkg-reply+xml": [], + "application/ibe-pp-data": [], + "application/iges": [], + "application/im-iscomposing+xml": [], + "application/index": [], + "application/index.cmd": [], + "application/index.obj": [], + "application/index.response": [], + "application/index.vnd": [], + "application/inkml+xml": [ + "ink", + "inkml" + ], + "application/iotp": [], + "application/ipfix": [ + "ipfix" + ], + "application/ipp": [], + "application/isup": [], + "application/java-archive": [ + "jar" + ], + "application/java-serialized-object": [ + "ser" + ], + "application/java-vm": [ + "class" + ], + "application/javascript": [ + "js" + ], + "application/json": [ + "json" + ], + "application/jsonml+json": [ + "jsonml" + ], + "application/kpml-request+xml": [], + "application/kpml-response+xml": [], + "application/lost+xml": [ + "lostxml" + ], + "application/mac-binhex40": [ + "hqx" + ], + "application/mac-compactpro": [ + "cpt" + ], + "application/macwriteii": [], + "application/mads+xml": [ + "mads" + ], + "application/marc": [ + "mrc" + ], + "application/marcxml+xml": [ + "mrcx" + ], + "application/mathematica": [ + "ma", + "nb", + "mb" + ], + "application/mathml-content+xml": [], + "application/mathml-presentation+xml": [], + "application/mathml+xml": [ + "mathml" + ], + "application/mbms-associated-procedure-description+xml": [], + "application/mbms-deregister+xml": [], + "application/mbms-envelope+xml": [], + "application/mbms-msk+xml": [], + "application/mbms-msk-response+xml": [], + "application/mbms-protection-description+xml": [], + "application/mbms-reception-report+xml": [], + "application/mbms-register+xml": [], + "application/mbms-register-response+xml": [], + "application/mbms-user-service-description+xml": [], + "application/mbox": [ + "mbox" + ], + "application/media_control+xml": [], + "application/mediaservercontrol+xml": [ + "mscml" + ], + "application/metalink+xml": [ + "metalink" + ], + "application/metalink4+xml": [ + "meta4" + ], + "application/mets+xml": [ + "mets" + ], + "application/mikey": [], + "application/mods+xml": [ + "mods" + ], + "application/moss-keys": [], + "application/moss-signature": [], + "application/mosskey-data": [], + "application/mosskey-request": [], + "application/mp21": [ + "m21", + "mp21" + ], + "application/mp4": [ + "mp4s" + ], + "application/mpeg4-generic": [], + "application/mpeg4-iod": [], + "application/mpeg4-iod-xmt": [], + "application/msc-ivr+xml": [], + "application/msc-mixer+xml": [], + "application/msword": [ + "doc", + "dot" + ], + "application/mxf": [ + "mxf" + ], + "application/nasdata": [], + "application/news-checkgroups": [], + "application/news-groupinfo": [], + "application/news-transmission": [], + "application/nss": [], + "application/ocsp-request": [], + "application/ocsp-response": [], + "application/octet-stream": [ + "bin", + "dms", + "lrf", + "mar", + "so", + "dist", + "distz", + "pkg", + "bpk", + "dump", + "elc", + "deploy" + ], + "application/oda": [ + "oda" + ], + "application/oebps-package+xml": [ + "opf" + ], + "application/ogg": [ + "ogx" + ], + "application/omdoc+xml": [ + "omdoc" + ], + "application/onenote": [ + "onetoc", + "onetoc2", + "onetmp", + "onepkg" + ], + "application/oxps": [ + "oxps" + ], + "application/parityfec": [], + "application/patch-ops-error+xml": [ + "xer" + ], + "application/pdf": [ + "pdf" + ], + "application/pgp-encrypted": [ + "pgp" + ], + "application/pgp-keys": [], + "application/pgp-signature": [ + "asc", + "sig" + ], + "application/pics-rules": [ + "prf" + ], + "application/pidf+xml": [], + "application/pidf-diff+xml": [], + "application/pkcs10": [ + "p10" + ], + "application/pkcs7-mime": [ + "p7m", + "p7c" + ], + "application/pkcs7-signature": [ + "p7s" + ], + "application/pkcs8": [ + "p8" + ], + "application/pkix-attr-cert": [ + "ac" + ], + "application/pkix-cert": [ + "cer" + ], + "application/pkix-crl": [ + "crl" + ], + "application/pkix-pkipath": [ + "pkipath" + ], + "application/pkixcmp": [ + "pki" + ], + "application/pls+xml": [ + "pls" + ], + "application/poc-settings+xml": [], + "application/postscript": [ + "ai", + "eps", + "ps" + ], + "application/prs.alvestrand.titrax-sheet": [], + "application/prs.cww": [ + "cww" + ], + "application/prs.nprend": [], + "application/prs.plucker": [], + "application/prs.rdf-xml-crypt": [], + "application/prs.xsf+xml": [], + "application/pskc+xml": [ + "pskcxml" + ], + "application/qsig": [], + "application/rdf+xml": [ + "rdf" + ], + "application/reginfo+xml": [ + "rif" + ], + "application/relax-ng-compact-syntax": [ + "rnc" + ], + "application/remote-printing": [], + "application/resource-lists+xml": [ + "rl" + ], + "application/resource-lists-diff+xml": [ + "rld" + ], + "application/riscos": [], + "application/rlmi+xml": [], + "application/rls-services+xml": [ + "rs" + ], + "application/rpki-ghostbusters": [ + "gbr" + ], + "application/rpki-manifest": [ + "mft" + ], + "application/rpki-roa": [ + "roa" + ], + "application/rpki-updown": [], + "application/rsd+xml": [ + "rsd" + ], + "application/rss+xml": [ + "rss" + ], + "application/rtf": [ + "rtf" + ], + "application/rtx": [], + "application/samlassertion+xml": [], + "application/samlmetadata+xml": [], + "application/sbml+xml": [ + "sbml" + ], + "application/scvp-cv-request": [ + "scq" + ], + "application/scvp-cv-response": [ + "scs" + ], + "application/scvp-vp-request": [ + "spq" + ], + "application/scvp-vp-response": [ + "spp" + ], + "application/sdp": [ + "sdp" + ], + "application/set-payment": [], + "application/set-payment-initiation": [ + "setpay" + ], + "application/set-registration": [], + "application/set-registration-initiation": [ + "setreg" + ], + "application/sgml": [], + "application/sgml-open-catalog": [], + "application/shf+xml": [ + "shf" + ], + "application/sieve": [], + "application/simple-filter+xml": [], + "application/simple-message-summary": [], + "application/simplesymbolcontainer": [], + "application/slate": [], + "application/smil": [], + "application/smil+xml": [ + "smi", + "smil" + ], + "application/soap+fastinfoset": [], + "application/soap+xml": [], + "application/sparql-query": [ + "rq" + ], + "application/sparql-results+xml": [ + "srx" + ], + "application/spirits-event+xml": [], + "application/srgs": [ + "gram" + ], + "application/srgs+xml": [ + "grxml" + ], + "application/sru+xml": [ + "sru" + ], + "application/ssdl+xml": [ + "ssdl" + ], + "application/ssml+xml": [ + "ssml" + ], + "application/tamp-apex-update": [], + "application/tamp-apex-update-confirm": [], + "application/tamp-community-update": [], + "application/tamp-community-update-confirm": [], + "application/tamp-error": [], + "application/tamp-sequence-adjust": [], + "application/tamp-sequence-adjust-confirm": [], + "application/tamp-status-query": [], + "application/tamp-status-response": [], + "application/tamp-update": [], + "application/tamp-update-confirm": [], + "application/tei+xml": [ + "tei", + "teicorpus" + ], + "application/thraud+xml": [ + "tfi" + ], + "application/timestamp-query": [], + "application/timestamp-reply": [], + "application/timestamped-data": [ + "tsd" + ], + "application/tve-trigger": [], + "application/ulpfec": [], + "application/vcard+xml": [], + "application/vemmi": [], + "application/vividence.scriptfile": [], + "application/vnd.3gpp.bsf+xml": [], + "application/vnd.3gpp.pic-bw-large": [ + "plb" + ], + "application/vnd.3gpp.pic-bw-small": [ + "psb" + ], + "application/vnd.3gpp.pic-bw-var": [ + "pvb" + ], + "application/vnd.3gpp.sms": [], + "application/vnd.3gpp2.bcmcsinfo+xml": [], + "application/vnd.3gpp2.sms": [], + "application/vnd.3gpp2.tcap": [ + "tcap" + ], + "application/vnd.3m.post-it-notes": [ + "pwn" + ], + "application/vnd.accpac.simply.aso": [ + "aso" + ], + "application/vnd.accpac.simply.imp": [ + "imp" + ], + "application/vnd.acucobol": [ + "acu" + ], + "application/vnd.acucorp": [ + "atc", + "acutc" + ], + "application/vnd.adobe.air-application-installer-package+zip": [ + "air" + ], + "application/vnd.adobe.formscentral.fcdt": [ + "fcdt" + ], + "application/vnd.adobe.fxp": [ + "fxp", + "fxpl" + ], + "application/vnd.adobe.partial-upload": [], + "application/vnd.adobe.xdp+xml": [ + "xdp" + ], + "application/vnd.adobe.xfdf": [ + "xfdf" + ], + "application/vnd.aether.imp": [], + "application/vnd.ah-barcode": [], + "application/vnd.ahead.space": [ + "ahead" + ], + "application/vnd.airzip.filesecure.azf": [ + "azf" + ], + "application/vnd.airzip.filesecure.azs": [ + "azs" + ], + "application/vnd.amazon.ebook": [ + "azw" + ], + "application/vnd.americandynamics.acc": [ + "acc" + ], + "application/vnd.amiga.ami": [ + "ami" + ], + "application/vnd.amundsen.maze+xml": [], + "application/vnd.android.package-archive": [ + "apk" + ], + "application/vnd.anser-web-certificate-issue-initiation": [ + "cii" + ], + "application/vnd.anser-web-funds-transfer-initiation": [ + "fti" + ], + "application/vnd.antix.game-component": [ + "atx" + ], + "application/vnd.apple.installer+xml": [ + "mpkg" + ], + "application/vnd.apple.mpegurl": [ + "m3u8" + ], + "application/vnd.arastra.swi": [], + "application/vnd.aristanetworks.swi": [ + "swi" + ], + "application/vnd.astraea-software.iota": [ + "iota" + ], + "application/vnd.audiograph": [ + "aep" + ], + "application/vnd.autopackage": [], + "application/vnd.avistar+xml": [], + "application/vnd.blueice.multipass": [ + "mpm" + ], + "application/vnd.bluetooth.ep.oob": [], + "application/vnd.bmi": [ + "bmi" + ], + "application/vnd.businessobjects": [ + "rep" + ], + "application/vnd.cab-jscript": [], + "application/vnd.canon-cpdl": [], + "application/vnd.canon-lips": [], + "application/vnd.cendio.thinlinc.clientconf": [], + "application/vnd.chemdraw+xml": [ + "cdxml" + ], + "application/vnd.chipnuts.karaoke-mmd": [ + "mmd" + ], + "application/vnd.cinderella": [ + "cdy" + ], + "application/vnd.cirpack.isdn-ext": [], + "application/vnd.claymore": [ + "cla" + ], + "application/vnd.cloanto.rp9": [ + "rp9" + ], + "application/vnd.clonk.c4group": [ + "c4g", + "c4d", + "c4f", + "c4p", + "c4u" + ], + "application/vnd.cluetrust.cartomobile-config": [ + "c11amc" + ], + "application/vnd.cluetrust.cartomobile-config-pkg": [ + "c11amz" + ], + "application/vnd.collection+json": [], + "application/vnd.commerce-battelle": [], + "application/vnd.commonspace": [ + "csp" + ], + "application/vnd.contact.cmsg": [ + "cdbcmsg" + ], + "application/vnd.cosmocaller": [ + "cmc" + ], + "application/vnd.crick.clicker": [ + "clkx" + ], + "application/vnd.crick.clicker.keyboard": [ + "clkk" + ], + "application/vnd.crick.clicker.palette": [ + "clkp" + ], + "application/vnd.crick.clicker.template": [ + "clkt" + ], + "application/vnd.crick.clicker.wordbank": [ + "clkw" + ], + "application/vnd.criticaltools.wbs+xml": [ + "wbs" + ], + "application/vnd.ctc-posml": [ + "pml" + ], + "application/vnd.ctct.ws+xml": [], + "application/vnd.cups-pdf": [], + "application/vnd.cups-postscript": [], + "application/vnd.cups-ppd": [ + "ppd" + ], + "application/vnd.cups-raster": [], + "application/vnd.cups-raw": [], + "application/vnd.curl": [], + "application/vnd.curl.car": [ + "car" + ], + "application/vnd.curl.pcurl": [ + "pcurl" + ], + "application/vnd.cybank": [], + "application/vnd.dart": [ + "dart" + ], + "application/vnd.data-vision.rdz": [ + "rdz" + ], + "application/vnd.dece.data": [ + "uvf", + "uvvf", + "uvd", + "uvvd" + ], + "application/vnd.dece.ttml+xml": [ + "uvt", + "uvvt" + ], + "application/vnd.dece.unspecified": [ + "uvx", + "uvvx" + ], + "application/vnd.dece.zip": [ + "uvz", + "uvvz" + ], + "application/vnd.denovo.fcselayout-link": [ + "fe_launch" + ], + "application/vnd.dir-bi.plate-dl-nosuffix": [], + "application/vnd.dna": [ + "dna" + ], + "application/vnd.dolby.mlp": [ + "mlp" + ], + "application/vnd.dolby.mobile.1": [], + "application/vnd.dolby.mobile.2": [], + "application/vnd.dpgraph": [ + "dpg" + ], + "application/vnd.dreamfactory": [ + "dfac" + ], + "application/vnd.ds-keypoint": [ + "kpxx" + ], + "application/vnd.dvb.ait": [ + "ait" + ], + "application/vnd.dvb.dvbj": [], + "application/vnd.dvb.esgcontainer": [], + "application/vnd.dvb.ipdcdftnotifaccess": [], + "application/vnd.dvb.ipdcesgaccess": [], + "application/vnd.dvb.ipdcesgaccess2": [], + "application/vnd.dvb.ipdcesgpdd": [], + "application/vnd.dvb.ipdcroaming": [], + "application/vnd.dvb.iptv.alfec-base": [], + "application/vnd.dvb.iptv.alfec-enhancement": [], + "application/vnd.dvb.notif-aggregate-root+xml": [], + "application/vnd.dvb.notif-container+xml": [], + "application/vnd.dvb.notif-generic+xml": [], + "application/vnd.dvb.notif-ia-msglist+xml": [], + "application/vnd.dvb.notif-ia-registration-request+xml": [], + "application/vnd.dvb.notif-ia-registration-response+xml": [], + "application/vnd.dvb.notif-init+xml": [], + "application/vnd.dvb.pfr": [], + "application/vnd.dvb.service": [ + "svc" + ], + "application/vnd.dxr": [], + "application/vnd.dynageo": [ + "geo" + ], + "application/vnd.easykaraoke.cdgdownload": [], + "application/vnd.ecdis-update": [], + "application/vnd.ecowin.chart": [ + "mag" + ], + "application/vnd.ecowin.filerequest": [], + "application/vnd.ecowin.fileupdate": [], + "application/vnd.ecowin.series": [], + "application/vnd.ecowin.seriesrequest": [], + "application/vnd.ecowin.seriesupdate": [], + "application/vnd.emclient.accessrequest+xml": [], + "application/vnd.enliven": [ + "nml" + ], + "application/vnd.eprints.data+xml": [], + "application/vnd.epson.esf": [ + "esf" + ], + "application/vnd.epson.msf": [ + "msf" + ], + "application/vnd.epson.quickanime": [ + "qam" + ], + "application/vnd.epson.salt": [ + "slt" + ], + "application/vnd.epson.ssf": [ + "ssf" + ], + "application/vnd.ericsson.quickcall": [], + "application/vnd.eszigno3+xml": [ + "es3", + "et3" + ], + "application/vnd.etsi.aoc+xml": [], + "application/vnd.etsi.cug+xml": [], + "application/vnd.etsi.iptvcommand+xml": [], + "application/vnd.etsi.iptvdiscovery+xml": [], + "application/vnd.etsi.iptvprofile+xml": [], + "application/vnd.etsi.iptvsad-bc+xml": [], + "application/vnd.etsi.iptvsad-cod+xml": [], + "application/vnd.etsi.iptvsad-npvr+xml": [], + "application/vnd.etsi.iptvservice+xml": [], + "application/vnd.etsi.iptvsync+xml": [], + "application/vnd.etsi.iptvueprofile+xml": [], + "application/vnd.etsi.mcid+xml": [], + "application/vnd.etsi.overload-control-policy-dataset+xml": [], + "application/vnd.etsi.sci+xml": [], + "application/vnd.etsi.simservs+xml": [], + "application/vnd.etsi.tsl+xml": [], + "application/vnd.etsi.tsl.der": [], + "application/vnd.eudora.data": [], + "application/vnd.ezpix-album": [ + "ez2" + ], + "application/vnd.ezpix-package": [ + "ez3" + ], + "application/vnd.f-secure.mobile": [], + "application/vnd.fdf": [ + "fdf" + ], + "application/vnd.fdsn.mseed": [ + "mseed" + ], + "application/vnd.fdsn.seed": [ + "seed", + "dataless" + ], + "application/vnd.ffsns": [], + "application/vnd.fints": [], + "application/vnd.flographit": [ + "gph" + ], + "application/vnd.fluxtime.clip": [ + "ftc" + ], + "application/vnd.font-fontforge-sfd": [], + "application/vnd.framemaker": [ + "fm", + "frame", + "maker", + "book" + ], + "application/vnd.frogans.fnc": [ + "fnc" + ], + "application/vnd.frogans.ltf": [ + "ltf" + ], + "application/vnd.fsc.weblaunch": [ + "fsc" + ], + "application/vnd.fujitsu.oasys": [ + "oas" + ], + "application/vnd.fujitsu.oasys2": [ + "oa2" + ], + "application/vnd.fujitsu.oasys3": [ + "oa3" + ], + "application/vnd.fujitsu.oasysgp": [ + "fg5" + ], + "application/vnd.fujitsu.oasysprs": [ + "bh2" + ], + "application/vnd.fujixerox.art-ex": [], + "application/vnd.fujixerox.art4": [], + "application/vnd.fujixerox.hbpl": [], + "application/vnd.fujixerox.ddd": [ + "ddd" + ], + "application/vnd.fujixerox.docuworks": [ + "xdw" + ], + "application/vnd.fujixerox.docuworks.binder": [ + "xbd" + ], + "application/vnd.fut-misnet": [], + "application/vnd.fuzzysheet": [ + "fzs" + ], + "application/vnd.genomatix.tuxedo": [ + "txd" + ], + "application/vnd.geocube+xml": [], + "application/vnd.geogebra.file": [ + "ggb" + ], + "application/vnd.geogebra.tool": [ + "ggt" + ], + "application/vnd.geometry-explorer": [ + "gex", + "gre" + ], + "application/vnd.geonext": [ + "gxt" + ], + "application/vnd.geoplan": [ + "g2w" + ], + "application/vnd.geospace": [ + "g3w" + ], + "application/vnd.globalplatform.card-content-mgt": [], + "application/vnd.globalplatform.card-content-mgt-response": [], + "application/vnd.gmx": [ + "gmx" + ], + "application/vnd.google-earth.kml+xml": [ + "kml" + ], + "application/vnd.google-earth.kmz": [ + "kmz" + ], + "application/vnd.grafeq": [ + "gqf", + "gqs" + ], + "application/vnd.gridmp": [], + "application/vnd.groove-account": [ + "gac" + ], + "application/vnd.groove-help": [ + "ghf" + ], + "application/vnd.groove-identity-message": [ + "gim" + ], + "application/vnd.groove-injector": [ + "grv" + ], + "application/vnd.groove-tool-message": [ + "gtm" + ], + "application/vnd.groove-tool-template": [ + "tpl" + ], + "application/vnd.groove-vcard": [ + "vcg" + ], + "application/vnd.hal+json": [], + "application/vnd.hal+xml": [ + "hal" + ], + "application/vnd.handheld-entertainment+xml": [ + "zmm" + ], + "application/vnd.hbci": [ + "hbci" + ], + "application/vnd.hcl-bireports": [], + "application/vnd.hhe.lesson-player": [ + "les" + ], + "application/vnd.hp-hpgl": [ + "hpgl" + ], + "application/vnd.hp-hpid": [ + "hpid" + ], + "application/vnd.hp-hps": [ + "hps" + ], + "application/vnd.hp-jlyt": [ + "jlt" + ], + "application/vnd.hp-pcl": [ + "pcl" + ], + "application/vnd.hp-pclxl": [ + "pclxl" + ], + "application/vnd.httphone": [], + "application/vnd.hzn-3d-crossword": [], + "application/vnd.ibm.afplinedata": [], + "application/vnd.ibm.electronic-media": [], + "application/vnd.ibm.minipay": [ + "mpy" + ], + "application/vnd.ibm.modcap": [ + "afp", + "listafp", + "list3820" + ], + "application/vnd.ibm.rights-management": [ + "irm" + ], + "application/vnd.ibm.secure-container": [ + "sc" + ], + "application/vnd.iccprofile": [ + "icc", + "icm" + ], + "application/vnd.igloader": [ + "igl" + ], + "application/vnd.immervision-ivp": [ + "ivp" + ], + "application/vnd.immervision-ivu": [ + "ivu" + ], + "application/vnd.informedcontrol.rms+xml": [], + "application/vnd.informix-visionary": [], + "application/vnd.infotech.project": [], + "application/vnd.infotech.project+xml": [], + "application/vnd.innopath.wamp.notification": [], + "application/vnd.insors.igm": [ + "igm" + ], + "application/vnd.intercon.formnet": [ + "xpw", + "xpx" + ], + "application/vnd.intergeo": [ + "i2g" + ], + "application/vnd.intertrust.digibox": [], + "application/vnd.intertrust.nncp": [], + "application/vnd.intu.qbo": [ + "qbo" + ], + "application/vnd.intu.qfx": [ + "qfx" + ], + "application/vnd.iptc.g2.conceptitem+xml": [], + "application/vnd.iptc.g2.knowledgeitem+xml": [], + "application/vnd.iptc.g2.newsitem+xml": [], + "application/vnd.iptc.g2.newsmessage+xml": [], + "application/vnd.iptc.g2.packageitem+xml": [], + "application/vnd.iptc.g2.planningitem+xml": [], + "application/vnd.ipunplugged.rcprofile": [ + "rcprofile" + ], + "application/vnd.irepository.package+xml": [ + "irp" + ], + "application/vnd.is-xpr": [ + "xpr" + ], + "application/vnd.isac.fcs": [ + "fcs" + ], + "application/vnd.jam": [ + "jam" + ], + "application/vnd.japannet-directory-service": [], + "application/vnd.japannet-jpnstore-wakeup": [], + "application/vnd.japannet-payment-wakeup": [], + "application/vnd.japannet-registration": [], + "application/vnd.japannet-registration-wakeup": [], + "application/vnd.japannet-setstore-wakeup": [], + "application/vnd.japannet-verification": [], + "application/vnd.japannet-verification-wakeup": [], + "application/vnd.jcp.javame.midlet-rms": [ + "rms" + ], + "application/vnd.jisp": [ + "jisp" + ], + "application/vnd.joost.joda-archive": [ + "joda" + ], + "application/vnd.kahootz": [ + "ktz", + "ktr" + ], + "application/vnd.kde.karbon": [ + "karbon" + ], + "application/vnd.kde.kchart": [ + "chrt" + ], + "application/vnd.kde.kformula": [ + "kfo" + ], + "application/vnd.kde.kivio": [ + "flw" + ], + "application/vnd.kde.kontour": [ + "kon" + ], + "application/vnd.kde.kpresenter": [ + "kpr", + "kpt" + ], + "application/vnd.kde.kspread": [ + "ksp" + ], + "application/vnd.kde.kword": [ + "kwd", + "kwt" + ], + "application/vnd.kenameaapp": [ + "htke" + ], + "application/vnd.kidspiration": [ + "kia" + ], + "application/vnd.kinar": [ + "kne", + "knp" + ], + "application/vnd.koan": [ + "skp", + "skd", + "skt", + "skm" + ], + "application/vnd.kodak-descriptor": [ + "sse" + ], + "application/vnd.las.las+xml": [ + "lasxml" + ], + "application/vnd.liberty-request+xml": [], + "application/vnd.llamagraphics.life-balance.desktop": [ + "lbd" + ], + "application/vnd.llamagraphics.life-balance.exchange+xml": [ + "lbe" + ], + "application/vnd.lotus-1-2-3": [ + "123" + ], + "application/vnd.lotus-approach": [ + "apr" + ], + "application/vnd.lotus-freelance": [ + "pre" + ], + "application/vnd.lotus-notes": [ + "nsf" + ], + "application/vnd.lotus-organizer": [ + "org" + ], + "application/vnd.lotus-screencam": [ + "scm" + ], + "application/vnd.lotus-wordpro": [ + "lwp" + ], + "application/vnd.macports.portpkg": [ + "portpkg" + ], + "application/vnd.marlin.drm.actiontoken+xml": [], + "application/vnd.marlin.drm.conftoken+xml": [], + "application/vnd.marlin.drm.license+xml": [], + "application/vnd.marlin.drm.mdcf": [], + "application/vnd.mcd": [ + "mcd" + ], + "application/vnd.medcalcdata": [ + "mc1" + ], + "application/vnd.mediastation.cdkey": [ + "cdkey" + ], + "application/vnd.meridian-slingshot": [], + "application/vnd.mfer": [ + "mwf" + ], + "application/vnd.mfmp": [ + "mfm" + ], + "application/vnd.micrografx.flo": [ + "flo" + ], + "application/vnd.micrografx.igx": [ + "igx" + ], + "application/vnd.mif": [ + "mif" + ], + "application/vnd.minisoft-hp3000-save": [], + "application/vnd.mitsubishi.misty-guard.trustweb": [], + "application/vnd.mobius.daf": [ + "daf" + ], + "application/vnd.mobius.dis": [ + "dis" + ], + "application/vnd.mobius.mbk": [ + "mbk" + ], + "application/vnd.mobius.mqy": [ + "mqy" + ], + "application/vnd.mobius.msl": [ + "msl" + ], + "application/vnd.mobius.plc": [ + "plc" + ], + "application/vnd.mobius.txf": [ + "txf" + ], + "application/vnd.mophun.application": [ + "mpn" + ], + "application/vnd.mophun.certificate": [ + "mpc" + ], + "application/vnd.motorola.flexsuite": [], + "application/vnd.motorola.flexsuite.adsi": [], + "application/vnd.motorola.flexsuite.fis": [], + "application/vnd.motorola.flexsuite.gotap": [], + "application/vnd.motorola.flexsuite.kmr": [], + "application/vnd.motorola.flexsuite.ttc": [], + "application/vnd.motorola.flexsuite.wem": [], + "application/vnd.motorola.iprm": [], + "application/vnd.mozilla.xul+xml": [ + "xul" + ], + "application/vnd.ms-artgalry": [ + "cil" + ], + "application/vnd.ms-asf": [], + "application/vnd.ms-cab-compressed": [ + "cab" + ], + "application/vnd.ms-color.iccprofile": [], + "application/vnd.ms-excel": [ + "xls", + "xlm", + "xla", + "xlc", + "xlt", + "xlw" + ], + "application/vnd.ms-excel.addin.macroenabled.12": [ + "xlam" + ], + "application/vnd.ms-excel.sheet.binary.macroenabled.12": [ + "xlsb" + ], + "application/vnd.ms-excel.sheet.macroenabled.12": [ + "xlsm" + ], + "application/vnd.ms-excel.template.macroenabled.12": [ + "xltm" + ], + "application/vnd.ms-fontobject": [ + "eot" + ], + "application/vnd.ms-htmlhelp": [ + "chm" + ], + "application/vnd.ms-ims": [ + "ims" + ], + "application/vnd.ms-lrm": [ + "lrm" + ], + "application/vnd.ms-office.activex+xml": [], + "application/vnd.ms-officetheme": [ + "thmx" + ], + "application/vnd.ms-opentype": [], + "application/vnd.ms-package.obfuscated-opentype": [], + "application/vnd.ms-pki.seccat": [ + "cat" + ], + "application/vnd.ms-pki.stl": [ + "stl" + ], + "application/vnd.ms-playready.initiator+xml": [], + "application/vnd.ms-powerpoint": [ + "ppt", + "pps", + "pot" + ], + "application/vnd.ms-powerpoint.addin.macroenabled.12": [ + "ppam" + ], + "application/vnd.ms-powerpoint.presentation.macroenabled.12": [ + "pptm" + ], + "application/vnd.ms-powerpoint.slide.macroenabled.12": [ + "sldm" + ], + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": [ + "ppsm" + ], + "application/vnd.ms-powerpoint.template.macroenabled.12": [ + "potm" + ], + "application/vnd.ms-printing.printticket+xml": [], + "application/vnd.ms-project": [ + "mpp", + "mpt" + ], + "application/vnd.ms-tnef": [], + "application/vnd.ms-wmdrm.lic-chlg-req": [], + "application/vnd.ms-wmdrm.lic-resp": [], + "application/vnd.ms-wmdrm.meter-chlg-req": [], + "application/vnd.ms-wmdrm.meter-resp": [], + "application/vnd.ms-word.document.macroenabled.12": [ + "docm" + ], + "application/vnd.ms-word.template.macroenabled.12": [ + "dotm" + ], + "application/vnd.ms-works": [ + "wps", + "wks", + "wcm", + "wdb" + ], + "application/vnd.ms-wpl": [ + "wpl" + ], + "application/vnd.ms-xpsdocument": [ + "xps" + ], + "application/vnd.mseq": [ + "mseq" + ], + "application/vnd.msign": [], + "application/vnd.multiad.creator": [], + "application/vnd.multiad.creator.cif": [], + "application/vnd.music-niff": [], + "application/vnd.musician": [ + "mus" + ], + "application/vnd.muvee.style": [ + "msty" + ], + "application/vnd.mynfc": [ + "taglet" + ], + "application/vnd.ncd.control": [], + "application/vnd.ncd.reference": [], + "application/vnd.nervana": [], + "application/vnd.netfpx": [], + "application/vnd.neurolanguage.nlu": [ + "nlu" + ], + "application/vnd.nitf": [ + "ntf", + "nitf" + ], + "application/vnd.noblenet-directory": [ + "nnd" + ], + "application/vnd.noblenet-sealer": [ + "nns" + ], + "application/vnd.noblenet-web": [ + "nnw" + ], + "application/vnd.nokia.catalogs": [], + "application/vnd.nokia.conml+wbxml": [], + "application/vnd.nokia.conml+xml": [], + "application/vnd.nokia.isds-radio-presets": [], + "application/vnd.nokia.iptv.config+xml": [], + "application/vnd.nokia.landmark+wbxml": [], + "application/vnd.nokia.landmark+xml": [], + "application/vnd.nokia.landmarkcollection+xml": [], + "application/vnd.nokia.n-gage.ac+xml": [], + "application/vnd.nokia.n-gage.data": [ + "ngdat" + ], + "application/vnd.nokia.ncd": [], + "application/vnd.nokia.pcd+wbxml": [], + "application/vnd.nokia.pcd+xml": [], + "application/vnd.nokia.radio-preset": [ + "rpst" + ], + "application/vnd.nokia.radio-presets": [ + "rpss" + ], + "application/vnd.novadigm.edm": [ + "edm" + ], + "application/vnd.novadigm.edx": [ + "edx" + ], + "application/vnd.novadigm.ext": [ + "ext" + ], + "application/vnd.ntt-local.file-transfer": [], + "application/vnd.ntt-local.sip-ta_remote": [], + "application/vnd.ntt-local.sip-ta_tcp_stream": [], + "application/vnd.oasis.opendocument.chart": [ + "odc" + ], + "application/vnd.oasis.opendocument.chart-template": [ + "otc" + ], + "application/vnd.oasis.opendocument.database": [ + "odb" + ], + "application/vnd.oasis.opendocument.formula": [ + "odf" + ], + "application/vnd.oasis.opendocument.formula-template": [ + "odft" + ], + "application/vnd.oasis.opendocument.graphics": [ + "odg" + ], + "application/vnd.oasis.opendocument.graphics-template": [ + "otg" + ], + "application/vnd.oasis.opendocument.image": [ + "odi" + ], + "application/vnd.oasis.opendocument.image-template": [ + "oti" + ], + "application/vnd.oasis.opendocument.presentation": [ + "odp" + ], + "application/vnd.oasis.opendocument.presentation-template": [ + "otp" + ], + "application/vnd.oasis.opendocument.spreadsheet": [ + "ods" + ], + "application/vnd.oasis.opendocument.spreadsheet-template": [ + "ots" + ], + "application/vnd.oasis.opendocument.text": [ + "odt" + ], + "application/vnd.oasis.opendocument.text-master": [ + "odm" + ], + "application/vnd.oasis.opendocument.text-template": [ + "ott" + ], + "application/vnd.oasis.opendocument.text-web": [ + "oth" + ], + "application/vnd.obn": [], + "application/vnd.oftn.l10n+json": [], + "application/vnd.oipf.contentaccessdownload+xml": [], + "application/vnd.oipf.contentaccessstreaming+xml": [], + "application/vnd.oipf.cspg-hexbinary": [], + "application/vnd.oipf.dae.svg+xml": [], + "application/vnd.oipf.dae.xhtml+xml": [], + "application/vnd.oipf.mippvcontrolmessage+xml": [], + "application/vnd.oipf.pae.gem": [], + "application/vnd.oipf.spdiscovery+xml": [], + "application/vnd.oipf.spdlist+xml": [], + "application/vnd.oipf.ueprofile+xml": [], + "application/vnd.oipf.userprofile+xml": [], + "application/vnd.olpc-sugar": [ + "xo" + ], + "application/vnd.oma-scws-config": [], + "application/vnd.oma-scws-http-request": [], + "application/vnd.oma-scws-http-response": [], + "application/vnd.oma.bcast.associated-procedure-parameter+xml": [], + "application/vnd.oma.bcast.drm-trigger+xml": [], + "application/vnd.oma.bcast.imd+xml": [], + "application/vnd.oma.bcast.ltkm": [], + "application/vnd.oma.bcast.notification+xml": [], + "application/vnd.oma.bcast.provisioningtrigger": [], + "application/vnd.oma.bcast.sgboot": [], + "application/vnd.oma.bcast.sgdd+xml": [], + "application/vnd.oma.bcast.sgdu": [], + "application/vnd.oma.bcast.simple-symbol-container": [], + "application/vnd.oma.bcast.smartcard-trigger+xml": [], + "application/vnd.oma.bcast.sprov+xml": [], + "application/vnd.oma.bcast.stkm": [], + "application/vnd.oma.cab-address-book+xml": [], + "application/vnd.oma.cab-feature-handler+xml": [], + "application/vnd.oma.cab-pcc+xml": [], + "application/vnd.oma.cab-user-prefs+xml": [], + "application/vnd.oma.dcd": [], + "application/vnd.oma.dcdc": [], + "application/vnd.oma.dd2+xml": [ + "dd2" + ], + "application/vnd.oma.drm.risd+xml": [], + "application/vnd.oma.group-usage-list+xml": [], + "application/vnd.oma.pal+xml": [], + "application/vnd.oma.poc.detailed-progress-report+xml": [], + "application/vnd.oma.poc.final-report+xml": [], + "application/vnd.oma.poc.groups+xml": [], + "application/vnd.oma.poc.invocation-descriptor+xml": [], + "application/vnd.oma.poc.optimized-progress-report+xml": [], + "application/vnd.oma.push": [], + "application/vnd.oma.scidm.messages+xml": [], + "application/vnd.oma.xcap-directory+xml": [], + "application/vnd.omads-email+xml": [], + "application/vnd.omads-file+xml": [], + "application/vnd.omads-folder+xml": [], + "application/vnd.omaloc-supl-init": [], + "application/vnd.openofficeorg.extension": [ + "oxt" + ], + "application/vnd.openxmlformats-officedocument.custom-properties+xml": [], + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": [], + "application/vnd.openxmlformats-officedocument.drawing+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": [], + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": [], + "application/vnd.openxmlformats-officedocument.extended-properties+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.presentation": [ + "pptx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slide": [ + "sldx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": [ + "ppsx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.template": [ + "potx" + ], + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": [ + "xlsx" + ], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": [ + "xltx" + ], + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": [], + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": [], + "application/vnd.openxmlformats-officedocument.theme+xml": [], + "application/vnd.openxmlformats-officedocument.themeoverride+xml": [], + "application/vnd.openxmlformats-officedocument.vmldrawing": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": [ + "docx" + ], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": [ + "dotx" + ], + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": [], + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": [], + "application/vnd.openxmlformats-package.core-properties+xml": [], + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": [], + "application/vnd.openxmlformats-package.relationships+xml": [], + "application/vnd.quobject-quoxdocument": [], + "application/vnd.osa.netdeploy": [], + "application/vnd.osgeo.mapguide.package": [ + "mgp" + ], + "application/vnd.osgi.bundle": [], + "application/vnd.osgi.dp": [ + "dp" + ], + "application/vnd.osgi.subsystem": [ + "esa" + ], + "application/vnd.otps.ct-kip+xml": [], + "application/vnd.palm": [ + "pdb", + "pqa", + "oprc" + ], + "application/vnd.paos.xml": [], + "application/vnd.pawaafile": [ + "paw" + ], + "application/vnd.pg.format": [ + "str" + ], + "application/vnd.pg.osasli": [ + "ei6" + ], + "application/vnd.piaccess.application-licence": [], + "application/vnd.picsel": [ + "efif" + ], + "application/vnd.pmi.widget": [ + "wg" + ], + "application/vnd.poc.group-advertisement+xml": [], + "application/vnd.pocketlearn": [ + "plf" + ], + "application/vnd.powerbuilder6": [ + "pbd" + ], + "application/vnd.powerbuilder6-s": [], + "application/vnd.powerbuilder7": [], + "application/vnd.powerbuilder7-s": [], + "application/vnd.powerbuilder75": [], + "application/vnd.powerbuilder75-s": [], + "application/vnd.preminet": [], + "application/vnd.previewsystems.box": [ + "box" + ], + "application/vnd.proteus.magazine": [ + "mgz" + ], + "application/vnd.publishare-delta-tree": [ + "qps" + ], + "application/vnd.pvi.ptid1": [ + "ptid" + ], + "application/vnd.pwg-multiplexed": [], + "application/vnd.pwg-xhtml-print+xml": [], + "application/vnd.qualcomm.brew-app-res": [], + "application/vnd.quark.quarkxpress": [ + "qxd", + "qxt", + "qwd", + "qwt", + "qxl", + "qxb" + ], + "application/vnd.radisys.moml+xml": [], + "application/vnd.radisys.msml+xml": [], + "application/vnd.radisys.msml-audit+xml": [], + "application/vnd.radisys.msml-audit-conf+xml": [], + "application/vnd.radisys.msml-audit-conn+xml": [], + "application/vnd.radisys.msml-audit-dialog+xml": [], + "application/vnd.radisys.msml-audit-stream+xml": [], + "application/vnd.radisys.msml-conf+xml": [], + "application/vnd.radisys.msml-dialog+xml": [], + "application/vnd.radisys.msml-dialog-base+xml": [], + "application/vnd.radisys.msml-dialog-fax-detect+xml": [], + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": [], + "application/vnd.radisys.msml-dialog-group+xml": [], + "application/vnd.radisys.msml-dialog-speech+xml": [], + "application/vnd.radisys.msml-dialog-transform+xml": [], + "application/vnd.rainstor.data": [], + "application/vnd.rapid": [], + "application/vnd.realvnc.bed": [ + "bed" + ], + "application/vnd.recordare.musicxml": [ + "mxl" + ], + "application/vnd.recordare.musicxml+xml": [ + "musicxml" + ], + "application/vnd.renlearn.rlprint": [], + "application/vnd.rig.cryptonote": [ + "cryptonote" + ], + "application/vnd.rim.cod": [ + "cod" + ], + "application/vnd.rn-realmedia": [ + "rm" + ], + "application/vnd.rn-realmedia-vbr": [ + "rmvb" + ], + "application/vnd.route66.link66+xml": [ + "link66" + ], + "application/vnd.rs-274x": [], + "application/vnd.ruckus.download": [], + "application/vnd.s3sms": [], + "application/vnd.sailingtracker.track": [ + "st" + ], + "application/vnd.sbm.cid": [], + "application/vnd.sbm.mid2": [], + "application/vnd.scribus": [], + "application/vnd.sealed.3df": [], + "application/vnd.sealed.csf": [], + "application/vnd.sealed.doc": [], + "application/vnd.sealed.eml": [], + "application/vnd.sealed.mht": [], + "application/vnd.sealed.net": [], + "application/vnd.sealed.ppt": [], + "application/vnd.sealed.tiff": [], + "application/vnd.sealed.xls": [], + "application/vnd.sealedmedia.softseal.html": [], + "application/vnd.sealedmedia.softseal.pdf": [], + "application/vnd.seemail": [ + "see" + ], + "application/vnd.sema": [ + "sema" + ], + "application/vnd.semd": [ + "semd" + ], + "application/vnd.semf": [ + "semf" + ], + "application/vnd.shana.informed.formdata": [ + "ifm" + ], + "application/vnd.shana.informed.formtemplate": [ + "itp" + ], + "application/vnd.shana.informed.interchange": [ + "iif" + ], + "application/vnd.shana.informed.package": [ + "ipk" + ], + "application/vnd.simtech-mindmapper": [ + "twd", + "twds" + ], + "application/vnd.smaf": [ + "mmf" + ], + "application/vnd.smart.notebook": [], + "application/vnd.smart.teacher": [ + "teacher" + ], + "application/vnd.software602.filler.form+xml": [], + "application/vnd.software602.filler.form-xml-zip": [], + "application/vnd.solent.sdkm+xml": [ + "sdkm", + "sdkd" + ], + "application/vnd.spotfire.dxp": [ + "dxp" + ], + "application/vnd.spotfire.sfs": [ + "sfs" + ], + "application/vnd.sss-cod": [], + "application/vnd.sss-dtf": [], + "application/vnd.sss-ntf": [], + "application/vnd.stardivision.calc": [ + "sdc" + ], + "application/vnd.stardivision.draw": [ + "sda" + ], + "application/vnd.stardivision.impress": [ + "sdd" + ], + "application/vnd.stardivision.math": [ + "smf" + ], + "application/vnd.stardivision.writer": [ + "sdw", + "vor" + ], + "application/vnd.stardivision.writer-global": [ + "sgl" + ], + "application/vnd.stepmania.package": [ + "smzip" + ], + "application/vnd.stepmania.stepchart": [ + "sm" + ], + "application/vnd.street-stream": [], + "application/vnd.sun.xml.calc": [ + "sxc" + ], + "application/vnd.sun.xml.calc.template": [ + "stc" + ], + "application/vnd.sun.xml.draw": [ + "sxd" + ], + "application/vnd.sun.xml.draw.template": [ + "std" + ], + "application/vnd.sun.xml.impress": [ + "sxi" + ], + "application/vnd.sun.xml.impress.template": [ + "sti" + ], + "application/vnd.sun.xml.math": [ + "sxm" + ], + "application/vnd.sun.xml.writer": [ + "sxw" + ], + "application/vnd.sun.xml.writer.global": [ + "sxg" + ], + "application/vnd.sun.xml.writer.template": [ + "stw" + ], + "application/vnd.sun.wadl+xml": [], + "application/vnd.sus-calendar": [ + "sus", + "susp" + ], + "application/vnd.svd": [ + "svd" + ], + "application/vnd.swiftview-ics": [], + "application/vnd.symbian.install": [ + "sis", + "sisx" + ], + "application/vnd.syncml+xml": [ + "xsm" + ], + "application/vnd.syncml.dm+wbxml": [ + "bdm" + ], + "application/vnd.syncml.dm+xml": [ + "xdm" + ], + "application/vnd.syncml.dm.notification": [], + "application/vnd.syncml.ds.notification": [], + "application/vnd.tao.intent-module-archive": [ + "tao" + ], + "application/vnd.tcpdump.pcap": [ + "pcap", + "cap", + "dmp" + ], + "application/vnd.tmobile-livetv": [ + "tmo" + ], + "application/vnd.trid.tpt": [ + "tpt" + ], + "application/vnd.triscape.mxs": [ + "mxs" + ], + "application/vnd.trueapp": [ + "tra" + ], + "application/vnd.truedoc": [], + "application/vnd.ubisoft.webplayer": [], + "application/vnd.ufdl": [ + "ufd", + "ufdl" + ], + "application/vnd.uiq.theme": [ + "utz" + ], + "application/vnd.umajin": [ + "umj" + ], + "application/vnd.unity": [ + "unityweb" + ], + "application/vnd.uoml+xml": [ + "uoml" + ], + "application/vnd.uplanet.alert": [], + "application/vnd.uplanet.alert-wbxml": [], + "application/vnd.uplanet.bearer-choice": [], + "application/vnd.uplanet.bearer-choice-wbxml": [], + "application/vnd.uplanet.cacheop": [], + "application/vnd.uplanet.cacheop-wbxml": [], + "application/vnd.uplanet.channel": [], + "application/vnd.uplanet.channel-wbxml": [], + "application/vnd.uplanet.list": [], + "application/vnd.uplanet.list-wbxml": [], + "application/vnd.uplanet.listcmd": [], + "application/vnd.uplanet.listcmd-wbxml": [], + "application/vnd.uplanet.signal": [], + "application/vnd.vcx": [ + "vcx" + ], + "application/vnd.vd-study": [], + "application/vnd.vectorworks": [], + "application/vnd.verimatrix.vcas": [], + "application/vnd.vidsoft.vidconference": [], + "application/vnd.visio": [ + "vsd", + "vst", + "vss", + "vsw" + ], + "application/vnd.visionary": [ + "vis" + ], + "application/vnd.vividence.scriptfile": [], + "application/vnd.vsf": [ + "vsf" + ], + "application/vnd.wap.sic": [], + "application/vnd.wap.slc": [], + "application/vnd.wap.wbxml": [ + "wbxml" + ], + "application/vnd.wap.wmlc": [ + "wmlc" + ], + "application/vnd.wap.wmlscriptc": [ + "wmlsc" + ], + "application/vnd.webturbo": [ + "wtb" + ], + "application/vnd.wfa.wsc": [], + "application/vnd.wmc": [], + "application/vnd.wmf.bootstrap": [], + "application/vnd.wolfram.mathematica": [], + "application/vnd.wolfram.mathematica.package": [], + "application/vnd.wolfram.player": [ + "nbp" + ], + "application/vnd.wordperfect": [ + "wpd" + ], + "application/vnd.wqd": [ + "wqd" + ], + "application/vnd.wrq-hp3000-labelled": [], + "application/vnd.wt.stf": [ + "stf" + ], + "application/vnd.wv.csp+wbxml": [], + "application/vnd.wv.csp+xml": [], + "application/vnd.wv.ssp+xml": [], + "application/vnd.xara": [ + "xar" + ], + "application/vnd.xfdl": [ + "xfdl" + ], + "application/vnd.xfdl.webform": [], + "application/vnd.xmi+xml": [], + "application/vnd.xmpie.cpkg": [], + "application/vnd.xmpie.dpkg": [], + "application/vnd.xmpie.plan": [], + "application/vnd.xmpie.ppkg": [], + "application/vnd.xmpie.xlim": [], + "application/vnd.yamaha.hv-dic": [ + "hvd" + ], + "application/vnd.yamaha.hv-script": [ + "hvs" + ], + "application/vnd.yamaha.hv-voice": [ + "hvp" + ], + "application/vnd.yamaha.openscoreformat": [ + "osf" + ], + "application/vnd.yamaha.openscoreformat.osfpvg+xml": [ + "osfpvg" + ], + "application/vnd.yamaha.remote-setup": [], + "application/vnd.yamaha.smaf-audio": [ + "saf" + ], + "application/vnd.yamaha.smaf-phrase": [ + "spf" + ], + "application/vnd.yamaha.through-ngn": [], + "application/vnd.yamaha.tunnel-udpencap": [], + "application/vnd.yellowriver-custom-menu": [ + "cmp" + ], + "application/vnd.zul": [ + "zir", + "zirz" + ], + "application/vnd.zzazz.deck+xml": [ + "zaz" + ], + "application/voicexml+xml": [ + "vxml" + ], + "application/vq-rtcpxr": [], + "application/watcherinfo+xml": [], + "application/whoispp-query": [], + "application/whoispp-response": [], + "application/widget": [ + "wgt" + ], + "application/winhlp": [ + "hlp" + ], + "application/wita": [], + "application/wordperfect5.1": [], + "application/wsdl+xml": [ + "wsdl" + ], + "application/wspolicy+xml": [ + "wspolicy" + ], + "application/x-7z-compressed": [ + "7z" + ], + "application/x-abiword": [ + "abw" + ], + "application/x-ace-compressed": [ + "ace" + ], + "application/x-amf": [], + "application/x-apple-diskimage": [ + "dmg" + ], + "application/x-authorware-bin": [ + "aab", + "x32", + "u32", + "vox" + ], + "application/x-authorware-map": [ + "aam" + ], + "application/x-authorware-seg": [ + "aas" + ], + "application/x-bcpio": [ + "bcpio" + ], + "application/x-bittorrent": [ + "torrent" + ], + "application/x-blorb": [ + "blb", + "blorb" + ], + "application/x-bzip": [ + "bz" + ], + "application/x-bzip2": [ + "bz2", + "boz" + ], + "application/x-cbr": [ + "cbr", + "cba", + "cbt", + "cbz", + "cb7" + ], + "application/x-cdlink": [ + "vcd" + ], + "application/x-cfs-compressed": [ + "cfs" + ], + "application/x-chat": [ + "chat" + ], + "application/x-chess-pgn": [ + "pgn" + ], + "application/x-conference": [ + "nsc" + ], + "application/x-compress": [], + "application/x-cpio": [ + "cpio" + ], + "application/x-csh": [ + "csh" + ], + "application/x-debian-package": [ + "deb", + "udeb" + ], + "application/x-dgc-compressed": [ + "dgc" + ], + "application/x-director": [ + "dir", + "dcr", + "dxr", + "cst", + "cct", + "cxt", + "w3d", + "fgd", + "swa" + ], + "application/x-doom": [ + "wad" + ], + "application/x-dtbncx+xml": [ + "ncx" + ], + "application/x-dtbook+xml": [ + "dtb" + ], + "application/x-dtbresource+xml": [ + "res" + ], + "application/x-dvi": [ + "dvi" + ], + "application/x-envoy": [ + "evy" + ], + "application/x-eva": [ + "eva" + ], + "application/x-font-bdf": [ + "bdf" + ], + "application/x-font-dos": [], + "application/x-font-framemaker": [], + "application/x-font-ghostscript": [ + "gsf" + ], + "application/x-font-libgrx": [], + "application/x-font-linux-psf": [ + "psf" + ], + "application/x-font-otf": [ + "otf" + ], + "application/x-font-pcf": [ + "pcf" + ], + "application/x-font-snf": [ + "snf" + ], + "application/x-font-speedo": [], + "application/x-font-sunos-news": [], + "application/x-font-ttf": [ + "ttf", + "ttc" + ], + "application/x-font-type1": [ + "pfa", + "pfb", + "pfm", + "afm" + ], + "application/font-woff": [ + "woff" + ], + "application/x-font-vfont": [], + "application/x-freearc": [ + "arc" + ], + "application/x-futuresplash": [ + "spl" + ], + "application/x-gca-compressed": [ + "gca" + ], + "application/x-glulx": [ + "ulx" + ], + "application/x-gnumeric": [ + "gnumeric" + ], + "application/x-gramps-xml": [ + "gramps" + ], + "application/x-gtar": [ + "gtar" + ], + "application/x-gzip": [], + "application/x-hdf": [ + "hdf" + ], + "application/x-install-instructions": [ + "install" + ], + "application/x-iso9660-image": [ + "iso" + ], + "application/x-java-jnlp-file": [ + "jnlp" + ], + "application/x-latex": [ + "latex" + ], + "application/x-lzh-compressed": [ + "lzh", + "lha" + ], + "application/x-mie": [ + "mie" + ], + "application/x-mobipocket-ebook": [ + "prc", + "mobi" + ], + "application/x-ms-application": [ + "application" + ], + "application/x-ms-shortcut": [ + "lnk" + ], + "application/x-ms-wmd": [ + "wmd" + ], + "application/x-ms-wmz": [ + "wmz" + ], + "application/x-ms-xbap": [ + "xbap" + ], + "application/x-msaccess": [ + "mdb" + ], + "application/x-msbinder": [ + "obd" + ], + "application/x-mscardfile": [ + "crd" + ], + "application/x-msclip": [ + "clp" + ], + "application/x-msdownload": [ + "exe", + "dll", + "com", + "bat", + "msi" + ], + "application/x-msmediaview": [ + "mvb", + "m13", + "m14" + ], + "application/x-msmetafile": [ + "wmf", + "wmz", + "emf", + "emz" + ], + "application/x-msmoney": [ + "mny" + ], + "application/x-mspublisher": [ + "pub" + ], + "application/x-msschedule": [ + "scd" + ], + "application/x-msterminal": [ + "trm" + ], + "application/x-mswrite": [ + "wri" + ], + "application/x-netcdf": [ + "nc", + "cdf" + ], + "application/x-nzb": [ + "nzb" + ], + "application/x-pkcs12": [ + "p12", + "pfx" + ], + "application/x-pkcs7-certificates": [ + "p7b", + "spc" + ], + "application/x-pkcs7-certreqresp": [ + "p7r" + ], + "application/x-rar-compressed": [ + "rar" + ], + "application/x-research-info-systems": [ + "ris" + ], + "application/x-sh": [ + "sh" + ], + "application/x-shar": [ + "shar" + ], + "application/x-shockwave-flash": [ + "swf" + ], + "application/x-silverlight-app": [ + "xap" + ], + "application/x-sql": [ + "sql" + ], + "application/x-stuffit": [ + "sit" + ], + "application/x-stuffitx": [ + "sitx" + ], + "application/x-subrip": [ + "srt" + ], + "application/x-sv4cpio": [ + "sv4cpio" + ], + "application/x-sv4crc": [ + "sv4crc" + ], + "application/x-t3vm-image": [ + "t3" + ], + "application/x-tads": [ + "gam" + ], + "application/x-tar": [ + "tar" + ], + "application/x-tcl": [ + "tcl" + ], + "application/x-tex": [ + "tex" + ], + "application/x-tex-tfm": [ + "tfm" + ], + "application/x-texinfo": [ + "texinfo", + "texi" + ], + "application/x-tgif": [ + "obj" + ], + "application/x-ustar": [ + "ustar" + ], + "application/x-wais-source": [ + "src" + ], + "application/x-x509-ca-cert": [ + "der", + "crt" + ], + "application/x-xfig": [ + "fig" + ], + "application/x-xliff+xml": [ + "xlf" + ], + "application/x-xpinstall": [ + "xpi" + ], + "application/x-xz": [ + "xz" + ], + "application/x-zmachine": [ + "z1", + "z2", + "z3", + "z4", + "z5", + "z6", + "z7", + "z8" + ], + "application/x400-bp": [], + "application/xaml+xml": [ + "xaml" + ], + "application/xcap-att+xml": [], + "application/xcap-caps+xml": [], + "application/xcap-diff+xml": [ + "xdf" + ], + "application/xcap-el+xml": [], + "application/xcap-error+xml": [], + "application/xcap-ns+xml": [], + "application/xcon-conference-info-diff+xml": [], + "application/xcon-conference-info+xml": [], + "application/xenc+xml": [ + "xenc" + ], + "application/xhtml+xml": [ + "xhtml", + "xht" + ], + "application/xhtml-voice+xml": [], + "application/xml": [ + "xml", + "xsl" + ], + "application/xml-dtd": [ + "dtd" + ], + "application/xml-external-parsed-entity": [], + "application/xmpp+xml": [], + "application/xop+xml": [ + "xop" + ], + "application/xproc+xml": [ + "xpl" + ], + "application/xslt+xml": [ + "xslt" + ], + "application/xspf+xml": [ + "xspf" + ], + "application/xv+xml": [ + "mxml", + "xhvml", + "xvml", + "xvm" + ], + "application/yang": [ + "yang" + ], + "application/yin+xml": [ + "yin" + ], + "application/zip": [ + "zip" + ], + "audio/1d-interleaved-parityfec": [], + "audio/32kadpcm": [], + "audio/3gpp": [], + "audio/3gpp2": [], + "audio/ac3": [], + "audio/adpcm": [ + "adp" + ], + "audio/amr": [], + "audio/amr-wb": [], + "audio/amr-wb+": [], + "audio/asc": [], + "audio/atrac-advanced-lossless": [], + "audio/atrac-x": [], + "audio/atrac3": [], + "audio/basic": [ + "au", + "snd" + ], + "audio/bv16": [], + "audio/bv32": [], + "audio/clearmode": [], + "audio/cn": [], + "audio/dat12": [], + "audio/dls": [], + "audio/dsr-es201108": [], + "audio/dsr-es202050": [], + "audio/dsr-es202211": [], + "audio/dsr-es202212": [], + "audio/dv": [], + "audio/dvi4": [], + "audio/eac3": [], + "audio/evrc": [], + "audio/evrc-qcp": [], + "audio/evrc0": [], + "audio/evrc1": [], + "audio/evrcb": [], + "audio/evrcb0": [], + "audio/evrcb1": [], + "audio/evrcwb": [], + "audio/evrcwb0": [], + "audio/evrcwb1": [], + "audio/example": [], + "audio/fwdred": [], + "audio/g719": [], + "audio/g722": [], + "audio/g7221": [], + "audio/g723": [], + "audio/g726-16": [], + "audio/g726-24": [], + "audio/g726-32": [], + "audio/g726-40": [], + "audio/g728": [], + "audio/g729": [], + "audio/g7291": [], + "audio/g729d": [], + "audio/g729e": [], + "audio/gsm": [], + "audio/gsm-efr": [], + "audio/gsm-hr-08": [], + "audio/ilbc": [], + "audio/ip-mr_v2.5": [], + "audio/isac": [], + "audio/l16": [], + "audio/l20": [], + "audio/l24": [], + "audio/l8": [], + "audio/lpc": [], + "audio/midi": [ + "mid", + "midi", + "kar", + "rmi" + ], + "audio/mobile-xmf": [], + "audio/mp4": [ + "mp4a" + ], + "audio/mp4a-latm": [], + "audio/mpa": [], + "audio/mpa-robust": [], + "audio/mpeg": [ + "mpga", + "mp2", + "mp2a", + "mp3", + "m2a", + "m3a" + ], + "audio/mpeg4-generic": [], + "audio/musepack": [], + "audio/ogg": [ + "oga", + "ogg", + "spx" + ], + "audio/opus": [], + "audio/parityfec": [], + "audio/pcma": [], + "audio/pcma-wb": [], + "audio/pcmu-wb": [], + "audio/pcmu": [], + "audio/prs.sid": [], + "audio/qcelp": [], + "audio/red": [], + "audio/rtp-enc-aescm128": [], + "audio/rtp-midi": [], + "audio/rtx": [], + "audio/s3m": [ + "s3m" + ], + "audio/silk": [ + "sil" + ], + "audio/smv": [], + "audio/smv0": [], + "audio/smv-qcp": [], + "audio/sp-midi": [], + "audio/speex": [], + "audio/t140c": [], + "audio/t38": [], + "audio/telephone-event": [], + "audio/tone": [], + "audio/uemclip": [], + "audio/ulpfec": [], + "audio/vdvi": [], + "audio/vmr-wb": [], + "audio/vnd.3gpp.iufp": [], + "audio/vnd.4sb": [], + "audio/vnd.audiokoz": [], + "audio/vnd.celp": [], + "audio/vnd.cisco.nse": [], + "audio/vnd.cmles.radio-events": [], + "audio/vnd.cns.anp1": [], + "audio/vnd.cns.inf1": [], + "audio/vnd.dece.audio": [ + "uva", + "uvva" + ], + "audio/vnd.digital-winds": [ + "eol" + ], + "audio/vnd.dlna.adts": [], + "audio/vnd.dolby.heaac.1": [], + "audio/vnd.dolby.heaac.2": [], + "audio/vnd.dolby.mlp": [], + "audio/vnd.dolby.mps": [], + "audio/vnd.dolby.pl2": [], + "audio/vnd.dolby.pl2x": [], + "audio/vnd.dolby.pl2z": [], + "audio/vnd.dolby.pulse.1": [], + "audio/vnd.dra": [ + "dra" + ], + "audio/vnd.dts": [ + "dts" + ], + "audio/vnd.dts.hd": [ + "dtshd" + ], + "audio/vnd.dvb.file": [], + "audio/vnd.everad.plj": [], + "audio/vnd.hns.audio": [], + "audio/vnd.lucent.voice": [ + "lvp" + ], + "audio/vnd.ms-playready.media.pya": [ + "pya" + ], + "audio/vnd.nokia.mobile-xmf": [], + "audio/vnd.nortel.vbk": [], + "audio/vnd.nuera.ecelp4800": [ + "ecelp4800" + ], + "audio/vnd.nuera.ecelp7470": [ + "ecelp7470" + ], + "audio/vnd.nuera.ecelp9600": [ + "ecelp9600" + ], + "audio/vnd.octel.sbc": [], + "audio/vnd.qcelp": [], + "audio/vnd.rhetorex.32kadpcm": [], + "audio/vnd.rip": [ + "rip" + ], + "audio/vnd.sealedmedia.softseal.mpeg": [], + "audio/vnd.vmx.cvsd": [], + "audio/vorbis": [], + "audio/vorbis-config": [], + "audio/webm": [ + "weba" + ], + "audio/x-aac": [ + "aac" + ], + "audio/x-aiff": [ + "aif", + "aiff", + "aifc" + ], + "audio/x-caf": [ + "caf" + ], + "audio/x-flac": [ + "flac" + ], + "audio/x-matroska": [ + "mka" + ], + "audio/x-mpegurl": [ + "m3u" + ], + "audio/x-ms-wax": [ + "wax" + ], + "audio/x-ms-wma": [ + "wma" + ], + "audio/x-pn-realaudio": [ + "ram", + "ra" + ], + "audio/x-pn-realaudio-plugin": [ + "rmp" + ], + "audio/x-tta": [], + "audio/x-wav": [ + "wav" + ], + "audio/xm": [ + "xm" + ], + "chemical/x-cdx": [ + "cdx" + ], + "chemical/x-cif": [ + "cif" + ], + "chemical/x-cmdf": [ + "cmdf" + ], + "chemical/x-cml": [ + "cml" + ], + "chemical/x-csml": [ + "csml" + ], + "chemical/x-pdb": [], + "chemical/x-xyz": [ + "xyz" + ], + "image/bmp": [ + "bmp" + ], + "image/cgm": [ + "cgm" + ], + "image/example": [], + "image/fits": [], + "image/g3fax": [ + "g3" + ], + "image/gif": [ + "gif" + ], + "image/ief": [ + "ief" + ], + "image/jp2": [], + "image/jpeg": [ + "jpeg", + "jpg", + "jpe" + ], + "image/jpm": [], + "image/jpx": [], + "image/ktx": [ + "ktx" + ], + "image/naplps": [], + "image/png": [ + "png" + ], + "image/prs.btif": [ + "btif" + ], + "image/prs.pti": [], + "image/sgi": [ + "sgi" + ], + "image/svg+xml": [ + "svg", + "svgz" + ], + "image/t38": [], + "image/tiff": [ + "tiff", + "tif" + ], + "image/tiff-fx": [], + "image/vnd.adobe.photoshop": [ + "psd" + ], + "image/vnd.cns.inf2": [], + "image/vnd.dece.graphic": [ + "uvi", + "uvvi", + "uvg", + "uvvg" + ], + "image/vnd.dvb.subtitle": [ + "sub" + ], + "image/vnd.djvu": [ + "djvu", + "djv" + ], + "image/vnd.dwg": [ + "dwg" + ], + "image/vnd.dxf": [ + "dxf" + ], + "image/vnd.fastbidsheet": [ + "fbs" + ], + "image/vnd.fpx": [ + "fpx" + ], + "image/vnd.fst": [ + "fst" + ], + "image/vnd.fujixerox.edmics-mmr": [ + "mmr" + ], + "image/vnd.fujixerox.edmics-rlc": [ + "rlc" + ], + "image/vnd.globalgraphics.pgb": [], + "image/vnd.microsoft.icon": [], + "image/vnd.mix": [], + "image/vnd.ms-modi": [ + "mdi" + ], + "image/vnd.ms-photo": [ + "wdp" + ], + "image/vnd.net-fpx": [ + "npx" + ], + "image/vnd.radiance": [], + "image/vnd.sealed.png": [], + "image/vnd.sealedmedia.softseal.gif": [], + "image/vnd.sealedmedia.softseal.jpg": [], + "image/vnd.svf": [], + "image/vnd.wap.wbmp": [ + "wbmp" + ], + "image/vnd.xiff": [ + "xif" + ], + "image/webp": [ + "webp" + ], + "image/x-3ds": [ + "3ds" + ], + "image/x-cmu-raster": [ + "ras" + ], + "image/x-cmx": [ + "cmx" + ], + "image/x-freehand": [ + "fh", + "fhc", + "fh4", + "fh5", + "fh7" + ], + "image/x-icon": [ + "ico" + ], + "image/x-mrsid-image": [ + "sid" + ], + "image/x-pcx": [ + "pcx" + ], + "image/x-pict": [ + "pic", + "pct" + ], + "image/x-portable-anymap": [ + "pnm" + ], + "image/x-portable-bitmap": [ + "pbm" + ], + "image/x-portable-graymap": [ + "pgm" + ], + "image/x-portable-pixmap": [ + "ppm" + ], + "image/x-rgb": [ + "rgb" + ], + "image/x-tga": [ + "tga" + ], + "image/x-xbitmap": [ + "xbm" + ], + "image/x-xpixmap": [ + "xpm" + ], + "image/x-xwindowdump": [ + "xwd" + ], + "message/cpim": [], + "message/delivery-status": [], + "message/disposition-notification": [], + "message/example": [], + "message/external-body": [], + "message/feedback-report": [], + "message/global": [], + "message/global-delivery-status": [], + "message/global-disposition-notification": [], + "message/global-headers": [], + "message/http": [], + "message/imdn+xml": [], + "message/news": [], + "message/partial": [], + "message/rfc822": [ + "eml", + "mime" + ], + "message/s-http": [], + "message/sip": [], + "message/sipfrag": [], + "message/tracking-status": [], + "message/vnd.si.simp": [], + "model/example": [], + "model/iges": [ + "igs", + "iges" + ], + "model/mesh": [ + "msh", + "mesh", + "silo" + ], + "model/vnd.collada+xml": [ + "dae" + ], + "model/vnd.dwf": [ + "dwf" + ], + "model/vnd.flatland.3dml": [], + "model/vnd.gdl": [ + "gdl" + ], + "model/vnd.gs-gdl": [], + "model/vnd.gs.gdl": [], + "model/vnd.gtw": [ + "gtw" + ], + "model/vnd.moml+xml": [], + "model/vnd.mts": [ + "mts" + ], + "model/vnd.parasolid.transmit.binary": [], + "model/vnd.parasolid.transmit.text": [], + "model/vnd.vtu": [ + "vtu" + ], + "model/vrml": [ + "wrl", + "vrml" + ], + "model/x3d+binary": [ + "x3db", + "x3dbz" + ], + "model/x3d+vrml": [ + "x3dv", + "x3dvz" + ], + "model/x3d+xml": [ + "x3d", + "x3dz" + ], + "multipart/alternative": [], + "multipart/appledouble": [], + "multipart/byteranges": [], + "multipart/digest": [], + "multipart/encrypted": [], + "multipart/example": [], + "multipart/form-data": [], + "multipart/header-set": [], + "multipart/mixed": [], + "multipart/parallel": [], + "multipart/related": [], + "multipart/report": [], + "multipart/signed": [], + "multipart/voice-message": [], + "text/1d-interleaved-parityfec": [], + "text/cache-manifest": [ + "appcache" + ], + "text/calendar": [ + "ics", + "ifb" + ], + "text/css": [ + "css" + ], + "text/csv": [ + "csv" + ], + "text/directory": [], + "text/dns": [], + "text/ecmascript": [], + "text/enriched": [], + "text/example": [], + "text/fwdred": [], + "text/html": [ + "html", + "htm" + ], + "text/javascript": [], + "text/n3": [ + "n3" + ], + "text/parityfec": [], + "text/plain": [ + "txt", + "text", + "conf", + "def", + "list", + "log", + "in" + ], + "text/prs.fallenstein.rst": [], + "text/prs.lines.tag": [ + "dsc" + ], + "text/vnd.radisys.msml-basic-layout": [], + "text/red": [], + "text/rfc822-headers": [], + "text/richtext": [ + "rtx" + ], + "text/rtf": [], + "text/rtp-enc-aescm128": [], + "text/rtx": [], + "text/sgml": [ + "sgml", + "sgm" + ], + "text/t140": [], + "text/tab-separated-values": [ + "tsv" + ], + "text/troff": [ + "t", + "tr", + "roff", + "man", + "me", + "ms" + ], + "text/turtle": [ + "ttl" + ], + "text/ulpfec": [], + "text/uri-list": [ + "uri", + "uris", + "urls" + ], + "text/vcard": [ + "vcard" + ], + "text/vnd.abc": [], + "text/vnd.curl": [ + "curl" + ], + "text/vnd.curl.dcurl": [ + "dcurl" + ], + "text/vnd.curl.scurl": [ + "scurl" + ], + "text/vnd.curl.mcurl": [ + "mcurl" + ], + "text/vnd.dmclientscript": [], + "text/vnd.dvb.subtitle": [ + "sub" + ], + "text/vnd.esmertec.theme-descriptor": [], + "text/vnd.fly": [ + "fly" + ], + "text/vnd.fmi.flexstor": [ + "flx" + ], + "text/vnd.graphviz": [ + "gv" + ], + "text/vnd.in3d.3dml": [ + "3dml" + ], + "text/vnd.in3d.spot": [ + "spot" + ], + "text/vnd.iptc.newsml": [], + "text/vnd.iptc.nitf": [], + "text/vnd.latex-z": [], + "text/vnd.motorola.reflex": [], + "text/vnd.ms-mediapackage": [], + "text/vnd.net2phone.commcenter.command": [], + "text/vnd.si.uricatalogue": [], + "text/vnd.sun.j2me.app-descriptor": [ + "jad" + ], + "text/vnd.trolltech.linguist": [], + "text/vnd.wap.si": [], + "text/vnd.wap.sl": [], + "text/vnd.wap.wml": [ + "wml" + ], + "text/vnd.wap.wmlscript": [ + "wmls" + ], + "text/x-asm": [ + "s", + "asm" + ], + "text/x-c": [ + "c", + "cc", + "cxx", + "cpp", + "h", + "hh", + "dic" + ], + "text/x-fortran": [ + "f", + "for", + "f77", + "f90" + ], + "text/x-java-source": [ + "java" + ], + "text/x-opml": [ + "opml" + ], + "text/x-pascal": [ + "p", + "pas" + ], + "text/x-nfo": [ + "nfo" + ], + "text/x-setext": [ + "etx" + ], + "text/x-sfv": [ + "sfv" + ], + "text/x-uuencode": [ + "uu" + ], + "text/x-vcalendar": [ + "vcs" + ], + "text/x-vcard": [ + "vcf" + ], + "text/xml": [], + "text/xml-external-parsed-entity": [], + "video/1d-interleaved-parityfec": [], + "video/3gpp": [ + "3gp" + ], + "video/3gpp-tt": [], + "video/3gpp2": [ + "3g2" + ], + "video/bmpeg": [], + "video/bt656": [], + "video/celb": [], + "video/dv": [], + "video/example": [], + "video/h261": [ + "h261" + ], + "video/h263": [ + "h263" + ], + "video/h263-1998": [], + "video/h263-2000": [], + "video/h264": [ + "h264" + ], + "video/h264-rcdo": [], + "video/h264-svc": [], + "video/jpeg": [ + "jpgv" + ], + "video/jpeg2000": [], + "video/jpm": [ + "jpm", + "jpgm" + ], + "video/mj2": [ + "mj2", + "mjp2" + ], + "video/mp1s": [], + "video/mp2p": [], + "video/mp2t": [], + "video/mp4": [ + "mp4", + "mp4v", + "mpg4" + ], + "video/mp4v-es": [], + "video/mpeg": [ + "mpeg", + "mpg", + "mpe", + "m1v", + "m2v" + ], + "video/mpeg4-generic": [], + "video/mpv": [], + "video/nv": [], + "video/ogg": [ + "ogv" + ], + "video/parityfec": [], + "video/pointer": [], + "video/quicktime": [ + "qt", + "mov" + ], + "video/raw": [], + "video/rtp-enc-aescm128": [], + "video/rtx": [], + "video/smpte292m": [], + "video/ulpfec": [], + "video/vc1": [], + "video/vnd.cctv": [], + "video/vnd.dece.hd": [ + "uvh", + "uvvh" + ], + "video/vnd.dece.mobile": [ + "uvm", + "uvvm" + ], + "video/vnd.dece.mp4": [], + "video/vnd.dece.pd": [ + "uvp", + "uvvp" + ], + "video/vnd.dece.sd": [ + "uvs", + "uvvs" + ], + "video/vnd.dece.video": [ + "uvv", + "uvvv" + ], + "video/vnd.directv.mpeg": [], + "video/vnd.directv.mpeg-tts": [], + "video/vnd.dlna.mpeg-tts": [], + "video/vnd.dvb.file": [ + "dvb" + ], + "video/vnd.fvt": [ + "fvt" + ], + "video/vnd.hns.video": [], + "video/vnd.iptvforum.1dparityfec-1010": [], + "video/vnd.iptvforum.1dparityfec-2005": [], + "video/vnd.iptvforum.2dparityfec-1010": [], + "video/vnd.iptvforum.2dparityfec-2005": [], + "video/vnd.iptvforum.ttsavc": [], + "video/vnd.iptvforum.ttsmpeg2": [], + "video/vnd.motorola.video": [], + "video/vnd.motorola.videop": [], + "video/vnd.mpegurl": [ + "mxu", + "m4u" + ], + "video/vnd.ms-playready.media.pyv": [ + "pyv" + ], + "video/vnd.nokia.interleaved-multimedia": [], + "video/vnd.nokia.videovoip": [], + "video/vnd.objectvideo": [], + "video/vnd.sealed.mpeg1": [], + "video/vnd.sealed.mpeg4": [], + "video/vnd.sealed.swf": [], + "video/vnd.sealedmedia.softseal.mov": [], + "video/vnd.uvvu.mp4": [ + "uvu", + "uvvu" + ], + "video/vnd.vivo": [ + "viv" + ], + "video/webm": [ + "webm" + ], + "video/x-f4v": [ + "f4v" + ], + "video/x-fli": [ + "fli" + ], + "video/x-flv": [ + "flv" + ], + "video/x-m4v": [ + "m4v" + ], + "video/x-matroska": [ + "mkv", + "mk3d", + "mks" + ], + "video/x-mng": [ + "mng" + ], + "video/x-ms-asf": [ + "asf", + "asx" + ], + "video/x-ms-vob": [ + "vob" + ], + "video/x-ms-wm": [ + "wm" + ], + "video/x-ms-wmv": [ + "wmv" + ], + "video/x-ms-wmx": [ + "wmx" + ], + "video/x-ms-wvx": [ + "wvx" + ], + "video/x-msvideo": [ + "avi" + ], + "video/x-sgi-movie": [ + "movie" + ], + "video/x-smv": [ + "smv" + ], + "x-conference/x-cooltalk": [ + "ice" + ] +} diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/node.json b/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/node.json new file mode 100755 index 0000000..ad50d61 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/lib/node.json @@ -0,0 +1,55 @@ +{ + "text/vtt": [ + "vtt" + ], + "application/x-chrome-extension": [ + "crx" + ], + "text/x-component": [ + "htc" + ], + "text/cache-manifest": [ + "manifest" + ], + "application/octet-stream": [ + "buffer" + ], + "application/mp4": [ + "m4p" + ], + "audio/mp4": [ + "m4a" + ], + "video/MP2T": [ + "ts" + ], + "application/x-web-app-manifest+json": [ + "webapp" + ], + "text/x-lua": [ + "lua" + ], + "application/x-lua-bytecode": [ + "luac" + ], + "text/x-markdown": [ + "markdown", + "md", + "mkd" + ], + "text/plain": [ + "ini" + ], + "application/dash+xml": [ + "mdp" + ], + "font/opentype": [ + "otf" + ], + "application/json": [ + "map" + ], + "application/xml": [ + "xsd" + ] +} diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/package.json b/node_modules/express/node_modules/type-is/node_modules/mime-types/package.json new file mode 100755 index 0000000..3d83380 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/package.json @@ -0,0 +1,39 @@ +{ + "name": "mime-types", + "description": "ultimate mime type utility", + "version": "1.0.0", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "contributors": [ + { + "name": "Jeremiah Senkpiel", + "email": "fishrock123@rocketmail.com", + "url": "https://searchbeam.jit.su" + } + ], + "repository": { + "type": "git", + "url": "git://github.com/expressjs/mime-types" + }, + "license": "MIT", + "main": "lib", + "devDependencies": { + "co": "3", + "cogent": "0", + "mocha": "1", + "should": "3" + }, + "scripts": { + "test": "make test" + }, + "readme": "# mime-types [![Build Status](https://travis-ci.org/expressjs/mime-types.svg?branch=master)](https://travis-ci.org/expressjs/mime-types) [![NPM version](https://badge.fury.io/js/mime-types.svg)](https://badge.fury.io/js/mime-types)\n\nThe ultimate javascript content-type utility.\n\n### Install\n\n```sh\n$ npm install mime-types\n```\n\n#### Similar to [mime](https://github.com/broofa/node-mime) except:\n\n- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.\n- No fallbacks, so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.\n- Additional mime types are added such as jade and stylus. Feel free to add more!\n- Browser support via Browserify and Component by converting lists to JSON files.\n\nOtherwise, the API is compatible.\n\n### Adding Types\n\nIf you'd like to add additional types,\nsimply create a PR adding the type to `custom.json` and\na reference link to the [sources](SOURCES.md).\n\nDo __NOT__ edit `mime.json` or `node.json`.\nThose are pulled using `build.js`.\nYou should only touch `custom.json`.\n\n## API\n\n```js\nvar mime = require('mime-types')\n```\n\nAll functions return `false` if input is invalid or not found.\n\n### mime.lookup(path)\n\nLookup the content-type associated with a file.\n\n```js\nmime.lookup('json') // 'application/json'\nmime.lookup('.md') // 'text/x-markdown'\nmime.lookup('file.html') // 'text/html'\nmime.lookup('folder/file.js') // 'application/javascript'\n\nmime.lookup('cats') // false\n```\n\n### mime.contentType(type)\n\nCreate a full content-type header given a content-type or extension.\n\n```js\nmime.contentType('markdown') // 'text/x-markdown; charset=utf-8'\nmime.contentType('file.json') // 'application/json; charset=utf-8'\n```\n\n### mime.extension(type)\n\nGet the default extension for a content-type.\n\n```js\nmime.extension('application/octet-stream') // 'bin'\n```\n\n### mime.charset(type)\n\nLookup the implied default charset of a content-type.\n\n```js\nmime.charset('text/x-markdown') // 'UTF-8'\n```\n\n### mime.types[extension] = type\n\nA map of content-types by extension.\n\n### mime.extensions[type] = [extensions]\n\nA map of extensions by content-type.\n\n### mime.define(types)\n\nGlobally add definitions.\n`types` must be an object of the form:\n\n```js\n{\n \"\": [extensions...],\n \"\": [extensions...]\n}\n```\n\nSee the `.json` files in `lib/` for examples.\n\n## License\n\n[MIT](LICENSE)\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/mime-types/issues" + }, + "_id": "mime-types@1.0.0", + "_from": "mime-types@1.0.0" +} diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/test/mime.js b/node_modules/express/node_modules/type-is/node_modules/mime-types/test/mime.js new file mode 100755 index 0000000..3e6bd10 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/test/mime.js @@ -0,0 +1,65 @@ +/** + * Usage: node test.js + */ + +var mime = require(".."); +var assert = require('assert'); +var path = require('path'); + +function eq(a, b) { + console.log('Test: ' + a + ' === ' + b); + assert.strictEqual.apply(null, arguments); +} + +console.log(Object.keys(mime.extensions).length + ' types'); +console.log(Object.keys(mime.types).length + ' extensions\n'); + +// +// Test mime lookups +// + +eq('text/plain', mime.lookup('text.txt')); // normal file +eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase +eq('text/plain', mime.lookup('dir/text.txt')); // dir + file +eq('text/plain', mime.lookup('.text.txt')); // hidden file +eq('text/plain', mime.lookup('.txt')); // nameless +eq('text/plain', mime.lookup('txt')); // extension-only +eq('text/plain', mime.lookup('/txt')); // extension-less () +eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less +// eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized +// eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default + +// +// Test extensions +// + +eq('txt', mime.extension(mime.types.text)); +eq('html', mime.extension(mime.types.htm)); +eq('bin', mime.extension('application/octet-stream')); +eq('bin', mime.extension('application/octet-stream ')); +eq('html', mime.extension(' text/html; charset=UTF-8')); +eq('html', mime.extension('text/html; charset=UTF-8 ')); +eq('html', mime.extension('text/html; charset=UTF-8')); +eq('html', mime.extension('text/html ; charset=UTF-8')); +eq('html', mime.extension('text/html;charset=UTF-8')); +eq('html', mime.extension('text/Html;charset=UTF-8')); +eq(false, mime.extension('unrecognized')); + +// +// Test node.types lookups +// + +eq('application/font-woff', mime.lookup('file.woff')); +eq('application/octet-stream', mime.lookup('file.buffer')); +eq('audio/mp4', mime.lookup('file.m4a')); +eq('font/opentype', mime.lookup('file.otf')); + +// +// Test charsets +// + +eq('UTF-8', mime.charset('text/plain')); +eq(false, mime.charset(mime.types.js)); +eq('UTF-8', mime.charset('application/json')) +eq('UTF-8', mime.charsets.lookup('text/something')); +// eq('fallback', mime.charset('application/octet-stream', 'fallback')); diff --git a/node_modules/express/node_modules/type-is/node_modules/mime-types/test/test.js b/node_modules/express/node_modules/type-is/node_modules/mime-types/test/test.js new file mode 100755 index 0000000..2ecee92 --- /dev/null +++ b/node_modules/express/node_modules/type-is/node_modules/mime-types/test/test.js @@ -0,0 +1,100 @@ + +var assert = require('assert') + +var mime = require('..') + +var lookup = mime.lookup +var extension = mime.extension +var charset = mime.charset +var contentType = mime.contentType + +describe('.lookup()', function () { + + it('jade', function () { + assert.equal(lookup('jade'), 'text/jade') + assert.equal(lookup('.jade'), 'text/jade') + assert.equal(lookup('file.jade'), 'text/jade') + assert.equal(lookup('folder/file.jade'), 'text/jade') + }) + + it('should not error on non-string types', function () { + assert.doesNotThrow(function () { + lookup({ noteven: "once" }) + lookup(null) + lookup(true) + lookup(Infinity) + }) + }) + + it('should return false for unknown types', function () { + assert.equal(lookup('.jalksdjflakjsdjfasdf'), false) + }) +}) + +describe('.extension()', function () { + + it('should not error on non-string types', function () { + assert.doesNotThrow(function () { + extension({ noteven: "once" }) + extension(null) + extension(true) + extension(Infinity) + }) + }) + + it('should return false for unknown types', function () { + assert.equal(extension('.jalksdjflakjsdjfasdf'), false) + }) +}) + +describe('.charset()', function () { + + it('should not error on non-string types', function () { + assert.doesNotThrow(function () { + charset({ noteven: "once" }) + charset(null) + charset(true) + charset(Infinity) + }) + }) + + it('should return false for unknown types', function () { + assert.equal(charset('.jalksdjflakjsdjfasdf'), false) + }) +}) + +describe('.contentType()', function () { + + it('html', function () { + assert.equal(contentType('html'), 'text/html; charset=utf-8') + }) + + it('text/html; charset=ascii', function () { + assert.equal(contentType('text/html; charset=ascii'), 'text/html; charset=ascii') + }) + + it('json', function () { + assert.equal(contentType('json'), 'application/json; charset=utf-8') + }) + + it('application/json', function () { + assert.equal(contentType('application/json'), 'application/json; charset=utf-8') + }) + + it('jade', function () { + assert.equal(contentType('jade'), 'text/jade; charset=utf-8') + }) + + it('should not error on non-string types', function () { + assert.doesNotThrow(function () { + contentType({ noteven: "once" }) + contentType(null) + contentType(true) + contentType(Infinity) + }) + }) + + it('should return false for unknown types', function () { + assert.equal(contentType('.jalksdjflakjsdjfasdf'), false) + }) +}) diff --git a/node_modules/express/node_modules/type-is/package.json b/node_modules/express/node_modules/type-is/package.json new file mode 100755 index 0000000..914d50c --- /dev/null +++ b/node_modules/express/node_modules/type-is/package.json @@ -0,0 +1,45 @@ +{ + "name": "type-is", + "description": "Infer the content-type of a request.", + "version": "1.2.1", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/expressjs/type-is" + }, + "dependencies": { + "mime-types": "1.0.0" + }, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "engines": { + "node": ">= 0.8" + }, + "scripts": { + "test": "mocha --require should --reporter spec --bail" + }, + "readme": "# type-is [![Build Status](https://travis-ci.org/expressjs/type-is.svg?branch=master)](https://travis-ci.org/expressjs/type-is) [![NPM version](https://badge.fury.io/js/type-is.svg)](https://badge.fury.io/js/type-is)\n\nInfer the content-type of a request.\n\n### Install\n\n```sh\n$ npm install type-is\n```\n\n## API\n\n```js\nvar http = require('http')\nvar is = require('type-is')\n\nhttp.createServer(function (req, res) {\n is(req, ['text/*'])\n})\n```\n\n### type = is(request, types)\n\n`request` is the node HTTP request. `types` is an array of types.\n\n```js\n// req.headers.content-type = 'application/json'\n\nis(req, ['json']) // 'json'\nis(req, ['html', 'json']) // 'json'\nis(req, ['application/*']) // 'application/json'\nis(req, ['application/json']) // 'application/json'\n\nis(req, ['html']) // false\n```\n\n#### Each type can be:\n\n- An extension name such as `json`. This name will be returned if matched.\n- A mime type such as `application/json`.\n- A mime type with a wildcard such as `*/json` or `application/*`. The full mime type will be returned if matched\n- A suffix such as `+json`. This can be combined with a wildcard such as `*/vnd+json` or `application/*+json`. The full mime type will be returned if matched.\n\n`false` will be returned if no type matches.\n\n## Examples\n\n#### Example body parser\n\n```js\nvar is = require('type-is');\nvar parse = require('body');\nvar busboy = require('busboy');\n\nfunction bodyParser(req, res, next) {\n var hasRequestBody = 'content-type' in req.headers\n || 'transfer-encoding' in req.headers;\n if (!hasRequestBody) return next();\n\n switch (is(req, ['urlencoded', 'json', 'multipart'])) {\n case 'urlencoded':\n // parse urlencoded body\n break\n case 'json':\n // parse json body\n break\n case 'multipart':\n // parse multipart body\n break\n default:\n // 415 error code\n }\n}\n```\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013 Jonathan Ong me@jongleberry.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/type-is/issues" + }, + "_id": "type-is@1.2.1", + "dist": { + "shasum": "ce92daaf26b7e04e10bcf83489774fb6703fccaf" + }, + "_from": "type-is@1.2.1", + "_resolved": "https://registry.npmjs.org/type-is/-/type-is-1.2.1.tgz" +} diff --git a/node_modules/express/node_modules/utils-merge/.travis.yml b/node_modules/express/node_modules/utils-merge/.travis.yml new file mode 100755 index 0000000..af92b02 --- /dev/null +++ b/node_modules/express/node_modules/utils-merge/.travis.yml @@ -0,0 +1,6 @@ +language: "node_js" +node_js: + - "0.4" + - "0.6" + - "0.8" + - "0.10" diff --git a/node_modules/express/node_modules/utils-merge/LICENSE b/node_modules/express/node_modules/utils-merge/LICENSE new file mode 100755 index 0000000..e33bd10 --- /dev/null +++ b/node_modules/express/node_modules/utils-merge/LICENSE @@ -0,0 +1,20 @@ +(The MIT License) + +Copyright (c) 2013 Jared Hanson + +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/node_modules/express/node_modules/utils-merge/README.md b/node_modules/express/node_modules/utils-merge/README.md new file mode 100755 index 0000000..2f94e9b --- /dev/null +++ b/node_modules/express/node_modules/utils-merge/README.md @@ -0,0 +1,34 @@ +# utils-merge + +Merges the properties from a source object into a destination object. + +## Install + + $ npm install utils-merge + +## Usage + +```javascript +var a = { foo: 'bar' } + , b = { bar: 'baz' }; + +merge(a, b); +// => { foo: 'bar', bar: 'baz' } +``` + +## Tests + + $ npm install + $ npm test + +[![Build Status](https://secure.travis-ci.org/jaredhanson/utils-merge.png)](http://travis-ci.org/jaredhanson/utils-merge) + +## Credits + + - [Jared Hanson](http://github.com/jaredhanson) + +## License + +[The MIT License](http://opensource.org/licenses/MIT) + +Copyright (c) 2013 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)> diff --git a/node_modules/express/node_modules/utils-merge/index.js b/node_modules/express/node_modules/utils-merge/index.js new file mode 100755 index 0000000..4265c69 --- /dev/null +++ b/node_modules/express/node_modules/utils-merge/index.js @@ -0,0 +1,23 @@ +/** + * Merge object b with object a. + * + * var a = { foo: 'bar' } + * , b = { bar: 'baz' }; + * + * merge(a, b); + * // => { foo: 'bar', bar: 'baz' } + * + * @param {Object} a + * @param {Object} b + * @return {Object} + * @api public + */ + +exports = module.exports = function(a, b){ + if (a && b) { + for (var key in b) { + a[key] = b[key]; + } + } + return a; +}; diff --git a/node_modules/express/node_modules/utils-merge/package.json b/node_modules/express/node_modules/utils-merge/package.json new file mode 100755 index 0000000..f8d5fc6 --- /dev/null +++ b/node_modules/express/node_modules/utils-merge/package.json @@ -0,0 +1,42 @@ +{ + "name": "utils-merge", + "version": "1.0.0", + "description": "merge() utility function", + "keywords": [ + "util" + ], + "repository": { + "type": "git", + "url": "git://github.com/jaredhanson/utils-merge.git" + }, + "bugs": { + "url": "http://github.com/jaredhanson/utils-merge/issues" + }, + "author": { + "name": "Jared Hanson", + "email": "jaredhanson@gmail.com", + "url": "http://www.jaredhanson.net/" + }, + "licenses": [ + { + "type": "MIT", + "url": "http://www.opensource.org/licenses/MIT" + } + ], + "main": "./index", + "dependencies": {}, + "devDependencies": { + "mocha": "1.x.x", + "chai": "1.x.x" + }, + "scripts": { + "test": "node_modules/.bin/mocha --reporter spec --require test/bootstrap/node test/*.test.js" + }, + "engines": { + "node": ">= 0.4.0" + }, + "readme": "# utils-merge\n\nMerges the properties from a source object into a destination object.\n\n## Install\n\n $ npm install utils-merge\n\n## Usage\n\n```javascript\nvar a = { foo: 'bar' }\n , b = { bar: 'baz' };\n\nmerge(a, b);\n// => { foo: 'bar', bar: 'baz' }\n```\n\n## Tests\n\n $ npm install\n $ npm test\n\n[![Build Status](https://secure.travis-ci.org/jaredhanson/utils-merge.png)](http://travis-ci.org/jaredhanson/utils-merge)\n\n## Credits\n\n - [Jared Hanson](http://github.com/jaredhanson)\n\n## License\n\n[The MIT License](http://opensource.org/licenses/MIT)\n\nCopyright (c) 2013 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)>\n", + "readmeFilename": "README.md", + "_id": "utils-merge@1.0.0", + "_from": "utils-merge@1.0.0" +} diff --git a/node_modules/express/node_modules/vary/.npmignore b/node_modules/express/node_modules/vary/.npmignore new file mode 100755 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/express/node_modules/vary/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/express/node_modules/vary/History.md b/node_modules/express/node_modules/vary/History.md new file mode 100755 index 0000000..10fb1db --- /dev/null +++ b/node_modules/express/node_modules/vary/History.md @@ -0,0 +1,9 @@ +0.1.0 / 2014-06-05 +================== + + * Support array of fields to set + +0.0.0 / 2014-06-04 +================== + + * Initial release diff --git a/node_modules/express/node_modules/vary/LICENSE b/node_modules/express/node_modules/vary/LICENSE new file mode 100755 index 0000000..b7dce6c --- /dev/null +++ b/node_modules/express/node_modules/vary/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014 Douglas Christopher Wilson + +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/node_modules/express/node_modules/vary/README.md b/node_modules/express/node_modules/vary/README.md new file mode 100755 index 0000000..6ed2825 --- /dev/null +++ b/node_modules/express/node_modules/vary/README.md @@ -0,0 +1,43 @@ +# vary + +[![NPM version](https://badge.fury.io/js/vary.svg)](http://badge.fury.io/js/vary) +[![Build Status](https://travis-ci.org/expressjs/vary.svg?branch=master)](https://travis-ci.org/expressjs/vary) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/vary.svg?branch=master)](https://coveralls.io/r/expressjs/vary) + +Update the Vary header of a response + +## Install + +```sh +$ npm install vary +``` + +## API + +```js +var vary = require('vary') +``` + +### vary(res, field) + +Adds the given header `field` to the `Vary` response header of `res`. +This can be a string of a single field or an array of multiple fields. + +This will append the header if not already listed, otherwise leaves +it listed in the current location. + +```js +vary(res, 'Origin') +vary(res, 'User-Agent') +vary(res, ['Accept', 'Accept-Language', 'Accept-Encoding']) +``` + +## Testing + +```sh +$ npm test +``` + +## License + +[MIT](LICENSE) diff --git a/node_modules/express/node_modules/vary/index.js b/node_modules/express/node_modules/vary/index.js new file mode 100755 index 0000000..6f52730 --- /dev/null +++ b/node_modules/express/node_modules/vary/index.js @@ -0,0 +1,79 @@ +/*! + * vary + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = vary; + +/** + * Variables. + */ + +var separators = /[\(\)<>@,;:\\"\/\[\]\?=\{\}\u0020\u0009]/; + +/** + * Mark that a request is varied on a header field. + * + * @param {Object} res + * @param {String|Array} field + * @api public + */ + +function vary(res, field) { + if (!res || !res.getHeader || !res.setHeader) { + // quack quack + throw new TypeError('res argument is required'); + } + + if (!field) { + throw new TypeError('field argument is required'); + } + + var fields = !Array.isArray(field) + ? [String(field)] + : field; + + for (var i = 0; i < fields.length; i++) { + if (separators.test(fields[i])) { + throw new TypeError('field argument contains an invalid header'); + } + } + + var val = res.getHeader('Vary') || '' + var headers = Array.isArray(val) + ? val.join(', ') + : String(val); + + // existing unspecified vary + if (headers === '*') { + return; + } + + // enumerate current values + var vals = headers.toLowerCase().split(/ *, */); + + // unspecified vary + if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) { + res.setHeader('Vary', '*'); + return; + } + + for (var i = 0; i < fields.length; i++) { + field = fields[i].toLowerCase(); + + // append value (case-preserving) + if (vals.indexOf(field) === -1) { + vals.push(field); + headers = headers + ? headers + ', ' + fields[i] + : fields[i]; + } + } + + res.setHeader('Vary', headers); +} diff --git a/node_modules/express/node_modules/vary/package.json b/node_modules/express/node_modules/vary/package.json new file mode 100755 index 0000000..d1a31c9 --- /dev/null +++ b/node_modules/express/node_modules/vary/package.json @@ -0,0 +1,39 @@ +{ + "name": "vary", + "description": "Update the Vary header of a response", + "version": "0.1.0", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "license": "MIT", + "keywords": [ + "http", + "res", + "vary" + ], + "repository": { + "type": "git", + "url": "git://github.com/expressjs/vary" + }, + "devDependencies": { + "istanbul": "0.2.10", + "mocha": "~1.20.0", + "should": "~4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --reporter dot test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec test/" + }, + "readme": "# vary\n\n[![NPM version](https://badge.fury.io/js/vary.svg)](http://badge.fury.io/js/vary)\n[![Build Status](https://travis-ci.org/expressjs/vary.svg?branch=master)](https://travis-ci.org/expressjs/vary)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/vary.svg?branch=master)](https://coveralls.io/r/expressjs/vary)\n\nUpdate the Vary header of a response\n\n## Install\n\n```sh\n$ npm install vary\n```\n\n## API\n\n```js\nvar vary = require('vary')\n```\n\n### vary(res, field)\n\nAdds the given header `field` to the `Vary` response header of `res`.\nThis can be a string of a single field or an array of multiple fields.\n\nThis will append the header if not already listed, otherwise leaves\nit listed in the current location.\n\n```js\nvary(res, 'Origin')\nvary(res, 'User-Agent')\nvary(res, ['Accept', 'Accept-Language', 'Accept-Encoding'])\n```\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## License\n\n[MIT](LICENSE)\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/expressjs/vary/issues" + }, + "_id": "vary@0.1.0", + "_from": "vary@0.1.0" +} diff --git a/node_modules/express/package.json b/node_modules/express/package.json new file mode 100755 index 0000000..84a7cda --- /dev/null +++ b/node_modules/express/package.json @@ -0,0 +1,110 @@ +{ + "name": "express", + "description": "Sinatra inspired web development framework", + "version": "4.4.5", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "contributors": [ + { + "name": "Aaron Heckmann", + "email": "aaron.heckmann+github@gmail.com" + }, + { + "name": "Ciaran Jessup", + "email": "ciaranj@gmail.com" + }, + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Guillermo Rauch", + "email": "rauchg@gmail.com" + }, + { + "name": "Jonathan Ong", + "email": "me@jongleberry.com" + }, + { + "name": "Roman Shtylman" + } + ], + "keywords": [ + "express", + "framework", + "sinatra", + "web", + "rest", + "restful", + "router", + "app", + "api" + ], + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/express" + }, + "license": "MIT", + "dependencies": { + "accepts": "~1.0.5", + "buffer-crc32": "0.2.3", + "debug": "1.0.2", + "escape-html": "1.0.1", + "methods": "1.0.1", + "parseurl": "1.0.1", + "proxy-addr": "1.0.1", + "range-parser": "1.0.0", + "send": "0.4.3", + "serve-static": "1.2.3", + "type-is": "1.2.1", + "vary": "0.1.0", + "cookie": "0.1.2", + "fresh": "0.2.2", + "cookie-signature": "1.0.4", + "merge-descriptors": "0.0.2", + "utils-merge": "1.0.0", + "qs": "0.6.6", + "path-to-regexp": "0.1.2" + }, + "devDependencies": { + "after": "0.8.1", + "istanbul": "0.2.10", + "mocha": "~1.20.1", + "should": "~4.0.4", + "supertest": "~0.13.0", + "connect-redis": "~2.0.0", + "ejs": "~1.0.0", + "jade": "~1.3.1", + "marked": "0.3.2", + "multiparty": "~3.2.4", + "hjs": "~0.0.6", + "body-parser": "~1.4.3", + "cookie-parser": "~1.3.1", + "express-session": "~1.5.0", + "method-override": "2.0.2", + "morgan": "1.1.1", + "vhost": "2.0.0" + }, + "engines": { + "node": ">= 0.10.0" + }, + "scripts": { + "prepublish": "npm prune", + "test": "mocha --require test/support/env --reporter dot --check-leaks test/ test/acceptance/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/" + }, + "readme": "[![express logo](https://i.cloudup.com/zfY6lL7eFa-3000x3000.png)](http://expressjs.com/)\n\n Fast, unopinionated, minimalist web framework for [node](http://nodejs.org).\n\n [![NPM version](https://badge.fury.io/js/express.svg)](http://badge.fury.io/js/express)\n [![Build Status](https://travis-ci.org/visionmedia/express.svg?branch=master)](https://travis-ci.org/visionmedia/express)\n [![Coverage Status](https://img.shields.io/coveralls/visionmedia/express.svg)](https://coveralls.io/r/visionmedia/express)\n [![Gittip](http://img.shields.io/gittip/visionmedia.svg)](https://www.gittip.com/visionmedia/)\n\n```js\nvar express = require('express');\nvar app = express();\n\napp.get('/', function(req, res){\n res.send('Hello World');\n});\n\napp.listen(3000);\n```\n\n**PROTIP** Be sure to read [Migrating from 3.x to 4.x](https://github.com/visionmedia/express/wiki/Migrating-from-3.x-to-4.x) as well as [New features in 4.x](https://github.com/visionmedia/express/wiki/New-features-in-4.x).\n\n## Installation\n\n $ npm install express\n\n## Quick Start\n\n The quickest way to get started with express is to utilize the executable [`express(1)`](http://github.com/expressjs/generator) to generate an application as shown below:\n \n Install the executable. The executable's major version will match Express's:\n \n $ npm install -g express-generator@3\n\n Create the app:\n\n $ express /tmp/foo && cd /tmp/foo\n\n Install dependencies:\n\n $ npm install\n\n Start the server:\n\n $ npm start\n\n## Features\n\n * Robust routing\n * HTTP helpers (redirection, caching, etc)\n * View system supporting 14+ template engines\n * Content negotiation\n * Focus on high performance\n * Executable for generating applications quickly\n * High test coverage\n\n## Philosophy\n\n The Express philosophy is to provide small, robust tooling for HTTP servers, making\n it a great solution for single page applications, web sites, hybrids, or public\n HTTP APIs.\n\n Express does not force you to use any specific ORM or template engine. With support for over\n 14 template engines via [Consolidate.js](http://github.com/visionmedia/consolidate.js),\n you can quickly craft your perfect framework.\n\n## More Information\n\n * [Website and Documentation](http://expressjs.com/) stored at [visionmedia/expressjs.com](https://github.com/visionmedia/expressjs.com)\n * Join #express on freenode\n * [Google Group](http://groups.google.com/group/express-js) for discussion\n * Follow [tjholowaychuk](http://twitter.com/tjholowaychuk) and [defunctzombie](https://twitter.com/defunctzombie) on twitter for updates\n * Visit the [Wiki](http://github.com/visionmedia/express/wiki)\n * [РуÑÑкоÑÐ·Ñ‹Ñ‡Ð½Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ](http://jsman.ru/express/)\n * Run express examples [online](https://runnable.com/express)\n\n## Viewing Examples\n\nClone the Express repo, then install the dev dependencies to install all the example / test suite dependencies:\n\n $ git clone git://github.com/visionmedia/express.git --depth 1\n $ cd express\n $ npm install\n\nThen run whichever tests you want:\n\n $ node examples/content-negotiation\n\nYou can also view live examples here:\n\n\n\n## Running Tests\n\nTo run the test suite, first invoke the following command within the repo, installing the development dependencies:\n\n $ npm install\n\nThen run the tests:\n\n```sh\n$ npm test\n```\n\n## Contributors\n \n Author: [TJ Holowaychuk](http://github.com/visionmedia) \n Lead Maintainer: [Roman Shtylman](https://github.com/defunctzombie) \n Contributors: https://github.com/visionmedia/express/graphs/contributors \n\n## License\n\nMIT\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/visionmedia/express/issues" + }, + "_id": "express@4.4.5", + "dist": { + "shasum": "95c69de656eb00e90c5ef8e3e0810c5169f21444" + }, + "_from": "express@", + "_resolved": "https://registry.npmjs.org/express/-/express-4.4.5.tgz" +} diff --git a/node_modules/jQuery/.npmignore b/node_modules/jQuery/.npmignore new file mode 100755 index 0000000..2ccbe46 --- /dev/null +++ b/node_modules/jQuery/.npmignore @@ -0,0 +1 @@ +/node_modules/ diff --git a/node_modules/jQuery/LICENSE-MIT b/node_modules/jQuery/LICENSE-MIT new file mode 100755 index 0000000..0e04ca5 --- /dev/null +++ b/node_modules/jQuery/LICENSE-MIT @@ -0,0 +1,22 @@ +Copyright (c) 2012 James Morrin + +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/node_modules/jQuery/README.md b/node_modules/jQuery/README.md new file mode 100755 index 0000000..3aebf43 --- /dev/null +++ b/node_modules/jQuery/README.md @@ -0,0 +1,53 @@ +node-jQuery +==== + +A stupid-simple wrapper over jQuery for Node.JS (server). Currently 1.7.2. + +Node.JS +--- + + npm install jQuery + + var $ = require('jQuery'); + + +Examples +--- + + $("

    test passes

    ").appendTo("body"); + console.log($("body").html()); + +In Node.JS you may also create separate window instances + + var jsdom = require('jsdom').jsdom + , myWindow = jsdom().createWindow() + , $ = require('jQuery') + , jq = require('jQuery').create() + , jQuery = require('jQuery').create(myWindow) + ; + + $("

    test passes

    ").appendTo("body"); + console.log($("body").html()); + + jq("

    other test passes

    ").appendTo("body"); + console.log(jq("body").html()); + + jQuery("

    third test passes

    ").appendTo("body"); + console.log(jQuery("body").html()); + +Output: + +

    test passes

    +

    other test passes

    +

    third test passes

    + +JSONP Example +---- + + var $ = require('jQuery'); + + $.getJSON('http://twitter.com/status/user_timeline/treason.json?count=10&callback=?',function(data) { + console.log(data); + }); + + diff --git a/node_modules/jQuery/grunt.js b/node_modules/jQuery/grunt.js new file mode 100755 index 0000000..9e1cdf6 --- /dev/null +++ b/node_modules/jQuery/grunt.js @@ -0,0 +1,100 @@ +module.exports = function(grunt) { + + var exec = require('child_process').exec, + http = require('http'), + fs = require('fs'), + host = 'ajax.googleapis.com', + jqPath = '/ajax/libs/jquery/1.7.2/jquery.js'; + + grunt.registerTask('build', 'builds query module for us in nodje', function() { + var tmpDir = './tmp', distDir = './lib', + done = this.async(), wrapper; + + + function buildjQuery(jq) { + wrapper = fs.readFileSync('./src/wrapper.js', 'utf8'); + wrapper = wrapper.replace('//JQUERY_SOURCE', jq); + fs.writeFileSync('./lib/node-jquery.js', wrapper); + done(); + } + + function writejQuery() { + var data = '', + req = http.request({ + host: host, + port: 80, + path: jqPath, + method: 'GET' + }, function(res) { + res.setEncoding('utf8'); + res.on('data', function(chunk) { + data += chunk; + }); + res.on('end', function() { + fs.writeFileSync(tmpDir+'/jquery.js', data); + buildjQuery(data); + }); + }); + req.write('data\n'); + req.write('data\n'); + req.end(); + + } + + function getjQuery() { + var jq = null; + try { + jq = fs.readFileSync(tmpDir+'/jquery.js', 'utf8'); + buildjQuery(jq); + } catch (e) { + writejQuery(); + } + } + + exec('mkdir '+tmpDir+' && mkdir '+distDir, getjQuery); + }); + + grunt.registerTask('clean', 'removes dist and tmp directories', function() { + var done = this.async(); + exec('rm -rf ./tmp && rm -rf ./lib', function() { + done(); + }); + }); + + // Project configuration. + grunt.initConfig({ + pkg: '', + test: { + files: ['test/*.js'] + }, + lint: { + files: ['grunt.js', 'lib/**/*.js', 'test/**/*.js'] + }, + watch: { + files: '', + tasks: 'default' + }, + jshint: { + options: { + curly: true, + eqeqeq: true, + immed: true, + latedef: true, + newcap: true, + noarg: true, + sub: true, + undef: true, + boss: true, + eqnull: true, + node: true + }, + globals: { + exports: true + } + } + }); + + // Default task. + grunt.registerTask('default', 'build test'); + +}; diff --git a/node_modules/jQuery/lib/node-jquery.js b/node_modules/jQuery/lib/node-jquery.js new file mode 100755 index 0000000..fc8022d --- /dev/null +++ b/node_modules/jQuery/lib/node-jquery.js @@ -0,0 +1,9437 @@ +(function () { +function create(window) { + + if(window == null ) { + window = require('jsdom').jsdom().createWindow(); + // assume window is a jsdom instance... + // jsdom includes an incomplete version of XMLHttpRequest + window.XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; + // trick jQuery into thinking CORS is supported (should be in node-XMLHttpRequest) + window.XMLHttpRequest.prototype.withCredentials = false; + + if(window.location == null) { + window.location = require('location'); + } + + if(window.navigator == null) { + window.navigator = require('navigator'); + } + } + + + var location = window.location, + navigator = window.navigator, + XMLHttpRequest = window.XMLHttpRequest; + + /*! + * jQuery JavaScript Library v1.7.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Mar 21 12:46:34 2012 -0700 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
    a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + pixelMargin: true + }; + + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "
    " + + "" + + "
    "; + + container = document.createElement("div"); + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
    t
    "; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
    "; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + } + + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + + body.removeChild( container ); + marginDiv = div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise( object ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: selector && quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

    "; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\//JQUERY_SOURCE" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
    "; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.globalPOS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], + legend: [ 1, "
    ", "
    " ], + thead: [ 1, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + col: [ 2, "", "
    " ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and ")[0]; + test.ok( s, "Creating a script" ); + test.ok( !jQuery.foo, "Make sure the script wasn't executed prematurely" ); + jQuery("body").append(""); + test.ok( jQuery.foo, "Executing a scripts contents in the right context" ); + + // Test multi-line HTML + var div = jQuery("
    \r\nsome text\n

    some p

    \nmore text\r\n
    ")[0]; + test.equals( div.nodeName.toUpperCase(), "DIV", "Make sure we're getting a div." ); + test.equals( div.firstChild.nodeType, 3, "Text node." ); + test.equals( div.lastChild.nodeType, 3, "Text node." ); + test.equals( div.childNodes[1].nodeType, 1, "Paragraph." ); + test.equals( div.childNodes[1].firstChild.nodeType, 3, "Paragraph text." ); + + test.ok( jQuery("")[0], "Creating a link" ); + + test.ok( !jQuery("'); + src = jQuery('script', dom).attr('src'); + test.equals(src, 'none.js', 'script should return proper src attribute'); + test.done(); + }, + "jQuery('html', context)": function(test) { + test.expect(1); + + var $div = jQuery("
    ")[0]; + var $span = jQuery("", $div); + test.equals($span.length, 1, "Verify a span created with a div context works, #1763"); + test.done(); + }, + "text()": function(test) { + test.expect(2); + test.equals("Yahoo", jQuery("#yahoo").text(), "check for text in anchor"); + test.equals("Everything inside the red border is inside a div with id=\"foo\".", jQuery("#sndp").text(), "check for text in complex paragraph"); + test.done(); + }, + "end()": function(test) { + test.expect(3); + test.equals( 'Yahoo', jQuery('#yahoo').parent().end().text(), 'Check for end' ); + test.ok( jQuery('#yahoo').end(), 'Check for end with nothing to end' ); + + var x = jQuery('#yahoo'); + x.parent(); + test.equals( 'Yahoo', jQuery('#yahoo').text(), 'Check for non-destructive behaviour' ); + test.done(); + }, + + "length": function(test) { + test.expect(1); + test.equals( jQuery("#main p").length, 6, "Get Number of Elements Found" ); + test.done(); + }, + + "size()": function(test) { + test.expect(1); + test.equals( jQuery("#main p").size(), 6, "Get Number of Elements Found" ); + test.done(); + }, + + "get()": function(test) { + test.expect(1); + test.same( jQuery("#main p").get(), q("firstp","ap","sndp","en","sap","first"), "Get All Elements" ); + test.done(); + }, + + "toArray()": function(test) { + test.expect(1); + test.same( jQuery("#main p").toArray(), + q("firstp","ap","sndp","en","sap","first"), + "Convert jQuery object to an Array" ) + test.done(); + }, + + "get(Number)": function(test) { + test.expect(2); + test.equals( jQuery("#main p").get(0), document.getElementById("firstp"), "Get A Single Element" ); + test.strictEqual( jQuery("#firstp").get(1), undefined, "Try get with index larger elements count" ); + test.done(); + }, + + "get(-Number)": function(test) { + test.expect(2); + test.equals( jQuery("p").get(-1), document.getElementById("first"), "Get a single element with negative index" ); + test.strictEqual( jQuery("#firstp").get(-2), undefined, "Try get with index negative index larger then elements count" ); + test.done(); + }, + + "attr()": function(test) { + var e = null; + test.expect(4); + test.equals( jQuery('#input1').attr('name'), 'PWD', "Get form element name attribute" ); + test.equals( jQuery('#input2').attr('name'), 'T1', "Get form element name attribute" ); + test.equals( jQuery('item').attr('name'), 'test val', "Get name attribute from element" ); + e = jsdom('content'); + test.equals( jQuery('element', e).attr('name'), 'dude', "Get name attribute from element" ); + test.done(); + }, + + "each(Function)": function(test) { + test.expect(1); + var div = jQuery("div"); + div.each(function(){this.foo = 'zoo';}); + var pass = true; + for ( var i = 0; i < div.size(); i++ ) { + if ( div.get(i).foo != "zoo" ) pass = false; + } + test.ok( pass, "Execute a function, Relative" ); + test.done(); + }, + + "slice()": function(test) { + test.expect(7); + + var $links = jQuery("#ap a"); + + test.same( $links.slice(1,2).get(), q("groups"), "slice(1,2)" ); + test.same( $links.slice(1).get(), q("groups", "anchor1", "mark"), "slice(1)" ); + test.same( $links.slice(0,3).get(), q("google", "groups", "anchor1"), "slice(0,3)" ); + test.same( $links.slice(-1).get(), q("mark"), "slice(-1)" ); + + test.same( $links.eq(1).get(), q("groups"), "eq(1)" ); + test.same( $links.eq('2').get(), q("anchor1"), "eq('2')" ); + test.same( $links.eq(-1).get(), q("mark"), "eq(-1)" ); + test.done(); + }, + + "first()/last()": function(test) { + test.expect(4); + + var $links = jQuery("#ap a"), $none = jQuery("asdf"); + + test.same( $links.first().get(), q("google"), "first()" ); + test.same( $links.last().get(), q("mark"), "last()" ); + + test.same( $none.first().get(), [], "first() none" ); + test.same( $none.last().get(), [], "last() none" ); + test.done(); + }, + + "map()": function(test) { + test.expect(2);//test.expect(6); + + test.same( + jQuery("#ap").map(function(){ + return jQuery(this).find("a").get(); + }).get(), + q("google", "groups", "anchor1", "mark"), + "Array Map" + ); + + test.same( + jQuery("#ap > a").map(function(){ + return this.parentNode; + }).get(), + q("ap","ap","ap"), + "Single Map" + ); + test.done(); + + return;//these haven't been accepted yet + + //for #2616 + var keys = jQuery.map( {a:1,b:2}, function( v, k ){ + return k; + }, [ ] ); + + test.equals( keys.join(""), "ab", "Map the keys from a hash to an array" ); + + var values = jQuery.map( {a:1,b:2}, function( v, k ){ + return v; + }, [ ] ); + + test.equals( values.join(""), "12", "Map the values from a hash to an array" ); + + var scripts = document.getElementsByTagName("script"); + var mapped = jQuery.map( scripts, function( v, k ){ + return v; + }, {length:0} ); + + test.equals( mapped.length, scripts.length, "Map an array(-like) to a hash" ); + + var flat = jQuery.map( Array(4), function( v, k ){ + return k % 2 ? k : [k,k,k];//try mixing array and regular returns + }); + + test.equals( flat.join(""), "00012223", "try the new flatten technique(#2616)" ); + }, + + "jQuery.merge()": function(test) { + test.expect(8); + + var parse = jQuery.merge; + + test.same( parse([],[]), [], "Empty arrays" ); + + test.same( parse([1],[2]), [1,2], "Basic" ); + test.same( parse([1,2],[3,4]), [1,2,3,4], "Basic" ); + + test.same( parse([1,2],[]), [1,2], "Second empty" ); + test.same( parse([],[1,2]), [1,2], "First empty" ); + + // Fixed at [5998], #3641 + test.same( parse([-2,-1], [0,1,2]), [-2,-1,0,1,2], "Second array including a zero (falsy)"); + + // After fixing #5527 + test.same( parse([], [null, undefined]), [null, undefined], "Second array including null and undefined values"); + test.same( parse({length:0}, [1,2]), {length:2, 0:1, 1:2}, "First array like"); + test.done(); + }, + + "jQuery.extend(Object, Object)": function(test) { + test.expect(28); + + var settings = { xnumber1: 5, xnumber2: 7, xstring1: "peter", xstring2: "pan" }, + options = { xnumber2: 1, xstring2: "x", xxx: "newstring" }, + optionsCopy = { xnumber2: 1, xstring2: "x", xxx: "newstring" }, + merged = { xnumber1: 5, xnumber2: 1, xstring1: "peter", xstring2: "x", xxx: "newstring" }, + deep1 = { foo: { bar: true } }, + deep1copy = { foo: { bar: true } }, + deep2 = { foo: { baz: true }, foo2: document }, + deep2copy = { foo: { baz: true }, foo2: document }, + deepmerged = { foo: { bar: true, baz: true }, foo2: document }, + arr = [1, 2, 3], + nestedarray = { arr: arr }; + + jQuery.extend(settings, options); + test.same( settings, merged, "Check if extended: settings must be extended" ); + test.same( options, optionsCopy, "Check if not modified: options must not be modified" ); + + jQuery.extend(settings, null, options); + test.same( settings, merged, "Check if extended: settings must be extended" ); + test.same( options, optionsCopy, "Check if not modified: options must not be modified" ); + + jQuery.extend(true, deep1, deep2); + test.same( deep1.foo, deepmerged.foo, "Check if foo: settings must be extended" ); + test.same( deep2.foo, deep2copy.foo, "Check if not deep2: options must not be modified" ); + test.equals( deep1.foo2, document, "Make sure that a deep clone was not attempted on the document" ); + + test.ok( jQuery.extend(true, {}, nestedarray).arr !== arr, "Deep extend of object must clone child array" ); + + // #5991 + test.ok( jQuery.isArray( jQuery.extend(true, { arr: {} }, nestedarray).arr ), "Cloned array heve to be an Array" ); + test.ok( jQuery.isPlainObject( jQuery.extend(true, { arr: arr }, { arr: {} }).arr ), "Cloned object heve to be an plain object" ); + + var empty = {}; + var optionsWithLength = { foo: { length: -1 } }; + jQuery.extend(true, empty, optionsWithLength); + test.same( empty.foo, optionsWithLength.foo, "The length property must copy correctly" ); + + empty = {}; + var optionsWithDate = { foo: { date: new Date } }; + jQuery.extend(true, empty, optionsWithDate); + test.same( empty.foo, optionsWithDate.foo, "Dates copy correctly" ); + + var myKlass = function() {}; + var customObject = new myKlass(); + var optionsWithCustomObject = { foo: { date: customObject } }; + empty = {}; + jQuery.extend(true, empty, optionsWithCustomObject); + test.ok( empty.foo && empty.foo.date === customObject, "Custom objects copy correctly (no methods)" ); + + // Makes the class a little more realistic + myKlass.prototype = { someMethod: function(){} }; + empty = {}; + jQuery.extend(true, empty, optionsWithCustomObject); + test.ok( empty.foo && empty.foo.date === customObject, "Custom objects copy correctly" ); + + var ret = jQuery.extend(true, { foo: 4 }, { foo: new Number(5) } ); + test.ok( ret.foo == 5, "Wrapped numbers copy correctly" ); + + var nullUndef; + nullUndef = jQuery.extend({}, options, { xnumber2: null }); + test.ok( nullUndef.xnumber2 === null, "Check to make sure null values are copied"); + + nullUndef = jQuery.extend({}, options, { xnumber2: undefined }); + test.ok( nullUndef.xnumber2 === options.xnumber2, "Check to make sure undefined values are not copied"); + + nullUndef = jQuery.extend({}, options, { xnumber0: null }); + test.ok( nullUndef.xnumber0 === null, "Check to make sure null values are inserted"); + + var target = {}; + var recursive = { foo:target, bar:5 }; + jQuery.extend(true, target, recursive); + test.same( target, { bar:5 }, "Check to make sure a recursive obj doesn't go never-ending loop by not copying it over" ); + + var ret = jQuery.extend(true, { foo: [] }, { foo: [0] } ); // 1907 + test.equals( ret.foo.length, 1, "Check to make sure a value with coersion 'false' copies over when necessary to fix #1907" ); + + var ret = jQuery.extend(true, { foo: "1,2,3" }, { foo: [1, 2, 3] } ); + test.ok( typeof ret.foo != "string", "Check to make sure values equal with coersion (but not actually equal) overwrite correctly" ); + + var ret = jQuery.extend(true, { foo:"bar" }, { foo:null } ); + test.ok( typeof ret.foo !== 'undefined', "Make sure a null value doesn't crash with deep extend, for #1908" ); + + var obj = { foo:null }; + jQuery.extend(true, obj, { foo:"notnull" } ); + test.equals( obj.foo, "notnull", "Make sure a null value can be overwritten" ); + + function func() {} + jQuery.extend(func, { key: "value" } ); + test.equals( func.key, "value", "Verify a function can be extended" ); + + var defaults = { xnumber1: 5, xnumber2: 7, xstring1: "peter", xstring2: "pan" }, + defaultsCopy = { xnumber1: 5, xnumber2: 7, xstring1: "peter", xstring2: "pan" }, + options1 = { xnumber2: 1, xstring2: "x" }, + options1Copy = { xnumber2: 1, xstring2: "x" }, + options2 = { xstring2: "xx", xxx: "newstringx" }, + options2Copy = { xstring2: "xx", xxx: "newstringx" }, + merged2 = { xnumber1: 5, xnumber2: 1, xstring1: "peter", xstring2: "xx", xxx: "newstringx" }; + + var settings = jQuery.extend({}, defaults, options1, options2); + test.same( settings, merged2, "Check if extended: settings must be extended" ); + test.same( defaults, defaultsCopy, "Check if not modified: options1 must not be modified" ); + test.same( options1, options1Copy, "Check if not modified: options1 must not be modified" ); + test.same( options2, options2Copy, "Check if not modified: options2 must not be modified" ); + test.done(); + }, + + "jQuery.each(Object,Function)": function(test) { + test.expect(13); + jQuery.each( [0,1,2], function(i, n){ + test.equals( i, n, "Check array iteration" ); + }); + + jQuery.each( [5,6,7], function(i, n){ + test.equals( i, n - 5, "Check array iteration" ); + }); + + jQuery.each( { name: "name", lang: "lang" }, function(i, n){ + test.equals( i, n, "Check object iteration" ); + }); + + var total = 0; + jQuery.each([1,2,3], function(i,v){ total += v; }); + test.equals( total, 6, "Looping over an array" ); + total = 0; + jQuery.each([1,2,3], function(i,v){ total += v; if ( i == 1 ) return false; }); + test.equals( total, 3, "Looping over an array, with break" ); + total = 0; + jQuery.each({"a":1,"b":2,"c":3}, function(i,v){ total += v; }); + test.equals( total, 6, "Looping over an object" ); + total = 0; + jQuery.each({"a":3,"b":3,"c":3}, function(i,v){ total += v; return false; }); + test.equals( total, 3, "Looping over an object, with break" ); + + var f = function(){}; + f.foo = 'bar'; + jQuery.each(f, function(i){ + f[i] = 'baz'; + }); + test.equals( "baz", f.foo, "Loop over a function" ); + test.done(); + }, + + "jQuery.makeArray": function(test){ + test.expect(17); + + test.equals( jQuery.makeArray(jQuery('html>*'))[0].nodeName.toUpperCase(), "HEAD", "Pass makeArray a jQuery object" ); + + test.equals( jQuery.makeArray(document.getElementsByName("PWD")).slice(0,1)[0].name, "PWD", "Pass makeArray a nodelist" ); + + test.equals( (function(){ return jQuery.makeArray(arguments); })(1,2).join(""), "12", "Pass makeArray an arguments array" ); + + test.equals( jQuery.makeArray([1,2,3]).join(""), "123", "Pass makeArray a real array" ); + + test.equals( jQuery.makeArray().length, 0, "Pass nothing to makeArray and test.expect an empty array" ); + + test.equals( jQuery.makeArray( 0 )[0], 0 , "Pass makeArray a number" ); + + test.equals( jQuery.makeArray( "foo" )[0], "foo", "Pass makeArray a string" ); + + test.equals( jQuery.makeArray( true )[0].constructor, Boolean, "Pass makeArray a boolean" ); + + test.equals( jQuery.makeArray( document.createElement("div") )[0].nodeName.toUpperCase(), "DIV", "Pass makeArray a single node" ); + + test.equals( jQuery.makeArray( {length:2, 0:"a", 1:"b"} ).join(""), "ab", "Pass makeArray an array like map (with length)" ); + + test.ok( !!jQuery.makeArray( document.documentElement.childNodes ).slice(0,1)[0].nodeName, "Pass makeArray a childNodes array" ); + + // function, is tricky as it has length + test.equals( jQuery.makeArray( function(){ return 1;} )[0](), 1, "Pass makeArray a function" ); + + //window, also has length + test.equals( jQuery.makeArray(window)[0], window, "Pass makeArray the window" ); + + test.equals( jQuery.makeArray(/a/)[0].constructor, RegExp, "Pass makeArray a regex" ); + + test.equals( jQuery.makeArray(document.getElementById('form')).length, 2, "Pass makeArray a form (treat as elements)" ); + + // For #5610 + test.same( jQuery.makeArray({'length': '0'}), [], "Make sure object is coerced properly."); + test.same( jQuery.makeArray({'length': '5'}), [], "Make sure object is coerced properly."); + test.done(); + }, + + "jQuery.isEmptyObject": function(test){ + test.expect(2); + + test.equals(true, jQuery.isEmptyObject({}), "isEmptyObject on empty object literal" ); + test.equals(false, jQuery.isEmptyObject({a:1}), "isEmptyObject on non-empty object literal" ); + + // What about this ? + // test.equals(true, jQuery.isEmptyObject(null), "isEmptyObject on null" ); + test.done(); + }, + + "jQuery.proxy": function(test){ + test.expect(4); + + var testfn = function(){ test.equals( this, thisObject, "Make sure that scope is set properly." ); }; + var thisObject = { foo: "bar", method: testfn }; + + // Make sure normal works + testfn.call( thisObject ); + + // Basic scoping + jQuery.proxy( testfn, thisObject )(); + + // Make sure it doesn't freak out + test.equals( jQuery.proxy( null, thisObject ), undefined, "Make sure no function was returned." ); + + // Use the string shortcut + jQuery.proxy( thisObject, "method" )(); + test.done(); + }, + "jQuery.parseJSON": function(test){ + test.expect(8); + + test.equals( jQuery.parseJSON(), null, "Nothing in, null out." ); + test.equals( jQuery.parseJSON( null ), null, "Nothing in, null out." ); + test.equals( jQuery.parseJSON( "" ), null, "Nothing in, null out." ); + + test.same( jQuery.parseJSON("{}"), {}, "Plain object parsing." ); + test.same( jQuery.parseJSON('{"test":1}'), {"test":1}, "Plain object parsing." ); + + test.same( jQuery.parseJSON('\n{"test":1}'), {"test":1}, "Make sure leading whitespaces are handled." ); + + try { + jQuery.parseJSON("{a:1}"); + test.ok( false, "Test malformed JSON string." ); + } catch( e ) { + test.ok( true, "Test malformed JSON string." ); + } + + try { + jQuery.parseJSON("{'a':1}"); + test.ok( false, "Test malformed JSON string." ); + } catch( e ) { + test.ok( true, "Test malformed JSON string." ); + } + test.done(); + }, + + "jQuery.sub() - Static Methods": function(test){ + test.expect(18); + var Subclass = jQuery.sub(); + Subclass.extend({ + topLevelMethod: function() {return this.debug;}, + debug: false, + config: { + locale: 'en_US' + }, + setup: function(config) { + this.extend(true, this.config, config); + } + }); + Subclass.fn.extend({subClassMethod: function() { return this;}}); + + //Test Simple Subclass + test.ok(Subclass.topLevelMethod() === false, 'Subclass.topLevelMethod thought debug was true'); + test.ok(Subclass.config.locale == 'en_US', Subclass.config.locale + ' is wrong!'); + test.same(Subclass.config.test, undefined, 'Subclass.config.test is set incorrectly'); + test.equal(jQuery.ajax, Subclass.ajax, 'The subclass failed to get all top level methods'); + + //Create a SubSubclass + var SubSubclass = Subclass.sub(); + + //Make Sure the SubSubclass inherited properly + test.ok(SubSubclass.topLevelMethod() === false, 'SubSubclass.topLevelMethod thought debug was true'); + test.ok(SubSubclass.config.locale == 'en_US', SubSubclass.config.locale + ' is wrong!'); + test.same(SubSubclass.config.test, undefined, 'SubSubclass.config.test is set incorrectly'); + test.equal(jQuery.ajax, SubSubclass.ajax, 'The subsubclass failed to get all top level methods'); + + //Modify The Subclass and test the Modifications + SubSubclass.fn.extend({subSubClassMethod: function() { return this;}}); + SubSubclass.setup({locale: 'es_MX', test: 'worked'}); + SubSubclass.debug = true; + SubSubclass.ajax = function() {return false;}; + test.ok(SubSubclass.topLevelMethod(), 'SubSubclass.topLevelMethod thought debug was false'); + test.same(SubSubclass(document).subClassMethod, Subclass.fn.subClassMethod, 'Methods Differ!'); + test.ok(SubSubclass.config.locale == 'es_MX', SubSubclass.config.locale + ' is wrong!'); + test.ok(SubSubclass.config.test == 'worked', 'SubSubclass.config.test is set incorrectly'); + test.notEqual(jQuery.ajax, SubSubclass.ajax, 'The subsubclass failed to get all top level methods'); + + //This shows that the modifications to the SubSubClass did not bubble back up to it's superclass + test.ok(Subclass.topLevelMethod() === false, 'Subclass.topLevelMethod thought debug was true'); + test.ok(Subclass.config.locale == 'en_US', Subclass.config.locale + ' is wrong!'); + test.same(Subclass.config.test, undefined, 'Subclass.config.test is set incorrectly'); + test.same(Subclass(document).subSubClassMethod, undefined, 'subSubClassMethod set incorrectly'); + test.equal(jQuery.ajax, Subclass.ajax, 'The subclass failed to get all top level methods'); + test.done(); + }, + + "jQuery.sub() - .fn Methods": function(test){ + test.expect(378); + + var Subclass = jQuery.sub(), + SubclassSubclass = Subclass.sub(), + jQueryDocument = jQuery(document), + selectors, contexts, methods, method, arg, description; + + jQueryDocument.toString = function(){ return 'jQueryDocument'; }; + + Subclass.fn.subclassMethod = function(){}; + SubclassSubclass.fn.subclassSubclassMethod = function(){}; + + selectors = [ + 'body', + 'html, body', + '
    ' + ]; + + methods = [ // all methods that return a new jQuery instance + ['eq', 1], + ['add', document], + ['end'], + ['has'], + ['closest', 'div'], + ['filter', document], + ['find', 'div'] + ]; + + contexts = [undefined, document, jQueryDocument]; + + jQuery.each(selectors, function(i, selector){ + + jQuery.each(methods, function(){ + method = this[0]; + arg = this[1]; + + jQuery.each(contexts, function(i, context){ + + description = '("'+selector+'", '+context+').'+method+'('+(arg||'')+')'; + + test.same( + jQuery(selector, context)[method](arg).subclassMethod, undefined, + 'jQuery'+description+' doesnt have Subclass methods' + ); + test.same( + jQuery(selector, context)[method](arg).subclassSubclassMethod, undefined, + 'jQuery'+description+' doesnt have SubclassSubclass methods' + ); + test.same( + Subclass(selector, context)[method](arg).subclassMethod, Subclass.fn.subclassMethod, + 'Subclass'+description+' has Subclass methods' + ); + test.same( + Subclass(selector, context)[method](arg).subclassSubclassMethod, undefined, + 'Subclass'+description+' doesnt have SubclassSubclass methods' + ); + test.same( + SubclassSubclass(selector, context)[method](arg).subclassMethod, Subclass.fn.subclassMethod, + 'SubclassSubclass'+description+' has Subclass methods' + ); + test.same( + SubclassSubclass(selector, context)[method](arg).subclassSubclassMethod, SubclassSubclass.fn.subclassSubclassMethod, + 'SubclassSubclass'+description+' has SubclassSubclass methods' + ); + + }); + }); + }); + test.done(); + } +}); + diff --git a/node_modules/jQuery/test/css.js b/node_modules/jQuery/test/css.js new file mode 100755 index 0000000..e72bb59 --- /dev/null +++ b/node_modules/jQuery/test/css.js @@ -0,0 +1,124 @@ +var testCase = require('nodeunit').testCase, +static_document = require('fs').readFileSync('test/fixtures/css.html', 'utf8'); + +// need to be global as helpers access these variables +window = document = jQuery = $ = null; + +var helpers = require('./helpers/helper'), +q = helpers.query_ids; + +module.exports = testCase({ + setUp: function (callback) { + jQuery = $ = helpers.recreate_doc(static_document); + callback(); + }, + tearDown: function (callback) { + // clean up + callback(); + }, + "css(String|Hash)": function(test) { + test.expect(18); + + //test.equals( jQuery('#main').css("display"), 'block', 'Check for css property "display"'); + + test.ok( jQuery('#nothiddendiv').is(':visible'), 'Modifying CSS display: Assert element is visible'); + jQuery('#nothiddendiv').css({display: 'none'}); + test.ok( !jQuery('#nothiddendiv').is(':visible'), 'Modified CSS display: Assert element is hidden'); + jQuery('#nothiddendiv').css({display: 'block'}); + test.ok( jQuery('#nothiddendiv').is(':visible'), 'Modified CSS display: Assert element is visible'); + + var div = jQuery( "
    " ); + + // These should be "auto" (or some better value) + // temporarily provide "0px" for backwards compat + test.equals( div.css("width"), "0px", "Width on disconnected node." ); + test.equals( div.css("height"), "0px", "Height on disconnected node." ); + + div.css({ width: 4, height: 4 }); + + test.equals( div.css("width"), "4px", "Width on disconnected node." ); + test.equals( div.css("height"), "4px", "Height on disconnected node." ); + + var div2 = jQuery( "