diff --git a/.gitattributes b/.gitattributes index 3f8df7974916d473ae5a7a1de686bc7a5154e93d..ad48f7737be6e7f66912e10e133a93d85063076c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -44,3 +44,5 @@ assets/night2day_results.jpg filter=lfs diff=lfs merge=lfs -text assets/rainy2clear.jpg filter=lfs diff=lfs merge=lfs -text assets/teaser_results.jpg filter=lfs diff=lfs merge=lfs -text triton-2.1.0-cp310-cp310-win_amd64.whl filter=lfs diff=lfs merge=lfs -text +DISPLAYER/Displayer.app/Adobe[[:space:]]AIR/Versions/1.0/Adobe[[:space:]]AIR.dll filter=lfs diff=lfs merge=lfs -text +Displayer.app/Adobe[[:space:]]AIR/Versions/1.0/Adobe[[:space:]]AIR.dll filter=lfs diff=lfs merge=lfs -text diff --git a/DISPLAYER/Displayer-app.xml b/DISPLAYER/Displayer-app.xml new file mode 100644 index 0000000000000000000000000000000000000000..f221ffda754d5c945c31ad202e8dc7bb835fdca0 --- /dev/null +++ b/DISPLAYER/Displayer-app.xml @@ -0,0 +1,38 @@ + + + + Displayer + 1.0 + Displayer + + Displayer + + + Displayer.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Adobe AIR.dll b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Adobe AIR.dll new file mode 100644 index 0000000000000000000000000000000000000000..91b9ef4e38e0fa4ba625434731e2cacdb2d9b49b --- /dev/null +++ b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Adobe AIR.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a819617159ddc7aab0c1c495ec3a7baf7ebb8715e382a63745cffdb366429d48 +size 15256032 diff --git a/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Adobe AIR.vch b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Adobe AIR.vch new file mode 100644 index 0000000000000000000000000000000000000000..d6960cf2934b6167d8ab893d32e4f2163987e58b Binary files /dev/null and b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Adobe AIR.vch differ diff --git a/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/CaptiveAppEntry.exe b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/CaptiveAppEntry.exe new file mode 100644 index 0000000000000000000000000000000000000000..8506e8b468c7921fe08dc49e4268f21332ebbe57 Binary files /dev/null and b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/CaptiveAppEntry.exe differ diff --git a/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..4a48a8429a389c277b66e449b77b1acbb1c04a82 --- /dev/null +++ b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING @@ -0,0 +1,33 @@ +Cairo is free software. + +Every source file in the implementation[*] of cairo is available to be +redistributed and/or modified under the terms of either the GNU Lesser +General Public License (LGPL) version 2.1 or the Mozilla Public +License (MPL) version 1.1. Some files are available under more +liberal terms, but we believe that in all cases, each file may be used +under either the LGPL or the MPL. + +See the following files in this directory for the precise terms and +conditions of either license: + + COPYING-LGPL-2.1 + COPYING-MPL-1.1 + +Please see each file in the implementation for copyright and licensing +information, (in the opening comment of each file). + +[*] The implementation of cairo is contained entirely within the "src" +directory of the cairo source distribution. There are other components +of the cairo source distribution (such as the "test", "util", and "perf") +that are auxiliary to the library itself. None of the source code in these +directories contributes to a build of the cairo library itself, (libcairo.so +or cairo.dll or similar). + +These auxiliary components are also free software, but may be under +different license terms than cairo itself. For example, most of the +test cases in the perf and test directories are made available under +an MIT license to simplify any use of this code for reference purposes +in using cairo itself. Other files might be available under the GNU +General Public License (GPL), for example. Again, please see the COPYING +file under each directory and the opening comment of each file for copyright +and licensing information. diff --git a/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-LGPL-2.1 b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-LGPL-2.1 new file mode 100644 index 0000000000000000000000000000000000000000..d662ac4d2e707003e523fabc3f4cc533a5b58ed7 --- /dev/null +++ b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-LGPL-2.1 @@ -0,0 +1,510 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +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 this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey 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 library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-MPL-1.1 b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-MPL-1.1 new file mode 100644 index 0000000000000000000000000000000000000000..7a45bfe8af201f43828fab9ffe9eedc4463fd1a2 --- /dev/null +++ b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-MPL-1.1 @@ -0,0 +1,470 @@ + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + diff --git a/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pcre2/COPYING b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pcre2/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..efea21f6ef17cda81b0ad208f0bc0666215b6422 --- /dev/null +++ b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pcre2/COPYING @@ -0,0 +1,5 @@ +PCRE2 LICENCE + +Please see the file LICENCE in the PCRE2 distribution for licensing details. + +End diff --git a/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pixman/COPYING b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pixman/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..11b022bc2752f52c0b056be1993d1f67ebfbc656 --- /dev/null +++ b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pixman/COPYING @@ -0,0 +1,42 @@ +The following is the MIT license, agreed upon by most contributors. +Copyright holders of new code should use this license statement where +possible. They may also add themselves to the list below. + +/* + * Copyright 1987, 1988, 1989, 1998 The Open Group + * Copyright 1987, 1988, 1989 Digital Equipment Corporation + * Copyright 1999, 2004, 2008 Keith Packard + * Copyright 2000 SuSE, Inc. + * Copyright 2000 Keith Packard, member of The XFree86 Project, Inc. + * Copyright 2004, 2005, 2007, 2008, 2009, 2010 Red Hat, Inc. + * Copyright 2004 Nicholas Miell + * Copyright 2005 Lars Knoll & Zack Rusin, Trolltech + * Copyright 2005 Trolltech AS + * Copyright 2007 Luca Barbato + * Copyright 2008 Aaron Plattner, NVIDIA Corporation + * Copyright 2008 Rodrigo Kumpera + * Copyright 2008 AndrĂ© Tupinambá + * Copyright 2008 Mozilla Corporation + * Copyright 2008 Frederic Plourde + * Copyright 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright 2009, 2010 Nokia Corporation + * + * 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 (including the next + * paragraph) 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/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/adobecp.vch b/DISPLAYER/Displayer.app/Adobe AIR/Versions/1.0/Resources/adobecp.vch new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/DISPLAYER/Displayer.app/Displayer.exe b/DISPLAYER/Displayer.app/Displayer.exe new file mode 100644 index 0000000000000000000000000000000000000000..d7347f3426ea4489c291db69fb946e878f84d465 Binary files /dev/null and b/DISPLAYER/Displayer.app/Displayer.exe differ diff --git a/DISPLAYER/Displayer.app/Displayer.swf b/DISPLAYER/Displayer.app/Displayer.swf new file mode 100644 index 0000000000000000000000000000000000000000..f52f798d5c6180703d543ad0a6e9236826680b9f Binary files /dev/null and b/DISPLAYER/Displayer.app/Displayer.swf differ diff --git a/DISPLAYER/Displayer.app/META-INF/AIR/application.xml b/DISPLAYER/Displayer.app/META-INF/AIR/application.xml new file mode 100644 index 0000000000000000000000000000000000000000..f221ffda754d5c945c31ad202e8dc7bb835fdca0 --- /dev/null +++ b/DISPLAYER/Displayer.app/META-INF/AIR/application.xml @@ -0,0 +1,38 @@ + + + + Displayer + 1.0 + Displayer + + Displayer + + + Displayer.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/DISPLAYER/Displayer.app/META-INF/AIR/hash b/DISPLAYER/Displayer.app/META-INF/AIR/hash new file mode 100644 index 0000000000000000000000000000000000000000..547d6fdedd359ff7c2d6a8b15eb3903e3a2c2b19 --- /dev/null +++ b/DISPLAYER/Displayer.app/META-INF/AIR/hash @@ -0,0 +1 @@ +*“xŠ\4—b‹?Ęϱm˙÷łDż˙R›V± \ No newline at end of file diff --git a/DISPLAYER/Displayer.app/META-INF/signatures.xml b/DISPLAYER/Displayer.app/META-INF/signatures.xml new file mode 100644 index 0000000000000000000000000000000000000000..6b04b11e38392f6ae083773cfa776c092d5c9b49 --- /dev/null +++ b/DISPLAYER/Displayer.app/META-INF/signatures.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + 8JU2vTHQXxN+oG7ajfcPThFxZw+4HaE/W1R701X0HmI= + + + Mh+++p7/aMCK6BDStU/uDfzIIDCkrRNIXilx77yZefzun3+wxjcDJgw5HQWfNe0HU+WzOBQTaVQE +g+hg36BRV5Nnt1r+aMuFnJ1VPck6oBR4zjcyhUa2flUHa5iki1hXXSYO+451XDXwsE8cWri4V7bj +cHw573SbPOUZsQ3VeQ1mw4WAlrKVPX4nE9sBQXqXmLqk73sFIxalKI9LnjGeHFsOWjbgauqnNF7r +kE4ANsyRAkwK8ypWeuvY9T6Yi4pL/K4q7uSi81xFwv6Cmdj9/f00N1JukBrnkIRM87sx53F3+Pse +7ahqlLuuGXazzSzZ7MaQS0xLqePgOQXkR+z2ng== + + + MIIDNTCCAh2gAwIBAgIYODVmMDU4OjE4Zjg4NzgxZDQ2Oi04MDAwMA0GCSqGSIb3DQEBCwUAMEYx +CzAJBgNVBAYTAlVTMREwDwYDVQQKEwhJbm1lbnRhbDERMA8GA1UECxMISW5tZW50YWwxETAPBgNV +BAMTCElubWVudGFsMB4XDTI0MDUxNjIxMzIwNFoXDTQ5MDUxNzIxMzIwNFowRjELMAkGA1UEBhMC +VVMxETAPBgNVBAoTCElubWVudGFsMREwDwYDVQQLEwhJbm1lbnRhbDERMA8GA1UEAxMISW5tZW50 +YWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCd5NZFzGtSp1bMuO9F96YKJdl92UnG +oBj8cj2rZsjMMyK+lcoiy4oWDFsqSLJoouJ3fRd1Gi56tqPlUyLSOfvGUbJk9IAh49KJYIdIqX18 +GYq+FAlXS4zxvTs1rSQPly7eE495zYrW9CkVfSIl7BrNdQOPDoAg2JO2QhucUHom4fpd3amuitxD +4QISGrzurLW6WHK5zFAnCKeO/CErOT0VV25SplRU/tr9xf9bQf0QEiS9hbuW1ZJh1P5MN9I3YUoV +70gdFghnlgpsvmiA5j0zZdEFvj24+88o0FgL9gpZOsz/ezSRKC130GoNX0GNWIQLTgSAlWmfC/Yb +y5Ec2z7BAgMBAAGjFzAVMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBCwUAA4IBAQCK +BcC/oA6as+QAJCzq5GeQxBnmfdlcPtOmfnIDv2yHpUw2gWnK0T9mH5XRfZsPb3y0l8EGTglMVm/S +gKrj6/HaS+d7Rvth8NNh4PmB1n5Tr2hh0ZdiK25Ph/Tc4GGk03j1FLcfy/Hanm137y1A2DpVdpch +YZs2LNorpdcqqjSgV4kHuMHtr5oL3fhD5Pgajoiy26vnslXsEjqqBgiwuc+3thN/rPWhQU2sLnzZ +Batun4MoatD0BGXT/VtJAYG8fJvQPyhNLrM8eXITl2/tkBHk3Mpd7ZMSe9WJbhLhp71OdK85XXo1 +tRZggoqrlXN+3CJipLneIVlisSwqE4yB6hHs + + + + + iukCSL+g97J7EboaWUezqKdwUou3wnQCYx8+27b24Bg=b2hRKplC0bw3Cp0DaigsxuOcCGsL1RRnkYUxZ/hQOMY=DHqY+sRs8drd4UUTYbab/OJkPSajd5CrU8r49eur8bE=0/oCb84THKMagtI0Dy0KogEu92TegdesqRr/clXct1c= + + + + + + + + + + + + + MIIOEwYJKoZIhvcNAQcCoIIOBDCCDgACAQMxDTALBglghkgBZQMEAgEwgf4GCyqGSIb3DQEJEAEE +oIHuBIHrMIHoAgEBBgtghkgBhvhFAQcXAzAhMAkGBSsOAwIaBQAEFJo2K9rurjIHaAT9QMO+qs4h +kp8dAhQhfTO+0bRYfMJ9WP0qlqG5X2d3WRgPMjAyNDA4MTQxNzI5MDNaMAMCAR6ggYakgYMwgYAx +CzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3lt +YW50ZWMgVHJ1c3QgTmV0d29yazExMC8GA1UEAxMoU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGlu +ZyBTaWduZXIgLSBHM6CCCoswggU4MIIEIKADAgECAhB7BbHUSWhRRPfJidKcGZ0SMA0GCSqGSIb3 +DQEBCwUAMIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsT +FlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE2MDExMjAwMDAwMFoXDTMxMDExMTIzNTk1 +OVowdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQL +ExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9TeW1hbnRlYyBTSEEyNTYgVGltZVN0 +YW1waW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1mdWVVPnYxyXRqBoutV +87ABrTxxrDKPBWuGmicAMpdqTclkFEspu8LZKbku7GOz4c8/C1aQ+GIbfuumB+Lef15tQDjUkQbn +QXx5HMvLrRu/2JWR8/DubPitljkuf8EnuHg5xYSl7e2vh47Ojcdt6tKYtTofHjmdw/SaqPSE4cTR +fHHGBim0P+SDDSbDewg+TfkKtzNJ/8o71PWym0vhiJka9cDpMxTW38eA25Hu/rySV3J39M2ozP4J +9ZM3vpWIasXc9LFL1M7oCZFftYR5NYp4rBkyjyPBMkEbWQ6pPrHM+dYr77fY5NUdbRE6kvaTyZzj +SO67Uw7UNpeGeMWhNwIDAQABo4IBdzCCAXMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYB +Af8CAQAwZgYDVR0gBF8wXTBbBgtghkgBhvhFAQcXAzBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Qu +c3ltY2IuY29tL2NwczAlBggrBgEFBQcCAjAZGhdodHRwczovL2Quc3ltY2IuY29tL3JwYTAuBggr +BgEFBQcBAQQiMCAwHgYIKwYBBQUHMAGGEmh0dHA6Ly9zLnN5bWNkLmNvbTA2BgNVHR8ELzAtMCug +KaAnhiVodHRwOi8vcy5zeW1jYi5jb20vdW5pdmVyc2FsLXJvb3QuY3JsMBMGA1UdJQQMMAoGCCsG +AQUFBwMIMCgGA1UdEQQhMB+kHTAbMRkwFwYDVQQDExBUaW1lU3RhbXAtMjA0OC0zMB0GA1UdDgQW +BBSvY9bKo06FcuCnvEHzKaI4f4B1YjAfBgNVHSMEGDAWgBS2d/ppSEefUxLVwuoHMnYH0ZcHGTAN +BgkqhkiG9w0BAQsFAAOCAQEAdeqwLdU0GVwyRf4O4dRPpnjBb9fq3dxP86HIgYj3p48V5kApreZd +9KLZVmSEcTAq3R5hF2YgVgaYGY1dcfL4l7wJ/RyRR8ni6I0D+8yQL9YKbE4z7Na0k8hMkGNIOUAh +xN3WbomYPLWYl+ipBrcJyY9TV0GQL+EeTU7cyhB4bEJu8LbF+GFcUvVO9muN90p6vvPN/QPX2fYD +qA/jU/cKdezGdS6qZoUEmbf4Blfhxg726K/a7JsYH6q54zoAv86KlMsB257HOLsPUqvR45QDYApN +oP4nbRQy/D+XQOG/mYnb5DkUvdrk08PqK1qzlVhVBH3HmuwjA42FKtL/rqlhgTCCBUswggQzoAMC +AQICEHvU5a+6zAc/oQEjBCJBTRIwDQYJKoZIhvcNAQELBQAwdzELMAkGA1UEBhMCVVMxHTAbBgNV +BAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3Jr +MSgwJgYDVQQDEx9TeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBMB4XDTE3MTIyMzAwMDAw +MFoXDTI5MDMyMjIzNTk1OVowgYAxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazExMC8GA1UEAxMoU3ltYW50 +ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBTaWduZXIgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAK8Oiqr43L9pe1QXcUcJvY08gfh0FXdnkJz93k4Cnkt29uU2PmXVJCBtMPndHYPp +PydKM05tForkjUCNIqq+pwsb0ge2PLUaJCj4G3JRPcgJiCYIOvn6QyN1R3AMs19bjwgdckhXZU2v +AjxA9/TdMjiTP+UspvNZI8uA3hNN+RDJqgoYbFVhV9HxAizEtavybCPSnw0PGWythWJp/U6FwYpS +Matb2Ml0UuNXbCK/VX9vygarP0q3InZl7Ow28paVgSYs/buYqgE4068lQJsJU/ApV4VYXuqFSEEh +h+XetNMmsntAU1h5jlIxBk2UA0XEzjwD7LcA8joixbRv5e+wipsCAwEAAaOCAccwggHDMAwGA1Ud +EwEB/wQCMAAwZgYDVR0gBF8wXTBbBgtghkgBhvhFAQcXAzBMMCMGCCsGAQUFBwIBFhdodHRwczov +L2Quc3ltY2IuY29tL2NwczAlBggrBgEFBQcCAjAZGhdodHRwczovL2Quc3ltY2IuY29tL3JwYTBA +BgNVHR8EOTA3MDWgM6Axhi9odHRwOi8vdHMtY3JsLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNz +LWNhLmNybDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4AwdwYIKwYBBQUH +AQEEazBpMCoGCCsGAQUFBzABhh5odHRwOi8vdHMtb2NzcC53cy5zeW1hbnRlYy5jb20wOwYIKwYB +BQUHMAKGL2h0dHA6Ly90cy1haWEud3Muc3ltYW50ZWMuY29tL3NoYTI1Ni10c3MtY2EuY2VyMCgG +A1UdEQQhMB+kHTAbMRkwFwYDVQQDExBUaW1lU3RhbXAtMjA0OC02MB0GA1UdDgQWBBSlEwGpn4XM +G24WHl87Map5NgB7HTAfBgNVHSMEGDAWgBSvY9bKo06FcuCnvEHzKaI4f4B1YjANBgkqhkiG9w0B +AQsFAAOCAQEARp6v8LiiX6KZSM+oJ0shzbK5pnJwYy/jVSl7OUZO535lBliLvFeKkg0I2BC6NiT6 +Cnv7O9Niv0qUFeaC24pUbf8o/mfPcT/mMwnZolkQ9B5K/mXM3tRr41IpdQBKK6XMy5voqU33tBdZ +kkHDtz+G5vbAf0Q8RlwXWuOkO9VpJtUhfeGAZ35irLdOLhWa5Zwjr1sR6nGpQfkNeTipoQ3PtLHa +Ppp6xyLFdM3fRwmGxPyRJbIblumFCOjd6nRgbmClVnoNyERY3Ob5SBSe5b/eAL13sZgUchQk38cR +LB8AP8NLFMZnHMweBqOQX1xUiz7jM1uCD8W3hgJOcZ/pZkU/djGCAlowggJWAgEBMIGLMHcxCzAJ +BgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50 +ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBD +QQIQe9Tlr7rMBz+hASMEIkFNEjALBglghkgBZQMEAgGggaQwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3 +DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MTQxNzI5MDNaMC8GCSqGSIb3DQEJBDEiBCBf4Q1o +ml1a1/pJWAt7zhA6V0XBdEYe4uY/cHls7QwUOTA3BgsqhkiG9w0BCRACLzEoMCYwJDAiBCDEdM52 +AH0COU4NpeTefBTGgPniggE8/vZT7123H99h+DALBgkqhkiG9w0BAQEEggEAC1vvkBB4O8KBEkyE +jlHgNSBFq+GUENZsNLC6vdM+elXtDcMffPOeCAR7SI+iAObHinCFrfoG33dp1vIJqr4CT1vzDgHg +9i4HLoja/57MpjkvWplCqzgfyFXoeIqwv4cdjKzLlGRk+3Vtq3OBbiF/yuR1ADsmb0y2Km/vdZ7E +SDwUABFwQeD0dUdvm6XHpK8/Y74xHPjuLJIPe65ZuwuzsJsw2IpzG9xjlBPl8JtGNMMvZrItLG3t +Jbw9rW0m1o5wlguxOFzgaXW10RIOmffnR2lcfMVfdokPtpFNoRcesqxDBpBM7hFRTyiRHeG1StiF +K4462jFHhxW0RZ9t2mAgeg== + + + + + + + + + diff --git a/DISPLAYER/Displayer.app/config.json b/DISPLAYER/Displayer.app/config.json new file mode 100644 index 0000000000000000000000000000000000000000..d1f73affeb1cd3b24989b799eb2e6313b988690c --- /dev/null +++ b/DISPLAYER/Displayer.app/config.json @@ -0,0 +1,11 @@ +{ + "api_url": "http://127.0.0.1:5000", + "size": { + "width": 1920, + "height": 1080 + }, + "position": { + "x": 0, + "y": 0 + } +} \ No newline at end of file diff --git a/DISPLAYER/Displayer.app/mimetype b/DISPLAYER/Displayer.app/mimetype new file mode 100644 index 0000000000000000000000000000000000000000..21b11172b61468d7f335c8c7eef6d537f68b8f9e --- /dev/null +++ b/DISPLAYER/Displayer.app/mimetype @@ -0,0 +1 @@ +application/vnd.adobe.air-application-installer-package+zip \ No newline at end of file diff --git a/DISPLAYER/Displayer.fla b/DISPLAYER/Displayer.fla new file mode 100644 index 0000000000000000000000000000000000000000..038025ce91ff2830b04232c1fd75e16104addaf7 Binary files /dev/null and b/DISPLAYER/Displayer.fla differ diff --git a/DISPLAYER/Displayer.swf b/DISPLAYER/Displayer.swf new file mode 100644 index 0000000000000000000000000000000000000000..f52f798d5c6180703d543ad0a6e9236826680b9f Binary files /dev/null and b/DISPLAYER/Displayer.swf differ diff --git a/DISPLAYER/FullScreenImageLoader.as b/DISPLAYER/FullScreenImageLoader.as new file mode 100644 index 0000000000000000000000000000000000000000..01af9893bad12a15ade967cf06e370a73005bc47 --- /dev/null +++ b/DISPLAYER/FullScreenImageLoader.as @@ -0,0 +1,149 @@ + package { + import flash.display.*; + import flash.events.*; + import flash.net.*; + import flash.utils.*; + import flash.text.*; + import com.adobe.images.PNGEncoder; + import com.adobe.crypto.MD5; + import com.sociodox.utils.Base64; + import flash.filesystem.File; + import flash.filesystem.FileStream; + import flash.filesystem.FileMode; + + public class FullScreenImageLoader extends Sprite { + private var apiUrl:String; + private var imageWidth:int; + private var imageHeight:int; + private var imageX:int; + private var imageY:int; + private var refreshInterval:int = 2000; // Refresh every 2 seconds + private var timer:Timer; + private var bitmap:Bitmap; + private var currentChecksum:String = ""; // Store the checksum of the currently displayed image + private var errorMessage:TextField; + + public function FullScreenImageLoader() { + stage.scaleMode = StageScaleMode.NO_SCALE; + stage.align = StageAlign.TOP_LEFT; + stage.displayState = StageDisplayState.FULL_SCREEN; + + // Load configuration from JSON file + loadConfig(); + + bitmap = new Bitmap(); + addChild(bitmap); + + // Set up the timer to refresh the image + timer = new Timer(refreshInterval); + timer.addEventListener(TimerEvent.TIMER, onTimer); + timer.start(); + + // Create an error message text field for display + errorMessage = new TextField(); + errorMessage.defaultTextFormat = new TextFormat("Arial", 20, 0xFF0000); + errorMessage.width = stage.stageWidth; + errorMessage.height = 50; + errorMessage.y = stage.stageHeight - 50; + errorMessage.selectable = false; + addChild(errorMessage); + + // Initial load + loadImage(); + } + + private function loadConfig():void { + var configFile:File = File.applicationDirectory.resolvePath("config.json"); + if (configFile.exists) { + var fileStream:FileStream = new FileStream(); + fileStream.open(configFile, FileMode.READ); + var configData:String = fileStream.readUTFBytes(fileStream.bytesAvailable); + fileStream.close(); + + var config:Object = JSON.parse(configData); + apiUrl = config.api_url; + imageWidth = config.size.width; + imageHeight = config.size.height; + imageX = config.position.x; + imageY = config.position.y; + + trace("Configuration loaded: ", apiUrl, imageWidth, imageHeight, imageX, imageY); + } else { + trace("Config file not found: config.json"); + errorMessage.text = "Config file not found: config.json"; + } + } + + private function onTimer(event:TimerEvent):void { + loadImage(); + } + + private function loadImage():void { + var request:URLRequest = new URLRequest(apiUrl + "/get_status"); + var loader:URLLoader = new URLLoader(); + loader.dataFormat = URLLoaderDataFormat.TEXT; + loader.addEventListener(Event.COMPLETE, onImageLoadComplete); + loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError); + loader.load(request); + } + + private function onImageLoadComplete(event:Event):void { + var loader:URLLoader = URLLoader(event.target); + try { + var response:Object = JSON.parse(loader.data); + + if (response.hasOwnProperty("checksum")) { + var newChecksum:String = response.checksum; + + // Compare checksums, if different, update the image + if (newChecksum != currentChecksum) { + currentChecksum = newChecksum; + + if (response.hasOwnProperty("image_base64") && response.image_base64 != "") { + displayNewImage(response.image_base64); + } else { + trace("No image data found."); + errorMessage.text = "No image data found."; + } + } + } else { + trace("Invalid response from server."); + errorMessage.text = "Invalid response from server."; + } + } catch (error:Error) { + trace("Error parsing response: " + error.message); + errorMessage.text = "Error parsing response: " + error.message; + } + } + + private function displayNewImage(base64Image:String):void { + try { + var byteArray:ByteArray = Base64.decode(base64Image); + var loader:Loader = new Loader(); + loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageDecoded); + loader.loadBytes(byteArray); + } catch (error:Error) { + trace("Error decoding image: " + error.message); + errorMessage.text = "Error decoding image: " + error.message; + } + } + + private function onImageDecoded(event:Event):void { + var loader:Loader = Loader(event.target.loader); + var bitmapData:BitmapData = Bitmap(loader.content).bitmapData; + + // Update the display + bitmap.bitmapData = bitmapData; + bitmap.width = imageWidth; + bitmap.height = imageHeight; + bitmap.x = imageX; + bitmap.y = imageY; + bitmap.smoothing = true; + } + + private function onIOError(event:IOErrorEvent):void { + trace("Error loading image: " + event.text); + errorMessage.text = "Error loading image: " + event.text; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/Main.as b/DISPLAYER/Main.as new file mode 100644 index 0000000000000000000000000000000000000000..5f282702bb03ef11d7184d19c80927b47f919764 --- /dev/null +++ b/DISPLAYER/Main.as @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/DISPLAYER/com/adobe/air/crypto/EncryptionKeyGenerator.as b/DISPLAYER/com/adobe/air/crypto/EncryptionKeyGenerator.as new file mode 100644 index 0000000000000000000000000000000000000000..09a90d733f9bb0adb38c29acdb5b65c2dbb55dd8 --- /dev/null +++ b/DISPLAYER/com/adobe/air/crypto/EncryptionKeyGenerator.as @@ -0,0 +1,313 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.air.crypto +{ + import com.adobe.crypto.SHA256; + + import flash.data.EncryptedLocalStore; + import flash.utils.ByteArray; + + /** + * The EncryptionKeyGenerator class generates an encryption key value, such as you would use + * to encrypt files or data. For example, the encryption key is suitable to use as + * an encryption key for an encrypted AIR local SQL (SQLite) database. + * + *

This class uses techniques and algorithms that are designed for maximum + * data privacy and security. Use this class to generate an encryption key if your + * application requires data to be encrypted on a per-user level (in other words, + * if only one user of the application should be able to access his or her data). + * In some situations you may also want to use per-user encryption for data even + * if the application design specifies that other users can access the data. For more + * information, see + * "Considerations for using encryption with a database" + * in the guide + * "Developing Adobe AIR Applications with Flex."

+ * + *

The generated encryption key is based on a password that you provide. For any given + * password, in the same AIR application + * running in the same user account on the same machine, the encryption key result is + * the same.

+ * + *

To generate an encryption key from a password, use the getEncryptionKey() + * method. To confirm that a password is a "strong" password before calling the + * getEncryptionKey() method, use the validateStrongPassword() + * method.

+ * + *

In addition, the EncryptionKeyGenerator includes a utility constant, + * ENCRYPTED_DB_PASSWORD_ERROR_ID. This constant matches the error ID of + * the SQLError error that occurs when code that is attempting to open an encrypted database + * provides the wrong encryption key.

+ * + *

This class is designed to create an encryption key suitable for providing the highest + * level of data privacy and security. In order to achieve that level of security, a few + * security principles must be followed:

+ * + *
    + *
  • Your application should never store the user-entered password
  • + *
  • Your application should never store the encryption key returned by the + * getEncryptionKey() method.
  • + *
  • Instead, each time the user runs the application and attempts to access the database, + * your application code should call the getEncryptionKey() method to + * regenerate the encryption key.
  • + *
+ * + *

For more information about data security, and an explanation of the security techniques + * used in the EncryptionKeyGenerator class, see + * "Example: Generating and using an encryption key" + * in the guide + * "Developing Adobe AIR Applications with Flex."

+ */ + public class EncryptionKeyGenerator + { + // ------- Constants ------- + /** + * This constant matches the error ID (3138) of the SQLError error that occurs when + * code that is attempting to open an encrypted database provides the wrong + * encryption key. + */ + public static const ENCRYPTED_DB_PASSWORD_ERROR_ID:uint = 3138; + + private static const STRONG_PASSWORD_PATTERN:RegExp = /(?=^.{8,32}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/; + private static const SALT_ELS_KEY:String = "com.adobe.air.crypto::EncryptedDBSalt$$$"; + + + // ------- Constructor ------- + + /** + * Creates a new EncryptionKeyGenerator instance. + */ + public function EncryptionKeyGenerator() {} + + + // ------- Public methods ------- + + /** + * Checks a password and returns a value indicating whether the password is a "strong" + * password. The criteria for a strong password are: + * + *
    + *
  • Minimum 8 characters
  • + *
  • Maxmium 32 characters
  • + *
  • Contains at least one lowercase letter
  • + *
  • Contains at least one uppercase letter
  • + *
  • Contains at least one number or symbol character
  • + *
+ * + * @param password The password to check + * + * @return A value indicating whether the password is a strong password (true) + * or not (false). + */ + public function validateStrongPassword(password:String):Boolean + { + if (password == null || password.length <= 0) + { + return false; + } + + return STRONG_PASSWORD_PATTERN.test(password); + } + + + /** + * Uses a password to generate a 16-byte encryption key. The return value is suitable + * to use as an encryption key for an encrypted AIR local SQL (SQLite) database. + * + *

For any given + * password, calling the getEncryptionKey() method from the same AIR application + * running in the same user account on the same machine, the encryption key result is + * the same.

+ * + *

This method is designed to create an encryption key suitable for providing the highest + * level of data privacy and security. In order to achieve that level of security, your + * application must follow several security principles:

+ * + *
    + *
  • Your application can never store the user-entered password
  • + *
  • Your application can never store the encryption key returned by the + * getEncryptionKey() method.
  • + *
  • Instead, each time the user runs the application and attempts to access the database, + * call the getEncryptionKey() method to regenerate the encryption key.
  • + *
+ * + *

For more information about data security, and an explanation of the security techniques + * used in the EncryptionKeyGenerator class, see + * "Example: Generating and using an encryption key" + * in the guide + * "Developing Adobe AIR Applications with Flex."

+ * + * @param password The password to use to generate the encryption key. + * @param overrideSaltELSKey The EncryptionKeyGenerator creates and stores a random value + * (known as a salt) as part of the process of + * generating the encryption key. The first time an application + * calls the getEncryptionKey() method, the salt + * value is created and stored in the AIR application's encrypted + * local store (ELS). From then on, the salt value is loaded from the + * ELS. + *

If you wish to provide a custom String ELS key for storing + * the salt value, specify a value for the overrideSaltELSKey + * parameter. If the parameter is null (the default) + * a default key name is used.

+ * + * @return The generated encryption key, a 16-byte ByteArray object. + * + * @throws ArgumentError If the specified password is not a "strong" password according to the + * criteria explained in the validateStrongPassword() + * method description + * + * @throws ArgumentError If a non-null value is specified for the overrideSaltELSKey + * parameter, and the value is an empty String ("") + */ + public function getEncryptionKey(password:String, overrideSaltELSKey:String=null):ByteArray + { + if (!validateStrongPassword(password)) + { + throw new ArgumentError("The password must be a strong password. It must be 8-32 characters long. It must contain at least one uppercase letter, at least one lowercase letter, and at least one number or symbol."); + } + + if (overrideSaltELSKey != null && overrideSaltELSKey.length <= 0) + { + throw new ArgumentError("If an overrideSaltELSKey parameter value is specified, it can't be an empty String."); + } + + var concatenatedPassword:String = concatenatePassword(password); + + var saltKey:String; + if (overrideSaltELSKey == null) + { + saltKey = SALT_ELS_KEY; + } + else + { + saltKey = overrideSaltELSKey; + } + + var salt:ByteArray = EncryptedLocalStore.getItem(saltKey); + if (salt == null) + { + salt = makeSalt(); + EncryptedLocalStore.setItem(saltKey, salt); + } + + var unhashedKey:ByteArray = xorBytes(concatenatedPassword, salt); + + var hashedKey:String = SHA256.hashBytes(unhashedKey); + + var encryptionKey:ByteArray = generateEncryptionKey(hashedKey); + + return encryptionKey; + } + + + // ------- Creating encryption key ------- + + private function concatenatePassword(pwd:String):String + { + var len:int = pwd.length; + var targetLength:int = 32; + + if (len == targetLength) + { + return pwd; + } + + var repetitions:int = Math.floor(targetLength / len); + var excess:int = targetLength % len; + + var result:String = ""; + + for (var i:uint = 0; i < repetitions; i++) + { + result += pwd; + } + + result += pwd.substr(0, excess); + + return result; + } + + + private function makeSalt():ByteArray + { + var result:ByteArray = new ByteArray; + + for (var i:uint = 0; i < 8; i++) + { + result.writeUnsignedInt(Math.round(Math.random() * uint.MAX_VALUE)); + } + + return result; + } + + + private function xorBytes(passwordString:String, salt:ByteArray):ByteArray + { + var result:ByteArray = new ByteArray(); + + for (var i:uint = 0; i < 32; i += 4) + { + // Extract 4 bytes from the password string and convert to a uint + var o1:uint = passwordString.charCodeAt(i) << 24; + o1 += passwordString.charCodeAt(i + 1) << 16; + o1 += passwordString.charCodeAt(i + 2) << 8; + o1 += passwordString.charCodeAt(i + 3); + + salt.position = i; + var o2:uint = salt.readUnsignedInt(); + + var xor:uint = o1 ^ o2; + result.writeUnsignedInt(xor); + } + + return result; + } + + + private function generateEncryptionKey(hash:String):ByteArray + { + var result:ByteArray = new ByteArray(); + + // select a range of 128 bits (32 hex characters) from the hash + // In this case, we'll use the bits starting from position 17 + for (var i:uint = 0; i < 32; i += 2) + { + var position:uint = i + 17; + var hex:String = hash.substr(position, 2); + var byte:int = parseInt(hex, 16); + result.writeByte(byte); + } + + return result; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/air/filesystem/FileMonitor.as b/DISPLAYER/com/adobe/air/filesystem/FileMonitor.as new file mode 100644 index 0000000000000000000000000000000000000000..207dfcc3125ef953e3106217d3c5c2358859eb69 --- /dev/null +++ b/DISPLAYER/com/adobe/air/filesystem/FileMonitor.as @@ -0,0 +1,245 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.air.filesystem +{ + import flash.filesystem.File; + import flash.utils.Timer; + import flash.events.TimerEvent; + import flash.events.Event; + import flash.events.EventDispatcher; + import com.adobe.air.filesystem.events.FileMonitorEvent; + + /* + Todo: + + -Cmonitor changes in multiple attributes + -add support for monitoring multiple files + */ + + /** + * Dispatched when the modified date of the file being modified changes. + * + * @eventType com.adobe.air.filesystem.events.FileMonitor.CHANGE + */ + [Event(name="CHANGE", type="com.adobe.air.filesystem.events.FileMonitor")] + + /** + * Dispatched when the file being monitored is moved or deleted. The file + * will be unwatched. + * + * @eventType com.adobe.air.filesystem.events.FileMonitor.MOVE + */ + [Event(name="MOVE", type="com.adobe.air.filesystem.events.FileMonitor")] + + /** + * Dispatched when the file being monitored is created. + * + * @eventType com.adobe.air.filesystem.events.FileMonitor.CREATE + */ + [Event(name="CREATE", type="com.adobe.air.filesystem.events.FileMonitor")] + + /** + * Class that monitors files for changes. + */ + public class FileMonitor extends EventDispatcher + { + private var _file:File; + private var timer:Timer; + public static const DEFAULT_MONITOR_INTERVAL:Number = 1000; + private var _interval:Number; + private var fileExists:Boolean = false; + + private var lastModifiedTime:Number; + + /** + * Constructor + * + * @parameter file The File that will be monitored for changes. + * + * @param interval How often in milliseconds the file is polled for + * change events. Default value is 1000, minimum value is 1000 + */ + public function FileMonitor(file:File = null, interval:Number = -1) + { + this.file = file; + + if(interval != -1) + { + if(interval < 1000) + { + _interval = 1000; + } + else + { + _interval = interval; + } + } + else + { + _interval = DEFAULT_MONITOR_INTERVAL; + } + } + + /** + * File being monitored for changes. + * + * Setting the property will result in unwatch() being called. + */ + public function get file():File + { + return _file; + } + + public function set file(file:File):void + { + if(timer && timer.running) + { + unwatch(); + } + + _file = file; + + if(!_file) + { + fileExists = false; + return; + } + + //note : this will throw an error if new File() is passed in. + fileExists = _file.exists; + if(fileExists) + { + lastModifiedTime = _file.modificationDate.getTime(); + } + + } + + /** + * How often the system is polled for Volume change events. + */ + public function get interval():Number + { + return _interval; + } + + /** + * Begins monitoring the specified file for changes. + * + * Broadcasts Event.CHANGE event when the file's modification date has changed. + */ + public function watch():void + { + if(!file) + { + //should we throw an error? + return; + } + + if(timer && timer.running) + { + return; + } + + //check and see if timer is active. if it is, return + if(!timer) + { + timer = new Timer(_interval); + timer.addEventListener(TimerEvent.TIMER, onTimerEvent, false, 0, true); + } + + timer.start(); + } + + /** + * Stops watching the specified file for changes. + */ + public function unwatch():void + { + if(!timer) + { + return; + } + + timer.stop(); + timer.removeEventListener(TimerEvent.TIMER, onTimerEvent); + } + + private function onTimerEvent(e:TimerEvent):void + { + var outEvent:FileMonitorEvent; + + if(fileExists != _file.exists) + { + if(_file.exists) + { + //file was created + outEvent = new FileMonitorEvent(FileMonitorEvent.CREATE); + lastModifiedTime = _file.modificationDate.getTime(); + } + else + { + //file was moved / deleted + outEvent = new FileMonitorEvent(FileMonitorEvent.MOVE); + unwatch(); + } + fileExists = _file.exists; + } + else + { + if(!_file.exists) + { + return; + } + + var modifiedTime:Number = _file.modificationDate.getTime(); + + if(modifiedTime == lastModifiedTime) + { + return; + } + + lastModifiedTime = modifiedTime; + + //file modified + outEvent = new FileMonitorEvent(FileMonitorEvent.CHANGE); + } + + if(outEvent) + { + outEvent.file = _file; + dispatchEvent(outEvent); + } + + } + } +} diff --git a/DISPLAYER/com/adobe/air/filesystem/FileUtil.as b/DISPLAYER/com/adobe/air/filesystem/FileUtil.as new file mode 100644 index 0000000000000000000000000000000000000000..33bf04df79162c2ba07f51675edaee878a81fa7f --- /dev/null +++ b/DISPLAYER/com/adobe/air/filesystem/FileUtil.as @@ -0,0 +1,63 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.air.filesystem +{ + import flash.system.Capabilities; + import flash.filesystem.File; + + + public class FileUtil + { + /** + * @return An Array of Files representing the root directories of the + * operating system. + */ + public static function getRootDirectories():Array + { + var v:Array = File.getRootDirectories(); + var os:String = Capabilities.os; + + if(os.indexOf("Mac") > -1) + { + v = File(v[0]).resolvePath("Volumes").getDirectoryListing(); + } + else if(os.indexOf("Linux") > -1) + { + //todo: need to impliment Linux + } + + return v; + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/air/filesystem/VolumeMonitor.as b/DISPLAYER/com/adobe/air/filesystem/VolumeMonitor.as new file mode 100644 index 0000000000000000000000000000000000000000..cbb5ad5ba2542ab88e982d15e324d9e665963180 --- /dev/null +++ b/DISPLAYER/com/adobe/air/filesystem/VolumeMonitor.as @@ -0,0 +1,184 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.air.filesystem +{ + import flash.events.EventDispatcher; + import flash.utils.Timer; + import flash.events.TimerEvent; + import flash.filesystem.File; + import flash.utils.Dictionary; + import com.adobe.air.filesystem.events.FileMonitorEvent; + import com.adobe.utils.ArrayUtil; + + /** + * Dispatched when a volume is added to the system. + * + * @eventType com.adobe.air.filesystem.events.FileMonitor.ADD_VOLUME + */ + [Event(name="ADD_VOLUME", type="com.adobe.air.filesystem.events.FileMonitor")] + + /** + * Dispatched when a volume is removed from the system. + * + * @eventType com.adobe.air.filesystem.events.FileMonitor.REMOVE_VOLUME + */ + [Event(name="REMOVE_VOLUME", type="com.adobe.air.filesystem.events.FileMonitor")] + + /** + * Class that monitors changes to the File volumes attached to the operating + * system. + */ + public class VolumeMonitor extends EventDispatcher + { + private var timer:Timer; + private var _interval:Number; + private static const DEFAULT_MONITOR_INTERVAL:Number = 2000; + + private var volumes:Dictionary; + + /** + * Constructor. + * + * @param interval How often in milliseconds the system is polled for + * volume change events. Default value is 2000, minimum value is 1000 + */ + public function VolumeMonitor(interval:Number = -1) + { + if(interval != -1) + { + if(interval < 1000) + { + _interval = 1000; + } + else + { + _interval = interval; + } + } + else + { + _interval = DEFAULT_MONITOR_INTERVAL; + } + } + + /** + * How often the system is polled for Volume change events. + */ + public function get interval():Number + { + return _interval; + } + + /** + * Begins the monitoring of changes to the attached File volumes. + */ + public function watch():void + { + if(!timer) + { + timer = new Timer(_interval); + timer.addEventListener(TimerEvent.TIMER, onTimerEvent,false,0, true); + } + + //we reinitialize the hash everytime we start watching + volumes = new Dictionary(); + + var v:Array = FileUtil.getRootDirectories(); + for each(var f:File in v) + { + //null or undefined + if(volumes[f.url] == null) + { + volumes[f.url] = f; + } + } + + timer.start(); + } + + /** + * Stops monitoring for changes to the attached File volumes. + */ + public function unwatch():void + { + timer.stop(); + timer.removeEventListener(TimerEvent.TIMER, onTimerEvent); + } + + private function onTimerEvent(e:TimerEvent):void + { + var v:Array = FileUtil.getRootDirectories(); + + var outEvent:FileMonitorEvent; + var found:Boolean = false; + for(var key:String in volumes) + { + for each(var f:File in v) + { + //trace("--\n" + key); + //trace(f.url); + if(f.url == key) + { + found = true; + break; + } + } + + if(!found) + { + outEvent = new FileMonitorEvent(FileMonitorEvent.REMOVE_VOLUME); + outEvent.file = volumes[key]; + dispatchEvent(outEvent); + delete volumes[key]; + } + + found = false; + } + + for each(var f2:File in v) + { + //null or undefined + if(volumes[f2.url] == null) + { + volumes[f2.url] = f2; + outEvent = new FileMonitorEvent(FileMonitorEvent.ADD_VOLUME); + outEvent.file = f2; + + dispatchEvent(outEvent); + } + } + } + + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/air/filesystem/events/FileMonitorEvent.as b/DISPLAYER/com/adobe/air/filesystem/events/FileMonitorEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..c995c7428473d847aa42d7af1d1132022ceae789 --- /dev/null +++ b/DISPLAYER/com/adobe/air/filesystem/events/FileMonitorEvent.as @@ -0,0 +1,61 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.air.filesystem.events +{ + import flash.events.Event; + import flash.filesystem.File; + + public class FileMonitorEvent extends Event + { + public static const CHANGE:String = "onFileChange"; + public static const MOVE:String = "onFileMove"; + public static const CREATE:String = "onFileCreate"; + public static const ADD_VOLUME:String = "onVolumeAdd"; + public static const REMOVE_VOLUME:String = "onVolumeRemove"; + + public var file:File; + public function FileMonitorEvent(type:String, bubbles:Boolean=false, + cancelable:Boolean=false) + { + super(type, bubbles, cancelable); + } + + public override function clone():Event + { + var out:FileMonitorEvent = new FileMonitorEvent(type, bubbles, cancelable); + out.file = file; + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/air/logging/FileTarget.as b/DISPLAYER/com/adobe/air/logging/FileTarget.as new file mode 100644 index 0000000000000000000000000000000000000000..3ed69fa4324e22769cceb3f370f0442867148f04 --- /dev/null +++ b/DISPLAYER/com/adobe/air/logging/FileTarget.as @@ -0,0 +1,95 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.air.logging +{ + import flash.filesystem.File; + import flash.filesystem.FileMode; + import flash.filesystem.FileStream; + + import mx.core.mx_internal; + import mx.logging.targets.LineFormattedTarget; + + use namespace mx_internal; + + /** + * An Adobe AIR only class that provides a log target for the Flex logging + * framework, that logs files to a file on the user's system. + * + * This class will only work when running within Adobe AIR> + */ + public class FileTarget extends LineFormattedTarget + { + private const DEFAULT_LOG_PATH:String = "app-storage:/application.log"; + + private var log:File; + + public function FileTarget(logFile:File = null) + { + if(logFile != null) + { + log = logFile; + } + else + { + log = new File(DEFAULT_LOG_PATH); + } + } + + public function get logURI():String + { + return log.url; + } + + mx_internal override function internalLog(message:String):void + { + write(message); + } + + private function write(msg:String):void + { + var fs:FileStream = new FileStream(); + fs.open(log, FileMode.APPEND); + fs.writeUTFBytes(msg + File.lineEnding); + fs.close(); + } + + public function clear():void + { + var fs:FileStream = new FileStream(); + fs.open(log, FileMode.WRITE); + fs.writeUTFBytes(""); + fs.close(); + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/air/net/ResourceCache.as b/DISPLAYER/com/adobe/air/net/ResourceCache.as new file mode 100644 index 0000000000000000000000000000000000000000..194463933d871cbeebc3e4224e82772d4c65f604 --- /dev/null +++ b/DISPLAYER/com/adobe/air/net/ResourceCache.as @@ -0,0 +1,165 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.air.net +{ + import com.adobe.crypto.MD5; + import com.adobe.net.DynamicURLLoader; + + import flash.events.Event; + import flash.events.EventDispatcher; + import flash.events.IOErrorEvent; + import flash.filesystem.File; + import flash.filesystem.FileMode; + import flash.filesystem.FileStream; + import flash.net.URLLoaderDataFormat; + import flash.net.URLRequest; + import flash.utils.ByteArray; + import com.adobe.air.net.events.ResourceCacheEvent; + + //todo: add event metadata + + public class ResourceCache extends EventDispatcher + { + private var _cacheName:String; + //maybe rename to make it clearer it loads data + public function ResourceCache(cacheName:String) + { + _cacheName = cacheName; + } + + public function get cacheName():String + { + return _cacheName; + } + + private function getStorageDir():File + { + return File.applicationStorageDirectory.resolvePath(_cacheName); + } + + public function itemExists(key:String):Boolean + { + return getItemFile(key).exists; + } + + public function clearCache():void + { + var cacheDir:File = getStorageDir(); + try + { + cacheDir.deleteDirectory(true); + } + catch (e:IOErrorEvent) + { + // we tried! + } + } + + public function getItemFile(key:String):File + { + var dir:File = getStorageDir(); + var fName:String = generateKeyHash(key); + var file:File = dir.resolvePath(fName); + + return file; + } + + public function retrieve(url:String):void + { + + var key:String = generateKeyHash(url); + var file:File = getItemFile(key); + + //todo: do we need to check if the dir exists? + + if(file.exists) + { + var e:ResourceCacheEvent = new ResourceCacheEvent(ResourceCacheEvent.ITEM_READY); + e.key = key; + e.file = file; + + dispatchEvent(e); + return; + } + + + var loader:DynamicURLLoader = new DynamicURLLoader(); + loader.file = file; + loader.key = key; + + loader.addEventListener(Event.COMPLETE, onDataLoad); + loader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); + + loader.dataFormat = URLLoaderDataFormat.BINARY; + + loader.load(new URLRequest(url)); + + } + + private function onLoadError(event:IOErrorEvent):void + { + trace("onLoadError : could not cache item"); + } + + private function onDataLoad(event:Event):void + { + var loader:DynamicURLLoader = DynamicURLLoader(event.target); + + var f:File = File(loader.file); + var key:String = String(loader.key); + + var fileStream:FileStream = new FileStream(); + fileStream.open(f, FileMode.WRITE); + fileStream.writeBytes(loader.data as ByteArray); + fileStream.close(); + + var g:ResourceCacheEvent = new ResourceCacheEvent(ResourceCacheEvent.ITEM_CACHED); + g.key = key; + g.file = f; + + dispatchEvent(g); + + var e:ResourceCacheEvent = new ResourceCacheEvent(ResourceCacheEvent.ITEM_READY); + e.key = key; + e.file = f; + + dispatchEvent(e); + } + + + private function generateKeyHash(key:String):String + { + return MD5.hash(key); + } + } +} diff --git a/DISPLAYER/com/adobe/air/net/events/ResourceCacheEvent.as b/DISPLAYER/com/adobe/air/net/events/ResourceCacheEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..a27a136cbd9307bdccb7b2a7192be1abc8389cb2 --- /dev/null +++ b/DISPLAYER/com/adobe/air/net/events/ResourceCacheEvent.as @@ -0,0 +1,70 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.air.net.events +{ + import flash.events.Event; + import flash.filesystem.File; + + public class ResourceCacheEvent extends Event + { + + public static const ITEM_READY:String = "onPathReady"; + public static const ITEM_CACHED:String = "onItemCached"; + + [Bindable] + public var key:String; + + [Bindable] + public var file:File; + + public function ResourceCacheEvent(type:String, + bubbles:Boolean=false, + cancelable:Boolean=false) + { + super(type, bubbles, cancelable); + } + + public override function clone():Event + { + var out:ResourceCacheEvent = new ResourceCacheEvent(type, + bubbles, + cancelable); + + out.key = key; + out.file = file; + + return out; + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/crypto/HMAC.as b/DISPLAYER/com/adobe/crypto/HMAC.as new file mode 100644 index 0000000000000000000000000000000000000000..72f9bffc9edc2fcdfd485cd04e6dfbf5fa9f4cf3 --- /dev/null +++ b/DISPLAYER/com/adobe/crypto/HMAC.as @@ -0,0 +1,127 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto { + import flash.utils.ByteArray; + import flash.utils.Endian; + import flash.utils.describeType; + /** + * Keyed-Hashing for Message Authentication + * Implementation based on algorithm description at + * http://www.faqs.org/rfcs/rfc2104.html + */ + public class HMAC + { + /** + * Performs the HMAC hash algorithm using byte arrays. + * + * @param secret The secret key + * @param message The message to hash + * @param algorithm Hash object to use + * @return A string containing the hash value of message + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public static function hash( secret:String, message:String, algorithm:Object = null ):String + { + var text:ByteArray = new ByteArray(); + var k_secret:ByteArray = new ByteArray(); + + text.writeUTFBytes(message); + k_secret.writeUTFBytes(secret); + + return hashBytes(k_secret, text, algorithm); + } + + /** + * Performs the HMAC hash algorithm using string. + * + * @param secret The secret key + * @param message The message to hash + * @param algorithm Hash object to use + * @return A string containing the hash value of message + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public static function hashBytes( secret:ByteArray, message:ByteArray, algorithm:Object = null ):String + { + var ipad:ByteArray = new ByteArray(); + var opad:ByteArray = new ByteArray(); + var endian:String = Endian.BIG_ENDIAN; + + if(algorithm == null){ + algorithm = MD5; + } + + if ( describeType(algorithm).@name.toString() == "com.adobe.crypto::MD5" ) { + endian = Endian.LITTLE_ENDIAN; + } + + if ( secret.length > 64 ) { + algorithm.hashBytes(secret); + secret = new ByteArray(); + secret.endian = endian; + + while ( algorithm.digest.bytesAvailable != 0 ) { + secret.writeInt(algorithm.digest.readInt()); + } + } + + secret.length = 64 + secret.position = 0; + for ( var x:int = 0; x < 64; x++ ) { + var byte:int = secret.readByte(); + ipad.writeByte(0x36 ^ byte); + opad.writeByte(0x5c ^ byte); + } + + ipad.writeBytes(message); + algorithm.hashBytes(ipad); + var tmp:ByteArray = new ByteArray(); + tmp.endian = endian; + + while ( algorithm.digest.bytesAvailable != 0 ) { + tmp.writeInt(algorithm.digest.readInt()); + } + tmp.position = 0; + + while ( tmp.bytesAvailable != 0 ) { + opad.writeByte(tmp.readUnsignedByte()); + } + return algorithm.hashBytes( opad ); + } + + } + +} diff --git a/DISPLAYER/com/adobe/crypto/MD5.as b/DISPLAYER/com/adobe/crypto/MD5.as new file mode 100644 index 0000000000000000000000000000000000000000..da533cc447309e0f9f229f481e56752eb447156e --- /dev/null +++ b/DISPLAYER/com/adobe/crypto/MD5.as @@ -0,0 +1,281 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto { + + import com.adobe.utils.IntUtil; + import flash.utils.ByteArray; + /** + * The MD5 Message-Digest Algorithm + * + * Implementation based on algorithm description at + * http://www.faqs.org/rfcs/rfc1321.html + */ + public class MD5 { + + public static var digest:ByteArray; + /** + * Performs the MD5 hash algorithm on a string. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + + public static function hash(s:String) :String{ + //Convert to byteArray and send through hashBinary function + // so as to only have complex code in one location + var ba:ByteArray = new ByteArray(); + ba.writeUTFBytes(s); + return hashBinary(ba); + } + + public static function hashBytes(s:ByteArray) :String{ + return hashBinary(s); + } + + /** + * Performs the MD5 hash algorithm on a ByteArray. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public static function hashBinary( s:ByteArray ):String { + // initialize the md buffers + var a:int = 1732584193; + var b:int = -271733879; + var c:int = -1732584194; + var d:int = 271733878; + + // variables to store previous values + var aa:int; + var bb:int; + var cc:int; + var dd:int; + + // create the blocks from the string and + // save the length as a local var to reduce + // lookup in the loop below + var x:Array = createBlocks( s ); + var len:int = x.length; + + // loop over all of the blocks + for ( var i:int = 0; i < len; i += 16) { + // save previous values + aa = a; + bb = b; + cc = c; + dd = d; + + // Round 1 + a = ff( a, b, c, d, x[int(i+ 0)], 7, -680876936 ); // 1 + d = ff( d, a, b, c, x[int(i+ 1)], 12, -389564586 ); // 2 + c = ff( c, d, a, b, x[int(i+ 2)], 17, 606105819 ); // 3 + b = ff( b, c, d, a, x[int(i+ 3)], 22, -1044525330 ); // 4 + a = ff( a, b, c, d, x[int(i+ 4)], 7, -176418897 ); // 5 + d = ff( d, a, b, c, x[int(i+ 5)], 12, 1200080426 ); // 6 + c = ff( c, d, a, b, x[int(i+ 6)], 17, -1473231341 ); // 7 + b = ff( b, c, d, a, x[int(i+ 7)], 22, -45705983 ); // 8 + a = ff( a, b, c, d, x[int(i+ 8)], 7, 1770035416 ); // 9 + d = ff( d, a, b, c, x[int(i+ 9)], 12, -1958414417 ); // 10 + c = ff( c, d, a, b, x[int(i+10)], 17, -42063 ); // 11 + b = ff( b, c, d, a, x[int(i+11)], 22, -1990404162 ); // 12 + a = ff( a, b, c, d, x[int(i+12)], 7, 1804603682 ); // 13 + d = ff( d, a, b, c, x[int(i+13)], 12, -40341101 ); // 14 + c = ff( c, d, a, b, x[int(i+14)], 17, -1502002290 ); // 15 + b = ff( b, c, d, a, x[int(i+15)], 22, 1236535329 ); // 16 + + // Round 2 + a = gg( a, b, c, d, x[int(i+ 1)], 5, -165796510 ); // 17 + d = gg( d, a, b, c, x[int(i+ 6)], 9, -1069501632 ); // 18 + c = gg( c, d, a, b, x[int(i+11)], 14, 643717713 ); // 19 + b = gg( b, c, d, a, x[int(i+ 0)], 20, -373897302 ); // 20 + a = gg( a, b, c, d, x[int(i+ 5)], 5, -701558691 ); // 21 + d = gg( d, a, b, c, x[int(i+10)], 9, 38016083 ); // 22 + c = gg( c, d, a, b, x[int(i+15)], 14, -660478335 ); // 23 + b = gg( b, c, d, a, x[int(i+ 4)], 20, -405537848 ); // 24 + a = gg( a, b, c, d, x[int(i+ 9)], 5, 568446438 ); // 25 + d = gg( d, a, b, c, x[int(i+14)], 9, -1019803690 ); // 26 + c = gg( c, d, a, b, x[int(i+ 3)], 14, -187363961 ); // 27 + b = gg( b, c, d, a, x[int(i+ 8)], 20, 1163531501 ); // 28 + a = gg( a, b, c, d, x[int(i+13)], 5, -1444681467 ); // 29 + d = gg( d, a, b, c, x[int(i+ 2)], 9, -51403784 ); // 30 + c = gg( c, d, a, b, x[int(i+ 7)], 14, 1735328473 ); // 31 + b = gg( b, c, d, a, x[int(i+12)], 20, -1926607734 ); // 32 + + // Round 3 + a = hh( a, b, c, d, x[int(i+ 5)], 4, -378558 ); // 33 + d = hh( d, a, b, c, x[int(i+ 8)], 11, -2022574463 ); // 34 + c = hh( c, d, a, b, x[int(i+11)], 16, 1839030562 ); // 35 + b = hh( b, c, d, a, x[int(i+14)], 23, -35309556 ); // 36 + a = hh( a, b, c, d, x[int(i+ 1)], 4, -1530992060 ); // 37 + d = hh( d, a, b, c, x[int(i+ 4)], 11, 1272893353 ); // 38 + c = hh( c, d, a, b, x[int(i+ 7)], 16, -155497632 ); // 39 + b = hh( b, c, d, a, x[int(i+10)], 23, -1094730640 ); // 40 + a = hh( a, b, c, d, x[int(i+13)], 4, 681279174 ); // 41 + d = hh( d, a, b, c, x[int(i+ 0)], 11, -358537222 ); // 42 + c = hh( c, d, a, b, x[int(i+ 3)], 16, -722521979 ); // 43 + b = hh( b, c, d, a, x[int(i+ 6)], 23, 76029189 ); // 44 + a = hh( a, b, c, d, x[int(i+ 9)], 4, -640364487 ); // 45 + d = hh( d, a, b, c, x[int(i+12)], 11, -421815835 ); // 46 + c = hh( c, d, a, b, x[int(i+15)], 16, 530742520 ); // 47 + b = hh( b, c, d, a, x[int(i+ 2)], 23, -995338651 ); // 48 + + // Round 4 + a = ii( a, b, c, d, x[int(i+ 0)], 6, -198630844 ); // 49 + d = ii( d, a, b, c, x[int(i+ 7)], 10, 1126891415 ); // 50 + c = ii( c, d, a, b, x[int(i+14)], 15, -1416354905 ); // 51 + b = ii( b, c, d, a, x[int(i+ 5)], 21, -57434055 ); // 52 + a = ii( a, b, c, d, x[int(i+12)], 6, 1700485571 ); // 53 + d = ii( d, a, b, c, x[int(i+ 3)], 10, -1894986606 ); // 54 + c = ii( c, d, a, b, x[int(i+10)], 15, -1051523 ); // 55 + b = ii( b, c, d, a, x[int(i+ 1)], 21, -2054922799 ); // 56 + a = ii( a, b, c, d, x[int(i+ 8)], 6, 1873313359 ); // 57 + d = ii( d, a, b, c, x[int(i+15)], 10, -30611744 ); // 58 + c = ii( c, d, a, b, x[int(i+ 6)], 15, -1560198380 ); // 59 + b = ii( b, c, d, a, x[int(i+13)], 21, 1309151649 ); // 60 + a = ii( a, b, c, d, x[int(i+ 4)], 6, -145523070 ); // 61 + d = ii( d, a, b, c, x[int(i+11)], 10, -1120210379 ); // 62 + c = ii( c, d, a, b, x[int(i+ 2)], 15, 718787259 ); // 63 + b = ii( b, c, d, a, x[int(i+ 9)], 21, -343485551 ); // 64 + + a += aa; + b += bb; + c += cc; + d += dd; + } + digest = new ByteArray() + digest.writeInt(a); + digest.writeInt(b); + digest.writeInt(c); + digest.writeInt(d); + digest.position = 0; + // Finish up by concatening the buffers with their hex output + return IntUtil.toHex( a ) + IntUtil.toHex( b ) + IntUtil.toHex( c ) + IntUtil.toHex( d ); + } + + /** + * Auxiliary function f as defined in RFC + */ + private static function f( x:int, y:int, z:int ):int { + return ( x & y ) | ( (~x) & z ); + } + + /** + * Auxiliary function g as defined in RFC + */ + private static function g( x:int, y:int, z:int ):int { + return ( x & z ) | ( y & (~z) ); + } + + /** + * Auxiliary function h as defined in RFC + */ + private static function h( x:int, y:int, z:int ):int { + return x ^ y ^ z; + } + + /** + * Auxiliary function i as defined in RFC + */ + private static function i( x:int, y:int, z:int ):int { + return y ^ ( x | (~z) ); + } + + /** + * A generic transformation function. The logic of ff, gg, hh, and + * ii are all the same, minus the function used, so pull that logic + * out and simplify the method bodies for the transoformation functions. + */ + private static function transform( func:Function, a:int, b:int, c:int, d:int, x:int, s:int, t:int):int { + var tmp:int = a + int( func( b, c, d ) ) + x + t; + return IntUtil.rol( tmp, s ) + b; + } + + /** + * ff transformation function + */ + private static function ff ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( f, a, b, c, d, x, s, t ); + } + + /** + * gg transformation function + */ + private static function gg ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( g, a, b, c, d, x, s, t ); + } + + /** + * hh transformation function + */ + private static function hh ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( h, a, b, c, d, x, s, t ); + } + + /** + * ii transformation function + */ + private static function ii ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( i, a, b, c, d, x, s, t ); + } + + /** + * Converts a string to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param s The string to split into blocks + * @return An array containing the blocks that s was + * split into. + */ + private static function createBlocks( s:ByteArray ):Array { + var blocks:Array = new Array(); + var len:int = s.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) { + blocks[ int(i >> 5) ] |= ( s[ i / 8 ] & mask ) << ( i % 32 ); + } + + // append padding and length + blocks[ int(len >> 5) ] |= 0x80 << ( len % 32 ); + blocks[ int(( ( ( len + 64 ) >>> 9 ) << 4 ) + 14) ] = len; + return blocks; + } + + } +} diff --git a/DISPLAYER/com/adobe/crypto/MD5Stream.as b/DISPLAYER/com/adobe/crypto/MD5Stream.as new file mode 100644 index 0000000000000000000000000000000000000000..6e5eed0d8776cfda46308ee9eb696573b09e9599 --- /dev/null +++ b/DISPLAYER/com/adobe/crypto/MD5Stream.as @@ -0,0 +1,402 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto +{ + import com.adobe.utils.IntUtil; + import flash.utils.ByteArray; + + /** + * Perform MD5 hash of an input stream in chunks. This class is + * based on com.adobe.crypto.MD5 and can process data in + * chunks. Both block creation and hash computation are done + * together for whatever input is available so that the memory + * overhead at a time is always fixed. Memory usage is governed by + * two parameters: one is the amount of data passed in to update() + * and the other is memoryBlockSize. The latter comes into play + * only when the memory window exceeds the pre allocated memory + * window of flash player. Usage: create an instance, call + * update(data) repeatedly for all chunks and finally complete() + * which will return the md5 hash. + */ + public class MD5Stream + { + private static var mask:int = 0xFF; + + private var arr:Array = []; + + /* running count of length */ + private var arrLen:int; + + // initialize the md buffers + private var a:int = 1732584193; + private var b:int = -271733879; + private var c:int = -1732584194; + private var d:int = 271733878; + + // variables to store previous values + private var aa:int; + private var bb:int; + private var cc:int; + private var dd:int; + + /* index for data read */ + private var arrIndexLen:int = 0; + /* index for hash computation */ + private var arrProcessIndex:int = 0; + /* index for removing stale arr values */ + private var cleanIndex:int = 0; + + /** + * Change this value from the default (16384) in the range of + * MBs to actually affect GC as GC allocates in pools of + * memory */ + public var memoryBlockSize:int = 16384; + + + public function MD5Stream() + { + + } + + + /** + * Pass in chunks of the input data with update(), call + * complete() with an optional chunk which will return the + * final hash. Equivalent to the way + * java.security.MessageDigest works. + * + * @param input The optional bytearray chunk which is the final part of the input + * @return A string containing the hash value + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public function complete(input:ByteArray=null):String + { + if ( arr.length == 0 ) + { + if ( input == null ) + { + throw new Error("null input to complete without prior call to update. At least an empty bytearray must be passed."); + } + } + + if ( input != null ) + { + readIntoArray(input); + } + + //pad, append length + padArray(arrLen); + + hashRemainingChunks(false); + + var res:String = IntUtil.toHex( a ) + IntUtil.toHex( b ) + + IntUtil.toHex( c ) + IntUtil.toHex( d ); + resetFields(); + + return res; + } + + /** + * Pass in chunks of the input data with update(), call + * complete() with an optional chunk which will return the + * final hash. Equivalent to the way + * java.security.MessageDigest works. + * + * @param input The bytearray chunk to perform the hash on + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public function update(input:ByteArray):void + { + readIntoArray(input); + hashRemainingChunks(); + } + + /** + * Re-initialize this instance for use to perform hashing on + * another input stream. This is called automatically by + * complete(). + * + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public function resetFields():void + { + //truncate array + arr.length = 0; + arrLen = 0; + + // initialize the md buffers + a = 1732584193; + b = -271733879; + c = -1732584194; + d = 271733878; + + // variables to store previous values + aa = 0; + bb = 0; + cc = 0; + dd = 0; + + arrIndexLen = 0; + arrProcessIndex = 0; + cleanIndex = 0; + } + + /** read into arr and free up used blocks of arr */ + private function readIntoArray(input:ByteArray):void + { + var closestChunkLen:int = input.length * 8; + arrLen += closestChunkLen; + + /* clean up memory. if there are entries in the array that + * are already processed and the amount is greater than + * memoryBlockSize, create a new array, copy the last + * block into it and let the old one get picked up by + * GC. */ + if ( arrProcessIndex - cleanIndex > memoryBlockSize ) + { + var newarr:Array= new Array(); + + /* AS Arrays in sparse arrays. arr[2002] can exist + * without values for arr[0] - arr[2001] */ + for ( var j:int = arrProcessIndex; j < arr.length; j++ ) + { + newarr[j] = arr[j]; + } + + cleanIndex = arrProcessIndex; + arr = null; + arr = newarr; + } + + for ( var k:int = 0; k < closestChunkLen; k+=8 ) + { + //discard high bytes (convert to uint) + arr[ int(arrIndexLen >> 5) ] |= ( input[ k / 8 ] & mask ) << ( arrIndexLen % 32 ); + arrIndexLen += 8; + } + + + } + + private function hashRemainingChunks(bUpdate:Boolean=true):void + { + var len:int = arr.length; + + /* leave a 16 word block untouched if we are called from + * update. This is because, padArray() can modify the last + * block and this modification has to happen before we + * compute the hash. */ + if ( bUpdate ) + { + len -= 16; + } + + /* don't do anything if don't have a 16 word block. */ + if ( arrProcessIndex >= len || len - arrProcessIndex < 15 ) + { + return; + } + + + for ( var i:int = arrProcessIndex; i < len ; i += 16, arrProcessIndex += 16) + { + // save previous values + aa = a; + bb = b; + cc = c; + dd = d; + + // Round 1 + a = ff( a, b, c, d, arr[int(i+ 0)], 7, -680876936 ); // 1 + d = ff( d, a, b, c, arr[int(i+ 1)], 12, -389564586 ); // 2 + c = ff( c, d, a, b, arr[int(i+ 2)], 17, 606105819 ); // 3 + b = ff( b, c, d, a, arr[int(i+ 3)], 22, -1044525330 ); // 4 + a = ff( a, b, c, d, arr[int(i+ 4)], 7, -176418897 ); // 5 + d = ff( d, a, b, c, arr[int(i+ 5)], 12, 1200080426 ); // 6 + c = ff( c, d, a, b, arr[int(i+ 6)], 17, -1473231341 ); // 7 + b = ff( b, c, d, a, arr[int(i+ 7)], 22, -45705983 ); // 8 + a = ff( a, b, c, d, arr[int(i+ 8)], 7, 1770035416 ); // 9 + d = ff( d, a, b, c, arr[int(i+ 9)], 12, -1958414417 ); // 10 + c = ff( c, d, a, b, arr[int(i+10)], 17, -42063 ); // 11 + b = ff( b, c, d, a, arr[int(i+11)], 22, -1990404162 ); // 12 + a = ff( a, b, c, d, arr[int(i+12)], 7, 1804603682 ); // 13 + d = ff( d, a, b, c, arr[int(i+13)], 12, -40341101 ); // 14 + c = ff( c, d, a, b, arr[int(i+14)], 17, -1502002290 ); // 15 + b = ff( b, c, d, a, arr[int(i+15)], 22, 1236535329 ); // 16 + + // Round 2 + a = gg( a, b, c, d, arr[int(i+ 1)], 5, -165796510 ); // 17 + d = gg( d, a, b, c, arr[int(i+ 6)], 9, -1069501632 ); // 18 + c = gg( c, d, a, b, arr[int(i+11)], 14, 643717713 ); // 19 + b = gg( b, c, d, a, arr[int(i+ 0)], 20, -373897302 ); // 20 + a = gg( a, b, c, d, arr[int(i+ 5)], 5, -701558691 ); // 21 + d = gg( d, a, b, c, arr[int(i+10)], 9, 38016083 ); // 22 + c = gg( c, d, a, b, arr[int(i+15)], 14, -660478335 ); // 23 + b = gg( b, c, d, a, arr[int(i+ 4)], 20, -405537848 ); // 24 + a = gg( a, b, c, d, arr[int(i+ 9)], 5, 568446438 ); // 25 + d = gg( d, a, b, c, arr[int(i+14)], 9, -1019803690 ); // 26 + c = gg( c, d, a, b, arr[int(i+ 3)], 14, -187363961 ); // 27 + b = gg( b, c, d, a, arr[int(i+ 8)], 20, 1163531501 ); // 28 + a = gg( a, b, c, d, arr[int(i+13)], 5, -1444681467 ); // 29 + d = gg( d, a, b, c, arr[int(i+ 2)], 9, -51403784 ); // 30 + c = gg( c, d, a, b, arr[int(i+ 7)], 14, 1735328473 ); // 31 + b = gg( b, c, d, a, arr[int(i+12)], 20, -1926607734 ); // 32 + + // Round 3 + a = hh( a, b, c, d, arr[int(i+ 5)], 4, -378558 ); // 33 + d = hh( d, a, b, c, arr[int(i+ 8)], 11, -2022574463 ); // 34 + c = hh( c, d, a, b, arr[int(i+11)], 16, 1839030562 ); // 35 + b = hh( b, c, d, a, arr[int(i+14)], 23, -35309556 ); // 36 + a = hh( a, b, c, d, arr[int(i+ 1)], 4, -1530992060 ); // 37 + d = hh( d, a, b, c, arr[int(i+ 4)], 11, 1272893353 ); // 38 + c = hh( c, d, a, b, arr[int(i+ 7)], 16, -155497632 ); // 39 + b = hh( b, c, d, a, arr[int(i+10)], 23, -1094730640 ); // 40 + a = hh( a, b, c, d, arr[int(i+13)], 4, 681279174 ); // 41 + d = hh( d, a, b, c, arr[int(i+ 0)], 11, -358537222 ); // 42 + c = hh( c, d, a, b, arr[int(i+ 3)], 16, -722521979 ); // 43 + b = hh( b, c, d, a, arr[int(i+ 6)], 23, 76029189 ); // 44 + a = hh( a, b, c, d, arr[int(i+ 9)], 4, -640364487 ); // 45 + d = hh( d, a, b, c, arr[int(i+12)], 11, -421815835 ); // 46 + c = hh( c, d, a, b, arr[int(i+15)], 16, 530742520 ); // 47 + b = hh( b, c, d, a, arr[int(i+ 2)], 23, -995338651 ); // 48 + + // Round 4 + a = ii( a, b, c, d, arr[int(i+ 0)], 6, -198630844 ); // 49 + d = ii( d, a, b, c, arr[int(i+ 7)], 10, 1126891415 ); // 50 + c = ii( c, d, a, b, arr[int(i+14)], 15, -1416354905 ); // 51 + b = ii( b, c, d, a, arr[int(i+ 5)], 21, -57434055 ); // 52 + a = ii( a, b, c, d, arr[int(i+12)], 6, 1700485571 ); // 53 + d = ii( d, a, b, c, arr[int(i+ 3)], 10, -1894986606 ); // 54 + c = ii( c, d, a, b, arr[int(i+10)], 15, -1051523 ); // 55 + b = ii( b, c, d, a, arr[int(i+ 1)], 21, -2054922799 ); // 56 + a = ii( a, b, c, d, arr[int(i+ 8)], 6, 1873313359 ); // 57 + d = ii( d, a, b, c, arr[int(i+15)], 10, -30611744 ); // 58 + c = ii( c, d, a, b, arr[int(i+ 6)], 15, -1560198380 ); // 59 + b = ii( b, c, d, a, arr[int(i+13)], 21, 1309151649 ); // 60 + a = ii( a, b, c, d, arr[int(i+ 4)], 6, -145523070 ); // 61 + d = ii( d, a, b, c, arr[int(i+11)], 10, -1120210379 ); // 62 + c = ii( c, d, a, b, arr[int(i+ 2)], 15, 718787259 ); // 63 + b = ii( b, c, d, a, arr[int(i+ 9)], 21, -343485551 ); // 64 + + a += aa; + b += bb; + c += cc; + d += dd; + + } + + } + + private function padArray(len:int):void + { + arr[ int(len >> 5) ] |= 0x80 << ( len % 32 ); + arr[ int(( ( ( len + 64 ) >>> 9 ) << 4 ) + 14) ] = len; + arrLen = arr.length; + } + + /* Code below same as com.adobe.crypto.MD5 */ + + /** + * Auxiliary function f as defined in RFC + */ + private static function f( x:int, y:int, z:int ):int { + return ( x & y ) | ( (~x) & z ); + } + + /** + * Auxiliary function g as defined in RFC + */ + private static function g( x:int, y:int, z:int ):int { + return ( x & z ) | ( y & (~z) ); + } + + /** + * Auxiliary function h as defined in RFC + */ + private static function h( x:int, y:int, z:int ):int { + return x ^ y ^ z; + } + + /** + * Auxiliary function i as defined in RFC + */ + private static function i( x:int, y:int, z:int ):int { + return y ^ ( x | (~z) ); + } + + /** + * A generic transformation function. The logic of ff, gg, hh, and + * ii are all the same, minus the function used, so pull that logic + * out and simplify the method bodies for the transoformation functions. + */ + private static function transform( func:Function, a:int, b:int, c:int, d:int, x:int, s:int, t:int):int { + var tmp:int = a + int( func( b, c, d ) ) + x + t; + return IntUtil.rol( tmp, s ) + b; + } + + /** + * ff transformation function + */ + private static function ff ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( f, a, b, c, d, x, s, t ); + } + + /** + * gg transformation function + */ + private static function gg ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( g, a, b, c, d, x, s, t ); + } + + /** + * hh transformation function + */ + private static function hh ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( h, a, b, c, d, x, s, t ); + } + + /** + * ii transformation function + */ + private static function ii ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( i, a, b, c, d, x, s, t ); + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/crypto/SHA1.as b/DISPLAYER/com/adobe/crypto/SHA1.as new file mode 100644 index 0000000000000000000000000000000000000000..12c58b525ce73dbe8621ce92ab6f22c3a4fe536f --- /dev/null +++ b/DISPLAYER/com/adobe/crypto/SHA1.as @@ -0,0 +1,289 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto +{ + import com.adobe.utils.IntUtil; + import flash.utils.ByteArray; + import mx.utils.Base64Encoder; + + /** + * US Secure Hash Algorithm 1 (SHA1) + * + * Implementation based on algorithm description at + * http://www.faqs.org/rfcs/rfc3174.html + */ + public class SHA1 + { + public static var digest:ByteArray; + + /** + * Performs the SHA1 hash algorithm on a string. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hash( s:String ):String + { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks( blocks ); + + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA1 hash algorithm on a ByteArray. + * + * @param data The ByteArray data to hash + * @return A string containing the hash value of data + * @langversion ActionScript 3.0 + * @playerversion 9.0 + */ + public static function hashBytes( data:ByteArray ):String + { + var blocks:Array = SHA1.createBlocksFromByteArray( data ); + var byteArray:ByteArray = hashBlocks(blocks); + + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA1 hash algorithm on a string, then does + * Base64 encoding on the result. + * + * @param s The string to hash + * @return The base64 encoded hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hashToBase64( s:String ):String + { + var blocks:Array = SHA1.createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks(blocks); + + // ByteArray.toString() returns the contents as a UTF-8 string, + // which we can't use because certain byte sequences might trigger + // a UTF-8 conversion. Instead, we convert the bytes to characters + // one by one. + var charsInByteArray:String = ""; + byteArray.position = 0; + for (var j:int = 0; j < byteArray.length; j++) + { + var byte:uint = byteArray.readUnsignedByte(); + charsInByteArray += String.fromCharCode(byte); + } + + var encoder:Base64Encoder = new Base64Encoder(); + encoder.encode(charsInByteArray); + return encoder.flush(); + } + + private static function hashBlocks( blocks:Array ):ByteArray + { + // initialize the h's + var h0:int = 0x67452301; + var h1:int = 0xefcdab89; + var h2:int = 0x98badcfe; + var h3:int = 0x10325476; + var h4:int = 0xc3d2e1f0; + + var len:int = blocks.length; + var w:Array = new Array( 80 ); + var temp:int; + + // loop over all of the blocks + for ( var i:int = 0; i < len; i += 16 ) { + + // 6.1.c + var a:int = h0; + var b:int = h1; + var c:int = h2; + var d:int = h3; + var e:int = h4; + + // 80 steps to process each block + var t:int; + for ( t = 0; t < 20; t++ ) { + + if ( t < 16 ) { + // 6.1.a + w[ t ] = blocks[ i + t ]; + } else { + // 6.1.b + temp = w[ t - 3 ] ^ w[ t - 8 ] ^ w[ t - 14 ] ^ w[ t - 16 ]; + w[ t ] = ( temp << 1 ) | ( temp >>> 31 ) + } + + // 6.1.d + temp = ( ( a << 5 ) | ( a >>> 27 ) ) + ( ( b & c ) | ( ~b & d ) ) + e + int( w[ t ] ) + 0x5a827999; + + e = d; + d = c; + c = ( b << 30 ) | ( b >>> 2 ); + b = a; + a = temp; + } + for ( ; t < 40; t++ ) + { + // 6.1.b + temp = w[ t - 3 ] ^ w[ t - 8 ] ^ w[ t - 14 ] ^ w[ t - 16 ]; + w[ t ] = ( temp << 1 ) | ( temp >>> 31 ) + + // 6.1.d + temp = ( ( a << 5 ) | ( a >>> 27 ) ) + ( b ^ c ^ d ) + e + int( w[ t ] ) + 0x6ed9eba1; + + e = d; + d = c; + c = ( b << 30 ) | ( b >>> 2 ); + b = a; + a = temp; + } + for ( ; t < 60; t++ ) + { + // 6.1.b + temp = w[ t - 3 ] ^ w[ t - 8 ] ^ w[ t - 14 ] ^ w[ t - 16 ]; + w[ t ] = ( temp << 1 ) | ( temp >>> 31 ) + + // 6.1.d + temp = ( ( a << 5 ) | ( a >>> 27 ) ) + ( ( b & c ) | ( b & d ) | ( c & d ) ) + e + int( w[ t ] ) + 0x8f1bbcdc; + + e = d; + d = c; + c = ( b << 30 ) | ( b >>> 2 ); + b = a; + a = temp; + } + for ( ; t < 80; t++ ) + { + // 6.1.b + temp = w[ t - 3 ] ^ w[ t - 8 ] ^ w[ t - 14 ] ^ w[ t - 16 ]; + w[ t ] = ( temp << 1 ) | ( temp >>> 31 ) + + // 6.1.d + temp = ( ( a << 5 ) | ( a >>> 27 ) ) + ( b ^ c ^ d ) + e + int( w[ t ] ) + 0xca62c1d6; + + e = d; + d = c; + c = ( b << 30 ) | ( b >>> 2 ); + b = a; + a = temp; + } + + // 6.1.e + h0 += a; + h1 += b; + h2 += c; + h3 += d; + h4 += e; + } + + var byteArray:ByteArray = new ByteArray(); + byteArray.writeInt(h0); + byteArray.writeInt(h1); + byteArray.writeInt(h2); + byteArray.writeInt(h3); + byteArray.writeInt(h4); + byteArray.position = 0; + + digest = new ByteArray(); + digest.writeBytes(byteArray); + digest.position = 0; + return byteArray; + } + + /** + * Converts a ByteArray to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param data The data to split into blocks + * @return An array containing the blocks into which data was split + */ + private static function createBlocksFromByteArray( data:ByteArray ):Array + { + var oldPosition:int = data.position; + data.position = 0; + + var blocks:Array = new Array(); + var len:int = data.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) + { + blocks[ i >> 5 ] |= ( data.readByte() & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + + data.position = oldPosition; + + return blocks; + } + + /** + * Converts a string to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param s The string to split into blocks + * @return An array containing the blocks that s was split into. + */ + private static function createBlocksFromString( s:String ):Array + { + var blocks:Array = new Array(); + var len:int = s.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) { + blocks[ i >> 5 ] |= ( s.charCodeAt( i / 8 ) & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + return blocks; + } + + } +} diff --git a/DISPLAYER/com/adobe/crypto/SHA224.as b/DISPLAYER/com/adobe/crypto/SHA224.as new file mode 100644 index 0000000000000000000000000000000000000000..ee15453733a49ce27e813a67829c94457b0eeb58 --- /dev/null +++ b/DISPLAYER/com/adobe/crypto/SHA224.as @@ -0,0 +1,257 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto +{ + import com.adobe.utils.IntUtil; + import flash.utils.ByteArray; + import mx.utils.Base64Encoder; + + /** + * The SHA-224 algorithm + * + * @see http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf + */ + public class SHA224 + { + public static var digest:ByteArray; + + /** + * Performs the SHA224 hash algorithm on a string. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hash( s:String ):String { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks( blocks ); + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA224 hash algorithm on a ByteArray. + * + * @param data The ByteArray data to hash + * @return A string containing the hash value of data + * @langversion ActionScript 3.0 + * @playerversion 9.0 + */ + public static function hashBytes( data:ByteArray ):String + { + var blocks:Array = createBlocksFromByteArray( data ); + var byteArray:ByteArray = hashBlocks(blocks); + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA224 hash algorithm on a string, then does + * Base64 encoding on the result. + * + * @param s The string to hash + * @return The base64 encoded hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hashToBase64( s:String ):String + { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks(blocks); + + // ByteArray.toString() returns the contents as a UTF-8 string, + // which we can't use because certain byte sequences might trigger + // a UTF-8 conversion. Instead, we convert the bytes to characters + // one by one. + var charsInByteArray:String = ""; + byteArray.position = 0; + for (var j:int = 0; j < byteArray.length; j++) + { + var byte:uint = byteArray.readUnsignedByte(); + charsInByteArray += String.fromCharCode(byte); + } + + var encoder:Base64Encoder = new Base64Encoder(); + encoder.encode(charsInByteArray); + return encoder.flush(); + } + + private static function hashBlocks( blocks:Array ):ByteArray { + var h0:int = 0xc1059ed8; + var h1:int = 0x367cd507; + var h2:int = 0x3070dd17; + var h3:int = 0xf70e5939; + var h4:int = 0xffc00b31; + var h5:int = 0x68581511; + var h6:int = 0x64f98fa7; + var h7:int = 0xbefa4fa4; + + var k:Array = new Array(0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2); + + var len:int = blocks.length; + var w:Array = new Array(); + + // loop over all of the blocks + for ( var i:int = 0; i < len; i += 16 ) { + + var a:int = h0; + var b:int = h1; + var c:int = h2; + var d:int = h3; + var e:int = h4; + var f:int = h5; + var g:int = h6; + var h:int = h7; + + for(var t:int = 0; t < 64; t++) { + + if ( t < 16 ) { + w[t] = blocks[ i + t ]; + if(isNaN(w[t])) { w[t] = 0; } + } else { + var ws0:int = IntUtil.ror(w[t-15], 7) ^ IntUtil.ror(w[t-15], 18) ^ (w[t-15] >>> 3); + var ws1:int = IntUtil.ror(w[t-2], 17) ^ IntUtil.ror(w[t-2], 19) ^ (w[t-2] >>> 10); + w[t] = w[t-16] + ws0 + w[t-7] + ws1; + } + + var s0:int = IntUtil.ror(a, 2) ^ IntUtil.ror(a, 13) ^ IntUtil.ror(a, 22); + var maj:int = (a & b) ^ (a & c) ^ (b & c); + var t2:int = s0 + maj; + var s1:int = IntUtil.ror(e, 6) ^ IntUtil.ror(e, 11) ^ IntUtil.ror(e, 25); + var ch:int = (e & f) ^ ((~e) & g); + var t1:int = h + s1 + ch + k[t] + w[t]; + + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + } + + //Add this chunk's hash to result so far: + h0 += a; + h1 += b; + h2 += c; + h3 += d; + h4 += e; + h5 += f; + h6 += g; + h7 += h; + } + + var byteArray:ByteArray = new ByteArray(); + byteArray.writeInt(h0); + byteArray.writeInt(h1); + byteArray.writeInt(h2); + byteArray.writeInt(h3); + byteArray.writeInt(h4); + byteArray.writeInt(h5); + byteArray.writeInt(h6); + byteArray.position = 0; + + digest = new ByteArray(); + digest.writeBytes(byteArray); + digest.position = 0; + return byteArray; + } + + /** + * Converts a ByteArray to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param data The data to split into blocks + * @return An array containing the blocks into which data was split + */ + private static function createBlocksFromByteArray( data:ByteArray ):Array + { + var oldPosition:int = data.position; + data.position = 0; + + var blocks:Array = new Array(); + var len:int = data.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) + { + blocks[ i >> 5 ] |= ( data.readByte() & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + + data.position = oldPosition; + + return blocks; + } + + /** + * Converts a string to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param s The string to split into blocks + * @return An array containing the blocks that s was split into. + */ + private static function createBlocksFromString( s:String ):Array + { + var blocks:Array = new Array(); + var len:int = s.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) { + blocks[ i >> 5 ] |= ( s.charCodeAt( i / 8 ) & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + return blocks; + } + } +} diff --git a/DISPLAYER/com/adobe/crypto/SHA256.as b/DISPLAYER/com/adobe/crypto/SHA256.as new file mode 100644 index 0000000000000000000000000000000000000000..09a2ba23da81db70733e6a13d575ccd1d2d43156 --- /dev/null +++ b/DISPLAYER/com/adobe/crypto/SHA256.as @@ -0,0 +1,261 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto +{ + import com.adobe.utils.IntUtil; + import flash.utils.ByteArray; + import mx.utils.Base64Encoder; + + /** + * The SHA-256 algorithm + * + * @see http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf + */ + public class SHA256 + { + public static var digest:ByteArray; + /** + * Performs the SHA256 hash algorithm on a string. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hash( s:String ):String { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks( blocks ); + + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA256 hash algorithm on a ByteArray. + * + * @param data The ByteArray data to hash + * @return A string containing the hash value of data + * @langversion ActionScript 3.0 + * @playerversion 9.0 + */ + public static function hashBytes( data:ByteArray ):String + { + var blocks:Array = createBlocksFromByteArray( data ); + var byteArray:ByteArray = hashBlocks(blocks); + + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA256 hash algorithm on a string, then does + * Base64 encoding on the result. + * + * @param s The string to hash + * @return The base64 encoded hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hashToBase64( s:String ):String + { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks(blocks); + + // ByteArray.toString() returns the contents as a UTF-8 string, + // which we can't use because certain byte sequences might trigger + // a UTF-8 conversion. Instead, we convert the bytes to characters + // one by one. + var charsInByteArray:String = ""; + byteArray.position = 0; + for (var j:int = 0; j < byteArray.length; j++) + { + var byte:uint = byteArray.readUnsignedByte(); + charsInByteArray += String.fromCharCode(byte); + } + + var encoder:Base64Encoder = new Base64Encoder(); + encoder.encode(charsInByteArray); + return encoder.flush(); + } + + private static function hashBlocks( blocks:Array ):ByteArray { + var h0:int = 0x6a09e667; + var h1:int = 0xbb67ae85; + var h2:int = 0x3c6ef372; + var h3:int = 0xa54ff53a; + var h4:int = 0x510e527f; + var h5:int = 0x9b05688c; + var h6:int = 0x1f83d9ab; + var h7:int = 0x5be0cd19; + + var k:Array = new Array(0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2); + + var len:int = blocks.length; + var w:Array = new Array( 64 ); + + // loop over all of the blocks + for ( var i:int = 0; i < len; i += 16 ) { + + var a:int = h0; + var b:int = h1; + var c:int = h2; + var d:int = h3; + var e:int = h4; + var f:int = h5; + var g:int = h6; + var h:int = h7; + + for(var t:int = 0; t < 64; t++) { + + if ( t < 16 ) { + w[t] = blocks[ i + t ]; + if(isNaN(w[t])) { w[t] = 0; } + } else { + var ws0:int = IntUtil.ror(w[t-15], 7) ^ IntUtil.ror(w[t-15], 18) ^ (w[t-15] >>> 3); + var ws1:int = IntUtil.ror(w[t-2], 17) ^ IntUtil.ror(w[t-2], 19) ^ (w[t-2] >>> 10); + w[t] = w[t-16] + ws0 + w[t-7] + ws1; + } + + var s0:int = IntUtil.ror(a, 2) ^ IntUtil.ror(a, 13) ^ IntUtil.ror(a, 22); + var maj:int = (a & b) ^ (a & c) ^ (b & c); + var t2:int = s0 + maj; + var s1:int = IntUtil.ror(e, 6) ^ IntUtil.ror(e, 11) ^ IntUtil.ror(e, 25); + var ch:int = (e & f) ^ ((~e) & g); + var t1:int = h + s1 + ch + k[t] + w[t]; + + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + } + + //Add this chunk's hash to result so far: + h0 += a; + h1 += b; + h2 += c; + h3 += d; + h4 += e; + h5 += f; + h6 += g; + h7 += h; + } + + var byteArray:ByteArray = new ByteArray(); + byteArray.writeInt(h0); + byteArray.writeInt(h1); + byteArray.writeInt(h2); + byteArray.writeInt(h3); + byteArray.writeInt(h4); + byteArray.writeInt(h5); + byteArray.writeInt(h6); + byteArray.writeInt(h7); + byteArray.position = 0; + + digest = new ByteArray(); + digest.writeBytes(byteArray); + digest.position = 0; + return byteArray; + } + + /** + * Converts a ByteArray to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param data The data to split into blocks + * @return An array containing the blocks into which data was split + */ + private static function createBlocksFromByteArray( data:ByteArray ):Array + { + var oldPosition:int = data.position; + data.position = 0; + + var blocks:Array = new Array(); + var len:int = data.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) + { + blocks[ i >> 5 ] |= ( data.readByte() & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + + data.position = oldPosition; + + return blocks; + } + + /** + * Converts a string to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param s The string to split into blocks + * @return An array containing the blocks that s was split into. + */ + private static function createBlocksFromString( s:String ):Array + { + var blocks:Array = new Array(); + var len:int = s.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) { + blocks[ i >> 5 ] |= ( s.charCodeAt( i / 8 ) & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + return blocks; + } + } +} diff --git a/DISPLAYER/com/adobe/crypto/WSSEUsernameToken.as b/DISPLAYER/com/adobe/crypto/WSSEUsernameToken.as new file mode 100644 index 0000000000000000000000000000000000000000..92bbba6dc4367c2564605153312da8c38adf10fa --- /dev/null +++ b/DISPLAYER/com/adobe/crypto/WSSEUsernameToken.as @@ -0,0 +1,114 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto +{ + import mx.formatters.DateFormatter; + import mx.utils.Base64Encoder; + + /** + * Web Services Security Username Token + * + * Implementation based on algorithm description at + * http://www.oasis-open.org/committees/wss/documents/WSS-Username-02-0223-merged.pdf + */ + public class WSSEUsernameToken + { + /** + * Generates a WSSE Username Token. + * + * @param username The username + * @param password The password + * @param nonce A cryptographically random nonce (if null, the nonce + * will be generated) + * @param timestamp The time at which the token is generated (if null, + * the time will be set to the moment of execution) + * @return The generated token + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function getUsernameToken(username:String, password:String, nonce:String=null, timestamp:Date=null):String + { + if (nonce == null) + { + nonce = generateNonce(); + } + nonce = base64Encode(nonce); + + var created:String = generateTimestamp(timestamp); + + var password64:String = getBase64Digest(nonce, + created, + password); + + var token:String = new String("UsernameToken Username=\""); + token += username + "\", " + + "PasswordDigest=\"" + password64 + "\", " + + "Nonce=\"" + nonce + "\", " + + "Created=\"" + created + "\""; + return token; + } + + private static function generateNonce():String + { + // Math.random returns a Number between 0 and 1. We don't want our + // nonce to contain invalid characters (e.g. the period) so we + // strip them out before returning the result. + var s:String = Math.random().toString(); + return s.replace(".", ""); + } + + internal static function base64Encode(s:String):String + { + var encoder:Base64Encoder = new Base64Encoder(); + encoder.encode(s); + return encoder.flush(); + } + + internal static function generateTimestamp(timestamp:Date):String + { + if (timestamp == null) + { + timestamp = new Date(); + } + var dateFormatter:DateFormatter = new DateFormatter(); + dateFormatter.formatString = "YYYY-MM-DDTJJ:NN:SS" + return dateFormatter.format(timestamp) + "Z"; + } + + internal static function getBase64Digest(nonce:String, created:String, password:String):String + { + return SHA1.hashToBase64(nonce + created + password); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/errors/IllegalStateError.as b/DISPLAYER/com/adobe/errors/IllegalStateError.as new file mode 100644 index 0000000000000000000000000000000000000000..fa16191d5fef3f376a33c1f91640a5aa3bf00d40 --- /dev/null +++ b/DISPLAYER/com/adobe/errors/IllegalStateError.as @@ -0,0 +1,63 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.errors +{ + /** + * This class represents an Error that is thrown when a method is called when + * the receiving instance is in an invalid state. + * + * For example, this may occur if a method has been called, and other properties + * in the instance have not been initialized properly. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + */ + public class IllegalStateError extends Error + { + /** + * Constructor + * + * @param message A message describing the error in detail. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function IllegalStateError(message:String) + { + super(message); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/fileformats/vcard/Address.as b/DISPLAYER/com/adobe/fileformats/vcard/Address.as new file mode 100644 index 0000000000000000000000000000000000000000..a368ffb06df698c0911fb880c6603d66ce5817b4 --- /dev/null +++ b/DISPLAYER/com/adobe/fileformats/vcard/Address.as @@ -0,0 +1,47 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.fileformats.vcard +{ + public class Address + { + public var type:String; + public var street:String; + public var city:String; + public var state:String; + public var postalCode:String; + + public function toString():String + { + return (street + " " + city + ", " + state + " " + postalCode); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/fileformats/vcard/Email.as b/DISPLAYER/com/adobe/fileformats/vcard/Email.as new file mode 100644 index 0000000000000000000000000000000000000000..071c39edfcc0cb5a599c2846a5d8f8dd6a578d30 --- /dev/null +++ b/DISPLAYER/com/adobe/fileformats/vcard/Email.as @@ -0,0 +1,39 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.fileformats.vcard +{ + public class Email + { + public var type:String; + public var address:String; + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/fileformats/vcard/Phone.as b/DISPLAYER/com/adobe/fileformats/vcard/Phone.as new file mode 100644 index 0000000000000000000000000000000000000000..27f98e4edb042b9c0997c15962bb5d491a1180df --- /dev/null +++ b/DISPLAYER/com/adobe/fileformats/vcard/Phone.as @@ -0,0 +1,39 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.fileformats.vcard +{ + public class Phone + { + public var type:String; + public var number:String; + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/fileformats/vcard/VCard.as b/DISPLAYER/com/adobe/fileformats/vcard/VCard.as new file mode 100644 index 0000000000000000000000000000000000000000..d6bc283222f5ac25a95836e5c465bf534166d6bb --- /dev/null +++ b/DISPLAYER/com/adobe/fileformats/vcard/VCard.as @@ -0,0 +1,54 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.fileformats.vcard +{ + import flash.utils.ByteArray; + + public class VCard + { + public var fullName:String; + public var orgs:Array; + public var title:String; + public var image:ByteArray; + public var phones:Array; + public var emails:Array; + public var addresses:Array; + + public function VCard() + { + orgs = new Array(); + phones = new Array(); + emails = new Array(); + addresses = new Array(); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/fileformats/vcard/VCardParser.as b/DISPLAYER/com/adobe/fileformats/vcard/VCardParser.as new file mode 100644 index 0000000000000000000000000000000000000000..45c954aa987521cb15d31b743af49bc2de652eb9 --- /dev/null +++ b/DISPLAYER/com/adobe/fileformats/vcard/VCardParser.as @@ -0,0 +1,246 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.fileformats.vcard +{ + import mx.utils.Base64Decoder; + import mx.utils.StringUtil; + + public class VCardParser + { + public static function parse(vcardStr:String):Array + { + var vcards:Array = new Array(); + var lines:Array = vcardStr.split(/\r\n/); + var vcard:VCard; + var type:String; + var typeTmp:String; + var line:String; + + for (var i:uint = 0; i < lines.length; ++i) + { + line = lines[i]; + if (line == "BEGIN:VCARD") + { + vcard = new VCard(); + } + else if (line == "END:VCARD") + { + if (vcard != null) + { + vcards.push(vcard); + } + } + else if(line.search(/^ORG/i) != -1) + { + var org:String = line.substring(4, line.length); + var orgArray:Array = org.split(";"); + for each (var orgToken:String in orgArray) + { + if (StringUtil.trim(orgToken).length > 0) + { + vcard.orgs.push(orgToken); + } + } + } + else if(line.search(/^TITLE/i) != -1) + { + var title:String = line.substring(6, line.length); + vcard.title = title; + } + else if (line.search(/^FN:/i) != -1) + { + var fullName:String = line.substring(3, line.length); + vcard.fullName = fullName; + } + else if (line.search(/^TEL/i) != -1) + { + type = new String(); + typeTmp = new String(); + var phone:Phone = new Phone(); + var number:String; + var phoneTokens:Array = line.split(";"); + for each (var phoneToken:String in phoneTokens) + { + if (phoneToken.search(/^TYPE=/i) != -1) + { + if (phoneToken.indexOf(":") != -1) + { + typeTmp = phoneToken.substring(5, phoneToken.indexOf(":")); + number = phoneToken.substring(phoneToken.indexOf(":")+1, phoneToken.length); + } + else + { + typeTmp = phoneToken.substring(5, phoneToken.length); + } + + typeTmp = typeTmp.toLocaleLowerCase(); + + if (typeTmp == "pref") + { + continue; + } + if (type.length != 0) + { + type += (" "); + } + type += typeTmp; + } + } + if (type.length > 0 && number != null) + { + phone.type = type; + phone.number = number; + } + vcard.phones.push(phone); + } + else if (line.search(/^EMAIL/i) != -1) + { + type = new String(); + typeTmp = new String(); + var email:Email = new Email(); + var emailAddress:String; + var emailTokens:Array = line.split(";"); + for each (var emailToken:String in emailTokens) + { + if (emailToken.search(/^TYPE=/i) != -1) + { + if (emailToken.indexOf(":") != -1) + { + typeTmp = emailToken.substring(5, emailToken.indexOf(":")); + emailAddress = emailToken.substring(emailToken.indexOf(":")+1, emailToken.length); + } + else + { + typeTmp = emailToken.substring(5, emailToken.length); + } + + typeTmp = typeTmp.toLocaleLowerCase(); + + if (typeTmp == "pref" || typeTmp == "internet") + { + continue; + } + if (type.length != 0) + { + type += (" "); + } + type += typeTmp; + } + } + if (type.length > 0 && emailAddress != null) + { + email.type = type; + email.address = emailAddress; + } + vcard.emails.push(email); + } + else if (line.indexOf("ADR;") != -1) + { + var addressTokens:Array = line.split(";"); + var address:Address = new Address(); + for (var j:uint = 0; j < addressTokens.length; ++j) + { + var addressToken:String = addressTokens[j]; + if (addressToken.search(/^home:+$/i) != -1) // For Outlook, which uses non-standard vCards. + { + address.type = "home"; + } + else if (addressToken.search(/^work:+$/i) != -1) // For Outlook, which uses non-standard vCards. + { + address.type = "work"; + } + if (addressToken.search(/^type=/i) != -1) // The "type" parameter is the standard way (which Address Book uses) + { + // First, remove the optional ":" character. + addressToken = addressToken.replace(/:/,""); + var addressType:String = addressToken.substring(5, addressToken.length).toLowerCase(); + if (addressType == "pref") // Not interested in which one is preferred. + { + continue; + } + else if (addressType.indexOf("home") != -1) // home + { + addressType = "home"; + } + else if (addressType.indexOf("work") != -1) // work + { + addressType = "work"; + } + else if (addressType.indexOf(",") != -1) // if the comma technique is used, just use the first one + { + var typeTokens:Array = addressType.split(","); + for each (var typeToken:String in typeTokens) + { + if (typeToken != "pref") + { + addressType = typeToken; + break; + } + } + } + address.type = addressType; + } + else if (addressToken.search(/^\d/) != -1 && address.street == null) + { + address.street = addressToken.replace(/\\n/, ""); + address.city = addressTokens[j+1]; + address.state = addressTokens[j+2]; + address.postalCode = addressTokens[j+3]; + } + } + if (address.type != null && address.street != null) + { + vcard.addresses.push(address); + } + + } + else if (line.search(/^PHOTO;BASE64/i) != -1) + { + var imageStr:String = new String(); + for (var k:uint = i+1; k < lines.length; ++k) + { + imageStr += lines[k]; + //if (lines[k].search(/.+\=$/) != -1) // Very slow in Mac due to RegEx bug + if (lines[k].indexOf('=') != -1) + { + var decoder:Base64Decoder = new Base64Decoder(); + decoder.decode(imageStr); + vcard.image = decoder.flush(); + break; + } + } + } + } + return vcards; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/images/BitString.as b/DISPLAYER/com/adobe/images/BitString.as new file mode 100644 index 0000000000000000000000000000000000000000..b5c2b8410f430a1f8f1889f1937026ed1cd851b8 --- /dev/null +++ b/DISPLAYER/com/adobe/images/BitString.as @@ -0,0 +1,39 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.images +{ + public class BitString + { + public var len:int = 0; + public var val:int = 0; + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/images/JPGEncoder.as b/DISPLAYER/com/adobe/images/JPGEncoder.as new file mode 100644 index 0000000000000000000000000000000000000000..100d7e9683f8cc703d7e835667209e06296e1ad1 --- /dev/null +++ b/DISPLAYER/com/adobe/images/JPGEncoder.as @@ -0,0 +1,648 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.images +{ + import flash.geom.*; + import flash.display.*; + import flash.utils.*; + + /** + * Class that converts BitmapData into a valid JPEG + */ + public class JPGEncoder + { + + // Static table initialization + + private var ZigZag:Array = [ + 0, 1, 5, 6,14,15,27,28, + 2, 4, 7,13,16,26,29,42, + 3, 8,12,17,25,30,41,43, + 9,11,18,24,31,40,44,53, + 10,19,23,32,39,45,52,54, + 20,22,33,38,46,51,55,60, + 21,34,37,47,50,56,59,61, + 35,36,48,49,57,58,62,63 + ]; + + private var YTable:Array = new Array(64); + private var UVTable:Array = new Array(64); + private var fdtbl_Y:Array = new Array(64); + private var fdtbl_UV:Array = new Array(64); + + private function initQuantTables(sf:int):void + { + var i:int; + var t:Number; + var YQT:Array = [ + 16, 11, 10, 16, 24, 40, 51, 61, + 12, 12, 14, 19, 26, 58, 60, 55, + 14, 13, 16, 24, 40, 57, 69, 56, + 14, 17, 22, 29, 51, 87, 80, 62, + 18, 22, 37, 56, 68,109,103, 77, + 24, 35, 55, 64, 81,104,113, 92, + 49, 64, 78, 87,103,121,120,101, + 72, 92, 95, 98,112,100,103, 99 + ]; + for (i = 0; i < 64; i++) { + t = Math.floor((YQT[i]*sf+50)/100); + if (t < 1) { + t = 1; + } else if (t > 255) { + t = 255; + } + YTable[ZigZag[i]] = t; + } + var UVQT:Array = [ + 17, 18, 24, 47, 99, 99, 99, 99, + 18, 21, 26, 66, 99, 99, 99, 99, + 24, 26, 56, 99, 99, 99, 99, 99, + 47, 66, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 + ]; + for (i = 0; i < 64; i++) { + t = Math.floor((UVQT[i]*sf+50)/100); + if (t < 1) { + t = 1; + } else if (t > 255) { + t = 255; + } + UVTable[ZigZag[i]] = t; + } + var aasf:Array = [ + 1.0, 1.387039845, 1.306562965, 1.175875602, + 1.0, 0.785694958, 0.541196100, 0.275899379 + ]; + i = 0; + for (var row:int = 0; row < 8; row++) + { + for (var col:int = 0; col < 8; col++) + { + fdtbl_Y[i] = (1.0 / (YTable [ZigZag[i]] * aasf[row] * aasf[col] * 8.0)); + fdtbl_UV[i] = (1.0 / (UVTable[ZigZag[i]] * aasf[row] * aasf[col] * 8.0)); + i++; + } + } + } + + private var YDC_HT:Array; + private var UVDC_HT:Array; + private var YAC_HT:Array; + private var UVAC_HT:Array; + + private function computeHuffmanTbl(nrcodes:Array, std_table:Array):Array + { + var codevalue:int = 0; + var pos_in_table:int = 0; + var HT:Array = new Array(); + for (var k:int=1; k<=16; k++) { + for (var j:int=1; j<=nrcodes[k]; j++) { + HT[std_table[pos_in_table]] = new BitString(); + HT[std_table[pos_in_table]].val = codevalue; + HT[std_table[pos_in_table]].len = k; + pos_in_table++; + codevalue++; + } + codevalue*=2; + } + return HT; + } + + private var std_dc_luminance_nrcodes:Array = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0]; + private var std_dc_luminance_values:Array = [0,1,2,3,4,5,6,7,8,9,10,11]; + private var std_ac_luminance_nrcodes:Array = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d]; + private var std_ac_luminance_values:Array = [ + 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12, + 0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07, + 0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, + 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0, + 0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16, + 0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, + 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39, + 0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49, + 0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, + 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69, + 0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79, + 0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, + 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98, + 0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, + 0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, + 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5, + 0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4, + 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, + 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea, + 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, + 0xf9,0xfa + ]; + + private var std_dc_chrominance_nrcodes:Array = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0]; + private var std_dc_chrominance_values:Array = [0,1,2,3,4,5,6,7,8,9,10,11]; + private var std_ac_chrominance_nrcodes:Array = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77]; + private var std_ac_chrominance_values:Array = [ + 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21, + 0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71, + 0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, + 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0, + 0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34, + 0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, + 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38, + 0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48, + 0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, + 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68, + 0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78, + 0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, + 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96, + 0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5, + 0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, + 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3, + 0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2, + 0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, + 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9, + 0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, + 0xf9,0xfa + ]; + + private function initHuffmanTbl():void + { + YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values); + UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values); + YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values); + UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values); + } + + private var bitcode:Array = new Array(65535); + private var category:Array = new Array(65535); + + private function initCategoryNumber():void + { + var nrlower:int = 1; + var nrupper:int = 2; + var nr:int; + for (var cat:int=1; cat<=15; cat++) { + //Positive numbers + for (nr=nrlower; nr= 0 ) { + if (value & uint(1 << posval) ) { + bytenew |= uint(1 << bytepos); + } + posval--; + bytepos--; + if (bytepos < 0) { + if (bytenew == 0xFF) { + writeByte(0xFF); + writeByte(0); + } + else { + writeByte(bytenew); + } + bytepos=7; + bytenew=0; + } + } + } + + private function writeByte(value:int):void + { + byteout.writeByte(value); + } + + private function writeWord(value:int):void + { + writeByte((value>>8)&0xFF); + writeByte((value )&0xFF); + } + + // DCT & quantization core + + private function fDCTQuant(data:Array, fdtbl:Array):Array + { + var tmp0:Number, tmp1:Number, tmp2:Number, tmp3:Number, tmp4:Number, tmp5:Number, tmp6:Number, tmp7:Number; + var tmp10:Number, tmp11:Number, tmp12:Number, tmp13:Number; + var z1:Number, z2:Number, z3:Number, z4:Number, z5:Number, z11:Number, z13:Number; + var i:int; + /* Pass 1: process rows. */ + var dataOff:int=0; + for (i=0; i<8; i++) { + tmp0 = data[dataOff+0] + data[dataOff+7]; + tmp7 = data[dataOff+0] - data[dataOff+7]; + tmp1 = data[dataOff+1] + data[dataOff+6]; + tmp6 = data[dataOff+1] - data[dataOff+6]; + tmp2 = data[dataOff+2] + data[dataOff+5]; + tmp5 = data[dataOff+2] - data[dataOff+5]; + tmp3 = data[dataOff+3] + data[dataOff+4]; + tmp4 = data[dataOff+3] - data[dataOff+4]; + + /* Even part */ + tmp10 = tmp0 + tmp3; /* phase 2 */ + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + data[dataOff+0] = tmp10 + tmp11; /* phase 3 */ + data[dataOff+4] = tmp10 - tmp11; + + z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */ + data[dataOff+2] = tmp13 + z1; /* phase 5 */ + data[dataOff+6] = tmp13 - z1; + + /* Odd part */ + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */ + z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */ + z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */ + z3 = tmp11 * 0.707106781; /* c4 */ + + z11 = tmp7 + z3; /* phase 5 */ + z13 = tmp7 - z3; + + data[dataOff+5] = z13 + z2; /* phase 6 */ + data[dataOff+3] = z13 - z2; + data[dataOff+1] = z11 + z4; + data[dataOff+7] = z11 - z4; + + dataOff += 8; /* advance pointer to next row */ + } + + /* Pass 2: process columns. */ + dataOff = 0; + for (i=0; i<8; i++) { + tmp0 = data[dataOff+ 0] + data[dataOff+56]; + tmp7 = data[dataOff+ 0] - data[dataOff+56]; + tmp1 = data[dataOff+ 8] + data[dataOff+48]; + tmp6 = data[dataOff+ 8] - data[dataOff+48]; + tmp2 = data[dataOff+16] + data[dataOff+40]; + tmp5 = data[dataOff+16] - data[dataOff+40]; + tmp3 = data[dataOff+24] + data[dataOff+32]; + tmp4 = data[dataOff+24] - data[dataOff+32]; + + /* Even part */ + tmp10 = tmp0 + tmp3; /* phase 2 */ + tmp13 = tmp0 - tmp3; + tmp11 = tmp1 + tmp2; + tmp12 = tmp1 - tmp2; + + data[dataOff+ 0] = tmp10 + tmp11; /* phase 3 */ + data[dataOff+32] = tmp10 - tmp11; + + z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */ + data[dataOff+16] = tmp13 + z1; /* phase 5 */ + data[dataOff+48] = tmp13 - z1; + + /* Odd part */ + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */ + z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */ + z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */ + z3 = tmp11 * 0.707106781; /* c4 */ + + z11 = tmp7 + z3; /* phase 5 */ + z13 = tmp7 - z3; + + data[dataOff+40] = z13 + z2; /* phase 6 */ + data[dataOff+24] = z13 - z2; + data[dataOff+ 8] = z11 + z4; + data[dataOff+56] = z11 - z4; + + dataOff++; /* advance pointer to next column */ + } + + // Quantize/descale the coefficients + for (i=0; i<64; i++) { + // Apply the quantization and scaling factor & Round to nearest integer + data[i] = Math.round((data[i]*fdtbl[i])); + } + return data; + } + + // Chunk writing + + private function writeAPP0():void + { + writeWord(0xFFE0); // marker + writeWord(16); // length + writeByte(0x4A); // J + writeByte(0x46); // F + writeByte(0x49); // I + writeByte(0x46); // F + writeByte(0); // = "JFIF",'\0' + writeByte(1); // versionhi + writeByte(1); // versionlo + writeByte(0); // xyunits + writeWord(1); // xdensity + writeWord(1); // ydensity + writeByte(0); // thumbnwidth + writeByte(0); // thumbnheight + } + + private function writeSOF0(width:int, height:int):void + { + writeWord(0xFFC0); // marker + writeWord(17); // length, truecolor YUV JPG + writeByte(8); // precision + writeWord(height); + writeWord(width); + writeByte(3); // nrofcomponents + writeByte(1); // IdY + writeByte(0x11); // HVY + writeByte(0); // QTY + writeByte(2); // IdU + writeByte(0x11); // HVU + writeByte(1); // QTU + writeByte(3); // IdV + writeByte(0x11); // HVV + writeByte(1); // QTV + } + + private function writeDQT():void + { + writeWord(0xFFDB); // marker + writeWord(132); // length + writeByte(0); + var i:int; + for (i=0; i<64; i++) { + writeByte(YTable[i]); + } + writeByte(1); + for (i=0; i<64; i++) { + writeByte(UVTable[i]); + } + } + + private function writeDHT():void + { + writeWord(0xFFC4); // marker + writeWord(0x01A2); // length + var i:int; + + writeByte(0); // HTYDCinfo + for (i=0; i<16; i++) { + writeByte(std_dc_luminance_nrcodes[i+1]); + } + for (i=0; i<=11; i++) { + writeByte(std_dc_luminance_values[i]); + } + + writeByte(0x10); // HTYACinfo + for (i=0; i<16; i++) { + writeByte(std_ac_luminance_nrcodes[i+1]); + } + for (i=0; i<=161; i++) { + writeByte(std_ac_luminance_values[i]); + } + + writeByte(1); // HTUDCinfo + for (i=0; i<16; i++) { + writeByte(std_dc_chrominance_nrcodes[i+1]); + } + for (i=0; i<=11; i++) { + writeByte(std_dc_chrominance_values[i]); + } + + writeByte(0x11); // HTUACinfo + for (i=0; i<16; i++) { + writeByte(std_ac_chrominance_nrcodes[i+1]); + } + for (i=0; i<=161; i++) { + writeByte(std_ac_chrominance_values[i]); + } + } + + private function writeSOS():void + { + writeWord(0xFFDA); // marker + writeWord(12); // length + writeByte(3); // nrofcomponents + writeByte(1); // IdY + writeByte(0); // HTY + writeByte(2); // IdU + writeByte(0x11); // HTU + writeByte(3); // IdV + writeByte(0x11); // HTV + writeByte(0); // Ss + writeByte(0x3f); // Se + writeByte(0); // Bf + } + + // Core processing + private var DU:Array = new Array(64); + + private function processDU(CDU:Array, fdtbl:Array, DC:Number, HTDC:Array, HTAC:Array):Number + { + var EOB:BitString = HTAC[0x00]; + var M16zeroes:BitString = HTAC[0xF0]; + var i:int; + + var DU_DCT:Array = fDCTQuant(CDU, fdtbl); + //ZigZag reorder + for (i=0;i<64;i++) { + DU[ZigZag[i]]=DU_DCT[i]; + } + var Diff:int = DU[0] - DC; DC = DU[0]; + //Encode DC + if (Diff==0) { + writeBits(HTDC[0]); // Diff might be 0 + } else { + writeBits(HTDC[category[32767+Diff]]); + writeBits(bitcode[32767+Diff]); + } + //Encode ACs + var end0pos:int = 63; + for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) { + }; + //end0pos = first element in reverse order !=0 + if ( end0pos == 0) { + writeBits(EOB); + return DC; + } + i = 1; + while ( i <= end0pos ) { + var startpos:int = i; + for (; (DU[i]==0) && (i<=end0pos); i++) { + } + var nrzeroes:int = i-startpos; + if ( nrzeroes >= 16 ) { + for (var nrmarker:int=1; nrmarker <= nrzeroes/16; nrmarker++) { + writeBits(M16zeroes); + } + nrzeroes = int(nrzeroes&0xF); + } + writeBits(HTAC[nrzeroes*16+category[32767+DU[i]]]); + writeBits(bitcode[32767+DU[i]]); + i++; + } + if ( end0pos != 63 ) { + writeBits(EOB); + } + return DC; + } + + private var YDU:Array = new Array(64); + private var UDU:Array = new Array(64); + private var VDU:Array = new Array(64); + + private function RGB2YUV(img:BitmapData, xpos:int, ypos:int):void + { + var pos:int=0; + for (var y:int=0; y<8; y++) { + for (var x:int=0; x<8; x++) { + var P:uint = img.getPixel32(xpos+x,ypos+y); + var R:Number = Number((P>>16)&0xFF); + var G:Number = Number((P>> 8)&0xFF); + var B:Number = Number((P )&0xFF); + YDU[pos]=((( 0.29900)*R+( 0.58700)*G+( 0.11400)*B))-128; + UDU[pos]=(((-0.16874)*R+(-0.33126)*G+( 0.50000)*B)); + VDU[pos]=((( 0.50000)*R+(-0.41869)*G+(-0.08131)*B)); + pos++; + } + } + } + + /** + * Constructor for JPEGEncoder class + * + * @param quality The quality level between 1 and 100 that detrmines the + * level of compression used in the generated JPEG + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JPGEncoder(quality:Number = 50) + { + if (quality <= 0) { + quality = 1; + } + if (quality > 100) { + quality = 100; + } + var sf:int = 0; + if (quality < 50) { + sf = int(5000 / quality); + } else { + sf = int(200 - quality*2); + } + // Create tables + initHuffmanTbl(); + initCategoryNumber(); + initQuantTables(sf); + } + + /** + * Created a JPEG image from the specified BitmapData + * + * @param image The BitmapData that will be converted into the JPEG format. + * @return a ByteArray representing the JPEG encoded image data. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function encode(image:BitmapData):ByteArray + { + // Initialize bit writer + byteout = new ByteArray(); + bytenew=0; + bytepos=7; + + // Add JPEG headers + writeWord(0xFFD8); // SOI + writeAPP0(); + writeDQT(); + writeSOF0(image.width,image.height); + writeDHT(); + writeSOS(); + + + // Encode 8x8 macroblocks + var DCY:Number=0; + var DCU:Number=0; + var DCV:Number=0; + bytenew=0; + bytepos=7; + for (var ypos:int=0; ypos= 0 ) { + var fillbits:BitString = new BitString(); + fillbits.len = bytepos+1; + fillbits.val = (1<<(bytepos+1))-1; + writeBits(fillbits); + } + + writeWord(0xFFD9); //EOI + return byteout; + } + } +} diff --git a/DISPLAYER/com/adobe/images/PNGEncoder.as b/DISPLAYER/com/adobe/images/PNGEncoder.as new file mode 100644 index 0000000000000000000000000000000000000000..83c95f62964d5660ac212bafe94144fdd23fbd31 --- /dev/null +++ b/DISPLAYER/com/adobe/images/PNGEncoder.as @@ -0,0 +1,141 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.images +{ + import flash.geom.*; + import flash.display.Bitmap; + import flash.display.BitmapData; + import flash.utils.ByteArray; + + /** + * Class that converts BitmapData into a valid PNG + */ + public class PNGEncoder + { + /** + * Created a PNG image from the specified BitmapData + * + * @param image The BitmapData that will be converted into the PNG format. + * @return a ByteArray representing the PNG encoded image data. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function encode(img:BitmapData):ByteArray { + // Create output byte array + var png:ByteArray = new ByteArray(); + // Write PNG signature + png.writeUnsignedInt(0x89504e47); + png.writeUnsignedInt(0x0D0A1A0A); + // Build IHDR chunk + var IHDR:ByteArray = new ByteArray(); + IHDR.writeInt(img.width); + IHDR.writeInt(img.height); + IHDR.writeUnsignedInt(0x08060000); // 32bit RGBA + IHDR.writeByte(0); + writeChunk(png,0x49484452,IHDR); + // Build IDAT chunk + var IDAT:ByteArray= new ByteArray(); + for(var i:int=0;i < img.height;i++) { + // no filter + IDAT.writeByte(0); + var p:uint; + var j:int; + if ( !img.transparent ) { + for(j=0;j < img.width;j++) { + p = img.getPixel(j,i); + IDAT.writeUnsignedInt( + uint(((p&0xFFFFFF) << 8)|0xFF)); + } + } else { + for(j=0;j < img.width;j++) { + p = img.getPixel32(j,i); + IDAT.writeUnsignedInt( + uint(((p&0xFFFFFF) << 8)| + (p>>>24))); + } + } + } + IDAT.compress(); + writeChunk(png,0x49444154,IDAT); + // Build IEND chunk + writeChunk(png,0x49454E44,null); + // return PNG + return png; + } + + private static var crcTable:Array; + private static var crcTableComputed:Boolean = false; + + private static function writeChunk(png:ByteArray, + type:uint, data:ByteArray):void { + if (!crcTableComputed) { + crcTableComputed = true; + crcTable = []; + var c:uint; + for (var n:uint = 0; n < 256; n++) { + c = n; + for (var k:uint = 0; k < 8; k++) { + if (c & 1) { + c = uint(uint(0xedb88320) ^ + uint(c >>> 1)); + } else { + c = uint(c >>> 1); + } + } + crcTable[n] = c; + } + } + var len:uint = 0; + if (data != null) { + len = data.length; + } + png.writeUnsignedInt(len); + var p:uint = png.position; + png.writeUnsignedInt(type); + if ( data != null ) { + png.writeBytes(data); + } + var e:uint = png.position; + png.position = p; + c = 0xffffffff; + for (var i:int = 0; i < (e-p); i++) { + c = uint(crcTable[ + (c ^ png.readUnsignedByte()) & + uint(0xff)] ^ uint(c >>> 8)); + } + c = uint(c^uint(0xffffffff)); + png.position = e; + png.writeUnsignedInt(c); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/net/DynamicURLLoader.as b/DISPLAYER/com/adobe/net/DynamicURLLoader.as new file mode 100644 index 0000000000000000000000000000000000000000..2a9eea1c36e3f0572003529c522f442d7168f4e0 --- /dev/null +++ b/DISPLAYER/com/adobe/net/DynamicURLLoader.as @@ -0,0 +1,55 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.net +{ + import flash.net.URLLoader; + + /** + * Class that provides a dynamic implimentation of the URLLoader class. + * + * This class provides no API implimentations. However, since the class is + * declared as dynamic, it can be used in place of URLLoader, and allow + * you to dynamically attach properties to it (which URLLoader does not allow). + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public dynamic class DynamicURLLoader extends URLLoader + { + public function DynamicURLLoader() + { + super(); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/net/IURIResolver.as b/DISPLAYER/com/adobe/net/IURIResolver.as new file mode 100644 index 0000000000000000000000000000000000000000..94d2f11ea4ffd5d4a74923ff51ced9e6b23c2494 --- /dev/null +++ b/DISPLAYER/com/adobe/net/IURIResolver.as @@ -0,0 +1,76 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.net +{ + /** + * The URI class cannot know about DNS aliases, virtual hosts, or + * symbolic links that may be involved. The application can provide + * an implementation of this interface to resolve the URI before the + * URI class makes any comparisons. For example, a web host has + * two aliases: + * + *

+ * http://www.site.com/ + * http://www.site.net/ + *

+ * + *

The application can provide an implementation that automatically + * resolves site.net to site.com before URI compares two URI objects. + * Only the application can know and understand the context in which + * the URI's are being used.

+ * + *

Use the URI.resolver accessor to assign a custom resolver to + * the URI class. Any resolver specified is global to all instances + * of URI.

+ * + *

URI will call this before performing URI comparisons in the + * URI.getRelation() and URI.getCommonParent() functions.

+ * + * @see URI.getRelation + * @see URI.getCommonParent + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public interface IURIResolver + { + /** + * Implement this method to provide custom URI resolution for + * your application. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + function resolve(uri:URI) : URI; + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/net/MimeTypeMap.as b/DISPLAYER/com/adobe/net/MimeTypeMap.as new file mode 100644 index 0000000000000000000000000000000000000000..63353cab8c7e70f5dcdac28a4031cc4a6b225037 --- /dev/null +++ b/DISPLAYER/com/adobe/net/MimeTypeMap.as @@ -0,0 +1,200 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.net +{ + public class MimeTypeMap + { + private var types:Array = + [["application/andrew-inset","ez"], + ["application/atom+xml","atom"], + ["application/mac-binhex40","hqx"], + ["application/mac-compactpro","cpt"], + ["application/mathml+xml","mathml"], + ["application/msword","doc"], + ["application/octet-stream","bin","dms","lha","lzh","exe","class","so","dll","dmg"], + ["application/oda","oda"], + ["application/ogg","ogg"], + ["application/pdf","pdf"], + ["application/postscript","ai","eps","ps"], + ["application/rdf+xml","rdf"], + ["application/smil","smi","smil"], + ["application/srgs","gram"], + ["application/srgs+xml","grxml"], + ["application/vnd.adobe.apollo-application-installer-package+zip","air"], + ["application/vnd.mif","mif"], + ["application/vnd.mozilla.xul+xml","xul"], + ["application/vnd.ms-excel","xls"], + ["application/vnd.ms-powerpoint","ppt"], + ["application/vnd.rn-realmedia","rm"], + ["application/vnd.wap.wbxml","wbxml"], + ["application/vnd.wap.wmlc","wmlc"], + ["application/vnd.wap.wmlscriptc","wmlsc"], + ["application/voicexml+xml","vxml"], + ["application/x-bcpio","bcpio"], + ["application/x-cdlink","vcd"], + ["application/x-chess-pgn","pgn"], + ["application/x-cpio","cpio"], + ["application/x-csh","csh"], + ["application/x-director","dcr","dir","dxr"], + ["application/x-dvi","dvi"], + ["application/x-futuresplash","spl"], + ["application/x-gtar","gtar"], + ["application/x-hdf","hdf"], + ["application/x-javascript","js"], + ["application/x-koan","skp","skd","skt","skm"], + ["application/x-latex","latex"], + ["application/x-netcdf","nc","cdf"], + ["application/x-sh","sh"], + ["application/x-shar","shar"], + ["application/x-shockwave-flash","swf"], + ["application/x-stuffit","sit"], + ["application/x-sv4cpio","sv4cpio"], + ["application/x-sv4crc","sv4crc"], + ["application/x-tar","tar"], + ["application/x-tcl","tcl"], + ["application/x-tex","tex"], + ["application/x-texinfo","texinfo","texi"], + ["application/x-troff","t","tr","roff"], + ["application/x-troff-man","man"], + ["application/x-troff-me","me"], + ["application/x-troff-ms","ms"], + ["application/x-ustar","ustar"], + ["application/x-wais-source","src"], + ["application/xhtml+xml","xhtml","xht"], + ["application/xml","xml","xsl"], + ["application/xml-dtd","dtd"], + ["application/xslt+xml","xslt"], + ["application/zip","zip"], + ["audio/basic","au","snd"], + ["audio/midi","mid","midi","kar"], + ["audio/mp4","f4a"], + ["audio/mp4","f4b"], + ["audio/mpeg","mp3","mpga","mp2"], + ["audio/x-aiff","aif","aiff","aifc"], + ["audio/x-mpegurl","m3u"], + ["audio/x-pn-realaudio","ram","ra"], + ["audio/x-wav","wav"], + ["chemical/x-pdb","pdb"], + ["chemical/x-xyz","xyz"], + ["image/bmp","bmp"], + ["image/cgm","cgm"], + ["image/gif","gif"], + ["image/ief","ief"], + ["image/jpeg","jpg","jpeg","jpe"], + ["image/png","png"], + ["image/svg+xml","svg"], + ["image/tiff","tiff","tif"], + ["image/vnd.djvu","djvu","djv"], + ["image/vnd.wap.wbmp","wbmp"], + ["image/x-cmu-raster","ras"], + ["image/x-icon","ico"], + ["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-xbitmap","xbm"], + ["image/x-xpixmap","xpm"], + ["image/x-xwindowdump","xwd"], + ["model/iges","igs","iges"], + ["model/mesh","msh","mesh","silo"], + ["model/vrml","wrl","vrml"], + ["text/calendar","ics","ifb"], + ["text/css","css"], + ["text/html","html","htm"], + ["text/plain","txt","asc"], + ["text/richtext","rtx"], + ["text/rtf","rtf"], + ["text/sgml","sgml","sgm"], + ["text/tab-separated-values","tsv"], + ["text/vnd.wap.wml","wml"], + ["text/vnd.wap.wmlscript","wmls"], + ["text/x-setext","etx"], + ["video/mp4","f4v"], + ["video/mp4","f4p"], + ["video/mpeg","mpg","mpeg","mpe"], + ["video/quicktime","mov","qt"], + ["video/vnd.mpegurl","m4u","mxu"], + ["video/x-flv","flv"], + ["video/x-msvideo","avi"], + ["video/x-sgi-movie","movie"], + ["x-conference/x-cooltalk","ice"]]; + + /** + * Returns the mimetype for the given extension. + */ + public function getMimeType(extension:String):String + { + extension = extension.toLocaleLowerCase(); + for each (var a:Array in types) + { + for each (var b:String in a) + { + if (b == extension) + { + return a[0]; + } + } + } + return null; + } + + /** + * Returns the prefered extension for the given mimetype. + */ + public function getExtension(mimetype:String):String + { + mimetype = mimetype.toLocaleLowerCase(); + for each (var a:Array in types) + { + if (a[0] == mimetype) + { + return a[1]; + } + } + return null; + } + + /** + * Adds a mimetype to the map. The order of the extensions matters. The most preferred should come first. + */ + public function addMimeType(mimetype:String, extensions:Array):void + { + var newType:Array = [mimetype]; + for each (var a:String in extensions) + { + newType.push(a); + } + types.push(newType); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/net/URI.as b/DISPLAYER/com/adobe/net/URI.as new file mode 100644 index 0000000000000000000000000000000000000000..ea8e2c555a3304c1dfbd6c92f2b6beeb2521071d --- /dev/null +++ b/DISPLAYER/com/adobe/net/URI.as @@ -0,0 +1,2466 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.net +{ + import flash.utils.ByteArray; + + /** + * This class implements functions and utilities for working with URI's + * (Universal Resource Identifiers). For technical description of the + * URI syntax, please see RFC 3986 at http://www.ietf.org/rfc/rfc3986.txt + * or do a web search for "rfc 3986". + * + *

The most important aspect of URI's to understand is that URI's + * and URL's are not strings. URI's are complex data structures that + * encapsulate many pieces of information. The string version of a + * URI is the serialized representation of that data structure. This + * string serialization is used to provide a human readable + * representation and a means to transport the data over the network + * where it can then be parsed back into its' component parts.

+ * + *

URI's fall into one of three categories: + *

    + *
  • <scheme>:<scheme-specific-part>#<fragment> (non-hierarchical)
  • + *
  • <scheme>:<authority><path>?<query>#<fragment> (hierarchical)
  • + *
  • <path>?<query>#<fragment> (relative hierarchical)
  • + *

+ * + *

The query and fragment parts are optional.

+ * + *

This class supports both non-hierarchical and hierarchical URI's

+ * + *

This class is intended to be used "as-is" for the vast majority + * of common URI's. However, if your application requires a custom + * URI syntax (e.g. custom query syntax or special handling of + * non-hierarchical URI's), this class can be fully subclassed. If you + * intended to subclass URI, please see the source code for complete + * documation on protected members and protected fuctions.

+ * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public class URI + { + // Here we define which characters must be escaped for each + // URI part. The characters that must be escaped for each + // part differ depending on what would cause ambiguous parsing. + // RFC 3986 sec. 2.4 states that characters should only be + // encoded when they would conflict with subcomponent delimiters. + // We don't want to over-do the escaping. We only want to escape + // the minimum needed to prevent parsing problems. + + // space and % must be escaped in all cases. '%' is the delimiter + // for escaped characters. + public static const URImustEscape:String = " %"; + + // Baseline of what characters must be escaped + public static const URIbaselineEscape:String = URImustEscape + ":?#/@"; + + // Characters that must be escaped in the part part. + public static const URIpathEscape:String = URImustEscape + "?#"; + + // Characters that must be escaped in the query part, if setting + // the query as a whole string. If the query is set by + // name/value, URIqueryPartEscape is used instead. + public static const URIqueryEscape:String = URImustEscape + "#"; + + // This is what each name/value pair must escape "&=" as well + // so they don't conflict with the "param=value¶m2=value2" + // syntax. + public static const URIqueryPartEscape:String = URImustEscape + "#&="; + + // Non-hierarchical URI's can have query and fragment parts, but + // we also want to prevent '/' otherwise it might end up looking + // like a hierarchical URI to the parser. + public static const URInonHierEscape:String = URImustEscape + "?#/"; + + // Baseline uninitialized setting for the URI scheme. + public static const UNKNOWN_SCHEME:String = "unknown"; + + // The following bitmaps are used for performance enhanced + // character escaping. + + // Baseline characters that need to be escaped. Many parts use + // this. + protected static const URIbaselineExcludedBitmap:URIEncodingBitmap = + new URIEncodingBitmap(URIbaselineEscape); + + // Scheme escaping bitmap + protected static const URIschemeExcludedBitmap:URIEncodingBitmap = + URIbaselineExcludedBitmap; + + // User/pass escaping bitmap + protected static const URIuserpassExcludedBitmap:URIEncodingBitmap = + URIbaselineExcludedBitmap; + + // Authority escaping bitmap + protected static const URIauthorityExcludedBitmap:URIEncodingBitmap = + URIbaselineExcludedBitmap; + + // Port escaping bitmap + protected static const URIportExludedBitmap:URIEncodingBitmap = + URIbaselineExcludedBitmap; + + // Path escaping bitmap + protected static const URIpathExcludedBitmap:URIEncodingBitmap = + new URIEncodingBitmap(URIpathEscape); + + // Query (whole) escaping bitmap + protected static const URIqueryExcludedBitmap:URIEncodingBitmap = + new URIEncodingBitmap(URIqueryEscape); + + // Query (individual parts) escaping bitmap + protected static const URIqueryPartExcludedBitmap:URIEncodingBitmap = + new URIEncodingBitmap(URIqueryPartEscape); + + // Fragments are the last part in the URI. They only need to + // escape space, '#', and '%'. Turns out that is what query + // uses too. + protected static const URIfragmentExcludedBitmap:URIEncodingBitmap = + URIqueryExcludedBitmap; + + // Characters that need to be escaped in the non-hierarchical part + protected static const URInonHierexcludedBitmap:URIEncodingBitmap = + new URIEncodingBitmap(URInonHierEscape); + + // Values used by getRelation() + public static const NOT_RELATED:int = 0; + public static const CHILD:int = 1; + public static const EQUAL:int = 2; + public static const PARENT:int = 3; + + //------------------------------------------------------------------- + // protected class members + //------------------------------------------------------------------- + protected var _valid:Boolean = false; + protected var _relative:Boolean = false; + protected var _scheme:String = ""; + protected var _authority:String = ""; + protected var _username:String = ""; + protected var _password:String = ""; + protected var _port:String = ""; + protected var _path:String = ""; + protected var _query:String = ""; + protected var _fragment:String = ""; + protected var _nonHierarchical:String = ""; + protected static var _resolver:IURIResolver = null; + + + /** + * URI Constructor. If no string is given, this will initialize + * this URI object to a blank URI. + */ + public function URI(uri:String = null) : void + { + if (uri == null) + initialize(); + else + constructURI(uri); + } + + + /** + * @private + * Method that loads the URI from the given string. + */ + protected function constructURI(uri:String) : Boolean + { + if (!parseURI(uri)) + _valid = false; + + return isValid(); + } + + + /** + * @private Private initializiation. + */ + protected function initialize() : void + { + _valid = false; + _relative = false; + + _scheme = UNKNOWN_SCHEME; + _authority = ""; + _username = ""; + _password = ""; + _port = ""; + _path = ""; + _query = ""; + _fragment = ""; + + _nonHierarchical = ""; + } + + /** + * @private Accessor to explicitly set/get the hierarchical + * state of the URI. + */ + protected function set hierState(state:Boolean) : void + { + if (state) + { + // Clear the non-hierarchical data + _nonHierarchical = ""; + + // Also set the state vars while we are at it + if (_scheme == "" || _scheme == UNKNOWN_SCHEME) + _relative = true; + else + _relative = false; + + if (_authority.length == 0 && _path.length == 0) + _valid = false; + else + _valid = true; + } + else + { + // Clear the hierarchical data + _authority = ""; + _username = ""; + _password = ""; + _port = ""; + _path = ""; + + _relative = false; + + if (_scheme == "" || _scheme == UNKNOWN_SCHEME) + _valid = false; + else + _valid = true; + } + } + protected function get hierState() : Boolean + { + return (_nonHierarchical.length == 0); + } + + + /** + * @private Functions that performs some basic consistency validation. + */ + protected function validateURI() : Boolean + { + // Check the scheme + if (isAbsolute()) + { + if (_scheme.length <= 1 || _scheme == UNKNOWN_SCHEME) + { + // we probably parsed a C:\ type path or no scheme + return false; + } + else if (verifyAlpha(_scheme) == false) + return false; // Scheme contains bad characters + } + + if (hierState) + { + if (_path.search('\\') != -1) + return false; // local path + else if (isRelative() == false && _scheme == UNKNOWN_SCHEME) + return false; // It's an absolute URI, but it has a bad scheme + } + else + { + if (_nonHierarchical.search('\\') != -1) + return false; // some kind of local path + } + + // Looks like it's ok. + return true; + } + + + /** + * @private + * + * Given a URI in string format, parse that sucker into its basic + * components and assign them to this object. A URI is of the form: + * <scheme>:<authority><path>?<query>#<fragment> + * + * For simplicity, we parse the URI in the following order: + * + * 1. Fragment (anchors) + * 2. Query (CGI stuff) + * 3. Scheme ("http") + * 4. Authority (host name) + * 5. Username/Password (if any) + * 6. Port (server port if any) + * 7. Path (/homepages/mypage.html) + * + * The reason for this order is to minimize any parsing ambiguities. + * Fragments and queries can contain almost anything (they are parts + * that can contain custom data with their own syntax). Parsing + * them out first removes a large chance of parsing errors. This + * method expects well formed URI's, but performing the parse in + * this order makes us a little more tolerant of user error. + * + * REGEXP + * Why doesn't this use regular expressions to parse the URI? We + * have found that in a real world scenario, URI's are not always + * well formed. Sometimes characters that should have been escaped + * are not, and those situations would break a regexp pattern. This + * function attempts to be smart about what it is parsing based on + * location of characters relative to eachother. This function has + * been proven through real-world use to parse the vast majority + * of URI's correctly. + * + * NOTE + * It is assumed that the string in URI form is escaped. This function + * does not escape anything. If you constructed the URI string by + * hand, and used this to parse in the URI and still need it escaped, + * call forceEscape() on your URI object. + * + * Parsing Assumptions + * This routine assumes that the URI being passed is well formed. + * Passing things like local paths, malformed URI's, and the such + * will result in parsing errors. This function can handle + * - absolute hierarchical (e.g. "http://something.com/index.html), + * - relative hierarchical (e.g. "../images/flower.gif"), or + * - non-hierarchical URIs (e.g. "mailto:jsmith@fungoo.com"). + * + * Anything else will probably result in a parsing error, or a bogus + * URI object. + * + * Note that non-hierarchical URIs *MUST* have a scheme, otherwise + * they will be mistaken for relative URI's. + * + * If you are not sure what is being passed to you (like manually + * entered text from UI), you can construct a blank URI object and + * call unknownToURI() passing in the unknown string. + * + * @return true if successful, false if there was some kind of + * parsing error + */ + protected function parseURI(uri:String) : Boolean + { + var baseURI:String = uri; + var index:int, index2:int; + + // Make sure this object is clean before we start. If it was used + // before and we are now parsing a new URI, we don't want any stale + // info lying around. + initialize(); + + // Remove any fragments (anchors) from the URI + index = baseURI.indexOf("#"); + if (index != -1) + { + // Store the fragment piece if any + if (baseURI.length > (index + 1)) // +1 is to skip the '#' + _fragment = baseURI.substr(index + 1, baseURI.length - (index + 1)); + + // Trim off the fragment + baseURI = baseURI.substr(0, index); + } + + // We need to strip off any CGI parameters (eg '?param=bob') + index = baseURI.indexOf("?"); + if (index != -1) + { + if (baseURI.length > (index + 1)) + _query = baseURI.substr(index + 1, baseURI.length - (index + 1)); // +1 is to skip the '?' + + // Trim off the query + baseURI = baseURI.substr(0, index); + } + + // Now try to find the scheme part + index = baseURI.search(':'); + index2 = baseURI.search('/'); + + var containsColon:Boolean = (index != -1); + var containsSlash:Boolean = (index2 != -1); + + // This value is indeterminate if "containsColon" is false. + // (if there is no colon, does the slash come before or + // after said non-existing colon?) + var colonBeforeSlash:Boolean = (!containsSlash || index < index2); + + // If it has a colon and it's before the first slash, we will treat + // it as a scheme. If a slash is before a colon, there must be a + // stray colon in a path or something. In which case, the colon is + // not the separator for the scheme. Technically, we could consider + // this an error, but since this is not an ambiguous state (we know + // 100% that this has no scheme), we will keep going. + if (containsColon && colonBeforeSlash) + { + // We found a scheme + _scheme = baseURI.substr(0, index); + + // Normalize the scheme + _scheme = _scheme.toLowerCase(); + + baseURI = baseURI.substr(index + 1); + + if (baseURI.substr(0, 2) == "//") + { + // This is a hierarchical URI + _nonHierarchical = ""; + + // Trim off the "//" + baseURI = baseURI.substr(2, baseURI.length - 2); + } + else + { + // This is a non-hierarchical URI like "mailto:bob@mail.com" + _nonHierarchical = baseURI; + + if ((_valid = validateURI()) == false) + initialize(); // Bad URI. Clear it. + + // No more parsing to do for this case + return isValid(); + } + } + else + { + // No scheme. We will consider this a relative URI + _scheme = ""; + _relative = true; + _nonHierarchical = ""; + } + + // Ok, what we have left is everything after the :// + + // Now that we have stripped off any query and fragment parts, we + // need to split the authority from the path + + if (isRelative()) + { + // Don't bother looking for the authority. It's a relative URI + _authority = ""; + _port = ""; + _path = baseURI; + } + else + { + // Check for malformed UNC style file://///server/type/path/ + // By the time we get here, we have already trimmed the "file://" + // so baseURI will be ///server/type/path. If baseURI only + // has one slash, we leave it alone because that is valid (that + // is the case of "file:///path/to/file.txt" where there is no + // server - implicit "localhost"). + if (baseURI.substr(0, 2) == "//") + { + // Trim all leading slashes + while(baseURI.charAt(0) == "/") + baseURI = baseURI.substr(1, baseURI.length - 1); + } + + index = baseURI.search('/'); + if (index == -1) + { + // No path. We must have passed something like "http://something.com" + _authority = baseURI; + _path = ""; + } + else + { + _authority = baseURI.substr(0, index); + _path = baseURI.substr(index, baseURI.length - index); + } + + // Check to see if the URI has any username or password information. + // For example: ftp://username:password@server.com + index = _authority.search('@'); + if (index != -1) + { + // We have a username and possibly a password + _username = _authority.substr(0, index); + + // Remove the username/password from the authority + _authority = _authority.substr(index + 1); // Skip the '@' + + // Now check to see if the username also has a password + index = _username.search(':'); + if (index != -1) + { + _password = _username.substring(index + 1, _username.length); + _username = _username.substr(0, index); + } + else + _password = ""; + } + else + { + _username = ""; + _password = ""; + } + + // Lastly, check to see if the authorty has a port number. + // This is parsed after the username/password to avoid conflicting + // with the ':' in the 'username:password' if one exists. + index = _authority.search(':'); + if (index != -1) + { + _port = _authority.substring(index + 1, _authority.length); // skip the ':' + _authority = _authority.substr(0, index); + } + else + { + _port = ""; + } + + // Lastly, normalize the authority. Domain names + // are case insensitive. + _authority = _authority.toLowerCase(); + } + + if ((_valid = validateURI()) == false) + initialize(); // Bad URI. Clear it + + return isValid(); + } + + + /******************************************************************** + * Copy function. + */ + public function copyURI(uri:URI) : void + { + this._scheme = uri._scheme; + this._authority = uri._authority; + this._username = uri._username; + this._password = uri._password; + this._port = uri._port; + this._path = uri._path; + this._query = uri._query; + this._fragment = uri._fragment; + this._nonHierarchical = uri._nonHierarchical; + + this._valid = uri._valid; + this._relative = uri._relative; + } + + + /** + * @private + * Checks if the given string only contains a-z or A-Z. + */ + protected function verifyAlpha(str:String) : Boolean + { + var pattern:RegExp = /[^a-z]/; + var index:int; + + str = str.toLowerCase(); + index = str.search(pattern); + + if (index == -1) + return true; + else + return false; + } + + /** + * Is this a valid URI? + * + * @return true if this object represents a valid URI, false + * otherwise. + */ + public function isValid() : Boolean + { + return this._valid; + } + + + /** + * Is this URI an absolute URI? An absolute URI is a complete, fully + * qualified reference to a resource. e.g. http://site.com/index.htm + * Non-hierarchical URI's are always absolute. + */ + public function isAbsolute() : Boolean + { + return !this._relative; + } + + + /** + * Is this URI a relative URI? Relative URI's do not have a scheme + * and only contain a relative path with optional anchor and query + * parts. e.g. "../reports/index.htm". Non-hierarchical URI's + * will never be relative. + */ + public function isRelative() : Boolean + { + return this._relative; + } + + + /** + * Does this URI point to a resource that is a directory/folder? + * The URI specification dictates that any path that ends in a slash + * is a directory. This is needed to be able to perform correct path + * logic when combining relative URI's with absolute URI's to + * obtain the correct absolute URI to a resource. + * + * @see URI.chdir + * + * @return true if this URI represents a directory resource, false + * if this URI represents a file resource. + */ + public function isDirectory() : Boolean + { + if (_path.length == 0) + return false; + + return (_path.charAt(path.length - 1) == '/'); + } + + + /** + * Is this URI a hierarchical URI? URI's can be + */ + public function isHierarchical() : Boolean + { + return hierState; + } + + + /** + * The scheme of the URI. + */ + public function get scheme() : String + { + return URI.unescapeChars(_scheme); + } + public function set scheme(schemeStr:String) : void + { + // Normalize the scheme + var normalized:String = schemeStr.toLowerCase(); + _scheme = URI.fastEscapeChars(normalized, URI.URIschemeExcludedBitmap); + } + + + /** + * The authority (host) of the URI. Only valid for + * hierarchical URI's. If the URI is relative, this will + * be an empty string. When setting this value, the string + * given is assumed to be unescaped. When retrieving this + * value, the resulting string is unescaped. + */ + public function get authority() : String + { + return URI.unescapeChars(_authority); + } + public function set authority(authorityStr:String) : void + { + // Normalize the authority + authorityStr = authorityStr.toLowerCase(); + + _authority = URI.fastEscapeChars(authorityStr, + URI.URIauthorityExcludedBitmap); + + // Only hierarchical URI's can have an authority, make + // sure this URI is of the proper format. + this.hierState = true; + } + + + /** + * The username of the URI. Only valid for hierarchical + * URI's. If the URI is relative, this will be an empty + * string. + * + *

The URI specification allows for authentication + * credentials to be embedded in the URI as such:

+ * + *

http://user:passwd@host/path/to/file.htm

+ * + *

When setting this value, the string + * given is assumed to be unescaped. When retrieving this + * value, the resulting string is unescaped.

+ */ + public function get username() : String + { + return URI.unescapeChars(_username); + } + public function set username(usernameStr:String) : void + { + _username = URI.fastEscapeChars(usernameStr, URI.URIuserpassExcludedBitmap); + + // Only hierarchical URI's can have a username. + this.hierState = true; + } + + + /** + * The password of the URI. Similar to username. + * @see URI.username + */ + public function get password() : String + { + return URI.unescapeChars(_password); + } + public function set password(passwordStr:String) : void + { + _password = URI.fastEscapeChars(passwordStr, + URI.URIuserpassExcludedBitmap); + + // Only hierarchical URI's can have a password. + this.hierState = true; + } + + + /** + * The host port number. Only valid for hierarchical URI's. If + * the URI is relative, this will be an empty string. URI's can + * contain the port number of the remote host: + * + *

http://site.com:8080/index.htm

+ */ + public function get port() : String + { + return URI.unescapeChars(_port); + } + public function set port(portStr:String) : void + { + _port = URI.escapeChars(portStr); + + // Only hierarchical URI's can have a port. + this.hierState = true; + } + + + /** + * The path portion of the URI. Only valid for hierarchical + * URI's. When setting this value, the string + * given is assumed to be unescaped. When retrieving this + * value, the resulting string is unescaped. + * + *

The path portion can be in one of two formats. 1) an absolute + * path, or 2) a relative path. An absolute path starts with a + * slash ('/'), a relative path does not.

+ * + *

An absolute path may look like:

+ * /full/path/to/my/file.htm + * + *

A relative path may look like:

+ * + * path/to/my/file.htm + * ../images/logo.gif + * ../../reports/index.htm + * + * + *

Paths can be absolute or relative. Note that this not the same as + * an absolute or relative URI. An absolute URI can only have absolute + * paths. For example:

+ * + * http:/site.com/path/to/file.htm + * + *

This absolute URI has an absolute path of "/path/to/file.htm".

+ * + *

Relative URI's can have either absolute paths or relative paths. + * All of the following relative URI's are valid:

+ * + * + * /absolute/path/to/file.htm + * path/to/file.htm + * ../path/to/file.htm + * + */ + public function get path() : String + { + return URI.unescapeChars(_path); + } + public function set path(pathStr:String) : void + { + this._path = URI.fastEscapeChars(pathStr, URI.URIpathExcludedBitmap); + + if (this._scheme == UNKNOWN_SCHEME) + { + // We set the path. This is a valid URI now. + this._scheme = ""; + } + + // Only hierarchical URI's can have a path. + hierState = true; + } + + + /** + * The query (CGI) portion of the URI. This part is valid for + * both hierarchical and non-hierarchical URI's. + * + *

This accessor should only be used if a custom query syntax + * is used. This URI class supports the common "param=value" + * style query syntax via the get/setQueryValue() and + * get/setQueryByMap() functions. Those functions should be used + * instead if the common syntax is being used. + * + *

The URI RFC does not specify any particular + * syntax for the query part of a URI. It is intended to allow + * any format that can be agreed upon by the two communicating hosts. + * However, most systems have standardized on the typical CGI + * format:

+ * + * http://site.com/script.php?param1=value1¶m2=value2 + * + *

This class has specific support for this query syntax

+ * + *

This common query format is an array of name/value + * pairs with its own syntax that is different from the overall URI + * syntax. The query has its own escaping logic. For a query part + * to be properly escaped and unescaped, it must be split into its + * component parts. This accessor escapes/unescapes the entire query + * part without regard for it's component parts. This has the + * possibliity of leaving the query string in an ambiguious state in + * regards to its syntax. If the contents of the query part are + * important, it is recommended that get/setQueryValue() or + * get/setQueryByMap() are used instead.

+ * + * If a different query syntax is being used, a subclass of URI + * can be created to handle that specific syntax. + * + * @see URI.getQueryValue, URI.getQueryByMap + */ + public function get query() : String + { + return URI.unescapeChars(_query); + } + public function set query(queryStr:String) : void + { + _query = URI.fastEscapeChars(queryStr, URI.URIqueryExcludedBitmap); + + // both hierarchical and non-hierarchical URI's can + // have a query. Do not set the hierState. + } + + /** + * Accessor to the raw query data. If you are using a custom query + * syntax, this accessor can be used to get and set the query part + * directly with no escaping/unescaping. This should ONLY be used + * if your application logic is handling custom query logic and + * handling the proper escaping of the query part. + */ + public function get queryRaw() : String + { + return _query; + } + public function set queryRaw(queryStr:String) : void + { + _query = queryStr; + } + + + /** + * The fragment (anchor) portion of the URI. This is valid for + * both hierarchical and non-hierarchical URI's. + */ + public function get fragment() : String + { + return URI.unescapeChars(_fragment); + } + public function set fragment(fragmentStr:String) : void + { + _fragment = URI.fastEscapeChars(fragmentStr, URIfragmentExcludedBitmap); + + // both hierarchical and non-hierarchical URI's can + // have a fragment. Do not set the hierState. + } + + + /** + * The non-hierarchical part of the URI. For example, if + * this URI object represents "mailto:somebody@company.com", + * this will contain "somebody@company.com". This is valid only + * for non-hierarchical URI's. + */ + public function get nonHierarchical() : String + { + return URI.unescapeChars(_nonHierarchical); + } + public function set nonHierarchical(nonHier:String) : void + { + _nonHierarchical = URI.fastEscapeChars(nonHier, URInonHierexcludedBitmap); + + // This is a non-hierarchical URI. + this.hierState = false; + } + + + /** + * Quick shorthand accessor to set the parts of this URI. + * The given parts are assumed to be in unescaped form. If + * the URI is non-hierarchical (e.g. mailto:) you will need + * to call SetScheme() and SetNonHierarchical(). + */ + public function setParts(schemeStr:String, authorityStr:String, + portStr:String, pathStr:String, queryStr:String, + fragmentStr:String) : void + { + this.scheme = schemeStr; + this.authority = authorityStr; + this.port = portStr; + this.path = pathStr; + this.query = queryStr; + this.fragment = fragmentStr; + + hierState = true; + } + + + /** + * URI escapes the given character string. This is similar in function + * to the global encodeURIComponent() function in ActionScript, but is + * slightly different in regards to which characters get escaped. This + * escapes the characters specified in the URIbaselineExluded set (see class + * static members). This is needed for this class to work properly. + * + *

If a different set of characters need to be used for the escaping, + * you may use fastEscapeChars() and specify a custom URIEncodingBitmap + * that contains the characters your application needs escaped.

+ * + *

Never pass a full URI to this function. A URI can only be properly + * escaped/unescaped when split into its component parts (see RFC 3986 + * section 2.4). This is due to the fact that the URI component separators + * could be characters that would normally need to be escaped.

+ * + * @param unescaped character string to be escaped. + * + * @return escaped character string + * + * @see encodeURIComponent + * @see fastEscapeChars + */ + static public function escapeChars(unescaped:String) : String + { + // This uses the excluded set by default. + return fastEscapeChars(unescaped, URI.URIbaselineExcludedBitmap); + } + + + /** + * Unescape any URI escaped characters in the given character + * string. + * + *

Never pass a full URI to this function. A URI can only be properly + * escaped/unescaped when split into its component parts (see RFC 3986 + * section 2.4). This is due to the fact that the URI component separators + * could be characters that would normally need to be escaped.

+ * + * @param escaped the escaped string to be unescaped. + * + * @return unescaped string. + */ + static public function unescapeChars(escaped:String /*, onlyHighASCII:Boolean = false*/) : String + { + // We can just use the default AS function. It seems to + // decode everything correctly + var unescaped:String; + unescaped = decodeURIComponent(escaped); + return unescaped; + } + + /** + * Performance focused function that escapes the given character + * string using the given URIEncodingBitmap as the rule for what + * characters need to be escaped. This function is used by this + * class and can be used externally to this class to perform + * escaping on custom character sets. + * + *

Never pass a full URI to this function. A URI can only be properly + * escaped/unescaped when split into its component parts (see RFC 3986 + * section 2.4). This is due to the fact that the URI component separators + * could be characters that would normally need to be escaped.

+ * + * @param unescaped the unescaped string to be escaped + * @param bitmap the set of characters that need to be escaped + * + * @return the escaped string. + */ + static public function fastEscapeChars(unescaped:String, bitmap:URIEncodingBitmap) : String + { + var escaped:String = ""; + var c:String; + var x:int, i:int; + + for (i = 0; i < unescaped.length; i++) + { + c = unescaped.charAt(i); + + x = bitmap.ShouldEscape(c); + if (x) + { + c = x.toString(16); + if (c.length == 1) + c = "0" + c; + + c = "%" + c; + c = c.toUpperCase(); + } + + escaped += c; + } + + return escaped; + } + + + /** + * Is this URI of a particular scheme type? For example, + * passing "http" to a URI object that represents the URI + * "http://site.com/" would return true. + * + * @param scheme scheme to check for + * + * @return true if this URI object is of the given type, false + * otherwise. + */ + public function isOfType(scheme:String) : Boolean + { + // Schemes are never case sensitive. Ignore case. + scheme = scheme.toLowerCase(); + return (this._scheme == scheme); + } + + + /** + * Get the value for the specified named in the query part. This + * assumes the query part of the URI is in the common + * "name1=value1&name2=value2" syntax. Do not call this function + * if you are using a custom query syntax. + * + * @param name name of the query value to get. + * + * @return the value of the query name, empty string if the + * query name does not exist. + */ + public function getQueryValue(name:String) : String + { + var map:Object; + var item:String; + var value:String; + + map = getQueryByMap(); + + for (item in map) + { + if (item == name) + { + value = map[item]; + return value; + } + } + + // Didn't find the specified key + return new String(""); + } + + + /** + * Set the given value on the given query name. If the given name + * does not exist, it will automatically add this name/value pair + * to the query. If null is passed as the value, it will remove + * the given item from the query. + * + *

This automatically escapes any characters that may conflict with + * the query syntax so that they are "safe" within the query. The + * strings passed are assumed to be literal unescaped name and value.

+ * + * @param name name of the query value to set + * @param value value of the query item to set. If null, this will + * force the removal of this item from the query. + */ + public function setQueryValue(name:String, value:String) : void + { + var map:Object; + + map = getQueryByMap(); + + // If the key doesn't exist yet, this will create a new pair in + // the map. If it does exist, this will overwrite the previous + // value, which is what we want. + map[name] = value; + + setQueryByMap(map); + } + + + /** + * Get the query of the URI in an Object class that allows for easy + * access to the query data via Object accessors. For example: + * + * + * var query:Object = uri.getQueryByMap(); + * var value:String = query["param"]; // get a value + * query["param2"] = "foo"; // set a new value + * + * + * @return Object that contains the name/value pairs of the query. + * + * @see #setQueryByMap + * @see #getQueryValue + * @see #setQueryValue + */ + public function getQueryByMap() : Object + { + var queryStr:String; + var pair:String; + var pairs:Array; + var item:Array; + var name:String, value:String; + var index:int; + var map:Object = new Object(); + + + // We need the raw query string, no unescaping. + queryStr = this._query; + + pairs = queryStr.split('&'); + for each (pair in pairs) + { + if (pair.length == 0) + continue; + + item = pair.split('='); + + if (item.length > 0) + name = item[0]; + else + continue; // empty array + + if (item.length > 1) + value = item[1]; + else + value = ""; + + name = queryPartUnescape(name); + value = queryPartUnescape(value); + + map[name] = value; + } + + return map; + } + + + /** + * Set the query part of this URI using the given object as the + * content source. Any member of the object that has a value of + * null will not be in the resulting query. + * + * @param map object that contains the name/value pairs as + * members of that object. + * + * @see #getQueryByMap + * @see #getQueryValue + * @see #setQueryValue + */ + public function setQueryByMap(map:Object) : void + { + var item:String; + var name:String, value:String; + var queryStr:String = ""; + var tmpPair:String; + var foo:String; + + for (item in map) + { + name = item; + value = map[item]; + + if (value == null) + value = ""; + + // Need to escape the name/value pair so that they + // don't conflict with the query syntax (specifically + // '=', '&', and ). + name = queryPartEscape(name); + value = queryPartEscape(value); + + tmpPair = name; + + if (value.length > 0) + { + tmpPair += "="; + tmpPair += value; + } + + if (queryStr.length != 0) + queryStr += '&'; // Add the separator + + queryStr += tmpPair; + } + + // We don't want to escape. We already escaped the + // individual name/value pairs. If we escaped the + // query string again by assigning it to "query", + // we would have double escaping. + _query = queryStr; + } + + + /** + * Similar to Escape(), except this also escapes characters that + * would conflict with the name/value pair query syntax. This is + * intended to be called on each individual "name" and "value" + * in the query making sure that nothing in the name or value + * strings contain characters that would conflict with the query + * syntax (e.g. '=' and '&'). + * + * @param unescaped unescaped string that is to be escaped. + * + * @return escaped string. + * + * @see #queryUnescape + */ + static public function queryPartEscape(unescaped:String) : String + { + var escaped:String = unescaped; + escaped = URI.fastEscapeChars(unescaped, URI.URIqueryPartExcludedBitmap); + return escaped; + } + + + /** + * Unescape the individual name/value string pairs. + * + * @param escaped escaped string to be unescaped + * + * @return unescaped string + * + * @see #queryEscape + */ + static public function queryPartUnescape(escaped:String) : String + { + var unescaped:String = escaped; + unescaped = unescapeChars(unescaped); + return unescaped; + } + + /** + * Output this URI as a string. The resulting string is properly + * escaped and well formed for machine processing. + */ + public function toString() : String + { + if (this == null) + return ""; + else + return toStringInternal(false); + } + + /** + * Output the URI as a string that is easily readable by a human. + * This outputs the URI with all escape sequences unescaped to + * their character representation. This makes the URI easier for + * a human to read, but the URI could be completely invalid + * because some unescaped characters may now cause ambiguous parsing. + * This function should only be used if you want to display a URI to + * a user. This function should never be used outside that specific + * case. + * + * @return the URI in string format with all escape sequences + * unescaped. + * + * @see #toString + */ + public function toDisplayString() : String + { + return toStringInternal(true); + } + + + /** + * @private + * + * The guts of toString() + */ + protected function toStringInternal(forDisplay:Boolean) : String + { + var uri:String = ""; + var part:String = ""; + + if (isHierarchical() == false) + { + // non-hierarchical URI + + uri += (forDisplay ? this.scheme : _scheme); + uri += ":"; + uri += (forDisplay ? this.nonHierarchical : _nonHierarchical); + } + else + { + // Hierarchical URI + + if (isRelative() == false) + { + // If it is not a relative URI, then we want the scheme and + // authority parts in the string. If it is relative, we + // do NOT want this stuff. + + if (_scheme.length != 0) + { + part = (forDisplay ? this.scheme : _scheme); + uri += part + ":"; + } + + if (_authority.length != 0 || isOfType("file")) + { + uri += "//"; + + // Add on any username/password associated with this + // authority + if (_username.length != 0) + { + part = (forDisplay ? this.username : _username); + uri += part; + + if (_password.length != 0) + { + part = (forDisplay ? this.password : _password); + uri += ":" + part; + } + + uri += "@"; + } + + // add the authority + part = (forDisplay ? this.authority : _authority); + uri += part; + + // Tack on the port number, if any + if (port.length != 0) + uri += ":" + port; + } + } + + // Tack on the path + part = (forDisplay ? this.path : _path); + uri += part; + + } // end hierarchical part + + // Both non-hier and hierarchical have query and fragment parts + + // Add on the query and fragment parts + if (_query.length != 0) + { + part = (forDisplay ? this.query : _query); + uri += "?" + part; + } + + if (fragment.length != 0) + { + part = (forDisplay ? this.fragment : _fragment); + uri += "#" + part; + } + + return uri; + } + + /** + * Forcefully ensure that this URI is properly escaped. + * + *

Sometimes URI's are constructed by hand using strings outside + * this class. In those cases, it is unlikely the URI has been + * properly escaped. This function forcefully escapes this URI + * by unescaping each part and then re-escaping it. If the URI + * did not have any escaping, the first unescape will do nothing + * and then the re-escape will properly escape everything. If + * the URI was already escaped, the unescape and re-escape will + * essentally be a no-op. This provides a safe way to make sure + * a URI is in the proper escaped form.

+ */ + public function forceEscape() : void + { + // The accessors for each of the members will unescape + // and then re-escape as we get and assign them. + + // Handle the parts that are common for both hierarchical + // and non-hierarchical URI's + this.scheme = this.scheme; + this.setQueryByMap(this.getQueryByMap()); + this.fragment = this.fragment; + + if (isHierarchical()) + { + this.authority = this.authority; + this.path = this.path; + this.port = this.port; + this.username = this.username; + this.password = this.password; + } + else + { + this.nonHierarchical = this.nonHierarchical; + } + } + + + /** + * Does this URI point to a resource of the given file type? + * Given a file extension (or just a file name, this will strip the + * extension), check to see if this URI points to a file of that + * type. + * + * @param extension string that contains a file extension with or + * without a dot ("html" and ".html" are both valid), or a file + * name with an extension (e.g. "index.html"). + * + * @return true if this URI points to a resource with the same file + * file extension as the extension provided, false otherwise. + */ + public function isOfFileType(extension:String) : Boolean + { + var thisExtension:String; + var index:int; + + index = extension.lastIndexOf("."); + if (index != -1) + { + // Strip the extension + extension = extension.substr(index + 1); + } + else + { + // The caller passed something without a dot in it. We + // will assume that it is just a plain extension (e.g. "html"). + // What they passed is exactly what we want + } + + thisExtension = getExtension(true); + + if (thisExtension == "") + return false; + + // Compare the extensions ignoring case + if (compareStr(thisExtension, extension, false) == 0) + return true; + else + return false; + } + + + /** + * Get the ".xyz" file extension from the filename in the URI. + * For example, if we have the following URI: + * + * http://something.com/path/to/my/page.html?form=yes&name=bob#anchor + * + *

This will return ".html".

+ * + * @param minusDot If true, this will strip the dot from the extension. + * If true, the above example would have returned "html". + * + * @return the file extension + */ + public function getExtension(minusDot:Boolean = false) : String + { + var filename:String = getFilename(); + var extension:String; + var index:int; + + if (filename == "") + return String(""); + + index = filename.lastIndexOf("."); + + // If it doesn't have an extension, or if it is a "hidden" file, + // it doesn't have an extension. Hidden files on unix start with + // a dot (e.g. ".login"). + if (index == -1 || index == 0) + return String(""); + + extension = filename.substr(index); + + // If the caller does not want the dot, remove it. + if (minusDot && extension.charAt(0) == ".") + extension = extension.substr(1); + + return extension; + } + + /** + * Quick function to retrieve the file name off the end of a URI. + * + *

For example, if the URI is:

+ * http://something.com/some/path/to/my/file.html + *

this function will return "file.html".

+ * + * @param minusExtension true if the file extension should be stripped + * + * @return the file name. If this URI is a directory, the return + * value will be empty string. + */ + public function getFilename(minusExtension:Boolean = false) : String + { + if (isDirectory()) + return String(""); + + var pathStr:String = this.path; + var filename:String; + var index:int; + + // Find the last path separator. + index = pathStr.lastIndexOf("/"); + + if (index != -1) + filename = pathStr.substr(index + 1); + else + filename = pathStr; + + if (minusExtension) + { + // The caller has requested that the extension be removed + index = filename.lastIndexOf("."); + + if (index != -1) + filename = filename.substr(0, index); + } + + return filename; + } + + + /** + * @private + * Helper function to compare strings. + * + * @return true if the two strings are identical, false otherwise. + */ + static protected function compareStr(str1:String, str2:String, + sensitive:Boolean = true) : Boolean + { + if (sensitive == false) + { + str1 = str1.toLowerCase(); + str2 = str2.toLowerCase(); + } + + return (str1 == str2) + } + + /** + * Based on the type of this URI (http, ftp, etc.) get + * the default port used for that protocol. This is + * just intended to be a helper function for the most + * common cases. + */ + public function getDefaultPort() : String + { + if (_scheme == "http") + return String("80"); + else if (_scheme == "ftp") + return String("21"); + else if (_scheme == "file") + return String(""); + else if (_scheme == "sftp") + return String("22"); // ssh standard port + else + { + // Don't know the port for this URI type + return String(""); + } + } + + /** + * @private + * + * This resolves the given URI if the application has a + * resolver interface defined. This function does not + * modify the passed in URI and returns a new URI. + */ + static protected function resolve(uri:URI) : URI + { + var copy:URI = new URI(); + copy.copyURI(uri); + + if (_resolver != null) + { + // A resolver class has been registered. Call it. + return _resolver.resolve(copy); + } + else + { + // No resolver. Nothing to do, but we don't + // want to reuse the one passed in. + return copy; + } + } + + /** + * Accessor to set and get the resolver object used by all URI + * objects to dynamically resolve URI's before comparison. + */ + static public function set resolver(resolver:IURIResolver) : void + { + _resolver = resolver; + } + static public function get resolver() : IURIResolver + { + return _resolver; + } + + /** + * Given another URI, return this URI object's relation to the one given. + * URI's can have 1 of 4 possible relationships. They can be unrelated, + * equal, parent, or a child of the given URI. + * + * @param uri URI to compare this URI object to. + * @param caseSensitive true if the URI comparison should be done + * taking case into account, false if the comparison should be + * performed case insensitive. + * + * @return URI.NOT_RELATED, URI.CHILD, URI.PARENT, or URI.EQUAL + */ + public function getRelation(uri:URI, caseSensitive:Boolean = true) : int + { + // Give the app a chance to resolve these URI's before we compare them. + var thisURI:URI = URI.resolve(this); + var thatURI:URI = URI.resolve(uri); + + if (thisURI.isRelative() || thatURI.isRelative()) + { + // You cannot compare relative URI's due to their lack of context. + // You could have two relative URI's that look like: + // ../../images/ + // ../../images/marketing/logo.gif + // These may appear related, but you have no overall context + // from which to make the comparison. The first URI could be + // from one site and the other URI could be from another site. + return URI.NOT_RELATED; + } + else if (thisURI.isHierarchical() == false || thatURI.isHierarchical() == false) + { + // One or both of the URI's are non-hierarchical. + if (((thisURI.isHierarchical() == false) && (thatURI.isHierarchical() == true)) || + ((thisURI.isHierarchical() == true) && (thatURI.isHierarchical() == false))) + { + // XOR. One is hierarchical and the other is + // non-hierarchical. They cannot be compared. + return URI.NOT_RELATED; + } + else + { + // They are both non-hierarchical + if (thisURI.scheme != thatURI.scheme) + return URI.NOT_RELATED; + + if (thisURI.nonHierarchical != thatURI.nonHierarchical) + return URI.NOT_RELATED; + + // The two non-hierarcical URI's are equal. + return URI.EQUAL; + } + } + + // Ok, this URI and the one we are being compared to are both + // absolute hierarchical URI's. + + if (thisURI.scheme != thatURI.scheme) + return URI.NOT_RELATED; + + if (thisURI.authority != thatURI.authority) + return URI.NOT_RELATED; + + var thisPort:String = thisURI.port; + var thatPort:String = thatURI.port; + + // Different ports are considered completely different servers. + if (thisPort == "") + thisPort = thisURI.getDefaultPort(); + if (thatPort == "") + thatPort = thatURI.getDefaultPort(); + + // Check to see if the port is the default port. + if (thisPort != thatPort) + return URI.NOT_RELATED; + + if (compareStr(thisURI.path, thatURI.path, caseSensitive)) + return URI.EQUAL; + + // Special case check. If we are here, the scheme, authority, + // and port match, and it is not a relative path, but the + // paths did not match. There is a special case where we + // could have: + // http://something.com/ + // http://something.com + // Technically, these are equal. So lets, check for this case. + var thisPath:String = thisURI.path; + var thatPath:String = thatURI.path; + + if ( (thisPath == "/" || thatPath == "/") && + (thisPath == "" || thatPath == "") ) + { + // We hit the special case. These two are equal. + return URI.EQUAL; + } + + // Ok, the paths do not match, but one path may be a parent/child + // of the other. For example, we may have: + // http://something.com/path/to/homepage/ + // http://something.com/path/to/homepage/images/logo.gif + // In this case, the first is a parent of the second (or the second + // is a child of the first, depending on which you compare to the + // other). To make this comparison, we must split the path into + // its component parts (split the string on the '/' path delimiter). + // We then compare the + var thisParts:Array, thatParts:Array; + var thisPart:String, thatPart:String; + var i:int; + + thisParts = thisPath.split("/"); + thatParts = thatPath.split("/"); + + if (thisParts.length > thatParts.length) + { + thatPart = thatParts[thatParts.length - 1]; + if (thatPart.length > 0) + { + // if the last part is not empty, the passed URI is + // not a directory. There is no way the passed URI + // can be a parent. + return URI.NOT_RELATED; + } + else + { + // Remove the empty trailing part + thatParts.pop(); + } + + // This may be a child of the one passed in + for (i = 0; i < thatParts.length; i++) + { + thisPart = thisParts[i]; + thatPart = thatParts[i]; + + if (compareStr(thisPart, thatPart, caseSensitive) == false) + return URI.NOT_RELATED; + } + + return URI.CHILD; + } + else if (thisParts.length < thatParts.length) + { + thisPart = thisParts[thisParts.length - 1]; + if (thisPart.length > 0) + { + // if the last part is not empty, this URI is not a + // directory. There is no way this object can be + // a parent. + return URI.NOT_RELATED; + } + else + { + // Remove the empty trailing part + thisParts.pop(); + } + + // This may be the parent of the one passed in + for (i = 0; i < thisParts.length; i++) + { + thisPart = thisParts[i]; + thatPart = thatParts[i]; + + if (compareStr(thisPart, thatPart, caseSensitive) == false) + return URI.NOT_RELATED; + } + + return URI.PARENT; + } + else + { + // Both URI's have the same number of path components, but + // it failed the equivelence check above. This means that + // the two URI's are not related. + return URI.NOT_RELATED; + } + + // If we got here, the scheme and authority are the same, + // but the paths pointed to two different locations that + // were in different parts of the file system tree + return URI.NOT_RELATED; + } + + /** + * Given another URI, return the common parent between this one + * and the provided URI. + * + * @param uri the other URI from which to find a common parent + * @para caseSensitive true if this operation should be done + * with case sensitive comparisons. + * + * @return the parent URI if successful, null otherwise. + */ + public function getCommonParent(uri:URI, caseSensitive:Boolean = true) : URI + { + var thisURI:URI = URI.resolve(this); + var thatURI:URI = URI.resolve(uri); + + if(!thisURI.isAbsolute() || !thatURI.isAbsolute() || + thisURI.isHierarchical() == false || + thatURI.isHierarchical() == false) + { + // Both URI's must be absolute hierarchical for this to + // make sense. + return null; + } + + var relation:int = thisURI.getRelation(thatURI); + if (relation == URI.NOT_RELATED) + { + // The given URI is not related to this one. No + // common parent. + return null; + } + + thisURI.chdir("."); + thatURI.chdir("."); + + var strBefore:String, strAfter:String; + do + { + relation = thisURI.getRelation(thatURI, caseSensitive); + if(relation == URI.EQUAL || relation == URI.PARENT) + break; + + // If strBefore and strAfter end up being the same, + // we know we are at the root of the path because + // chdir("..") is doing nothing. + strBefore = thisURI.toString(); + thisURI.chdir(".."); + strAfter = thisURI.toString(); + } + while(strBefore != strAfter); + + return thisURI; + } + + + /** + * This function is used to move around in a URI in a way similar + * to the 'cd' or 'chdir' commands on Unix. These operations are + * completely string based, using the context of the URI to + * determine the position within the path. The heuristics used + * to determine the action are based off Appendix C in RFC 2396. + * + *

URI paths that end in '/' are considered paths that point to + * directories, while paths that do not end in '/' are files. For + * example, if you execute chdir("d") on the following URI's:
+ * 1. http://something.com/a/b/c/ (directory)
+ * 2. http://something.com/a/b/c (not directory)
+ * you will get:
+ * 1. http://something.com/a/b/c/d
+ * 2. http://something.com/a/b/d

+ * + *

See RFC 2396, Appendix C for more info.

+ * + * @param reference the URI or path to "cd" to. + * @param escape true if the passed reference string should be URI + * escaped before using it. + * + * @return true if the chdir was successful, false otherwise. + */ + public function chdir(reference:String, escape:Boolean = false) : Boolean + { + var uriReference:URI; + var ref:String = reference; + + if (escape) + ref = URI.escapeChars(reference); + + if (ref == "") + { + // NOOP + return true; + } + else if (ref.substr(0, 2) == "//") + { + // Special case. This is an absolute URI but without the scheme. + // Take the scheme from this URI and tack it on. This is + // intended to make working with chdir() a little more + // tolerant. + var f:String = this.scheme + ":" + ref; + + return constructURI(f); + } + else if (ref.charAt(0) == "?") + { + // A relative URI that is just a query part is essentially + // a "./?query". We tack on the "./" here to make the rest + // of our logic work. + ref = "./" + ref; + } + + // Parse the reference passed in as a URI. This way we + // get any query and fragments parsed out as well. + uriReference = new URI(ref); + + if (uriReference.isAbsolute() || + uriReference.isHierarchical() == false) + { + // If the URI given is a full URI, it replaces this one. + copyURI(uriReference); + return true; + } + + + var thisPath:String, thatPath:String; + var thisParts:Array, thatParts:Array; + var thisIsDir:Boolean = false, thatIsDir:Boolean = false; + var thisIsAbs:Boolean = false, thatIsAbs:Boolean = false; + var lastIsDotOperation:Boolean = false; + var curDir:String; + var i:int; + + thisPath = this.path; + thatPath = uriReference.path; + + if (thisPath.length > 0) + thisParts = thisPath.split("/"); + else + thisParts = new Array(); + + if (thatPath.length > 0) + thatParts = thatPath.split("/"); + else + thatParts = new Array(); + + if (thisParts.length > 0 && thisParts[0] == "") + { + thisIsAbs = true; + thisParts.shift(); // pop the first one off the array + } + if (thisParts.length > 0 && thisParts[thisParts.length - 1] == "") + { + thisIsDir = true; + thisParts.pop(); // pop the last one off the array + } + + if (thatParts.length > 0 && thatParts[0] == "") + { + thatIsAbs = true; + thatParts.shift(); // pop the first one off the array + } + if (thatParts.length > 0 && thatParts[thatParts.length - 1] == "") + { + thatIsDir = true; + thatParts.pop(); // pop the last one off the array + } + + if (thatIsAbs) + { + // The reference is an absolute path (starts with a slash). + // It replaces this path wholesale. + this.path = uriReference.path; + + // And it inherits the query and fragment + this.queryRaw = uriReference.queryRaw; + this.fragment = uriReference.fragment; + + return true; + } + else if (thatParts.length == 0 && uriReference.query == "") + { + // The reference must have only been a fragment. Fragments just + // get appended to whatever the current path is. We don't want + // to overwrite any query that may already exist, so this case + // only takes on the new fragment. + this.fragment = uriReference.fragment; + return true; + } + else if (thisIsDir == false && thisParts.length > 0) + { + // This path ends in a file. It goes away no matter what. + thisParts.pop(); + } + + // By default, this assumes the query and fragment of the reference + this.queryRaw = uriReference.queryRaw; + this.fragment = uriReference.fragment; + + // Append the parts of the path from the passed in reference + // to this object's path. + thisParts = thisParts.concat(thatParts); + + for(i = 0; i < thisParts.length; i++) + { + curDir = thisParts[i]; + lastIsDotOperation = false; + + if (curDir == ".") + { + thisParts.splice(i, 1); + i = i - 1; // account for removing this item + lastIsDotOperation = true; + } + else if (curDir == "..") + { + if (i >= 1) + { + if (thisParts[i - 1] == "..") + { + // If the previous is a "..", we must have skipped + // it due to this URI being relative. We can't + // collapse leading ".."s in a relative URI, so + // do nothing. + } + else + { + thisParts.splice(i - 1, 2); + i = i - 2; // move back to account for the 2 we removed + } + } + else + { + // This is the first thing in the path. + + if (isRelative()) + { + // We can't collapse leading ".."s in a relative + // path. Do noting. + } + else + { + // This is an abnormal case. We have dot-dotted up + // past the base of our "file system". This is a + // case where we had a /path/like/this.htm and were + // given a path to chdir to like this: + // ../../../../../../mydir + // Obviously, it has too many ".." and will take us + // up beyond the top of the URI. However, according + // RFC 2396 Appendix C.2, we should try to handle + // these abnormal cases appropriately. In this case, + // we will do what UNIX command lines do if you are + // at the root (/) of the filesystem and execute: + // # cd ../../../../../bin + // Which will put you in /bin. Essentially, the extra + // ".."'s will just get eaten. + + thisParts.splice(i, 1); + i = i - 1; // account for the ".." we just removed + } + } + + lastIsDotOperation = true; + } + } + + var finalPath:String = ""; + + // If the last thing in the path was a "." or "..", then this thing is a + // directory. If the last thing isn't a dot-op, then we don't want to + // blow away any information about the directory (hence the "|=" binary + // assignment). + thatIsDir = thatIsDir || lastIsDotOperation; + + // Reconstruct the path with the abs/dir info we have + finalPath = joinPath(thisParts, thisIsAbs, thatIsDir); + + // Set the path (automatically escaping it) + this.path = finalPath; + + return true; + } + + /** + * @private + * Join an array of path parts back into a URI style path string. + * This is used by the various path logic functions to recombine + * a path. This is different than the standard Array.join() + * function because we need to take into account the starting and + * ending path delimiters if this is an absolute path or a + * directory. + * + * @param parts the Array that contains strings of each path part. + * @param isAbs true if the given path is absolute + * @param isDir true if the given path is a directory + * + * @return the combined path string. + */ + protected function joinPath(parts:Array, isAbs:Boolean, isDir:Boolean) : String + { + var pathStr:String = ""; + var i:int; + + for (i = 0; i < parts.length; i++) + { + if (pathStr.length > 0) + pathStr += "/"; + + pathStr += parts[i]; + } + + // If this path is a directory, tack on the directory delimiter, + // but only if the path contains something. Adding this to an + // empty path would make it "/", which is an absolute path that + // starts at the root. + if (isDir && pathStr.length > 0) + pathStr += "/"; + + if (isAbs) + pathStr = "/" + pathStr; + + return pathStr; + } + + /** + * Given an absolute URI, make this relative URI absolute using + * the given URI as a base. This URI instance must be relative + * and the base_uri must be absolute. + * + * @param base_uri URI to use as the base from which to make + * this relative URI into an absolute URI. + * + * @return true if successful, false otherwise. + */ + public function makeAbsoluteURI(base_uri:URI) : Boolean + { + if (isAbsolute() || base_uri.isRelative()) + { + // This URI needs to be relative, and the base needs to be + // absolute otherwise we won't know what to do! + return false; + } + + // Make a copy of the base URI. We don't want to modify + // the passed URI. + var base:URI = new URI(); + base.copyURI(base_uri); + + // ChDir on the base URI. This will preserve any query + // and fragment we have. + if (base.chdir(toString()) == false) + return false; + + // It worked, so copy the base into this one + copyURI(base); + + return true; + } + + + /** + * Given a URI to use as a base from which this object should be + * relative to, convert this object into a relative URI. For example, + * if you have: + * + * + * var uri1:URI = new URI("http://something.com/path/to/some/file.html"); + * var uri2:URI = new URI("http://something.com/path/to/another/file.html"); + * + * uri1.MakeRelativePath(uri2); + * + *

uri1 will have a final value of "../some/file.html"

+ * + *

Note! This function is brute force. If you have two URI's + * that are completely unrelated, this will still attempt to make + * the relative URI. In that case, you will most likely get a + * relative path that looks something like:

+ * + *

../../../../../../some/path/to/my/file.html

+ * + * @param base_uri the URI from which to make this URI relative + * + * @return true if successful, false if the base_uri and this URI + * are not related, of if error. + */ + public function makeRelativeURI(base_uri:URI, caseSensitive:Boolean = true) : Boolean + { + var base:URI = new URI(); + base.copyURI(base_uri); + + var thisParts:Array, thatParts:Array; + var finalParts:Array = new Array(); + var thisPart:String, thatPart:String, finalPath:String; + var pathStr:String = this.path; + var queryStr:String = this.queryRaw; + var fragmentStr:String = this.fragment; + var i:int; + var diff:Boolean = false; + var isDir:Boolean = false; + + if (isRelative()) + { + // We're already relative. + return true; + } + + if (base.isRelative()) + { + // The base is relative. A relative base doesn't make sense. + return false; + } + + + if ( (isOfType(base_uri.scheme) == false) || + (this.authority != base_uri.authority) ) + { + // The schemes and/or authorities are different. We can't + // make a relative path to something that is completely + // unrelated. + return false; + } + + // Record the state of this URI + isDir = isDirectory(); + + // We are based of the directory of the given URI. We need to + // make sure the URI is pointing to a directory. Changing + // directory to "." will remove any file name if the base is + // not a directory. + base.chdir("."); + + thisParts = pathStr.split("/"); + thatParts = base.path.split("/"); + + if (thisParts.length > 0 && thisParts[0] == "") + thisParts.shift(); + + if (thisParts.length > 0 && thisParts[thisParts.length - 1] == "") + { + isDir = true; + thisParts.pop(); + } + + if (thatParts.length > 0 && thatParts[0] == "") + thatParts.shift(); + if (thatParts.length > 0 && thatParts[thatParts.length - 1] == "") + thatParts.pop(); + + + // Now that we have the paths split into an array of directories, + // we can compare the two paths. We start from the left of side + // of the path and start comparing. When we either run out of + // directories (one path is longer than the other), or we find + // a directory that is different, we stop. The remaining parts + // of each path is then used to determine the relative path. For + // example, lets say we have: + // path we want to make relative: /a/b/c/d/e.txt + // path to use as base for relative: /a/b/f/ + // + // This loop will start at the left, and remove directories + // until we get a mismatch or run off the end of one of them. + // In this example, the result will be: + // c/d/e.txt + // f + // + // For every part left over in the base path, we prepend a ".." + // to the relative to get the final path: + // ../c/d/e.txt + while(thatParts.length > 0) + { + if (thisParts.length == 0) + { + // we matched all there is to match, we are done. + // This is the case where "this" object is a parent + // path of the given URI. eg: + // this.path = /a/b/ (thisParts) + // base.path = /a/b/c/d/e/ (thatParts) + break; + } + + thisPart = thisParts[0]; + thatPart = thatParts[0]; + + if (compareStr(thisPart, thatPart, caseSensitive)) + { + thisParts.shift(); + thatParts.shift(); + } + else + break; + } + + // If there are any path info left from the base URI, that means + // **this** object is above the given URI in the file tree. For + // each part left over in the given URI, we need to move up one + // directory to get where we are. + var dotdot:String = ".."; + for (i = 0; i < thatParts.length; i++) + { + finalParts.push(dotdot); + } + + // Append the parts of this URI to any dot-dot's we have + finalParts = finalParts.concat(thisParts); + + // Join the parts back into a path + finalPath = joinPath(finalParts, false /* not absolute */, isDir); + + if (finalPath.length == 0) + { + // The two URI's are exactly the same. The proper relative + // path is: + finalPath = "./"; + } + + // Set the parts of the URI, preserving the original query and + // fragment parts. + setParts("", "", "", finalPath, queryStr, fragmentStr); + + return true; + } + + /** + * Given a string, convert it to a URI. The string could be a + * full URI that is improperly escaped, a malformed URI (e.g. + * missing a protocol like "www.something.com"), a relative URI, + * or any variation there of. + * + *

The intention of this function is to take anything that a + * user might manually enter as a URI/URL and try to determine what + * they mean. This function differs from the URI constructor in + * that it makes some assumptions to make it easy to import user + * entered URI data.

+ * + *

This function is intended to be a helper function. + * It is not all-knowning and will probably make mistakes + * when attempting to parse a string of unknown origin. If + * your applicaiton is receiving input from the user, your + * application should already have a good idea what the user + * should be entering, and your application should be + * pre-processing the user's input to make sure it is well formed + * before passing it to this function.

+ * + *

It is assumed that the string given to this function is + * something the user may have manually entered. Given this, + * the URI string is probably unescaped or improperly escaped. + * This function will attempt to properly escape the URI by + * using forceEscape(). The result is that a toString() call + * on a URI that was created from unknownToURI() may not match + * the input string due to the difference in escaping.

+ * + * @param unknown a potental URI string that should be parsed + * and loaded into this object. + * @param defaultScheme if it is determined that the passed string + * looks like a URI, but it is missing the scheme part, this + * string will be used as the missing scheme. + * + * @return true if the given string was successfully parsed into + * a valid URI object, false otherwise. + */ + public function unknownToURI(unknown:String, defaultScheme:String = "http") : Boolean + { + var temp:String; + + if (unknown.length == 0) + { + this.initialize(); + return false; + } + + // Some users love the backslash key. Fix it. + unknown = unknown.replace(/\\/g, "/"); + + // Check for any obviously missing scheme. + if (unknown.length >= 2) + { + temp = unknown.substr(0, 2); + if (temp == "//") + unknown = defaultScheme + ":" + unknown; + } + + if (unknown.length >= 3) + { + temp = unknown.substr(0, 3); + if (temp == "://") + unknown = defaultScheme + unknown; + } + + // Try parsing it as a normal URI + var uri:URI = new URI(unknown); + + if (uri.isHierarchical() == false) + { + if (uri.scheme == UNKNOWN_SCHEME) + { + this.initialize(); + return false; + } + + // It's a non-hierarchical URI + copyURI(uri); + forceEscape(); + return true; + } + else if ((uri.scheme != UNKNOWN_SCHEME) && + (uri.scheme.length > 0)) + { + if ( (uri.authority.length > 0) || + (uri.scheme == "file") ) + { + // file://... URI + copyURI(uri); + forceEscape(); // ensure proper escaping + return true; + } + else if (uri.authority.length == 0 && uri.path.length == 0) + { + // It's is an incomplete URI (eg "http://") + + setParts(uri.scheme, "", "", "", "", ""); + return false; + } + } + else + { + // Possible relative URI. We can only detect relative URI's + // that start with "." or "..". If it starts with something + // else, the parsing is ambiguous. + var path:String = uri.path; + + if (path == ".." || path == "." || + (path.length >= 3 && path.substr(0, 3) == "../") || + (path.length >= 2 && path.substr(0, 2) == "./") ) + { + // This is a relative URI. + copyURI(uri); + forceEscape(); + return true; + } + } + + // Ok, it looks like we are just a normal URI missing the scheme. Tack + // on the scheme. + uri = new URI(defaultScheme + "://" + unknown); + + // Check to see if we are good now + if (uri.scheme.length > 0 && uri.authority.length > 0) + { + // It was just missing the scheme. + copyURI(uri); + forceEscape(); // Make sure we are properly encoded. + return true; + } + + // don't know what this is + this.initialize(); + return false; + } + + } // end URI class +} // end package \ No newline at end of file diff --git a/DISPLAYER/com/adobe/net/URIEncodingBitmap.as b/DISPLAYER/com/adobe/net/URIEncodingBitmap.as new file mode 100644 index 0000000000000000000000000000000000000000..d786b33fa324f40bb84e1f123e78b300675f3ffa --- /dev/null +++ b/DISPLAYER/com/adobe/net/URIEncodingBitmap.as @@ -0,0 +1,139 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.net +{ + import flash.utils.ByteArray; + + /** + * This class implements an efficient lookup table for URI + * character escaping. This class is only needed if you + * create a derived class of URI to handle custom URI + * syntax. This class is used internally by URI. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0* + */ + public class URIEncodingBitmap extends ByteArray + { + /** + * Constructor. Creates an encoding bitmap using the given + * string of characters as the set of characters that need + * to be URI escaped. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public function URIEncodingBitmap(charsToEscape:String) : void + { + var i:int; + var data:ByteArray = new ByteArray(); + + // Initialize our 128 bits (16 bytes) to zero + for (i = 0; i < 16; i++) + this.writeByte(0); + + data.writeUTFBytes(charsToEscape); + data.position = 0; + + while (data.bytesAvailable) + { + var c:int = data.readByte(); + + if (c > 0x7f) + continue; // only escape low bytes + + var enc:int; + this.position = (c >> 3); + enc = this.readByte(); + enc |= 1 << (c & 0x7); + this.position = (c >> 3); + this.writeByte(enc); + } + } + + /** + * Based on the data table contained in this object, check + * if the given character should be escaped. + * + * @param char the character to be escaped. Only the first + * character in the string is used. Any other characters + * are ignored. + * + * @return the integer value of the raw UTF8 character. For + * example, if '%' is given, the return value is 37 (0x25). + * If the character given does not need to be escaped, the + * return value is zero. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public function ShouldEscape(char:String) : int + { + var data:ByteArray = new ByteArray(); + var c:int, mask:int; + + // write the character into a ByteArray so + // we can pull it out as a raw byte value. + data.writeUTFBytes(char); + data.position = 0; + c = data.readByte(); + + if (c & 0x80) + { + // don't escape high byte characters. It can make international + // URI's unreadable. We just want to escape characters that would + // make URI syntax ambiguous. + return 0; + } + else if ((c < 0x1f) || (c == 0x7f)) + { + // control characters must be escaped. + return c; + } + + this.position = (c >> 3); + mask = this.readByte(); + + if (mask & (1 << (c & 0x7))) + { + // we need to escape this, return the numeric value + // of the character + return c; + } + else + { + return 0; + } + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/net/proxies/RFC2817Socket.as b/DISPLAYER/com/adobe/net/proxies/RFC2817Socket.as new file mode 100644 index 0000000000000000000000000000000000000000..e73e9e7df5b7d4c8afdc95a058c85c00d57b28e5 --- /dev/null +++ b/DISPLAYER/com/adobe/net/proxies/RFC2817Socket.as @@ -0,0 +1,198 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.net.proxies +{ + import flash.events.Event; + import flash.events.IOErrorEvent; + import flash.events.ProgressEvent; + import flash.net.Socket; + + /** + * This class allows TCP socket connections through HTTP proxies in accordance with + * RFC 2817: + * + * ftp://ftp.rfc-editor.org/in-notes/rfc2817.txt + * + * It can also be used to make direct connections to a destination, as well. If you + * pass the host and port into the constructor, no proxy will be used. You can also + * call connect, passing in the host and the port, and if you didn't set the proxy + * info, a direct connection will be made. A proxy is only used after you have called + * the setProxyInfo function. + * + * The connection to and negotiation with the proxy is completely hidden. All the + * same events are thrown whether you are using a proxy or not, and the data you + * receive from the target server will look exact as it would if you were connected + * to it directly rather than through a proxy. + * + * @author Christian Cantrell + * + **/ + public class RFC2817Socket + extends Socket + { + private var proxyHost:String = null; + private var host:String = null; + private var proxyPort:int = 0; + private var port:int = 0; + private var deferredEventHandlers:Object = new Object(); + private var buffer:String = new String(); + + /** + * Construct a new RFC2817Socket object. If you pass in the host and the port, + * no proxy will be used. If you want to use a proxy, instantiate with no + * arguments, call setProxyInfo, then call connect. + **/ + public function RFC2817Socket(host:String = null, port:int = 0) + { + super(host, port); + } + + /** + * Set the proxy host and port number. Your connection will only proxied if + * this function has been called. + **/ + public function setProxyInfo(host:String, port:int):void + { + this.proxyHost = host; + this.proxyPort = port; + + var deferredSocketDataHandler:Object = this.deferredEventHandlers[ProgressEvent.SOCKET_DATA]; + var deferredConnectHandler:Object = this.deferredEventHandlers[Event.CONNECT]; + + if (deferredSocketDataHandler != null) + { + super.removeEventListener(ProgressEvent.SOCKET_DATA, deferredSocketDataHandler.listener, deferredSocketDataHandler.useCapture); + } + + if (deferredConnectHandler != null) + { + super.removeEventListener(Event.CONNECT, deferredConnectHandler.listener, deferredConnectHandler.useCapture); + } + } + + /** + * Connect to the specified host over the specified port. If you want your + * connection proxied, call the setProxyInfo function first. + **/ + public override function connect(host:String, port:int):void + { + if (this.proxyHost == null) + { + this.redirectConnectEvent(); + this.redirectSocketDataEvent(); + super.connect(host, port); + } + else + { + this.host = host; + this.port = port; + super.addEventListener(Event.CONNECT, this.onConnect); + super.addEventListener(ProgressEvent.SOCKET_DATA, this.onSocketData); + super.connect(this.proxyHost, this.proxyPort); + } + } + + private function onConnect(event:Event):void + { + this.writeUTFBytes("CONNECT "+this.host+":"+this.port+" HTTP/1.1\n\n"); + this.flush(); + this.redirectConnectEvent(); + } + + private function onSocketData(event:ProgressEvent):void + { + while (this.bytesAvailable != 0) + { + this.buffer += this.readUTFBytes(1); + if (this.buffer.search(/\r?\n\r?\n$/) != -1) + { + this.checkResponse(event); + break; + } + } + } + + private function checkResponse(event:ProgressEvent):void + { + var responseCode:String = this.buffer.substr(this.buffer.indexOf(" ")+1, 3); + + if (responseCode.search(/^2/) == -1) + { + var ioError:IOErrorEvent = new IOErrorEvent(IOErrorEvent.IO_ERROR); + ioError.text = "Error connecting to the proxy ["+this.proxyHost+"] on port ["+this.proxyPort+"]: " + this.buffer; + this.dispatchEvent(ioError); + } + else + { + this.redirectSocketDataEvent(); + this.dispatchEvent(new Event(Event.CONNECT)); + if (this.bytesAvailable > 0) + { + this.dispatchEvent(event); + } + } + this.buffer = null; + } + + private function redirectConnectEvent():void + { + super.removeEventListener(Event.CONNECT, onConnect); + var deferredEventHandler:Object = this.deferredEventHandlers[Event.CONNECT]; + if (deferredEventHandler != null) + { + super.addEventListener(Event.CONNECT, deferredEventHandler.listener, deferredEventHandler.useCapture, deferredEventHandler.priority, deferredEventHandler.useWeakReference); + } + } + + private function redirectSocketDataEvent():void + { + super.removeEventListener(ProgressEvent.SOCKET_DATA, onSocketData); + var deferredEventHandler:Object = this.deferredEventHandlers[ProgressEvent.SOCKET_DATA]; + if (deferredEventHandler != null) + { + super.addEventListener(ProgressEvent.SOCKET_DATA, deferredEventHandler.listener, deferredEventHandler.useCapture, deferredEventHandler.priority, deferredEventHandler.useWeakReference); + } + } + + public override function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int=0.0, useWeakReference:Boolean=false):void + { + if (type == Event.CONNECT || type == ProgressEvent.SOCKET_DATA) + { + this.deferredEventHandlers[type] = {listener:listener,useCapture:useCapture, priority:priority, useWeakReference:useWeakReference}; + } + else + { + super.addEventListener(type, listener, useCapture, priority, useWeakReference); + } + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/Database.as b/DISPLAYER/com/adobe/protocols/dict/Database.as new file mode 100644 index 0000000000000000000000000000000000000000..6270599eaa78f989ff9d7caf3a1e4137f1006499 --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/Database.as @@ -0,0 +1,66 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict +{ + public class Database + { + private var _name:String; + private var _description:String; + + public function Database(name:String, description:String) + { + this._name = name; + this._description = description; + } + + public function set name(name:String):void + { + this._name = name; + } + + public function get name():String + { + return this._name; + } + + public function set description(description:String):void + { + this._description = description; + } + + public function get description():String + { + return this._description; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/Definition.as b/DISPLAYER/com/adobe/protocols/dict/Definition.as new file mode 100644 index 0000000000000000000000000000000000000000..f74380cbb0bc1dcf916a815a8703c167c6b98246 --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/Definition.as @@ -0,0 +1,71 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict +{ + public class Definition + { + private var _definition:String; + private var _database:String; + private var _term:String; + + public function set definition(definition:String):void + { + this._definition = definition; + } + + public function get definition():String + { + return this._definition; + } + + public function set database(database:String):void + { + this._database = database; + } + + public function get database():String + { + return this._database; + } + + public function set term(term:String):void + { + this._term = term; + } + + public function get term():String + { + return this._term; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/Dict.as b/DISPLAYER/com/adobe/protocols/dict/Dict.as new file mode 100644 index 0000000000000000000000000000000000000000..a82c18ab933ef3aa48cbc8c52d98bda4c2b05811 --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/Dict.as @@ -0,0 +1,360 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict +{ + import com.adobe.protocols.dict.events.*; + import com.adobe.protocols.dict.util.*; + + import flash.events.Event; + import flash.events.EventDispatcher; + import flash.events.IOErrorEvent; + import flash.events.ProgressEvent; + import flash.events.SecurityErrorEvent; + import flash.net.Socket; + import mx.rpc.http.HTTPService; + import mx.rpc.events.ResultEvent; + import mx.rpc.events.FaultEvent; + import flash.xml.XMLNode; + import mx.utils.StringUtil; + + public class Dict + extends EventDispatcher + { + // Event type names. + //public static var CONNECTED:String = "connected"; + //public static var DISCONNECTED:String = "disconnected"; + public static var IO_ERROR:String = IOErrorEvent.IO_ERROR; + //public static var ERROR:String = "error"; + //public static var SERVERS:String = "servers"; + //public static var DATABASES:String = "databases"; + //public static var MATCH_STRATEGIES:String = "matchStrategies"; + //public static var DEFINITION:String = "definition"; + //public static var DEFINITION_HEADER:String = "definitionHeader"; + //public static var MATCH:String = "match"; + //public static var NO_MATCH:String = "noMatch"; + + public static var FIRST_MATCH:uint = 0; + public static var ALL_DATABASES:uint = 1; + + private var socket:SocketHelper; + + private var dbShortList:Boolean; + + public function Dict() + { + this.socket = new SocketHelper(); + this.socket.addEventListener(Event.CONNECT, connected); + this.socket.addEventListener(Event.CLOSE, disconnected); + this.socket.addEventListener(SocketHelper.COMPLETE_RESPONSE, incomingData); + this.socket.addEventListener(IOErrorEvent.IO_ERROR, ioError); + this.socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityError); + } + + public function connect(server:String, port:uint = 2628):void + { + if (this.socket.connected) + { + this.socket.close(); + } + this.socket.connect(server, port); + } + + public function connectThroughProxy(proxyServer:String, + proxyPort:int, + server:String, + port:uint = 2628):void + { + if (this.socket.connected) + { + this.socket.close(); + } + this.socket.setProxyInfo(proxyServer, proxyPort); + this.socket.connect(server, port); + } + + public function disconnect():void + { + this.socket.close(); + this.disconnected(null); + } + + public function getServers():void + { + var http:HTTPService = new HTTPService(); + http.url = "http://luetzschena-stahmeln.de/dictd/xmllist.php"; + http.addEventListener(ResultEvent.RESULT, incomingServerXML); + http.addEventListener(FaultEvent.FAULT, httpError); + http.resultFormat = HTTPService.RESULT_FORMAT_E4X; + http.send(); + } + + public function getDatabases(shortList:Boolean=true):void + { + this.dbShortList = shortList; + this.socket.writeUTFBytes("show db\r\n"); + this.socket.flush(); + } + + public function getMatchStrategies():void + { + this.socket.writeUTFBytes("show strat\r\n"); + this.socket.flush(); + } + + public function match(database:String, term:String, scope:String="prefix"):void + { + this.socket.writeUTFBytes("match " + database + " " + scope + " \"" + term + "\"\r\n"); + this.socket.flush(); + } + + public function define(database:String, term:String):void + { + this.socket.writeUTFBytes("define " + database + " \"" + term + "\"\r\n"); + this.socket.flush(); + } + + public function lookup(term:String, scope:uint):void + { + var flag:String; + if (scope == Dict.ALL_DATABASES) + { + flag = "*"; + } + else if (scope == Dict.FIRST_MATCH) + { + flag = "!"; + } + this.socket.writeUTFBytes("define " + flag + " \"" + term + "\"\r\n"); + this.socket.flush(); + } + + //// Private functions //// + + private function connected(event:Event):void + { + // Wait to dispatch an event until we get the 220 response. + } + + private function disconnected(event:Event):void + { + dispatchEvent(new DisconnectedEvent(DisconnectedEvent.DISCONNECTED)); + } + + private function incomingServerXML(event:ResultEvent):void + { + var dictd:Namespace = new Namespace("http://www.luetzschena-stahmeln.de/dictd/"); + var result:XML = event.result as XML; + var server:String, description:String; + var servers:Array = new Array(); + for each (var serverNode:XML in result.dictd::server) + { + server = serverNode.dictd::dictdurl; + description = serverNode.dictd::description; + if (StringUtil.trim(server).length != 0 && + StringUtil.trim(description).length != 0) + { + var dServer:DictionaryServer = new DictionaryServer(); + dServer.server = server.replace("dict://", ""); + dServer.description = description; + servers.push(dServer); + } + } + var dEvent:DictionaryServerEvent = new DictionaryServerEvent(DictionaryServerEvent.SERVERS); + dEvent.servers = servers; + dispatchEvent(dEvent); + } + + private function incomingData(event:CompleteResponseEvent):void + { + var rawResponse:String = event.response; + var response:Response = this.parseRawResponse(rawResponse); + var responseCode:uint = response.code; + if (responseCode == 552) // no matches + { + throwNoMatchEvent(response); + } + else if (responseCode >= 400 && responseCode <= 599) // error + { + throwErrorEvent(response); + } + else if (responseCode == 220) // successful connection + { + dispatchEvent(new ConnectedEvent(ConnectedEvent.CONNECTED)); + } + else if (responseCode == 110) // databases are being returned + { + throwDatabasesEvent(response); + } + else if (responseCode == 111) // matches strategies + { + throwMatchStrategiesEvent(response); + } + else if (responseCode == 152) // matches + { + throwMatchEvent(response); + } + else if (responseCode == 150) + { + throwDefinitionHeaderEvent(response); + } + else if (responseCode == 151) + { + throwDefinitionEvent(response); + } + } + + private function ioError(event:IOErrorEvent):void + { + dispatchEvent(event); + } + + private function httpError(event:FaultEvent):void + { + trace("httpError!"); + } + + private function securityError(event:SecurityErrorEvent):void + { + trace("security error!"); + trace(event.text); + } + + // Dispatch new events. + + private function throwDatabasesEvent(response:Response):void + { + var databases:Array = new Array(); + var responseArray:Array = response.body.split("\r\n"); + for each (var line:String in responseArray) + { + var name:String = line.substring(0, line.indexOf(" ")); + if (name == "--exit--") + { + if (this.dbShortList) + { + break; + } + continue; + } + var description:String = line.substring(line.indexOf(" ")+1, line.length).replace(/\"/g,""); + databases.push(new Database(name, description)); + } + var event:DatabaseEvent = new DatabaseEvent(DatabaseEvent.DATABASES); + event.databases = databases; + dispatchEvent(event); + } + + private function throwMatchStrategiesEvent(response:Response):void + { + var strategies:Array = new Array(); + var responseArray:Array = response.body.split("\r\n"); + for each (var line:String in responseArray) + { + var name:String = line.substring(0, line.indexOf(" ")); + var description:String = line.substring(line.indexOf(" ")+1, line.length).replace(/\"/g,""); + strategies.push(new MatchStrategy(name, description)); + } + var event:MatchStrategiesEvent = new MatchStrategiesEvent(MatchStrategiesEvent.MATCH_STRATEGIES); + event.strategies = strategies; + dispatchEvent(event); + } + + private function throwMatchEvent(response:Response):void + { + var matches:Array = new Array(); + var responseArray:Array = response.body.split("\r\n"); + for each (var line:String in responseArray) + { + var match:String = line.substring(line.indexOf(" ")+1, line.length).replace(/\"/g,""); + matches.push(match); + } + var event:MatchEvent = new MatchEvent(MatchEvent.MATCH); + event.matches = matches; + dispatchEvent(event); + } + + private function throwErrorEvent(response:Response):void + { + var event:ErrorEvent = new ErrorEvent(ErrorEvent.ERROR); + event.code = response.code; + event.message = response.headerText; + dispatchEvent(event); + } + + private function throwNoMatchEvent(response:Response):void + { + dispatchEvent(new NoMatchEvent(NoMatchEvent.NO_MATCH)); + } + + private function throwDefinitionHeaderEvent(response:Response):void + { + var event:DefinitionHeaderEvent = new DefinitionHeaderEvent(DefinitionHeaderEvent.DEFINITION_HEADER); + event.definitionCount = uint(response.headerText.substring(0, response.headerText.indexOf(" "))); + dispatchEvent(event); + } + + private function throwDefinitionEvent(response:Response):void + { + var event:DefinitionEvent = new DefinitionEvent(DefinitionEvent.DEFINITION); + var def:Definition = new Definition(); + var headerText:String = response.headerText; + var tokens:Array = headerText.match(/"[^"]+"/g); + def.term = String(tokens[0]).replace(/"/g, ""); + def.database = String(tokens[1]).replace(/"/g, ""); + def.definition = response.body; + event.definition = def; + dispatchEvent(event); + } + + private function parseRawResponse(rawResponse:String):Response + { + var response:Response = new Response(); + var fullHeader:String; + if (rawResponse.indexOf("\r\n") != -1) + { + fullHeader = rawResponse.substring(0, rawResponse.indexOf("\r\n")); + } + else + { + fullHeader = rawResponse; + } + var responseCodeMatch:Array = fullHeader.match(/^\d{3}/); + response.code = uint(responseCodeMatch[0]); + response.headerText = fullHeader.substring(fullHeader.indexOf(" ")+1, fullHeader.length); + var body:String = rawResponse.substring(rawResponse.indexOf("\r\n")+2, rawResponse.length); + body = body.replace(/\r\n\.\./, "\r\n."); + response.body = body; + return response; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/DictionaryServer.as b/DISPLAYER/com/adobe/protocols/dict/DictionaryServer.as new file mode 100644 index 0000000000000000000000000000000000000000..cc350210af60d2ccbadb0a8bb6595aba5a0e4043 --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/DictionaryServer.as @@ -0,0 +1,60 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict +{ + public class DictionaryServer + { + private var _server:String; + private var _description:String; + + public function set server(server:String):void + { + this._server = server; + } + + public function get server():String + { + return this._server; + } + + public function set description(description:String):void + { + this._description = description; + } + + public function get description():String + { + return this._description; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/MatchStrategy.as b/DISPLAYER/com/adobe/protocols/dict/MatchStrategy.as new file mode 100644 index 0000000000000000000000000000000000000000..b5e8f895254b65c08b5b294409745c0365879cb4 --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/MatchStrategy.as @@ -0,0 +1,66 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict +{ + public class MatchStrategy + { + private var _name:String; + private var _description:String; + + public function MatchStrategy(name:String, description:String) + { + this._name = name; + this._description = description; + } + + public function set name(name:String):void + { + this._name = name; + } + + public function get name():String + { + return this._name; + } + + public function set description(description:String):void + { + this._description = description; + } + + public function get description():String + { + return this._description; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/Response.as b/DISPLAYER/com/adobe/protocols/dict/Response.as new file mode 100644 index 0000000000000000000000000000000000000000..09f56b59fcc6c8a0f898d43f0fa8ceaf818c4e3e --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/Response.as @@ -0,0 +1,71 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict +{ + public class Response + { + private var _code:uint; + private var _headerText:String; + private var _body:String; + + public function set code(code:uint):void + { + this._code = code; + } + + public function set headerText(headerText:String):void + { + this._headerText = headerText; + } + + public function set body(body:String):void + { + this._body = body; + } + + public function get code():uint + { + return this._code; + } + + public function get headerText():String + { + return this._headerText; + } + + public function get body():String + { + return this._body; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/events/ConnectedEvent.as b/DISPLAYER/com/adobe/protocols/dict/events/ConnectedEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..18c4427c18606f682136820762996ac29be7d6ff --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/events/ConnectedEvent.as @@ -0,0 +1,53 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + + public class ConnectedEvent extends Event + { + public static const CONNECTED:String = "connected"; + + public function ConnectedEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public override function clone():Event + { + var out:ConnectedEvent = new ConnectedEvent(type, bubbles, cancelable); + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/events/DatabaseEvent.as b/DISPLAYER/com/adobe/protocols/dict/events/DatabaseEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..e701c8b2f49f704117830fece2c0f244a8be7f46 --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/events/DatabaseEvent.as @@ -0,0 +1,67 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + + public class DatabaseEvent extends Event + { + private var _databases:Array; + + public static const DATABASES:String = "databases"; + + public function DatabaseEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public function set databases(databases:Array):void + { + this._databases = databases; + } + + public function get databases():Array + { + return this._databases; + } + + public override function clone():Event + { + var out:DatabaseEvent = new DatabaseEvent(type, bubbles, cancelable); + out.databases = _databases; + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/events/DefinitionEvent.as b/DISPLAYER/com/adobe/protocols/dict/events/DefinitionEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..6bb267e3368fb5c98a7eef634ab39a29d5a2bdca --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/events/DefinitionEvent.as @@ -0,0 +1,70 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.events +{ + import com.adobe.protocols.dict.Definition; + + import flash.events.Event; + + + public class DefinitionEvent extends Event + { + public static const DEFINITION:String = "definition"; + + private var _definition:Definition; + + public function DefinitionEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public function set definition(definition:Definition):void + { + this._definition = definition; + } + + public function get definition():Definition + { + return this._definition; + } + + public override function clone():Event + { + var out:DefinitionEvent = new DefinitionEvent(type, bubbles, cancelable); + out.definition = _definition; + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/events/DefinitionHeaderEvent.as b/DISPLAYER/com/adobe/protocols/dict/events/DefinitionHeaderEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..3f22c730d67b95ceea527476d85fc1c00475ae2d --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/events/DefinitionHeaderEvent.as @@ -0,0 +1,69 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + + public class DefinitionHeaderEvent extends Event + { + public static const DEFINITION_HEADER:String = "definitionHeader"; + + private var _definitionCount:uint; + + public function DefinitionHeaderEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public function set definitionCount(definitionCount:uint):void + { + this._definitionCount = definitionCount; + } + + public function get definitionCount():uint + { + return this._definitionCount; + } + + public override function clone():Event + { + var out:DefinitionHeaderEvent = new DefinitionHeaderEvent(type, + bubbles, cancelable); + + out.definitionCount = _definitionCount; + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/events/DictionaryServerEvent.as b/DISPLAYER/com/adobe/protocols/dict/events/DictionaryServerEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..87c25299810a0694a696a766d712e269f0b01085 --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/events/DictionaryServerEvent.as @@ -0,0 +1,69 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + + public class DictionaryServerEvent extends Event + { + public static const SERVERS:String = "servers"; + + private var _servers:Array; + + public function DictionaryServerEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public function set servers(servers:Array):void + { + this._servers = servers; + } + + public function get servers():Array + { + return this._servers; + } + + public override function clone():Event + { + var out:DictionaryServerEvent = new DictionaryServerEvent(type, + bubbles, cancelable); + + out.servers = _servers; + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/events/DisconnectedEvent.as b/DISPLAYER/com/adobe/protocols/dict/events/DisconnectedEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..854e012d1ec2356ac3d9d095ae4503ca97a1ddc4 --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/events/DisconnectedEvent.as @@ -0,0 +1,55 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + + public class DisconnectedEvent extends Event + { + public static const DISCONNECTED:String = "disconnected"; + + public function DisconnectedEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public override function clone():Event + { + var out:DisconnectedEvent = new DisconnectedEvent(type, bubbles, cancelable); + + return out; + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/events/ErrorEvent.as b/DISPLAYER/com/adobe/protocols/dict/events/ErrorEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..a556f983ba107bc90130e935189e5f2d60eecd4e --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/events/ErrorEvent.as @@ -0,0 +1,80 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + + public class ErrorEvent extends Event + { + public static const ERROR:String = "error"; + + private var _code:uint; + private var _message:String; + + public function ErrorEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public function set code(code:uint):void + { + this._code = code; + } + + public function set message(message:String):void + { + this._message = message; + } + + public function get code():uint + { + return this._code; + } + + public function get message():String + { + return this._message; + } + + public override function clone():Event + { + var out:ErrorEvent = new ErrorEvent(type, bubbles, cancelable); + + out.message = _message; + out.code = _code; + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/events/MatchEvent.as b/DISPLAYER/com/adobe/protocols/dict/events/MatchEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..c3067e7abaa2584ed7053d143f909b523ff7686f --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/events/MatchEvent.as @@ -0,0 +1,67 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + + public class MatchEvent extends Event + { + private var _matches:Array; + + public static const MATCH:String = "match"; + + public function MatchEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public function set matches(matches:Array):void + { + this._matches = matches; + } + + public function get matches():Array + { + return this._matches; + } + + public override function clone():Event + { + var out:MatchEvent = new MatchEvent(type, bubbles, cancelable); + out.matches = _matches; + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/events/MatchStrategiesEvent.as b/DISPLAYER/com/adobe/protocols/dict/events/MatchStrategiesEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..ae96280c8d9719e2cd30842fae41b69f7bad8ced --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/events/MatchStrategiesEvent.as @@ -0,0 +1,70 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + + public class MatchStrategiesEvent + extends Event + { + private var _strategies:Array; + + public static const MATCH_STRATEGIES:String = "matchStrategies"; + + public function MatchStrategiesEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public function set strategies(strategies:Array):void + { + this._strategies = strategies; + } + + public function get strategies():Array + { + return this._strategies; + } + + public override function clone():Event + { + var out:MatchStrategiesEvent = new MatchStrategiesEvent(type, + bubbles, cancelable); + + out.strategies = _strategies; + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/events/NoMatchEvent.as b/DISPLAYER/com/adobe/protocols/dict/events/NoMatchEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..4e09488fd16b87205d61e3cadb9b2a1e088c9bc4 --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/events/NoMatchEvent.as @@ -0,0 +1,54 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + + public class NoMatchEvent extends Event + { + public static const NO_MATCH:String = "noMatch"; + + public function NoMatchEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public override function clone():Event + { + var out:NoMatchEvent = new NoMatchEvent(type, bubbles, cancelable); + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/util/CompleteResponseEvent.as b/DISPLAYER/com/adobe/protocols/dict/util/CompleteResponseEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..c29f82143a1fedc6b2f09268256097d23c6c2b61 --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/util/CompleteResponseEvent.as @@ -0,0 +1,68 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.util +{ + import flash.events.Event; + + public class CompleteResponseEvent extends Event + { + private var _response:String; + + public static const COMPLETE_RESPONSE:String = "completeResponse" + + public function CompleteResponseEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean = false) + { + super(type, bubbles, cancelable); + } + + public function set response(response:String):void + { + this._response = response; + } + + public function get response():String + { + return this._response; + } + + public override function clone():Event + { + var out:CompleteResponseEvent = new CompleteResponseEvent(type, + bubbles, cancelable); + out.response = _response; + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/protocols/dict/util/SocketHelper.as b/DISPLAYER/com/adobe/protocols/dict/util/SocketHelper.as new file mode 100644 index 0000000000000000000000000000000000000000..bc74836c49725879e780f82f1ad8258104e0d2fb --- /dev/null +++ b/DISPLAYER/com/adobe/protocols/dict/util/SocketHelper.as @@ -0,0 +1,81 @@ +/* + Copyright (c) 2009, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.protocols.dict.util +{ + import com.adobe.net.proxies.RFC2817Socket; + import flash.events.ProgressEvent; + + public class SocketHelper + extends RFC2817Socket + { + private var terminator:String = "\r\n.\r\n"; + private var buffer:String; + public static var COMPLETE_RESPONSE:String = "completeResponse"; + + public function SocketHelper() + { + super(); + buffer = new String(); + addEventListener(ProgressEvent.SOCKET_DATA, incomingData); + } + + private function incomingData(event:ProgressEvent):void + { + buffer += readUTFBytes(bytesAvailable); + buffer = buffer.replace(/250[^\r\n]+\r\n/, ""); // Get rid of all 250s. Don't need them. + var codeStr:String = buffer.substring(0, 3); + if (!isNaN(parseInt(codeStr))) + { + var code:uint = uint(codeStr); + if (code == 150 || code >= 200) + { + buffer = buffer.replace("\r\n", this.terminator); + } + } + + while (buffer.indexOf(this.terminator) != -1) + { + var chunk:String = buffer.substring(0, buffer.indexOf(this.terminator)); + buffer = buffer.substring(chunk.length + this.terminator.length, buffer.length); + throwResponseEvent(chunk); + } + } + + private function throwResponseEvent(response:String):void + { + var responseEvent:CompleteResponseEvent = new CompleteResponseEvent(CompleteResponseEvent.COMPLETE_RESPONSE); + responseEvent.response = response; + dispatchEvent(responseEvent); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/serialization/json/JSON.as b/DISPLAYER/com/adobe/serialization/json/JSON.as new file mode 100644 index 0000000000000000000000000000000000000000..81b143c7ea8103d26380567e147e832258b8f746 --- /dev/null +++ b/DISPLAYER/com/adobe/serialization/json/JSON.as @@ -0,0 +1,86 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + /** + * This class provides encoding and decoding of the JSON format. + * + * Example usage: + * + * // create a JSON string from an internal object + * JSON.encode( myObject ); + * + * // read a JSON string into an internal object + * var myObject:Object = JSON.decode( jsonString ); + * + */ + public final class JSON + { + /** + * Encodes a object into a JSON string. + * + * @param o The object to create a JSON string for + * @return the JSON string representing o + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function encode( o:Object ):String + { + return new JSONEncoder( o ).getString(); + } + + /** + * Decodes a JSON string into a native object. + * + * @param s The JSON string representing the object + * @param strict Flag indicating if the decoder should strictly adhere + * to the JSON standard or not. The default of true + * throws errors if the format does not match the JSON syntax exactly. + * Pass false to allow for non-properly-formatted JSON + * strings to be decoded with more leniancy. + * @return A native object as specified by s + * @throw JSONParseError + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function decode( s:String, strict:Boolean = true ):* + { + return new JSONDecoder( s, strict ).getValue(); + } + + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/serialization/json/JSONDecoder.as b/DISPLAYER/com/adobe/serialization/json/JSONDecoder.as new file mode 100644 index 0000000000000000000000000000000000000000..09fbe887a9c19122a67d940a3f653eb8c45fd372 --- /dev/null +++ b/DISPLAYER/com/adobe/serialization/json/JSONDecoder.as @@ -0,0 +1,352 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + public class JSONDecoder + { + + /** + * Flag indicating if the parser should be strict about the format + * of the JSON string it is attempting to decode. + */ + private var strict:Boolean; + + /** The value that will get parsed from the JSON string */ + private var value:*; + + /** The tokenizer designated to read the JSON string */ + private var tokenizer:JSONTokenizer; + + /** The current token from the tokenizer */ + private var token:JSONToken; + + /** + * Constructs a new JSONDecoder to parse a JSON string + * into a native object. + * + * @param s The JSON string to be converted + * into a native object + * @param strict Flag indicating if the JSON string needs to + * strictly match the JSON standard or not. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONDecoder( s:String, strict:Boolean ) + { + this.strict = strict; + tokenizer = new JSONTokenizer( s, strict ); + + nextToken(); + value = parseValue(); + + // Make sure the input stream is empty + if ( strict && nextToken() != null ) + { + tokenizer.parseError( "Unexpected characters left in input stream" ); + } + } + + /** + * Gets the internal object that was created by parsing + * the JSON string passed to the constructor. + * + * @return The internal object representation of the JSON + * string that was passed to the constructor + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function getValue():* + { + return value; + } + + /** + * Returns the next token from the tokenzier reading + * the JSON string + */ + private final function nextToken():JSONToken + { + return token = tokenizer.getNextToken(); + } + + /** + * Returns the next token from the tokenizer reading + * the JSON string and verifies that the token is valid. + */ + private final function nextValidToken():JSONToken + { + token = tokenizer.getNextToken(); + checkValidToken(); + + return token; + } + + /** + * Verifies that the token is valid. + */ + private final function checkValidToken():void + { + // Catch errors when the input stream ends abruptly + if ( token == null ) + { + tokenizer.parseError( "Unexpected end of input" ); + } + } + + /** + * Attempt to parse an array. + */ + private final function parseArray():Array + { + // create an array internally that we're going to attempt + // to parse from the tokenizer + var a:Array = new Array(); + + // grab the next token from the tokenizer to move + // past the opening [ + nextValidToken(); + + // check to see if we have an empty array + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + // we're done reading the array, so return it + return a; + } + // in non-strict mode an empty array is also a comma + // followed by a right bracket + else if ( !strict && token.type == JSONTokenType.COMMA ) + { + // move past the comma + nextValidToken(); + + // check to see if we're reached the end of the array + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + return a; + } + else + { + tokenizer.parseError( "Leading commas are not supported. Expecting ']' but found " + token.value ); + } + } + + // deal with elements of the array, and use an "infinite" + // loop because we could have any amount of elements + while ( true ) + { + // read in the value and add it to the array + a.push( parseValue() ); + + // after the value there should be a ] or a , + nextValidToken(); + + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + // we're done reading the array, so return it + return a; + } + else if ( token.type == JSONTokenType.COMMA ) + { + // move past the comma and read another value + nextToken(); + + // Allow arrays to have a comma after the last element + // if the decoder is not in strict mode + if ( !strict ) + { + checkValidToken(); + + // Reached ",]" as the end of the array, so return it + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + return a; + } + } + } + else + { + tokenizer.parseError( "Expecting ] or , but found " + token.value ); + } + } + + return null; + } + + /** + * Attempt to parse an object. + */ + private final function parseObject():Object + { + // create the object internally that we're going to + // attempt to parse from the tokenizer + var o:Object = new Object(); + + // store the string part of an object member so + // that we can assign it a value in the object + var key:String + + // grab the next token from the tokenizer + nextValidToken(); + + // check to see if we have an empty object + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + // we're done reading the object, so return it + return o; + } + // in non-strict mode an empty object is also a comma + // followed by a right bracket + else if ( !strict && token.type == JSONTokenType.COMMA ) + { + // move past the comma + nextValidToken(); + + // check to see if we're reached the end of the object + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + return o; + } + else + { + tokenizer.parseError( "Leading commas are not supported. Expecting '}' but found " + token.value ); + } + } + + // deal with members of the object, and use an "infinite" + // loop because we could have any amount of members + while ( true ) + { + if ( token.type == JSONTokenType.STRING ) + { + // the string value we read is the key for the object + key = String( token.value ); + + // move past the string to see what's next + nextValidToken(); + + // after the string there should be a : + if ( token.type == JSONTokenType.COLON ) + { + // move past the : and read/assign a value for the key + nextToken(); + o[ key ] = parseValue(); + + // move past the value to see what's next + nextValidToken(); + + // after the value there's either a } or a , + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + // we're done reading the object, so return it + return o; + } + else if ( token.type == JSONTokenType.COMMA ) + { + // skip past the comma and read another member + nextToken(); + + // Allow objects to have a comma after the last member + // if the decoder is not in strict mode + if ( !strict ) + { + checkValidToken(); + + // Reached ",}" as the end of the object, so return it + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + return o; + } + } + } + else + { + tokenizer.parseError( "Expecting } or , but found " + token.value ); + } + } + else + { + tokenizer.parseError( "Expecting : but found " + token.value ); + } + } + else + { + tokenizer.parseError( "Expecting string but found " + token.value ); + } + } + return null; + } + + /** + * Attempt to parse a value + */ + private final function parseValue():Object + { + checkValidToken(); + + switch ( token.type ) + { + case JSONTokenType.LEFT_BRACE: + return parseObject(); + + case JSONTokenType.LEFT_BRACKET: + return parseArray(); + + case JSONTokenType.STRING: + case JSONTokenType.NUMBER: + case JSONTokenType.TRUE: + case JSONTokenType.FALSE: + case JSONTokenType.NULL: + return token.value; + + case JSONTokenType.NAN: + if ( !strict ) + { + return token.value; + } + else + { + tokenizer.parseError( "Unexpected " + token.value ); + } + + default: + tokenizer.parseError( "Unexpected " + token.value ); + + } + + return null; + } + } +} diff --git a/DISPLAYER/com/adobe/serialization/json/JSONEncoder.as b/DISPLAYER/com/adobe/serialization/json/JSONEncoder.as new file mode 100644 index 0000000000000000000000000000000000000000..db694940dfa2001931db90c3e3601a36c7aba254 --- /dev/null +++ b/DISPLAYER/com/adobe/serialization/json/JSONEncoder.as @@ -0,0 +1,323 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + import flash.utils.describeType; + + public class JSONEncoder + { + + /** The string that is going to represent the object we're encoding */ + private var jsonString:String; + + /** + * Creates a new JSONEncoder. + * + * @param o The object to encode as a JSON string + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONEncoder( value:* ) + { + jsonString = convertToString( value ); + } + + /** + * Gets the JSON string from the encoder. + * + * @return The JSON string representation of the object + * that was passed to the constructor + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function getString():String + { + return jsonString; + } + + /** + * Converts a value to it's JSON string equivalent. + * + * @param value The value to convert. Could be any + * type (object, number, array, etc) + */ + private function convertToString( value:* ):String + { + // determine what value is and convert it based on it's type + if ( value is String ) + { + // escape the string so it's formatted correctly + return escapeString( value as String ); + } + else if ( value is Number ) + { + // only encode numbers that finate + return isFinite( value as Number ) ? value.toString() : "null"; + } + else if ( value is Boolean ) + { + // convert boolean to string easily + return value ? "true" : "false"; + } + else if ( value is Array ) + { + // call the helper method to convert an array + return arrayToString( value as Array ); + } + else if ( value is Object && value != null ) + { + // call the helper method to convert an object + return objectToString( value ); + } + + return "null"; + } + + /** + * Escapes a string accoding to the JSON specification. + * + * @param str The string to be escaped + * @return The string with escaped special characters + * according to the JSON specification + */ + private function escapeString( str:String ):String + { + // create a string to store the string's jsonstring value + var s:String = ""; + // current character in the string we're processing + var ch:String; + // store the length in a local variable to reduce lookups + var len:Number = str.length; + + // loop over all of the characters in the string + for ( var i:int = 0; i < len; i++ ) + { + // examine the character to determine if we have to escape it + ch = str.charAt( i ); + switch ( ch ) + { + case '"': // quotation mark + s += "\\\""; + break; + + //case '/': // solidus + // s += "\\/"; + // break; + + case '\\': // reverse solidus + s += "\\\\"; + break; + + case '\b': // bell + s += "\\b"; + break; + + case '\f': // form feed + s += "\\f"; + break; + + case '\n': // newline + s += "\\n"; + break; + + case '\r': // carriage return + s += "\\r"; + break; + + case '\t': // horizontal tab + s += "\\t"; + break; + + default: // everything else + + // check for a control character and escape as unicode + if ( ch < ' ' ) + { + // get the hex digit(s) of the character (either 1 or 2 digits) + var hexCode:String = ch.charCodeAt( 0 ).toString( 16 ); + + // ensure that there are 4 digits by adjusting + // the # of zeros accordingly. + var zeroPad:String = hexCode.length == 2 ? "00" : "000"; + + // create the unicode escape sequence with 4 hex digits + s += "\\u" + zeroPad + hexCode; + } + else + { + + // no need to do any special encoding, just pass-through + s += ch; + + } + } // end switch + + } // end for loop + + return "\"" + s + "\""; + } + + /** + * Converts an array to it's JSON string equivalent + * + * @param a The array to convert + * @return The JSON string representation of a + */ + private function arrayToString( a:Array ):String + { + // create a string to store the array's jsonstring value + var s:String = ""; + + // loop over the elements in the array and add their converted + // values to the string + var length:int = a.length; + for ( var i:int = 0; i < length; i++ ) + { + // when the length is 0 we're adding the first element so + // no comma is necessary + if ( s.length > 0 ) + { + // we've already added an element, so add the comma separator + s += "," + } + + // convert the value to a string + s += convertToString( a[ i ] ); + } + + // KNOWN ISSUE: In ActionScript, Arrays can also be associative + // objects and you can put anything in them, ie: + // myArray["foo"] = "bar"; + // + // These properties aren't picked up in the for loop above because + // the properties don't correspond to indexes. However, we're + // sort of out luck because the JSON specification doesn't allow + // these types of array properties. + // + // So, if the array was also used as an associative object, there + // may be some values in the array that don't get properly encoded. + // + // A possible solution is to instead encode the Array as an Object + // but then it won't get decoded correctly (and won't be an + // Array instance) + + // close the array and return it's string value + return "[" + s + "]"; + } + + /** + * Converts an object to it's JSON string equivalent + * + * @param o The object to convert + * @return The JSON string representation of o + */ + private function objectToString( o:Object ):String + { + // create a string to store the object's jsonstring value + var s:String = ""; + + // determine if o is a class instance or a plain object + var classInfo:XML = describeType( o ); + if ( classInfo.@name.toString() == "Object" ) + { + // the value of o[key] in the loop below - store this + // as a variable so we don't have to keep looking up o[key] + // when testing for valid values to convert + var value:Object; + + // loop over the keys in the object and add their converted + // values to the string + for ( var key:String in o ) + { + // assign value to a variable for quick lookup + value = o[ key ]; + + // don't add function's to the JSON string + if ( value is Function ) + { + // skip this key and try another + continue; + } + + // when the length is 0 we're adding the first item so + // no comma is necessary + if ( s.length > 0 ) + { + // we've already added an item, so add the comma separator + s += "," + } + + s += escapeString( key ) + ":" + convertToString( value ); + } + } + else // o is a class instance + { + // Loop over all of the variables and accessors in the class and + // serialize them along with their values. + for each ( var v:XML in classInfo..*.( + name() == "variable" + || + ( + name() == "accessor" + // Issue #116 - Make sure accessors are readable + && attribute( "access" ).charAt( 0 ) == "r" ) + ) ) + { + // Issue #110 - If [Transient] metadata exists, then we should skip + if ( v.metadata && v.metadata.( @name == "Transient" ).length() > 0 ) + { + continue; + } + + // When the length is 0 we're adding the first item so + // no comma is necessary + if ( s.length > 0 ) + { + // We've already added an item, so add the comma separator + s += "," + } + + s += escapeString( v.@name.toString() ) + ":" + + convertToString( o[ v.@name ] ); + } + } + + return "{" + s + "}"; + } + + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/serialization/json/JSONParseError.as b/DISPLAYER/com/adobe/serialization/json/JSONParseError.as new file mode 100644 index 0000000000000000000000000000000000000000..835836b3f096e3791af5e18f4db9722b2c9bceaa --- /dev/null +++ b/DISPLAYER/com/adobe/serialization/json/JSONParseError.as @@ -0,0 +1,92 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + /** + * + * + */ + public class JSONParseError extends Error + { + + /** The location in the string where the error occurred */ + private var _location:int; + + /** The string in which the parse error occurred */ + private var _text:String; + + /** + * Constructs a new JSONParseError. + * + * @param message The error message that occured during parsing + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONParseError( message:String = "", location:int = 0, text:String = "" ) + { + super( message ); + name = "JSONParseError"; + _location = location; + _text = text; + } + + /** + * Provides read-only access to the location variable. + * + * @return The location in the string where the error occurred + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function get location():int + { + return _location; + } + + /** + * Provides read-only access to the text variable. + * + * @return The string in which the error occurred + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function get text():String + { + return _text; + } + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/serialization/json/JSONToken.as b/DISPLAYER/com/adobe/serialization/json/JSONToken.as new file mode 100644 index 0000000000000000000000000000000000000000..59f907dec4dafacb8ce08d80914239005fa5a554 --- /dev/null +++ b/DISPLAYER/com/adobe/serialization/json/JSONToken.as @@ -0,0 +1,92 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + public final class JSONToken + { + + /** + * The type of the token. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public var type:int; + + /** + * The value of the token + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public var value:Object; + + /** + * Creates a new JSONToken with a specific token type and value. + * + * @param type The JSONTokenType of the token + * @param value The value of the token + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONToken( type:int = -1 /* JSONTokenType.UNKNOWN */, value:Object = null ) + { + this.type = type; + this.value = value; + } + + /** + * Reusable token instance. + * + * @see #create() + */ + internal static const token:JSONToken = new JSONToken(); + + /** + * Factory method to create instances. Because we don't need more than one instance + * of a token at a time, we can always use the same instance to improve performance + * and reduce memory consumption during decoding. + */ + internal static function create( type:int = -1 /* JSONTokenType.UNKNOWN */, value:Object = null ):JSONToken + { + token.type = type; + token.value = value; + + return token; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/serialization/json/JSONTokenType.as b/DISPLAYER/com/adobe/serialization/json/JSONTokenType.as new file mode 100644 index 0000000000000000000000000000000000000000..8002b322718e1a2ba231cd72edc6ce18b8e5fe88 --- /dev/null +++ b/DISPLAYER/com/adobe/serialization/json/JSONTokenType.as @@ -0,0 +1,69 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + /** + * Class containing constant values for the different types + * of tokens in a JSON encoded string. + */ + public final class JSONTokenType + { + public static const UNKNOWN:int = -1; + + public static const COMMA:int = 0; + + public static const LEFT_BRACE:int = 1; + + public static const RIGHT_BRACE:int = 2; + + public static const LEFT_BRACKET:int = 3; + + public static const RIGHT_BRACKET:int = 4; + + public static const COLON:int = 6; + + public static const TRUE:int = 7; + + public static const FALSE:int = 8; + + public static const NULL:int = 9; + + public static const STRING:int = 10; + + public static const NUMBER:int = 11; + + public static const NAN:int = 12; + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/serialization/json/JSONTokenizer.as b/DISPLAYER/com/adobe/serialization/json/JSONTokenizer.as new file mode 100644 index 0000000000000000000000000000000000000000..0072f6fcc2eac9e2ea34ce5a7d264e10c10d66c8 --- /dev/null +++ b/DISPLAYER/com/adobe/serialization/json/JSONTokenizer.as @@ -0,0 +1,708 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + public class JSONTokenizer + { + + /** + * Flag indicating if the tokenizer should only recognize + * standard JSON tokens. Setting to false allows + * tokens such as NaN and allows numbers to be formatted as + * hex, etc. + */ + private var strict:Boolean; + + /** The object that will get parsed from the JSON string */ + private var obj:Object; + + /** The JSON string to be parsed */ + private var jsonString:String; + + /** The current parsing location in the JSON string */ + private var loc:int; + + /** The current character in the JSON string during parsing */ + private var ch:String; + + /** + * The regular expression used to make sure the string does not + * contain invalid control characters. + */ + private const controlCharsRegExp:RegExp = /[\x00-\x1F]/; + + /** + * Constructs a new JSONDecoder to parse a JSON string + * into a native object. + * + * @param s The JSON string to be converted + * into a native object + */ + public function JSONTokenizer( s:String, strict:Boolean ) + { + jsonString = s; + this.strict = strict; + loc = 0; + + // prime the pump by getting the first character + nextChar(); + } + + /** + * Gets the next token in the input sting and advances + * the character to the next character after the token + */ + public function getNextToken():JSONToken + { + var token:JSONToken = null; + + // skip any whitespace / comments since the last + // token was read + skipIgnored(); + + // examine the new character and see what we have... + switch ( ch ) + { + case '{': + token = JSONToken.create( JSONTokenType.LEFT_BRACE, ch ); + nextChar(); + break + + case '}': + token = JSONToken.create( JSONTokenType.RIGHT_BRACE, ch ); + nextChar(); + break + + case '[': + token = JSONToken.create( JSONTokenType.LEFT_BRACKET, ch ); + nextChar(); + break + + case ']': + token = JSONToken.create( JSONTokenType.RIGHT_BRACKET, ch ); + nextChar(); + break + + case ',': + token = JSONToken.create( JSONTokenType.COMMA, ch ); + nextChar(); + break + + case ':': + token = JSONToken.create( JSONTokenType.COLON, ch ); + nextChar(); + break; + + case 't': // attempt to read true + var possibleTrue:String = "t" + nextChar() + nextChar() + nextChar(); + + if ( possibleTrue == "true" ) + { + token = JSONToken.create( JSONTokenType.TRUE, true ); + nextChar(); + } + else + { + parseError( "Expecting 'true' but found " + possibleTrue ); + } + + break; + + case 'f': // attempt to read false + var possibleFalse:String = "f" + nextChar() + nextChar() + nextChar() + nextChar(); + + if ( possibleFalse == "false" ) + { + token = JSONToken.create( JSONTokenType.FALSE, false ); + nextChar(); + } + else + { + parseError( "Expecting 'false' but found " + possibleFalse ); + } + + break; + + case 'n': // attempt to read null + var possibleNull:String = "n" + nextChar() + nextChar() + nextChar(); + + if ( possibleNull == "null" ) + { + token = JSONToken.create( JSONTokenType.NULL, null ); + nextChar(); + } + else + { + parseError( "Expecting 'null' but found " + possibleNull ); + } + + break; + + case 'N': // attempt to read NaN + var possibleNaN:String = "N" + nextChar() + nextChar(); + + if ( possibleNaN == "NaN" ) + { + token = JSONToken.create( JSONTokenType.NAN, NaN ); + nextChar(); + } + else + { + parseError( "Expecting 'NaN' but found " + possibleNaN ); + } + + break; + + case '"': // the start of a string + token = readString(); + break; + + default: + // see if we can read a number + if ( isDigit( ch ) || ch == '-' ) + { + token = readNumber(); + } + else if ( ch == '' ) + { + // check for reading past the end of the string + token = null; + } + else + { + // not sure what was in the input string - it's not + // anything we expected + parseError( "Unexpected " + ch + " encountered" ); + } + } + + return token; + } + + /** + * Attempts to read a string from the input string. Places + * the character location at the first character after the + * string. It is assumed that ch is " before this method is called. + * + * @return the JSONToken with the string value if a string could + * be read. Throws an error otherwise. + */ + private final function readString():JSONToken + { + // Rather than examine the string character-by-character, it's + // faster to use indexOf to try to and find the closing quote character + // and then replace escape sequences after the fact. + + // Start at the current input stream position + var quoteIndex:int = loc; + do + { + // Find the next quote in the input stream + quoteIndex = jsonString.indexOf( "\"", quoteIndex ); + + if ( quoteIndex >= 0 ) + { + // We found the next double quote character in the string, but we need + // to make sure it is not part of an escape sequence. + + // Keep looping backwards while the previous character is a backslash + var backspaceCount:int = 0; + var backspaceIndex:int = quoteIndex - 1; + while ( jsonString.charAt( backspaceIndex ) == "\\" ) + { + backspaceCount++; + backspaceIndex--; + } + + // If we have an even number of backslashes, that means this is the ending quote + if ( ( backspaceCount & 1 ) == 0 ) + { + break; + } + + // At this point, the quote was determined to be part of an escape sequence + // so we need to move past the quote index to look for the next one + quoteIndex++; + } + else // There are no more quotes in the string and we haven't found the end yet + { + parseError( "Unterminated string literal" ); + } + } while ( true ); + + // Unescape the string + // the token for the string we'll try to read + var token:JSONToken = JSONToken.create( + JSONTokenType.STRING, + // Attach resulting string to the token to return it + unescapeString( jsonString.substr( loc, quoteIndex - loc ) ) ); + + // Move past the closing quote in the input string. This updates the next + // character in the input stream to be the character one after the closing quote + loc = quoteIndex + 1; + nextChar(); + + return token; + } + + /** + * Convert all JavaScript escape characters into normal characters + * + * @param input The input string to convert + * @return Original string with escape characters replaced by real characters + */ + public function unescapeString( input:String ):String + { + // Issue #104 - If the string contains any unescaped control characters, this + // is an error in strict mode + if ( strict && controlCharsRegExp.test( input ) ) + { + parseError( "String contains unescaped control character (0x00-0x1F)" ); + } + + var result:String = ""; + var backslashIndex:int = 0; + var nextSubstringStartPosition:int = 0; + var len:int = input.length; + do + { + // Find the next backslash in the input + backslashIndex = input.indexOf( '\\', nextSubstringStartPosition ); + + if ( backslashIndex >= 0 ) + { + result += input.substr( nextSubstringStartPosition, backslashIndex - nextSubstringStartPosition ); + + // Move past the backslash and next character (all escape sequences are + // two characters, except for \u, which will advance this further) + nextSubstringStartPosition = backslashIndex + 2; + + // Check the next character so we know what to escape + var escapedChar:String = input.charAt( backslashIndex + 1 ); + switch ( escapedChar ) + { + // Try to list the most common expected cases first to improve performance + + case '"': + result += escapedChar; + break; // quotation mark + case '\\': + result += escapedChar; + break; // reverse solidus + case 'n': + result += '\n'; + break; // newline + case 'r': + result += '\r'; + break; // carriage return + case 't': + result += '\t'; + break; // horizontal tab + + // Convert a unicode escape sequence to it's character value + case 'u': + + // Save the characters as a string we'll convert to an int + var hexValue:String = ""; + + var unicodeEndPosition:int = nextSubstringStartPosition + 4; + + // Make sure there are enough characters in the string leftover + if ( unicodeEndPosition > len ) + { + parseError( "Unexpected end of input. Expecting 4 hex digits after \\u." ); + } + + // Try to find 4 hex characters + for ( var i:int = nextSubstringStartPosition; i < unicodeEndPosition; i++ ) + { + // get the next character and determine + // if it's a valid hex digit or not + var possibleHexChar:String = input.charAt( i ); + if ( !isHexDigit( possibleHexChar ) ) + { + parseError( "Excepted a hex digit, but found: " + possibleHexChar ); + } + + // Valid hex digit, add it to the value + hexValue += possibleHexChar; + } + + // Convert hexValue to an integer, and use that + // integer value to create a character to add + // to our string. + result += String.fromCharCode( parseInt( hexValue, 16 ) ); + + // Move past the 4 hex digits that we just read + nextSubstringStartPosition = unicodeEndPosition; + break; + + case 'f': + result += '\f'; + break; // form feed + case '/': + result += '/'; + break; // solidus + case 'b': + result += '\b'; + break; // bell + default: + result += '\\' + escapedChar; // Couldn't unescape the sequence, so just pass it through + } + } + else + { + // No more backslashes to replace, append the rest of the string + result += input.substr( nextSubstringStartPosition ); + break; + } + + } while ( nextSubstringStartPosition < len ); + + return result; + } + + /** + * Attempts to read a number from the input string. Places + * the character location at the first character after the + * number. + * + * @return The JSONToken with the number value if a number could + * be read. Throws an error otherwise. + */ + private final function readNumber():JSONToken + { + // the string to accumulate the number characters + // into that we'll convert to a number at the end + var input:String = ""; + + // check for a negative number + if ( ch == '-' ) + { + input += '-'; + nextChar(); + } + + // the number must start with a digit + if ( !isDigit( ch ) ) + { + parseError( "Expecting a digit" ); + } + + // 0 can only be the first digit if it + // is followed by a decimal point + if ( ch == '0' ) + { + input += ch; + nextChar(); + + // make sure no other digits come after 0 + if ( isDigit( ch ) ) + { + parseError( "A digit cannot immediately follow 0" ); + } + // unless we have 0x which starts a hex number, but this + // doesn't match JSON spec so check for not strict mode. + else if ( !strict && ch == 'x' ) + { + // include the x in the input + input += ch; + nextChar(); + + // need at least one hex digit after 0x to + // be valid + if ( isHexDigit( ch ) ) + { + input += ch; + nextChar(); + } + else + { + parseError( "Number in hex format require at least one hex digit after \"0x\"" ); + } + + // consume all of the hex values + while ( isHexDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + } + else + { + // read numbers while we can + while ( isDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + + // check for a decimal value + if ( ch == '.' ) + { + input += '.'; + nextChar(); + + // after the decimal there has to be a digit + if ( !isDigit( ch ) ) + { + parseError( "Expecting a digit" ); + } + + // read more numbers to get the decimal value + while ( isDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + + // check for scientific notation + if ( ch == 'e' || ch == 'E' ) + { + input += "e" + nextChar(); + // check for sign + if ( ch == '+' || ch == '-' ) + { + input += ch; + nextChar(); + } + + // require at least one number for the exponent + // in this case + if ( !isDigit( ch ) ) + { + parseError( "Scientific notation number needs exponent value" ); + } + + // read in the exponent + while ( isDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + + // convert the string to a number value + var num:Number = Number( input ); + + if ( isFinite( num ) && !isNaN( num ) ) + { + // the token for the number that we've read + return JSONToken.create( JSONTokenType.NUMBER, num ); + } + else + { + parseError( "Number " + num + " is not valid!" ); + } + + return null; + } + + /** + * Reads the next character in the input + * string and advances the character location. + * + * @return The next character in the input string, or + * null if we've read past the end. + */ + private final function nextChar():String + { + return ch = jsonString.charAt( loc++ ); + } + + /** + * Advances the character location past any + * sort of white space and comments + */ + private final function skipIgnored():void + { + var originalLoc:int; + + // keep trying to skip whitespace and comments as long + // as we keep advancing past the original location + do + { + originalLoc = loc; + skipWhite(); + skipComments(); + } while ( originalLoc != loc ); + } + + /** + * Skips comments in the input string, either + * single-line or multi-line. Advances the character + * to the first position after the end of the comment. + */ + private function skipComments():void + { + if ( ch == '/' ) + { + // Advance past the first / to find out what type of comment + nextChar(); + switch ( ch ) + { + case '/': // single-line comment, read through end of line + + // Loop over the characters until we find + // a newline or until there's no more characters left + do + { + nextChar(); + } while ( ch != '\n' && ch != '' ) + + // move past the \n + nextChar(); + + break; + + case '*': // multi-line comment, read until closing */ + + // move past the opening * + nextChar(); + + // try to find a trailing */ + while ( true ) + { + if ( ch == '*' ) + { + // check to see if we have a closing / + nextChar(); + if ( ch == '/' ) + { + // move past the end of the closing */ + nextChar(); + break; + } + } + else + { + // move along, looking if the next character is a * + nextChar(); + } + + // when we're here we've read past the end of + // the string without finding a closing */, so error + if ( ch == '' ) + { + parseError( "Multi-line comment not closed" ); + } + } + + break; + + // Can't match a comment after a /, so it's a parsing error + default: + parseError( "Unexpected " + ch + " encountered (expecting '/' or '*' )" ); + } + } + + } + + + /** + * Skip any whitespace in the input string and advances + * the character to the first character after any possible + * whitespace. + */ + private final function skipWhite():void + { + // As long as there are spaces in the input + // stream, advance the current location pointer + // past them + while ( isWhiteSpace( ch ) ) + { + nextChar(); + } + + } + + /** + * Determines if a character is whitespace or not. + * + * @return True if the character passed in is a whitespace + * character + */ + private final function isWhiteSpace( ch:String ):Boolean + { + // Check for the whitespace defined in the spec + if ( ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r' ) + { + return true; + } + // If we're not in strict mode, we also accept non-breaking space + else if ( !strict && ch.charCodeAt( 0 ) == 160 ) + { + return true; + } + + return false; + } + + /** + * Determines if a character is a digit [0-9]. + * + * @return True if the character passed in is a digit + */ + private final function isDigit( ch:String ):Boolean + { + return ( ch >= '0' && ch <= '9' ); + } + + /** + * Determines if a character is a hex digit [0-9A-Fa-f]. + * + * @return True if the character passed in is a hex digit + */ + private final function isHexDigit( ch:String ):Boolean + { + return ( isDigit( ch ) || ( ch >= 'A' && ch <= 'F' ) || ( ch >= 'a' && ch <= 'f' ) ); + } + + /** + * Raises a parsing error with a specified message, tacking + * on the error location and the original string. + * + * @param message The message indicating why the error occurred + */ + public final function parseError( message:String ):void + { + throw new JSONParseError( message, loc, jsonString ); + } + } + +} diff --git a/DISPLAYER/com/adobe/utils/ArrayUtil.as b/DISPLAYER/com/adobe/utils/ArrayUtil.as new file mode 100644 index 0000000000000000000000000000000000000000..e65612004df301a00c9b218946614e715ab5781e --- /dev/null +++ b/DISPLAYER/com/adobe/utils/ArrayUtil.as @@ -0,0 +1,187 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.utils +{ + + /** + * Class that contains static utility methods for manipulating and working + * with Arrays. + * + * Note that all APIs assume that they are working with well formed arrays. + * i.e. they will only manipulate indexed values. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public class ArrayUtil + { + + /** + * Determines whether the specified array contains the specified value. + * + * @param arr The array that will be checked for the specified value. + * + * @param value The object which will be searched for within the array + * + * @return True if the array contains the value, False if it does not. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function arrayContainsValue(arr:Array, value:Object):Boolean + { + return (arr.indexOf(value) != -1); + } + + /** + * Remove all instances of the specified value from the array, + * + * @param arr The array from which the value will be removed + * + * @param value The object that will be removed from the array. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function removeValueFromArray(arr:Array, value:Object):void + { + var len:uint = arr.length; + + for(var i:Number = len; i > -1; i--) + { + if(arr[i] === value) + { + arr.splice(i, 1); + } + } + } + + /** + * Create a new array that only contains unique instances of objects + * in the specified array. + * + * Basically, this can be used to remove duplication object instances + * from an array + * + * @param arr The array which contains the values that will be used to + * create the new array that contains no duplicate values. + * + * @return A new array which only contains unique items from the specified + * array. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function createUniqueCopy(a:Array):Array + { + var newArray:Array = new Array(); + + var len:Number = a.length; + var item:Object; + + for (var i:uint = 0; i < len; ++i) + { + item = a[i]; + + if(ArrayUtil.arrayContainsValue(newArray, item)) + { + continue; + } + + newArray.push(item); + } + + return newArray; + } + + /** + * Creates a copy of the specified array. + * + * Note that the array returned is a new array but the items within the + * array are not copies of the items in the original array (but rather + * references to the same items) + * + * @param arr The array that will be copies + * + * @return A new array which contains the same items as the array passed + * in. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function copyArray(arr:Array):Array + { + return arr.slice(); + } + + /** + * Compares two arrays and returns a boolean indicating whether the arrays + * contain the same values at the same indexes. + * + * @param arr1 The first array that will be compared to the second. + * + * @param arr2 The second array that will be compared to the first. + * + * @return True if the arrays contains the same values at the same indexes. + False if they do not. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function arraysAreEqual(arr1:Array, arr2:Array):Boolean + { + if(arr1.length != arr2.length) + { + return false; + } + + var len:Number = arr1.length; + + for(var i:Number = 0; i < len; i++) + { + if(arr1[i] !== arr2[i]) + { + return false; + } + } + + return true; + } + } +} diff --git a/DISPLAYER/com/adobe/utils/DateUtil.as b/DISPLAYER/com/adobe/utils/DateUtil.as new file mode 100644 index 0000000000000000000000000000000000000000..a741df0d7628fb5d3f025ee452bbfa5e1591c041 --- /dev/null +++ b/DISPLAYER/com/adobe/utils/DateUtil.as @@ -0,0 +1,701 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.utils +{ + import mx.formatters.DateBase; + + /** + * Class that contains static utility methods for manipulating and working + * with Dates. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public class DateUtil + { + + /** + * Returns the English Short Month name (3 letters) for the Month that + * the Date represents. + * + * @param d The Date instance whose month will be used to retrieve the + * short month name. + * + * @return An English 3 Letter Month abbreviation. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see SHORT_MONTH + */ + public static function getShortMonthName(d:Date):String + { + return DateBase.monthNamesShort[d.getMonth()]; + } + + /** + * Returns the index of the month that the short month name string + * represents. + * + * @param m The 3 letter abbreviation representing a short month name. + * + * @param Optional parameter indicating whether the search should be case + * sensitive + * + * @return A int that represents that month represented by the specifed + * short name. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see SHORT_MONTH + */ + public static function getShortMonthIndex(m:String):int + { + return DateBase.monthNamesShort.indexOf(m); + } + + /** + * Returns the English full Month name for the Month that + * the Date represents. + * + * @param d The Date instance whose month will be used to retrieve the + * full month name. + * + * @return An English full month name. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see FULL_MONTH + */ + public static function getFullMonthName(d:Date):String + { + return DateBase.monthNamesLong[d.getMonth()]; + } + + /** + * Returns the index of the month that the full month name string + * represents. + * + * @param m A full month name. + * + * @return A int that represents that month represented by the specifed + * full month name. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see FULL_MONTH + */ + public static function getFullMonthIndex(m:String):int + { + return DateBase.monthNamesLong.indexOf(m); + } + + /** + * Returns the English Short Day name (3 letters) for the day that + * the Date represents. + * + * @param d The Date instance whose day will be used to retrieve the + * short day name. + * + * @return An English 3 Letter day abbreviation. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see SHORT_DAY + */ + public static function getShortDayName(d:Date):String + { + return DateBase.dayNamesShort[d.getDay()]; + } + + /** + * Returns the index of the day that the short day name string + * represents. + * + * @param m A short day name. + * + * @return A int that represents that short day represented by the specifed + * full month name. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see SHORT_DAY + */ + public static function getShortDayIndex(d:String):int + { + return DateBase.dayNamesShort.indexOf(d); + } + + /** + * Returns the English full day name for the day that + * the Date represents. + * + * @param d The Date instance whose day will be used to retrieve the + * full day name. + * + * @return An English full day name. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see FULL_DAY + */ + public static function getFullDayName(d:Date):String + { + return DateBase.dayNamesLong[d.getDay()]; + } + + /** + * Returns the index of the day that the full day name string + * represents. + * + * @param m A full day name. + * + * @return A int that represents that full day represented by the specifed + * full month name. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see FULL_DAY + */ + public static function getFullDayIndex(d:String):int + { + return DateBase.dayNamesLong.indexOf(d); + } + + /** + * Returns a two digit representation of the year represented by the + * specified date. + * + * @param d The Date instance whose year will be used to generate a two + * digit string representation of the year. + * + * @return A string that contains a 2 digit representation of the year. + * Single digits will be padded with 0. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function getShortYear(d:Date):String + { + var dStr:String = String(d.getFullYear()); + + if(dStr.length < 3) + { + return dStr; + } + + return (dStr.substr(dStr.length - 2)); + } + + /** + * Compares two dates and returns an integer depending on their relationship. + * + * Returns -1 if d1 is greater than d2. + * Returns 1 if d2 is greater than d1. + * Returns 0 if both dates are equal. + * + * @param d1 The date that will be compared to the second date. + * @param d2 The date that will be compared to the first date. + * + * @return An int indicating how the two dates compare. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function compareDates(d1:Date, d2:Date):int + { + var d1ms:Number = d1.getTime(); + var d2ms:Number = d2.getTime(); + + if(d1ms > d2ms) + { + return -1; + } + else if(d1ms < d2ms) + { + return 1; + } + else + { + return 0; + } + } + + /** + * Returns a short hour (0 - 12) represented by the specified date. + * + * If the hour is less than 12 (0 - 11 AM) then the hour will be returned. + * + * If the hour is greater than 12 (12 - 23 PM) then the hour minus 12 + * will be returned. + * + * @param d1 The Date from which to generate the short hour + * + * @return An int between 0 and 13 ( 1 - 12 ) representing the short hour. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function getShortHour(d:Date):int + { + var h:int = d.hours; + + if(h == 0 || h == 12) + { + return 12; + } + else if(h > 12) + { + return h - 12; + } + else + { + return h; + } + } + + /** + * Returns a string indicating whether the date represents a time in the + * ante meridiem (AM) or post meridiem (PM). + * + * If the hour is less than 12 then "AM" will be returned. + * + * If the hour is greater than 12 then "PM" will be returned. + * + * @param d1 The Date from which to generate the 12 hour clock indicator. + * + * @return A String ("AM" or "PM") indicating which half of the day the + * hour represents. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function getAMPM(d:Date):String + { + return (d.hours > 11)? "PM" : "AM"; + } + + /** + * Parses dates that conform to RFC822 into Date objects. This method also + * supports four-digit years (not supported in RFC822), but two-digit years + * (referring to the 20th century) are fine, too. + * + * This function is useful for parsing RSS .91, .92, and 2.0 dates. + * + * @param str + * + * @returns + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see http://asg.web.cmu.edu/rfc/rfc822.html + */ + public static function parseRFC822(str:String):Date + { + var finalDate:Date; + try + { + var dateParts:Array = str.split(" "); + var day:String = null; + + if (dateParts[0].search(/\d/) == -1) + { + day = dateParts.shift().replace(/\W/, ""); + } + + var date:Number = Number(dateParts.shift()); + var month:Number = Number(DateUtil.getShortMonthIndex(dateParts.shift())); + var year:Number = Number(dateParts.shift()); + var timeParts:Array = dateParts.shift().split(":"); + var hour:Number = int(timeParts.shift()); + var minute:Number = int(timeParts.shift()); + var second:Number = (timeParts.length > 0) ? int(timeParts.shift()): 0; + + var milliseconds:Number = Date.UTC(year, month, date, hour, minute, second, 0); + + var timezone:String = dateParts.shift(); + var offset:Number = 0; + + if (timezone.search(/\d/) == -1) + { + switch(timezone) + { + case "UT": + offset = 0; + break; + case "UTC": + offset = 0; + break; + case "GMT": + offset = 0; + break; + case "EST": + offset = (-5 * 3600000); + break; + case "EDT": + offset = (-4 * 3600000); + break; + case "CST": + offset = (-6 * 3600000); + break; + case "CDT": + offset = (-5 * 3600000); + break; + case "MST": + offset = (-7 * 3600000); + break; + case "MDT": + offset = (-6 * 3600000); + break; + case "PST": + offset = (-8 * 3600000); + break; + case "PDT": + offset = (-7 * 3600000); + break; + case "Z": + offset = 0; + break; + case "A": + offset = (-1 * 3600000); + break; + case "M": + offset = (-12 * 3600000); + break; + case "N": + offset = (1 * 3600000); + break; + case "Y": + offset = (12 * 3600000); + break; + default: + offset = 0; + } + } + else + { + var multiplier:Number = 1; + var oHours:Number = 0; + var oMinutes:Number = 0; + if (timezone.length != 4) + { + if (timezone.charAt(0) == "-") + { + multiplier = -1; + } + timezone = timezone.substr(1, 4); + } + oHours = Number(timezone.substr(0, 2)); + oMinutes = Number(timezone.substr(2, 2)); + offset = (((oHours * 3600000) + (oMinutes * 60000)) * multiplier); + } + + finalDate = new Date(milliseconds - offset); + + if (finalDate.toString() == "Invalid Date") + { + throw new Error("This date does not conform to RFC822."); + } + } + catch (e:Error) + { + var eStr:String = "Unable to parse the string [" +str+ "] into a date. "; + eStr += "The internal error was: " + e.toString(); + throw new Error(eStr); + } + return finalDate; + } + + /** + * Returns a date string formatted according to RFC822. + * + * @param d + * + * @returns + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see http://asg.web.cmu.edu/rfc/rfc822.html + */ + public static function toRFC822(d:Date):String + { + var date:Number = d.getUTCDate(); + var hours:Number = d.getUTCHours(); + var minutes:Number = d.getUTCMinutes(); + var seconds:Number = d.getUTCSeconds(); + var sb:String = new String(); + sb += DateBase.dayNamesShort[d.getUTCDay()]; + sb += ", "; + + if (date < 10) + { + sb += "0"; + } + sb += date; + sb += " "; + //sb += DateUtil.SHORT_MONTH[d.getUTCMonth()]; + sb += DateBase.monthNamesShort[d.getUTCMonth()]; + sb += " "; + sb += d.getUTCFullYear(); + sb += " "; + if (hours < 10) + { + sb += "0"; + } + sb += hours; + sb += ":"; + if (minutes < 10) + { + sb += "0"; + } + sb += minutes; + sb += ":"; + if (seconds < 10) + { + sb += "0"; + } + sb += seconds; + sb += " GMT"; + return sb; + } + + /** + * Parses dates that conform to the W3C Date-time Format into Date objects. + * + * This function is useful for parsing RSS 1.0 and Atom 1.0 dates. + * + * @param str + * + * @returns + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see http://www.w3.org/TR/NOTE-datetime + */ + public static function parseW3CDTF(str:String):Date + { + var finalDate:Date; + try + { + var dateStr:String = str.substring(0, str.indexOf("T")); + var timeStr:String = str.substring(str.indexOf("T")+1, str.length); + var dateArr:Array = dateStr.split("-"); + var year:Number = Number(dateArr.shift()); + var month:Number = Number(dateArr.shift()); + var date:Number = Number(dateArr.shift()); + + var multiplier:Number; + var offsetHours:Number; + var offsetMinutes:Number; + var offsetStr:String; + + if (timeStr.indexOf("Z") != -1) + { + multiplier = 1; + offsetHours = 0; + offsetMinutes = 0; + timeStr = timeStr.replace("Z", ""); + } + else if (timeStr.indexOf("+") != -1) + { + multiplier = 1; + offsetStr = timeStr.substring(timeStr.indexOf("+")+1, timeStr.length); + offsetHours = Number(offsetStr.substring(0, offsetStr.indexOf(":"))); + offsetMinutes = Number(offsetStr.substring(offsetStr.indexOf(":")+1, offsetStr.length)); + timeStr = timeStr.substring(0, timeStr.indexOf("+")); + } + else // offset is - + { + multiplier = -1; + offsetStr = timeStr.substring(timeStr.indexOf("-")+1, timeStr.length); + offsetHours = Number(offsetStr.substring(0, offsetStr.indexOf(":"))); + offsetMinutes = Number(offsetStr.substring(offsetStr.indexOf(":")+1, offsetStr.length)); + timeStr = timeStr.substring(0, timeStr.indexOf("-")); + } + var timeArr:Array = timeStr.split(":"); + var hour:Number = Number(timeArr.shift()); + var minutes:Number = Number(timeArr.shift()); + var secondsArr:Array = (timeArr.length > 0) ? String(timeArr.shift()).split(".") : null; + var seconds:Number = (secondsArr != null && secondsArr.length > 0) ? Number(secondsArr.shift()) : 0; + //var milliseconds:Number = (secondsArr != null && secondsArr.length > 0) ? Number(secondsArr.shift()) : 0; + + var milliseconds:Number = (secondsArr != null && secondsArr.length > 0) ? 1000*parseFloat("0." + secondsArr.shift()) : 0; + var utc:Number = Date.UTC(year, month-1, date, hour, minutes, seconds, milliseconds); + var offset:Number = (((offsetHours * 3600000) + (offsetMinutes * 60000)) * multiplier); + finalDate = new Date(utc - offset); + + if (finalDate.toString() == "Invalid Date") + { + throw new Error("This date does not conform to W3CDTF."); + } + } + catch (e:Error) + { + var eStr:String = "Unable to parse the string [" +str+ "] into a date. "; + eStr += "The internal error was: " + e.toString(); + throw new Error(eStr); + } + return finalDate; + } + + /** + * Returns a date string formatted according to W3CDTF. + * + * @param d + * @param includeMilliseconds Determines whether to include the + * milliseconds value (if any) in the formatted string. + * + * @returns + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see http://www.w3.org/TR/NOTE-datetime + */ + public static function toW3CDTF(d:Date,includeMilliseconds:Boolean=false):String + { + var date:Number = d.getUTCDate(); + var month:Number = d.getUTCMonth(); + var hours:Number = d.getUTCHours(); + var minutes:Number = d.getUTCMinutes(); + var seconds:Number = d.getUTCSeconds(); + var milliseconds:Number = d.getUTCMilliseconds(); + var sb:String = new String(); + + sb += d.getUTCFullYear(); + sb += "-"; + + //thanks to "dom" who sent in a fix for the line below + if (month + 1 < 10) + { + sb += "0"; + } + sb += month + 1; + sb += "-"; + if (date < 10) + { + sb += "0"; + } + sb += date; + sb += "T"; + if (hours < 10) + { + sb += "0"; + } + sb += hours; + sb += ":"; + if (minutes < 10) + { + sb += "0"; + } + sb += minutes; + sb += ":"; + if (seconds < 10) + { + sb += "0"; + } + sb += seconds; + if (includeMilliseconds && milliseconds > 0) + { + sb += "."; + sb += milliseconds; + } + sb += "-00:00"; + return sb; + } + + /** + * Converts a date into just after midnight. + */ + public static function makeMorning(d:Date):Date + { + var d:Date = new Date(d.time); + d.hours = 0; + d.minutes = 0; + d.seconds = 0; + d.milliseconds = 0; + return d; + } + + /** + * Converts a date into just befor midnight. + */ + public static function makeNight(d:Date):Date + { + var d:Date = new Date(d.time); + d.hours = 23; + d.minutes = 59; + d.seconds = 59; + d.milliseconds = 999; + return d; + } + + /** + * Sort of converts a date into UTC. + */ + public static function getUTCDate(d:Date):Date + { + var nd:Date = new Date(); + var offset:Number = d.getTimezoneOffset() * 60 * 1000; + nd.setTime(d.getTime() + offset); + return nd; + } + } +} diff --git a/DISPLAYER/com/adobe/utils/DictionaryUtil.as b/DISPLAYER/com/adobe/utils/DictionaryUtil.as new file mode 100644 index 0000000000000000000000000000000000000000..9552ef494e1c33bec58a24638d58c5e8392441e7 --- /dev/null +++ b/DISPLAYER/com/adobe/utils/DictionaryUtil.as @@ -0,0 +1,87 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.utils +{ + import flash.utils.Dictionary; + + public class DictionaryUtil + { + + /** + * Returns an Array of all keys within the specified dictionary. + * + * @param d The Dictionary instance whose keys will be returned. + * + * @return Array of keys contained within the Dictionary + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function getKeys(d:Dictionary):Array + { + var a:Array = new Array(); + + for (var key:Object in d) + { + a.push(key); + } + + return a; + } + + /** + * Returns an Array of all values within the specified dictionary. + * + * @param d The Dictionary instance whose values will be returned. + * + * @return Array of values contained within the Dictionary + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function getValues(d:Dictionary):Array + { + var a:Array = new Array(); + + for each (var value:Object in d) + { + a.push(value); + } + + return a; + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/utils/IntUtil.as b/DISPLAYER/com/adobe/utils/IntUtil.as new file mode 100644 index 0000000000000000000000000000000000000000..8c812fe085a67d3a05d3367bfeb0aace74629a41 --- /dev/null +++ b/DISPLAYER/com/adobe/utils/IntUtil.as @@ -0,0 +1,99 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.adobe.utils { + + import flash.utils.Endian; + + /** + * Contains reusable methods for operations pertaining + * to int values. + */ + public class IntUtil { + + /** + * Rotates x left n bits + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function rol ( x:int, n:int ):int { + return ( x << n ) | ( x >>> ( 32 - n ) ); + } + + /** + * Rotates x right n bits + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function ror ( x:int, n:int ):uint { + var nn:int = 32 - n; + return ( x << nn ) | ( x >>> ( 32 - nn ) ); + } + + /** String for quick lookup of a hex character based on index */ + private static var hexChars:String = "0123456789abcdef"; + + /** + * Outputs the hex value of a int, allowing the developer to specify + * the endinaness in the process. Hex output is lowercase. + * + * @param n The int value to output as hex + * @param bigEndian Flag to output the int as big or little endian + * @return A string of length 8 corresponding to the + * hex representation of n ( minus the leading "0x" ) + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function toHex( n:int, bigEndian:Boolean = false ):String { + var s:String = ""; + + if ( bigEndian ) { + for ( var i:int = 0; i < 4; i++ ) { + s += hexChars.charAt( ( n >> ( ( 3 - i ) * 8 + 4 ) ) & 0xF ) + + hexChars.charAt( ( n >> ( ( 3 - i ) * 8 ) ) & 0xF ); + } + } else { + for ( var x:int = 0; x < 4; x++ ) { + s += hexChars.charAt( ( n >> ( x * 8 + 4 ) ) & 0xF ) + + hexChars.charAt( ( n >> ( x * 8 ) ) & 0xF ); + } + } + + return s; + } + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/utils/NumberFormatter.as b/DISPLAYER/com/adobe/utils/NumberFormatter.as new file mode 100644 index 0000000000000000000000000000000000000000..6fe12e14593cf7c9c209476b8567e6aa9ddbd771 --- /dev/null +++ b/DISPLAYER/com/adobe/utils/NumberFormatter.as @@ -0,0 +1,74 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.utils +{ + + /** + * Class that contains static utility methods for formatting Numbers + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + * + * @see #mx.formatters.NumberFormatter + */ + public class NumberFormatter + { + + /** + * Formats a number to include a leading zero if it is a single digit + * between -1 and 10. + * + * @param n The number that will be formatted + * + * @return A string with single digits between -1 and 10 padded with a + * leading zero. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function addLeadingZero(n:Number):String + { + var out:String = String(n); + + if(n < 10 && n > -1) + { + out = "0" + out; + } + + return out; + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/utils/StringUtil.as b/DISPLAYER/com/adobe/utils/StringUtil.as new file mode 100644 index 0000000000000000000000000000000000000000..d7e98ed08b4e943105e101158757f7fcdfa011cc --- /dev/null +++ b/DISPLAYER/com/adobe/utils/StringUtil.as @@ -0,0 +1,239 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.utils +{ + + /** + * Class that contains static utility methods for manipulating Strings. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public class StringUtil + { + + + /** + * Does a case insensitive compare or two strings and returns true if + * they are equal. + * + * @param s1 The first string to compare. + * + * @param s2 The second string to compare. + * + * @returns A boolean value indicating whether the strings' values are + * equal in a case sensitive compare. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function stringsAreEqual(s1:String, s2:String, + caseSensitive:Boolean):Boolean + { + if(caseSensitive) + { + return (s1 == s2); + } + else + { + return (s1.toUpperCase() == s2.toUpperCase()); + } + } + + /** + * Removes whitespace from the front and the end of the specified + * string. + * + * @param input The String whose beginning and ending whitespace will + * will be removed. + * + * @returns A String with whitespace removed from the begining and end + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function trim(input:String):String + { + return StringUtil.ltrim(StringUtil.rtrim(input)); + } + + /** + * Removes whitespace from the front of the specified string. + * + * @param input The String whose beginning whitespace will will be removed. + * + * @returns A String with whitespace removed from the begining + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function ltrim(input:String):String + { + var size:Number = input.length; + for(var i:Number = 0; i < size; i++) + { + if(input.charCodeAt(i) > 32) + { + return input.substring(i); + } + } + return ""; + } + + /** + * Removes whitespace from the end of the specified string. + * + * @param input The String whose ending whitespace will will be removed. + * + * @returns A String with whitespace removed from the end + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function rtrim(input:String):String + { + var size:Number = input.length; + for(var i:Number = size; i > 0; i--) + { + if(input.charCodeAt(i - 1) > 32) + { + return input.substring(0, i); + } + } + + return ""; + } + + /** + * Determines whether the specified string begins with the spcified prefix. + * + * @param input The string that the prefix will be checked against. + * + * @param prefix The prefix that will be tested against the string. + * + * @returns True if the string starts with the prefix, false if it does not. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function beginsWith(input:String, prefix:String):Boolean + { + return (prefix == input.substring(0, prefix.length)); + } + + /** + * Determines whether the specified string ends with the spcified suffix. + * + * @param input The string that the suffic will be checked against. + * + * @param prefix The suffic that will be tested against the string. + * + * @returns True if the string ends with the suffix, false if it does not. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function endsWith(input:String, suffix:String):Boolean + { + return (suffix == input.substring(input.length - suffix.length)); + } + + /** + * Removes all instances of the remove string in the input string. + * + * @param input The string that will be checked for instances of remove + * string + * + * @param remove The string that will be removed from the input string. + * + * @returns A String with the remove string removed. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function remove(input:String, remove:String):String + { + return StringUtil.replace(input, remove, ""); + } + + /** + * Replaces all instances of the replace string in the input string + * with the replaceWith string. + * + * @param input The string that instances of replace string will be + * replaces with removeWith string. + * + * @param replace The string that will be replaced by instances of + * the replaceWith string. + * + * @param replaceWith The string that will replace instances of replace + * string. + * + * @returns A new String with the replace string replaced with the + * replaceWith string. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function replace(input:String, replace:String, replaceWith:String):String + { + return input.split(replace).join(replaceWith); + } + + + /** + * Specifies whether the specified string is either non-null, or contains + * characters (i.e. length is greater that 0) + * + * @param s The string which is being checked for a value + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function stringHasValue(s:String):Boolean + { + //todo: this needs a unit test + return (s != null && s.length > 0); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/utils/XMLUtil.as b/DISPLAYER/com/adobe/utils/XMLUtil.as new file mode 100644 index 0000000000000000000000000000000000000000..24fce00fa119708367bc574788efc0ccd86dd817 --- /dev/null +++ b/DISPLAYER/com/adobe/utils/XMLUtil.as @@ -0,0 +1,168 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.utils +{ + + public class XMLUtil + { + /** + * Constant representing a text node type returned from XML.nodeKind. + * + * @see XML.nodeKind() + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public static const TEXT:String = "text"; + + /** + * Constant representing a comment node type returned from XML.nodeKind. + * + * @see XML.nodeKind() + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public static const COMMENT:String = "comment"; + + /** + * Constant representing a processing instruction type returned from XML.nodeKind. + * + * @see XML.nodeKind() + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public static const PROCESSING_INSTRUCTION:String = "processing-instruction"; + + /** + * Constant representing an attribute type returned from XML.nodeKind. + * + * @see XML.nodeKind() + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public static const ATTRIBUTE:String = "attribute"; + + /** + * Constant representing a element type returned from XML.nodeKind. + * + * @see XML.nodeKind() + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public static const ELEMENT:String = "element"; + + /** + * Checks whether the specified string is valid and well formed XML. + * + * @param data The string that is being checked to see if it is valid XML. + * + * @return A Boolean value indicating whether the specified string is + * valid XML. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public static function isValidXML(data:String):Boolean + { + var xml:XML; + + try + { + xml = new XML(data); + } + catch(e:Error) + { + return false; + } + + if(xml.nodeKind() != XMLUtil.ELEMENT) + { + return false; + } + + return true; + } + + /** + * Returns the next sibling of the specified node relative to the node's parent. + * + * @param x The node whose next sibling will be returned. + * + * @return The next sibling of the node. null if the node does not have + * a sibling after it, or if the node has no parent. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public static function getNextSibling(x:XML):XML + { + return XMLUtil.getSiblingByIndex(x, 1); + } + + /** + * Returns the sibling before the specified node relative to the node's parent. + * + * @param x The node whose sibling before it will be returned. + * + * @return The sibling before the node. null if the node does not have + * a sibling before it, or if the node has no parent. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public static function getPreviousSibling(x:XML):XML + { + return XMLUtil.getSiblingByIndex(x, -1); + } + + protected static function getSiblingByIndex(x:XML, count:int):XML + { + var out:XML; + + try + { + out = x.parent().children()[x.childIndex() + count]; + } + catch(e:Error) + { + return null; + } + + return out; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/webapis/ServiceBase.as b/DISPLAYER/com/adobe/webapis/ServiceBase.as new file mode 100644 index 0000000000000000000000000000000000000000..7080287c00a72d5f07fe5c93f674d2b94adf347b --- /dev/null +++ b/DISPLAYER/com/adobe/webapis/ServiceBase.as @@ -0,0 +1,48 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +package com.adobe.webapis +{ + import flash.events.EventDispatcher; + + /** + * Base class for remote service classes. + */ + public class ServiceBase extends EventDispatcher + { + public function ServiceBase() + { + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/webapis/URLLoaderBase.as b/DISPLAYER/com/adobe/webapis/URLLoaderBase.as new file mode 100644 index 0000000000000000000000000000000000000000..fc0085c45b61f75c22b041fc9b7becf831165796 --- /dev/null +++ b/DISPLAYER/com/adobe/webapis/URLLoaderBase.as @@ -0,0 +1,108 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.webapis +{ + import flash.events.IOErrorEvent; + import flash.events.SecurityErrorEvent; + import flash.events.ProgressEvent; + + import com.adobe.net.DynamicURLLoader; + + /** + * Dispatched when data is + * received as the download operation progresses. + * + * @eventType flash.events.ProgressEvent.PROGRESS + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + [Event(name="progress", type="flash.events.ProgressEvent")] + + /** + * Dispatched if a call to the server results in a fatal + * error that terminates the download. + * + * @eventType flash.events.IOErrorEvent.IO_ERROR + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + [Event(name="ioError", type="flash.events.IOErrorEvent")] + + /** + * A securityError event occurs if a call attempts to + * load data from a server outside the security sandbox. + * + * @eventType flash.events.SecurityErrorEvent.SECURITY_ERROR + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + [Event(name="securityError", type="flash.events.SecurityErrorEvent")] + + /** + * Base class for services that utilize URLLoader + * to communicate with remote APIs / Services. + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + */ + public class URLLoaderBase extends ServiceBase + { + protected function getURLLoader():DynamicURLLoader + { + var loader:DynamicURLLoader = new DynamicURLLoader(); + loader.addEventListener("progress", onProgress); + loader.addEventListener("ioError", onIOError); + loader.addEventListener("securityError", onSecurityError); + + return loader; + } + + private function onIOError(event:IOErrorEvent):void + { + dispatchEvent(event); + } + + private function onSecurityError(event:SecurityErrorEvent):void + { + dispatchEvent(event); + } + + private function onProgress(event:ProgressEvent):void + { + dispatchEvent(event); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/adobe/webapis/events/ServiceEvent.as b/DISPLAYER/com/adobe/webapis/events/ServiceEvent.as new file mode 100644 index 0000000000000000000000000000000000000000..c5d327df681b0fbd2a5af7bfdc38304016bdad80 --- /dev/null +++ b/DISPLAYER/com/adobe/webapis/events/ServiceEvent.as @@ -0,0 +1,82 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +package com.adobe.webapis.events +{ + + import flash.events.Event; + + /** + * Event class that contains data loaded from remote services. + * + * @author Mike Chambers + */ + public class ServiceEvent extends Event + { + private var _data:Object = new Object();; + + /** + * Constructor for ServiceEvent class. + * + * @param type The type of event that the instance represents. + */ + public function ServiceEvent(type:String, bubbles:Boolean = false, + cancelable:Boolean=false) + { + super(type, bubbles, cancelable); + } + + /** + * This object contains data loaded in response + * to remote service calls, and properties associated with that call. + */ + public function get data():Object + { + return _data; + } + + public function set data(d:Object):void + { + _data = d; + } + + public override function clone():Event + { + var out:ServiceEvent = new ServiceEvent(type, bubbles, cancelable); + out.data = data; + + return out; + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/Carrot.as b/DISPLAYER/com/carrot/Carrot.as new file mode 100644 index 0000000000000000000000000000000000000000..a3a7d9cb5092545d19f0e5ece7a969d49c262a0a --- /dev/null +++ b/DISPLAYER/com/carrot/Carrot.as @@ -0,0 +1,613 @@ +/* Carrot -- Copyright (C) 2012 GoCarrot Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.carrot +{ + import com.carrot.adobe.crypto.*; + import com.carrot.adobe.serialization.json.JSON; + import flash.external.ExternalInterface; + import flash.net.URLRequest; + import flash.net.URLRequestMethod; + import flash.net.URLVariables; + import flash.net.URLLoader; + import flash.events.Event; + import flash.utils.ByteArray; + import flash.display.BitmapData; + import flash.system.Capabilities; + import flash.events.HTTPStatusEvent; + import flash.events.IOErrorEvent; + import flash.utils.Dictionary; + import ru.inspirit.net.MultipartURLLoader; + import ru.inspirit.net.events.MultipartURLLoaderEvent; + import com.laiyonghao.Uuid; + import com.sociodox.utils.Base64; + + /** + * Allows you to interact with the Carrot service from your Flash application. + * + *

All calls to the Carrot service are asynchronous and have an optional callback function + * which will be called upon completion of the API call.

+ */ + public class Carrot + { + public static const NOT_AUTHORIZED:String = "Carrot user has not authorized application."; + public static const NOT_CREATED:String = "Carrot user does not exist."; + public static const UNKNOWN:String = "Carrot user status unknown."; + public static const READ_ONLY:String = "Carrot user has not granted 'publish_actions' permission."; + public static const AUTHORIZED:String = "Carrot user authorized."; + public static const OK:String = "Operation successful."; + public static const ERROR:String = "Operation unsuccessful."; + public static const BAD_SECRET:String = "Operation unsuccessful (bad Carrot secret)."; + + public static const SDKVersion:String = "1.3"; + + private static const JS_SDK_LOAD:XML = + ; + + /** + * Create a new Carrot instance. + * + * @param appId Facebook Application Id for your application. + * @param appSecret Carrot Application Secret for your application. + * @param udid A per-user unique identifier. We suggest using email address or the Facebook 'third_party_id'. + * @param versionId A string specifying the current version of your application for metrics reporting. + */ + public function Carrot(appId:String, appSecret:String, udid:String, versionId:String = "unknown") { + if(appId === null) { + throw new Error("appId must not be null"); + } + else if(appSecret === null) { + throw new Error("appSecret must not be null"); + } + else if(udid === null) { + throw new Error("udid must not be null"); + } + + _appId = appId; + _appSecret = appSecret; + _udid = udid; + _status = UNKNOWN; + _appVersion = versionId; + _openUICalls = new Dictionary(); + + // Defaults + _postHostname = "gocarrot.com"; + _metricsHostname = "parsnip.gocarrot.com"; + _authHostname = "gocarrot.com"; + + // GoViral Facebook ANE + try { + _gv = flash.utils.getDefinitionByName("com.milkmangames.nativeextensions.GoViral") as Class; + _gvFacebookDispatcher = flash.utils.getDefinitionByName("com.milkmangames.nativeextensions.GVFacebookDispatcher") as Class; + _gvFacebookEvent = flash.utils.getDefinitionByName("com.milkmangames.nativeextensions.events.GVFacebookEvent") as Class; + } + catch(error:Error) {} + + if(!ExternalInterface.available && (_gv === null || _gvFacebookDispatcher === null || _gvFacebookEvent === null)) { + trace("ExternalInterface not available and GoViral ANE not found."); + } + + // Perform services discovery + if(!performServicesDiscovery()) { + trace("Could not perform services discovery. Carrot is offline."); + } + + try { + if(ExternalInterface.available) { + _httpStatusEvent = HTTPStatusEvent.HTTP_STATUS; + ExternalInterface.addCallback("teakUiCallback", handleUI); + ExternalInterface.call(JS_SDK_LOAD); + ExternalInterface.call("window.teak.init", _appId, _appSecret); + ExternalInterface.call("window.teak.setUdid", _udid); + ExternalInterface.call("window.teak.setSWFObjectID", ExternalInterface.objectID); + } + else { + _httpStatusEvent = HTTPStatusEvent.HTTP_RESPONSE_STATUS; + } + } catch(error:Error) { + _httpStatusEvent = HTTPStatusEvent.HTTP_RESPONSE_STATUS; + } + } + + private function handleUI(result:String, callbackId:String):void { + var decodedResult:Object = result ? com.carrot.adobe.serialization.json.JSON.decode(result) : {carrotResponse:null, fbResponse:null}; + var uiCallback:Function = _openUICalls[callbackId]; + if(uiCallback !== null) { + uiCallback(decodedResult.carrotResponse, decodedResult.fbResponse); + } + delete _openUICalls[callbackId]; + } + + /** + * The Carrot authentication status for the active user. + */ + public function get status():String { + return _status; + } + + /** + * Validate a user with the Carrot service. + * + * @param accessTokenOrFacebookId The Facebook user access token or Facebook Id for the user. + * @param callback A function which will be called upon completion of the user validation with the authentication status of the active user. + */ + public function validateUser(accessTokenOrFacebookId:String, callback:Function = null):Boolean { + if(accessTokenOrFacebookId === null) { + throw new Error("accessTokenOrFacebookId must not be null"); + } + + var params:Object = { + access_token: accessTokenOrFacebookId, + api_key: _udid + } + addCommonPayloadFields(params); + return httpRequest(_authHostname, URLRequestMethod.POST, "/games/" + _appId + "/users.json", params, null, function(event:HTTPStatusEvent):void { + switch(event.status) { + case 201: _status = AUTHORIZED; break; + case 401: _status = READ_ONLY; break; + case 404: _status = NOT_AUTHORIZED; break; + default: _status = UNKNOWN; break; + } + if(callback !== null) { + callback(_status); + } + }, true); + } + + /** + * Post an achievement. + * + * All achievements are defined under the 'earn an achievement' story in your game's + * settings. This call cannot be used to post any other stories. + * + * @param achievementId The object instance identifier of the achievement to be posted. + * @param callback Optional callback. + */ + public function postAchievement(achievementId:String, callback:Function = null):Boolean { + if(achievementId === null) { + throw new Error("achievementId must not be null"); + } + return postSignedRequest("/me/achievements.json", {achievement_id: achievementId}, null, callback); + } + + /** + * Post a high score to the Carrot service. + * + * @param score The user's score. Yes, it's an integer, and yes, you only get one per user per game. + * I'm sorry, that's just how Facebook does it... + * @param callback Optional callback. + */ + public function postHighScore(score:uint, callback:Function = null):Boolean { + return postSignedRequest("/me/scores.json", {value: score}, null, callback); + } + + /** + * Post a custom open graph action. + * + * This is the primary work horse of Teak. This method is used to post all custom actions, + * either as explicitly shared, implicitly shared, with a user message, with custom variables... + * + * @param actionId The identifier for the action, e.g. 'complete'. Refer to the 'Get Code' feature of the story you're implementing to get the correct identifier. + * @param objectInstanceId The identifier for the specific instance that should be posted. This is the value next to the '#' above every object in a story list. + * @param actionProperties Properties to be sent along with the Carrot action, or null. + * @param objectProperties Properties for the new object, if creating an object, or null. + * @param bitmapData BitmapData to upload, if creating an object, or null. + * @param callback A function which will be called upon completion of the action post. + */ + public function postAction(actionId:String, objectInstanceId:String, actionProperties:Object = null, objectProperties:Object = null, bitmapData:BitmapData = null, callback:Function = null):Boolean { + if(actionId === null) { + throw new Error("actionId must not be null"); + } + else if(objectInstanceId === null && objectProperties === null) { + throw new Error("objectProperties may not be null if objectInstanceId is null"); + } + else if(objectProperties !== null && !objectProperties.hasOwnProperty("object_type")) { + throw new Error("objectProperties must contain 'object_type'"); + } + else if(objectProperties === null && bitmapData !== null) { + throw new Error("objectProperties must not be null if bitmapData is included."); + } + + var params:Object = { + action_id: actionId, + action_properties: com.carrot.adobe.serialization.json.JSON.encode(actionProperties === null ? {} : actionProperties), + object_properties: com.carrot.adobe.serialization.json.JSON.encode(objectProperties === null ? {} : objectProperties) + } + if(objectInstanceId !== null) { + params.object_instance_id = objectInstanceId; + } + return postSignedRequest("/me/actions.json", params, bitmapData, callback); + } + + private function generateJSCallback(callback:Function):String { + var callbackId:String = null; + if(callback != null) { + callbackId = new Uuid().toString(); + _openUICalls[callbackId] = callback; + } + return callbackId; + } + + + /** + * Post a feed post to the user's wall + * + * This method is used to share arbitrary non-opengraph content to the user's wall. + * Depending on CMS configuration this method may cause a Facebook dialog to appear, or it may share + * seamlessly. + * + * @param objectInstanceId The identifier for the specific instance that should be posted. This is the value next to the '#' above every object in the list of feed posts. + * @param objectProperties Properties which can be inserted into the title, description, or link of the post through Custom Variables specified in the CMS. + * @param callback A function which will be called upon completion of the post. It takes two parameters, the first details the content of the post, + * the second will contain a 'post_id' value if the post was made, or no post_id value if the user cancelled making the post. + */ + public function popupFeedPost(objectInstanceId:String, objectProperties:Object, callback:Function = null):Boolean { + try { + if(ExternalInterface.available) { + ExternalInterface.call("window.teak.popupFeedPost", objectInstanceId, objectProperties, generateJSCallback(callback)); + return true; + } + } catch(error:Error) {} + + if(_gv !== null) { + if(objectInstanceId === null) { + throw new Error("objectInstanceId may not be null"); + } + + var params:Object = { + object_instance_id: objectInstanceId, + object_properties: com.carrot.adobe.serialization.json.JSON.encode(objectProperties === null ? {} : objectProperties) + }; + + try { + postSignedRequest("/me/feed_post.json", params, null, function(event:HTTPStatusEvent):void { + event.target.addEventListener(Event.COMPLETE, function(event:Event):void { + var data:Object = com.carrot.adobe.serialization.json.JSON.decode(event.target.loader.data); + + if(data.autoshare) { + var dispatcher:Object = _gv["goViral"]["facebookGraphRequest"].call(_gv["goViral"], + "me/feed", "POST", data.fb_data, "publish_actions"); + dispatcher["addRequestListener"].call(dispatcher, function(event:Event):void { + if(event.type === _gvFacebookEvent["FB_REQUEST_RESPONSE"] && event["data"]["postId"]) { + httpRequest("parsnip.gocarrot.com", URLRequestMethod.POST, "/feed_dialog_post", { + platform_id: data.post_id, + placement_id: event["data"]["postId"] + }, null, null); + } + else if(data.dialog_fallback) { + nativePopupFeedPost(data, callback); + } + }); + } + else { + nativePopupFeedPost(data, callback); + } + }); + }, true); + return true; + } catch(error:Error) {} + } + return false; + } + + public function sendRequest(requestId:String, options:Object, callback:Function = null):Boolean { + try{ + if(ExternalInterface.available) { + ExternalInterface.call("window.teak.sendRequest", requestId, options, generateJSCallback(callback)); + return true; + } + } catch(error:Error) {} + return false; + } + + /** + * Tell Carrot to track an arbitrary event. + * + * @param evenType The type of event you are tracking. + * @param eventValue The value of the event you are tracking. + * @param eventContext Optional additional context for the event. + */ + public function trackEvent(evenType:String, eventValue:String, eventContext:String = ""):Boolean { + if(evenType === null) { + throw new Error("evenType must not be null"); + } + if(eventValue === null) { + throw new Error("eventValue must not be null"); + } + + var params:Object = { + action_type: evenType, + object_type: eventValue, + object_instance_id: eventContext + } + + return postSignedRequest("/me/events", params, null, null); + } + + /** + * Inform Carrot about a purchase of premium currency for metrics tracking. + + * @param amount The amount of real money spent. + * @param currency The type of real money spent (eg. USD). + * @param callback A function which will be called upon completion of the high score post. + */ + public function postPremiumCurrencyPurchase(amount:Number, currency:String, callback:Function = null):Boolean { + var params:Object = { + amount: amount, + currency: currency + }; + return makeSignedRequest(_metricsHostname, "/purchase.json", URLRequestMethod.POST, params, null, callback); + } + +CONFIG::AirNative { + public function reportNativeInvokeEvent(arguments:Array):void { + var args:Array = arguments[0].split("#")[1].split("&"); + for(var i:uint = 0; i < args.length; i++) { + var arg:Array = args[i].split("="); + if(arg[0] === "target_url") { + var params:Array = unescape(arg[1]).split("?")[1].split("&"); + for(var j:uint = 0; j < params.length; j++) { + var param:Array = params[j].split("="); + if(param[0] === "teak_post_id") { + httpRequest("posts.gocarrot.com", URLRequestMethod.POST, "/" + param[1] + "/clicks", { + clicking_user_id: _udid, + no_status_code: true + }, null, null); + break; + } + } + break; + } + } + } +} + /* Private methods */ + + private function nativePopupFeedPost(data:Object, callback:Function = null):void { + if(_gv !== null) { + try { + if(data.code === 200) { + var dispatcher:Object = _gv["goViral"]["showFacebookShareDialog"].call(_gv["goViral"], + data.fb_data.name, + data.fb_data.caption, + data.fb_data.description, + data.fb_data.link, + data.fb_data.picture, + data.fb_data.ref === null ? null : {ref: data.fb_data.ref}); + + dispatcher["addDialogListener"].call(dispatcher, function(event:Event):void { + if(event.type === _gvFacebookEvent["FB_DIALOG_FINISHED"]) { + httpRequest("parsnip.gocarrot.com", URLRequestMethod.POST, "/feed_dialog_post", { + platform_id: data.post_id, + placement_id: event["data"]["postId"] + }, null, null); + } + if(callback !== null) callback(data, event["data"]); + }); + } + else { + if(callback !== null) callback(data); + } + } catch(error:Error) { + trace("GoViral::showFacebookShareDialog() error: " + error); + } + } + } + + private function performServicesDiscovery():Boolean { + var params:Object = { + game_id: _appId, + _method: "GET" + }; + addCommonPayloadFields(params); + + var loader:MultipartURLLoader = new MultipartURLLoader(); + for(var k:String in params) { + loader.addVariable(k, params[k]); + } + + loader.addEventListener(Event.COMPLETE, function(event:Event):void { + var services:Object = com.carrot.adobe.serialization.json.JSON.decode(event.target.loader.data.toString()); + _postHostname = services.post; + _authHostname = services.auth; + _metricsHostname = services.metrics; + }); + + loader.addEventListener(IOErrorEvent.IO_ERROR, function(event:Event):void { + trace("IO_ERROR: " + event); + }); + + try { + loader.load("https://" + _servicesDiscoveryHost + "/services.json"); + return true; + } + catch(error:Error) { + trace(error); + } + + return false; + } + + private function addCommonPayloadFields(urlParams:Object):void { + urlParams["sdk_type"] = "flash"; + urlParams["sdk_version"] = SDKVersion; + urlParams["sdk_platform"] = Capabilities.os.replace(" ", "_").toLowerCase(); + urlParams["app_version"] = _appVersion; + } + + private function postSignedRequest(endpoint:String, queryParams:Object, bitmapData:BitmapData, callback:Function, httpStatusCallback:Boolean = false):Boolean { + var timestamp:Date = new Date(); + + var urlParams:Object = { + request_date: Math.round(timestamp.getTime() / 1000), + request_id: new Uuid().toString() + }; + + for(var k:String in queryParams) { + urlParams[k] = queryParams[k]; + } + return makeSignedRequest(_postHostname, endpoint, URLRequestMethod.POST, urlParams, bitmapData, callback, httpStatusCallback); + } + + private function makeSignedRequest(hostname:String, endpoint:String, method:String, queryParams:Object, bitmapData:BitmapData, callback:Function, httpStatusCallback:Boolean = false):Boolean { + var urlParams:Object = { + api_key: _udid, + game_id: _appId + }; + + for(var k:String in queryParams) { + urlParams[k] = queryParams[k]; + } + + addCommonPayloadFields(urlParams); + + var pngBytes:ByteArray = null; + +CONFIG::NotAirNative { + if(bitmapData !== null) { + pngBytes = PNGEncoder2.encode(bitmapData); + var object_properties:Object = com.carrot.adobe.serialization.json.JSON.decode(urlParams.object_properties); + object_properties.image_sha = SHA256.hashBytes(pngBytes); + urlParams.object_properties = com.carrot.adobe.serialization.json.JSON.encode(object_properties); + } +} + var urlParamKeys:Array = []; + for(k in urlParams) { + urlParamKeys.push(k); + } + urlParamKeys.sort(); + + var urlString:String = ""; + for each(k in urlParamKeys) { + urlString += k + "=" + urlParams[k] + "&"; + } + urlString = urlString.slice(0, urlString.length - 1); + + var signString:String = method + "\n" + hostname + "\n" + endpoint + "\n" + urlString; + var digest:String = HMAC.hash(_appSecret, signString, SHA256); + var hashBytes:ByteArray = new ByteArray(); + for(var i:uint = 0; i < digest.length; i += 2) + hashBytes.writeByte(parseInt(digest.charAt(i) + digest.charAt(i + 1), 16)); + urlParams.sig = Base64.encode(hashBytes); + + return httpRequest(hostname, method, endpoint, urlParams, pngBytes, callback, httpStatusCallback); + } + + private function httpRequest(hostname:String, method:String, endpoint:String, urlParams:Object, pngBytes:ByteArray, callback:Function, httpStatusCallback:Boolean = false):Boolean { + if(hostname === null) { + return false; + } + + var loader:MultipartURLLoader = new MultipartURLLoader(); + var httpStatus:int = 0; + var internalHttpStatusCallback:Function = function():void { + var apiCallStatus:String = _status; + if(hostname !== _metricsHostname) { + switch(httpStatus) { + case 200: + case 201: _status = AUTHORIZED; apiCallStatus = OK; break; + case 401: apiCallStatus = _status = READ_ONLY; break; + case 403: apiCallStatus = _status = BAD_SECRET; break; + case 405: apiCallStatus = _status = NOT_AUTHORIZED; break; + } + } + if(method === URLRequestMethod.POST && callback !== null && !httpStatusCallback) { + callback(apiCallStatus); + } + } + if(urlParams !== null) { + for(var k:String in urlParams) { + loader.addVariable(k, urlParams[k]); + } + } + + if(pngBytes !== null) { + loader.addFile(pngBytes, "attachment.png", "image_bytes", "application/octet-stream") + } + + if(callback !== null) { + if(httpStatusCallback) { + loader.addEventListener(_httpStatusEvent, callback); + } + else { + loader.addEventListener(_httpStatusEvent, function(event:HTTPStatusEvent):void { + httpStatus = event.status; + }); + } + } + + loader.addEventListener(IOErrorEvent.IO_ERROR, function(event:Event):void { + trace("IO_ERROR: " + event); + }); + + loader.addEventListener(Event.COMPLETE, function(event:Event):void { + var data:Object = com.carrot.adobe.serialization.json.JSON.decode(loader.loader.data); + if(data.cascade && data.cascade.method == "feedpost") { + if(ExternalInterface.available) { + try { + ExternalInterface.call("window.teak.internal_directFeedPost", data.cascade.arguments, generateJSCallback(callback)); + } catch(error:Error) {} + } + else if(_gv !== null) { + nativePopupFeedPost(data.cascade.arguments, callback); + } + } else if(data.cascade && data.cascade.method == "request") { + if(ExternalInterface.available) { + try { + ExternalInterface.call("window.teak.internal_directRequest", data.cascade.arguments, generateJSCallback(callback)); + } catch(error:Error) {} + } + } else if(data.cascade && data.cascade.method == "sendRequest") { + sendRequest(data.cascade.arguments.request_id, data.cascade.arguments.object_properties); + } else { + internalHttpStatusCallback(); + } + }); + + try { + loader.load("https://" + hostname + endpoint); + return true; + } + catch(error:Error) { + trace(error); + } + return false; + } + + private var _udid:String; + private var _appId:String; + private var _appSecret:String; + private var _status:String; + private var _appVersion:String; + + private var _postHostname:String; + private var _authHostname:String; + private var _metricsHostname:String; + + private var _openUICalls:Dictionary; + + private var _gv:Class; + private var _gvFacebookDispatcher:Class; + private var _gvFacebookEvent:Class; + + private var _httpStatusEvent:String; + + private static const _servicesDiscoveryHost:String = "services.gocarrot.com"; + } +} diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/all-wcprops b/DISPLAYER/com/carrot/adobe/crypto/.svn/all-wcprops new file mode 100644 index 0000000000000000000000000000000000000000..762d55bd14462536c44996eaa73543587a817ddc --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/all-wcprops @@ -0,0 +1,47 @@ +K 25 +svn:wc:ra_dav:version-url +V 43 +/svn/!svn/ver/90/trunk/src/com/adobe/crypto +END +MD5Stream.as +K 25 +svn:wc:ra_dav:version-url +V 56 +/svn/!svn/ver/61/trunk/src/com/adobe/crypto/MD5Stream.as +END +WSSEUsernameToken.as +K 25 +svn:wc:ra_dav:version-url +V 64 +/svn/!svn/ver/55/trunk/src/com/adobe/crypto/WSSEUsernameToken.as +END +SHA224.as +K 25 +svn:wc:ra_dav:version-url +V 53 +/svn/!svn/ver/69/trunk/src/com/adobe/crypto/SHA224.as +END +MD5.as +K 25 +svn:wc:ra_dav:version-url +V 50 +/svn/!svn/ver/69/trunk/src/com/adobe/crypto/MD5.as +END +SHA256.as +K 25 +svn:wc:ra_dav:version-url +V 53 +/svn/!svn/ver/69/trunk/src/com/adobe/crypto/SHA256.as +END +HMAC.as +K 25 +svn:wc:ra_dav:version-url +V 51 +/svn/!svn/ver/71/trunk/src/com/adobe/crypto/HMAC.as +END +SHA1.as +K 25 +svn:wc:ra_dav:version-url +V 51 +/svn/!svn/ver/90/trunk/src/com/adobe/crypto/SHA1.as +END diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/entries b/DISPLAYER/com/carrot/adobe/crypto/.svn/entries new file mode 100644 index 0000000000000000000000000000000000000000..74d6a3d4ee957d3d3b00a7d67aa22bd5cea128f8 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/entries @@ -0,0 +1,266 @@ +10 + +dir +126 +http://as3corelib.googlecode.com/svn/trunk/src/com/adobe/crypto +http://as3corelib.googlecode.com/svn + + + +2009-06-18T20:08:23.763721Z +90 +grayson.lang + + + + + + + + + + + + + + +374f7c76-8224-0410-aa2b-53cc4844e527 + +MD5Stream.as +file + + + + +2012-11-06T23:09:39.000000Z +f4931ddcde14c576028fcf23bd5d6ec1 +2008-10-01T06:52:31.155610Z +61 +anirudhsasikumar + + + + + + + + + + + + + + + + + + + + + +17039 + +WSSEUsernameToken.as +file + + + + +2012-11-06T23:09:39.000000Z +ad5a856f37719af41922bb0c121e9a1b +2008-08-08T06:16:29.605969Z +55 +mikechambers + + + + + + + + + + + + + + + + + + + + + +4037 + +SHA224.as +file + + + + +2012-11-06T23:09:39.000000Z +ffd1adfd41a1f3c0a3a809ce304a4f5f +2008-11-06T20:12:55.435578Z +69 +mikechambers +has-props + + + + + + + + + + + + + + + + + + + + +8877 + +MD5.as +file + + + + +2012-11-06T23:09:39.000000Z +1332bdd143ffc7dfdbbaebf62f9aefb4 +2008-11-06T20:12:55.435578Z +69 +mikechambers + + + + + + + + + + + + + + + + + + + + + +10340 + +SHA256.as +file + + + + +2012-11-06T23:09:39.000000Z +253e9c4af7c9758652afac59287f3bc5 +2008-11-06T20:12:55.435578Z +69 +mikechambers +has-props + + + + + + + + + + + + + + + + + + + + +9013 + +HMAC.as +file + + + + +2012-11-06T23:09:39.000000Z +b9f33bcb735cb785b9e775137d2deb02 +2008-11-06T23:08:58.616247Z +71 +michael_ramirez44@yahoo.com + + + + + + + + + + + + + + + + + + + + + +4215 + +SHA1.as +file + + + + +2012-11-06T23:09:39.000000Z +2db7589937b1e8011e83f30b91ed13b6 +2009-06-18T20:08:23.763721Z +90 +grayson.lang + + + + + + + + + + + + + + + + + + + + + +8805 + diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/prop-base/SHA224.as.svn-base b/DISPLAYER/com/carrot/adobe/crypto/.svn/prop-base/SHA224.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..3ca3dd633aed78a728d6ef89e4578bd7e7de02e2 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/prop-base/SHA224.as.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 2 +Id +K 13 +svn:mime-type +V 10 +text/plain +END diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/prop-base/SHA256.as.svn-base b/DISPLAYER/com/carrot/adobe/crypto/.svn/prop-base/SHA256.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..3ca3dd633aed78a728d6ef89e4578bd7e7de02e2 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/prop-base/SHA256.as.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 2 +Id +K 13 +svn:mime-type +V 10 +text/plain +END diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/HMAC.as.svn-base b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/HMAC.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..72f9bffc9edc2fcdfd485cd04e6dfbf5fa9f4cf3 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/HMAC.as.svn-base @@ -0,0 +1,127 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto { + import flash.utils.ByteArray; + import flash.utils.Endian; + import flash.utils.describeType; + /** + * Keyed-Hashing for Message Authentication + * Implementation based on algorithm description at + * http://www.faqs.org/rfcs/rfc2104.html + */ + public class HMAC + { + /** + * Performs the HMAC hash algorithm using byte arrays. + * + * @param secret The secret key + * @param message The message to hash + * @param algorithm Hash object to use + * @return A string containing the hash value of message + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public static function hash( secret:String, message:String, algorithm:Object = null ):String + { + var text:ByteArray = new ByteArray(); + var k_secret:ByteArray = new ByteArray(); + + text.writeUTFBytes(message); + k_secret.writeUTFBytes(secret); + + return hashBytes(k_secret, text, algorithm); + } + + /** + * Performs the HMAC hash algorithm using string. + * + * @param secret The secret key + * @param message The message to hash + * @param algorithm Hash object to use + * @return A string containing the hash value of message + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public static function hashBytes( secret:ByteArray, message:ByteArray, algorithm:Object = null ):String + { + var ipad:ByteArray = new ByteArray(); + var opad:ByteArray = new ByteArray(); + var endian:String = Endian.BIG_ENDIAN; + + if(algorithm == null){ + algorithm = MD5; + } + + if ( describeType(algorithm).@name.toString() == "com.adobe.crypto::MD5" ) { + endian = Endian.LITTLE_ENDIAN; + } + + if ( secret.length > 64 ) { + algorithm.hashBytes(secret); + secret = new ByteArray(); + secret.endian = endian; + + while ( algorithm.digest.bytesAvailable != 0 ) { + secret.writeInt(algorithm.digest.readInt()); + } + } + + secret.length = 64 + secret.position = 0; + for ( var x:int = 0; x < 64; x++ ) { + var byte:int = secret.readByte(); + ipad.writeByte(0x36 ^ byte); + opad.writeByte(0x5c ^ byte); + } + + ipad.writeBytes(message); + algorithm.hashBytes(ipad); + var tmp:ByteArray = new ByteArray(); + tmp.endian = endian; + + while ( algorithm.digest.bytesAvailable != 0 ) { + tmp.writeInt(algorithm.digest.readInt()); + } + tmp.position = 0; + + while ( tmp.bytesAvailable != 0 ) { + opad.writeByte(tmp.readUnsignedByte()); + } + return algorithm.hashBytes( opad ); + } + + } + +} diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/MD5.as.svn-base b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/MD5.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..da533cc447309e0f9f229f481e56752eb447156e --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/MD5.as.svn-base @@ -0,0 +1,281 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto { + + import com.adobe.utils.IntUtil; + import flash.utils.ByteArray; + /** + * The MD5 Message-Digest Algorithm + * + * Implementation based on algorithm description at + * http://www.faqs.org/rfcs/rfc1321.html + */ + public class MD5 { + + public static var digest:ByteArray; + /** + * Performs the MD5 hash algorithm on a string. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + + public static function hash(s:String) :String{ + //Convert to byteArray and send through hashBinary function + // so as to only have complex code in one location + var ba:ByteArray = new ByteArray(); + ba.writeUTFBytes(s); + return hashBinary(ba); + } + + public static function hashBytes(s:ByteArray) :String{ + return hashBinary(s); + } + + /** + * Performs the MD5 hash algorithm on a ByteArray. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public static function hashBinary( s:ByteArray ):String { + // initialize the md buffers + var a:int = 1732584193; + var b:int = -271733879; + var c:int = -1732584194; + var d:int = 271733878; + + // variables to store previous values + var aa:int; + var bb:int; + var cc:int; + var dd:int; + + // create the blocks from the string and + // save the length as a local var to reduce + // lookup in the loop below + var x:Array = createBlocks( s ); + var len:int = x.length; + + // loop over all of the blocks + for ( var i:int = 0; i < len; i += 16) { + // save previous values + aa = a; + bb = b; + cc = c; + dd = d; + + // Round 1 + a = ff( a, b, c, d, x[int(i+ 0)], 7, -680876936 ); // 1 + d = ff( d, a, b, c, x[int(i+ 1)], 12, -389564586 ); // 2 + c = ff( c, d, a, b, x[int(i+ 2)], 17, 606105819 ); // 3 + b = ff( b, c, d, a, x[int(i+ 3)], 22, -1044525330 ); // 4 + a = ff( a, b, c, d, x[int(i+ 4)], 7, -176418897 ); // 5 + d = ff( d, a, b, c, x[int(i+ 5)], 12, 1200080426 ); // 6 + c = ff( c, d, a, b, x[int(i+ 6)], 17, -1473231341 ); // 7 + b = ff( b, c, d, a, x[int(i+ 7)], 22, -45705983 ); // 8 + a = ff( a, b, c, d, x[int(i+ 8)], 7, 1770035416 ); // 9 + d = ff( d, a, b, c, x[int(i+ 9)], 12, -1958414417 ); // 10 + c = ff( c, d, a, b, x[int(i+10)], 17, -42063 ); // 11 + b = ff( b, c, d, a, x[int(i+11)], 22, -1990404162 ); // 12 + a = ff( a, b, c, d, x[int(i+12)], 7, 1804603682 ); // 13 + d = ff( d, a, b, c, x[int(i+13)], 12, -40341101 ); // 14 + c = ff( c, d, a, b, x[int(i+14)], 17, -1502002290 ); // 15 + b = ff( b, c, d, a, x[int(i+15)], 22, 1236535329 ); // 16 + + // Round 2 + a = gg( a, b, c, d, x[int(i+ 1)], 5, -165796510 ); // 17 + d = gg( d, a, b, c, x[int(i+ 6)], 9, -1069501632 ); // 18 + c = gg( c, d, a, b, x[int(i+11)], 14, 643717713 ); // 19 + b = gg( b, c, d, a, x[int(i+ 0)], 20, -373897302 ); // 20 + a = gg( a, b, c, d, x[int(i+ 5)], 5, -701558691 ); // 21 + d = gg( d, a, b, c, x[int(i+10)], 9, 38016083 ); // 22 + c = gg( c, d, a, b, x[int(i+15)], 14, -660478335 ); // 23 + b = gg( b, c, d, a, x[int(i+ 4)], 20, -405537848 ); // 24 + a = gg( a, b, c, d, x[int(i+ 9)], 5, 568446438 ); // 25 + d = gg( d, a, b, c, x[int(i+14)], 9, -1019803690 ); // 26 + c = gg( c, d, a, b, x[int(i+ 3)], 14, -187363961 ); // 27 + b = gg( b, c, d, a, x[int(i+ 8)], 20, 1163531501 ); // 28 + a = gg( a, b, c, d, x[int(i+13)], 5, -1444681467 ); // 29 + d = gg( d, a, b, c, x[int(i+ 2)], 9, -51403784 ); // 30 + c = gg( c, d, a, b, x[int(i+ 7)], 14, 1735328473 ); // 31 + b = gg( b, c, d, a, x[int(i+12)], 20, -1926607734 ); // 32 + + // Round 3 + a = hh( a, b, c, d, x[int(i+ 5)], 4, -378558 ); // 33 + d = hh( d, a, b, c, x[int(i+ 8)], 11, -2022574463 ); // 34 + c = hh( c, d, a, b, x[int(i+11)], 16, 1839030562 ); // 35 + b = hh( b, c, d, a, x[int(i+14)], 23, -35309556 ); // 36 + a = hh( a, b, c, d, x[int(i+ 1)], 4, -1530992060 ); // 37 + d = hh( d, a, b, c, x[int(i+ 4)], 11, 1272893353 ); // 38 + c = hh( c, d, a, b, x[int(i+ 7)], 16, -155497632 ); // 39 + b = hh( b, c, d, a, x[int(i+10)], 23, -1094730640 ); // 40 + a = hh( a, b, c, d, x[int(i+13)], 4, 681279174 ); // 41 + d = hh( d, a, b, c, x[int(i+ 0)], 11, -358537222 ); // 42 + c = hh( c, d, a, b, x[int(i+ 3)], 16, -722521979 ); // 43 + b = hh( b, c, d, a, x[int(i+ 6)], 23, 76029189 ); // 44 + a = hh( a, b, c, d, x[int(i+ 9)], 4, -640364487 ); // 45 + d = hh( d, a, b, c, x[int(i+12)], 11, -421815835 ); // 46 + c = hh( c, d, a, b, x[int(i+15)], 16, 530742520 ); // 47 + b = hh( b, c, d, a, x[int(i+ 2)], 23, -995338651 ); // 48 + + // Round 4 + a = ii( a, b, c, d, x[int(i+ 0)], 6, -198630844 ); // 49 + d = ii( d, a, b, c, x[int(i+ 7)], 10, 1126891415 ); // 50 + c = ii( c, d, a, b, x[int(i+14)], 15, -1416354905 ); // 51 + b = ii( b, c, d, a, x[int(i+ 5)], 21, -57434055 ); // 52 + a = ii( a, b, c, d, x[int(i+12)], 6, 1700485571 ); // 53 + d = ii( d, a, b, c, x[int(i+ 3)], 10, -1894986606 ); // 54 + c = ii( c, d, a, b, x[int(i+10)], 15, -1051523 ); // 55 + b = ii( b, c, d, a, x[int(i+ 1)], 21, -2054922799 ); // 56 + a = ii( a, b, c, d, x[int(i+ 8)], 6, 1873313359 ); // 57 + d = ii( d, a, b, c, x[int(i+15)], 10, -30611744 ); // 58 + c = ii( c, d, a, b, x[int(i+ 6)], 15, -1560198380 ); // 59 + b = ii( b, c, d, a, x[int(i+13)], 21, 1309151649 ); // 60 + a = ii( a, b, c, d, x[int(i+ 4)], 6, -145523070 ); // 61 + d = ii( d, a, b, c, x[int(i+11)], 10, -1120210379 ); // 62 + c = ii( c, d, a, b, x[int(i+ 2)], 15, 718787259 ); // 63 + b = ii( b, c, d, a, x[int(i+ 9)], 21, -343485551 ); // 64 + + a += aa; + b += bb; + c += cc; + d += dd; + } + digest = new ByteArray() + digest.writeInt(a); + digest.writeInt(b); + digest.writeInt(c); + digest.writeInt(d); + digest.position = 0; + // Finish up by concatening the buffers with their hex output + return IntUtil.toHex( a ) + IntUtil.toHex( b ) + IntUtil.toHex( c ) + IntUtil.toHex( d ); + } + + /** + * Auxiliary function f as defined in RFC + */ + private static function f( x:int, y:int, z:int ):int { + return ( x & y ) | ( (~x) & z ); + } + + /** + * Auxiliary function g as defined in RFC + */ + private static function g( x:int, y:int, z:int ):int { + return ( x & z ) | ( y & (~z) ); + } + + /** + * Auxiliary function h as defined in RFC + */ + private static function h( x:int, y:int, z:int ):int { + return x ^ y ^ z; + } + + /** + * Auxiliary function i as defined in RFC + */ + private static function i( x:int, y:int, z:int ):int { + return y ^ ( x | (~z) ); + } + + /** + * A generic transformation function. The logic of ff, gg, hh, and + * ii are all the same, minus the function used, so pull that logic + * out and simplify the method bodies for the transoformation functions. + */ + private static function transform( func:Function, a:int, b:int, c:int, d:int, x:int, s:int, t:int):int { + var tmp:int = a + int( func( b, c, d ) ) + x + t; + return IntUtil.rol( tmp, s ) + b; + } + + /** + * ff transformation function + */ + private static function ff ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( f, a, b, c, d, x, s, t ); + } + + /** + * gg transformation function + */ + private static function gg ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( g, a, b, c, d, x, s, t ); + } + + /** + * hh transformation function + */ + private static function hh ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( h, a, b, c, d, x, s, t ); + } + + /** + * ii transformation function + */ + private static function ii ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( i, a, b, c, d, x, s, t ); + } + + /** + * Converts a string to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param s The string to split into blocks + * @return An array containing the blocks that s was + * split into. + */ + private static function createBlocks( s:ByteArray ):Array { + var blocks:Array = new Array(); + var len:int = s.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) { + blocks[ int(i >> 5) ] |= ( s[ i / 8 ] & mask ) << ( i % 32 ); + } + + // append padding and length + blocks[ int(len >> 5) ] |= 0x80 << ( len % 32 ); + blocks[ int(( ( ( len + 64 ) >>> 9 ) << 4 ) + 14) ] = len; + return blocks; + } + + } +} diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/MD5Stream.as.svn-base b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/MD5Stream.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..6e5eed0d8776cfda46308ee9eb696573b09e9599 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/MD5Stream.as.svn-base @@ -0,0 +1,402 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto +{ + import com.adobe.utils.IntUtil; + import flash.utils.ByteArray; + + /** + * Perform MD5 hash of an input stream in chunks. This class is + * based on com.adobe.crypto.MD5 and can process data in + * chunks. Both block creation and hash computation are done + * together for whatever input is available so that the memory + * overhead at a time is always fixed. Memory usage is governed by + * two parameters: one is the amount of data passed in to update() + * and the other is memoryBlockSize. The latter comes into play + * only when the memory window exceeds the pre allocated memory + * window of flash player. Usage: create an instance, call + * update(data) repeatedly for all chunks and finally complete() + * which will return the md5 hash. + */ + public class MD5Stream + { + private static var mask:int = 0xFF; + + private var arr:Array = []; + + /* running count of length */ + private var arrLen:int; + + // initialize the md buffers + private var a:int = 1732584193; + private var b:int = -271733879; + private var c:int = -1732584194; + private var d:int = 271733878; + + // variables to store previous values + private var aa:int; + private var bb:int; + private var cc:int; + private var dd:int; + + /* index for data read */ + private var arrIndexLen:int = 0; + /* index for hash computation */ + private var arrProcessIndex:int = 0; + /* index for removing stale arr values */ + private var cleanIndex:int = 0; + + /** + * Change this value from the default (16384) in the range of + * MBs to actually affect GC as GC allocates in pools of + * memory */ + public var memoryBlockSize:int = 16384; + + + public function MD5Stream() + { + + } + + + /** + * Pass in chunks of the input data with update(), call + * complete() with an optional chunk which will return the + * final hash. Equivalent to the way + * java.security.MessageDigest works. + * + * @param input The optional bytearray chunk which is the final part of the input + * @return A string containing the hash value + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public function complete(input:ByteArray=null):String + { + if ( arr.length == 0 ) + { + if ( input == null ) + { + throw new Error("null input to complete without prior call to update. At least an empty bytearray must be passed."); + } + } + + if ( input != null ) + { + readIntoArray(input); + } + + //pad, append length + padArray(arrLen); + + hashRemainingChunks(false); + + var res:String = IntUtil.toHex( a ) + IntUtil.toHex( b ) + + IntUtil.toHex( c ) + IntUtil.toHex( d ); + resetFields(); + + return res; + } + + /** + * Pass in chunks of the input data with update(), call + * complete() with an optional chunk which will return the + * final hash. Equivalent to the way + * java.security.MessageDigest works. + * + * @param input The bytearray chunk to perform the hash on + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public function update(input:ByteArray):void + { + readIntoArray(input); + hashRemainingChunks(); + } + + /** + * Re-initialize this instance for use to perform hashing on + * another input stream. This is called automatically by + * complete(). + * + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public function resetFields():void + { + //truncate array + arr.length = 0; + arrLen = 0; + + // initialize the md buffers + a = 1732584193; + b = -271733879; + c = -1732584194; + d = 271733878; + + // variables to store previous values + aa = 0; + bb = 0; + cc = 0; + dd = 0; + + arrIndexLen = 0; + arrProcessIndex = 0; + cleanIndex = 0; + } + + /** read into arr and free up used blocks of arr */ + private function readIntoArray(input:ByteArray):void + { + var closestChunkLen:int = input.length * 8; + arrLen += closestChunkLen; + + /* clean up memory. if there are entries in the array that + * are already processed and the amount is greater than + * memoryBlockSize, create a new array, copy the last + * block into it and let the old one get picked up by + * GC. */ + if ( arrProcessIndex - cleanIndex > memoryBlockSize ) + { + var newarr:Array= new Array(); + + /* AS Arrays in sparse arrays. arr[2002] can exist + * without values for arr[0] - arr[2001] */ + for ( var j:int = arrProcessIndex; j < arr.length; j++ ) + { + newarr[j] = arr[j]; + } + + cleanIndex = arrProcessIndex; + arr = null; + arr = newarr; + } + + for ( var k:int = 0; k < closestChunkLen; k+=8 ) + { + //discard high bytes (convert to uint) + arr[ int(arrIndexLen >> 5) ] |= ( input[ k / 8 ] & mask ) << ( arrIndexLen % 32 ); + arrIndexLen += 8; + } + + + } + + private function hashRemainingChunks(bUpdate:Boolean=true):void + { + var len:int = arr.length; + + /* leave a 16 word block untouched if we are called from + * update. This is because, padArray() can modify the last + * block and this modification has to happen before we + * compute the hash. */ + if ( bUpdate ) + { + len -= 16; + } + + /* don't do anything if don't have a 16 word block. */ + if ( arrProcessIndex >= len || len - arrProcessIndex < 15 ) + { + return; + } + + + for ( var i:int = arrProcessIndex; i < len ; i += 16, arrProcessIndex += 16) + { + // save previous values + aa = a; + bb = b; + cc = c; + dd = d; + + // Round 1 + a = ff( a, b, c, d, arr[int(i+ 0)], 7, -680876936 ); // 1 + d = ff( d, a, b, c, arr[int(i+ 1)], 12, -389564586 ); // 2 + c = ff( c, d, a, b, arr[int(i+ 2)], 17, 606105819 ); // 3 + b = ff( b, c, d, a, arr[int(i+ 3)], 22, -1044525330 ); // 4 + a = ff( a, b, c, d, arr[int(i+ 4)], 7, -176418897 ); // 5 + d = ff( d, a, b, c, arr[int(i+ 5)], 12, 1200080426 ); // 6 + c = ff( c, d, a, b, arr[int(i+ 6)], 17, -1473231341 ); // 7 + b = ff( b, c, d, a, arr[int(i+ 7)], 22, -45705983 ); // 8 + a = ff( a, b, c, d, arr[int(i+ 8)], 7, 1770035416 ); // 9 + d = ff( d, a, b, c, arr[int(i+ 9)], 12, -1958414417 ); // 10 + c = ff( c, d, a, b, arr[int(i+10)], 17, -42063 ); // 11 + b = ff( b, c, d, a, arr[int(i+11)], 22, -1990404162 ); // 12 + a = ff( a, b, c, d, arr[int(i+12)], 7, 1804603682 ); // 13 + d = ff( d, a, b, c, arr[int(i+13)], 12, -40341101 ); // 14 + c = ff( c, d, a, b, arr[int(i+14)], 17, -1502002290 ); // 15 + b = ff( b, c, d, a, arr[int(i+15)], 22, 1236535329 ); // 16 + + // Round 2 + a = gg( a, b, c, d, arr[int(i+ 1)], 5, -165796510 ); // 17 + d = gg( d, a, b, c, arr[int(i+ 6)], 9, -1069501632 ); // 18 + c = gg( c, d, a, b, arr[int(i+11)], 14, 643717713 ); // 19 + b = gg( b, c, d, a, arr[int(i+ 0)], 20, -373897302 ); // 20 + a = gg( a, b, c, d, arr[int(i+ 5)], 5, -701558691 ); // 21 + d = gg( d, a, b, c, arr[int(i+10)], 9, 38016083 ); // 22 + c = gg( c, d, a, b, arr[int(i+15)], 14, -660478335 ); // 23 + b = gg( b, c, d, a, arr[int(i+ 4)], 20, -405537848 ); // 24 + a = gg( a, b, c, d, arr[int(i+ 9)], 5, 568446438 ); // 25 + d = gg( d, a, b, c, arr[int(i+14)], 9, -1019803690 ); // 26 + c = gg( c, d, a, b, arr[int(i+ 3)], 14, -187363961 ); // 27 + b = gg( b, c, d, a, arr[int(i+ 8)], 20, 1163531501 ); // 28 + a = gg( a, b, c, d, arr[int(i+13)], 5, -1444681467 ); // 29 + d = gg( d, a, b, c, arr[int(i+ 2)], 9, -51403784 ); // 30 + c = gg( c, d, a, b, arr[int(i+ 7)], 14, 1735328473 ); // 31 + b = gg( b, c, d, a, arr[int(i+12)], 20, -1926607734 ); // 32 + + // Round 3 + a = hh( a, b, c, d, arr[int(i+ 5)], 4, -378558 ); // 33 + d = hh( d, a, b, c, arr[int(i+ 8)], 11, -2022574463 ); // 34 + c = hh( c, d, a, b, arr[int(i+11)], 16, 1839030562 ); // 35 + b = hh( b, c, d, a, arr[int(i+14)], 23, -35309556 ); // 36 + a = hh( a, b, c, d, arr[int(i+ 1)], 4, -1530992060 ); // 37 + d = hh( d, a, b, c, arr[int(i+ 4)], 11, 1272893353 ); // 38 + c = hh( c, d, a, b, arr[int(i+ 7)], 16, -155497632 ); // 39 + b = hh( b, c, d, a, arr[int(i+10)], 23, -1094730640 ); // 40 + a = hh( a, b, c, d, arr[int(i+13)], 4, 681279174 ); // 41 + d = hh( d, a, b, c, arr[int(i+ 0)], 11, -358537222 ); // 42 + c = hh( c, d, a, b, arr[int(i+ 3)], 16, -722521979 ); // 43 + b = hh( b, c, d, a, arr[int(i+ 6)], 23, 76029189 ); // 44 + a = hh( a, b, c, d, arr[int(i+ 9)], 4, -640364487 ); // 45 + d = hh( d, a, b, c, arr[int(i+12)], 11, -421815835 ); // 46 + c = hh( c, d, a, b, arr[int(i+15)], 16, 530742520 ); // 47 + b = hh( b, c, d, a, arr[int(i+ 2)], 23, -995338651 ); // 48 + + // Round 4 + a = ii( a, b, c, d, arr[int(i+ 0)], 6, -198630844 ); // 49 + d = ii( d, a, b, c, arr[int(i+ 7)], 10, 1126891415 ); // 50 + c = ii( c, d, a, b, arr[int(i+14)], 15, -1416354905 ); // 51 + b = ii( b, c, d, a, arr[int(i+ 5)], 21, -57434055 ); // 52 + a = ii( a, b, c, d, arr[int(i+12)], 6, 1700485571 ); // 53 + d = ii( d, a, b, c, arr[int(i+ 3)], 10, -1894986606 ); // 54 + c = ii( c, d, a, b, arr[int(i+10)], 15, -1051523 ); // 55 + b = ii( b, c, d, a, arr[int(i+ 1)], 21, -2054922799 ); // 56 + a = ii( a, b, c, d, arr[int(i+ 8)], 6, 1873313359 ); // 57 + d = ii( d, a, b, c, arr[int(i+15)], 10, -30611744 ); // 58 + c = ii( c, d, a, b, arr[int(i+ 6)], 15, -1560198380 ); // 59 + b = ii( b, c, d, a, arr[int(i+13)], 21, 1309151649 ); // 60 + a = ii( a, b, c, d, arr[int(i+ 4)], 6, -145523070 ); // 61 + d = ii( d, a, b, c, arr[int(i+11)], 10, -1120210379 ); // 62 + c = ii( c, d, a, b, arr[int(i+ 2)], 15, 718787259 ); // 63 + b = ii( b, c, d, a, arr[int(i+ 9)], 21, -343485551 ); // 64 + + a += aa; + b += bb; + c += cc; + d += dd; + + } + + } + + private function padArray(len:int):void + { + arr[ int(len >> 5) ] |= 0x80 << ( len % 32 ); + arr[ int(( ( ( len + 64 ) >>> 9 ) << 4 ) + 14) ] = len; + arrLen = arr.length; + } + + /* Code below same as com.adobe.crypto.MD5 */ + + /** + * Auxiliary function f as defined in RFC + */ + private static function f( x:int, y:int, z:int ):int { + return ( x & y ) | ( (~x) & z ); + } + + /** + * Auxiliary function g as defined in RFC + */ + private static function g( x:int, y:int, z:int ):int { + return ( x & z ) | ( y & (~z) ); + } + + /** + * Auxiliary function h as defined in RFC + */ + private static function h( x:int, y:int, z:int ):int { + return x ^ y ^ z; + } + + /** + * Auxiliary function i as defined in RFC + */ + private static function i( x:int, y:int, z:int ):int { + return y ^ ( x | (~z) ); + } + + /** + * A generic transformation function. The logic of ff, gg, hh, and + * ii are all the same, minus the function used, so pull that logic + * out and simplify the method bodies for the transoformation functions. + */ + private static function transform( func:Function, a:int, b:int, c:int, d:int, x:int, s:int, t:int):int { + var tmp:int = a + int( func( b, c, d ) ) + x + t; + return IntUtil.rol( tmp, s ) + b; + } + + /** + * ff transformation function + */ + private static function ff ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( f, a, b, c, d, x, s, t ); + } + + /** + * gg transformation function + */ + private static function gg ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( g, a, b, c, d, x, s, t ); + } + + /** + * hh transformation function + */ + private static function hh ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( h, a, b, c, d, x, s, t ); + } + + /** + * ii transformation function + */ + private static function ii ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int { + return transform( i, a, b, c, d, x, s, t ); + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/SHA1.as.svn-base b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/SHA1.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..12c58b525ce73dbe8621ce92ab6f22c3a4fe536f --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/SHA1.as.svn-base @@ -0,0 +1,289 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto +{ + import com.adobe.utils.IntUtil; + import flash.utils.ByteArray; + import mx.utils.Base64Encoder; + + /** + * US Secure Hash Algorithm 1 (SHA1) + * + * Implementation based on algorithm description at + * http://www.faqs.org/rfcs/rfc3174.html + */ + public class SHA1 + { + public static var digest:ByteArray; + + /** + * Performs the SHA1 hash algorithm on a string. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hash( s:String ):String + { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks( blocks ); + + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA1 hash algorithm on a ByteArray. + * + * @param data The ByteArray data to hash + * @return A string containing the hash value of data + * @langversion ActionScript 3.0 + * @playerversion 9.0 + */ + public static function hashBytes( data:ByteArray ):String + { + var blocks:Array = SHA1.createBlocksFromByteArray( data ); + var byteArray:ByteArray = hashBlocks(blocks); + + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA1 hash algorithm on a string, then does + * Base64 encoding on the result. + * + * @param s The string to hash + * @return The base64 encoded hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hashToBase64( s:String ):String + { + var blocks:Array = SHA1.createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks(blocks); + + // ByteArray.toString() returns the contents as a UTF-8 string, + // which we can't use because certain byte sequences might trigger + // a UTF-8 conversion. Instead, we convert the bytes to characters + // one by one. + var charsInByteArray:String = ""; + byteArray.position = 0; + for (var j:int = 0; j < byteArray.length; j++) + { + var byte:uint = byteArray.readUnsignedByte(); + charsInByteArray += String.fromCharCode(byte); + } + + var encoder:Base64Encoder = new Base64Encoder(); + encoder.encode(charsInByteArray); + return encoder.flush(); + } + + private static function hashBlocks( blocks:Array ):ByteArray + { + // initialize the h's + var h0:int = 0x67452301; + var h1:int = 0xefcdab89; + var h2:int = 0x98badcfe; + var h3:int = 0x10325476; + var h4:int = 0xc3d2e1f0; + + var len:int = blocks.length; + var w:Array = new Array( 80 ); + var temp:int; + + // loop over all of the blocks + for ( var i:int = 0; i < len; i += 16 ) { + + // 6.1.c + var a:int = h0; + var b:int = h1; + var c:int = h2; + var d:int = h3; + var e:int = h4; + + // 80 steps to process each block + var t:int; + for ( t = 0; t < 20; t++ ) { + + if ( t < 16 ) { + // 6.1.a + w[ t ] = blocks[ i + t ]; + } else { + // 6.1.b + temp = w[ t - 3 ] ^ w[ t - 8 ] ^ w[ t - 14 ] ^ w[ t - 16 ]; + w[ t ] = ( temp << 1 ) | ( temp >>> 31 ) + } + + // 6.1.d + temp = ( ( a << 5 ) | ( a >>> 27 ) ) + ( ( b & c ) | ( ~b & d ) ) + e + int( w[ t ] ) + 0x5a827999; + + e = d; + d = c; + c = ( b << 30 ) | ( b >>> 2 ); + b = a; + a = temp; + } + for ( ; t < 40; t++ ) + { + // 6.1.b + temp = w[ t - 3 ] ^ w[ t - 8 ] ^ w[ t - 14 ] ^ w[ t - 16 ]; + w[ t ] = ( temp << 1 ) | ( temp >>> 31 ) + + // 6.1.d + temp = ( ( a << 5 ) | ( a >>> 27 ) ) + ( b ^ c ^ d ) + e + int( w[ t ] ) + 0x6ed9eba1; + + e = d; + d = c; + c = ( b << 30 ) | ( b >>> 2 ); + b = a; + a = temp; + } + for ( ; t < 60; t++ ) + { + // 6.1.b + temp = w[ t - 3 ] ^ w[ t - 8 ] ^ w[ t - 14 ] ^ w[ t - 16 ]; + w[ t ] = ( temp << 1 ) | ( temp >>> 31 ) + + // 6.1.d + temp = ( ( a << 5 ) | ( a >>> 27 ) ) + ( ( b & c ) | ( b & d ) | ( c & d ) ) + e + int( w[ t ] ) + 0x8f1bbcdc; + + e = d; + d = c; + c = ( b << 30 ) | ( b >>> 2 ); + b = a; + a = temp; + } + for ( ; t < 80; t++ ) + { + // 6.1.b + temp = w[ t - 3 ] ^ w[ t - 8 ] ^ w[ t - 14 ] ^ w[ t - 16 ]; + w[ t ] = ( temp << 1 ) | ( temp >>> 31 ) + + // 6.1.d + temp = ( ( a << 5 ) | ( a >>> 27 ) ) + ( b ^ c ^ d ) + e + int( w[ t ] ) + 0xca62c1d6; + + e = d; + d = c; + c = ( b << 30 ) | ( b >>> 2 ); + b = a; + a = temp; + } + + // 6.1.e + h0 += a; + h1 += b; + h2 += c; + h3 += d; + h4 += e; + } + + var byteArray:ByteArray = new ByteArray(); + byteArray.writeInt(h0); + byteArray.writeInt(h1); + byteArray.writeInt(h2); + byteArray.writeInt(h3); + byteArray.writeInt(h4); + byteArray.position = 0; + + digest = new ByteArray(); + digest.writeBytes(byteArray); + digest.position = 0; + return byteArray; + } + + /** + * Converts a ByteArray to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param data The data to split into blocks + * @return An array containing the blocks into which data was split + */ + private static function createBlocksFromByteArray( data:ByteArray ):Array + { + var oldPosition:int = data.position; + data.position = 0; + + var blocks:Array = new Array(); + var len:int = data.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) + { + blocks[ i >> 5 ] |= ( data.readByte() & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + + data.position = oldPosition; + + return blocks; + } + + /** + * Converts a string to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param s The string to split into blocks + * @return An array containing the blocks that s was split into. + */ + private static function createBlocksFromString( s:String ):Array + { + var blocks:Array = new Array(); + var len:int = s.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) { + blocks[ i >> 5 ] |= ( s.charCodeAt( i / 8 ) & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + return blocks; + } + + } +} diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/SHA224.as.svn-base b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/SHA224.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..ee15453733a49ce27e813a67829c94457b0eeb58 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/SHA224.as.svn-base @@ -0,0 +1,257 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto +{ + import com.adobe.utils.IntUtil; + import flash.utils.ByteArray; + import mx.utils.Base64Encoder; + + /** + * The SHA-224 algorithm + * + * @see http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf + */ + public class SHA224 + { + public static var digest:ByteArray; + + /** + * Performs the SHA224 hash algorithm on a string. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hash( s:String ):String { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks( blocks ); + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA224 hash algorithm on a ByteArray. + * + * @param data The ByteArray data to hash + * @return A string containing the hash value of data + * @langversion ActionScript 3.0 + * @playerversion 9.0 + */ + public static function hashBytes( data:ByteArray ):String + { + var blocks:Array = createBlocksFromByteArray( data ); + var byteArray:ByteArray = hashBlocks(blocks); + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA224 hash algorithm on a string, then does + * Base64 encoding on the result. + * + * @param s The string to hash + * @return The base64 encoded hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hashToBase64( s:String ):String + { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks(blocks); + + // ByteArray.toString() returns the contents as a UTF-8 string, + // which we can't use because certain byte sequences might trigger + // a UTF-8 conversion. Instead, we convert the bytes to characters + // one by one. + var charsInByteArray:String = ""; + byteArray.position = 0; + for (var j:int = 0; j < byteArray.length; j++) + { + var byte:uint = byteArray.readUnsignedByte(); + charsInByteArray += String.fromCharCode(byte); + } + + var encoder:Base64Encoder = new Base64Encoder(); + encoder.encode(charsInByteArray); + return encoder.flush(); + } + + private static function hashBlocks( blocks:Array ):ByteArray { + var h0:int = 0xc1059ed8; + var h1:int = 0x367cd507; + var h2:int = 0x3070dd17; + var h3:int = 0xf70e5939; + var h4:int = 0xffc00b31; + var h5:int = 0x68581511; + var h6:int = 0x64f98fa7; + var h7:int = 0xbefa4fa4; + + var k:Array = new Array(0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2); + + var len:int = blocks.length; + var w:Array = new Array(); + + // loop over all of the blocks + for ( var i:int = 0; i < len; i += 16 ) { + + var a:int = h0; + var b:int = h1; + var c:int = h2; + var d:int = h3; + var e:int = h4; + var f:int = h5; + var g:int = h6; + var h:int = h7; + + for(var t:int = 0; t < 64; t++) { + + if ( t < 16 ) { + w[t] = blocks[ i + t ]; + if(isNaN(w[t])) { w[t] = 0; } + } else { + var ws0:int = IntUtil.ror(w[t-15], 7) ^ IntUtil.ror(w[t-15], 18) ^ (w[t-15] >>> 3); + var ws1:int = IntUtil.ror(w[t-2], 17) ^ IntUtil.ror(w[t-2], 19) ^ (w[t-2] >>> 10); + w[t] = w[t-16] + ws0 + w[t-7] + ws1; + } + + var s0:int = IntUtil.ror(a, 2) ^ IntUtil.ror(a, 13) ^ IntUtil.ror(a, 22); + var maj:int = (a & b) ^ (a & c) ^ (b & c); + var t2:int = s0 + maj; + var s1:int = IntUtil.ror(e, 6) ^ IntUtil.ror(e, 11) ^ IntUtil.ror(e, 25); + var ch:int = (e & f) ^ ((~e) & g); + var t1:int = h + s1 + ch + k[t] + w[t]; + + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + } + + //Add this chunk's hash to result so far: + h0 += a; + h1 += b; + h2 += c; + h3 += d; + h4 += e; + h5 += f; + h6 += g; + h7 += h; + } + + var byteArray:ByteArray = new ByteArray(); + byteArray.writeInt(h0); + byteArray.writeInt(h1); + byteArray.writeInt(h2); + byteArray.writeInt(h3); + byteArray.writeInt(h4); + byteArray.writeInt(h5); + byteArray.writeInt(h6); + byteArray.position = 0; + + digest = new ByteArray(); + digest.writeBytes(byteArray); + digest.position = 0; + return byteArray; + } + + /** + * Converts a ByteArray to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param data The data to split into blocks + * @return An array containing the blocks into which data was split + */ + private static function createBlocksFromByteArray( data:ByteArray ):Array + { + var oldPosition:int = data.position; + data.position = 0; + + var blocks:Array = new Array(); + var len:int = data.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) + { + blocks[ i >> 5 ] |= ( data.readByte() & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + + data.position = oldPosition; + + return blocks; + } + + /** + * Converts a string to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param s The string to split into blocks + * @return An array containing the blocks that s was split into. + */ + private static function createBlocksFromString( s:String ):Array + { + var blocks:Array = new Array(); + var len:int = s.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) { + blocks[ i >> 5 ] |= ( s.charCodeAt( i / 8 ) & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + return blocks; + } + } +} diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/SHA256.as.svn-base b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/SHA256.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..09a2ba23da81db70733e6a13d575ccd1d2d43156 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/SHA256.as.svn-base @@ -0,0 +1,261 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto +{ + import com.adobe.utils.IntUtil; + import flash.utils.ByteArray; + import mx.utils.Base64Encoder; + + /** + * The SHA-256 algorithm + * + * @see http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf + */ + public class SHA256 + { + public static var digest:ByteArray; + /** + * Performs the SHA256 hash algorithm on a string. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hash( s:String ):String { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks( blocks ); + + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA256 hash algorithm on a ByteArray. + * + * @param data The ByteArray data to hash + * @return A string containing the hash value of data + * @langversion ActionScript 3.0 + * @playerversion 9.0 + */ + public static function hashBytes( data:ByteArray ):String + { + var blocks:Array = createBlocksFromByteArray( data ); + var byteArray:ByteArray = hashBlocks(blocks); + + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA256 hash algorithm on a string, then does + * Base64 encoding on the result. + * + * @param s The string to hash + * @return The base64 encoded hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hashToBase64( s:String ):String + { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks(blocks); + + // ByteArray.toString() returns the contents as a UTF-8 string, + // which we can't use because certain byte sequences might trigger + // a UTF-8 conversion. Instead, we convert the bytes to characters + // one by one. + var charsInByteArray:String = ""; + byteArray.position = 0; + for (var j:int = 0; j < byteArray.length; j++) + { + var byte:uint = byteArray.readUnsignedByte(); + charsInByteArray += String.fromCharCode(byte); + } + + var encoder:Base64Encoder = new Base64Encoder(); + encoder.encode(charsInByteArray); + return encoder.flush(); + } + + private static function hashBlocks( blocks:Array ):ByteArray { + var h0:int = 0x6a09e667; + var h1:int = 0xbb67ae85; + var h2:int = 0x3c6ef372; + var h3:int = 0xa54ff53a; + var h4:int = 0x510e527f; + var h5:int = 0x9b05688c; + var h6:int = 0x1f83d9ab; + var h7:int = 0x5be0cd19; + + var k:Array = new Array(0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2); + + var len:int = blocks.length; + var w:Array = new Array( 64 ); + + // loop over all of the blocks + for ( var i:int = 0; i < len; i += 16 ) { + + var a:int = h0; + var b:int = h1; + var c:int = h2; + var d:int = h3; + var e:int = h4; + var f:int = h5; + var g:int = h6; + var h:int = h7; + + for(var t:int = 0; t < 64; t++) { + + if ( t < 16 ) { + w[t] = blocks[ i + t ]; + if(isNaN(w[t])) { w[t] = 0; } + } else { + var ws0:int = IntUtil.ror(w[t-15], 7) ^ IntUtil.ror(w[t-15], 18) ^ (w[t-15] >>> 3); + var ws1:int = IntUtil.ror(w[t-2], 17) ^ IntUtil.ror(w[t-2], 19) ^ (w[t-2] >>> 10); + w[t] = w[t-16] + ws0 + w[t-7] + ws1; + } + + var s0:int = IntUtil.ror(a, 2) ^ IntUtil.ror(a, 13) ^ IntUtil.ror(a, 22); + var maj:int = (a & b) ^ (a & c) ^ (b & c); + var t2:int = s0 + maj; + var s1:int = IntUtil.ror(e, 6) ^ IntUtil.ror(e, 11) ^ IntUtil.ror(e, 25); + var ch:int = (e & f) ^ ((~e) & g); + var t1:int = h + s1 + ch + k[t] + w[t]; + + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + } + + //Add this chunk's hash to result so far: + h0 += a; + h1 += b; + h2 += c; + h3 += d; + h4 += e; + h5 += f; + h6 += g; + h7 += h; + } + + var byteArray:ByteArray = new ByteArray(); + byteArray.writeInt(h0); + byteArray.writeInt(h1); + byteArray.writeInt(h2); + byteArray.writeInt(h3); + byteArray.writeInt(h4); + byteArray.writeInt(h5); + byteArray.writeInt(h6); + byteArray.writeInt(h7); + byteArray.position = 0; + + digest = new ByteArray(); + digest.writeBytes(byteArray); + digest.position = 0; + return byteArray; + } + + /** + * Converts a ByteArray to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param data The data to split into blocks + * @return An array containing the blocks into which data was split + */ + private static function createBlocksFromByteArray( data:ByteArray ):Array + { + var oldPosition:int = data.position; + data.position = 0; + + var blocks:Array = new Array(); + var len:int = data.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) + { + blocks[ i >> 5 ] |= ( data.readByte() & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + + data.position = oldPosition; + + return blocks; + } + + /** + * Converts a string to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param s The string to split into blocks + * @return An array containing the blocks that s was split into. + */ + private static function createBlocksFromString( s:String ):Array + { + var blocks:Array = new Array(); + var len:int = s.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) { + blocks[ i >> 5 ] |= ( s.charCodeAt( i / 8 ) & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + return blocks; + } + } +} diff --git a/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/WSSEUsernameToken.as.svn-base b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/WSSEUsernameToken.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..92bbba6dc4367c2564605153312da8c38adf10fa --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/.svn/text-base/WSSEUsernameToken.as.svn-base @@ -0,0 +1,114 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.crypto +{ + import mx.formatters.DateFormatter; + import mx.utils.Base64Encoder; + + /** + * Web Services Security Username Token + * + * Implementation based on algorithm description at + * http://www.oasis-open.org/committees/wss/documents/WSS-Username-02-0223-merged.pdf + */ + public class WSSEUsernameToken + { + /** + * Generates a WSSE Username Token. + * + * @param username The username + * @param password The password + * @param nonce A cryptographically random nonce (if null, the nonce + * will be generated) + * @param timestamp The time at which the token is generated (if null, + * the time will be set to the moment of execution) + * @return The generated token + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function getUsernameToken(username:String, password:String, nonce:String=null, timestamp:Date=null):String + { + if (nonce == null) + { + nonce = generateNonce(); + } + nonce = base64Encode(nonce); + + var created:String = generateTimestamp(timestamp); + + var password64:String = getBase64Digest(nonce, + created, + password); + + var token:String = new String("UsernameToken Username=\""); + token += username + "\", " + + "PasswordDigest=\"" + password64 + "\", " + + "Nonce=\"" + nonce + "\", " + + "Created=\"" + created + "\""; + return token; + } + + private static function generateNonce():String + { + // Math.random returns a Number between 0 and 1. We don't want our + // nonce to contain invalid characters (e.g. the period) so we + // strip them out before returning the result. + var s:String = Math.random().toString(); + return s.replace(".", ""); + } + + internal static function base64Encode(s:String):String + { + var encoder:Base64Encoder = new Base64Encoder(); + encoder.encode(s); + return encoder.flush(); + } + + internal static function generateTimestamp(timestamp:Date):String + { + if (timestamp == null) + { + timestamp = new Date(); + } + var dateFormatter:DateFormatter = new DateFormatter(); + dateFormatter.formatString = "YYYY-MM-DDTJJ:NN:SS" + return dateFormatter.format(timestamp) + "Z"; + } + + internal static function getBase64Digest(nonce:String, created:String, password:String):String + { + return SHA1.hashToBase64(nonce + created + password); + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/adobe/crypto/HMAC.as b/DISPLAYER/com/carrot/adobe/crypto/HMAC.as new file mode 100644 index 0000000000000000000000000000000000000000..1689052cb29e6bafba82d6920d1f16ede6f5a918 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/HMAC.as @@ -0,0 +1,127 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.carrot.adobe.crypto { + import flash.utils.ByteArray; + import flash.utils.Endian; + import flash.utils.describeType; + /** + * Keyed-Hashing for Message Authentication + * Implementation based on algorithm description at + * http://www.faqs.org/rfcs/rfc2104.html + */ + public class HMAC + { + /** + * Performs the HMAC hash algorithm using byte arrays. + * + * @param secret The secret key + * @param message The message to hash + * @param algorithm Hash object to use + * @return A string containing the hash value of message + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public static function hash( secret:String, message:String, algorithm:Object = null ):String + { + var text:ByteArray = new ByteArray(); + var k_secret:ByteArray = new ByteArray(); + + text.writeUTFBytes(message); + k_secret.writeUTFBytes(secret); + + return hashBytes(k_secret, text, algorithm); + } + + /** + * Performs the HMAC hash algorithm using string. + * + * @param secret The secret key + * @param message The message to hash + * @param algorithm Hash object to use + * @return A string containing the hash value of message + * @langversion ActionScript 3.0 + * @playerversion Flash 8.5 + * @tiptext + */ + public static function hashBytes( secret:ByteArray, message:ByteArray, algorithm:Object = null ):String + { + var ipad:ByteArray = new ByteArray(); + var opad:ByteArray = new ByteArray(); + var endian:String = Endian.BIG_ENDIAN; + + if(algorithm == null){ + algorithm = SHA256; + } + + if ( describeType(algorithm).@name.toString() == "com.adobe.crypto::MD5" ) { + endian = Endian.LITTLE_ENDIAN; + } + + if ( secret.length > 64 ) { + algorithm.hashBytes(secret); + secret = new ByteArray(); + secret.endian = endian; + + while ( algorithm.digest.bytesAvailable != 0 ) { + secret.writeInt(algorithm.digest.readInt()); + } + } + + secret.length = 64 + secret.position = 0; + for ( var x:int = 0; x < 64; x++ ) { + var byte:int = secret.readByte(); + ipad.writeByte(0x36 ^ byte); + opad.writeByte(0x5c ^ byte); + } + + ipad.writeBytes(message); + algorithm.hashBytes(ipad); + var tmp:ByteArray = new ByteArray(); + tmp.endian = endian; + + while ( algorithm.digest.bytesAvailable != 0 ) { + tmp.writeInt(algorithm.digest.readInt()); + } + tmp.position = 0; + + while ( tmp.bytesAvailable != 0 ) { + opad.writeByte(tmp.readUnsignedByte()); + } + return algorithm.hashBytes( opad ); + } + + } + +} diff --git a/DISPLAYER/com/carrot/adobe/crypto/SHA256.as b/DISPLAYER/com/carrot/adobe/crypto/SHA256.as new file mode 100644 index 0000000000000000000000000000000000000000..abfac4960d27777d9a0e3577bbd1cefe6e56262f --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/crypto/SHA256.as @@ -0,0 +1,262 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.carrot.adobe.crypto +{ + import com.carrot.adobe.utils.IntUtil; + import flash.utils.ByteArray; + import mx.utils.Base64Encoder; + + /** + * The SHA-256 algorithm + * + * @see http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf + */ + public class SHA256 + { + public static var digest:ByteArray; + /** + * Performs the SHA256 hash algorithm on a string. + * + * @param s The string to hash + * @return A string containing the hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hash( s:String ):String { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks( blocks ); + + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA256 hash algorithm on a ByteArray. + * + * @param data The ByteArray data to hash + * @return A string containing the hash value of data + * @langversion ActionScript 3.0 + * @playerversion 9.0 + */ + public static function hashBytes( data:ByteArray ):String + { + var blocks:Array = createBlocksFromByteArray( data ); + var byteArray:ByteArray = hashBlocks(blocks); + + return IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ) + + IntUtil.toHex( byteArray.readInt(), true ); + } + + /** + * Performs the SHA256 hash algorithm on a string, then does + * Base64 encoding on the result. + * + * @param s The string to hash + * @return The base64 encoded hash value of s + * @langversion ActionScript 3.0 + * @playerversion 9.0 + * @tiptext + */ + public static function hashToBase64( s:String ):String + { + var blocks:Array = createBlocksFromString( s ); + var byteArray:ByteArray = hashBlocks(blocks); + + // ByteArray.toString() returns the contents as a UTF-8 string, + // which we can't use because certain byte sequences might trigger + // a UTF-8 conversion. Instead, we convert the bytes to characters + // one by one. + var charsInByteArray:String = ""; + byteArray.position = 0; + for (var j:int = 0; j < byteArray.length; j++) + { + var byte:uint = byteArray.readUnsignedByte(); + charsInByteArray += String.fromCharCode(byte); + } + + var encoder:Base64Encoder = new Base64Encoder(); + encoder.insertNewLines = false; + encoder.encode(charsInByteArray); + return encoder.flush(); + } + + private static function hashBlocks( blocks:Array ):ByteArray { + var h0:int = 0x6a09e667; + var h1:int = 0xbb67ae85; + var h2:int = 0x3c6ef372; + var h3:int = 0xa54ff53a; + var h4:int = 0x510e527f; + var h5:int = 0x9b05688c; + var h6:int = 0x1f83d9ab; + var h7:int = 0x5be0cd19; + + var k:Array = new Array(0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2); + + var len:int = blocks.length; + var w:Array = new Array( 64 ); + + // loop over all of the blocks + for ( var i:int = 0; i < len; i += 16 ) { + + var a:int = h0; + var b:int = h1; + var c:int = h2; + var d:int = h3; + var e:int = h4; + var f:int = h5; + var g:int = h6; + var h:int = h7; + + for(var t:int = 0; t < 64; t++) { + + if ( t < 16 ) { + w[t] = blocks[ i + t ]; + if(isNaN(w[t])) { w[t] = 0; } + } else { + var ws0:int = IntUtil.ror(w[t-15], 7) ^ IntUtil.ror(w[t-15], 18) ^ (w[t-15] >>> 3); + var ws1:int = IntUtil.ror(w[t-2], 17) ^ IntUtil.ror(w[t-2], 19) ^ (w[t-2] >>> 10); + w[t] = w[t-16] + ws0 + w[t-7] + ws1; + } + + var s0:int = IntUtil.ror(a, 2) ^ IntUtil.ror(a, 13) ^ IntUtil.ror(a, 22); + var maj:int = (a & b) ^ (a & c) ^ (b & c); + var t2:int = s0 + maj; + var s1:int = IntUtil.ror(e, 6) ^ IntUtil.ror(e, 11) ^ IntUtil.ror(e, 25); + var ch:int = (e & f) ^ ((~e) & g); + var t1:int = h + s1 + ch + k[t] + w[t]; + + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + } + + //Add this chunk's hash to result so far: + h0 += a; + h1 += b; + h2 += c; + h3 += d; + h4 += e; + h5 += f; + h6 += g; + h7 += h; + } + + var byteArray:ByteArray = new ByteArray(); + byteArray.writeInt(h0); + byteArray.writeInt(h1); + byteArray.writeInt(h2); + byteArray.writeInt(h3); + byteArray.writeInt(h4); + byteArray.writeInt(h5); + byteArray.writeInt(h6); + byteArray.writeInt(h7); + byteArray.position = 0; + + digest = new ByteArray(); + digest.writeBytes(byteArray); + digest.position = 0; + return byteArray; + } + + /** + * Converts a ByteArray to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param data The data to split into blocks + * @return An array containing the blocks into which data was split + */ + private static function createBlocksFromByteArray( data:ByteArray ):Array + { + var oldPosition:int = data.position; + data.position = 0; + + var blocks:Array = new Array(); + var len:int = data.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) + { + blocks[ i >> 5 ] |= ( data.readByte() & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + + data.position = oldPosition; + + return blocks; + } + + /** + * Converts a string to a sequence of 16-word blocks + * that we'll do the processing on. Appends padding + * and length in the process. + * + * @param s The string to split into blocks + * @return An array containing the blocks that s was split into. + */ + private static function createBlocksFromString( s:String ):Array + { + var blocks:Array = new Array(); + var len:int = s.length * 8; + var mask:int = 0xFF; // ignore hi byte of characters > 0xFF + for( var i:int = 0; i < len; i += 8 ) { + blocks[ i >> 5 ] |= ( s.charCodeAt( i / 8 ) & mask ) << ( 24 - i % 32 ); + } + + // append padding and length + blocks[ len >> 5 ] |= 0x80 << ( 24 - len % 32 ); + blocks[ ( ( ( len + 64 ) >> 9 ) << 4 ) + 15 ] = len; + return blocks; + } + } +} diff --git a/DISPLAYER/com/carrot/adobe/serialization/.svn/all-wcprops b/DISPLAYER/com/carrot/adobe/serialization/.svn/all-wcprops new file mode 100644 index 0000000000000000000000000000000000000000..cfb2acefb00c150e83c6ee0299de7002cb693245 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/.svn/all-wcprops @@ -0,0 +1,5 @@ +K 25 +svn:wc:ra_dav:version-url +V 50 +/svn/!svn/ver/99/trunk/src/com/adobe/serialization +END diff --git a/DISPLAYER/com/carrot/adobe/serialization/.svn/entries b/DISPLAYER/com/carrot/adobe/serialization/.svn/entries new file mode 100644 index 0000000000000000000000000000000000000000..834fc626cb3dbc8268c2796f61c1ec6596854dd2 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/.svn/entries @@ -0,0 +1,31 @@ +10 + +dir +126 +http://as3corelib.googlecode.com/svn/trunk/src/com/adobe/serialization +http://as3corelib.googlecode.com/svn + + + +2009-08-24T13:27:03.961534Z +99 +darron.schall + + + + + + + + + + + + + + +374f7c76-8224-0410-aa2b-53cc4844e527 + +json +dir + diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/.svn/all-wcprops b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/all-wcprops new file mode 100644 index 0000000000000000000000000000000000000000..9ef7dd524c31fcad1929ad46d01d029d1a9f5db8 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/all-wcprops @@ -0,0 +1,47 @@ +K 25 +svn:wc:ra_dav:version-url +V 55 +/svn/!svn/ver/99/trunk/src/com/adobe/serialization/json +END +JSONParseError.as +K 25 +svn:wc:ra_dav:version-url +V 73 +/svn/!svn/ver/55/trunk/src/com/adobe/serialization/json/JSONParseError.as +END +JSONDecoder.as +K 25 +svn:wc:ra_dav:version-url +V 70 +/svn/!svn/ver/83/trunk/src/com/adobe/serialization/json/JSONDecoder.as +END +JSONTokenizer.as +K 25 +svn:wc:ra_dav:version-url +V 72 +/svn/!svn/ver/99/trunk/src/com/adobe/serialization/json/JSONTokenizer.as +END +JSONEncoder.as +K 25 +svn:wc:ra_dav:version-url +V 70 +/svn/!svn/ver/96/trunk/src/com/adobe/serialization/json/JSONEncoder.as +END +JSON.as +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/!svn/ver/83/trunk/src/com/adobe/serialization/json/JSON.as +END +JSONToken.as +K 25 +svn:wc:ra_dav:version-url +V 68 +/svn/!svn/ver/55/trunk/src/com/adobe/serialization/json/JSONToken.as +END +JSONTokenType.as +K 25 +svn:wc:ra_dav:version-url +V 72 +/svn/!svn/ver/83/trunk/src/com/adobe/serialization/json/JSONTokenType.as +END diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/.svn/entries b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/entries new file mode 100644 index 0000000000000000000000000000000000000000..bfa053d04b02ed3be7532334329e7bddd7baffed --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/entries @@ -0,0 +1,266 @@ +10 + +dir +126 +http://as3corelib.googlecode.com/svn/trunk/src/com/adobe/serialization/json +http://as3corelib.googlecode.com/svn + + + +2009-08-24T13:27:03.961534Z +99 +darron.schall + + + + + + + + + + + + + + +374f7c76-8224-0410-aa2b-53cc4844e527 + +JSONParseError.as +file + + + + +2012-11-06T23:09:39.000000Z +349b4a6caceeb46730e01e909cc08413 +2008-08-08T06:16:29.605969Z +55 +mikechambers + + + + + + + + + + + + + + + + + + + + + +2883 + +JSONDecoder.as +file + + + + +2012-11-06T23:09:39.000000Z +a0cfe010302ed884750a06926f72d6b6 +2008-12-23T15:13:33.074852Z +83 +darron.schall + + + + + + + + + + + + + + + + + + + + + +9207 + +JSONTokenizer.as +file + + + + +2012-11-06T23:09:39.000000Z +22b2a5c52930e5b6a77410e958272d60 +2009-08-24T13:27:03.961534Z +99 +darron.schall + + + + + + + + + + + + + + + + + + + + + +18733 + +JSONEncoder.as +file + + + + +2012-11-06T23:09:39.000000Z +3f0ce6aaa1ada9cfd442a5d051c59fc2 +2009-08-15T17:04:58.980371Z +96 +darron.schall + + + + + + + + + + + + + + + + + + + + + +9508 + +JSON.as +file + + + + +2012-11-06T23:09:39.000000Z +72fd479d0901e989726554bb3655aeb1 +2008-12-23T15:13:33.074852Z +83 +darron.schall + + + + + + + + + + + + + + + + + + + + + +3129 + +JSONToken.as +file + + + + +2012-11-06T23:09:39.000000Z +1306bd9a6d3ccb468510b068fd7bddbf +2008-08-08T06:16:29.605969Z +55 +mikechambers + + + + + + + + + + + + + + + + + + + + + +3197 + +JSONTokenType.as +file + + + + +2012-11-06T23:09:39.000000Z +16ac4a184d1218d59db4ac20a836169b +2008-12-23T15:13:33.074852Z +83 +darron.schall + + + + + + + + + + + + + + + + + + + + + +2381 + diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSON.as.svn-base b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSON.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..ad2b9fc3dd5fe03c79484d0ebc7228daaf84960f --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSON.as.svn-base @@ -0,0 +1,86 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + /** + * This class provides encoding and decoding of the JSON format. + * + * Example usage: + * + * // create a JSON string from an internal object + * JSON.encode( myObject ); + * + * // read a JSON string into an internal object + * var myObject:Object = JSON.decode( jsonString ); + * + */ + public class JSON + { + /** + * Encodes a object into a JSON string. + * + * @param o The object to create a JSON string for + * @return the JSON string representing o + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function encode( o:Object ):String + { + return new JSONEncoder( o ).getString(); + } + + /** + * Decodes a JSON string into a native object. + * + * @param s The JSON string representing the object + * @param strict Flag indicating if the decoder should strictly adhere + * to the JSON standard or not. The default of true + * throws errors if the format does not match the JSON syntax exactly. + * Pass false to allow for non-properly-formatted JSON + * strings to be decoded with more leniancy. + * @return A native object as specified by s + * @throw JSONParseError + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function decode( s:String, strict:Boolean = true ):* + { + return new JSONDecoder( s, strict ).getValue(); + } + + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONDecoder.as.svn-base b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONDecoder.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..41a51d46232ef4a956c52293b469834cb782ac2d --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONDecoder.as.svn-base @@ -0,0 +1,327 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + public class JSONDecoder + { + + /** + * Flag indicating if the parser should be strict about the format + * of the JSON string it is attempting to decode. + */ + private var strict:Boolean; + + /** The value that will get parsed from the JSON string */ + private var value:*; + + /** The tokenizer designated to read the JSON string */ + private var tokenizer:JSONTokenizer; + + /** The current token from the tokenizer */ + private var token:JSONToken; + + /** + * Constructs a new JSONDecoder to parse a JSON string + * into a native object. + * + * @param s The JSON string to be converted + * into a native object + * @param strict Flag indicating if the JSON string needs to + * strictly match the JSON standard or not. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONDecoder( s:String, strict:Boolean ) + { + this.strict = strict; + tokenizer = new JSONTokenizer( s, strict ); + + nextToken(); + value = parseValue(); + + // Make sure the input stream is empty + if ( strict && nextToken() != null ) + { + tokenizer.parseError( "Unexpected characters left in input stream" ); + } + } + + /** + * Gets the internal object that was created by parsing + * the JSON string passed to the constructor. + * + * @return The internal object representation of the JSON + * string that was passed to the constructor + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function getValue():* + { + return value; + } + + /** + * Returns the next token from the tokenzier reading + * the JSON string + */ + private function nextToken():JSONToken + { + return token = tokenizer.getNextToken(); + } + + /** + * Attempt to parse an array. + */ + private function parseArray():Array + { + // create an array internally that we're going to attempt + // to parse from the tokenizer + var a:Array = new Array(); + + // grab the next token from the tokenizer to move + // past the opening [ + nextToken(); + + // check to see if we have an empty array + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + // we're done reading the array, so return it + return a; + } + // in non-strict mode an empty array is also a comma + // followed by a right bracket + else if ( !strict && token.type == JSONTokenType.COMMA ) + { + // move past the comma + nextToken(); + + // check to see if we're reached the end of the array + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + return a; + } + else + { + tokenizer.parseError( "Leading commas are not supported. Expecting ']' but found " + token.value ); + } + } + + // deal with elements of the array, and use an "infinite" + // loop because we could have any amount of elements + while ( true ) + { + // read in the value and add it to the array + a.push( parseValue() ); + + // after the value there should be a ] or a , + nextToken(); + + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + // we're done reading the array, so return it + return a; + } + else if ( token.type == JSONTokenType.COMMA ) + { + // move past the comma and read another value + nextToken(); + + // Allow arrays to have a comma after the last element + // if the decoder is not in strict mode + if ( !strict ) + { + // Reached ",]" as the end of the array, so return it + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + return a; + } + } + } + else + { + tokenizer.parseError( "Expecting ] or , but found " + token.value ); + } + } + return null; + } + + /** + * Attempt to parse an object. + */ + private function parseObject():Object + { + // create the object internally that we're going to + // attempt to parse from the tokenizer + var o:Object = new Object(); + + // store the string part of an object member so + // that we can assign it a value in the object + var key:String + + // grab the next token from the tokenizer + nextToken(); + + // check to see if we have an empty object + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + // we're done reading the object, so return it + return o; + } + // in non-strict mode an empty object is also a comma + // followed by a right bracket + else if ( !strict && token.type == JSONTokenType.COMMA ) + { + // move past the comma + nextToken(); + + // check to see if we're reached the end of the object + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + return o; + } + else + { + tokenizer.parseError( "Leading commas are not supported. Expecting '}' but found " + token.value ); + } + } + + // deal with members of the object, and use an "infinite" + // loop because we could have any amount of members + while ( true ) + { + if ( token.type == JSONTokenType.STRING ) + { + // the string value we read is the key for the object + key = String( token.value ); + + // move past the string to see what's next + nextToken(); + + // after the string there should be a : + if ( token.type == JSONTokenType.COLON ) + { + // move past the : and read/assign a value for the key + nextToken(); + o[key] = parseValue(); + + // move past the value to see what's next + nextToken(); + + // after the value there's either a } or a , + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + // we're done reading the object, so return it + return o; + } + else if ( token.type == JSONTokenType.COMMA ) + { + // skip past the comma and read another member + nextToken(); + + // Allow objects to have a comma after the last member + // if the decoder is not in strict mode + if ( !strict ) + { + // Reached ",}" as the end of the object, so return it + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + return o; + } + } + } + else + { + tokenizer.parseError( "Expecting } or , but found " + token.value ); + } + } + else + { + tokenizer.parseError( "Expecting : but found " + token.value ); + } + } + else + { + tokenizer.parseError( "Expecting string but found " + token.value ); + } + } + return null; + } + + /** + * Attempt to parse a value + */ + private function parseValue():Object + { + // Catch errors when the input stream ends abruptly + if ( token == null ) + { + tokenizer.parseError( "Unexpected end of input" ); + } + + switch ( token.type ) + { + case JSONTokenType.LEFT_BRACE: + return parseObject(); + + case JSONTokenType.LEFT_BRACKET: + return parseArray(); + + case JSONTokenType.STRING: + case JSONTokenType.NUMBER: + case JSONTokenType.TRUE: + case JSONTokenType.FALSE: + case JSONTokenType.NULL: + return token.value; + + case JSONTokenType.NAN: + if ( !strict ) + { + return token.value; + } + else + { + tokenizer.parseError( "Unexpected " + token.value ); + } + + default: + tokenizer.parseError( "Unexpected " + token.value ); + + } + + return null; + } + } +} diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONEncoder.as.svn-base b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONEncoder.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..639df02c2cef69d1bf17288e94a57c6c9b3562b8 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONEncoder.as.svn-base @@ -0,0 +1,312 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + import flash.utils.describeType; + + public class JSONEncoder { + + /** The string that is going to represent the object we're encoding */ + private var jsonString:String; + + /** + * Creates a new JSONEncoder. + * + * @param o The object to encode as a JSON string + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONEncoder( value:* ) { + jsonString = convertToString( value ); + + } + + /** + * Gets the JSON string from the encoder. + * + * @return The JSON string representation of the object + * that was passed to the constructor + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function getString():String { + return jsonString; + } + + /** + * Converts a value to it's JSON string equivalent. + * + * @param value The value to convert. Could be any + * type (object, number, array, etc) + */ + private function convertToString( value:* ):String { + + // determine what value is and convert it based on it's type + if ( value is String ) { + + // escape the string so it's formatted correctly + return escapeString( value as String ); + + } else if ( value is Number ) { + + // only encode numbers that finate + return isFinite( value as Number) ? value.toString() : "null"; + + } else if ( value is Boolean ) { + + // convert boolean to string easily + return value ? "true" : "false"; + + } else if ( value is Array ) { + + // call the helper method to convert an array + return arrayToString( value as Array ); + + } else if ( value is Object && value != null ) { + + // call the helper method to convert an object + return objectToString( value ); + } + return "null"; + } + + /** + * Escapes a string accoding to the JSON specification. + * + * @param str The string to be escaped + * @return The string with escaped special characters + * according to the JSON specification + */ + private function escapeString( str:String ):String { + // create a string to store the string's jsonstring value + var s:String = ""; + // current character in the string we're processing + var ch:String; + // store the length in a local variable to reduce lookups + var len:Number = str.length; + + // loop over all of the characters in the string + for ( var i:int = 0; i < len; i++ ) { + + // examine the character to determine if we have to escape it + ch = str.charAt( i ); + switch ( ch ) { + + case '"': // quotation mark + s += "\\\""; + break; + + //case '/': // solidus + // s += "\\/"; + // break; + + case '\\': // reverse solidus + s += "\\\\"; + break; + + case '\b': // bell + s += "\\b"; + break; + + case '\f': // form feed + s += "\\f"; + break; + + case '\n': // newline + s += "\\n"; + break; + + case '\r': // carriage return + s += "\\r"; + break; + + case '\t': // horizontal tab + s += "\\t"; + break; + + default: // everything else + + // check for a control character and escape as unicode + if ( ch < ' ' ) { + // get the hex digit(s) of the character (either 1 or 2 digits) + var hexCode:String = ch.charCodeAt( 0 ).toString( 16 ); + + // ensure that there are 4 digits by adjusting + // the # of zeros accordingly. + var zeroPad:String = hexCode.length == 2 ? "00" : "000"; + + // create the unicode escape sequence with 4 hex digits + s += "\\u" + zeroPad + hexCode; + } else { + + // no need to do any special encoding, just pass-through + s += ch; + + } + } // end switch + + } // end for loop + + return "\"" + s + "\""; + } + + /** + * Converts an array to it's JSON string equivalent + * + * @param a The array to convert + * @return The JSON string representation of a + */ + private function arrayToString( a:Array ):String { + // create a string to store the array's jsonstring value + var s:String = ""; + + // loop over the elements in the array and add their converted + // values to the string + for ( var i:int = 0; i < a.length; i++ ) { + // when the length is 0 we're adding the first element so + // no comma is necessary + if ( s.length > 0 ) { + // we've already added an element, so add the comma separator + s += "," + } + + // convert the value to a string + s += convertToString( a[i] ); + } + + // KNOWN ISSUE: In ActionScript, Arrays can also be associative + // objects and you can put anything in them, ie: + // myArray["foo"] = "bar"; + // + // These properties aren't picked up in the for loop above because + // the properties don't correspond to indexes. However, we're + // sort of out luck because the JSON specification doesn't allow + // these types of array properties. + // + // So, if the array was also used as an associative object, there + // may be some values in the array that don't get properly encoded. + // + // A possible solution is to instead encode the Array as an Object + // but then it won't get decoded correctly (and won't be an + // Array instance) + + // close the array and return it's string value + return "[" + s + "]"; + } + + /** + * Converts an object to it's JSON string equivalent + * + * @param o The object to convert + * @return The JSON string representation of o + */ + private function objectToString( o:Object ):String + { + // create a string to store the object's jsonstring value + var s:String = ""; + + // determine if o is a class instance or a plain object + var classInfo:XML = describeType( o ); + if ( classInfo.@name.toString() == "Object" ) + { + // the value of o[key] in the loop below - store this + // as a variable so we don't have to keep looking up o[key] + // when testing for valid values to convert + var value:Object; + + // loop over the keys in the object and add their converted + // values to the string + for ( var key:String in o ) + { + // assign value to a variable for quick lookup + value = o[key]; + + // don't add function's to the JSON string + if ( value is Function ) + { + // skip this key and try another + continue; + } + + // when the length is 0 we're adding the first item so + // no comma is necessary + if ( s.length > 0 ) { + // we've already added an item, so add the comma separator + s += "," + } + + s += escapeString( key ) + ":" + convertToString( value ); + } + } + else // o is a class instance + { + // Loop over all of the variables and accessors in the class and + // serialize them along with their values. + for each ( var v:XML in classInfo..*.( + name() == "variable" + || + ( + name() == "accessor" + // Issue #116 - Make sure accessors are readable + && attribute( "access" ).charAt( 0 ) == "r" ) + ) ) + { + // Issue #110 - If [Transient] metadata exists, then we should skip + if ( v.metadata && v.metadata.( @name == "Transient" ).length() > 0 ) + { + continue; + } + + // When the length is 0 we're adding the first item so + // no comma is necessary + if ( s.length > 0 ) { + // We've already added an item, so add the comma separator + s += "," + } + + s += escapeString( v.@name.toString() ) + ":" + + convertToString( o[ v.@name ] ); + } + + } + + return "{" + s + "}"; + } + + + } + +} diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONParseError.as.svn-base b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONParseError.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..5aec1e3b02bc6e6168156c630a149e612d77ea65 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONParseError.as.svn-base @@ -0,0 +1,87 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json { + + /** + * + * + */ + public class JSONParseError extends Error { + + /** The location in the string where the error occurred */ + private var _location:int; + + /** The string in which the parse error occurred */ + private var _text:String; + + /** + * Constructs a new JSONParseError. + * + * @param message The error message that occured during parsing + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONParseError( message:String = "", location:int = 0, text:String = "") { + super( message ); + name = "JSONParseError"; + _location = location; + _text = text; + } + + /** + * Provides read-only access to the location variable. + * + * @return The location in the string where the error occurred + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function get location():int { + return _location; + } + + /** + * Provides read-only access to the text variable. + * + * @return The string in which the error occurred + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function get text():String { + return _text; + } + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONToken.as.svn-base b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONToken.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..258d63c8a343565e6ab13fb73d9da4fc16b60ab2 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONToken.as.svn-base @@ -0,0 +1,104 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json { + + public class JSONToken { + + private var _type:int; + private var _value:Object; + + /** + * Creates a new JSONToken with a specific token type and value. + * + * @param type The JSONTokenType of the token + * @param value The value of the token + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONToken( type:int = -1 /* JSONTokenType.UNKNOWN */, value:Object = null ) { + _type = type; + _value = value; + } + + /** + * Returns the type of the token. + * + * @see com.adobe.serialization.json.JSONTokenType + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function get type():int { + return _type; + } + + /** + * Sets the type of the token. + * + * @see com.adobe.serialization.json.JSONTokenType + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function set type( value:int ):void { + _type = value; + } + + /** + * Gets the value of the token + * + * @see com.adobe.serialization.json.JSONTokenType + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function get value():Object { + return _value; + } + + /** + * Sets the value of the token + * + * @see com.adobe.serialization.json.JSONTokenType + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function set value ( v:Object ):void { + _value = v; + } + + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONTokenType.as.svn-base b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONTokenType.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..d068bc61b99db0f029662e5cab19735e2d94c7ae --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONTokenType.as.svn-base @@ -0,0 +1,69 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json { + + /** + * Class containing constant values for the different types + * of tokens in a JSON encoded string. + */ + public class JSONTokenType { + + public static const UNKNOWN:int = -1; + + public static const COMMA:int = 0; + + public static const LEFT_BRACE:int = 1; + + public static const RIGHT_BRACE:int = 2; + + public static const LEFT_BRACKET:int = 3; + + public static const RIGHT_BRACKET:int = 4; + + public static const COLON:int = 6; + + public static const TRUE:int = 7; + + public static const FALSE:int = 8; + + public static const NULL:int = 9; + + public static const STRING:int = 10; + + public static const NUMBER:int = 11; + + public static const NAN:int = 12; + + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONTokenizer.as.svn-base b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONTokenizer.as.svn-base new file mode 100644 index 0000000000000000000000000000000000000000..3be41bc8a347816a0ec465a60242ccb1528a44df --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/.svn/text-base/JSONTokenizer.as.svn-base @@ -0,0 +1,702 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json { + + public class JSONTokenizer { + + /** + * Flag indicating if the tokenizer should only recognize + * standard JSON tokens. Setting to false allows + * tokens such as NaN and allows numbers to be formatted as + * hex, etc. + */ + private var strict:Boolean; + + /** The object that will get parsed from the JSON string */ + private var obj:Object; + + /** The JSON string to be parsed */ + private var jsonString:String; + + /** The current parsing location in the JSON string */ + private var loc:int; + + /** The current character in the JSON string during parsing */ + private var ch:String; + + /** + * The regular expression used to make sure the string does not + * contain invalid control characters. + */ + private var controlCharsRegExp:RegExp = /[\x00-\x1F]/; + + /** + * Constructs a new JSONDecoder to parse a JSON string + * into a native object. + * + * @param s The JSON string to be converted + * into a native object + */ + public function JSONTokenizer( s:String, strict:Boolean ) + { + jsonString = s; + this.strict = strict; + loc = 0; + + // prime the pump by getting the first character + nextChar(); + } + + /** + * Gets the next token in the input sting and advances + * the character to the next character after the token + */ + public function getNextToken():JSONToken + { + var token:JSONToken = new JSONToken(); + + // skip any whitespace / comments since the last + // token was read + skipIgnored(); + + // examine the new character and see what we have... + switch ( ch ) + { + case '{': + token.type = JSONTokenType.LEFT_BRACE; + token.value = '{'; + nextChar(); + break + + case '}': + token.type = JSONTokenType.RIGHT_BRACE; + token.value = '}'; + nextChar(); + break + + case '[': + token.type = JSONTokenType.LEFT_BRACKET; + token.value = '['; + nextChar(); + break + + case ']': + token.type = JSONTokenType.RIGHT_BRACKET; + token.value = ']'; + nextChar(); + break + + case ',': + token.type = JSONTokenType.COMMA; + token.value = ','; + nextChar(); + break + + case ':': + token.type = JSONTokenType.COLON; + token.value = ':'; + nextChar(); + break; + + case 't': // attempt to read true + var possibleTrue:String = "t" + nextChar() + nextChar() + nextChar(); + + if ( possibleTrue == "true" ) + { + token.type = JSONTokenType.TRUE; + token.value = true; + nextChar(); + } + else + { + parseError( "Expecting 'true' but found " + possibleTrue ); + } + + break; + + case 'f': // attempt to read false + var possibleFalse:String = "f" + nextChar() + nextChar() + nextChar() + nextChar(); + + if ( possibleFalse == "false" ) + { + token.type = JSONTokenType.FALSE; + token.value = false; + nextChar(); + } + else + { + parseError( "Expecting 'false' but found " + possibleFalse ); + } + + break; + + case 'n': // attempt to read null + var possibleNull:String = "n" + nextChar() + nextChar() + nextChar(); + + if ( possibleNull == "null" ) + { + token.type = JSONTokenType.NULL; + token.value = null; + nextChar(); + } + else + { + parseError( "Expecting 'null' but found " + possibleNull ); + } + + break; + + case 'N': // attempt to read NaN + var possibleNaN:String = "N" + nextChar() + nextChar(); + + if ( possibleNaN == "NaN" ) + { + token.type = JSONTokenType.NAN; + token.value = NaN; + nextChar(); + } + else + { + parseError( "Expecting 'NaN' but found " + possibleNaN ); + } + + break; + + case '"': // the start of a string + token = readString(); + break; + + default: + // see if we can read a number + if ( isDigit( ch ) || ch == '-' ) + { + token = readNumber(); + } + else if ( ch == '' ) + { + // check for reading past the end of the string + return null; + } + else + { + // not sure what was in the input string - it's not + // anything we expected + parseError( "Unexpected " + ch + " encountered" ); + } + } + + return token; + } + + /** + * Attempts to read a string from the input string. Places + * the character location at the first character after the + * string. It is assumed that ch is " before this method is called. + * + * @return the JSONToken with the string value if a string could + * be read. Throws an error otherwise. + */ + private function readString():JSONToken + { + // Rather than examine the string character-by-character, it's + // faster to use indexOf to try to and find the closing quote character + // and then replace escape sequences after the fact. + + // Start at the current input stream position + var quoteIndex:int = loc; + do + { + // Find the next quote in the input stream + quoteIndex = jsonString.indexOf( "\"", quoteIndex ); + + if ( quoteIndex >= 0 ) + { + // We found the next double quote character in the string, but we need + // to make sure it is not part of an escape sequence. + + // Keep looping backwards while the previous character is a backslash + var backspaceCount:int = 0; + var backspaceIndex:int = quoteIndex - 1; + while ( jsonString.charAt( backspaceIndex ) == "\\" ) + { + backspaceCount++; + backspaceIndex--; + } + + // If we have an even number of backslashes, that means this is the ending quote + if ( backspaceCount % 2 == 0 ) + { + break; + } + + // At this point, the quote was determined to be part of an escape sequence + // so we need to move past the quote index to look for the next one + quoteIndex++; + } + else // There are no more quotes in the string and we haven't found the end yet + { + parseError( "Unterminated string literal" ); + } + } while ( true ); + + // Unescape the string + // the token for the string we'll try to read + var token:JSONToken = new JSONToken(); + token.type = JSONTokenType.STRING; + // Attach resulting string to the token to return it + token.value = unescapeString( jsonString.substr( loc, quoteIndex - loc ) ); + + // Move past the closing quote in the input string. This updates the next + // character in the input stream to be the character one after the closing quote + loc = quoteIndex + 1; + nextChar(); + + return token; + } + + /** + * Convert all JavaScript escape characters into normal characters + * + * @param input The input string to convert + * @return Original string with escape characters replaced by real characters + */ + public function unescapeString( input:String ):String + { + // Issue #104 - If the string contains any unescaped control characters, this + // is an error in strict mode + if ( strict && controlCharsRegExp.test( input ) ) + { + parseError( "String contains unescaped control character (0x00-0x1F)" ); + } + + var result:String = ""; + var backslashIndex:int = 0; + var nextSubstringStartPosition:int = 0; + var len:int = input.length; + do + { + // Find the next backslash in the input + backslashIndex = input.indexOf( '\\', nextSubstringStartPosition ); + + if ( backslashIndex >= 0 ) + { + result += input.substr( nextSubstringStartPosition, backslashIndex - nextSubstringStartPosition ); + + // Move past the backslash and next character (all escape sequences are + // two characters, except for \u, which will advance this further) + nextSubstringStartPosition = backslashIndex + 2; + + // Check the next character so we know what to escape + var afterBackslashIndex:int = backslashIndex + 1; + var escapedChar:String = input.charAt( afterBackslashIndex ); + switch ( escapedChar ) + { + // Try to list the most common expected cases first to improve performance + + case '"': result += '"'; break; // quotation mark + case '\\': result += '\\'; break; // reverse solidus + case 'n': result += '\n'; break; // newline + case 'r': result += '\r'; break; // carriage return + case 't': result += '\t'; break; // horizontal tab + + // Convert a unicode escape sequence to it's character value + case 'u': + + // Save the characters as a string we'll convert to an int + var hexValue:String = ""; + + // Make sure there are enough characters in the string leftover + if ( nextSubstringStartPosition + 4 > len ) + { + parseError( "Unexpected end of input. Expecting 4 hex digits after \\u." ); + } + + // Try to find 4 hex characters + for ( var i:int = nextSubstringStartPosition; i < nextSubstringStartPosition + 4; i++ ) + { + // get the next character and determine + // if it's a valid hex digit or not + var possibleHexChar:String = input.charAt( i ); + if ( !isHexDigit( possibleHexChar ) ) + { + parseError( "Excepted a hex digit, but found: " + possibleHexChar ); + } + + // Valid hex digit, add it to the value + hexValue += possibleHexChar; + } + + // Convert hexValue to an integer, and use that + // integer value to create a character to add + // to our string. + result += String.fromCharCode( parseInt( hexValue, 16 ) ); + // Move past the 4 hex digits that we just read + nextSubstringStartPosition += 4; + break; + + case 'f': result += '\f'; break; // form feed + case '/': result += '/'; break; // solidus + case 'b': result += '\b'; break; // bell + default: result += '\\' + escapedChar; // Couldn't unescape the sequence, so just pass it through + } + } + else + { + // No more backslashes to replace, append the rest of the string + result += input.substr( nextSubstringStartPosition ); + break; + } + + } while ( nextSubstringStartPosition < len ); + + return result; + } + + /** + * Attempts to read a number from the input string. Places + * the character location at the first character after the + * number. + * + * @return The JSONToken with the number value if a number could + * be read. Throws an error otherwise. + */ + private function readNumber():JSONToken + { + // the string to accumulate the number characters + // into that we'll convert to a number at the end + var input:String = ""; + + // check for a negative number + if ( ch == '-' ) + { + input += '-'; + nextChar(); + } + + // the number must start with a digit + if ( !isDigit( ch ) ) + { + parseError( "Expecting a digit" ); + } + + // 0 can only be the first digit if it + // is followed by a decimal point + if ( ch == '0' ) + { + input += ch; + nextChar(); + + // make sure no other digits come after 0 + if ( isDigit( ch ) ) + { + parseError( "A digit cannot immediately follow 0" ); + } + // unless we have 0x which starts a hex number, but this + // doesn't match JSON spec so check for not strict mode. + else if ( !strict && ch == 'x' ) + { + // include the x in the input + input += ch; + nextChar(); + + // need at least one hex digit after 0x to + // be valid + if ( isHexDigit( ch ) ) + { + input += ch; + nextChar(); + } + else + { + parseError( "Number in hex format require at least one hex digit after \"0x\"" ); + } + + // consume all of the hex values + while ( isHexDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + } + else + { + // read numbers while we can + while ( isDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + + // check for a decimal value + if ( ch == '.' ) + { + input += '.'; + nextChar(); + + // after the decimal there has to be a digit + if ( !isDigit( ch ) ) + { + parseError( "Expecting a digit" ); + } + + // read more numbers to get the decimal value + while ( isDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + + // check for scientific notation + if ( ch == 'e' || ch == 'E' ) + { + input += "e" + nextChar(); + // check for sign + if ( ch == '+' || ch == '-' ) + { + input += ch; + nextChar(); + } + + // require at least one number for the exponent + // in this case + if ( !isDigit( ch ) ) + { + parseError( "Scientific notation number needs exponent value" ); + } + + // read in the exponent + while ( isDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + + // convert the string to a number value + var num:Number = Number( input ); + + if ( isFinite( num ) && !isNaN( num ) ) + { + // the token for the number that we've read + var token:JSONToken = new JSONToken(); + token.type = JSONTokenType.NUMBER; + token.value = num; + return token; + } + else + { + parseError( "Number " + num + " is not valid!" ); + } + + return null; + } + + /** + * Reads the next character in the input + * string and advances the character location. + * + * @return The next character in the input string, or + * null if we've read past the end. + */ + private function nextChar():String + { + return ch = jsonString.charAt( loc++ ); + } + + /** + * Advances the character location past any + * sort of white space and comments + */ + private function skipIgnored():void + { + var originalLoc:int; + + // keep trying to skip whitespace and comments as long + // as we keep advancing past the original location + do + { + originalLoc = loc; + skipWhite(); + skipComments(); + } + while ( originalLoc != loc ); + } + + /** + * Skips comments in the input string, either + * single-line or multi-line. Advances the character + * to the first position after the end of the comment. + */ + private function skipComments():void + { + if ( ch == '/' ) + { + // Advance past the first / to find out what type of comment + nextChar(); + switch ( ch ) + { + case '/': // single-line comment, read through end of line + + // Loop over the characters until we find + // a newline or until there's no more characters left + do + { + nextChar(); + } + while ( ch != '\n' && ch != '' ) + + // move past the \n + nextChar(); + + break; + + case '*': // multi-line comment, read until closing */ + + // move past the opening * + nextChar(); + + // try to find a trailing */ + while ( true ) + { + if ( ch == '*' ) + { + // check to see if we have a closing / + nextChar(); + if ( ch == '/') + { + // move past the end of the closing */ + nextChar(); + break; + } + } + else + { + // move along, looking if the next character is a * + nextChar(); + } + + // when we're here we've read past the end of + // the string without finding a closing */, so error + if ( ch == '' ) + { + parseError( "Multi-line comment not closed" ); + } + } + + break; + + // Can't match a comment after a /, so it's a parsing error + default: + parseError( "Unexpected " + ch + " encountered (expecting '/' or '*' )" ); + } + } + + } + + + /** + * Skip any whitespace in the input string and advances + * the character to the first character after any possible + * whitespace. + */ + private function skipWhite():void + { + // As long as there are spaces in the input + // stream, advance the current location pointer + // past them + while ( isWhiteSpace( ch ) ) + { + nextChar(); + } + + } + + /** + * Determines if a character is whitespace or not. + * + * @return True if the character passed in is a whitespace + * character + */ + private function isWhiteSpace( ch:String ):Boolean + { + // Check for the whitespace defined in the spec + if ( ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r' ) + { + return true; + } + // If we're not in strict mode, we also accept non-breaking space + else if ( !strict && ch.charCodeAt( 0 ) == 160 ) + { + return true; + } + + return false; + } + + /** + * Determines if a character is a digit [0-9]. + * + * @return True if the character passed in is a digit + */ + private function isDigit( ch:String ):Boolean + { + return ( ch >= '0' && ch <= '9' ); + } + + /** + * Determines if a character is a hex digit [0-9A-Fa-f]. + * + * @return True if the character passed in is a hex digit + */ + private function isHexDigit( ch:String ):Boolean + { + return ( isDigit( ch ) || ( ch >= 'A' && ch <= 'F' ) || ( ch >= 'a' && ch <= 'f' ) ); + } + + /** + * Raises a parsing error with a specified message, tacking + * on the error location and the original string. + * + * @param message The message indicating why the error occurred + */ + public function parseError( message:String ):void + { + throw new JSONParseError( message, loc, jsonString ); + } + } + +} diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/JSON.as b/DISPLAYER/com/carrot/adobe/serialization/json/JSON.as new file mode 100644 index 0000000000000000000000000000000000000000..15ac8b9dd68f864ee8b8cbf099b6d91c3ec524ab --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/JSON.as @@ -0,0 +1,86 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.carrot.adobe.serialization.json +{ + + /** + * This class provides encoding and decoding of the JSON format. + * + * Example usage: + * + * // create a JSON string from an internal object + * JSON.encode( myObject ); + * + * // read a JSON string into an internal object + * var myObject:Object = JSON.decode( jsonString ); + * + */ + public class JSON + { + /** + * Encodes a object into a JSON string. + * + * @param o The object to create a JSON string for + * @return the JSON string representing o + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function encode( o:Object ):String + { + return new JSONEncoder( o ).getString(); + } + + /** + * Decodes a JSON string into a native object. + * + * @param s The JSON string representing the object + * @param strict Flag indicating if the decoder should strictly adhere + * to the JSON standard or not. The default of true + * throws errors if the format does not match the JSON syntax exactly. + * Pass false to allow for non-properly-formatted JSON + * strings to be decoded with more leniancy. + * @return A native object as specified by s + * @throw JSONParseError + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function decode( s:String, strict:Boolean = true ):* + { + return new JSONDecoder( s, strict ).getValue(); + } + + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/JSONDecoder.as b/DISPLAYER/com/carrot/adobe/serialization/json/JSONDecoder.as new file mode 100644 index 0000000000000000000000000000000000000000..0a3f1082bf9c48bd04e3cc11d8a01b2cf8d1be0c --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/JSONDecoder.as @@ -0,0 +1,327 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.carrot.adobe.serialization.json +{ + + public class JSONDecoder + { + + /** + * Flag indicating if the parser should be strict about the format + * of the JSON string it is attempting to decode. + */ + private var strict:Boolean; + + /** The value that will get parsed from the JSON string */ + private var value:*; + + /** The tokenizer designated to read the JSON string */ + private var tokenizer:JSONTokenizer; + + /** The current token from the tokenizer */ + private var token:JSONToken; + + /** + * Constructs a new JSONDecoder to parse a JSON string + * into a native object. + * + * @param s The JSON string to be converted + * into a native object + * @param strict Flag indicating if the JSON string needs to + * strictly match the JSON standard or not. + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONDecoder( s:String, strict:Boolean ) + { + this.strict = strict; + tokenizer = new JSONTokenizer( s, strict ); + + nextToken(); + value = parseValue(); + + // Make sure the input stream is empty + if ( strict && nextToken() != null ) + { + tokenizer.parseError( "Unexpected characters left in input stream" ); + } + } + + /** + * Gets the internal object that was created by parsing + * the JSON string passed to the constructor. + * + * @return The internal object representation of the JSON + * string that was passed to the constructor + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function getValue():* + { + return value; + } + + /** + * Returns the next token from the tokenzier reading + * the JSON string + */ + private function nextToken():JSONToken + { + return token = tokenizer.getNextToken(); + } + + /** + * Attempt to parse an array. + */ + private function parseArray():Array + { + // create an array internally that we're going to attempt + // to parse from the tokenizer + var a:Array = new Array(); + + // grab the next token from the tokenizer to move + // past the opening [ + nextToken(); + + // check to see if we have an empty array + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + // we're done reading the array, so return it + return a; + } + // in non-strict mode an empty array is also a comma + // followed by a right bracket + else if ( !strict && token.type == JSONTokenType.COMMA ) + { + // move past the comma + nextToken(); + + // check to see if we're reached the end of the array + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + return a; + } + else + { + tokenizer.parseError( "Leading commas are not supported. Expecting ']' but found " + token.value ); + } + } + + // deal with elements of the array, and use an "infinite" + // loop because we could have any amount of elements + while ( true ) + { + // read in the value and add it to the array + a.push( parseValue() ); + + // after the value there should be a ] or a , + nextToken(); + + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + // we're done reading the array, so return it + return a; + } + else if ( token.type == JSONTokenType.COMMA ) + { + // move past the comma and read another value + nextToken(); + + // Allow arrays to have a comma after the last element + // if the decoder is not in strict mode + if ( !strict ) + { + // Reached ",]" as the end of the array, so return it + if ( token.type == JSONTokenType.RIGHT_BRACKET ) + { + return a; + } + } + } + else + { + tokenizer.parseError( "Expecting ] or , but found " + token.value ); + } + } + return null; + } + + /** + * Attempt to parse an object. + */ + private function parseObject():Object + { + // create the object internally that we're going to + // attempt to parse from the tokenizer + var o:Object = new Object(); + + // store the string part of an object member so + // that we can assign it a value in the object + var key:String + + // grab the next token from the tokenizer + nextToken(); + + // check to see if we have an empty object + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + // we're done reading the object, so return it + return o; + } + // in non-strict mode an empty object is also a comma + // followed by a right bracket + else if ( !strict && token.type == JSONTokenType.COMMA ) + { + // move past the comma + nextToken(); + + // check to see if we're reached the end of the object + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + return o; + } + else + { + tokenizer.parseError( "Leading commas are not supported. Expecting '}' but found " + token.value ); + } + } + + // deal with members of the object, and use an "infinite" + // loop because we could have any amount of members + while ( true ) + { + if ( token.type == JSONTokenType.STRING ) + { + // the string value we read is the key for the object + key = String( token.value ); + + // move past the string to see what's next + nextToken(); + + // after the string there should be a : + if ( token.type == JSONTokenType.COLON ) + { + // move past the : and read/assign a value for the key + nextToken(); + o[key] = parseValue(); + + // move past the value to see what's next + nextToken(); + + // after the value there's either a } or a , + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + // we're done reading the object, so return it + return o; + } + else if ( token.type == JSONTokenType.COMMA ) + { + // skip past the comma and read another member + nextToken(); + + // Allow objects to have a comma after the last member + // if the decoder is not in strict mode + if ( !strict ) + { + // Reached ",}" as the end of the object, so return it + if ( token.type == JSONTokenType.RIGHT_BRACE ) + { + return o; + } + } + } + else + { + tokenizer.parseError( "Expecting } or , but found " + token.value ); + } + } + else + { + tokenizer.parseError( "Expecting : but found " + token.value ); + } + } + else + { + tokenizer.parseError( "Expecting string but found " + token.value ); + } + } + return null; + } + + /** + * Attempt to parse a value + */ + private function parseValue():Object + { + // Catch errors when the input stream ends abruptly + if ( token == null ) + { + tokenizer.parseError( "Unexpected end of input" ); + } + + switch ( token.type ) + { + case JSONTokenType.LEFT_BRACE: + return parseObject(); + + case JSONTokenType.LEFT_BRACKET: + return parseArray(); + + case JSONTokenType.STRING: + case JSONTokenType.NUMBER: + case JSONTokenType.TRUE: + case JSONTokenType.FALSE: + case JSONTokenType.NULL: + return token.value; + + case JSONTokenType.NAN: + if ( !strict ) + { + return token.value; + } + else + { + tokenizer.parseError( "Unexpected " + token.value ); + } + + default: + tokenizer.parseError( "Unexpected " + token.value ); + + } + + return null; + } + } +} diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/JSONEncoder.as b/DISPLAYER/com/carrot/adobe/serialization/json/JSONEncoder.as new file mode 100644 index 0000000000000000000000000000000000000000..e6ce524aaca6251faa01977d4c8866e7d3396c23 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/JSONEncoder.as @@ -0,0 +1,312 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.carrot.adobe.serialization.json +{ + + import flash.utils.describeType; + + public class JSONEncoder { + + /** The string that is going to represent the object we're encoding */ + private var jsonString:String; + + /** + * Creates a new JSONEncoder. + * + * @param o The object to encode as a JSON string + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONEncoder( value:* ) { + jsonString = convertToString( value ); + + } + + /** + * Gets the JSON string from the encoder. + * + * @return The JSON string representation of the object + * that was passed to the constructor + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function getString():String { + return jsonString; + } + + /** + * Converts a value to it's JSON string equivalent. + * + * @param value The value to convert. Could be any + * type (object, number, array, etc) + */ + private function convertToString( value:* ):String { + + // determine what value is and convert it based on it's type + if ( value is String ) { + + // escape the string so it's formatted correctly + return escapeString( value as String ); + + } else if ( value is Number ) { + + // only encode numbers that finate + return isFinite( value as Number) ? value.toString() : "null"; + + } else if ( value is Boolean ) { + + // convert boolean to string easily + return value ? "true" : "false"; + + } else if ( value is Array ) { + + // call the helper method to convert an array + return arrayToString( value as Array ); + + } else if ( value is Object && value != null ) { + + // call the helper method to convert an object + return objectToString( value ); + } + return "null"; + } + + /** + * Escapes a string accoding to the JSON specification. + * + * @param str The string to be escaped + * @return The string with escaped special characters + * according to the JSON specification + */ + private function escapeString( str:String ):String { + // create a string to store the string's jsonstring value + var s:String = ""; + // current character in the string we're processing + var ch:String; + // store the length in a local variable to reduce lookups + var len:Number = str.length; + + // loop over all of the characters in the string + for ( var i:int = 0; i < len; i++ ) { + + // examine the character to determine if we have to escape it + ch = str.charAt( i ); + switch ( ch ) { + + case '"': // quotation mark + s += "\\\""; + break; + + //case '/': // solidus + // s += "\\/"; + // break; + + case '\\': // reverse solidus + s += "\\\\"; + break; + + case '\b': // bell + s += "\\b"; + break; + + case '\f': // form feed + s += "\\f"; + break; + + case '\n': // newline + s += "\\n"; + break; + + case '\r': // carriage return + s += "\\r"; + break; + + case '\t': // horizontal tab + s += "\\t"; + break; + + default: // everything else + + // check for a control character and escape as unicode + if ( ch < ' ' ) { + // get the hex digit(s) of the character (either 1 or 2 digits) + var hexCode:String = ch.charCodeAt( 0 ).toString( 16 ); + + // ensure that there are 4 digits by adjusting + // the # of zeros accordingly. + var zeroPad:String = hexCode.length == 2 ? "00" : "000"; + + // create the unicode escape sequence with 4 hex digits + s += "\\u" + zeroPad + hexCode; + } else { + + // no need to do any special encoding, just pass-through + s += ch; + + } + } // end switch + + } // end for loop + + return "\"" + s + "\""; + } + + /** + * Converts an array to it's JSON string equivalent + * + * @param a The array to convert + * @return The JSON string representation of a + */ + private function arrayToString( a:Array ):String { + // create a string to store the array's jsonstring value + var s:String = ""; + + // loop over the elements in the array and add their converted + // values to the string + for ( var i:int = 0; i < a.length; i++ ) { + // when the length is 0 we're adding the first element so + // no comma is necessary + if ( s.length > 0 ) { + // we've already added an element, so add the comma separator + s += "," + } + + // convert the value to a string + s += convertToString( a[i] ); + } + + // KNOWN ISSUE: In ActionScript, Arrays can also be associative + // objects and you can put anything in them, ie: + // myArray["foo"] = "bar"; + // + // These properties aren't picked up in the for loop above because + // the properties don't correspond to indexes. However, we're + // sort of out luck because the JSON specification doesn't allow + // these types of array properties. + // + // So, if the array was also used as an associative object, there + // may be some values in the array that don't get properly encoded. + // + // A possible solution is to instead encode the Array as an Object + // but then it won't get decoded correctly (and won't be an + // Array instance) + + // close the array and return it's string value + return "[" + s + "]"; + } + + /** + * Converts an object to it's JSON string equivalent + * + * @param o The object to convert + * @return The JSON string representation of o + */ + private function objectToString( o:Object ):String + { + // create a string to store the object's jsonstring value + var s:String = ""; + + // determine if o is a class instance or a plain object + var classInfo:XML = describeType( o ); + if ( classInfo.@name.toString() == "Object" ) + { + // the value of o[key] in the loop below - store this + // as a variable so we don't have to keep looking up o[key] + // when testing for valid values to convert + var value:Object; + + // loop over the keys in the object and add their converted + // values to the string + for ( var key:String in o ) + { + // assign value to a variable for quick lookup + value = o[key]; + + // don't add function's to the JSON string + if ( value is Function ) + { + // skip this key and try another + continue; + } + + // when the length is 0 we're adding the first item so + // no comma is necessary + if ( s.length > 0 ) { + // we've already added an item, so add the comma separator + s += "," + } + + s += escapeString( key ) + ":" + convertToString( value ); + } + } + else // o is a class instance + { + // Loop over all of the variables and accessors in the class and + // serialize them along with their values. + for each ( var v:XML in classInfo..*.( + name() == "variable" + || + ( + name() == "accessor" + // Issue #116 - Make sure accessors are readable + && attribute( "access" ).charAt( 0 ) == "r" ) + ) ) + { + // Issue #110 - If [Transient] metadata exists, then we should skip + if ( v.metadata && v.metadata.( @name == "Transient" ).length() > 0 ) + { + continue; + } + + // When the length is 0 we're adding the first item so + // no comma is necessary + if ( s.length > 0 ) { + // We've already added an item, so add the comma separator + s += "," + } + + s += escapeString( v.@name.toString() ) + ":" + + convertToString( o[ v.@name ] ); + } + + } + + return "{" + s + "}"; + } + + + } + +} diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/JSONParseError.as b/DISPLAYER/com/carrot/adobe/serialization/json/JSONParseError.as new file mode 100644 index 0000000000000000000000000000000000000000..7126f25308d56510d5f00710bf4a6cd66b914c62 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/JSONParseError.as @@ -0,0 +1,87 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.carrot.adobe.serialization.json { + + /** + * + * + */ + public class JSONParseError extends Error { + + /** The location in the string where the error occurred */ + private var _location:int; + + /** The string in which the parse error occurred */ + private var _text:String; + + /** + * Constructs a new JSONParseError. + * + * @param message The error message that occured during parsing + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONParseError( message:String = "", location:int = 0, text:String = "") { + super( message ); + name = "JSONParseError"; + _location = location; + _text = text; + } + + /** + * Provides read-only access to the location variable. + * + * @return The location in the string where the error occurred + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function get location():int { + return _location; + } + + /** + * Provides read-only access to the text variable. + * + * @return The string in which the error occurred + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function get text():String { + return _text; + } + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/JSONToken.as b/DISPLAYER/com/carrot/adobe/serialization/json/JSONToken.as new file mode 100644 index 0000000000000000000000000000000000000000..ffba530b915bb0cca2d6aae08e5ed3d1cd79d55b --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/JSONToken.as @@ -0,0 +1,104 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.carrot.adobe.serialization.json { + + public class JSONToken { + + private var _type:int; + private var _value:Object; + + /** + * Creates a new JSONToken with a specific token type and value. + * + * @param type The JSONTokenType of the token + * @param value The value of the token + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONToken( type:int = -1 /* JSONTokenType.UNKNOWN */, value:Object = null ) { + _type = type; + _value = value; + } + + /** + * Returns the type of the token. + * + * @see com.adobe.serialization.json.JSONTokenType + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function get type():int { + return _type; + } + + /** + * Sets the type of the token. + * + * @see com.adobe.serialization.json.JSONTokenType + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function set type( value:int ):void { + _type = value; + } + + /** + * Gets the value of the token + * + * @see com.adobe.serialization.json.JSONTokenType + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function get value():Object { + return _value; + } + + /** + * Sets the value of the token + * + * @see com.adobe.serialization.json.JSONTokenType + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function set value ( v:Object ):void { + _value = v; + } + + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/JSONTokenType.as b/DISPLAYER/com/carrot/adobe/serialization/json/JSONTokenType.as new file mode 100644 index 0000000000000000000000000000000000000000..6f63a1642202e8035979535dd6aded464c3e186c --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/JSONTokenType.as @@ -0,0 +1,69 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.carrot.adobe.serialization.json { + + /** + * Class containing constant values for the different types + * of tokens in a JSON encoded string. + */ + public class JSONTokenType { + + public static const UNKNOWN:int = -1; + + public static const COMMA:int = 0; + + public static const LEFT_BRACE:int = 1; + + public static const RIGHT_BRACE:int = 2; + + public static const LEFT_BRACKET:int = 3; + + public static const RIGHT_BRACKET:int = 4; + + public static const COLON:int = 6; + + public static const TRUE:int = 7; + + public static const FALSE:int = 8; + + public static const NULL:int = 9; + + public static const STRING:int = 10; + + public static const NUMBER:int = 11; + + public static const NAN:int = 12; + + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/carrot/adobe/serialization/json/JSONTokenizer.as b/DISPLAYER/com/carrot/adobe/serialization/json/JSONTokenizer.as new file mode 100644 index 0000000000000000000000000000000000000000..2f0778d0dfcc4d0dbb8e7a40c17adcabb9792986 --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/serialization/json/JSONTokenizer.as @@ -0,0 +1,702 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.carrot.adobe.serialization.json { + + public class JSONTokenizer { + + /** + * Flag indicating if the tokenizer should only recognize + * standard JSON tokens. Setting to false allows + * tokens such as NaN and allows numbers to be formatted as + * hex, etc. + */ + private var strict:Boolean; + + /** The object that will get parsed from the JSON string */ + private var obj:Object; + + /** The JSON string to be parsed */ + private var jsonString:String; + + /** The current parsing location in the JSON string */ + private var loc:int; + + /** The current character in the JSON string during parsing */ + private var ch:String; + + /** + * The regular expression used to make sure the string does not + * contain invalid control characters. + */ + private var controlCharsRegExp:RegExp = /[\x00-\x1F]/; + + /** + * Constructs a new JSONDecoder to parse a JSON string + * into a native object. + * + * @param s The JSON string to be converted + * into a native object + */ + public function JSONTokenizer( s:String, strict:Boolean ) + { + jsonString = s; + this.strict = strict; + loc = 0; + + // prime the pump by getting the first character + nextChar(); + } + + /** + * Gets the next token in the input sting and advances + * the character to the next character after the token + */ + public function getNextToken():JSONToken + { + var token:JSONToken = new JSONToken(); + + // skip any whitespace / comments since the last + // token was read + skipIgnored(); + + // examine the new character and see what we have... + switch ( ch ) + { + case '{': + token.type = JSONTokenType.LEFT_BRACE; + token.value = '{'; + nextChar(); + break + + case '}': + token.type = JSONTokenType.RIGHT_BRACE; + token.value = '}'; + nextChar(); + break + + case '[': + token.type = JSONTokenType.LEFT_BRACKET; + token.value = '['; + nextChar(); + break + + case ']': + token.type = JSONTokenType.RIGHT_BRACKET; + token.value = ']'; + nextChar(); + break + + case ',': + token.type = JSONTokenType.COMMA; + token.value = ','; + nextChar(); + break + + case ':': + token.type = JSONTokenType.COLON; + token.value = ':'; + nextChar(); + break; + + case 't': // attempt to read true + var possibleTrue:String = "t" + nextChar() + nextChar() + nextChar(); + + if ( possibleTrue == "true" ) + { + token.type = JSONTokenType.TRUE; + token.value = true; + nextChar(); + } + else + { + parseError( "Expecting 'true' but found " + possibleTrue ); + } + + break; + + case 'f': // attempt to read false + var possibleFalse:String = "f" + nextChar() + nextChar() + nextChar() + nextChar(); + + if ( possibleFalse == "false" ) + { + token.type = JSONTokenType.FALSE; + token.value = false; + nextChar(); + } + else + { + parseError( "Expecting 'false' but found " + possibleFalse ); + } + + break; + + case 'n': // attempt to read null + var possibleNull:String = "n" + nextChar() + nextChar() + nextChar(); + + if ( possibleNull == "null" ) + { + token.type = JSONTokenType.NULL; + token.value = null; + nextChar(); + } + else + { + parseError( "Expecting 'null' but found " + possibleNull ); + } + + break; + + case 'N': // attempt to read NaN + var possibleNaN:String = "N" + nextChar() + nextChar(); + + if ( possibleNaN == "NaN" ) + { + token.type = JSONTokenType.NAN; + token.value = NaN; + nextChar(); + } + else + { + parseError( "Expecting 'NaN' but found " + possibleNaN ); + } + + break; + + case '"': // the start of a string + token = readString(); + break; + + default: + // see if we can read a number + if ( isDigit( ch ) || ch == '-' ) + { + token = readNumber(); + } + else if ( ch == '' ) + { + // check for reading past the end of the string + return null; + } + else + { + // not sure what was in the input string - it's not + // anything we expected + parseError( "Unexpected " + ch + " encountered" ); + } + } + + return token; + } + + /** + * Attempts to read a string from the input string. Places + * the character location at the first character after the + * string. It is assumed that ch is " before this method is called. + * + * @return the JSONToken with the string value if a string could + * be read. Throws an error otherwise. + */ + private function readString():JSONToken + { + // Rather than examine the string character-by-character, it's + // faster to use indexOf to try to and find the closing quote character + // and then replace escape sequences after the fact. + + // Start at the current input stream position + var quoteIndex:int = loc; + do + { + // Find the next quote in the input stream + quoteIndex = jsonString.indexOf( "\"", quoteIndex ); + + if ( quoteIndex >= 0 ) + { + // We found the next double quote character in the string, but we need + // to make sure it is not part of an escape sequence. + + // Keep looping backwards while the previous character is a backslash + var backspaceCount:int = 0; + var backspaceIndex:int = quoteIndex - 1; + while ( jsonString.charAt( backspaceIndex ) == "\\" ) + { + backspaceCount++; + backspaceIndex--; + } + + // If we have an even number of backslashes, that means this is the ending quote + if ( backspaceCount % 2 == 0 ) + { + break; + } + + // At this point, the quote was determined to be part of an escape sequence + // so we need to move past the quote index to look for the next one + quoteIndex++; + } + else // There are no more quotes in the string and we haven't found the end yet + { + parseError( "Unterminated string literal" ); + } + } while ( true ); + + // Unescape the string + // the token for the string we'll try to read + var token:JSONToken = new JSONToken(); + token.type = JSONTokenType.STRING; + // Attach resulting string to the token to return it + token.value = unescapeString( jsonString.substr( loc, quoteIndex - loc ) ); + + // Move past the closing quote in the input string. This updates the next + // character in the input stream to be the character one after the closing quote + loc = quoteIndex + 1; + nextChar(); + + return token; + } + + /** + * Convert all JavaScript escape characters into normal characters + * + * @param input The input string to convert + * @return Original string with escape characters replaced by real characters + */ + public function unescapeString( input:String ):String + { + // Issue #104 - If the string contains any unescaped control characters, this + // is an error in strict mode + if ( strict && controlCharsRegExp.test( input ) ) + { + parseError( "String contains unescaped control character (0x00-0x1F)" ); + } + + var result:String = ""; + var backslashIndex:int = 0; + var nextSubstringStartPosition:int = 0; + var len:int = input.length; + do + { + // Find the next backslash in the input + backslashIndex = input.indexOf( '\\', nextSubstringStartPosition ); + + if ( backslashIndex >= 0 ) + { + result += input.substr( nextSubstringStartPosition, backslashIndex - nextSubstringStartPosition ); + + // Move past the backslash and next character (all escape sequences are + // two characters, except for \u, which will advance this further) + nextSubstringStartPosition = backslashIndex + 2; + + // Check the next character so we know what to escape + var afterBackslashIndex:int = backslashIndex + 1; + var escapedChar:String = input.charAt( afterBackslashIndex ); + switch ( escapedChar ) + { + // Try to list the most common expected cases first to improve performance + + case '"': result += '"'; break; // quotation mark + case '\\': result += '\\'; break; // reverse solidus + case 'n': result += '\n'; break; // newline + case 'r': result += '\r'; break; // carriage return + case 't': result += '\t'; break; // horizontal tab + + // Convert a unicode escape sequence to it's character value + case 'u': + + // Save the characters as a string we'll convert to an int + var hexValue:String = ""; + + // Make sure there are enough characters in the string leftover + if ( nextSubstringStartPosition + 4 > len ) + { + parseError( "Unexpected end of input. Expecting 4 hex digits after \\u." ); + } + + // Try to find 4 hex characters + for ( var i:int = nextSubstringStartPosition; i < nextSubstringStartPosition + 4; i++ ) + { + // get the next character and determine + // if it's a valid hex digit or not + var possibleHexChar:String = input.charAt( i ); + if ( !isHexDigit( possibleHexChar ) ) + { + parseError( "Excepted a hex digit, but found: " + possibleHexChar ); + } + + // Valid hex digit, add it to the value + hexValue += possibleHexChar; + } + + // Convert hexValue to an integer, and use that + // integer value to create a character to add + // to our string. + result += String.fromCharCode( parseInt( hexValue, 16 ) ); + // Move past the 4 hex digits that we just read + nextSubstringStartPosition += 4; + break; + + case 'f': result += '\f'; break; // form feed + case '/': result += '/'; break; // solidus + case 'b': result += '\b'; break; // bell + default: result += '\\' + escapedChar; // Couldn't unescape the sequence, so just pass it through + } + } + else + { + // No more backslashes to replace, append the rest of the string + result += input.substr( nextSubstringStartPosition ); + break; + } + + } while ( nextSubstringStartPosition < len ); + + return result; + } + + /** + * Attempts to read a number from the input string. Places + * the character location at the first character after the + * number. + * + * @return The JSONToken with the number value if a number could + * be read. Throws an error otherwise. + */ + private function readNumber():JSONToken + { + // the string to accumulate the number characters + // into that we'll convert to a number at the end + var input:String = ""; + + // check for a negative number + if ( ch == '-' ) + { + input += '-'; + nextChar(); + } + + // the number must start with a digit + if ( !isDigit( ch ) ) + { + parseError( "Expecting a digit" ); + } + + // 0 can only be the first digit if it + // is followed by a decimal point + if ( ch == '0' ) + { + input += ch; + nextChar(); + + // make sure no other digits come after 0 + if ( isDigit( ch ) ) + { + parseError( "A digit cannot immediately follow 0" ); + } + // unless we have 0x which starts a hex number, but this + // doesn't match JSON spec so check for not strict mode. + else if ( !strict && ch == 'x' ) + { + // include the x in the input + input += ch; + nextChar(); + + // need at least one hex digit after 0x to + // be valid + if ( isHexDigit( ch ) ) + { + input += ch; + nextChar(); + } + else + { + parseError( "Number in hex format require at least one hex digit after \"0x\"" ); + } + + // consume all of the hex values + while ( isHexDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + } + else + { + // read numbers while we can + while ( isDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + + // check for a decimal value + if ( ch == '.' ) + { + input += '.'; + nextChar(); + + // after the decimal there has to be a digit + if ( !isDigit( ch ) ) + { + parseError( "Expecting a digit" ); + } + + // read more numbers to get the decimal value + while ( isDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + + // check for scientific notation + if ( ch == 'e' || ch == 'E' ) + { + input += "e" + nextChar(); + // check for sign + if ( ch == '+' || ch == '-' ) + { + input += ch; + nextChar(); + } + + // require at least one number for the exponent + // in this case + if ( !isDigit( ch ) ) + { + parseError( "Scientific notation number needs exponent value" ); + } + + // read in the exponent + while ( isDigit( ch ) ) + { + input += ch; + nextChar(); + } + } + + // convert the string to a number value + var num:Number = Number( input ); + + if ( isFinite( num ) && !isNaN( num ) ) + { + // the token for the number that we've read + var token:JSONToken = new JSONToken(); + token.type = JSONTokenType.NUMBER; + token.value = num; + return token; + } + else + { + parseError( "Number " + num + " is not valid!" ); + } + + return null; + } + + /** + * Reads the next character in the input + * string and advances the character location. + * + * @return The next character in the input string, or + * null if we've read past the end. + */ + private function nextChar():String + { + return ch = jsonString.charAt( loc++ ); + } + + /** + * Advances the character location past any + * sort of white space and comments + */ + private function skipIgnored():void + { + var originalLoc:int; + + // keep trying to skip whitespace and comments as long + // as we keep advancing past the original location + do + { + originalLoc = loc; + skipWhite(); + skipComments(); + } + while ( originalLoc != loc ); + } + + /** + * Skips comments in the input string, either + * single-line or multi-line. Advances the character + * to the first position after the end of the comment. + */ + private function skipComments():void + { + if ( ch == '/' ) + { + // Advance past the first / to find out what type of comment + nextChar(); + switch ( ch ) + { + case '/': // single-line comment, read through end of line + + // Loop over the characters until we find + // a newline or until there's no more characters left + do + { + nextChar(); + } + while ( ch != '\n' && ch != '' ) + + // move past the \n + nextChar(); + + break; + + case '*': // multi-line comment, read until closing */ + + // move past the opening * + nextChar(); + + // try to find a trailing */ + while ( true ) + { + if ( ch == '*' ) + { + // check to see if we have a closing / + nextChar(); + if ( ch == '/') + { + // move past the end of the closing */ + nextChar(); + break; + } + } + else + { + // move along, looking if the next character is a * + nextChar(); + } + + // when we're here we've read past the end of + // the string without finding a closing */, so error + if ( ch == '' ) + { + parseError( "Multi-line comment not closed" ); + } + } + + break; + + // Can't match a comment after a /, so it's a parsing error + default: + parseError( "Unexpected " + ch + " encountered (expecting '/' or '*' )" ); + } + } + + } + + + /** + * Skip any whitespace in the input string and advances + * the character to the first character after any possible + * whitespace. + */ + private function skipWhite():void + { + // As long as there are spaces in the input + // stream, advance the current location pointer + // past them + while ( isWhiteSpace( ch ) ) + { + nextChar(); + } + + } + + /** + * Determines if a character is whitespace or not. + * + * @return True if the character passed in is a whitespace + * character + */ + private function isWhiteSpace( ch:String ):Boolean + { + // Check for the whitespace defined in the spec + if ( ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r' ) + { + return true; + } + // If we're not in strict mode, we also accept non-breaking space + else if ( !strict && ch.charCodeAt( 0 ) == 160 ) + { + return true; + } + + return false; + } + + /** + * Determines if a character is a digit [0-9]. + * + * @return True if the character passed in is a digit + */ + private function isDigit( ch:String ):Boolean + { + return ( ch >= '0' && ch <= '9' ); + } + + /** + * Determines if a character is a hex digit [0-9A-Fa-f]. + * + * @return True if the character passed in is a hex digit + */ + private function isHexDigit( ch:String ):Boolean + { + return ( isDigit( ch ) || ( ch >= 'A' && ch <= 'F' ) || ( ch >= 'a' && ch <= 'f' ) ); + } + + /** + * Raises a parsing error with a specified message, tacking + * on the error location and the original string. + * + * @param message The message indicating why the error occurred + */ + public function parseError( message:String ):void + { + throw new JSONParseError( message, loc, jsonString ); + } + } + +} diff --git a/DISPLAYER/com/carrot/adobe/utils/IntUtil.as b/DISPLAYER/com/carrot/adobe/utils/IntUtil.as new file mode 100644 index 0000000000000000000000000000000000000000..e3aeed68d53258406d62797d4ff0a1eeff6dee0a --- /dev/null +++ b/DISPLAYER/com/carrot/adobe/utils/IntUtil.as @@ -0,0 +1,99 @@ +/* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.carrot.adobe.utils { + + import flash.utils.Endian; + + /** + * Contains reusable methods for operations pertaining + * to int values. + */ + public class IntUtil { + + /** + * Rotates x left n bits + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function rol ( x:int, n:int ):int { + return ( x << n ) | ( x >>> ( 32 - n ) ); + } + + /** + * Rotates x right n bits + * + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function ror ( x:int, n:int ):uint { + var nn:int = 32 - n; + return ( x << nn ) | ( x >>> ( 32 - nn ) ); + } + + /** String for quick lookup of a hex character based on index */ + private static var hexChars:String = "0123456789abcdef"; + + /** + * Outputs the hex value of a int, allowing the developer to specify + * the endinaness in the process. Hex output is lowercase. + * + * @param n The int value to output as hex + * @param bigEndian Flag to output the int as big or little endian + * @return A string of length 8 corresponding to the + * hex representation of n ( minus the leading "0x" ) + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public static function toHex( n:int, bigEndian:Boolean = false ):String { + var s:String = ""; + + if ( bigEndian ) { + for ( var i:int = 0; i < 4; i++ ) { + s += hexChars.charAt( ( n >> ( ( 3 - i ) * 8 + 4 ) ) & 0xF ) + + hexChars.charAt( ( n >> ( ( 3 - i ) * 8 ) ) & 0xF ); + } + } else { + for ( var x:int = 0; x < 4; x++ ) { + s += hexChars.charAt( ( n >> ( x * 8 + 4 ) ) & 0xF ) + + hexChars.charAt( ( n >> ( x * 8 ) ) & 0xF ); + } + } + + return s; + } + } + +} \ No newline at end of file diff --git a/DISPLAYER/com/laiyonghao/Uuid.as b/DISPLAYER/com/laiyonghao/Uuid.as new file mode 100644 index 0000000000000000000000000000000000000000..3a732228681171ebf4fdce8adf4f7931c9c7dcf5 --- /dev/null +++ b/DISPLAYER/com/laiyonghao/Uuid.as @@ -0,0 +1,62 @@ +package com.laiyonghao +{ + import flash.system.System; + import flash.utils.ByteArray; + import flash.utils.getTimer; + + public class Uuid + { + // Char codes for 0123456789ABCDEF + private static const ALPHA_CHAR_CODES:Array = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70]; + + private var buff:ByteArray; + private var str:String; + + public function Uuid() + { + update(); + } + + public function update():Uuid + { + str = null; + var r:uint = uint(new Date().time); + //trace(r); + buff = new ByteArray(); + //trace(System.totalMemory ^ r); + buff.writeUnsignedInt(System.totalMemory ^ r); + buff.writeInt(getTimer() ^ r); + buff.writeDouble(Math.random() * r); + return this; + } + + public function bytes(ba:ByteArray):void + { + buff.position = 0; + buff.readBytes(ba); + } + + public function toString():String + { + if(str) + { + return str + } + buff.position = 0; + var chars:Array = new Array(36); + var index:uint = 0; + for (var i:uint = 0; i < 16; i++) + { + if (i == 4 || i == 6 || i == 8 || i == 10) + { + chars[index++] = 45; // Hyphen char code + } + var b:int = buff.readByte(); + chars[index++] = ALPHA_CHAR_CODES[(b & 0xF0) >>> 4]; + chars[index++] = ALPHA_CHAR_CODES[(b & 0x0F)]; + } + str = String.fromCharCode.apply(null, chars); + return str; + } + } +} \ No newline at end of file diff --git a/DISPLAYER/com/sociodox/utils/Base64.as b/DISPLAYER/com/sociodox/utils/Base64.as new file mode 100644 index 0000000000000000000000000000000000000000..02e7ff5217e98b04289d3f77a9fa19b231a18bb3 --- /dev/null +++ b/DISPLAYER/com/sociodox/utils/Base64.as @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2012 Jean-Philippe Auclair + * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php + * Base64 library for ActionScript 3.0. + * By: Jean-Philippe Auclair : http://jpauclair.net + * Based on article: http://jpauclair.net/2010/01/09/base64-optimized-as3-lib/ + * Benchmark: + * This version: encode: 260ms decode: 255ms + * Blog version: encode: 322ms decode: 694ms + * as3Crypto encode: 6728ms decode: 4098ms + * + * Encode: com.sociodox.utils.Base64 is 25.8x faster than as3Crypto Base64 + * Decode: com.sociodox.utils.Base64 is 16x faster than as3Crypto Base64 + * + * Optimize & Profile any Flash content with TheMiner ( http://www.sociodox.com/theminer ) + */ +package com.sociodox.utils +{ + import flash.utils.ByteArray; + + public class Base64 + { + private static const _encodeChars:Vector. = InitEncoreChar(); + private static const _decodeChars:Vector. = InitDecodeChar(); + + public static function encode(data:ByteArray):String + { + var out:ByteArray = new ByteArray(); + //Presetting the length keep the memory smaller and optimize speed since there is no "grow" needed + out.length = (2 + data.length - ((data.length + 2) % 3)) * 4 / 3; //Preset length //1.6 to 1.5 ms + var i:int = 0; + var r:int = data.length % 3; + var len:int = data.length - r; + var c:uint; //read (3) character AND write (4) characters + var outPos:int = 0; + while (i < len) + { + //Read 3 Characters (8bit * 3 = 24 bits) + c = data[int(i++)] << 16 | data[int(i++)] << 8 | data[int(i++)]; + + out[int(outPos++)] = _encodeChars[int(c >>> 18)]; + out[int(outPos++)] = _encodeChars[int(c >>> 12 & 0x3f)]; + out[int(outPos++)] = _encodeChars[int(c >>> 6 & 0x3f)]; + out[int(outPos++)] = _encodeChars[int(c & 0x3f)]; + } + + if (r == 1) //Need two "=" padding + { + //Read one char, write two chars, write padding + c = data[int(i)]; + + out[int(outPos++)] = _encodeChars[int(c >>> 2)]; + out[int(outPos++)] = _encodeChars[int((c & 0x03) << 4)]; + out[int(outPos++)] = 61; + out[int(outPos++)] = 61; + } + else if (r == 2) //Need one "=" padding + { + c = data[int(i++)] << 8 | data[int(i)]; + + out[int(outPos++)] = _encodeChars[int(c >>> 10)]; + out[int(outPos++)] = _encodeChars[int(c >>> 4 & 0x3f)]; + out[int(outPos++)] = _encodeChars[int((c & 0x0f) << 2)]; + out[int(outPos++)] = 61; + } + + return out.readUTFBytes(out.length); + } + + public static function decode(str:String):ByteArray + { + var c1:int; + var c2:int; + var c3:int; + var c4:int; + var i:int = 0; + var len:int = str.length; + + var byteString:ByteArray = new ByteArray(); + byteString.writeUTFBytes(str); + var outPos:int = 0; + while (i < len) + { + //c1 + c1 = _decodeChars[int(byteString[i++])]; + if (c1 == -1) + break; + + //c2 + c2 = _decodeChars[int(byteString[i++])]; + if (c2 == -1) + break; + + byteString[int(outPos++)] = (c1 << 2) | ((c2 & 0x30) >> 4); + + //c3 + c3 = byteString[int(i++)]; + if (c3 == 61) + { + byteString.length = outPos + return byteString; + } + + c3 = _decodeChars[int(c3)]; + if (c3 == -1) + break; + + byteString[int(outPos++)] = ((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2); + + //c4 + c4 = byteString[int(i++)]; + if (c4 == 61) + { + byteString.length = outPos + return byteString; + } + + c4 = _decodeChars[int(c4)]; + if (c4 == -1) + break; + + byteString[int(outPos++)] = ((c3 & 0x03) << 6) | c4; + } + byteString.length = outPos + return byteString; + } + + public static function InitEncoreChar():Vector. + { + var encodeChars:Vector. = new Vector.(64, true); + + // We could push the number directly + // but I think it's nice to see the characters (with no overhead on encode/decode) + var chars:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + for (var i:int = 0; i < 64; i++) + { + encodeChars[i] = chars.charCodeAt(i); + } + + return encodeChars; + } + + public static function InitDecodeChar():Vector. + { + + var decodeChars:Vector. = new [ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, + -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; + + return decodeChars; + } + + } +} \ No newline at end of file diff --git a/DISPLAYER/config.json b/DISPLAYER/config.json new file mode 100644 index 0000000000000000000000000000000000000000..d1f73affeb1cd3b24989b799eb2e6313b988690c --- /dev/null +++ b/DISPLAYER/config.json @@ -0,0 +1,11 @@ +{ + "api_url": "http://127.0.0.1:5000", + "size": { + "width": 1920, + "height": 1080 + }, + "position": { + "x": 0, + "y": 0 + } +} \ No newline at end of file diff --git a/Displayer.app/Adobe AIR/Versions/1.0/Adobe AIR.dll b/Displayer.app/Adobe AIR/Versions/1.0/Adobe AIR.dll new file mode 100644 index 0000000000000000000000000000000000000000..91b9ef4e38e0fa4ba625434731e2cacdb2d9b49b --- /dev/null +++ b/Displayer.app/Adobe AIR/Versions/1.0/Adobe AIR.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a819617159ddc7aab0c1c495ec3a7baf7ebb8715e382a63745cffdb366429d48 +size 15256032 diff --git a/Displayer.app/Adobe AIR/Versions/1.0/Resources/Adobe AIR.vch b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Adobe AIR.vch new file mode 100644 index 0000000000000000000000000000000000000000..d6960cf2934b6167d8ab893d32e4f2163987e58b Binary files /dev/null and b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Adobe AIR.vch differ diff --git a/Displayer.app/Adobe AIR/Versions/1.0/Resources/CaptiveAppEntry.exe b/Displayer.app/Adobe AIR/Versions/1.0/Resources/CaptiveAppEntry.exe new file mode 100644 index 0000000000000000000000000000000000000000..8506e8b468c7921fe08dc49e4268f21332ebbe57 Binary files /dev/null and b/Displayer.app/Adobe AIR/Versions/1.0/Resources/CaptiveAppEntry.exe differ diff --git a/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..4a48a8429a389c277b66e449b77b1acbb1c04a82 --- /dev/null +++ b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING @@ -0,0 +1,33 @@ +Cairo is free software. + +Every source file in the implementation[*] of cairo is available to be +redistributed and/or modified under the terms of either the GNU Lesser +General Public License (LGPL) version 2.1 or the Mozilla Public +License (MPL) version 1.1. Some files are available under more +liberal terms, but we believe that in all cases, each file may be used +under either the LGPL or the MPL. + +See the following files in this directory for the precise terms and +conditions of either license: + + COPYING-LGPL-2.1 + COPYING-MPL-1.1 + +Please see each file in the implementation for copyright and licensing +information, (in the opening comment of each file). + +[*] The implementation of cairo is contained entirely within the "src" +directory of the cairo source distribution. There are other components +of the cairo source distribution (such as the "test", "util", and "perf") +that are auxiliary to the library itself. None of the source code in these +directories contributes to a build of the cairo library itself, (libcairo.so +or cairo.dll or similar). + +These auxiliary components are also free software, but may be under +different license terms than cairo itself. For example, most of the +test cases in the perf and test directories are made available under +an MIT license to simplify any use of this code for reference purposes +in using cairo itself. Other files might be available under the GNU +General Public License (GPL), for example. Again, please see the COPYING +file under each directory and the opening comment of each file for copyright +and licensing information. diff --git a/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-LGPL-2.1 b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-LGPL-2.1 new file mode 100644 index 0000000000000000000000000000000000000000..d662ac4d2e707003e523fabc3f4cc533a5b58ed7 --- /dev/null +++ b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-LGPL-2.1 @@ -0,0 +1,510 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +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 this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey 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 library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-MPL-1.1 b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-MPL-1.1 new file mode 100644 index 0000000000000000000000000000000000000000..7a45bfe8af201f43828fab9ffe9eedc4463fd1a2 --- /dev/null +++ b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/cairo/COPYING-MPL-1.1 @@ -0,0 +1,470 @@ + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + diff --git a/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pcre2/COPYING b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pcre2/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..efea21f6ef17cda81b0ad208f0bc0666215b6422 --- /dev/null +++ b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pcre2/COPYING @@ -0,0 +1,5 @@ +PCRE2 LICENCE + +Please see the file LICENCE in the PCRE2 distribution for licensing details. + +End diff --git a/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pixman/COPYING b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pixman/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..11b022bc2752f52c0b056be1993d1f67ebfbc656 --- /dev/null +++ b/Displayer.app/Adobe AIR/Versions/1.0/Resources/Licenses/pixman/COPYING @@ -0,0 +1,42 @@ +The following is the MIT license, agreed upon by most contributors. +Copyright holders of new code should use this license statement where +possible. They may also add themselves to the list below. + +/* + * Copyright 1987, 1988, 1989, 1998 The Open Group + * Copyright 1987, 1988, 1989 Digital Equipment Corporation + * Copyright 1999, 2004, 2008 Keith Packard + * Copyright 2000 SuSE, Inc. + * Copyright 2000 Keith Packard, member of The XFree86 Project, Inc. + * Copyright 2004, 2005, 2007, 2008, 2009, 2010 Red Hat, Inc. + * Copyright 2004 Nicholas Miell + * Copyright 2005 Lars Knoll & Zack Rusin, Trolltech + * Copyright 2005 Trolltech AS + * Copyright 2007 Luca Barbato + * Copyright 2008 Aaron Plattner, NVIDIA Corporation + * Copyright 2008 Rodrigo Kumpera + * Copyright 2008 AndrĂ© Tupinambá + * Copyright 2008 Mozilla Corporation + * Copyright 2008 Frederic Plourde + * Copyright 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright 2009, 2010 Nokia Corporation + * + * 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 (including the next + * paragraph) 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/Displayer.app/Adobe AIR/Versions/1.0/Resources/adobecp.vch b/Displayer.app/Adobe AIR/Versions/1.0/Resources/adobecp.vch new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Displayer.app/Displayer.exe b/Displayer.app/Displayer.exe new file mode 100644 index 0000000000000000000000000000000000000000..d7347f3426ea4489c291db69fb946e878f84d465 Binary files /dev/null and b/Displayer.app/Displayer.exe differ diff --git a/Displayer.app/Displayer.swf b/Displayer.app/Displayer.swf new file mode 100644 index 0000000000000000000000000000000000000000..04bae23b742f8483a1180fe4e11b1f7b4b4a4f55 Binary files /dev/null and b/Displayer.app/Displayer.swf differ diff --git a/Displayer.app/META-INF/AIR/application.xml b/Displayer.app/META-INF/AIR/application.xml new file mode 100644 index 0000000000000000000000000000000000000000..f221ffda754d5c945c31ad202e8dc7bb835fdca0 --- /dev/null +++ b/Displayer.app/META-INF/AIR/application.xml @@ -0,0 +1,38 @@ + + + + Displayer + 1.0 + Displayer + + Displayer + + + Displayer.swf + standard + false + true + false + portrait + auto + + + false + false + diff --git a/Displayer.app/META-INF/AIR/hash b/Displayer.app/META-INF/AIR/hash new file mode 100644 index 0000000000000000000000000000000000000000..f9bc6f96971eae4b640356cfe2bf49fd3ef4b709 --- /dev/null +++ b/Displayer.app/META-INF/AIR/hash @@ -0,0 +1 @@ +4Ý^ž-(ÇŘ bź˘™q^Đhµhł›ĘĹ#ďyG \ No newline at end of file diff --git a/Displayer.app/META-INF/signatures.xml b/Displayer.app/META-INF/signatures.xml new file mode 100644 index 0000000000000000000000000000000000000000..49bbba824f1d6b8d6cc2b0e590fe1c23b92eb306 --- /dev/null +++ b/Displayer.app/META-INF/signatures.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + GxvCj/NMcz7oaWlQ0C8ZUWBeh4RZdJTcXRaiR8wp8lY= + + + XCFMHN14lQ5Vypz8h2YAhfaDzeckzql+ICIhhEHKrgr4QRhUTphIDa63dxbKVBo/oqfbYC671Lxw +WxX/CwW9aACDD9SgMOVG9WUjYAuuBfcnox61uRKnhy/+w++6SDwV4ju8RnI+/N6cqh4klrPjHCux +yb2lnNTwFVtxIDkc7IZieEdqHWsSdEA5yoJsCvL+8fXSe3do19w7UQqoqV3s3YESwKaasEYDWlXU +Y0shP/u++nj7jYNoelYqhE+9BzpRh9/h5FHq7kDijHGAnf8TaNV4KDPhTC6dDc5/DHChZ8Rz5ldk +UNjYKlambjWo07/xlhT3sEqkQV00MdeoRXispg== + + + MIIDNTCCAh2gAwIBAgIYODVmMDU4OjE4Zjg4NzgxZDQ2Oi04MDAwMA0GCSqGSIb3DQEBCwUAMEYx +CzAJBgNVBAYTAlVTMREwDwYDVQQKEwhJbm1lbnRhbDERMA8GA1UECxMISW5tZW50YWwxETAPBgNV +BAMTCElubWVudGFsMB4XDTI0MDUxNjIxMzIwNFoXDTQ5MDUxNzIxMzIwNFowRjELMAkGA1UEBhMC +VVMxETAPBgNVBAoTCElubWVudGFsMREwDwYDVQQLEwhJbm1lbnRhbDERMA8GA1UEAxMISW5tZW50 +YWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCd5NZFzGtSp1bMuO9F96YKJdl92UnG +oBj8cj2rZsjMMyK+lcoiy4oWDFsqSLJoouJ3fRd1Gi56tqPlUyLSOfvGUbJk9IAh49KJYIdIqX18 +GYq+FAlXS4zxvTs1rSQPly7eE495zYrW9CkVfSIl7BrNdQOPDoAg2JO2QhucUHom4fpd3amuitxD +4QISGrzurLW6WHK5zFAnCKeO/CErOT0VV25SplRU/tr9xf9bQf0QEiS9hbuW1ZJh1P5MN9I3YUoV +70gdFghnlgpsvmiA5j0zZdEFvj24+88o0FgL9gpZOsz/ezSRKC130GoNX0GNWIQLTgSAlWmfC/Yb +y5Ec2z7BAgMBAAGjFzAVMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBCwUAA4IBAQCK +BcC/oA6as+QAJCzq5GeQxBnmfdlcPtOmfnIDv2yHpUw2gWnK0T9mH5XRfZsPb3y0l8EGTglMVm/S +gKrj6/HaS+d7Rvth8NNh4PmB1n5Tr2hh0ZdiK25Ph/Tc4GGk03j1FLcfy/Hanm137y1A2DpVdpch +YZs2LNorpdcqqjSgV4kHuMHtr5oL3fhD5Pgajoiy26vnslXsEjqqBgiwuc+3thN/rPWhQU2sLnzZ +Batun4MoatD0BGXT/VtJAYG8fJvQPyhNLrM8eXITl2/tkBHk3Mpd7ZMSe9WJbhLhp71OdK85XXo1 +tRZggoqrlXN+3CJipLneIVlisSwqE4yB6hHs + + + + + IuHzHcgC+YTA+pqpixEr9ITyKJlCcK0pYBiDP7wS3RQ=b2hRKplC0bw3Cp0DaigsxuOcCGsL1RRnkYUxZ/hQOMY=0/oCb84THKMagtI0Dy0KogEu92TegdesqRr/clXct1c= + + + + + + + + + + + + + MIIOFAYJKoZIhvcNAQcCoIIOBTCCDgECAQMxDTALBglghkgBZQMEAgEwgf8GCyqGSIb3DQEJEAEE +oIHvBIHsMIHpAgEBBgtghkgBhvhFAQcXAzAhMAkGBSsOAwIaBQAEFOkhi+Brk2LjMO6UxfeHw302 +kgGtAhUA1qSev+gJZnu/PKR9gFLUBQtU5j4YDzIwMjQwODE0MDYyNzUxWjADAgEeoIGGpIGDMIGA +MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBp +bmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1EloUUT3yYnSnBmdEjANBgkqhkiG +9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5j +LiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAxMTEyMzU5 +NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UE +CxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVT +dGFtcGluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLr +VfOwAa08cawyjwVrhponADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG +50F8eRzLy60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0hOHE +0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR7v68kldyd/TNqMz+ +CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kOqT6xzPnWK++32OTVHW0ROpL2k8mc +40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFzMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG +AQH/AgEAMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYDVR0fBC8wLTAr +oCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290LmNybDATBgNVHSUEDDAKBggr +BgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4E +FgQUr2PWyqNOhXLgp7xB8ymiOH+AdWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkw +DQYJKoZIhvcNAQELBQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3m +XfSi2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPITJBjSDlA +IcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1TvZrjfdKer7zzf0D19n2 +A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+queM6AL/OipTLAduexzi7D1Kr0eOUA2AK +TaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6AD +AgECAhB71OWvuswHP6EBIwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYD +VQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29y +azEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAeFw0xNzEyMjMwMDAw +MDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFu +dGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNfW48IHXJIV2VN +rwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr8mwj0p8NDxlsrYViaf1OhcGK +UjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKWlYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhB +IYfl3rTTJrJ7QFNYeY5SMQZNlANFxM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNV +HRMBAf8EAjAAMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6 +Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEw +QAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRz +cy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUF +BwEBBGswaTAqBggrBgEFBQcwAYYeaHR0cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsG +AQUFBzAChi9odHRwOi8vdHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAo +BgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMBqZ+F +zBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+AdWIwDQYJKoZIhvcN +AQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41UpezlGTud+ZQZYi7xXipINCNgQujYk ++gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QX +WZJBw7c/hub2wH9EPEZcF1rjpDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx +2j6aescixXTN30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIBATCBizB3MQsw +CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFu +dGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcg +Q0ECEHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG +9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODE0MDYyNzUxWjAvBgkqhkiG9w0BCQQxIgQgba4i +KA5M61ChpPp5bv004iR4uKYiXq0ZquTPojuOU6YwNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTO +dgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBABClssn67g9f+XV0 +W+8Pp5dfZoccydVx9o35fzQz1ufZhaiI436v1929iXr9gwGjSuFN8UKmEsTuuitMuXd6xg8JTQSQ +SIX8TO4Itn2oPrp8ihHwMINRkov0Ay8XiwXVYgzygQ0PumkFuwLj6MSkSbE3sPPagQPSkFiLJQGz +LpSDzyNZXTjGmahXqeT/0MAAUO09sxWvOLg09K4Ri7VH9pPutmu6+pNvlL5gU/xi1qYNQPCftuA4 +QVufN0yRBqh0BJV7Pls8ROVJd3ib0VX3SOQdSYzhyd3m3aP05zSGSpfvwBY+ppefshEIKb3eIEEq +CF6uWylFmKZULX1RY8RKPUc= + + + + + + + + + diff --git a/Displayer.app/config.json b/Displayer.app/config.json new file mode 100644 index 0000000000000000000000000000000000000000..a50a13fe9586cb1a7e0cc827385e04ee02f4242b --- /dev/null +++ b/Displayer.app/config.json @@ -0,0 +1,11 @@ +{ + "api_url": "http://127.0.0.1:2073", + "size": { + "width": 1920, + "height": 1080 + }, + "position": { + "x": 0, + "y": 0 + } +} \ No newline at end of file diff --git a/Displayer.app/mimetype b/Displayer.app/mimetype new file mode 100644 index 0000000000000000000000000000000000000000..21b11172b61468d7f335c8c7eef6d537f68b8f9e --- /dev/null +++ b/Displayer.app/mimetype @@ -0,0 +1 @@ +application/vnd.adobe.air-application-installer-package+zip \ No newline at end of file diff --git a/config.json b/config.json index e996860f58cae6e15b68062124b83b3176dab8d5..9c097ae5bc484806bba92018d1780b9cd7e008ee 100644 --- a/config.json +++ b/config.json @@ -1,6 +1,78 @@ { - "prompt": "A beautiful landscape", - "style_name": "Fantasy art", - "seed": 42, - "val_r": 0.4 -} \ No newline at end of file + "file_paths": { + "sketch_path": "sketch.png", + "output_path": "output.png" + }, + "style_list": [ + { + "name": "Cinematic", + "prompt": "cinematic still {prompt} . emotional, harmonious, vignette, highly detailed, high budget, bokeh, cinemascope, moody, epic, gorgeous, film grain, grainy" + }, + { + "name": "3D Model", + "prompt": "professional 3d model {prompt} . octane render, highly detailed, volumetric, dramatic lighting" + }, + { + "name": "Anime", + "prompt": "anime artwork {prompt} . anime style, key visual, vibrant, studio anime, highly detailed" + }, + { + "name": "Digital Art", + "prompt": "concept art {prompt} . digital artwork, illustrative, painterly, matte painting, highly detailed" + }, + { + "name": "Photographic", + "prompt": "cinematic photo {prompt} . 35mm photograph, film, bokeh, professional, 4k, highly detailed" + }, + { + "name": "Pixel art", + "prompt": "pixel-art {prompt} . low-res, blocky, pixel art style, 8-bit graphics" + }, + { + "name": "Fantasy art", + "prompt": "ethereal fantasy concept art of {prompt} . magnificent, celestial, ethereal, painterly, epic, majestic, magical, fantasy art, cover art, dreamy" + }, + { + "name": "Neonpunk", + "prompt": "neonpunk style {prompt} . cyberpunk, vaporwave, neon, vibes, vibrant, stunningly beautiful, crisp, detailed, sleek, ultramodern, magenta highlights, dark purple shadows, high contrast, cinematic, ultra detailed, intricate, professional" + }, + { + "name": "Manga", + "prompt": "manga style {prompt} . vibrant, high-energy, detailed, iconic, Japanese comic style" + } + ], + "default_style_name": "Fantasy art", + "random_values": [ + "Fabulous", + "Hi-fi", + "Mystical", + "Epic", + "Tech", + "Futuristic" + ], + "model_params": { + "pix2pix_model_name": "sketch_to_image_stochastic", + "device": "cuda", + "default_seed": 42, + "val_r_default": 0.6, + "max_seed": 2147483647 + }, + "server": { + "host": "0.0.0.0", + "port": 5000 + }, + "logging": { + "level": "DEBUG", + "format": "%(asctime)s - %(message)s" + }, + "canvas": { + "width": 512, + "height": 512, + "background_color": "#ffffff", + "default_brush_color": "#000000", + "default_brush_size": 2, + "eraser_color": "#ffffff", + "max_brush_size": 20, + "min_brush_size": 1 + } +} diff --git a/draw.py b/draw.py new file mode 100644 index 0000000000000000000000000000000000000000..8b5bf5e859db41077ea0373164aa96fc6b13f48d --- /dev/null +++ b/draw.py @@ -0,0 +1,277 @@ +import random +import numpy as np +from PIL import Image, ImageOps +import base64 +from io import BytesIO +import torch +import torchvision.transforms.functional as F +import gradio as gr +from transformers import BlipProcessor, BlipForConditionalGeneration +from flask import Flask, request, jsonify, render_template_string, send_file +from flask_cors import CORS +import threading +import hashlib +import signal +import sys +import os + +# Load models +processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base") +blip_model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base").to("cuda") + +# Pix2Pix model placeholder (Assume you have this model correctly implemented) +class Pix2Pix_Turbo: + def __init__(self, mode): + pass + + def __call__(self, c_t, prompt, deterministic, r, noise_map): + # Dummy image processing function for demonstration purposes + return c_t + +pix2pix_model = Pix2Pix_Turbo("sketch_to_image_stochastic") + +# Flask application setup +app = Flask(__name__) +CORS(app) # Handle CORS issues + +# Global Constants and Configuration +STYLE_LIST = [ + {"name": "Cinematic", "prompt": "cinematic still {prompt} . emotional, harmonious, vignette, highly detailed, high budget, bokeh, cinemascope, moody, epic, gorgeous, film grain, grainy"}, + {"name": "3D Model", "prompt": "professional 3d model {prompt} . octane render, highly detailed, volumetric, dramatic lighting"}, + {"name": "Anime", "prompt": "anime artwork {prompt} . anime style, key visual, vibrant, studio anime, highly detailed"}, + {"name": "Digital Art", "prompt": "concept art {prompt} . digital artwork, illustrative, painterly, matte painting, highly detailed"}, + {"name": "Photographic", "prompt": "cinematic photo {prompt} . 35mm photograph, film, bokeh, professional, 4k, highly detailed"}, + {"name": "Pixel art", "prompt": "pixel-art {prompt} . low-res, blocky, pixel art style, 8-bit graphics"}, + {"name": "Fantasy art", "prompt": "ethereal fantasy concept art of {prompt} . magnificent, celestial, ethereal, painterly, epic, majestic, magical, fantasy art, cover art, dreamy"}, + {"name": "Neonpunk", "prompt": "neonpunk style {prompt} . cyberpunk, vaporwave, neon, vibes, vibrant, stunningly beautiful, crisp, detailed, sleek, ultramodern, magenta highlights, dark purple shadows, high contrast, cinematic, ultra detailed, intricate, professional"}, + {"name": "Manga", "prompt": "manga style {prompt} . vibrant, high-energy, detailed, iconic, Japanese comic style"}, +] + +STYLES = {style["name"]: style["prompt"] for style in STYLE_LIST} +STYLE_NAMES = list(STYLES.keys()) +DEFAULT_STYLE_NAME = "Fantasy art" +MAX_SEED = np.iinfo(np.int32).max + +# Paths for storing sketches and outputs +SKETCH_PATH = "sketch.png" +OUTPUT_PATH = "output.png" + +# Image processing function +def run(image, prompt, prompt_template, style_name, seed, val_r): + if not prompt.strip(): + prompt = "Generated by drawing tool" + + prompt = prompt_template.replace("{prompt}", prompt) + image = image.convert("RGB") + image_tensor = F.to_tensor(image) > 0.5 + + with torch.no_grad(): + c_t = image_tensor.unsqueeze(0).to("cuda").float() + torch.manual_seed(seed) + noise = torch.randn((1, 4, c_t.shape[2] // 8, c_t.shape[3] // 8), device=c_t.device) + output_image = pix2pix_model(c_t, prompt, deterministic=False, r=val_r, noise_map=noise) + + output_pil = F.to_pil_image(output_image[0].cpu() * 0.5 + 0.5) + output_pil.save(OUTPUT_PATH) # Save the output image + + buffered = BytesIO() + output_pil.save(buffered, format="PNG") + output_data = base64.b64encode(buffered.getvalue()).decode("utf-8") + return output_data + +# Flask route to handle image processing +@app.route('/process-image', methods=['POST']) +def process_image(): + try: + data = request.get_json() + image_data = data.get("image", "").split(",")[1] + image = Image.open(BytesIO(base64.b64decode(image_data))).convert("RGB") + + # Process the image + output_image_uri = run( + image, + data.get("prompt", ""), + STYLES.get(data.get("style_name", DEFAULT_STYLE_NAME)), + data.get("style_name", DEFAULT_STYLE_NAME), + int(data.get("seed", random.randint(0, MAX_SEED))), + float(data.get("val_r", 0.4)) + ) + return jsonify({"image": output_image_uri}) + + except Exception as e: + return jsonify({"error": str(e)}), 500 + +# Flask route to serve the sketch image +@app.route('/get_sketch', methods=['GET']) +def get_sketch(): + if os.path.exists(SKETCH_PATH): + return send_file(SKETCH_PATH, mimetype='image/png') + return jsonify({"status": "error", "message": "Sketch not found."}), 404 + +# Flask route to serve the output image +@app.route('/get_output', methods=['GET']) +def get_output(): + if os.path.exists(OUTPUT_PATH): + return send_file(OUTPUT_PATH, mimetype='image/png') + return jsonify({"status": "error", "message": "Output not found."}), 404 + +# HTML page for drawing +@app.route('/') +def draw_page(): + html_template = """ + + + + + + Drawing Page + + + +
+ + + + + + +
+
+ +
+ + + + """ + return render_template_string(html_template) + +# HTML page for previewing the processed image +@app.route('/preview') +def preview_page(): + html_template = """ + + + + + + Preview Page + + + + + + + + """ + return render_template_string(html_template) + +def signal_handler(sig, frame): + print("Ctrl+C pressed, shutting down.") + sys.exit(0) + +# Register the signal handler for Ctrl+C +signal.signal(signal.SIGINT, signal_handler) + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=2073) diff --git a/draw_server.py b/draw_server.py new file mode 100644 index 0000000000000000000000000000000000000000..ccacb4a5a6e68ac36e98e6dcc9a5c5e166bb6176 --- /dev/null +++ b/draw_server.py @@ -0,0 +1,141 @@ +from flask import Flask, render_template_string, request, send_file, jsonify +from PIL import Image +from io import BytesIO +import os +import threading +import gradio as gr + +app = Flask(__name__) + +# File paths +SKETCH_PATH = "sketch.png" +OUTPUT_PATH = "output.png" + +# Route to upload the sketch +@app.route('/upload_sketch', methods=['POST']) +def upload_sketch(): + sketch = request.files['sketch'] + sketch.save(SKETCH_PATH) + return jsonify({"status": "success", "message": "Sketch uploaded successfully."}) + +# Route to upload the output image +@app.route('/upload_output', methods=['POST']) +def upload_output(): + output = request.files['output'] + output.save(OUTPUT_PATH) + return jsonify({"status": "success", "message": "Output uploaded successfully."}) + +# Route to get the latest sketch +@app.route('/get_sketch', methods=['GET']) +def get_sketch(): + if os.path.exists(SKETCH_PATH): + return send_file(SKETCH_PATH, mimetype='image/png') + return jsonify({"status": "error", "message": "Sketch not found."}), 404 + +# Route to get the latest output image +@app.route('/get_output', methods=['GET']) +def get_output(): + if os.path.exists(OUTPUT_PATH): + return send_file(OUTPUT_PATH, mimetype='image/png') + return jsonify({"status": "error", "message": "Output not found."}), 404 + +# Route to render the preview page +@app.route('/') +def index(): + # HTML template for the preview page + html_template = """ + + + + + + Preview Page + + + + + + + + """ + return render_template_string(html_template) + +# Function to run the Gradio drawing interface +def start_gradio_interface(): + # Setup the Gradio interface for drawing + with gr.Blocks(css="style.css") as demo: + gr.Markdown("# Drawing Page") + + # Hidden buttons for canvas actions + line = gr.Checkbox(label="line", value=False, elem_id="cb-line") + eraser = gr.Checkbox(label="eraser", value=False, elem_id="cb-eraser") + with gr.Row(elem_id="main_row"): + with gr.Column(elem_id="column_input"): + gr.Markdown("## INPUT", elem_id="input_header") + image = gr.Image( + source="canvas", + tool="color-sketch", + type="pil", + image_mode="L", + invert_colors=True, + shape=(512, 512), + brush_radius=4, + height=512, + width=512, + brush_color="#000000", + interactive=True, + show_download_button=True, + elem_id="input_image", + show_label=False, + ) + upload_btn = gr.UploadButton(label="Upload your sketch", file_types=["image"], file_count="single") + + def upload_sketch(image): + buffered = BytesIO() + image.save(buffered, format="PNG") + buffered.seek(0) + response = requests.post(f"http://localhost:5000/upload_sketch", files={"sketch": buffered}) + return response.json() + + upload_btn.click(upload_sketch, inputs=image, outputs=None) + + gr.HTML( + """ +
+
+
+
+
+
+
+ """ + ) + run_button = gr.Button("Run", max_width=20) + prompt = gr.Textbox(label="Prompt", value="", show_label=True) + + demo.launch(server_name="0.0.0.0", server_port=7860) + +# Run Flask and Gradio in parallel +if __name__ == "__main__": + threading.Thread(target=start_gradio_interface).start() + app.run(host='0.0.0.0', port=5000) diff --git a/flask_sketch2imagehd.py b/flask_sketch2imagehd.py new file mode 100644 index 0000000000000000000000000000000000000000..f821e98375273b7b840985719a15b7f9ae785162 --- /dev/null +++ b/flask_sketch2imagehd.py @@ -0,0 +1,462 @@ +import random +import numpy as np +from PIL import Image, ImageOps +import base64 +from io import BytesIO +import torch +import torchvision.transforms.functional as F +from transformers import BlipProcessor, BlipForConditionalGeneration +from src.pix2pix_turbo import Pix2Pix_Turbo +import nltk +from nltk import pos_tag +from nltk.tokenize import word_tokenize +import re +import os +import threading +import hashlib +from flask import Flask, request, send_file, jsonify, render_template_string +from flask_cors import CORS +import signal +import sys +import logging +import json +import gc +from torch.cuda.amp import autocast + +# Set environment variable for better memory management +os.environ['PYTORCH_CUDA_ALLOC_CONF'] = 'max_split_size_mb:128' + +# Function to clear CUDA cache and collect garbage +def clear_memory(): + torch.cuda.empty_cache() + gc.collect() + +# Load the configuration from config.json +with open('config.json', 'r') as config_file: + config = json.load(config_file) + +# Setup logging as per config +logging.basicConfig(level=config["logging"]["level"], format=config["logging"]["format"]) + +# Ensure NLTK resources are downloaded +nltk.download('averaged_perceptron_tagger', quiet=True) +nltk.download('punkt', quiet=True) + +# File paths for storing sketches and outputs +SKETCH_PATH = config["file_paths"]["sketch_path"] +OUTPUT_PATH = config["file_paths"]["output_path"] + +# Processing queue +processing_queue = [] + +# Global Constants and Configuration +STYLE_LIST = config["style_list"] +STYLES = {style["name"]: style["prompt"] for style in STYLE_LIST} +DEFAULT_STYLE_NAME = config["default_style_name"] +RANDOM_VALUES = config["random_values"] +PIX2PIX_MODEL_NAME = config["model_params"]["pix2pix_model_name"] +DEVICE = config["model_params"]["device"] +DEFAULT_SEED = config["model_params"]["default_seed"] +VAL_R_DEFAULT = config["model_params"]["val_r_default"] +MAX_SEED = config["model_params"]["max_seed"] + +# Canvas configuration +CANVAS_WIDTH = config["canvas"]["width"] +CANVAS_HEIGHT = config["canvas"]["height"] +BACKGROUND_COLOR = config["canvas"]["background_color"] +DEFAULT_BRUSH_COLOR = config["canvas"]["default_brush_color"] +DEFAULT_BRUSH_SIZE = config["canvas"]["default_brush_size"] +ERASER_COLOR = config["canvas"]["eraser_color"] +MAX_BRUSH_SIZE = config["canvas"]["max_brush_size"] +MIN_BRUSH_SIZE = config["canvas"]["min_brush_size"] + +# Preload Models +logging.debug("Loading BLIP and Pix2Pix models...") +processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base") +blip_model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base").to(DEVICE).eval() # Set model to eval mode +pix2pix_model = Pix2Pix_Turbo(PIX2PIX_MODEL_NAME).to(DEVICE).eval() # Set model to eval mode +logging.debug("Models loaded.") + +style_list = [ + { + "name": "Cinematic", + "prompt": "cinematic still {prompt} . emotional, harmonious, vignette, highly detailed, high budget, bokeh, cinemascope, moody, epic, gorgeous, film grain, grainy", + }, + # Other styles... +] + +styles = {k["name"]: k["prompt"] for k in style_list} +STYLE_NAMES = list(styles.keys()) +DEFAULT_STYLE_NAME = "Fantasy art" +MAX_SEED = np.iinfo(np.int32).max + +# Shared flag and thread for managing the current processing +current_thread = None +cancel_flag = threading.Event() + +def pil_image_to_data_uri(img: Image, format="PNG") -> str: + """Converts a PIL image to a data URI.""" + buffered = BytesIO() + img.save(buffered, format=format) + img_str = base64.b64encode(buffered.getvalue()).decode() + return f"data:image/{format.lower()};base64,{img_str}" + +def generate_prompt_from_sketch(image: Image) -> str: + """Generates a text prompt based on a sketch using the BLIP model.""" + logging.debug("Generating prompt from sketch...") + + image = ImageOps.fit(image, (CANVAS_WIDTH, CANVAS_HEIGHT), Image.LANCZOS) + inputs = processor(image, return_tensors="pt").to(DEVICE) + + with torch.no_grad(): + out = blip_model.generate(**inputs, max_new_tokens=50) + + text_prompt = processor.decode(out[0], skip_special_tokens=True) + logging.debug(f"Generated prompt: {text_prompt}") + + recognized_items = [extract_main_words(item) for item in text_prompt.split(', ') if item.strip()] + random_prefix = random.choice(RANDOM_VALUES) + + prompt = f"a photo of a {' and '.join(recognized_items)}, {random_prefix}" + logging.debug(f"Final prompt: {prompt}") + return prompt + +def extract_main_words(item: str) -> str: + """Extracts all nouns from a given text fragment and returns them as a space-separated string.""" + words = word_tokenize(item.strip()) + tagged = pos_tag(words) + nouns = [word.capitalize() for word, tag in tagged if tag in ('NN', 'NNP', 'NNPS', 'NNS')] + return ' '.join(nouns) + +def run(image, prompt, prompt_template, style_name, seed, val_r): + """Runs the main image processing pipeline.""" + logging.debug("Running model inference...") + if image is None: + blank_image = Image.new("L", (CANVAS_WIDTH, CANVAS_HEIGHT), 255) + blank_image.save(SKETCH_PATH) # Save blank image as sketch + logging.debug("No image provided. Saving blank image.") + return "", "", "", "" + + if not prompt.strip(): + prompt = generate_prompt_from_sketch(image) + + # Save the sketch to a file + image.save(SKETCH_PATH) + + # Show the original prompt before processing + original_prompt = f"Original Prompt: {prompt}" + logging.debug(original_prompt) + + # Add the task to the processing queue + processing_queue.append({"prompt": prompt, "status": "processing"}) + + prompt = prompt_template.replace("{prompt}", prompt) + logging.debug(f"Processing with prompt: {prompt}") + image = image.convert("RGB") + image_tensor = F.to_tensor(image) * 2 - 1 # Normalize to [-1, 1] + + clear_memory() # Clear memory before running the model + + try: + with torch.no_grad(): + c_t = image_tensor.unsqueeze(0).to(DEVICE).float() + torch.manual_seed(seed) + B, C, H, W = c_t.shape + + noise = torch.randn((1, 4, H // 8, W // 8), device=c_t.device) + logging.debug("Calling Pix2Pix model...") + + # Enable mixed precision + with autocast(): + if cancel_flag.is_set(): + logging.debug("Processing canceled.") + return "", "", "", original_prompt + + output_image = pix2pix_model(c_t, prompt, deterministic=False, r=val_r, noise_map=noise) + + logging.debug("Model inference completed.") + except RuntimeError as e: + if "CUDA out of memory" in str(e): + logging.warning("CUDA out of memory error. Falling back to CPU.") + with torch.no_grad(): + c_t = c_t.cpu() + noise = noise.cpu() + pix2pix_model_cpu = pix2pix_model.cpu() # Move the model to CPU + output_image = pix2pix_model_cpu(c_t, prompt, deterministic=False, r=val_r, noise_map=noise) + else: + raise e + + output_pil = F.to_pil_image(output_image[0].cpu() * 0.5 + 0.5) + output_pil.save(OUTPUT_PATH) + logging.debug("Output image saved.") + + input_sketch_uri = pil_image_to_data_uri(Image.fromarray(255 - np.array(image))) + output_image_uri = pil_image_to_data_uri(output_pil) + logging.debug(f"Generated output URI: {output_image_uri}") + + clear_memory() # Clear memory after running the model + + return output_image_uri, input_sketch_uri, output_image_uri, original_prompt + +def process_image_task(image, prompt, style_name, seed, val_r): + try: + global cancel_flag + cancel_flag.clear() # Clear any previous cancellation flag + + output_image_uri, _, _, _ = run(image, prompt, STYLES.get(style_name, DEFAULT_STYLE_NAME), style_name, seed, val_r) + logging.debug(f"Processed image URI: {output_image_uri}") + + return jsonify({"image": output_image_uri}) + + except Exception as e: + logging.error(f"Error processing image: {e}") + return jsonify({"error": str(e)}), 500 + +# Flask Server Setup for Preview and JSON endpoint +app = Flask(__name__) +CORS(app) # Enable CORS + +@app.route('/process-image', methods=['POST']) +def process_image(): + global current_thread, cancel_flag + + # Cancel any ongoing processing + if current_thread is not None and current_thread.is_alive(): + logging.debug("Cancelling previous processing...") + cancel_flag.set() + current_thread.join() # Wait for the thread to finish + + data = request.get_json() + + # Extract and decode the base64 image + image_data = data.get("image", "").split(",")[1] + image = Image.open(BytesIO(base64.b64decode(image_data))).convert("RGB") + + prompt = data.get("prompt", "") + style_name = data.get("style_name", DEFAULT_STYLE_NAME) + seed = int(data.get("seed", DEFAULT_SEED)) + val_r = float(data.get("val_r", VAL_R_DEFAULT)) + + # Start new processing in a separate thread + current_thread = threading.Thread(target=process_image_task, args=(image, prompt, style_name, seed, val_r)) + current_thread.start() + + return jsonify({"status": "processing_started"}) + +@app.route('/get_sketch', methods=['GET']) +def get_sketch(): + if os.path.exists(SKETCH_PATH): + return send_file(SKETCH_PATH, mimetype='image/png') + return jsonify({"status": "error", "message": "Sketch not found."}), 404 + +@app.route('/get_output', methods=['GET']) +def get_output(): + if os.path.exists(OUTPUT_PATH): + return send_file(OUTPUT_PATH, mimetype='image/png') + return jsonify({"status": "error", "message": "Output not found."}), 404 + +@app.route('/get_status', methods=['GET']) +def get_status(): + """Returns a JSON with the last image base64 encoded, its checksum, and the processing queue.""" + if os.path.exists(OUTPUT_PATH): + with open(OUTPUT_PATH, "rb") as f: + img_data = f.read() + base64_image = base64.b64encode(img_data).decode('utf-8') + checksum = hashlib.sha256(img_data).hexdigest() + else: + base64_image = "" + checksum = "" + + return jsonify({ + "image_base64": base64_image, + "checksum": checksum, + "processing_queue": processing_queue + }) + +@app.route('/') +def index(): + # HTML template for the preview page + html_template = """ + + + + + + Preview Page + + + + + + + + """ + return render_template_string(html_template) + +@app.route('/draw') +def draw_page(): + # HTML template for the drawing page at /draw + html_template = """ + + + + + + Drawing Page + + + +
+
+ + + + + + +
+
+
+ +
+ + + + """ + return render_template_string(html_template) + +@app.route('/clear_preview', methods=['POST']) +def clear_preview(): + if os.path.exists(OUTPUT_PATH): + os.remove(OUTPUT_PATH) + return jsonify({"status": "cleared"}) + +def start_flask_app(): + app.run(host=config["server"]["host"], port=config["server"]["port"], threaded=True) + +def signal_handler(sig, frame): + print("Ctrl+C pressed, shutting down.") + sys.exit(0) + +# Register the signal handler for Ctrl+C +signal.signal(signal.SIGINT, signal_handler) + +if __name__ == "__main__": + start_flask_app() diff --git a/gradio_sketch2image.py b/gradio_sketch2image.py index 601e14fbc5be76aac87e176cb54e5bf12a65809d..6a8ba9d6718a72e35cd9f9938d2c7217ac7b5e6b 100644 --- a/gradio_sketch2image.py +++ b/gradio_sketch2image.py @@ -75,11 +75,13 @@ def run(image, prompt, prompt_template, style_name, seed, val_r): image = image.convert("RGB") image_t = F.to_tensor(image) > 0.5 print(f"r_val={val_r}, seed={seed}") + with torch.no_grad(): c_t = image_t.unsqueeze(0).cuda().float() torch.manual_seed(seed) B, C, H, W = c_t.shape noise = torch.randn((1, 4, H // 8, W // 8), device=c_t.device) + print("Calling Pix2Pix model... ct: {}, prompt: {}, deterministic: False, r: {}, noise_map: {}".format(c_t.shape, prompt, val_r, noise.shape)) output_image = model(c_t, prompt, deterministic=False, r=val_r, noise_map=noise) output_pil = F.to_pil_image(output_image[0].cpu() * 0.5 + 0.5) input_sketch_uri = pil_image_to_data_uri(Image.fromarray(255 - np.array(image))) @@ -379,4 +381,4 @@ with gr.Blocks(css="style.css") as demo: image.change(run, inputs=inputs, outputs=outputs, queue=False, api_name=False) if __name__ == "__main__": - demo.queue().launch(debug=True) \ No newline at end of file + demo.queue().launch(debug=True, share=True) \ No newline at end of file diff --git a/gradio_sketch2imagehd.py b/gradio_sketch2imagehd.py new file mode 100644 index 0000000000000000000000000000000000000000..34c9115e54cbc63261d979441500669e1817d45b --- /dev/null +++ b/gradio_sketch2imagehd.py @@ -0,0 +1,178 @@ +import random +import numpy as np +from PIL import Image, ImageOps +import base64 +from io import BytesIO +import torch +import torchvision.transforms.functional as F +from transformers import BlipProcessor, BlipForConditionalGeneration +from src.pix2pix_turbo import Pix2Pix_Turbo +import nltk +from nltk import pos_tag +from nltk.tokenize import word_tokenize +import re +import os +import json +import logging +import gc +import gradio as gr +from torch.cuda.amp import autocast + +# Set environment variable for better memory management +os.environ['PYTORCH_CUDA_ALLOC_CONF'] = 'max_split_size_mb:128' + +# Function to clear CUDA cache and collect garbage +def clear_memory(): + torch.cuda.empty_cache() + gc.collect() + +# Load the configuration from config.json +with open('config.json', 'r') as config_file: + config = json.load(config_file) + +# Setup logging as per config +logging.basicConfig(level=config["logging"]["level"], format=config["logging"]["format"]) + +# Ensure NLTK resources are downloaded +nltk.download('averaged_perceptron_tagger') +nltk.download('punkt') + +# File paths for storing sketches and outputs +SKETCH_PATH = config["file_paths"]["sketch_path"] +OUTPUT_PATH = config["file_paths"]["output_path"] + +# Global Constants and Configuration +STYLE_LIST = config["style_list"] +STYLES = {style["name"]: style["prompt"] for style in STYLE_LIST} +DEFAULT_STYLE_NAME = config["default_style_name"] +RANDOM_VALUES = config["random_values"] +PIX2PIX_MODEL_NAME = config["model_params"]["pix2pix_model_name"] +DEVICE = config["model_params"]["device"] +DEFAULT_SEED = config["model_params"]["default_seed"] +VAL_R_DEFAULT = config["model_params"]["val_r_default"] +MAX_SEED = config["model_params"]["max_seed"] + +# Canvas configuration +CANVAS_WIDTH = config["canvas"]["width"] +CANVAS_HEIGHT = config["canvas"]["height"] + +# Preload Models +logging.debug("Loading BLIP and Pix2Pix models...") +processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base") +blip_model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base").to(DEVICE) +pix2pix_model = Pix2Pix_Turbo(PIX2PIX_MODEL_NAME) +logging.debug("Models loaded.") + +def pil_image_to_data_uri(img: Image, format="PNG") -> str: + """Converts a PIL image to a data URI.""" + buffered = BytesIO() + img.save(buffered, format=format) + img_str = base64.b64encode(buffered.getvalue()).decode() + return f"data:image/{format.lower()};base64,{img_str}" + +def generate_prompt_from_sketch(image: Image) -> str: + """Generates a text prompt based on a sketch using the BLIP model.""" + logging.debug("Generating prompt from sketch...") + + image = ImageOps.fit(image, (CANVAS_WIDTH, CANVAS_HEIGHT), Image.LANCZOS) + inputs = processor(image, return_tensors="pt").to(DEVICE) + + out = blip_model.generate(**inputs, max_new_tokens=50) + text_prompt = processor.decode(out[0], skip_special_tokens=True) + logging.debug(f"Generated prompt: {text_prompt}") + + recognized_items = [extract_main_words(item) for item in text_prompt.split(', ') if item.strip()] + random_prefix = random.choice(RANDOM_VALUES) + + prompt = f"a photo of a {' and '.join(recognized_items)}, {random_prefix}" + logging.debug(f"Final prompt: {prompt}") + return prompt + +def extract_main_words(item: str) -> str: + """Extracts all nouns from a given text fragment and returns them as a space-separated string.""" + words = word_tokenize(item.strip()) + tagged = pos_tag(words) + nouns = [word.capitalize() for word, tag in tagged if tag in ('NN', 'NNP', 'NNPS', 'NNS')] + return ' '.join(nouns) + +def run(image, prompt, prompt_template, style_name, seed, val_r): + """Runs the main image processing pipeline.""" + logging.debug("Running model inference...") + if image is None: + blank_image = Image.new("L", (CANVAS_WIDTH, CANVAS_HEIGHT), 255) + blank_image.save(SKETCH_PATH) # Save blank image as sketch + logging.debug("No image provided. Saving blank image.") + return "", "", "", "" + + if not prompt.strip(): + prompt = generate_prompt_from_sketch(image) + + # Save the sketch to a file + image.save(SKETCH_PATH) + + # Show the original prompt before processing + original_prompt = f"Original Prompt: {prompt}" + logging.debug(original_prompt) + + prompt = prompt_template.replace("{prompt}", prompt) + logging.debug(f"Processing with prompt: {prompt}") + image = image.convert("RGB") + image_tensor = F.to_tensor(image) * 2 - 1 # Normalize to [-1, 1] + + clear_memory() # Clear memory before running the model + + try: + with torch.no_grad(): + c_t = image_tensor.unsqueeze(0).to(DEVICE).float() + torch.manual_seed(seed) + B, C, H, W = c_t.shape + + noise = torch.randn((1, 4, H // 8, W // 8), device=c_t.device) + logging.debug("Calling Pix2Pix model...") + + # Enable mixed precision + with autocast(): + output_image = pix2pix_model(c_t, prompt, deterministic=False, r=val_r, noise_map=noise) + + logging.debug("Model inference completed.") + except RuntimeError as e: + if "CUDA out of memory" in str(e): + logging.warning("CUDA out of memory error. Falling back to CPU.") + with torch.no_grad(): + c_t = c_t.cpu() + noise = noise.cpu() + pix2pix_model_cpu = pix2pix_model.cpu() # Move the model to CPU + output_image = pix2pix_model_cpu(c_t, prompt, deterministic=False, r=val_r, noise_map=noise) + else: + raise e + + output_pil = F.to_pil_image(output_image[0].cpu() * 0.5 + 0.5) + output_pil.save(OUTPUT_PATH) + logging.debug("Output image saved.") + + return output_pil + +def gradio_interface(image, prompt, style_name, seed, val_r): + """Gradio interface function to handle inputs and generate outputs.""" + prompt_template = STYLES.get(style_name, STYLES[DEFAULT_STYLE_NAME]) + result_image = run(image, prompt, prompt_template, style_name, seed, val_r) + return result_image + +# Create the Gradio Interface +interface = gr.Interface( + fn=gradio_interface, + inputs=[ + gr.Image(source="upload", type="pil", label="Sketch Image"), + gr.Textbox(lines=2, placeholder="Enter a text prompt (optional)", label="Prompt"), + gr.Dropdown(choices=list(STYLES.keys()), value=DEFAULT_STYLE_NAME, label="Style"), + gr.Slider(minimum=0, maximum=MAX_SEED, step=1, default=DEFAULT_SEED, label="Seed"), + gr.Slider(minimum=0.0, maximum=1.0, step=0.01, default=VAL_R_DEFAULT, label="Sketch Guidance") + ], + outputs=gr.Image(label="Generated Image"), + title="Sketch to Image Generation", + description="Upload a sketch and generate an image based on a prompt and style." +) + +if __name__ == "__main__": + # Launch the Gradio interface + interface.launch(share=True) diff --git a/i2i_sk.py b/i2i_sk.py index 0398ca0aac3446e1dbdb5da397d2143f3cbb7c33..d11d61e882c79caff719c88351d2c3ad341ce9a1 100644 --- a/i2i_sk.py +++ b/i2i_sk.py @@ -52,6 +52,7 @@ def process_image(image, prompt, prompt_template, style_name, seed, val_r): torch.manual_seed(seed) B, C, H, W = c_t.shape noise = torch.randn((1, 4, H // 8, W // 8), device=device) # Ensure noise is on the same device + logging.debug("Calling Pix2Pix model... ct: {}, prompt: {}, deterministic: False, r: {}, noise_map: {}".format(c_t.shape, prompt, val_r, noise.shape)) # Pass through the model output_image = model(c_t, prompt, deterministic=False, r=val_r, noise_map=noise) diff --git a/img2img-turbo b/img2img-turbo new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/o.png b/o.png new file mode 100644 index 0000000000000000000000000000000000000000..adc9997e72342c3f6d98205cf78e0cbb57e57bf2 Binary files /dev/null and b/o.png differ diff --git a/output.png b/output.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2056ddc95b1ce3c875e42b322b2e628e79fe48 Binary files /dev/null and b/output.png differ diff --git a/ovino_img2img.py b/ovino_img2img.py new file mode 100644 index 0000000000000000000000000000000000000000..29a291125eb942df667ae63e3b2c246bb0ad14e9 --- /dev/null +++ b/ovino_img2img.py @@ -0,0 +1,336 @@ +import random +import base64 +from io import BytesIO +import gradio as gr +import numpy as np +import torch +import torchvision.transforms.functional as F +from transformers import AutoTokenizer, CLIPTextModel + + +tokenizer = AutoTokenizer.from_pretrained("stabilityai/sd-turbo", subfolder="tokenizer") + + + +style_list = [ + { + "name": "Cinematic", + "prompt": "cinematic still {prompt} . emotional, harmonious, vignette, highly detailed, high budget, bokeh, cinemascope, moody, epic, gorgeous, film grain, grainy", + }, + { + "name": "3D Model", + "prompt": "professional 3d model {prompt} . octane render, highly detailed, volumetric, dramatic lighting", + }, + { + "name": "Anime", + "prompt": "anime artwork {prompt} . anime style, key visual, vibrant, studio anime, highly detailed", + }, + { + "name": "Digital Art", + "prompt": "concept art {prompt} . digital artwork, illustrative, painterly, matte painting, highly detailed", + }, + { + "name": "Photographic", + "prompt": "cinematic photo {prompt} . 35mm photograph, film, bokeh, professional, 4k, highly detailed", + }, + { + "name": "Pixel art", + "prompt": "pixel-art {prompt} . low-res, blocky, pixel art style, 8-bit graphics", + }, + { + "name": "Fantasy art", + "prompt": "ethereal fantasy concept art of {prompt} . magnificent, celestial, ethereal, painterly, epic, majestic, magical, fantasy art, cover art, dreamy", + }, + { + "name": "Neonpunk", + "prompt": "neonpunk style {prompt} . cyberpunk, vaporwave, neon, vibes, vibrant, stunningly beautiful, crisp, detailed, sleek, ultramodern, magenta highlights, dark purple shadows, high contrast, cinematic, ultra detailed, intricate, professional", + }, + { + "name": "Manga", + "prompt": "manga style {prompt} . vibrant, high-energy, detailed, iconic, Japanese comic style", + }, +] + +styles = {k["name"]: k["prompt"] for k in style_list} +STYLE_NAMES = list(styles.keys()) +DEFAULT_STYLE_NAME = "Fantasy art" +MAX_SEED = np.iinfo(np.int32).max + + +def pil_image_to_data_uri(img, format="PNG"): + buffered = BytesIO() + img.save(buffered, format=format) + img_str = base64.b64encode(buffered.getvalue()).decode() + return f"data:image/{format.lower()};base64,{img_str}" + + +def run(image, prompt, prompt_template, style_name, seed): + print(f"prompt: {prompt}") + print("sketch updated") + if image is None: + ones = Image.new("L", (512, 512), 255) + temp_uri = pil_image_to_data_uri(ones) + return ones, gr.update(link=temp_uri), gr.update(link=temp_uri) + prompt = prompt_template.replace("{prompt}", prompt) + image = image.convert("RGB") + image_t = F.to_tensor(image) > 0.5 + print(f"seed={seed}") + caption_tokens = tokenizer(prompt, max_length=tokenizer.model_max_length, padding="max_length", truncation=True, return_tensors="pt").input_ids.cpu() + with torch.no_grad(): + c_t = image_t.unsqueeze(0) + torch.manual_seed(seed) + B, C, H, W = c_t.shape + noise = torch.randn((1, 4, H // 8, W // 8)) + output_image = torch.from_numpy(tokenizer.compiled_model([c_t.to(torch.float32), caption_tokens, noise])[0]) + output_pil = F.to_pil_image(output_image[0].cpu() * 0.5 + 0.5) + input_sketch_uri = pil_image_to_data_uri(Image.fromarray(255 - np.array(image))) + output_image_uri = pil_image_to_data_uri(output_pil) + return ( + output_pil, + gr.update(link=input_sketch_uri), + gr.update(link=output_image_uri), + ) + + +def update_canvas(use_line, use_eraser): + if use_eraser: + _color = "#ffffff" + brush_size = 20 + if use_line: + _color = "#000000" + brush_size = 4 + return gr.update(brush_radius=brush_size, brush_color=_color, interactive=True) + + +def upload_sketch(file): + _img = Image.open(file.name) + _img = _img.convert("L") + return gr.update(value=_img, source="upload", interactive=True) + + +scripts = """ +async () => { + globalThis.theSketchDownloadFunction = () => { + console.log("test") + var link = document.createElement("a"); + dataUri = document.getElementById('download_sketch').href + link.setAttribute("href", dataUri) + link.setAttribute("download", "sketch.png") + document.body.appendChild(link); // Required for Firefox + link.click(); + document.body.removeChild(link); // Clean up + + // also call the output download function + theOutputDownloadFunction(); + return false + } + + globalThis.theOutputDownloadFunction = () => { + console.log("test output download function") + var link = document.createElement("a"); + dataUri = document.getElementById('download_output').href + link.setAttribute("href", dataUri); + link.setAttribute("download", "output.png"); + document.body.appendChild(link); // Required for Firefox + link.click(); + document.body.removeChild(link); // Clean up + return false + } + + globalThis.UNDO_SKETCH_FUNCTION = () => { + console.log("undo sketch function") + var button_undo = document.querySelector('#input_image > div.image-container.svelte-p3y7hu > div.svelte-s6ybro > button:nth-child(1)'); + // Create a new 'click' event + var event = new MouseEvent('click', { + 'view': window, + 'bubbles': true, + 'cancelable': true + }); + button_undo.dispatchEvent(event); + } + + globalThis.DELETE_SKETCH_FUNCTION = () => { + console.log("delete sketch function") + var button_del = document.querySelector('#input_image > div.image-container.svelte-p3y7hu > div.svelte-s6ybro > button:nth-child(2)'); + // Create a new 'click' event + var event = new MouseEvent('click', { + 'view': window, + 'bubbles': true, + 'cancelable': true + }); + button_del.dispatchEvent(event); + } + + globalThis.togglePencil = () => { + el_pencil = document.getElementById('my-toggle-pencil'); + el_pencil.classList.toggle('clicked'); + // simulate a click on the gradio button + btn_gradio = document.querySelector("#cb-line > label > input"); + var event = new MouseEvent('click', { + 'view': window, + 'bubbles': true, + 'cancelable': true + }); + btn_gradio.dispatchEvent(event); + if (el_pencil.classList.contains('clicked')) { + document.getElementById('my-toggle-eraser').classList.remove('clicked'); + document.getElementById('my-div-pencil').style.backgroundColor = "gray"; + document.getElementById('my-div-eraser').style.backgroundColor = "white"; + } + else { + document.getElementById('my-toggle-eraser').classList.add('clicked'); + document.getElementById('my-div-pencil').style.backgroundColor = "white"; + document.getElementById('my-div-eraser').style.backgroundColor = "gray"; + } + } + + globalThis.toggleEraser = () => { + element = document.getElementById('my-toggle-eraser'); + element.classList.toggle('clicked'); + // simulate a click on the gradio button + btn_gradio = document.querySelector("#cb-eraser > label > input"); + var event = new MouseEvent('click', { + 'view': window, + 'bubbles': true, + 'cancelable': true + }); + btn_gradio.dispatchEvent(event); + if (element.classList.contains('clicked')) { + document.getElementById('my-toggle-pencil').classList.remove('clicked'); + document.getElementById('my-div-pencil').style.backgroundColor = "white"; + document.getElementById('my-div-eraser').style.backgroundColor = "gray"; + } + else { + document.getElementById('my-toggle-pencil').classList.add('clicked'); + document.getElementById('my-div-pencil').style.backgroundColor = "gray"; + document.getElementById('my-div-eraser').style.backgroundColor = "white"; + } + } +} +""" + +with gr.Blocks(css="style.css") as demo: + # these are hidden buttons that are used to trigger the canvas changes + line = gr.Checkbox(label="line", value=False, elem_id="cb-line") + eraser = gr.Checkbox(label="eraser", value=False, elem_id="cb-eraser") + with gr.Row(elem_id="main_row"): + with gr.Column(elem_id="column_input"): + gr.Markdown("## INPUT", elem_id="input_header") + image = gr.Image( + source="canvas", + tool="color-sketch", + type="pil", + image_mode="L", + invert_colors=True, + shape=(512, 512), + brush_radius=4, + height=440, + width=440, + brush_color="#000000", + interactive=True, + show_download_button=True, + elem_id="input_image", + show_label=False, + ) + download_sketch = gr.Button("Download sketch", scale=1, elem_id="download_sketch") + + gr.HTML( + """ +
+
+
+
+
+
+
+ """ + ) + # gr.Markdown("## Prompt", elem_id="tools_header") + prompt = gr.Textbox(label="Prompt", value="", show_label=True) + with gr.Row(): + style = gr.Dropdown( + label="Style", + choices=STYLE_NAMES, + value=DEFAULT_STYLE_NAME, + scale=1, + ) + prompt_temp = gr.Textbox( + label="Prompt Style Template", + value=styles[DEFAULT_STYLE_NAME], + scale=2, + max_lines=1, + ) + + with gr.Row(): + seed = gr.Textbox(label="Seed", value=42, scale=1, min_width=50) + randomize_seed = gr.Button("Random", scale=1, min_width=50) + + with gr.Column(elem_id="column_process", min_width=50, scale=0.4): + gr.Markdown("## pix2pix-turbo", elem_id="description") + run_button = gr.Button("Run", min_width=50) + + with gr.Column(elem_id="column_output"): + gr.Markdown("## OUTPUT", elem_id="output_header") + result = gr.Image( + label="Result", + height=440, + width=440, + elem_id="output_image", + show_label=False, + show_download_button=True, + ) + download_output = gr.Button("Download output", elem_id="download_output") + gr.Markdown("### Instructions") + gr.Markdown("**1**. Enter a text prompt (e.g. cat)") + gr.Markdown("**2**. Start sketching") + gr.Markdown("**3**. Change the image style using a style template") + gr.Markdown("**4**. Try different seeds to generate different results") + + eraser.change( + fn=lambda x: gr.update(value=not x), + inputs=[eraser], + outputs=[line], + queue=False, + api_name=False, + ).then(update_canvas, [line, eraser], [image]) + line.change( + fn=lambda x: gr.update(value=not x), + inputs=[line], + outputs=[eraser], + queue=False, + api_name=False, + ).then(update_canvas, [line, eraser], [image]) + + demo.load(None, None, None, _js=scripts) + randomize_seed.click( + lambda x: random.randint(0, MAX_SEED), + inputs=[], + outputs=seed, + queue=False, + api_name=False, + ) + inputs = [image, prompt, prompt_temp, style, seed] + outputs = [result, download_sketch, download_output] + prompt.submit(fn=run, inputs=inputs, outputs=outputs, api_name=False) + style.change( + lambda x: styles[x], + inputs=[style], + outputs=[prompt_temp], + queue=False, + api_name=False, + ).then( + fn=run, + inputs=inputs, + outputs=outputs, + api_name=False, + ) + run_button.click(fn=run, inputs=inputs, outputs=outputs, api_name=False) + image.change(run, inputs=inputs, outputs=outputs, queue=False, api_name=False) + +try: + demo.queue().launch(debug=False) +except Exception: + demo.queue().launch(debug=False, share=True) +# if you are launching remotely, specify server_name and server_port +# demo.launch(server_name='your server name', server_port='server port in int') +# Read more in the docs: https://gradio.app/docs/ \ No newline at end of file diff --git a/run - Copy.cmd b/run - Copy.cmd new file mode 100644 index 0000000000000000000000000000000000000000..300ccd0ee16e37765ad936d5447512a5bf22e661 --- /dev/null +++ b/run - Copy.cmd @@ -0,0 +1,12 @@ +@echo off +REM Activate the Conda environment +call conda activate img2img-turbo + +REM Navigate to the project directory +cd /d D:\I+D\ia\img2img\img2img-turbo + +REM Run the Python script +python flask_sketch2imagehd.py + +REM Pause the script to keep the command prompt open in case of errors +pause \ No newline at end of file diff --git a/run.cmd b/run.cmd new file mode 100644 index 0000000000000000000000000000000000000000..7ff49a33f9a2b6f8d4e3b432274f587d1d1185d9 --- /dev/null +++ b/run.cmd @@ -0,0 +1,12 @@ +@echo off +REM Activate the Conda environment +call conda activate img2img-turbo + +REM Navigate to the project directory +cd /d D:\I+D\ia\img2img\img2img-turbo + +REM Run the Python script +python gradio_sketch2imagehd.py + +REM Pause the script to keep the command prompt open in case of errors +pause \ No newline at end of file diff --git a/sketch.png b/sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..b22afb284a7fb7593a6aa1a50060bf669036bf24 Binary files /dev/null and b/sketch.png differ diff --git a/test_proc.py b/test_proc.py new file mode 100644 index 0000000000000000000000000000000000000000..83f5abacb775ff812b1ec9d8d013626735fb19a1 --- /dev/null +++ b/test_proc.py @@ -0,0 +1,39 @@ +import torch +import torchvision.transforms.functional as F +from PIL import Image +from src.pix2pix_turbo import Pix2Pix_Turbo + +# Initialize the model +model = Pix2Pix_Turbo("sketch_to_image_stochastic") + +# Load the sketch image +sketch_path = "sketch.png" +image = Image.open(sketch_path).convert("RGB") + +# Define the prompt +prompt = "ethereal fantasy concept art of . magnificent, celestial, ethereal, painterly, epic, majestic, magical, fantasy art, cover art, dreamy," + +# Convert the image to a tensor +#image_tensor = F.to_tensor(image) > 0.5 +image = image.convert("RGB") +image_t = F.to_tensor(image) > 0.5 +# Processing parameters +seed = 42 +val_r = 0.4 + +# Run the model inference +with torch.no_grad(): + c_t = image_t.unsqueeze(0).cuda().float() + torch.manual_seed(seed) + B, C, H, W = c_t.shape + noise = torch.randn((1, 4, H // 8, W // 8), device=c_t.device) + output_image = model(c_t, prompt, deterministic=False, r=val_r, noise_map=noise) + +# Convert the output tensor to an image +output_pil = F.to_pil_image(output_image[0].cpu() * 0.5 + 0.5) + +# Save the output image +output_path = "output.png" +output_pil.save(output_path) + +print(f"Processing complete. The output image is saved as {output_path}.") diff --git a/test_proc_o.py b/test_proc_o.py new file mode 100644 index 0000000000000000000000000000000000000000..a4a73ef136ccd6f37ca4600263d5ca145ed6c6be --- /dev/null +++ b/test_proc_o.py @@ -0,0 +1,43 @@ +import torch +from PIL import Image +import torchvision.transforms.functional as F +from src.pix2pix_turbo import Pix2Pix_Turbo +import numpy as np + +def process_sketch(sketch_path, output_path, prompt, val_r=0.4, seed=42): + # Load the model + model = Pix2Pix_Turbo("sketch_to_image_stochastic") + + # Set the seed for reproducibility + torch.manual_seed(seed) + + # Load the sketch image + image = Image.open(sketch_path).convert("RGB") + + # Convert the image to tensor and threshold it + image_t = F.to_tensor(image) > 0.5 + + # Prepare the input tensor + with torch.no_grad(): + c_t = image_t.unsqueeze(0).cuda().float() + B, C, H, W = c_t.shape + + # Create a random noise map + noise = torch.randn((1, 4, H // 8, W // 8), device=c_t.device) + + # Call the Pix2Pix model + output_image = model(c_t, prompt, deterministic=False, r=val_r, noise_map=noise) + + # Convert the output tensor to PIL image + output_pil = F.to_pil_image(output_image[0].cpu() * 0.5 + 0.5) + + # Save the output image + output_pil.save(output_path) + print(f"Output image saved to {output_path}") + +if __name__ == "__main__": + sketch_path = "sketch.png" + output_path = "output.png" + prompt = ("a fantasy concept art of a magical castle in the sky, ") + + process_sketch(sketch_path, output_path, prompt) diff --git a/testapp/brush-icon-variant.svg b/testapp/brush-icon-variant.svg new file mode 100644 index 0000000000000000000000000000000000000000..767380eb99a241e1d2e6fb6863e0133bde4a2d55 --- /dev/null +++ b/testapp/brush-icon-variant.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/testapp/brush-icon.svg b/testapp/brush-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..28c938bc0737c5eeb84ee16cb3fcdcc967dad59f --- /dev/null +++ b/testapp/brush-icon.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/testapp/clear-icon.svg b/testapp/clear-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..25bf17ed8ab5cfd6296c9d6de5708f58f8198230 --- /dev/null +++ b/testapp/clear-icon.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/testapp/eraser-icon-variant.svg b/testapp/eraser-icon-variant.svg new file mode 100644 index 0000000000000000000000000000000000000000..101cbaa4b1dc1f1ea3aede6a4d89a437c1f0c6d7 --- /dev/null +++ b/testapp/eraser-icon-variant.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/testapp/eraser-icon.svg b/testapp/eraser-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..980f89209a4d55922f127ec45ea1a61a6448a6a5 --- /dev/null +++ b/testapp/eraser-icon.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/testapp/index.html b/testapp/index.html new file mode 100644 index 0000000000000000000000000000000000000000..2ff5f60fdbabcf838b51e23e06932a399368e8ae --- /dev/null +++ b/testapp/index.html @@ -0,0 +1,26 @@ + + + + + + Sketch App Tools Menu + + + +
+ + + + + +
+ + diff --git a/testapp/line-icon-variant.svg b/testapp/line-icon-variant.svg new file mode 100644 index 0000000000000000000000000000000000000000..90107de63efbbdbd6883b6e2cca231f2c4498bbd --- /dev/null +++ b/testapp/line-icon-variant.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/testapp/line-icon.svg b/testapp/line-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..9e65dcd0e6f947d80eee4053a753ecd3bacb5860 --- /dev/null +++ b/testapp/line-icon.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/testapp/styles.css b/testapp/styles.css new file mode 100644 index 0000000000000000000000000000000000000000..10dabd06e8a38814c9efc23ff53e0aace4c81c4f --- /dev/null +++ b/testapp/styles.css @@ -0,0 +1,55 @@ +body { + font-family: 'Roboto', sans-serif; + background-color: #f5f5f5; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; +} + +.tools-menu { + display: flex; + align-items: center; + background-color: #ffffff; + padding: 10px; + border-radius: 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); +} + +.tool-button { + background-color: #f0f0f0; + border: none; + padding: 10px; + margin: 0 5px; + border-radius: 50%; + cursor: pointer; + transition: background-color 0.2s ease; +} + +.tool-button img { + width: 24px; + height: 24px; +} + +.tool-button:hover { + background-color: #e0e0e0; +} + +.brush-size-slider { + margin: 0 10px; + width: 100px; +} + +.brush-size-slider::-webkit-slider-thumb { + background-color: #00aaff; + border-radius: 50%; + width: 16px; + height: 16px; +} + +.brush-size-slider::-webkit-slider-runnable-track { + background-color: #cccccc; + height: 4px; + border-radius: 2px; +} diff --git a/train-cyclegan.py b/train-cyclegan.py new file mode 100644 index 0000000000000000000000000000000000000000..92d2b453ce61a383c9dd8121e49f5235dfcd76df --- /dev/null +++ b/train-cyclegan.py @@ -0,0 +1,11 @@ +export NCCL_P2P_DISABLE=1 +accelerate launch --main_process_port 29501 src/train_cyclegan_turbo.py \ + --pretrained_model_name_or_path="stabilityai/sd-turbo" \ + --output_dir="output/cyclegan_turbo/my_horse2zebra" \ + --dataset_folder "data/my_horse2zebra" \ + --train_img_prep "resize_286_randomcrop_256x256_hflip" --val_img_prep "no_resize" \ + --learning_rate="1e-5" --max_train_steps=25000 \ + --train_batch_size=1 --gradient_accumulation_steps=1 \ + --report_to "wandb" --tracker_project_name "gparmar_unpaired_h2z_cycle_debug_v2" \ + --enable_xformers_memory_efficient_attention --validation_steps 250 \ + --lambda_gan 0.5 --lambda_idt 1 --lambda_cycle 1 \ No newline at end of file diff --git a/train-pix2pix.py b/train-pix2pix.py new file mode 100644 index 0000000000000000000000000000000000000000..419e7f2e2eaaceaed163527d11051643e70c021f --- /dev/null +++ b/train-pix2pix.py @@ -0,0 +1,9 @@ +accelerate launch src/train_pix2pix_turbo.py \ + --pretrained_model_name_or_path="stabilityai/sd-turbo" \ + --output_dir="output/pix2pix_turbo/fill50k" \ + --dataset_folder="data/my_fill50k" \ + --resolution=512 \ + --train_batch_size=2 \ + --enable_xformers_memory_efficient_attention --viz_freq 25 \ + --track_val_fid \ + --report_to "wandb" --tracker_project_name "pix2pix_turbo_fill50k" \ No newline at end of file diff --git a/training/my_horse2zebra/fixed_prompt_a.txt b/training/my_horse2zebra/fixed_prompt_a.txt new file mode 100644 index 0000000000000000000000000000000000000000..7d8736c8cebb6feb7885146cf45fac211efdeac0 --- /dev/null +++ b/training/my_horse2zebra/fixed_prompt_a.txt @@ -0,0 +1 @@ +picture of a horse \ No newline at end of file diff --git a/training/my_horse2zebra/fixed_prompt_b.txt b/training/my_horse2zebra/fixed_prompt_b.txt new file mode 100644 index 0000000000000000000000000000000000000000..c681c9cfc74ad11dbfc4f656f6534789c726a05c --- /dev/null +++ b/training/my_horse2zebra/fixed_prompt_b.txt @@ -0,0 +1 @@ +picture of a zebra \ No newline at end of file diff --git a/training/my_horse2zebra/test_A/n02381460_1000.jpg b/training/my_horse2zebra/test_A/n02381460_1000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87246b387003322aef6a4e65dec8d3187e2475be Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1000.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1010.jpg b/training/my_horse2zebra/test_A/n02381460_1010.jpg new file mode 100644 index 0000000000000000000000000000000000000000..246d056ea56238aadea23186b8c50d8326dc7e18 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1010.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1030.jpg b/training/my_horse2zebra/test_A/n02381460_1030.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7751f545b47c0037fc35bd267277c8d185c5bfa Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1030.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1090.jpg b/training/my_horse2zebra/test_A/n02381460_1090.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93cf96b4ac48581e10e391f7dddb31f1fbcd65d1 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1090.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1100.jpg b/training/my_horse2zebra/test_A/n02381460_1100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b5c0749374d0a4716eea99e52fad138b1040c80 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1100.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1110.jpg b/training/my_horse2zebra/test_A/n02381460_1110.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a6d39dfd2ecda5bd8529ef5530fd714f15bad87 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1110.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1120.jpg b/training/my_horse2zebra/test_A/n02381460_1120.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2182a053b3ce2504650abba44757b4871d96eb1c Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1120.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1160.jpg b/training/my_horse2zebra/test_A/n02381460_1160.jpg new file mode 100644 index 0000000000000000000000000000000000000000..085400c8df6f090e32b989310b0c93251760698c Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1160.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_120.jpg b/training/my_horse2zebra/test_A/n02381460_120.jpg new file mode 100644 index 0000000000000000000000000000000000000000..380c4cb0d5ba6b63ebe7374f125105f57b59d545 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_120.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1210.jpg b/training/my_horse2zebra/test_A/n02381460_1210.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63e4f587761740800fcc78966890a89fea99de38 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1210.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1260.jpg b/training/my_horse2zebra/test_A/n02381460_1260.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9dc064d7d0f0e3cd58b75d5f9e0af6515c016f7b Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1260.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1300.jpg b/training/my_horse2zebra/test_A/n02381460_1300.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f8d8db17842cc1dc398aea56b43257a65909969 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1300.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1350.jpg b/training/my_horse2zebra/test_A/n02381460_1350.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d56c6c7d3eecba07d2bf99404abed5321b4f9fe9 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1350.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1360.jpg b/training/my_horse2zebra/test_A/n02381460_1360.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8bc4d5cac6f1df5ffe92f5244d9542ab97f0d4ef Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1360.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_140.jpg b/training/my_horse2zebra/test_A/n02381460_140.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae7afea259ba3b64db92e99971703353d06151bb Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_140.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1420.jpg b/training/my_horse2zebra/test_A/n02381460_1420.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0262971dd7ad5713a85f3b6cf39fcb429752548a Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1420.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1540.jpg b/training/my_horse2zebra/test_A/n02381460_1540.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ea3a928df34f30037f58e4cfe7681e7d4928b01 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1540.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1620.jpg b/training/my_horse2zebra/test_A/n02381460_1620.jpg new file mode 100644 index 0000000000000000000000000000000000000000..357bca93a5d101206ec52aba3d8399f41085572c Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1620.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1630.jpg b/training/my_horse2zebra/test_A/n02381460_1630.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34a685aefb58a4c4665d92f9c1eb66e2a596b475 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1630.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1660.jpg b/training/my_horse2zebra/test_A/n02381460_1660.jpg new file mode 100644 index 0000000000000000000000000000000000000000..363ef0bd3d4f815d01c16c3ffa76c62a4f40248f Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1660.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1690.jpg b/training/my_horse2zebra/test_A/n02381460_1690.jpg new file mode 100644 index 0000000000000000000000000000000000000000..745f3db7bfa468cb6642063b76dbadee7151a576 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1690.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1740.jpg b/training/my_horse2zebra/test_A/n02381460_1740.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9046c300b87061f1ad3aaa57c7d85c0d223c3b3 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1740.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1750.jpg b/training/my_horse2zebra/test_A/n02381460_1750.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e489295ed098c8a1e66f2a889d468d3772981229 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1750.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_180.jpg b/training/my_horse2zebra/test_A/n02381460_180.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80525f8fff68e8ed5926d6a0d67c08f6a9ac411b Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_180.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1820.jpg b/training/my_horse2zebra/test_A/n02381460_1820.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7dac8f9ed6e0ca5548c338cdb76f1d1927ab7e4c Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1820.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1830.jpg b/training/my_horse2zebra/test_A/n02381460_1830.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8cd7edf6ae7034b8b4f39e0b96acd38926ef8d0 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1830.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1870.jpg b/training/my_horse2zebra/test_A/n02381460_1870.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c988ebff23b830441a5b04b0d2d891c66984a9c Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1870.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_1920.jpg b/training/my_horse2zebra/test_A/n02381460_1920.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c8c9e6db20fb33bfaa5c920e86de126ab0a6bbe Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_1920.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_20.jpg b/training/my_horse2zebra/test_A/n02381460_20.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89c8a06f4ce142c5ad5d4d7b41924fd49ec563c8 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_20.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_200.jpg b/training/my_horse2zebra/test_A/n02381460_200.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25a35b18ffcef792426028464df5e7ae9dcf3684 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_200.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2050.jpg b/training/my_horse2zebra/test_A/n02381460_2050.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b64ddccb0c2286ed6f561972b2f7d885853c7ee Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2050.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2100.jpg b/training/my_horse2zebra/test_A/n02381460_2100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ce9064b70ea1b2e268f4305ecafd10191cf531f Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2100.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2120.jpg b/training/my_horse2zebra/test_A/n02381460_2120.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b2ad77a998238750dafefdf7db5a04984a72f21a Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2120.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2150.jpg b/training/my_horse2zebra/test_A/n02381460_2150.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78ec861a73d8f13c951b7e66da1abd74ffda99b2 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2150.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2280.jpg b/training/my_horse2zebra/test_A/n02381460_2280.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96a270225164180854eae935ac3a747bac3adb09 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2280.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2460.jpg b/training/my_horse2zebra/test_A/n02381460_2460.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3021df6482a32f898f33bc162857b1b2b8779fe Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2460.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2540.jpg b/training/my_horse2zebra/test_A/n02381460_2540.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af46e4deebd16f08762c84c14c606b012e09cebf Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2540.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2580.jpg b/training/my_horse2zebra/test_A/n02381460_2580.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f29e354051669a54ba2efb838832ae0c6d2528f Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2580.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2650.jpg b/training/my_horse2zebra/test_A/n02381460_2650.jpg new file mode 100644 index 0000000000000000000000000000000000000000..867e61624f954777b14f2750d944328584d2d924 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2650.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2710.jpg b/training/my_horse2zebra/test_A/n02381460_2710.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e81cb5b143de42cac86d976e2fab655e72e9624 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2710.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2870.jpg b/training/my_horse2zebra/test_A/n02381460_2870.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4e9b49676ac328cd361cb881c44ede70f2e23bf Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2870.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2890.jpg b/training/my_horse2zebra/test_A/n02381460_2890.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f579dd9745754c5ab2db1d8119a9c8c9b42ab83e Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2890.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2940.jpg b/training/my_horse2zebra/test_A/n02381460_2940.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d96e8c1275483e3151c653afb7e380694de4c39 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2940.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_2950.jpg b/training/my_horse2zebra/test_A/n02381460_2950.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03f961f25d673790c9a83a4a748fbf25817f6316 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_2950.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_3010.jpg b/training/my_horse2zebra/test_A/n02381460_3010.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9c45e6337c97d6023cc09e8fdaa72656525b4d9 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_3010.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_3040.jpg b/training/my_horse2zebra/test_A/n02381460_3040.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d214d1a34b71986939ceb6378253c2fe228c20aa Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_3040.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_3110.jpg b/training/my_horse2zebra/test_A/n02381460_3110.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c41857e1a5a75017326c3ba442ff530ed5966675 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_3110.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_3120.jpg b/training/my_horse2zebra/test_A/n02381460_3120.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6130c3fc149ca14dbc39681cdb940e2261862858 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_3120.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_3240.jpg b/training/my_horse2zebra/test_A/n02381460_3240.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fda9efc934f4e887e51e6bd33ef4a3c03cd7e9f6 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_3240.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_3330.jpg b/training/my_horse2zebra/test_A/n02381460_3330.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4214b884e36fb56206ce412d397ca40302cab90 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_3330.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_360.jpg b/training/my_horse2zebra/test_A/n02381460_360.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1a4ba27f9695a94248b550ceb20d181571d3ad9 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_360.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_3660.jpg b/training/my_horse2zebra/test_A/n02381460_3660.jpg new file mode 100644 index 0000000000000000000000000000000000000000..073668830f9de026fd1f5b3c9c9e5bdc06547a08 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_3660.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_3910.jpg b/training/my_horse2zebra/test_A/n02381460_3910.jpg new file mode 100644 index 0000000000000000000000000000000000000000..004c6ce5b859c7815a7aaab80ebf4029b5919545 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_3910.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_40.jpg b/training/my_horse2zebra/test_A/n02381460_40.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc2f26f9f3e90427bc1252fd4cdf35183bcdb2cf Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_40.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4010.jpg b/training/my_horse2zebra/test_A/n02381460_4010.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d36e6708eedef89c5b04df1217d6ce997115bfdb Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4010.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4110.jpg b/training/my_horse2zebra/test_A/n02381460_4110.jpg new file mode 100644 index 0000000000000000000000000000000000000000..112795c98dc587651ac27bd37cf59f8f01500199 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4110.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4120.jpg b/training/my_horse2zebra/test_A/n02381460_4120.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1221f1567d12a60a4f6c9c3eb9ecb0d0b9eb8c40 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4120.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4160.jpg b/training/my_horse2zebra/test_A/n02381460_4160.jpg new file mode 100644 index 0000000000000000000000000000000000000000..683fba7ab5b03cdb5138f74257836ae1aada6fa5 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4160.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4240.jpg b/training/my_horse2zebra/test_A/n02381460_4240.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2db2f9e653b7fe2ca228584f3030c6986d0ab375 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4240.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4260.jpg b/training/my_horse2zebra/test_A/n02381460_4260.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee2b52cd989d93fa4528a94b523dac69de23c8df Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4260.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4310.jpg b/training/my_horse2zebra/test_A/n02381460_4310.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7754a7fb41c8ce0d3f8958fb0c69cc8babd38736 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4310.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4370.jpg b/training/my_horse2zebra/test_A/n02381460_4370.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d51c867cd04ac867fa69bdc249f6e71fde845c3 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4370.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_440.jpg b/training/my_horse2zebra/test_A/n02381460_440.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0faff7979480c4982198581e986a3934e5d38952 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_440.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4410.jpg b/training/my_horse2zebra/test_A/n02381460_4410.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b5c1c57db897e3c953297ff581b7f33f7bbc8c0 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4410.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4420.jpg b/training/my_horse2zebra/test_A/n02381460_4420.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0aa830f4bd2f931b60aaf3e59bdebf2ab5fa305b Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4420.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4430.jpg b/training/my_horse2zebra/test_A/n02381460_4430.jpg new file mode 100644 index 0000000000000000000000000000000000000000..354e45544eae2cb884d268ab14b43812346c2afa Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4430.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4450.jpg b/training/my_horse2zebra/test_A/n02381460_4450.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1948271136172ac144c84cb077e9fa1b34039b6a Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4450.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4470.jpg b/training/my_horse2zebra/test_A/n02381460_4470.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b50528c20eb640588ef8b0bcaab7be3d7d089dde Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4470.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4530.jpg b/training/my_horse2zebra/test_A/n02381460_4530.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8aceddd9bd99830f1f81c0de7ba4043c8cd3d24 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4530.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4550.jpg b/training/my_horse2zebra/test_A/n02381460_4550.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03eac9942feb19796f074fb1262cb82a9794b3a5 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4550.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4630.jpg b/training/my_horse2zebra/test_A/n02381460_4630.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb32d7cc5cbf54ba8dcaf868f3af72c7f4574a12 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4630.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4640.jpg b/training/my_horse2zebra/test_A/n02381460_4640.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38424ddb41d4ed777fc84517e47bcd3e026a9a28 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4640.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4650.jpg b/training/my_horse2zebra/test_A/n02381460_4650.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e38bbb69cf7d145fa4aae4a5212bfd19def3391 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4650.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4660.jpg b/training/my_horse2zebra/test_A/n02381460_4660.jpg new file mode 100644 index 0000000000000000000000000000000000000000..388c08dd0c954c88fb54c522c7850f7902fe67ce Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4660.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_470.jpg b/training/my_horse2zebra/test_A/n02381460_470.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d648bb07609a9ec6a15ec39a70edb6818963c3f8 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_470.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4740.jpg b/training/my_horse2zebra/test_A/n02381460_4740.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab43678fcdbbab08710f3be629f39af3dda81094 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4740.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4790.jpg b/training/my_horse2zebra/test_A/n02381460_4790.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34d06165dfd97d42b3814c3becf2ba67ae1b9b31 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4790.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_4800.jpg b/training/my_horse2zebra/test_A/n02381460_4800.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3c3d6d99812fb5a8e38318eabbfce0cd2ece408 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_4800.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_490.jpg b/training/my_horse2zebra/test_A/n02381460_490.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a992faf868a6e20f50ddf67711992a2d5555e37e Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_490.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_50.jpg b/training/my_horse2zebra/test_A/n02381460_50.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d53350042ac22d0c7421b44f4887dea2b268a08 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_50.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_500.jpg b/training/my_horse2zebra/test_A/n02381460_500.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9f06acbc539e566742debda30cc718adf20bf81 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_500.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_5090.jpg b/training/my_horse2zebra/test_A/n02381460_5090.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b5a49c881d010e9e8f2df20ad69b46e3f0c46c3 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_5090.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_510.jpg b/training/my_horse2zebra/test_A/n02381460_510.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b9efcc004db4eed0839ecc0ab49e777ad67c960 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_510.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_530.jpg b/training/my_horse2zebra/test_A/n02381460_530.jpg new file mode 100644 index 0000000000000000000000000000000000000000..287541433f8721fb4b292bc190148f8017886285 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_530.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_5500.jpg b/training/my_horse2zebra/test_A/n02381460_5500.jpg new file mode 100644 index 0000000000000000000000000000000000000000..060b80392c150f94e0a19e94db2a8644727c204f Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_5500.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_5670.jpg b/training/my_horse2zebra/test_A/n02381460_5670.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6d173dc772cbe91a1cbd31e42fc9c6687eb2090 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_5670.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_5940.jpg b/training/my_horse2zebra/test_A/n02381460_5940.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4af59eac877ed32b15462b4abc6521b06e19f7f4 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_5940.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_600.jpg b/training/my_horse2zebra/test_A/n02381460_600.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f122eee55635ef2607d20ffd260f694de32c06d6 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_600.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_6290.jpg b/training/my_horse2zebra/test_A/n02381460_6290.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c74891bed9740b30e8b718b599f6245c07dbf5b5 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_6290.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_6300.jpg b/training/my_horse2zebra/test_A/n02381460_6300.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a6448789aab77478fe06510ec644c17e44b1715 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_6300.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_640.jpg b/training/my_horse2zebra/test_A/n02381460_640.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad7c026de4fb43d6878a27b290ea0eec1553e832 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_640.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_6640.jpg b/training/my_horse2zebra/test_A/n02381460_6640.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46869d0c60c421c11f9f28033da7d9d6ee510e8c Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_6640.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_6690.jpg b/training/my_horse2zebra/test_A/n02381460_6690.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9558d8937b1eb672e8c586b83cb331f2c6eda49 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_6690.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_670.jpg b/training/my_horse2zebra/test_A/n02381460_670.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0621609a574c39ff3a2706730e7ae96ef9dbb49 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_670.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_6790.jpg b/training/my_horse2zebra/test_A/n02381460_6790.jpg new file mode 100644 index 0000000000000000000000000000000000000000..865826694d0a0cddedb81674ef99088d80784065 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_6790.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_690.jpg b/training/my_horse2zebra/test_A/n02381460_690.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22b5dff68f5ec6b58e2b59e4e0042a24f631db97 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_690.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_6920.jpg b/training/my_horse2zebra/test_A/n02381460_6920.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5fc344af4dd42a2e8494212100612edec773307 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_6920.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_6950.jpg b/training/my_horse2zebra/test_A/n02381460_6950.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cc85750e2b85de8d066407342392531e7dc4ae6 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_6950.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7140.jpg b/training/my_horse2zebra/test_A/n02381460_7140.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83f503f451ca9489092c06e5311dda763bd12e50 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7140.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7170.jpg b/training/my_horse2zebra/test_A/n02381460_7170.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3249bcc5d648d126873b63e1bf812a0fe3fead89 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7170.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7190.jpg b/training/my_horse2zebra/test_A/n02381460_7190.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c670fd854f3bebd96b8262d4bbb4ac835c6ca1f Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7190.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7230.jpg b/training/my_horse2zebra/test_A/n02381460_7230.jpg new file mode 100644 index 0000000000000000000000000000000000000000..679636e72cabbf089cd088a5cc6ba8e100ded001 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7230.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7250.jpg b/training/my_horse2zebra/test_A/n02381460_7250.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e8ca9bdaa7bb63dd1ed53adfacb262367a3f6bd Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7250.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7300.jpg b/training/my_horse2zebra/test_A/n02381460_7300.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62001968650d8e750f02d700ea0e32aa5a99a45c Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7300.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7400.jpg b/training/my_horse2zebra/test_A/n02381460_7400.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61738b78807c00a9c09c0926d6e7ae62810b9274 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7400.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7500.jpg b/training/my_horse2zebra/test_A/n02381460_7500.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9691031ba81f1b2f7077f5213b863b5befcbcc4 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7500.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7620.jpg b/training/my_horse2zebra/test_A/n02381460_7620.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32d90628c5c9e8050bc5b3671bc062b7a6c48124 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7620.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7660.jpg b/training/my_horse2zebra/test_A/n02381460_7660.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f2986dce9ed4223e5a92845f1fdd2dca6262130 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7660.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7700.jpg b/training/my_horse2zebra/test_A/n02381460_7700.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d800ec84c49afa008bb005439d4917ad990b8b6 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7700.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7890.jpg b/training/my_horse2zebra/test_A/n02381460_7890.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7fa46142e974794f139d7c172e8e288b8a7c992 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7890.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_7970.jpg b/training/my_horse2zebra/test_A/n02381460_7970.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4746a980b2debbfcb13d5cb2ff47ada42ca5ac9e Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_7970.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_800.jpg b/training/my_horse2zebra/test_A/n02381460_800.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1332341d4b0aaf4e635252884c4698841812c707 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_800.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_840.jpg b/training/my_horse2zebra/test_A/n02381460_840.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5703a72568c563f13f903eb12386f143d0edafd6 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_840.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_8900.jpg b/training/my_horse2zebra/test_A/n02381460_8900.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6346dc83c9ba873ecf5ed27ed78a7bd95a219ccd Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_8900.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_8980.jpg b/training/my_horse2zebra/test_A/n02381460_8980.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca5522807a7109d3c3dbda40e45431027a2d011f Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_8980.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_900.jpg b/training/my_horse2zebra/test_A/n02381460_900.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a495e6155933847d3e3f90806713b5a5834933da Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_900.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_910.jpg b/training/my_horse2zebra/test_A/n02381460_910.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd2c81f340ae27b2faac9183ed11aa3610aa88a7 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_910.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_9240.jpg b/training/my_horse2zebra/test_A/n02381460_9240.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9dc2b38de1ff753f14e429229709af0516d4334f Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_9240.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_9260.jpg b/training/my_horse2zebra/test_A/n02381460_9260.jpg new file mode 100644 index 0000000000000000000000000000000000000000..faeb5038d0fa00efe013ed11a0ba9e454abb0149 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_9260.jpg differ diff --git a/training/my_horse2zebra/test_A/n02381460_950.jpg b/training/my_horse2zebra/test_A/n02381460_950.jpg new file mode 100644 index 0000000000000000000000000000000000000000..637902a8df13b0d86bc5159cf02abbef20683482 Binary files /dev/null and b/training/my_horse2zebra/test_A/n02381460_950.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_100.jpg b/training/my_horse2zebra/test_B/n02391049_100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4badb7931aea3d5e6a0daf561b29aa169b478a73 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_100.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1000.jpg b/training/my_horse2zebra/test_B/n02391049_1000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99e42588e0499cc8619526d33a7cb3da539f5f4a Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1000.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_10100.jpg b/training/my_horse2zebra/test_B/n02391049_10100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..243a2a6175a27174a1f8c86827fef883ad61a9b1 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_10100.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_10160.jpg b/training/my_horse2zebra/test_B/n02391049_10160.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fb8eb8815c66afd07c9866d9d700071fd9a02e8 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_10160.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1020.jpg b/training/my_horse2zebra/test_B/n02391049_1020.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4681986329b628c986174de89277d46d35a81352 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1020.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_10210.jpg b/training/my_horse2zebra/test_B/n02391049_10210.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a8dc607d31c3f530f8fcc7815af30888394184f Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_10210.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_10590.jpg b/training/my_horse2zebra/test_B/n02391049_10590.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21ea1eb3bfccccd81c4b7d9f81ac9bd0603321f1 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_10590.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1060.jpg b/training/my_horse2zebra/test_B/n02391049_1060.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22eebde013507788c18fe8c0fbb5c42698e452f9 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1060.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_10630.jpg b/training/my_horse2zebra/test_B/n02391049_10630.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43ba25e457fc98530012eba170cfc1285c967a49 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_10630.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_10810.jpg b/training/my_horse2zebra/test_B/n02391049_10810.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4fd0bd8b847daacc52598b18a4484cab8c55f078 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_10810.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_10910.jpg b/training/my_horse2zebra/test_B/n02391049_10910.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d7b5adfa4f0b6b3d095806ae4a09dd7e3a8b1f3 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_10910.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_10980.jpg b/training/my_horse2zebra/test_B/n02391049_10980.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be025656f920ad78e60373d38425954b67ad49db Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_10980.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1100.jpg b/training/my_horse2zebra/test_B/n02391049_1100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..755794c6a98e315472034f5743553aae56da803e Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1100.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1150.jpg b/training/my_horse2zebra/test_B/n02391049_1150.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa8252eb0d0c207007d358cc78c9450cfa1b2cd7 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1150.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_120.jpg b/training/my_horse2zebra/test_B/n02391049_120.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf1ca23f289480c1b6c4265eb4e44c96b098aff9 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_120.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1220.jpg b/training/my_horse2zebra/test_B/n02391049_1220.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29c887bab096c2c4dc2fe9c6867b4a6552ccbb05 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1220.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1270.jpg b/training/my_horse2zebra/test_B/n02391049_1270.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6d761bfcefc6ed5d97ae826278e950a10639300 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1270.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1290.jpg b/training/my_horse2zebra/test_B/n02391049_1290.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d578e0c854e5f7a7d75ba5746ad9990242032dad Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1290.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_130.jpg b/training/my_horse2zebra/test_B/n02391049_130.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6bd2a5e8516dcacc6c10404c1e40b266b6609afe Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_130.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1300.jpg b/training/my_horse2zebra/test_B/n02391049_1300.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab1dfbfa0b3c140966ad612862dca21a4708cd68 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1300.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1340.jpg b/training/my_horse2zebra/test_B/n02391049_1340.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a67b20e95a79c56ddd3a613eb8f27068a2253035 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1340.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1430.jpg b/training/my_horse2zebra/test_B/n02391049_1430.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c064be09f22305ad556e27612d1041d4a030d475 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1430.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1630.jpg b/training/my_horse2zebra/test_B/n02391049_1630.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bc495340c9efe9eea6a0ab807d5fe199bbcd249 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1630.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_170.jpg b/training/my_horse2zebra/test_B/n02391049_170.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00133bf5e1737545429a639085b5258e8ac1c8f8 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_170.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1760.jpg b/training/my_horse2zebra/test_B/n02391049_1760.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d63520528f842d71e7b8afdaf03c67cc6b9a3e2c Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1760.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1790.jpg b/training/my_horse2zebra/test_B/n02391049_1790.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c546a31c7eef62af8ac5acd690e1db0f7e72eea Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1790.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_180.jpg b/training/my_horse2zebra/test_B/n02391049_180.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d10596cbe3a84faf9ff21666e86dd7d758e20a5 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_180.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1880.jpg b/training/my_horse2zebra/test_B/n02391049_1880.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7a28a496a3731212364bc26f058cba36080bfbd Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1880.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_1950.jpg b/training/my_horse2zebra/test_B/n02391049_1950.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96327a37346437f78ba332bb2338be28a5d6f127 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_1950.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_200.jpg b/training/my_horse2zebra/test_B/n02391049_200.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7a872947ed4f4340f83e6493d6f611e03218067 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_200.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2100.jpg b/training/my_horse2zebra/test_B/n02391049_2100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f442b8ba7dd38a4cb38ebb5ad5166790f1285424 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2100.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2190.jpg b/training/my_horse2zebra/test_B/n02391049_2190.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a26c7c203c01ca3d48e17f99d6fd1384beac614 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2190.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2200.jpg b/training/my_horse2zebra/test_B/n02391049_2200.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9413250e9b78b99856e334f1c58d0b8a65791939 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2200.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2220.jpg b/training/my_horse2zebra/test_B/n02391049_2220.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53bce047a706d2a8f8bc9aab54f8bd6fb4eba491 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2220.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2290.jpg b/training/my_horse2zebra/test_B/n02391049_2290.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87454a9215865c98cbfba3a4977e92887069d75a Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2290.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2350.jpg b/training/my_horse2zebra/test_B/n02391049_2350.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d614394bc8e2d4375e70bcc8f9806c85b41fb34 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2350.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2380.jpg b/training/my_horse2zebra/test_B/n02391049_2380.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18bfaabc2dd73ee45708877d29a3a0cdf550abc3 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2380.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2410.jpg b/training/my_horse2zebra/test_B/n02391049_2410.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fbfdebf9996330c50c264227f2a9c930e26d4e52 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2410.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2420.jpg b/training/my_horse2zebra/test_B/n02391049_2420.jpg new file mode 100644 index 0000000000000000000000000000000000000000..afcf286d353c2abc05179438e0c1c7c17ce1da0f Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2420.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2460.jpg b/training/my_horse2zebra/test_B/n02391049_2460.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0052949faaf7f786cfd7e282ce7d972fef838505 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2460.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2470.jpg b/training/my_horse2zebra/test_B/n02391049_2470.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e769b55b25d97f8063149ecf8ec5bf9e331ba9db Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2470.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2480.jpg b/training/my_horse2zebra/test_B/n02391049_2480.jpg new file mode 100644 index 0000000000000000000000000000000000000000..046fb25b59da2033c1a345856d469b8fc6117995 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2480.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2500.jpg b/training/my_horse2zebra/test_B/n02391049_2500.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91fcd01b0bb826a868cd3e7632538a397aab04be Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2500.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2510.jpg b/training/my_horse2zebra/test_B/n02391049_2510.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00e73d6a877d71e36ec3bbbe0177162b85b249f5 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2510.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2570.jpg b/training/my_horse2zebra/test_B/n02391049_2570.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38b954f05f9898dc40b04893fe3200858d77f0d1 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2570.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_260.jpg b/training/my_horse2zebra/test_B/n02391049_260.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8561573e16034b4c75bd55825593d343d76c7beb Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_260.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2600.jpg b/training/my_horse2zebra/test_B/n02391049_2600.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1af48148f5fd47441c1f33b04ba85a649b727ef Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2600.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2620.jpg b/training/my_horse2zebra/test_B/n02391049_2620.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc9f61f67ba221bedebd97c1f8533150059b9240 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2620.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_270.jpg b/training/my_horse2zebra/test_B/n02391049_270.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a3de62467ef0d5a36ac6a0671527418f93e6853 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_270.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2730.jpg b/training/my_horse2zebra/test_B/n02391049_2730.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34130599d329ae50d43403837221d6478b54edf9 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2730.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2760.jpg b/training/my_horse2zebra/test_B/n02391049_2760.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e276b902d8e86f02e24a43b530a65e6f75ef0281 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2760.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2790.jpg b/training/my_horse2zebra/test_B/n02391049_2790.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78ce87bfface0e64262510e597614676f1077927 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2790.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2800.jpg b/training/my_horse2zebra/test_B/n02391049_2800.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68277204de2e2a2148b9a5aede50ca5e60d61afe Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2800.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2810.jpg b/training/my_horse2zebra/test_B/n02391049_2810.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b7a952ae4693567adbc71bd75d7797d3b65aa53 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2810.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2870.jpg b/training/my_horse2zebra/test_B/n02391049_2870.jpg new file mode 100644 index 0000000000000000000000000000000000000000..926216f9e8a74354060cea90656e9f167d804694 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2870.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2890.jpg b/training/my_horse2zebra/test_B/n02391049_2890.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b1dc0b9cdc74563c10723272930f21363f8b664 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2890.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2930.jpg b/training/my_horse2zebra/test_B/n02391049_2930.jpg new file mode 100644 index 0000000000000000000000000000000000000000..834fb4dc6b43053ba55ec291c865bc1f5270b1fe Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2930.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2970.jpg b/training/my_horse2zebra/test_B/n02391049_2970.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23570084887cacb25a5d66909509de96d55568e8 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2970.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_2990.jpg b/training/my_horse2zebra/test_B/n02391049_2990.jpg new file mode 100644 index 0000000000000000000000000000000000000000..714ff968c250b8c2bee4ffe2edb868a6e3716f1c Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_2990.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3010.jpg b/training/my_horse2zebra/test_B/n02391049_3010.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1a95d78e8b3f30918db843f9ca98f16e6ca3ad4 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3010.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3060.jpg b/training/my_horse2zebra/test_B/n02391049_3060.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8957a9d1bf48d608bc9251b0e5b406340fb23ca Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3060.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3070.jpg b/training/my_horse2zebra/test_B/n02391049_3070.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9c149173ed5c5fb7552192f65686b29cf745b5a Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3070.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3090.jpg b/training/my_horse2zebra/test_B/n02391049_3090.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27e0437302c1d7d29f21eb6dca553e5237928ac3 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3090.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3130.jpg b/training/my_horse2zebra/test_B/n02391049_3130.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c56b59d994c6da5aac4af25e4511d7e25d75e57a Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3130.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3200.jpg b/training/my_horse2zebra/test_B/n02391049_3200.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8ee43d83fe4e4f99db54f2be35cd6e04ab8a726 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3200.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3220.jpg b/training/my_horse2zebra/test_B/n02391049_3220.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1f2bafc319ca7acd71a19aecf143e1b1657b742 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3220.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3240.jpg b/training/my_horse2zebra/test_B/n02391049_3240.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76371da8123051ee907541cbb7b7425d573e0f12 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3240.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3270.jpg b/training/my_horse2zebra/test_B/n02391049_3270.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c45e656ae81d105d60de87bc0e7659e43316f083 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3270.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3290.jpg b/training/my_horse2zebra/test_B/n02391049_3290.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bcdbffb8015f26f5bb2c93bbddaa76746531f3d8 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3290.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3310.jpg b/training/my_horse2zebra/test_B/n02391049_3310.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d900ab62f03f8f261e2dda23411767517e5ea3d7 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3310.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3320.jpg b/training/my_horse2zebra/test_B/n02391049_3320.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6acb89e82dcc3c3b0a7b5016d3626a23ac171b3 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3320.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3450.jpg b/training/my_horse2zebra/test_B/n02391049_3450.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4a26b288d8d99d76c953d809be0788ea2d87656 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3450.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3750.jpg b/training/my_horse2zebra/test_B/n02391049_3750.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08d853caaed66be8375b800a575e6fcc61e13e89 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3750.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3770.jpg b/training/my_horse2zebra/test_B/n02391049_3770.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f271da87926ec3bedd5ea7bad5390b2d1c106f5f Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3770.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3800.jpg b/training/my_horse2zebra/test_B/n02391049_3800.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da129a32377dbcbe84477f2712c4478b00b0a08b Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3800.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_3840.jpg b/training/my_horse2zebra/test_B/n02391049_3840.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8aa6df477665437b373e7f19f79fbed758a7def3 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_3840.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_390.jpg b/training/my_horse2zebra/test_B/n02391049_390.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b6269deb97aac014111c9d6cea0bc2e09774c41 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_390.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_400.jpg b/training/my_horse2zebra/test_B/n02391049_400.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f6232041c05b9f81713afdc024cf18c1a909541 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_400.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_410.jpg b/training/my_horse2zebra/test_B/n02391049_410.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f74294e0806245f2244c86a0041b60026aceeba Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_410.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_4110.jpg b/training/my_horse2zebra/test_B/n02391049_4110.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f61444d916fde181d49af4b3d048755b3b63731f Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_4110.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_430.jpg b/training/my_horse2zebra/test_B/n02391049_430.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cce061980f5d164e85bc42e0877c97a235c578f8 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_430.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_440.jpg b/training/my_horse2zebra/test_B/n02391049_440.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa88c68fc3e39374cb8ea98bcfb10ae1fd8aa78a Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_440.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_4490.jpg b/training/my_horse2zebra/test_B/n02391049_4490.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1117fb096ea48b03a799bfe9d8847ea518490599 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_4490.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_4570.jpg b/training/my_horse2zebra/test_B/n02391049_4570.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0019d1bbb8dd102fe1adda77508d568f2f0bee86 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_4570.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_4610.jpg b/training/my_horse2zebra/test_B/n02391049_4610.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5c90620f21088109e9a8d06b10f5bca12f8cddc Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_4610.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_4730.jpg b/training/my_horse2zebra/test_B/n02391049_4730.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6840aa9f6931267b3191952d41704888a17c320 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_4730.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_480.jpg b/training/my_horse2zebra/test_B/n02391049_480.jpg new file mode 100644 index 0000000000000000000000000000000000000000..569b3e824cd9369dba3e877f2e461e1824e6a3f3 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_480.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_4890.jpg b/training/my_horse2zebra/test_B/n02391049_4890.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a7954eeb42183d0f784105d3956ce97ed238e1be Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_4890.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_490.jpg b/training/my_horse2zebra/test_B/n02391049_490.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74cebec42d732b4d76e367c9529d36f5d420c3af Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_490.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_4990.jpg b/training/my_horse2zebra/test_B/n02391049_4990.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a41a228df2a4a6b9bf18def08e20d4342d031eea Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_4990.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_5030.jpg b/training/my_horse2zebra/test_B/n02391049_5030.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5091ee9cf45b2442f1c533a1448d608bdc1ff416 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_5030.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_5100.jpg b/training/my_horse2zebra/test_B/n02391049_5100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..202ef99cb12d3269786feaf236317884b7c718b5 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_5100.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_5220.jpg b/training/my_horse2zebra/test_B/n02391049_5220.jpg new file mode 100644 index 0000000000000000000000000000000000000000..090b0ce0aad7390265fbe7de82d7f18922173b5c Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_5220.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_5240.jpg b/training/my_horse2zebra/test_B/n02391049_5240.jpg new file mode 100644 index 0000000000000000000000000000000000000000..15dace85bffda5bec6392d66291413dc2ef7d87c Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_5240.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_5320.jpg b/training/my_horse2zebra/test_B/n02391049_5320.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e210155a182a81f0aaa03716bde7af3e948066f Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_5320.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_560.jpg b/training/my_horse2zebra/test_B/n02391049_560.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84f688979fe03cf9b76b7c60d8a14a58fe61bd98 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_560.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_5670.jpg b/training/my_horse2zebra/test_B/n02391049_5670.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2411902a04801b90a5a6cd225603a962addcd0f3 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_5670.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_5720.jpg b/training/my_horse2zebra/test_B/n02391049_5720.jpg new file mode 100644 index 0000000000000000000000000000000000000000..490e7be5e7017a44275d899e418918416686a6b1 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_5720.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_5810.jpg b/training/my_horse2zebra/test_B/n02391049_5810.jpg new file mode 100644 index 0000000000000000000000000000000000000000..749dbf91afd4df776b8ef99757a5d7e06dde13d2 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_5810.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_5930.jpg b/training/my_horse2zebra/test_B/n02391049_5930.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8dc95522e299f67ca8fdbcfe482b339febdfa920 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_5930.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_5990.jpg b/training/my_horse2zebra/test_B/n02391049_5990.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09389081331cbf665162eb8649c964c12783f730 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_5990.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_600.jpg b/training/my_horse2zebra/test_B/n02391049_600.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4dcd87d2b7b8976dddec996e6edf1ca8fad27c4 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_600.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_6180.jpg b/training/my_horse2zebra/test_B/n02391049_6180.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24e2089fcbc12ec8fd96e734067ed799b5829cab Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_6180.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_6190.jpg b/training/my_horse2zebra/test_B/n02391049_6190.jpg new file mode 100644 index 0000000000000000000000000000000000000000..094223ba9b286671ab04c34943cbe7ce87b3f7d4 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_6190.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_640.jpg b/training/my_horse2zebra/test_B/n02391049_640.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94588a528ed66c0c9b7bcbd8eefb66ada296f346 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_640.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_6520.jpg b/training/my_horse2zebra/test_B/n02391049_6520.jpg new file mode 100644 index 0000000000000000000000000000000000000000..575b07b919edcf2dfc669e3a40347c711889adcb Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_6520.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_6650.jpg b/training/my_horse2zebra/test_B/n02391049_6650.jpg new file mode 100644 index 0000000000000000000000000000000000000000..291815fc2294a2989e0830dd897e3f852ff3b89c Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_6650.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_6690.jpg b/training/my_horse2zebra/test_B/n02391049_6690.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d7641eaecaa0135d04915f4a0c4fd1c3175f4bf Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_6690.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_6780.jpg b/training/my_horse2zebra/test_B/n02391049_6780.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7258987ffb0acf717e8c7942d22232fc5b9f975 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_6780.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_6860.jpg b/training/my_horse2zebra/test_B/n02391049_6860.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6edea5842c7f62200cc33bd5eef90447d6736942 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_6860.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_6890.jpg b/training/my_horse2zebra/test_B/n02391049_6890.jpg new file mode 100644 index 0000000000000000000000000000000000000000..743f53da12d3dfc2a748a07b72689f0b9c2c9251 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_6890.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_690.jpg b/training/my_horse2zebra/test_B/n02391049_690.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1a1f2f1512d16c3cdae1cfce03772e36def286e Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_690.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_7060.jpg b/training/my_horse2zebra/test_B/n02391049_7060.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cdcacdfffd06553f80f1893542da72925a03f524 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_7060.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_7150.jpg b/training/my_horse2zebra/test_B/n02391049_7150.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1b899a7f264d71910d47f5ef5a6516626845130 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_7150.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_7190.jpg b/training/my_horse2zebra/test_B/n02391049_7190.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c31c179991a170465e43eeac8678ce3a0029ed0 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_7190.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_750.jpg b/training/my_horse2zebra/test_B/n02391049_750.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe5ca3e43b8b9f1a88c4a5c70d9ba90807ee2704 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_750.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_7740.jpg b/training/my_horse2zebra/test_B/n02391049_7740.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de05ccaaf2a17b5b74252d2b498437389ce06934 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_7740.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_7860.jpg b/training/my_horse2zebra/test_B/n02391049_7860.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db19c3c5aec490284f97bc783f54df7e72f306f7 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_7860.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_790.jpg b/training/my_horse2zebra/test_B/n02391049_790.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3a53bdbc6a2f38b0dc9f23dc6a71ed81366c23c Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_790.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_80.jpg b/training/my_horse2zebra/test_B/n02391049_80.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2ff3d88d06afa8ad9c3878f107f1ee311766f52 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_80.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_8000.jpg b/training/my_horse2zebra/test_B/n02391049_8000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba3f1386e6e51c13799b357f4d58fa8c4722e295 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_8000.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_8020.jpg b/training/my_horse2zebra/test_B/n02391049_8020.jpg new file mode 100644 index 0000000000000000000000000000000000000000..655307144eea249b8171237bd13f788201555a40 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_8020.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_8080.jpg b/training/my_horse2zebra/test_B/n02391049_8080.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fe70f3e20af2ee14408b0b8f01b84d3d98d803f Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_8080.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_8140.jpg b/training/my_horse2zebra/test_B/n02391049_8140.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10736849afd04853e4bae3acd9caacbfd118be19 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_8140.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_8340.jpg b/training/my_horse2zebra/test_B/n02391049_8340.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30b18bb52351aa7bc247f81bb78aa27a208dd826 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_8340.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_860.jpg b/training/my_horse2zebra/test_B/n02391049_860.jpg new file mode 100644 index 0000000000000000000000000000000000000000..393bdec7f833b8cd53d322027e6a9b20478f51a8 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_860.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_8830.jpg b/training/my_horse2zebra/test_B/n02391049_8830.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cdc98e2a8f262edc9e68e44d8477885a7dd031c8 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_8830.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_890.jpg b/training/my_horse2zebra/test_B/n02391049_890.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36e0af131f638210aea9a13840905bc79285884a Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_890.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_900.jpg b/training/my_horse2zebra/test_B/n02391049_900.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b4644fb2526106d42a53762594d3c5f6ce4d92c Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_900.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_9000.jpg b/training/my_horse2zebra/test_B/n02391049_9000.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ed9ab434b3b49fbc0854dfff483d148107082ef Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_9000.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_9160.jpg b/training/my_horse2zebra/test_B/n02391049_9160.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7abe93ca252abacbc5c5cf3ef375d8f60c04455b Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_9160.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_920.jpg b/training/my_horse2zebra/test_B/n02391049_920.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7907d22153efd021c6145100cc98869aa8098e0d Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_920.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_9350.jpg b/training/my_horse2zebra/test_B/n02391049_9350.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efaef647f9af6b6186c9d855fa305c1ba9c4d5da Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_9350.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_9400.jpg b/training/my_horse2zebra/test_B/n02391049_9400.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c476e0033627a760c62efc7d7e0df4210fcdb373 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_9400.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_9460.jpg b/training/my_horse2zebra/test_B/n02391049_9460.jpg new file mode 100644 index 0000000000000000000000000000000000000000..020d336c4cabe17131b502b9e2f785eed5ca2eb7 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_9460.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_9680.jpg b/training/my_horse2zebra/test_B/n02391049_9680.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a12ccfa0d772827c02808b9c2872e0709495bb5 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_9680.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_9740.jpg b/training/my_horse2zebra/test_B/n02391049_9740.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d84e75fd88cfa1a7b183cec32281b8584809b16f Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_9740.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_980.jpg b/training/my_horse2zebra/test_B/n02391049_980.jpg new file mode 100644 index 0000000000000000000000000000000000000000..326dc5a36aea0e624fc54d43586b1559ddf9719d Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_980.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_9900.jpg b/training/my_horse2zebra/test_B/n02391049_9900.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff000a7107325b9cabdeb623088849127a17d28d Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_9900.jpg differ diff --git a/training/my_horse2zebra/test_B/n02391049_9960.jpg b/training/my_horse2zebra/test_B/n02391049_9960.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a12f627d7a9d04f5cd855196172bcdbd08ef146 Binary files /dev/null and b/training/my_horse2zebra/test_B/n02391049_9960.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1001.jpg b/training/my_horse2zebra/train_A/n02381460_1001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c88b45c17dc4d0026e26f779bb1a0f3415cab41 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1001.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1002.jpg b/training/my_horse2zebra/train_A/n02381460_1002.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12998627bf8445d3c433cb57407d32ea11c17915 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1002.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1003.jpg b/training/my_horse2zebra/train_A/n02381460_1003.jpg new file mode 100644 index 0000000000000000000000000000000000000000..694a4461185377e5a6e07dfa50779fbbe7b524fc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1003.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1006.jpg b/training/my_horse2zebra/train_A/n02381460_1006.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b3c76138fb3b58dc8fde51dd1bada10bb2162ab Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1006.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1008.jpg b/training/my_horse2zebra/train_A/n02381460_1008.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3bddab70a7599fc6b711c0809530a2c4ff20dc2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1008.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1009.jpg b/training/my_horse2zebra/train_A/n02381460_1009.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34df473d70e7699cd4029a959ee7f0a2c99a5f68 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1009.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1011.jpg b/training/my_horse2zebra/train_A/n02381460_1011.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc0ee1b39963e9fb0cf6c558e3d8025a5b584a6f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1011.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1014.jpg b/training/my_horse2zebra/train_A/n02381460_1014.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e3b14ccaab78cb072e3045330408407dcaaae6a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1014.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1019.jpg b/training/my_horse2zebra/train_A/n02381460_1019.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ffcee1a3cb207461805df812b44b7972137213c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1019.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_102.jpg b/training/my_horse2zebra/train_A/n02381460_102.jpg new file mode 100644 index 0000000000000000000000000000000000000000..853e995ddc876a0e4f82ec0084863ff732a8fcc7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_102.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1023.jpg b/training/my_horse2zebra/train_A/n02381460_1023.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12cd8f64948672d2b87651595c30fad16600bdd9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1023.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1025.jpg b/training/my_horse2zebra/train_A/n02381460_1025.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3bbb239e229e23592186beb3aaf8bf43ce5e7848 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1025.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1027.jpg b/training/my_horse2zebra/train_A/n02381460_1027.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c57bed856bf003322f2e15f261e329344a6f31b6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1027.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1028.jpg b/training/my_horse2zebra/train_A/n02381460_1028.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c74de1a6bece51a80c1be917eccf6134e6e0f04e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1028.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1034.jpg b/training/my_horse2zebra/train_A/n02381460_1034.jpg new file mode 100644 index 0000000000000000000000000000000000000000..869cb8d38624246eba37e99722b2f9065a7e8bf4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1034.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1035.jpg b/training/my_horse2zebra/train_A/n02381460_1035.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecd81997882ba9311bb4b01d801fe5fd0ea93d73 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1035.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1037.jpg b/training/my_horse2zebra/train_A/n02381460_1037.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f32fa70ef44c0d2715bc7f9c75c581842f97526a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1037.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1038.jpg b/training/my_horse2zebra/train_A/n02381460_1038.jpg new file mode 100644 index 0000000000000000000000000000000000000000..878be52e662cc4f3f2ec27743430d7075daa3535 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1038.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1044.jpg b/training/my_horse2zebra/train_A/n02381460_1044.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5756e55f41e43b2b1df968e12dabcb640e24bf72 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1044.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1045.jpg b/training/my_horse2zebra/train_A/n02381460_1045.jpg new file mode 100644 index 0000000000000000000000000000000000000000..beb9b48f873327d1e3c1d5955e18b40855889eff Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1045.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1048.jpg b/training/my_horse2zebra/train_A/n02381460_1048.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6db67fe8c0201fb5b212999e6988bc2670d7e959 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1048.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_105.jpg b/training/my_horse2zebra/train_A/n02381460_105.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5807c5288044970be8800279f88b7a1ec46e652 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_105.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1051.jpg b/training/my_horse2zebra/train_A/n02381460_1051.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7aa69119b6335cfced63dd0831173e049b5bdecf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1051.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1052.jpg b/training/my_horse2zebra/train_A/n02381460_1052.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52e6e11236747cbb8da4b1271aecde851844eb40 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1052.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1053.jpg b/training/my_horse2zebra/train_A/n02381460_1053.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55cc29c2e19c68afd619469c8a7769fd0d52c246 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1053.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1058.jpg b/training/my_horse2zebra/train_A/n02381460_1058.jpg new file mode 100644 index 0000000000000000000000000000000000000000..decca81f02b10430267e41fc769a00603789faf6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1058.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1063.jpg b/training/my_horse2zebra/train_A/n02381460_1063.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68f12e9be705b23f51dca67ea359fbdca0f01096 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1063.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1068.jpg b/training/my_horse2zebra/train_A/n02381460_1068.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e54e073cb4b412d0bcc39269d70727d2ad6a70be Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1068.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1074.jpg b/training/my_horse2zebra/train_A/n02381460_1074.jpg new file mode 100644 index 0000000000000000000000000000000000000000..404473af89ed24d8ee66797690023f76e30a4307 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1074.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1075.jpg b/training/my_horse2zebra/train_A/n02381460_1075.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c63cacb9042d3f921f25bfe7972c2349b663c60e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1075.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_108.jpg b/training/my_horse2zebra/train_A/n02381460_108.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f58758e6227f1d56787c84960f9c7b906a16686d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_108.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1082.jpg b/training/my_horse2zebra/train_A/n02381460_1082.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0e29690d48d3c6423c5c22ab1e29b5be7dec308 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1082.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1083.jpg b/training/my_horse2zebra/train_A/n02381460_1083.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ebef89dc8251cbccd98f8752d140ff547c58668e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1083.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1084.jpg b/training/my_horse2zebra/train_A/n02381460_1084.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72b647ebd35197cee5303fbc7547c883c1926b59 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1084.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1098.jpg b/training/my_horse2zebra/train_A/n02381460_1098.jpg new file mode 100644 index 0000000000000000000000000000000000000000..147171c73bd4e4ba97350bb883244bdc8e5ed224 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1098.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_11.jpg b/training/my_horse2zebra/train_A/n02381460_11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..251839dd6f8073aba476200e09f510c0572a15bb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_11.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1101.jpg b/training/my_horse2zebra/train_A/n02381460_1101.jpg new file mode 100644 index 0000000000000000000000000000000000000000..753b251ca8dc6fffe394ece276e8dc194e93d140 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1101.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1105.jpg b/training/my_horse2zebra/train_A/n02381460_1105.jpg new file mode 100644 index 0000000000000000000000000000000000000000..838fc594c0ddb660ec391168699ae1a9643bf716 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1105.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1106.jpg b/training/my_horse2zebra/train_A/n02381460_1106.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e9db933d3d9e223f7e8acc6c266a01355f6e23f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1106.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1108.jpg b/training/my_horse2zebra/train_A/n02381460_1108.jpg new file mode 100644 index 0000000000000000000000000000000000000000..afe2a818893ddd98ab23cb8c2958bf4d84149d29 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1108.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1122.jpg b/training/my_horse2zebra/train_A/n02381460_1122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed04de2cab338245dadf29620365c9bc96992582 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1122.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1127.jpg b/training/my_horse2zebra/train_A/n02381460_1127.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d594fa0ec7afd1f597e490bd1e236549b1d174a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1127.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1132.jpg b/training/my_horse2zebra/train_A/n02381460_1132.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc0b75adb87dc162cb768f14fbbf56586deedab1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1132.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1134.jpg b/training/my_horse2zebra/train_A/n02381460_1134.jpg new file mode 100644 index 0000000000000000000000000000000000000000..557987f835911b97d11799570e78faff7e14b10c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1134.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1135.jpg b/training/my_horse2zebra/train_A/n02381460_1135.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d79cca884bdfacd3662ebf93d287a3708cc6b0b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1135.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1144.jpg b/training/my_horse2zebra/train_A/n02381460_1144.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0dcbbbd33d01c276426507b4c4cc72de67e4ec5b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1144.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1147.jpg b/training/my_horse2zebra/train_A/n02381460_1147.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3906a235fffde4ae69ec6dd6a4afa761ba13255 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1147.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1155.jpg b/training/my_horse2zebra/train_A/n02381460_1155.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b4301d8e7edfd5f627b2de41edcc95ae71a9e9d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1155.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1158.jpg b/training/my_horse2zebra/train_A/n02381460_1158.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01d388b4faaf1989cf571dc85cf498b25e60eb69 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1158.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1159.jpg b/training/my_horse2zebra/train_A/n02381460_1159.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73cc473501637a2cf159f0e0bbf00454ee363d0b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1159.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1168.jpg b/training/my_horse2zebra/train_A/n02381460_1168.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca7f098eeb25f45b99bacaf415ef792cab4cc74a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1168.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_117.jpg b/training/my_horse2zebra/train_A/n02381460_117.jpg new file mode 100644 index 0000000000000000000000000000000000000000..223cf7c709f90dac72764692be1b4f40b820baf7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_117.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1182.jpg b/training/my_horse2zebra/train_A/n02381460_1182.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a9fba837826284041e3055dbad29fee3868ec95 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1182.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1184.jpg b/training/my_horse2zebra/train_A/n02381460_1184.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45ed8c3f3aab49936dc135eb9a63c364b3bfdc49 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1184.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1191.jpg b/training/my_horse2zebra/train_A/n02381460_1191.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0361addb1b901b37bdccc0b5624f22312c82cbe0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1191.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1194.jpg b/training/my_horse2zebra/train_A/n02381460_1194.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf2dd5e86b5fa531c13648c22d23a97a6bcdc1d4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1194.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1197.jpg b/training/my_horse2zebra/train_A/n02381460_1197.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e367b6617c98ed0450131749fe03123ecc11ce18 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1197.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1204.jpg b/training/my_horse2zebra/train_A/n02381460_1204.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8c79c0620b6360ff249fca67dcbb8f18ae0428f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1204.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1208.jpg b/training/my_horse2zebra/train_A/n02381460_1208.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7d688d32de016b4be6e9af1b85fcc1361cf0a76 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1208.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1212.jpg b/training/my_horse2zebra/train_A/n02381460_1212.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9762d6b045a7571083cab519c25c12fd901f282 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1212.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1216.jpg b/training/my_horse2zebra/train_A/n02381460_1216.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2a5dcc3dc3c2fda59ac5992eceb20bbde51dde5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1216.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_122.jpg b/training/my_horse2zebra/train_A/n02381460_122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6ce21450c9ddcb72a2677c963c2b82b2a9a8fa7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_122.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1226.jpg b/training/my_horse2zebra/train_A/n02381460_1226.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52699065d7c6af85a6c43829c24f83a3cb3984a7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1226.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1227.jpg b/training/my_horse2zebra/train_A/n02381460_1227.jpg new file mode 100644 index 0000000000000000000000000000000000000000..901b44e2170caebe8f380bff73a5b4171ca1a8fe Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1227.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1232.jpg b/training/my_horse2zebra/train_A/n02381460_1232.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a2c748cf8b28e02a517c9b3839a84195547f88f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1232.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1246.jpg b/training/my_horse2zebra/train_A/n02381460_1246.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e39b931021608b52cd83ff04f379e6c4047c4a6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1246.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1247.jpg b/training/my_horse2zebra/train_A/n02381460_1247.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55fd971211d14017e396b1a12a6e6f5394918bb6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1247.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1249.jpg b/training/my_horse2zebra/train_A/n02381460_1249.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fcbd59174cfc58390d105b76cb259115362af867 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1249.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_125.jpg b/training/my_horse2zebra/train_A/n02381460_125.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76c700124431514ea1954e4b4c02e5d06fbdc631 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_125.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1258.jpg b/training/my_horse2zebra/train_A/n02381460_1258.jpg new file mode 100644 index 0000000000000000000000000000000000000000..13f8bb4175eefded3483d1a76023edf7e2775bb5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1258.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1262.jpg b/training/my_horse2zebra/train_A/n02381460_1262.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c90fb5488625ba684d0d60a535ec1ad083929da Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1262.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1263.jpg b/training/my_horse2zebra/train_A/n02381460_1263.jpg new file mode 100644 index 0000000000000000000000000000000000000000..add092f3fa9e9b6f75321f21bf0e76603067ed93 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1263.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1266.jpg b/training/my_horse2zebra/train_A/n02381460_1266.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6adeb992ee3129a48ea668a293839dd8871187a9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1266.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1267.jpg b/training/my_horse2zebra/train_A/n02381460_1267.jpg new file mode 100644 index 0000000000000000000000000000000000000000..269d14cdf7fd1cf17817085a0f66226052e4a588 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1267.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1276.jpg b/training/my_horse2zebra/train_A/n02381460_1276.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a30977c60b2d6a0c580355311be5c6f81480e95 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1276.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_128.jpg b/training/my_horse2zebra/train_A/n02381460_128.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21c856ed0da479bc594f07195dc2b6b6f49c9e8d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_128.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1283.jpg b/training/my_horse2zebra/train_A/n02381460_1283.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c21d809cb1eefc049933343788f691c318d65d4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1283.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1288.jpg b/training/my_horse2zebra/train_A/n02381460_1288.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9fff59c99d3457b9e35f506caa09c4f2cf417dcb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1288.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1292.jpg b/training/my_horse2zebra/train_A/n02381460_1292.jpg new file mode 100644 index 0000000000000000000000000000000000000000..258260bd3261d09022de5ff4aeb54f42c4a998f2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1292.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1297.jpg b/training/my_horse2zebra/train_A/n02381460_1297.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1a98da047f89bbb485a9e67f896d916fa510bde Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1297.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1305.jpg b/training/my_horse2zebra/train_A/n02381460_1305.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8913c5e87a8ce994101166d5a5bd40214e253a0f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1305.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1307.jpg b/training/my_horse2zebra/train_A/n02381460_1307.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99951768468dad9bdfb866cb2246c1f50428f33b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1307.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1319.jpg b/training/my_horse2zebra/train_A/n02381460_1319.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dbc3cf81dfecfd9314047eb4f64999041628fcaf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1319.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1331.jpg b/training/my_horse2zebra/train_A/n02381460_1331.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d472a110ac5c96dcac555d9f1e3334e783d025b4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1331.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1334.jpg b/training/my_horse2zebra/train_A/n02381460_1334.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6628720c6481f110095150a309f01f056561ab03 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1334.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1336.jpg b/training/my_horse2zebra/train_A/n02381460_1336.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6eb9b2d37ce83df34afb65d5cb2ec2745096108f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1336.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1337.jpg b/training/my_horse2zebra/train_A/n02381460_1337.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cb07748c3cabc1f2b8475a5b4a1e8cb96a7554b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1337.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1338.jpg b/training/my_horse2zebra/train_A/n02381460_1338.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86cf0b1d7efbe4a5bea902bd2416771cf818dcab Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1338.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1347.jpg b/training/my_horse2zebra/train_A/n02381460_1347.jpg new file mode 100644 index 0000000000000000000000000000000000000000..41b7a2e43e388a4756162c1c89ed08da7923bc88 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1347.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1348.jpg b/training/my_horse2zebra/train_A/n02381460_1348.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d06b7094c04cb6580b8c051a341019e999b39670 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1348.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1349.jpg b/training/my_horse2zebra/train_A/n02381460_1349.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89e6f61ee23c88216d8bea183f3e670cf097d624 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1349.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_135.jpg b/training/my_horse2zebra/train_A/n02381460_135.jpg new file mode 100644 index 0000000000000000000000000000000000000000..699df981f54b5f5a84ba4a7c854c467f2c1f7ed4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_135.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1354.jpg b/training/my_horse2zebra/train_A/n02381460_1354.jpg new file mode 100644 index 0000000000000000000000000000000000000000..247f8beb27e7414869993c0f1b301d6f9ad6b20a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1354.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1361.jpg b/training/my_horse2zebra/train_A/n02381460_1361.jpg new file mode 100644 index 0000000000000000000000000000000000000000..905e7ced9dbbbfcab5825db8c6a6322d8b7291e9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1361.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1363.jpg b/training/my_horse2zebra/train_A/n02381460_1363.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53d5245a09ab52a13be305d6000beb33e4b2c23b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1363.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1365.jpg b/training/my_horse2zebra/train_A/n02381460_1365.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b2c128fc2012f68d97f897d40354197b26626d8b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1365.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1373.jpg b/training/my_horse2zebra/train_A/n02381460_1373.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b475181f35bb7a5e279b5535f3c991d35779dbd1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1373.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1384.jpg b/training/my_horse2zebra/train_A/n02381460_1384.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac95eeb321b6f812a52eb491ae0ab8ba29555c65 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1384.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1387.jpg b/training/my_horse2zebra/train_A/n02381460_1387.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61e8c18d75ef05fcf7c9d7a9740aa202da96f1fa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1387.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1388.jpg b/training/my_horse2zebra/train_A/n02381460_1388.jpg new file mode 100644 index 0000000000000000000000000000000000000000..56a6161c44bf4829ebba15305ab9aff3af398829 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1388.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1389.jpg b/training/my_horse2zebra/train_A/n02381460_1389.jpg new file mode 100644 index 0000000000000000000000000000000000000000..111de75e6ce959923c7ff68318bcee3ddcfeb75f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1389.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1391.jpg b/training/my_horse2zebra/train_A/n02381460_1391.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9fb6d46d9e3f45320d6a34592ffe2d20a7f2d33f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1391.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_14.jpg b/training/my_horse2zebra/train_A/n02381460_14.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f00feac76cecb499e821b4f7fc7ebfa307a24598 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_14.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1402.jpg b/training/my_horse2zebra/train_A/n02381460_1402.jpg new file mode 100644 index 0000000000000000000000000000000000000000..578dbfcb8865e287ca4716c2ac92a211d9a61ccc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1402.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1405.jpg b/training/my_horse2zebra/train_A/n02381460_1405.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d011d89a8636d83c81721d6c915ce145ebd2ffff Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1405.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1418.jpg b/training/my_horse2zebra/train_A/n02381460_1418.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4957d3b6c73fdc3359f6a2775b7987123b85bdcf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1418.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1422.jpg b/training/my_horse2zebra/train_A/n02381460_1422.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b61e84a7133b4e4020fbcc785e32b885738d5016 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1422.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1423.jpg b/training/my_horse2zebra/train_A/n02381460_1423.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a0c16350e93adbe01e049ecc4eb964c7f4dd007 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1423.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1425.jpg b/training/my_horse2zebra/train_A/n02381460_1425.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e631263b8afd677ef32cfe8001b6b5bc06f69b5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1425.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1426.jpg b/training/my_horse2zebra/train_A/n02381460_1426.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9727852493999d15b1f011b0f62eef849d637cd6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1426.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1427.jpg b/training/my_horse2zebra/train_A/n02381460_1427.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ede9fca3fc6d9f1a168cdb362f83ae2cd0d08d7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1427.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1432.jpg b/training/my_horse2zebra/train_A/n02381460_1432.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4aee1ea413ab62ed8d3d7245f4a863f557a52003 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1432.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1435.jpg b/training/my_horse2zebra/train_A/n02381460_1435.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3719c377c5f4fffde06c821dbf75ea23d042e10 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1435.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1439.jpg b/training/my_horse2zebra/train_A/n02381460_1439.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b61d2bfc9aceb3873db2a19100cd6ae163dc20aa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1439.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1458.jpg b/training/my_horse2zebra/train_A/n02381460_1458.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3169e2cbd3e09ed659fec961375a1bb65e2df039 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1458.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1478.jpg b/training/my_horse2zebra/train_A/n02381460_1478.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1eb85535fb9406f699959d97e60a9c32bb213ad8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1478.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1482.jpg b/training/my_horse2zebra/train_A/n02381460_1482.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32da1f4593732a228de7bb33507994a5a6e74f88 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1482.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1484.jpg b/training/my_horse2zebra/train_A/n02381460_1484.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fd702a7a139e1176ad2215ff7f743e7bb8971ed Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1484.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1486.jpg b/training/my_horse2zebra/train_A/n02381460_1486.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6842e0537ed85bd6f47fb146bc38ac47f77fa717 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1486.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1487.jpg b/training/my_horse2zebra/train_A/n02381460_1487.jpg new file mode 100644 index 0000000000000000000000000000000000000000..728d37c23fbb3be141f2d1541249c9b5029c0dd3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1487.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1489.jpg b/training/my_horse2zebra/train_A/n02381460_1489.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f17a4c666dddf0500934c48927bead573a3479b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1489.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1493.jpg b/training/my_horse2zebra/train_A/n02381460_1493.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6c8e04462cd3e878e40f7b2019a571865d6d557 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1493.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1494.jpg b/training/my_horse2zebra/train_A/n02381460_1494.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29856558c5ceb66c93371e3881efe7755535499c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1494.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1498.jpg b/training/my_horse2zebra/train_A/n02381460_1498.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11e0bbce16eea46c909d2e3a26bd2bc3c9a3e089 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1498.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1501.jpg b/training/my_horse2zebra/train_A/n02381460_1501.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e20bc15b08ac34012e428bba1075515e90cd7ada Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1501.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1506.jpg b/training/my_horse2zebra/train_A/n02381460_1506.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7901b435ec2d534fc948a479f12734f45582b5e1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1506.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1507.jpg b/training/my_horse2zebra/train_A/n02381460_1507.jpg new file mode 100644 index 0000000000000000000000000000000000000000..028b9313a8950862650d49b6adc977d9960ae2d3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1507.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1509.jpg b/training/my_horse2zebra/train_A/n02381460_1509.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3514c6ed4304db9aceb2718f57c65270486bbd13 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1509.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1519.jpg b/training/my_horse2zebra/train_A/n02381460_1519.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53ca698758542e08b58a47806852fd4113c81e76 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1519.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1521.jpg b/training/my_horse2zebra/train_A/n02381460_1521.jpg new file mode 100644 index 0000000000000000000000000000000000000000..163c45c274ac4f6350fa94646caa25ce79ec07dd Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1521.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1523.jpg b/training/my_horse2zebra/train_A/n02381460_1523.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73871313b1e5e77ea316b58fc97e95a6c9d0209b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1523.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1524.jpg b/training/my_horse2zebra/train_A/n02381460_1524.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b2519bfa32bd1684747a3cb826ba6a9a1ab297ac Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1524.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1525.jpg b/training/my_horse2zebra/train_A/n02381460_1525.jpg new file mode 100644 index 0000000000000000000000000000000000000000..134dc940c81442fa3431e7796e2270b44f37fed1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1525.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1526.jpg b/training/my_horse2zebra/train_A/n02381460_1526.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c43ac0ea56e1991da6749f7de2d77d54246ef78a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1526.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_153.jpg b/training/my_horse2zebra/train_A/n02381460_153.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3d0573fc8f118417cb9a203c972494ba7e5704f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_153.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1531.jpg b/training/my_horse2zebra/train_A/n02381460_1531.jpg new file mode 100644 index 0000000000000000000000000000000000000000..495597d6b7efe932ca6a686ba00e95e83d103c8e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1531.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1533.jpg b/training/my_horse2zebra/train_A/n02381460_1533.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec60da59b6a8219ba6593349c395354aaf7044b9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1533.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1537.jpg b/training/my_horse2zebra/train_A/n02381460_1537.jpg new file mode 100644 index 0000000000000000000000000000000000000000..219f001b7b60dd89309b32dd45cc24f99b603b42 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1537.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_155.jpg b/training/my_horse2zebra/train_A/n02381460_155.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b080a5e9ced3fbde9b74c1a8381b78495568ca3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_155.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1557.jpg b/training/my_horse2zebra/train_A/n02381460_1557.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f34eb14b31a39d2a5adc26df8ffd8a3d8e49b0e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1557.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1562.jpg b/training/my_horse2zebra/train_A/n02381460_1562.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bedb8c5fd92899a7e473afd634b1c4235c15e91f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1562.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1563.jpg b/training/my_horse2zebra/train_A/n02381460_1563.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f109c5fa6e4ebb0e4d2440494cd89ddde12afc1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1563.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1567.jpg b/training/my_horse2zebra/train_A/n02381460_1567.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1afbc9ccded6474adc993f5a84ac94300e1c6af0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1567.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1573.jpg b/training/my_horse2zebra/train_A/n02381460_1573.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b3e548c375cd10f40622f45acf9cebfdf558055 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1573.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1578.jpg b/training/my_horse2zebra/train_A/n02381460_1578.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac67815ddd3f26644666665b04696018f8af8fd5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1578.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1579.jpg b/training/my_horse2zebra/train_A/n02381460_1579.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4aaea1cbc286a9d530e19d73a6dae3537a604d9f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1579.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1581.jpg b/training/my_horse2zebra/train_A/n02381460_1581.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0bd0d3b0234bb3d2e32e603d6bd614ed0778fa32 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1581.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1583.jpg b/training/my_horse2zebra/train_A/n02381460_1583.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d565cda8fc26e6a3048f4db8ec8b86827cd0ffc7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1583.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1586.jpg b/training/my_horse2zebra/train_A/n02381460_1586.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31130abf34aa7795907325607bf49b008d2d08de Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1586.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1592.jpg b/training/my_horse2zebra/train_A/n02381460_1592.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b606e331d628df2529db53740af1a5ada955dd31 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1592.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1596.jpg b/training/my_horse2zebra/train_A/n02381460_1596.jpg new file mode 100644 index 0000000000000000000000000000000000000000..168ecdcd71dd68a9c44b49bd589140902d496280 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1596.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1602.jpg b/training/my_horse2zebra/train_A/n02381460_1602.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c9bb22b9c4898c76bd381eb3cd5b15effcaee26 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1602.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1612.jpg b/training/my_horse2zebra/train_A/n02381460_1612.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23ed674097e03aff3598b8b4f452d982596e491d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1612.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1614.jpg b/training/my_horse2zebra/train_A/n02381460_1614.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e0577968d87d79430df757d90e2c4909a79291b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1614.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1621.jpg b/training/my_horse2zebra/train_A/n02381460_1621.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4aa43b88a2ffa5da4568f9d99e0baecbd914928 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1621.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1624.jpg b/training/my_horse2zebra/train_A/n02381460_1624.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87438cfcef300c7812497906776cbb11f3b1e6e7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1624.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1635.jpg b/training/my_horse2zebra/train_A/n02381460_1635.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08b45feb22e104e93f147d8f1d59ba4a875dd69e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1635.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1637.jpg b/training/my_horse2zebra/train_A/n02381460_1637.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef479cbdd0589ede53af7b0de13293dba0dd4623 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1637.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1639.jpg b/training/my_horse2zebra/train_A/n02381460_1639.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f94fce0e399673539494e79758e125cc44df4da9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1639.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1645.jpg b/training/my_horse2zebra/train_A/n02381460_1645.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b429f09ce689470588154f4caea8158e469d49a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1645.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1648.jpg b/training/my_horse2zebra/train_A/n02381460_1648.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c366257140e7c49c759a0f3adf0e835b6afeaa0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1648.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1651.jpg b/training/my_horse2zebra/train_A/n02381460_1651.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5efb2cd123c7e985d0df1da89ef94ea8755fdd1f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1651.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1658.jpg b/training/my_horse2zebra/train_A/n02381460_1658.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ffebb9f62aaa324abd13fc3d60c4f1fd996c789 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1658.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1665.jpg b/training/my_horse2zebra/train_A/n02381460_1665.jpg new file mode 100644 index 0000000000000000000000000000000000000000..077aaefc4603ee4cfd11840b301f539a82079844 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1665.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1666.jpg b/training/my_horse2zebra/train_A/n02381460_1666.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bdb9d5f64c1ae80f45eae3c4869c3e85b4dce24e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1666.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1672.jpg b/training/my_horse2zebra/train_A/n02381460_1672.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11b741cda6abdc8445fc00c5a1f10180ce49e932 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1672.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1674.jpg b/training/my_horse2zebra/train_A/n02381460_1674.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e12db0ccb96b4430131662e759bf164eaea2fcd Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1674.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1675.jpg b/training/my_horse2zebra/train_A/n02381460_1675.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fb92d983f44810891431c191a036e902ed70ef3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1675.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1682.jpg b/training/my_horse2zebra/train_A/n02381460_1682.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a8c7c32e0e461657090054868771c9829aca8a3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1682.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1683.jpg b/training/my_horse2zebra/train_A/n02381460_1683.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d365eb2d76164ce0c7568c13773c1eeaf3c9226a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1683.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1686.jpg b/training/my_horse2zebra/train_A/n02381460_1686.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1eaf8f2275b04feb5e88f3c8b06701fceb502410 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1686.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1687.jpg b/training/my_horse2zebra/train_A/n02381460_1687.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4544fb75ca4e7785d644fa6a9016dfdebc944de2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1687.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1696.jpg b/training/my_horse2zebra/train_A/n02381460_1696.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b2833236f2c85cc309441b4b31ab32491b759c04 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1696.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1703.jpg b/training/my_horse2zebra/train_A/n02381460_1703.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91f3ed7adbe9cb10487043ffb9e12de7468a8e71 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1703.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1708.jpg b/training/my_horse2zebra/train_A/n02381460_1708.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c1025dff1804802c03d44d509a1f2355543f63b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1708.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1711.jpg b/training/my_horse2zebra/train_A/n02381460_1711.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e2f28c4a1885c0424365478ab99a93e3edba957 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1711.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1713.jpg b/training/my_horse2zebra/train_A/n02381460_1713.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97428ca4acea9b5b348a41f5fb1cf9bb50f6a265 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1713.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1721.jpg b/training/my_horse2zebra/train_A/n02381460_1721.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4463c332eb7d436e235603325bebb07f17c4625 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1721.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1722.jpg b/training/my_horse2zebra/train_A/n02381460_1722.jpg new file mode 100644 index 0000000000000000000000000000000000000000..651d7ae5e29d7fbdd4a1f1befcba4b03f0f31322 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1722.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1727.jpg b/training/my_horse2zebra/train_A/n02381460_1727.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9786cec0a063fc05db4152ab23d508677c26400 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1727.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1734.jpg b/training/my_horse2zebra/train_A/n02381460_1734.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29b76fdd7619851a29b735f0411d47967cd04ec2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1734.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1736.jpg b/training/my_horse2zebra/train_A/n02381460_1736.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfe960e0e38503a2f032267a9a845d8f64e7cab2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1736.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1743.jpg b/training/my_horse2zebra/train_A/n02381460_1743.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47d0e95455341612e96b3b534f0eafa8f625c876 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1743.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_175.jpg b/training/my_horse2zebra/train_A/n02381460_175.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3506d9281f484e5e75921b21aedd50a10ab1199 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_175.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1751.jpg b/training/my_horse2zebra/train_A/n02381460_1751.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4c838151cbe62e534b55441045a94d7c16479bd Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1751.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1758.jpg b/training/my_horse2zebra/train_A/n02381460_1758.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f67bf31fc95626cc637773f233c2df3f073c32e9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1758.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1761.jpg b/training/my_horse2zebra/train_A/n02381460_1761.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c204b8635dbdf9badbad5830e278e517426d27b1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1761.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1763.jpg b/training/my_horse2zebra/train_A/n02381460_1763.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01fbc1ceb9d9ff0967ff10d0f3a936c8a03432b7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1763.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1766.jpg b/training/my_horse2zebra/train_A/n02381460_1766.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a5c3d9618076a0ec7b40aa180c30847fe897436 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1766.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1769.jpg b/training/my_horse2zebra/train_A/n02381460_1769.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2014013fd7097f89c64235244e9a629b162c6639 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1769.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_177.jpg b/training/my_horse2zebra/train_A/n02381460_177.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aee382a8757c5d145e882c5ae98a53c3f2a67c8b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_177.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1774.jpg b/training/my_horse2zebra/train_A/n02381460_1774.jpg new file mode 100644 index 0000000000000000000000000000000000000000..252f724ad9ddbab729d7f07e6131b9351fe8835b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1774.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_178.jpg b/training/my_horse2zebra/train_A/n02381460_178.jpg new file mode 100644 index 0000000000000000000000000000000000000000..684a8de3f23eeae9ae5c9ebf75e1d0a23ff8585d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_178.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1793.jpg b/training/my_horse2zebra/train_A/n02381460_1793.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36c64637744517d56195c74c8b05e177dc6fad15 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1793.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1796.jpg b/training/my_horse2zebra/train_A/n02381460_1796.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ec6a2de159169600c0e23f69e4c9de361ec0314 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1796.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1798.jpg b/training/my_horse2zebra/train_A/n02381460_1798.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c05aa07149961c25d276ce1e11f9ed986bd8f768 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1798.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1801.jpg b/training/my_horse2zebra/train_A/n02381460_1801.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67e22fa9fc14b9aab549a370b0e92986734cbe95 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1801.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1803.jpg b/training/my_horse2zebra/train_A/n02381460_1803.jpg new file mode 100644 index 0000000000000000000000000000000000000000..408db29ec0796f72ad9f4764c91fe428d64dbeb1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1803.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1804.jpg b/training/my_horse2zebra/train_A/n02381460_1804.jpg new file mode 100644 index 0000000000000000000000000000000000000000..851d14b27a66214f38e64d4c9b2a0b42c4f2eaf7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1804.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1813.jpg b/training/my_horse2zebra/train_A/n02381460_1813.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64fa1888fd827c15255cc68d080763fdd252407f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1813.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1816.jpg b/training/my_horse2zebra/train_A/n02381460_1816.jpg new file mode 100644 index 0000000000000000000000000000000000000000..708256d1c7a0c3db396c35daea8f4b2777b2f790 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1816.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_182.jpg b/training/my_horse2zebra/train_A/n02381460_182.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c86155c69ef5c22fe0f1781cec405ab910ab5aee Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_182.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1834.jpg b/training/my_horse2zebra/train_A/n02381460_1834.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e64df0c313d761a8cf31e35b3acf1bd1fa81cbc9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1834.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1835.jpg b/training/my_horse2zebra/train_A/n02381460_1835.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e7e9cfe99c35eb2369cd33724743870b379d779 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1835.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1847.jpg b/training/my_horse2zebra/train_A/n02381460_1847.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da5709ff02cb443f5a90e6f885e3a4e42c6efb9d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1847.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1852.jpg b/training/my_horse2zebra/train_A/n02381460_1852.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3dcdb4451dd1d53a27e1735e12b019708d2cecd7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1852.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1855.jpg b/training/my_horse2zebra/train_A/n02381460_1855.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e8076505e1759e1e3d5ef320094f3aa0d3a1dcd1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1855.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1856.jpg b/training/my_horse2zebra/train_A/n02381460_1856.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d50651f4cb8e1718ba90b22eb82b4616d90a028d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1856.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_186.jpg b/training/my_horse2zebra/train_A/n02381460_186.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99b7e1cb1e46b5e9080479e5cd273c217b741871 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_186.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1862.jpg b/training/my_horse2zebra/train_A/n02381460_1862.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ec13873b96b1f2393ecd981b3e195cd27e53a13 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1862.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1865.jpg b/training/my_horse2zebra/train_A/n02381460_1865.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4eb04369cf0624bf132602c9ac96fdf663384ee Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1865.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1872.jpg b/training/my_horse2zebra/train_A/n02381460_1872.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae55f5ead4ca890fd2f60133c175de40592304ad Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1872.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1874.jpg b/training/my_horse2zebra/train_A/n02381460_1874.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84de0ec79cfe763ea5cc297abd2f9981d2a1e04c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1874.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1888.jpg b/training/my_horse2zebra/train_A/n02381460_1888.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe8546f07dc407591ff1aca591168c8851f66742 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1888.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_19.jpg b/training/my_horse2zebra/train_A/n02381460_19.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de2146852cbfb319da7d511bea162e9886fabe34 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_19.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1901.jpg b/training/my_horse2zebra/train_A/n02381460_1901.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7a6714fc4e881aee4498a8f650b5297381fe607 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1901.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1904.jpg b/training/my_horse2zebra/train_A/n02381460_1904.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38fa7b5e55c6b8940e6665d77dfe3bd87a3e357e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1904.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1905.jpg b/training/my_horse2zebra/train_A/n02381460_1905.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3c97a6f50f406f91dbfdfd81339899a0be04759 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1905.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1909.jpg b/training/my_horse2zebra/train_A/n02381460_1909.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93d0395143e5c3e64952d5b30972e3770f6c34b2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1909.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1915.jpg b/training/my_horse2zebra/train_A/n02381460_1915.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cc3d344a0da169be31ef7eada3913e094c2bfcf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1915.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1916.jpg b/training/my_horse2zebra/train_A/n02381460_1916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1519d53216b0a9073228098e90de28715fffb206 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1916.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1921.jpg b/training/my_horse2zebra/train_A/n02381460_1921.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2dc2387f5d6e134e4547d7f71d879bd2873ca1e9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1921.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1937.jpg b/training/my_horse2zebra/train_A/n02381460_1937.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f308764a64d511fa8da0a839adcba9a7e2ae908 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1937.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1939.jpg b/training/my_horse2zebra/train_A/n02381460_1939.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5bd9d056031a02b42d4805b8d2c0933699385b47 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1939.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1941.jpg b/training/my_horse2zebra/train_A/n02381460_1941.jpg new file mode 100644 index 0000000000000000000000000000000000000000..416f3635ef52733454d7e13a0b89cb2dfcf28cb3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1941.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_195.jpg b/training/my_horse2zebra/train_A/n02381460_195.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6340c821ae513abbab2390413b76ae99a3847c67 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_195.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1952.jpg b/training/my_horse2zebra/train_A/n02381460_1952.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a472ab925b6373c6800e28e4f730b97de454fb3d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1952.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1957.jpg b/training/my_horse2zebra/train_A/n02381460_1957.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5960deb9a3965bd958cee0115dc53d24658c5db1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1957.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1959.jpg b/training/my_horse2zebra/train_A/n02381460_1959.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0364d179db03cf4eb6450a197358c8300652a340 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1959.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_196.jpg b/training/my_horse2zebra/train_A/n02381460_196.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7da2a2d1df1f2421b14882ac44a8cd447c0fd20 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_196.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1973.jpg b/training/my_horse2zebra/train_A/n02381460_1973.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0fb434013b5641bc3df5a0c49a3c413d6ac5b59 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1973.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1978.jpg b/training/my_horse2zebra/train_A/n02381460_1978.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4846d2d8e2f4d60c1972f149b19c1c054365ba1f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1978.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1979.jpg b/training/my_horse2zebra/train_A/n02381460_1979.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60c76bd2ee9d39324baa007eabdd469273164020 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1979.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1981.jpg b/training/my_horse2zebra/train_A/n02381460_1981.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a37e03975d4d69cce626f0ea52990e5e396a5d7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1981.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_199.jpg b/training/my_horse2zebra/train_A/n02381460_199.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8614d1f40ca051259e3823b510785ec695f10c5a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_199.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1991.jpg b/training/my_horse2zebra/train_A/n02381460_1991.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c69fbcc96dec46dc61a63d0eafd6e41be629025 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1991.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1992.jpg b/training/my_horse2zebra/train_A/n02381460_1992.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f3ff17c0e02d03b762180a776f7592ca8549d8d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1992.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_1995.jpg b/training/my_horse2zebra/train_A/n02381460_1995.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd5cc71c4a217ceda3c4bc51c1517601240bec3e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_1995.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2.jpg b/training/my_horse2zebra/train_A/n02381460_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2cdc1df3bb1d5b04758e42bd7f596a66e031d666 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2012.jpg b/training/my_horse2zebra/train_A/n02381460_2012.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a67b0ca03e3d9b887305cef223f106a76fcf8bc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2012.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2014.jpg b/training/my_horse2zebra/train_A/n02381460_2014.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abff9954d9163c6fd0f71f389f1a3776b7972a3b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2014.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2016.jpg b/training/my_horse2zebra/train_A/n02381460_2016.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e41a15fc6bf2cba1df71d2460c52ceb1cd20406 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2016.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2019.jpg b/training/my_horse2zebra/train_A/n02381460_2019.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57866681ee75a1f99acf7b308ff05a54ae05d46e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2019.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_202.jpg b/training/my_horse2zebra/train_A/n02381460_202.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8fb6822c15bafa4af32bd23570b933444ade11dc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_202.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2023.jpg b/training/my_horse2zebra/train_A/n02381460_2023.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb3446078ffc5eaaef61fa6fecfad00722c1dc10 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2023.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2027.jpg b/training/my_horse2zebra/train_A/n02381460_2027.jpg new file mode 100644 index 0000000000000000000000000000000000000000..032a520786b6de21b6a0e6d7de20729e09361cd5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2027.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_203.jpg b/training/my_horse2zebra/train_A/n02381460_203.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae60e66ff066421d5e728720259c9193797d84f4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_203.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2032.jpg b/training/my_horse2zebra/train_A/n02381460_2032.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ff0ab3d9ff8372e2b45a789f724ceee2d03f48a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2032.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2043.jpg b/training/my_horse2zebra/train_A/n02381460_2043.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5cf387b53a51a54b4576fde7d45a41920af3e82e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2043.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2045.jpg b/training/my_horse2zebra/train_A/n02381460_2045.jpg new file mode 100644 index 0000000000000000000000000000000000000000..56ce1e8add948d0ea4347191fcc1661e2bfa4145 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2045.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2048.jpg b/training/my_horse2zebra/train_A/n02381460_2048.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a7d52f98e3cb2d0317217c57b8aa98ac32b8734b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2048.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2049.jpg b/training/my_horse2zebra/train_A/n02381460_2049.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1803c9deb617be6a8e034910752b6c240d29de26 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2049.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2056.jpg b/training/my_horse2zebra/train_A/n02381460_2056.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9ea5494a19c8ee9839108cd7605a56be44ad1e8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2056.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2061.jpg b/training/my_horse2zebra/train_A/n02381460_2061.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e36bed412bdf35e56c7539281fa766e6d6e2263f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2061.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2083.jpg b/training/my_horse2zebra/train_A/n02381460_2083.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c6e01df88c31691d878baa0e3b63ce5c0729b0f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2083.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2085.jpg b/training/my_horse2zebra/train_A/n02381460_2085.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d6bcab6dcd4578c6f6bec04dc4278544afc35d7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2085.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2089.jpg b/training/my_horse2zebra/train_A/n02381460_2089.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27c9df4fffba3802b054a793dbc04187e4b0b780 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2089.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2091.jpg b/training/my_horse2zebra/train_A/n02381460_2091.jpg new file mode 100644 index 0000000000000000000000000000000000000000..052325c1284d3ef8760a47b8950522c3b3c76c16 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2091.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2093.jpg b/training/my_horse2zebra/train_A/n02381460_2093.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8af134b34da7bc8d364b6e72ce9de6a0fe12a0e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2093.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2103.jpg b/training/my_horse2zebra/train_A/n02381460_2103.jpg new file mode 100644 index 0000000000000000000000000000000000000000..15f483d0df09d2c6ae1ab61d4742b7ee6102d608 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2103.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2109.jpg b/training/my_horse2zebra/train_A/n02381460_2109.jpg new file mode 100644 index 0000000000000000000000000000000000000000..affd38a65f8fa8a9d0a8ca21d54984cec9bfaedc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2109.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_211.jpg b/training/my_horse2zebra/train_A/n02381460_211.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9b86920a055da8459e478e58f8877ae86a62dfb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_211.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2116.jpg b/training/my_horse2zebra/train_A/n02381460_2116.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea9d7cc89dee1ac26bf8d347382230cf33b62763 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2116.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2139.jpg b/training/my_horse2zebra/train_A/n02381460_2139.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d94ec1b6da13a3ade6e37d9ee58fa7ea6e823827 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2139.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2141.jpg b/training/my_horse2zebra/train_A/n02381460_2141.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7606d9c4896018d87af33e5ce1769c12ae51158 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2141.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2149.jpg b/training/my_horse2zebra/train_A/n02381460_2149.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf3e42a8c18e9ab0db4dacb0b3fee7f8007925e0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2149.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2152.jpg b/training/my_horse2zebra/train_A/n02381460_2152.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96d0d5f80482334bc6207bc83ef34559d923fcdc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2152.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2177.jpg b/training/my_horse2zebra/train_A/n02381460_2177.jpg new file mode 100644 index 0000000000000000000000000000000000000000..888e807eee8698d49a83a3f1e364d0a1df263975 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2177.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2179.jpg b/training/my_horse2zebra/train_A/n02381460_2179.jpg new file mode 100644 index 0000000000000000000000000000000000000000..385354b030830a40d76e39e85832886c6a7ea388 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2179.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2181.jpg b/training/my_horse2zebra/train_A/n02381460_2181.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a225d571e0990bcf9b99f7f7d179f8db67f20524 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2181.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2192.jpg b/training/my_horse2zebra/train_A/n02381460_2192.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ce1ec23498df5be033145b98aace4318b50ddb1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2192.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2198.jpg b/training/my_horse2zebra/train_A/n02381460_2198.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd0898e3f7c4865f7efcd4315fb3745f29c8acd7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2198.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2217.jpg b/training/my_horse2zebra/train_A/n02381460_2217.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6258652464a4ec75b245613c0ffb8d66e332d677 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2217.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_222.jpg b/training/my_horse2zebra/train_A/n02381460_222.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d78e14701a8faf4e0f300ff952bbe1fde56828bf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_222.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2222.jpg b/training/my_horse2zebra/train_A/n02381460_2222.jpg new file mode 100644 index 0000000000000000000000000000000000000000..015c66dde2ec34a53172ebd20eb39d9b0c3aa43b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2222.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2223.jpg b/training/my_horse2zebra/train_A/n02381460_2223.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c37c069e5cd61ac08bb8d7c19ab46b7c04f514df Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2223.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2225.jpg b/training/my_horse2zebra/train_A/n02381460_2225.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35de40b71726fbe8ff9fc71a575832cc92fd7189 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2225.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2226.jpg b/training/my_horse2zebra/train_A/n02381460_2226.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff78fd6b2efce2f47b2e5300b2424133fea6a32e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2226.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_223.jpg b/training/my_horse2zebra/train_A/n02381460_223.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27c782b850cb8707a0a468b1f5cbc9f849613c0d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_223.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2245.jpg b/training/my_horse2zebra/train_A/n02381460_2245.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3683e7fdb369580542bef2d3d88a16bf41a7797a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2245.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2259.jpg b/training/my_horse2zebra/train_A/n02381460_2259.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ff71ad60240a2e5fcfc6b0c3f7b23a1bc3afa53 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2259.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2261.jpg b/training/my_horse2zebra/train_A/n02381460_2261.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f58bbb38563275cebb316b891e078dd38115b44 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2261.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2268.jpg b/training/my_horse2zebra/train_A/n02381460_2268.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab57d2f9f49b4d6c1977efba0579f3d1c5f92fda Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2268.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2269.jpg b/training/my_horse2zebra/train_A/n02381460_2269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af373ac2735b67f2ad3dc964012465d301220b32 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2269.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2275.jpg b/training/my_horse2zebra/train_A/n02381460_2275.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5cdfb7889f88b417feb224a61bbd96d1f1989f4c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2275.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2276.jpg b/training/my_horse2zebra/train_A/n02381460_2276.jpg new file mode 100644 index 0000000000000000000000000000000000000000..257c1abe376430af7b7901b9869f8d68948f3fd8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2276.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2282.jpg b/training/my_horse2zebra/train_A/n02381460_2282.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63949050fbaf828b2963f952b09d10b3488abae1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2282.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2289.jpg b/training/my_horse2zebra/train_A/n02381460_2289.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00ec4e47b8bb4a6e3d51287de0618af4511cf679 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2289.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2294.jpg b/training/my_horse2zebra/train_A/n02381460_2294.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ce45173aa73b0cb13672adcd509a514b27053db Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2294.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2305.jpg b/training/my_horse2zebra/train_A/n02381460_2305.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d0edd3d571b76e6538c068651f967e2939d28c8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2305.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2306.jpg b/training/my_horse2zebra/train_A/n02381460_2306.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0df55fb4c76acd649a0b1cdb2b571615c1cf491 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2306.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2317.jpg b/training/my_horse2zebra/train_A/n02381460_2317.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c5ae63d781de411da9244ed701aa495d54c29c4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2317.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2325.jpg b/training/my_horse2zebra/train_A/n02381460_2325.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53e39bef99b3060410e9ffef8daa95e45613a25c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2325.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2327.jpg b/training/my_horse2zebra/train_A/n02381460_2327.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9080d1cf2f64875b9377a7d5a36e04eaf4d03e1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2327.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2339.jpg b/training/my_horse2zebra/train_A/n02381460_2339.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f98ca881c62b488e8c288c1d9749e22cad3d55f6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2339.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2341.jpg b/training/my_horse2zebra/train_A/n02381460_2341.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97a94f6a200656748f7bc0ea82c5df80522b4aea Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2341.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2349.jpg b/training/my_horse2zebra/train_A/n02381460_2349.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cac108cab2ba793f352a1007382e60f1cfffbd9c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2349.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_235.jpg b/training/my_horse2zebra/train_A/n02381460_235.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a06ca271c7faff81697b4893a724eb0c8ad77ceb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_235.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_236.jpg b/training/my_horse2zebra/train_A/n02381460_236.jpg new file mode 100644 index 0000000000000000000000000000000000000000..072b6e5f461aed440d164487eac499672f7b6d6a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_236.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2366.jpg b/training/my_horse2zebra/train_A/n02381460_2366.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d10d998f23abc06bea3d7f10b54377bfb032cd6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2366.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2371.jpg b/training/my_horse2zebra/train_A/n02381460_2371.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f33acef441b8e1387f956633f97fca8e53c8cde9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2371.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2374.jpg b/training/my_horse2zebra/train_A/n02381460_2374.jpg new file mode 100644 index 0000000000000000000000000000000000000000..54305d86ad71d5844d68127222beb22360d783b8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2374.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_238.jpg b/training/my_horse2zebra/train_A/n02381460_238.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fee04a70fcab1bbc07f110b92155e365d4a0e48e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_238.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_24.jpg b/training/my_horse2zebra/train_A/n02381460_24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..798c2804afdc3a703b0bd89814bb3c8b7778090f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_24.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2402.jpg b/training/my_horse2zebra/train_A/n02381460_2402.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca78e98497662c1ba09465ddc2b4e3906f4ae63a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2402.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2403.jpg b/training/my_horse2zebra/train_A/n02381460_2403.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b053452e58ade025b25e8bc4c655abd50ee3c6de Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2403.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2411.jpg b/training/my_horse2zebra/train_A/n02381460_2411.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61eb46051b1cf524d7101ab9483e742129cc5abb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2411.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2412.jpg b/training/my_horse2zebra/train_A/n02381460_2412.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3043726ee22b64cc232bf5b584ed414c01992a0c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2412.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2414.jpg b/training/my_horse2zebra/train_A/n02381460_2414.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6160376de4c4fe02fc1ffa37befcb8cf994a3239 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2414.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2419.jpg b/training/my_horse2zebra/train_A/n02381460_2419.jpg new file mode 100644 index 0000000000000000000000000000000000000000..054f4259571e8716130728939d3810991d22cb92 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2419.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_242.jpg b/training/my_horse2zebra/train_A/n02381460_242.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21d793e4a3163d632093e986349ed7a65fb70664 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_242.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2421.jpg b/training/my_horse2zebra/train_A/n02381460_2421.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e06c14f0188aff6733d02041f64049a3e464dfe0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2421.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2425.jpg b/training/my_horse2zebra/train_A/n02381460_2425.jpg new file mode 100644 index 0000000000000000000000000000000000000000..56b50c4a1387646b300bb9c3ba1773867dc52558 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2425.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2433.jpg b/training/my_horse2zebra/train_A/n02381460_2433.jpg new file mode 100644 index 0000000000000000000000000000000000000000..432aff85fd3731d27464089dc9827d77c8bc83b0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2433.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2444.jpg b/training/my_horse2zebra/train_A/n02381460_2444.jpg new file mode 100644 index 0000000000000000000000000000000000000000..960684c3de6711504e21bd89c848f93cdf5915c5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2444.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2446.jpg b/training/my_horse2zebra/train_A/n02381460_2446.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67594375a4685d2f8e99522aa6be5601b1ac1953 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2446.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2449.jpg b/training/my_horse2zebra/train_A/n02381460_2449.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c19ad7b21029e0bc8ddad886114858089038508 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2449.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2462.jpg b/training/my_horse2zebra/train_A/n02381460_2462.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b236bcac6954ee404033cc66f011ba10df2f2cd2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2462.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2465.jpg b/training/my_horse2zebra/train_A/n02381460_2465.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3377e7c6b08841b884c91c0266df75aa9f5259e9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2465.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2468.jpg b/training/my_horse2zebra/train_A/n02381460_2468.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a216365d2a5fb60c56d810ba7eabf0d2ae8f145 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2468.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2474.jpg b/training/my_horse2zebra/train_A/n02381460_2474.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f9cdf86ad4ec806562c8a10c9569d22ae6efd1f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2474.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2476.jpg b/training/my_horse2zebra/train_A/n02381460_2476.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec0dac9b7958f8a906f57aa05e4f62b898f8e675 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2476.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2484.jpg b/training/my_horse2zebra/train_A/n02381460_2484.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50eb185b4fa7a767ee0e0c495bdb8bef7f7c1afd Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2484.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2488.jpg b/training/my_horse2zebra/train_A/n02381460_2488.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a63552931d4c75622519fcfd0b05bcbd8e91e8c7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2488.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_249.jpg b/training/my_horse2zebra/train_A/n02381460_249.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bdd72a22a5ac31f19c6e59362c741aaec4de6c6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_249.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2496.jpg b/training/my_horse2zebra/train_A/n02381460_2496.jpg new file mode 100644 index 0000000000000000000000000000000000000000..befd6015899e238248874c67cbb5f13c52a34fd3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2496.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2499.jpg b/training/my_horse2zebra/train_A/n02381460_2499.jpg new file mode 100644 index 0000000000000000000000000000000000000000..225bd2b5859cfed5fce591fa15e3a2f23d36f44e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2499.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2503.jpg b/training/my_horse2zebra/train_A/n02381460_2503.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa3728eeac3d8eea5a4d284730a661a300bb8bb1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2503.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2509.jpg b/training/my_horse2zebra/train_A/n02381460_2509.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8d9c5e4ae65cfe170722f095f859723f6dedcb0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2509.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2514.jpg b/training/my_horse2zebra/train_A/n02381460_2514.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86c76f07b8ca7d38cabfa52e98612e5210abb0f9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2514.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2517.jpg b/training/my_horse2zebra/train_A/n02381460_2517.jpg new file mode 100644 index 0000000000000000000000000000000000000000..659719e60cd7ddbe577d430a5a090616909c74d0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2517.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2525.jpg b/training/my_horse2zebra/train_A/n02381460_2525.jpg new file mode 100644 index 0000000000000000000000000000000000000000..394dade6c3262f933fb9164ac8760e4530ec19b3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2525.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2528.jpg b/training/my_horse2zebra/train_A/n02381460_2528.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ec9d831e7fd4f827252353f55a88b4e5985d827 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2528.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2539.jpg b/training/my_horse2zebra/train_A/n02381460_2539.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba60d88e7dbe0caa7afca4ce003134252f02be6d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2539.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2548.jpg b/training/my_horse2zebra/train_A/n02381460_2548.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b00eaa259d96677c492cce8098f0d13a142c94eb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2548.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_255.jpg b/training/my_horse2zebra/train_A/n02381460_255.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c8cd6e6d9e6dea51487c7da1175b243e3f628fa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_255.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2552.jpg b/training/my_horse2zebra/train_A/n02381460_2552.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69eaefc431d8666d83ee25e7c5e79afe6ed77959 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2552.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2555.jpg b/training/my_horse2zebra/train_A/n02381460_2555.jpg new file mode 100644 index 0000000000000000000000000000000000000000..248333a8052e6001c6551cbc0534b2c960ea54d6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2555.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2563.jpg b/training/my_horse2zebra/train_A/n02381460_2563.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6444cd6c15b06be67bda32bd4f3ab5f4bed2907c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2563.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2564.jpg b/training/my_horse2zebra/train_A/n02381460_2564.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d861a7228dabb929c98300fc550a6205883e600 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2564.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2565.jpg b/training/my_horse2zebra/train_A/n02381460_2565.jpg new file mode 100644 index 0000000000000000000000000000000000000000..666dfd5655ed85e0cfba1a35f3c39b91f904ca2e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2565.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2572.jpg b/training/my_horse2zebra/train_A/n02381460_2572.jpg new file mode 100644 index 0000000000000000000000000000000000000000..468576a0919e1a000c6ec4b2e668b22f56212258 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2572.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2575.jpg b/training/my_horse2zebra/train_A/n02381460_2575.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be81c48171b6fe25baae00dca7a0d1c738f29208 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2575.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2578.jpg b/training/my_horse2zebra/train_A/n02381460_2578.jpg new file mode 100644 index 0000000000000000000000000000000000000000..733086eaa64518744109d815aa3163208ff291d0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2578.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2581.jpg b/training/my_horse2zebra/train_A/n02381460_2581.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92852c69d8d65e0215368285fd14eb987c0e3794 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2581.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2594.jpg b/training/my_horse2zebra/train_A/n02381460_2594.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e37766a0aadabaee19fa5b371dd36e98e69c358 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2594.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2596.jpg b/training/my_horse2zebra/train_A/n02381460_2596.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c127cf2214e5a53a97c4a7945e651ad41812503 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2596.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2598.jpg b/training/my_horse2zebra/train_A/n02381460_2598.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92aa204812fc531a2885cba9c93f288708789e54 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2598.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2605.jpg b/training/my_horse2zebra/train_A/n02381460_2605.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e149362659e00389cf71ba6fb91fbaf1513ffe10 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2605.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2612.jpg b/training/my_horse2zebra/train_A/n02381460_2612.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f189eb05c7d6f921bc0fa8ad0c3fb9381b3063d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2612.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2615.jpg b/training/my_horse2zebra/train_A/n02381460_2615.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c68256a4ce90cbfba1af99b7fc8a1cb5217c20b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2615.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2627.jpg b/training/my_horse2zebra/train_A/n02381460_2627.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e2730628a56cb906a7dc26c0bcc7f4d68eca9b8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2627.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2632.jpg b/training/my_horse2zebra/train_A/n02381460_2632.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bdd0b19074a6d36924fffb9f148b8c4908aa86aa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2632.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2635.jpg b/training/my_horse2zebra/train_A/n02381460_2635.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e267ef5216fbd0d1d4d91aa361e03e4de751de0d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2635.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2643.jpg b/training/my_horse2zebra/train_A/n02381460_2643.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc4998b31f90c121ccf340d112767fd0b9007bcb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2643.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2649.jpg b/training/my_horse2zebra/train_A/n02381460_2649.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1487bdd83c20dea3da1a71debba59a55133f0a4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2649.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2684.jpg b/training/my_horse2zebra/train_A/n02381460_2684.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12de229c5440a4810f9feb94bf169cd7efb790ef Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2684.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2685.jpg b/training/my_horse2zebra/train_A/n02381460_2685.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0fd88654b71d7a6722fbbee7637a984e75bcaeb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2685.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2695.jpg b/training/my_horse2zebra/train_A/n02381460_2695.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1dfc63d690072a9d7e0f21ab770ed58171e6e0cc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2695.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2699.jpg b/training/my_horse2zebra/train_A/n02381460_2699.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab0cfe96f8535d16d0e9c4aef9553a725424a32c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2699.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_27.jpg b/training/my_horse2zebra/train_A/n02381460_27.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02d3a7e13c2848487a8fe500635f49770848bda8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_27.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2703.jpg b/training/my_horse2zebra/train_A/n02381460_2703.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5e1a8783dcfeec389b0dd06dd30aa598f0cc5b6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2703.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2706.jpg b/training/my_horse2zebra/train_A/n02381460_2706.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecf03353b812f9f33c37cba3caa68be352000532 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2706.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2708.jpg b/training/my_horse2zebra/train_A/n02381460_2708.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cb33eb6476ade87c17d92fcbb0bcb76d6c3998c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2708.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2714.jpg b/training/my_horse2zebra/train_A/n02381460_2714.jpg new file mode 100644 index 0000000000000000000000000000000000000000..503b593018941a5b9492aa83d71471949485ac7e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2714.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2726.jpg b/training/my_horse2zebra/train_A/n02381460_2726.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b20a3dcc285427b0cb63b4fc7756cfd8afedf18 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2726.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2732.jpg b/training/my_horse2zebra/train_A/n02381460_2732.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be4d3ca83ba42124ac417216796869c80605faf7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2732.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2736.jpg b/training/my_horse2zebra/train_A/n02381460_2736.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f3731a1d68b80ba3610c30272c18dbe758e90a3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2736.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_274.jpg b/training/my_horse2zebra/train_A/n02381460_274.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c46e47d8b065a00f6fa0bdda549beced371c1be Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_274.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2741.jpg b/training/my_horse2zebra/train_A/n02381460_2741.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffbf548172948b466f79b1235192746bd78e0117 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2741.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2751.jpg b/training/my_horse2zebra/train_A/n02381460_2751.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e78398036464784681fc01c207897b4055b167cd Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2751.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2753.jpg b/training/my_horse2zebra/train_A/n02381460_2753.jpg new file mode 100644 index 0000000000000000000000000000000000000000..934cbe0ead16fb1d10c5b8cf9187ceb1313c2fd3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2753.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2754.jpg b/training/my_horse2zebra/train_A/n02381460_2754.jpg new file mode 100644 index 0000000000000000000000000000000000000000..047ad4114232fe98114626cb197a1f3c1781ceff Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2754.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2755.jpg b/training/my_horse2zebra/train_A/n02381460_2755.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8fe8b59874c56edfc548b41f43159b3e0e8f8c9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2755.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2758.jpg b/training/my_horse2zebra/train_A/n02381460_2758.jpg new file mode 100644 index 0000000000000000000000000000000000000000..edc6e15e66bdb64bf2912d40a102a8cbabae4dae Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2758.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_276.jpg b/training/my_horse2zebra/train_A/n02381460_276.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f4a7b81dcb8b2513eff78e2867d92a801fd902e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_276.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2779.jpg b/training/my_horse2zebra/train_A/n02381460_2779.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b13d0727ac1ec85fff50f2e97cc5b8a6cf444d0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2779.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_278.jpg b/training/my_horse2zebra/train_A/n02381460_278.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f15c96d7a5d1d3b0aec566950ffb955663b2fae Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_278.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2783.jpg b/training/my_horse2zebra/train_A/n02381460_2783.jpg new file mode 100644 index 0000000000000000000000000000000000000000..41cd10bbebabd7a6327fe12cc7a3a21a08337943 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2783.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2788.jpg b/training/my_horse2zebra/train_A/n02381460_2788.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22e476d65d8d612bc4e2332aa8873f0de9ae5287 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2788.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2793.jpg b/training/my_horse2zebra/train_A/n02381460_2793.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db2c52a9badfc1993c6450f13a92e5273fbbbf7f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2793.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2795.jpg b/training/my_horse2zebra/train_A/n02381460_2795.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e54c38c4072861eb5c457730c2b850d6306e3a62 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2795.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2796.jpg b/training/my_horse2zebra/train_A/n02381460_2796.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e9dfb01e98fb1905f1c2fbe8d7d0936fa782ebd Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2796.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2799.jpg b/training/my_horse2zebra/train_A/n02381460_2799.jpg new file mode 100644 index 0000000000000000000000000000000000000000..074bff3387bcede582c2f65a6612acaa8950aae5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2799.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2802.jpg b/training/my_horse2zebra/train_A/n02381460_2802.jpg new file mode 100644 index 0000000000000000000000000000000000000000..307484b31a269710bbc8599c2385e20c1acb38b9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2802.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2806.jpg b/training/my_horse2zebra/train_A/n02381460_2806.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97165a851a397a446c99f78c5d1b35ffc2a789d8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2806.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2811.jpg b/training/my_horse2zebra/train_A/n02381460_2811.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0fbd4ace8b92a001dc0551d530d99b866c21c699 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2811.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2822.jpg b/training/my_horse2zebra/train_A/n02381460_2822.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8021cabc8b9005d2b80e48a1fdcef7ece8e5ee8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2822.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2834.jpg b/training/my_horse2zebra/train_A/n02381460_2834.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff9b8994c2e109b11dbcf86e824d558bd5f95a40 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2834.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2835.jpg b/training/my_horse2zebra/train_A/n02381460_2835.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0886d26c9d5c6c19ee8730e9244ad2ba4eb72515 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2835.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2848.jpg b/training/my_horse2zebra/train_A/n02381460_2848.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f7f6c00ff64d6952f67b4a1240a73b7fbe1880c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2848.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_285.jpg b/training/my_horse2zebra/train_A/n02381460_285.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87b4c74ebc7a6db9772112f540551e8206f958f1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_285.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2872.jpg b/training/my_horse2zebra/train_A/n02381460_2872.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c10f74f7834d2747efa1f717da1d82b1507ef68d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2872.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2878.jpg b/training/my_horse2zebra/train_A/n02381460_2878.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba02b9ab7181438e2ba074a3705bf9902eefadaa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2878.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2879.jpg b/training/my_horse2zebra/train_A/n02381460_2879.jpg new file mode 100644 index 0000000000000000000000000000000000000000..233d7422d84c197aa1b49475da318234375c5e0a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2879.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2883.jpg b/training/my_horse2zebra/train_A/n02381460_2883.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50781803da075a4a6b14596e01903a683ae13f24 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2883.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2921.jpg b/training/my_horse2zebra/train_A/n02381460_2921.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfcaf81c0f88b52d16937c737747297fd8565ef6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2921.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2929.jpg b/training/my_horse2zebra/train_A/n02381460_2929.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3403add8be625149b56add677367fec7cea92d45 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2929.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2936.jpg b/training/my_horse2zebra/train_A/n02381460_2936.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34967b601a3413bfe281fc922efc4ae2ffdb0a3a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2936.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2951.jpg b/training/my_horse2zebra/train_A/n02381460_2951.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b572609c53b7d98acae14c37f098a3446f24108f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2951.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2953.jpg b/training/my_horse2zebra/train_A/n02381460_2953.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e2280006f5abacffb38eed318c659c3168be10b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2953.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2967.jpg b/training/my_horse2zebra/train_A/n02381460_2967.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ebc352c2b9ea51ed5c18d6760d4c06537fbf520c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2967.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2968.jpg b/training/my_horse2zebra/train_A/n02381460_2968.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5eb5b2f6d1104aa5a7d70aa0d24b3eddb9fefdef Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2968.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2985.jpg b/training/my_horse2zebra/train_A/n02381460_2985.jpg new file mode 100644 index 0000000000000000000000000000000000000000..985ddd1d49bdcfaeda31205cecbad31c248ef82f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2985.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_299.jpg b/training/my_horse2zebra/train_A/n02381460_299.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a101d2f793d7059592f703f256085528cf0c10d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_299.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_2995.jpg b/training/my_horse2zebra/train_A/n02381460_2995.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30498760d7eace817204ad687e001108b9ca7780 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_2995.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3001.jpg b/training/my_horse2zebra/train_A/n02381460_3001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed4fe6adaec3dd40c3b41b78cc6d691d1ccefae2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3001.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3018.jpg b/training/my_horse2zebra/train_A/n02381460_3018.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93c9333a51a3428961989d3d40de7092e442bb8a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3018.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3028.jpg b/training/my_horse2zebra/train_A/n02381460_3028.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0cf0b66a356603dc4cb67ffd772db75365423fa4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3028.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3051.jpg b/training/my_horse2zebra/train_A/n02381460_3051.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ceee3213dab7f0ade4869ba64aae0f9901a10a6a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3051.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_306.jpg b/training/my_horse2zebra/train_A/n02381460_306.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2de4b234850406245d9758f79490313ab17670d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_306.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3064.jpg b/training/my_horse2zebra/train_A/n02381460_3064.jpg new file mode 100644 index 0000000000000000000000000000000000000000..faeafbd54a8a714d362ea8111a82f1758cb3f4c7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3064.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3065.jpg b/training/my_horse2zebra/train_A/n02381460_3065.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52f15c0836fc5964d45b975ea9771b69eae0ce03 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3065.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3066.jpg b/training/my_horse2zebra/train_A/n02381460_3066.jpg new file mode 100644 index 0000000000000000000000000000000000000000..784518ec2bb2dc871b52d40cca30fc409fe4dafb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3066.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3075.jpg b/training/my_horse2zebra/train_A/n02381460_3075.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae02848e746db5b551d139afa87f87ec449fe3c1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3075.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3081.jpg b/training/my_horse2zebra/train_A/n02381460_3081.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77b6e95c228d4e2916247cc9dff7701b59f6395c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3081.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3085.jpg b/training/my_horse2zebra/train_A/n02381460_3085.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddd29f3c00d2ea56cf506dde19ba11e480a3c9de Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3085.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3091.jpg b/training/my_horse2zebra/train_A/n02381460_3091.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43a061d1348317946142c939804573d2730bcdc4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3091.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3107.jpg b/training/my_horse2zebra/train_A/n02381460_3107.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86c0c8b2af9f85ce2efa6b93037293e8108f9e08 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3107.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3108.jpg b/training/my_horse2zebra/train_A/n02381460_3108.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8742987648250f9e5e3c326d7769b01cc9c234a0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3108.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_311.jpg b/training/my_horse2zebra/train_A/n02381460_311.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81417ce75f75d86fe2c06458fa3be288dbd8043d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_311.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3113.jpg b/training/my_horse2zebra/train_A/n02381460_3113.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7152b1f7058401626e9c45fba2bda629f6df6fae Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3113.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3115.jpg b/training/my_horse2zebra/train_A/n02381460_3115.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf2f94655993f9e37521159bcced7d63094e2a3f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3115.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_314.jpg b/training/my_horse2zebra/train_A/n02381460_314.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e8a6e3a853946727771c7a1799af31271643b22 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_314.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3149.jpg b/training/my_horse2zebra/train_A/n02381460_3149.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c2accca8936cfdcac0e936eff01200f0c746627 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3149.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3175.jpg b/training/my_horse2zebra/train_A/n02381460_3175.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05f7243ccd7a00553bca02d08e294fd47122818a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3175.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3182.jpg b/training/my_horse2zebra/train_A/n02381460_3182.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5256460f4eff34849edac972d5345723603eb3c3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3182.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3192.jpg b/training/my_horse2zebra/train_A/n02381460_3192.jpg new file mode 100644 index 0000000000000000000000000000000000000000..029c9bf8febded929fce94b909cfecfe944a6582 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3192.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3211.jpg b/training/my_horse2zebra/train_A/n02381460_3211.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98f41e90f67e1838e8873ed2ab042d9b3d33de57 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3211.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3212.jpg b/training/my_horse2zebra/train_A/n02381460_3212.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfbefb3a39b726ac5f8c25414085c06d9ca99036 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3212.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_322.jpg b/training/my_horse2zebra/train_A/n02381460_322.jpg new file mode 100644 index 0000000000000000000000000000000000000000..41314e51b86c746d0a836c0d6ecb955c21749dff Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_322.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3221.jpg b/training/my_horse2zebra/train_A/n02381460_3221.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f5012b185e37a944cc757507adcb6189c850de2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3221.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3222.jpg b/training/my_horse2zebra/train_A/n02381460_3222.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3edfcdd7af3d20b6d01f4f6ad7ed6bdf83ef12b3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3222.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3226.jpg b/training/my_horse2zebra/train_A/n02381460_3226.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e69704b432361ce8d5ee9923bd44ac999ddb9b48 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3226.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3228.jpg b/training/my_horse2zebra/train_A/n02381460_3228.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0928d63745a3b4f3cb9cb648502058722babcb53 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3228.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3229.jpg b/training/my_horse2zebra/train_A/n02381460_3229.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf3ea8d56648efe120c9d41507257fde228a961d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3229.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_323.jpg b/training/my_horse2zebra/train_A/n02381460_323.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67ea460b3f439e6a90058e5caeeac9dc9c171a45 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_323.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3255.jpg b/training/my_horse2zebra/train_A/n02381460_3255.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07f585ba655d16d04df1523fc72140b662212a4b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3255.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3265.jpg b/training/my_horse2zebra/train_A/n02381460_3265.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5da56b2ef7e6a8f40815494233721c4fc0db28d6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3265.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_328.jpg b/training/my_horse2zebra/train_A/n02381460_328.jpg new file mode 100644 index 0000000000000000000000000000000000000000..865862d56f3eca1b4d840e22852ce03f6d27d683 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_328.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3283.jpg b/training/my_horse2zebra/train_A/n02381460_3283.jpg new file mode 100644 index 0000000000000000000000000000000000000000..914a2d86d1767e04a2d2dd80086145a8030b6e3d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3283.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3286.jpg b/training/my_horse2zebra/train_A/n02381460_3286.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da8f93df1923195482d6214a5385f6183ee79818 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3286.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3299.jpg b/training/my_horse2zebra/train_A/n02381460_3299.jpg new file mode 100644 index 0000000000000000000000000000000000000000..feb470df7155cfc7e2e9ab5769e96f19f63e0343 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3299.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3309.jpg b/training/my_horse2zebra/train_A/n02381460_3309.jpg new file mode 100644 index 0000000000000000000000000000000000000000..596efa516a5698e82cb28e97ac5e1d388265670d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3309.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_331.jpg b/training/my_horse2zebra/train_A/n02381460_331.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68918f2c71680c22c643f2e8486fd913871cb64f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_331.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3315.jpg b/training/my_horse2zebra/train_A/n02381460_3315.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4b696034ccbbeedc2f878e92d8a855bad659a0d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3315.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3329.jpg b/training/my_horse2zebra/train_A/n02381460_3329.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d21c6dae9fa2478ca9be367938a3b4812c7cbc81 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3329.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3336.jpg b/training/my_horse2zebra/train_A/n02381460_3336.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9edd51290ca9a0e6772b3b167a4f1c842496a4b0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3336.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3346.jpg b/training/my_horse2zebra/train_A/n02381460_3346.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18965500640786d4d61b142d5f8a5a23b143693d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3346.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3348.jpg b/training/my_horse2zebra/train_A/n02381460_3348.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b40aa2e4c6fedaf340b6351f4605108162baec5a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3348.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3353.jpg b/training/my_horse2zebra/train_A/n02381460_3353.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b56b19e4d24f871c385344e8aa1182c6e60b7ae Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3353.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3354.jpg b/training/my_horse2zebra/train_A/n02381460_3354.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f0daa9262fd94a02adb6ee0d991a04d1f8c9e9d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3354.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3355.jpg b/training/my_horse2zebra/train_A/n02381460_3355.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9be91d92bd2603eeb5bfeaeb03982a7cc8f80d10 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3355.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3358.jpg b/training/my_horse2zebra/train_A/n02381460_3358.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80f02a4bb7931f9087b8eba7d5ed77856e13ac1c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3358.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3363.jpg b/training/my_horse2zebra/train_A/n02381460_3363.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c8df5eb0696fb743433968686bd7a542150d698 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3363.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3365.jpg b/training/my_horse2zebra/train_A/n02381460_3365.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99a5ea98be07e98f78e274ef16c47ce808b946d1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3365.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3366.jpg b/training/my_horse2zebra/train_A/n02381460_3366.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19bba7dda935c819be78e259d0810cd92d1e2626 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3366.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3369.jpg b/training/my_horse2zebra/train_A/n02381460_3369.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fa68bfd1ad8f4fa0b2d2c6fa114e4ef22d15ba9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3369.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3371.jpg b/training/my_horse2zebra/train_A/n02381460_3371.jpg new file mode 100644 index 0000000000000000000000000000000000000000..555c45dadefbca7c0e409969dd04c076b1879395 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3371.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3383.jpg b/training/my_horse2zebra/train_A/n02381460_3383.jpg new file mode 100644 index 0000000000000000000000000000000000000000..965a0e66c4f0047a236611781d42094fe65b4322 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3383.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3393.jpg b/training/my_horse2zebra/train_A/n02381460_3393.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cc5fbce515aeae6b93a4f15547d1717713e7796 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3393.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3394.jpg b/training/my_horse2zebra/train_A/n02381460_3394.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09b6a0bfa3a4fdc8295b855485967492a0b7b1d1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3394.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3395.jpg b/training/my_horse2zebra/train_A/n02381460_3395.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e3235af047fe8313134af2254ef2a0c7289f59a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3395.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3398.jpg b/training/my_horse2zebra/train_A/n02381460_3398.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4297399a83ba412794dc0b305d117212e4b3ea76 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3398.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3412.jpg b/training/my_horse2zebra/train_A/n02381460_3412.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69bca325d082b5c9db8919a61d6aea1f1eaa8382 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3412.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3417.jpg b/training/my_horse2zebra/train_A/n02381460_3417.jpg new file mode 100644 index 0000000000000000000000000000000000000000..335b2a27d3327b14eb180f683e47cca49d4e983e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3417.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3424.jpg b/training/my_horse2zebra/train_A/n02381460_3424.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0c49ce12268494cf02eb00b4b32f52ba09de82d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3424.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3438.jpg b/training/my_horse2zebra/train_A/n02381460_3438.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f279f306ea431d483072b6ddbbe90c0f705223d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3438.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3442.jpg b/training/my_horse2zebra/train_A/n02381460_3442.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb2235601b9627ca99d5c7c78f5e426c5fb8eba8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3442.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3447.jpg b/training/my_horse2zebra/train_A/n02381460_3447.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0444224e6322f5a5a5d0ce1588268dcc4fe3c090 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3447.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3449.jpg b/training/my_horse2zebra/train_A/n02381460_3449.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d041425d02252b9ce196ed58c34b8715a30807bc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3449.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3466.jpg b/training/my_horse2zebra/train_A/n02381460_3466.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c61e4a65c389b531ab64ee2e1986b1002338dee Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3466.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3469.jpg b/training/my_horse2zebra/train_A/n02381460_3469.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cc3184c5c1898a05bbf8efd6a7b9a4893660452 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3469.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3483.jpg b/training/my_horse2zebra/train_A/n02381460_3483.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a83cc26e0290d90b0856764c296906acc56cbbb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3483.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3509.jpg b/training/my_horse2zebra/train_A/n02381460_3509.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86b28b136048bc935e92a496dd97b43a5ddb0c27 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3509.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3512.jpg b/training/my_horse2zebra/train_A/n02381460_3512.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6660f7f182ea965886087e6f44a6b29d20099bb7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3512.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3526.jpg b/training/my_horse2zebra/train_A/n02381460_3526.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d48ff87c31e2042277fca0583ecf9f14ee213ba6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3526.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3546.jpg b/training/my_horse2zebra/train_A/n02381460_3546.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe4498e240b992e9218c8691c6ae5d2002cba1b5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3546.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3548.jpg b/training/my_horse2zebra/train_A/n02381460_3548.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5964e7b35f74a4b459db9712abc90de1b19d3c74 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3548.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3551.jpg b/training/my_horse2zebra/train_A/n02381460_3551.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df182b6b5924d1711886758405dd37fd91370e06 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3551.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3556.jpg b/training/my_horse2zebra/train_A/n02381460_3556.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5a0290ef20518697c379f1dea53a724ff0d72ef Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3556.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3557.jpg b/training/my_horse2zebra/train_A/n02381460_3557.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf9aba592304c054b163f51b402cc9c728a8eecb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3557.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3563.jpg b/training/my_horse2zebra/train_A/n02381460_3563.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89a54b89508b896e838717fd8817fa02984e44da Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3563.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3566.jpg b/training/my_horse2zebra/train_A/n02381460_3566.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4065eb745f500b7986450d735353e9e795cb5ecf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3566.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_357.jpg b/training/my_horse2zebra/train_A/n02381460_357.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c650c7f00f74967ceeeb329eed4e862338d8361b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_357.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3577.jpg b/training/my_horse2zebra/train_A/n02381460_3577.jpg new file mode 100644 index 0000000000000000000000000000000000000000..846ed90c0d956f9121039c36e018d8fcb4453543 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3577.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_358.jpg b/training/my_horse2zebra/train_A/n02381460_358.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd12efd7dd7c96b5262c8b6d3e5e846346148cde Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_358.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3588.jpg b/training/my_horse2zebra/train_A/n02381460_3588.jpg new file mode 100644 index 0000000000000000000000000000000000000000..138f1bf4a991ff9365c521fadbcc229f81ea5eaa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3588.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_36.jpg b/training/my_horse2zebra/train_A/n02381460_36.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efd520acdf0c32b3f45fd7434460e20b1d4e7833 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_36.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3601.jpg b/training/my_horse2zebra/train_A/n02381460_3601.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ea547a8284fa59a84cd9185f92a96d5f63ca4e7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3601.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3605.jpg b/training/my_horse2zebra/train_A/n02381460_3605.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea618275aee84a2a7c90214a8773d76eac181f41 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3605.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3611.jpg b/training/my_horse2zebra/train_A/n02381460_3611.jpg new file mode 100644 index 0000000000000000000000000000000000000000..585360828b7877c81c22e96c95f33a1fd6b9b3ef Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3611.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3619.jpg b/training/my_horse2zebra/train_A/n02381460_3619.jpg new file mode 100644 index 0000000000000000000000000000000000000000..daf933169d232d77662dc1ff4e3de40be27a0b98 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3619.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3638.jpg b/training/my_horse2zebra/train_A/n02381460_3638.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44052684a4eb41f1ad2d6ce0d08564f795dd8aa5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3638.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3656.jpg b/training/my_horse2zebra/train_A/n02381460_3656.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db91716e770c676dd12ed426d5e0a05747cc39e0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3656.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3658.jpg b/training/my_horse2zebra/train_A/n02381460_3658.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2db9316dd303868155f4c9aa329c47c3b010ffe2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3658.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3659.jpg b/training/my_horse2zebra/train_A/n02381460_3659.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f45f1c9516771263b66ee58ae1fb0a02eac3b60f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3659.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3661.jpg b/training/my_horse2zebra/train_A/n02381460_3661.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f0528a9d6708dc4468bb3a97799272402c43adf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3661.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3664.jpg b/training/my_horse2zebra/train_A/n02381460_3664.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0f890bed338965241a89e47390b23b49f76dfc8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3664.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3685.jpg b/training/my_horse2zebra/train_A/n02381460_3685.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91de8e0f752e5c4fbcfd27366fdafbe3d00b6a52 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3685.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3694.jpg b/training/my_horse2zebra/train_A/n02381460_3694.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e35c8955f9ec0b5178ef580817cfe622bd72152 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3694.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3702.jpg b/training/my_horse2zebra/train_A/n02381460_3702.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f33d2acdd23e9bbde1fb016ab52f8cdcf822bb7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3702.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3707.jpg b/training/my_horse2zebra/train_A/n02381460_3707.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26a35beddc8abd9994c62eba3179349100f2dcaf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3707.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3712.jpg b/training/my_horse2zebra/train_A/n02381460_3712.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64c1c74056a7707e5300314fd26dff7bdaeed84b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3712.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3732.jpg b/training/my_horse2zebra/train_A/n02381460_3732.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b9110981e522c71d275310f918a152895302ea8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3732.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3746.jpg b/training/my_horse2zebra/train_A/n02381460_3746.jpg new file mode 100644 index 0000000000000000000000000000000000000000..528959ef56c182e8ccb2589603b6b6bd45ce1c75 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3746.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3754.jpg b/training/my_horse2zebra/train_A/n02381460_3754.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d77bfe2123b6df3ece47a35776f2bc88bd08ad28 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3754.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_376.jpg b/training/my_horse2zebra/train_A/n02381460_376.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5df82a1b445418db1056ef0c0a50e9821456320e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_376.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3783.jpg b/training/my_horse2zebra/train_A/n02381460_3783.jpg new file mode 100644 index 0000000000000000000000000000000000000000..744b4c16add2b0ed7248e8cdd513199a7994d697 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3783.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3803.jpg b/training/my_horse2zebra/train_A/n02381460_3803.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2b1f1a30fef6f8e4b88164af2ae1af265627a84 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3803.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_381.jpg b/training/my_horse2zebra/train_A/n02381460_381.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd5bb814c3a1af65c8d612d37e69d1295f7a3318 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_381.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3811.jpg b/training/my_horse2zebra/train_A/n02381460_3811.jpg new file mode 100644 index 0000000000000000000000000000000000000000..085400c8df6f090e32b989310b0c93251760698c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3811.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3827.jpg b/training/my_horse2zebra/train_A/n02381460_3827.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d146a33e3ad786902ba26849a13301cfbf82760 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3827.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3829.jpg b/training/my_horse2zebra/train_A/n02381460_3829.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8e31e45875e383e6536778b324fce9dfd15d43c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3829.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3838.jpg b/training/my_horse2zebra/train_A/n02381460_3838.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8fc880d588c98ea78f5da5fbf6e672baceed463c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3838.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_384.jpg b/training/my_horse2zebra/train_A/n02381460_384.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1071162cfe4444d4f8f940db327fff25282c68b3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_384.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3842.jpg b/training/my_horse2zebra/train_A/n02381460_3842.jpg new file mode 100644 index 0000000000000000000000000000000000000000..424f46b78ca8beaa3a5cdb88c4442b36de28eb47 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3842.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3854.jpg b/training/my_horse2zebra/train_A/n02381460_3854.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfcaf81c0f88b52d16937c737747297fd8565ef6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3854.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3857.jpg b/training/my_horse2zebra/train_A/n02381460_3857.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5098c359368c3e0e1b8f18fc72a0eef333982b17 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3857.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_386.jpg b/training/my_horse2zebra/train_A/n02381460_386.jpg new file mode 100644 index 0000000000000000000000000000000000000000..931a4fd2edc3aab910177196cac792dec8af76e2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_386.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3861.jpg b/training/my_horse2zebra/train_A/n02381460_3861.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c3abcd53e715c81da821b66e4f6e3ca9b14d96d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3861.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3875.jpg b/training/my_horse2zebra/train_A/n02381460_3875.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f46861f8ed3a29efd94f728d7d7359626dcf943 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3875.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3897.jpg b/training/my_horse2zebra/train_A/n02381460_3897.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2959090d1c0c9a8c93c5381d7dd251a8a0ca2a71 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3897.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3902.jpg b/training/my_horse2zebra/train_A/n02381460_3902.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d066d9a761ee05cb64329f998bd848571b102224 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3902.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3903.jpg b/training/my_horse2zebra/train_A/n02381460_3903.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df2ad8c0c3a12f96f8590585bfcd1c57beafc43e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3903.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3905.jpg b/training/my_horse2zebra/train_A/n02381460_3905.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e267ef5216fbd0d1d4d91aa361e03e4de751de0d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3905.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_391.jpg b/training/my_horse2zebra/train_A/n02381460_391.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0da73c1f964f753ab920a669b662a58f7f5be57 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_391.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3911.jpg b/training/my_horse2zebra/train_A/n02381460_3911.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f7088885c9ae46e9cbe50d459883df5b34710a9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3911.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3924.jpg b/training/my_horse2zebra/train_A/n02381460_3924.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ab4489d39a60578af5bda92144b6fa334da6553 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3924.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3928.jpg b/training/my_horse2zebra/train_A/n02381460_3928.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5f6c49891c486a7d1b830a35c525b7d03387012 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3928.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_393.jpg b/training/my_horse2zebra/train_A/n02381460_393.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d74a8477270cb929bbc4647921532fe10c2b917b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_393.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3935.jpg b/training/my_horse2zebra/train_A/n02381460_3935.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca6af7fb030b8b1e502ffb2f8009b252838726d6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3935.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_394.jpg b/training/my_horse2zebra/train_A/n02381460_394.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab9fd09dcc6981782cf5075a22805e0e4336ef31 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_394.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3942.jpg b/training/my_horse2zebra/train_A/n02381460_3942.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ece11774463b2826bd1fe229a087245364a6c59 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3942.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3946.jpg b/training/my_horse2zebra/train_A/n02381460_3946.jpg new file mode 100644 index 0000000000000000000000000000000000000000..470047cf4e944e1d3f2aa4713e194f2f40cdf36a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3946.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_395.jpg b/training/my_horse2zebra/train_A/n02381460_395.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8fb0e0816648856f209d1e03ab307803c377e85f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_395.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3956.jpg b/training/my_horse2zebra/train_A/n02381460_3956.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b67f065153c57a5c092924d51f2e8d5f9365fcbf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3956.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_396.jpg b/training/my_horse2zebra/train_A/n02381460_396.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f8226d6e5a88728f84ebc2cc6aa13424dce676c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_396.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3965.jpg b/training/my_horse2zebra/train_A/n02381460_3965.jpg new file mode 100644 index 0000000000000000000000000000000000000000..551325f86153026369eeedb3f61e9301c1c0253c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3965.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_398.jpg b/training/my_horse2zebra/train_A/n02381460_398.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9eb1b717cee9f25bf2b8f4f57961a79b16ec4338 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_398.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3982.jpg b/training/my_horse2zebra/train_A/n02381460_3982.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c13d4d95e385590a4e7082da7ecca467bafc75d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3982.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3984.jpg b/training/my_horse2zebra/train_A/n02381460_3984.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b78520da4f26ac8f4f65990fa9a0651ce079a40f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3984.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3989.jpg b/training/my_horse2zebra/train_A/n02381460_3989.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67b35778a4832b43750df99b080b975f095c7f48 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3989.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3995.jpg b/training/my_horse2zebra/train_A/n02381460_3995.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30b9f30e38f3aaeec221f918fda1df77a4c21877 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3995.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_3997.jpg b/training/my_horse2zebra/train_A/n02381460_3997.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4381b1e8b43c2edcc0947eeebf92fdfc714d9cc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_3997.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4008.jpg b/training/my_horse2zebra/train_A/n02381460_4008.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9fd3d2160a79a20733f602bf4d5aa970a3637f62 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4008.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4009.jpg b/training/my_horse2zebra/train_A/n02381460_4009.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34cf8f315403b84ee49ceb6ecdec2bdd7688c195 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4009.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4018.jpg b/training/my_horse2zebra/train_A/n02381460_4018.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc6bfc689f669cda11e364a8bf3cc72a7737b90c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4018.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4019.jpg b/training/my_horse2zebra/train_A/n02381460_4019.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04479de101bbcc8208d5cc4aeada3e78d9254706 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4019.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4053.jpg b/training/my_horse2zebra/train_A/n02381460_4053.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36c357f3a9b284652603327cf57cc74ded3dc615 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4053.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4055.jpg b/training/my_horse2zebra/train_A/n02381460_4055.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff4e11c77c1dca39ec2fb317c6efd342faeafbdf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4055.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4059.jpg b/training/my_horse2zebra/train_A/n02381460_4059.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85561f5196f8aaf5c339b425203302e338b053f9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4059.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4079.jpg b/training/my_horse2zebra/train_A/n02381460_4079.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c9752286c510e00b9e94cbdff52ee35f20fb694 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4079.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4081.jpg b/training/my_horse2zebra/train_A/n02381460_4081.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fc3a580685adb3b2f66d9b6196081c67157ea24 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4081.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4084.jpg b/training/my_horse2zebra/train_A/n02381460_4084.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9553534813413c5b028647e6e36e3379537575e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4084.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4086.jpg b/training/my_horse2zebra/train_A/n02381460_4086.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77788f1356c9f1d48426bbeef793517db297ba5e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4086.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4094.jpg b/training/my_horse2zebra/train_A/n02381460_4094.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61f0cd49ac79d913209b2d94ac759ea99d57291d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4094.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4096.jpg b/training/my_horse2zebra/train_A/n02381460_4096.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50b4d7afbf3cd3a73bc356403c21f84ab25b5ec6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4096.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4103.jpg b/training/my_horse2zebra/train_A/n02381460_4103.jpg new file mode 100644 index 0000000000000000000000000000000000000000..422ca5578037235c2b17ef1ebac040bdfcf297f2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4103.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4107.jpg b/training/my_horse2zebra/train_A/n02381460_4107.jpg new file mode 100644 index 0000000000000000000000000000000000000000..855e83b80015565324700776d80e10b2b81b147c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4107.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_411.jpg b/training/my_horse2zebra/train_A/n02381460_411.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7cc385a5db9be6017ffcc866098c755f6e1f116 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_411.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4112.jpg b/training/my_horse2zebra/train_A/n02381460_4112.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f5ce5db3a1374db219d868fab76f5e77b997ce3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4112.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4117.jpg b/training/my_horse2zebra/train_A/n02381460_4117.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0fc8bd8f628add9cb9618eba6a197543c4dd7c7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4117.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4118.jpg b/training/my_horse2zebra/train_A/n02381460_4118.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bf9d351a963305161f6b472126a2b355a125051 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4118.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4123.jpg b/training/my_horse2zebra/train_A/n02381460_4123.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ac6e47e1106272f42bf97020f5b402461672f04 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4123.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4125.jpg b/training/my_horse2zebra/train_A/n02381460_4125.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ad803f68e7a9891ea037d0f4b2fb728498f3ad9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4125.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4136.jpg b/training/my_horse2zebra/train_A/n02381460_4136.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc164b042de9c74ce7d3ac1b24ebea80de4bb59e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4136.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4141.jpg b/training/my_horse2zebra/train_A/n02381460_4141.jpg new file mode 100644 index 0000000000000000000000000000000000000000..080ddabcfdfd99bb8c170059a8f340f74173199a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4141.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4146.jpg b/training/my_horse2zebra/train_A/n02381460_4146.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df50c9cf364930e6d43f0ee35e194963be667af5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4146.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4151.jpg b/training/my_horse2zebra/train_A/n02381460_4151.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfb33f134abd18870bfa52f6872e36cf00b664c6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4151.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4153.jpg b/training/my_horse2zebra/train_A/n02381460_4153.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09a28ecc6d8bdf1500193b9b0dc8c95b9f563ca7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4153.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4159.jpg b/training/my_horse2zebra/train_A/n02381460_4159.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e4d80b0af421b1499b54ca9eb0b74d145032933 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4159.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4168.jpg b/training/my_horse2zebra/train_A/n02381460_4168.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed0e11c4f9ba6b0eb0fcd66c7b85de19bba97617 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4168.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4169.jpg b/training/my_horse2zebra/train_A/n02381460_4169.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6728328fc494c7b99a9b1ed2f43125c1ca8ab1d0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4169.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4181.jpg b/training/my_horse2zebra/train_A/n02381460_4181.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92a85d2e1528daf9a371f83baba97bd2e9ce1b63 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4181.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_419.jpg b/training/my_horse2zebra/train_A/n02381460_419.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed293ad3a6e7f1a8f9d049cd03b09f4d0443470d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_419.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4195.jpg b/training/my_horse2zebra/train_A/n02381460_4195.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fafb55edd8b576e641a619e9db04dce434db81bb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4195.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_421.jpg b/training/my_horse2zebra/train_A/n02381460_421.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cccc718decd90023fc8e5f9adeef68f445c41b7e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_421.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4219.jpg b/training/my_horse2zebra/train_A/n02381460_4219.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4868761887c4390c2144e91cd31a7cfae5824b5f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4219.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_422.jpg b/training/my_horse2zebra/train_A/n02381460_422.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3561129e0a4877b636bbdbcd91d4866978b7b3c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_422.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4228.jpg b/training/my_horse2zebra/train_A/n02381460_4228.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c63d5a3d8532c5161d133379ccb58b392883c17f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4228.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4231.jpg b/training/my_horse2zebra/train_A/n02381460_4231.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99a69ca7cfac9bc942132815cf9cfeaa6eda9419 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4231.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4239.jpg b/training/my_horse2zebra/train_A/n02381460_4239.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3bdbc6ff3bfd3b4121e7ac501467429268057b2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4239.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_424.jpg b/training/my_horse2zebra/train_A/n02381460_424.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7b11fdf5e62009bcdfeb90b8bf73816a5f63093 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_424.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4242.jpg b/training/my_horse2zebra/train_A/n02381460_4242.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a24831335b77b68cb326998268af2135a1bf2372 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4242.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4251.jpg b/training/my_horse2zebra/train_A/n02381460_4251.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f4d7e789e19f05a0c55201836a76913f5d416ba Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4251.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4263.jpg b/training/my_horse2zebra/train_A/n02381460_4263.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8496f71ed5c3aac16b71c8e68568d79237935924 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4263.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4276.jpg b/training/my_horse2zebra/train_A/n02381460_4276.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d388a17d53a2058d5876f3b62b6c683a30b64adb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4276.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4294.jpg b/training/my_horse2zebra/train_A/n02381460_4294.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c12b0adb8bb18b095620f37b673ac1658a0c9366 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4294.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4305.jpg b/training/my_horse2zebra/train_A/n02381460_4305.jpg new file mode 100644 index 0000000000000000000000000000000000000000..761e623cf70be2c659df847743983f0a2d6938c7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4305.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4307.jpg b/training/my_horse2zebra/train_A/n02381460_4307.jpg new file mode 100644 index 0000000000000000000000000000000000000000..729292954f83b56687918eefbcd935cdd3ca6c7b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4307.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4312.jpg b/training/my_horse2zebra/train_A/n02381460_4312.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7817e722bfe4ea19486c6a91929c1148831f2625 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4312.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4324.jpg b/training/my_horse2zebra/train_A/n02381460_4324.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e1e468afa6aa9b3429c47b523595192cfd72f1c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4324.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4331.jpg b/training/my_horse2zebra/train_A/n02381460_4331.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a8ea6f8f3ce1a460f11540370368aba6fdfa3ce Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4331.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4338.jpg b/training/my_horse2zebra/train_A/n02381460_4338.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d502fc782265eedce79a91a9b84143b354d1edce Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4338.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4347.jpg b/training/my_horse2zebra/train_A/n02381460_4347.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c04773bf07f4103e5f6a35076bbd190bc3609384 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4347.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4348.jpg b/training/my_horse2zebra/train_A/n02381460_4348.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b50805fd5d106ca458d9ebaba56ac02c5b40d40b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4348.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4361.jpg b/training/my_horse2zebra/train_A/n02381460_4361.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b37e7705800a8bada922d4dcd6787fd9fc4c7f52 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4361.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_437.jpg b/training/my_horse2zebra/train_A/n02381460_437.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05d9876dc7a8645442167cea2e1e0a2f6c081699 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_437.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4371.jpg b/training/my_horse2zebra/train_A/n02381460_4371.jpg new file mode 100644 index 0000000000000000000000000000000000000000..339690fdb1a83ea1b98cde1cc559fa783b8f64d5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4371.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4372.jpg b/training/my_horse2zebra/train_A/n02381460_4372.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8e7c9071bba5686fb59f842b6732e7c98f3da8b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4372.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4373.jpg b/training/my_horse2zebra/train_A/n02381460_4373.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a019ec1b309d4b529fff94a47f2c752d0c39f583 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4373.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4374.jpg b/training/my_horse2zebra/train_A/n02381460_4374.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecb4bea263cfab5738aaf683cfbb0e7b24979162 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4374.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4376.jpg b/training/my_horse2zebra/train_A/n02381460_4376.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6fd85043bb3bdbed9c48f185bc5bb59efee6d09d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4376.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4385.jpg b/training/my_horse2zebra/train_A/n02381460_4385.jpg new file mode 100644 index 0000000000000000000000000000000000000000..055ece973408a9abd4499a1638a28a2486f315dc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4385.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4395.jpg b/training/my_horse2zebra/train_A/n02381460_4395.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8b41a08031e2e701abf2dd0af7043e05737329b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4395.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4396.jpg b/training/my_horse2zebra/train_A/n02381460_4396.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00e2a1a73102cd1b3a0b887af8f793b9f3c5f095 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4396.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4397.jpg b/training/my_horse2zebra/train_A/n02381460_4397.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f70e6a799477acdcab146ec3546ed8bbf6afbf21 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4397.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4401.jpg b/training/my_horse2zebra/train_A/n02381460_4401.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8998e518ab9a4e18c6cc6ec8c1fe4528b785205 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4401.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4402.jpg b/training/my_horse2zebra/train_A/n02381460_4402.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df657a8991f70475c01dfc74b34ff603c38d8189 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4402.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4403.jpg b/training/my_horse2zebra/train_A/n02381460_4403.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0440423bd11e2586ae77e4b2083d0603554e8a6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4403.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4407.jpg b/training/my_horse2zebra/train_A/n02381460_4407.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cec226d9e95089494aad92f54e7cec659689533 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4407.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4412.jpg b/training/my_horse2zebra/train_A/n02381460_4412.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecd47c6794e6441865ef862cc76ff1cd3bdb73c9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4412.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4413.jpg b/training/my_horse2zebra/train_A/n02381460_4413.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58a7b9f56a1e5a43a7ef9aea07d8391b9081280e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4413.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4415.jpg b/training/my_horse2zebra/train_A/n02381460_4415.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7707c05e403c82e7601912b1d5b1a4683a3fe81 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4415.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4417.jpg b/training/my_horse2zebra/train_A/n02381460_4417.jpg new file mode 100644 index 0000000000000000000000000000000000000000..153591c8b07c6a9107604d2725741ac78e7bba72 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4417.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4425.jpg b/training/my_horse2zebra/train_A/n02381460_4425.jpg new file mode 100644 index 0000000000000000000000000000000000000000..41c0dda48fb9559532afc7206cae147781aa20a9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4425.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4429.jpg b/training/my_horse2zebra/train_A/n02381460_4429.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb69a75c9d253fddf4be1eb530aaf08199853da2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4429.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4434.jpg b/training/my_horse2zebra/train_A/n02381460_4434.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60dc8d64b346372d722e688ab462bda878905e7e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4434.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4446.jpg b/training/my_horse2zebra/train_A/n02381460_4446.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4488c59abe36226fb89baa27e4a45f292638b114 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4446.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4447.jpg b/training/my_horse2zebra/train_A/n02381460_4447.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91b7a4c5655b0ea85eab4c8e1645df45a9931ab6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4447.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4453.jpg b/training/my_horse2zebra/train_A/n02381460_4453.jpg new file mode 100644 index 0000000000000000000000000000000000000000..845de74a78cd95ae5ad69cf86c53b6cfefd11190 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4453.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4456.jpg b/training/my_horse2zebra/train_A/n02381460_4456.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fb67835e069f1b18fce172a1f9e2d8e81f13c1d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4456.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4465.jpg b/training/my_horse2zebra/train_A/n02381460_4465.jpg new file mode 100644 index 0000000000000000000000000000000000000000..685a5747c6fa34360112c3fc672fe546539626bc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4465.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4467.jpg b/training/my_horse2zebra/train_A/n02381460_4467.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19733690b2e0eed936b8c5fc274d981a0d5aac5c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4467.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4472.jpg b/training/my_horse2zebra/train_A/n02381460_4472.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00807b8fe21ba21596a7130280721b4415a96b60 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4472.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4473.jpg b/training/my_horse2zebra/train_A/n02381460_4473.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f988af6c4a2e5fa76e747853f88476bcd1a13027 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4473.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4474.jpg b/training/my_horse2zebra/train_A/n02381460_4474.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6864d2a8c6fae572d27734251425465134a16a46 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4474.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4476.jpg b/training/my_horse2zebra/train_A/n02381460_4476.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88a551074c00eb49a8a225ff9c098df54e093a09 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4476.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4482.jpg b/training/my_horse2zebra/train_A/n02381460_4482.jpg new file mode 100644 index 0000000000000000000000000000000000000000..043670283af5ae9ab5c0fac1d87f2be663459c03 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4482.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4483.jpg b/training/my_horse2zebra/train_A/n02381460_4483.jpg new file mode 100644 index 0000000000000000000000000000000000000000..71547ad056409b111239e3dc0f4368a34a2d8504 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4483.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4491.jpg b/training/my_horse2zebra/train_A/n02381460_4491.jpg new file mode 100644 index 0000000000000000000000000000000000000000..250381abbc817b95daaf79ca88cca18f4c6f2288 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4491.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4493.jpg b/training/my_horse2zebra/train_A/n02381460_4493.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fe25461a7b69c0cc6d87e641a45b7b02223c865 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4493.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4494.jpg b/training/my_horse2zebra/train_A/n02381460_4494.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20cda6096ec3503d4c46271a3f7f73f6428ce83c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4494.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4497.jpg b/training/my_horse2zebra/train_A/n02381460_4497.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e6ac9b68b1734bba0bf8800949dfa100f688ba6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4497.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4501.jpg b/training/my_horse2zebra/train_A/n02381460_4501.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85eafa38c322bd58c05752fdb33734328b03b532 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4501.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4502.jpg b/training/my_horse2zebra/train_A/n02381460_4502.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4b4a89fb0546bd8070166e3308c1c94e60f0817 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4502.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_451.jpg b/training/my_horse2zebra/train_A/n02381460_451.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ebe6d27c7e62e700e0fe845780f9bdf3e5e1b8b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_451.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4513.jpg b/training/my_horse2zebra/train_A/n02381460_4513.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3853ec0897c659a4a27b24d67c2ad131efc68bb2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4513.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4515.jpg b/training/my_horse2zebra/train_A/n02381460_4515.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e2a887b67dc88bce138561250b5e4cbd0c3c486 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4515.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4516.jpg b/training/my_horse2zebra/train_A/n02381460_4516.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b14861609b9b74992a1f4495fcb5247be3bebe2f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4516.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_452.jpg b/training/my_horse2zebra/train_A/n02381460_452.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14a21e1a6969cfdeaa11c38b781c3902488da3f0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_452.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4521.jpg b/training/my_horse2zebra/train_A/n02381460_4521.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d45a6f8678d13145a50e51a0f2a079437c95d79 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4521.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4523.jpg b/training/my_horse2zebra/train_A/n02381460_4523.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e9832068ad9ed94d39630f67b72946b0eea8eda Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4523.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4528.jpg b/training/my_horse2zebra/train_A/n02381460_4528.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96a86a8a22ae4353b0d6583773dce5d206490667 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4528.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4529.jpg b/training/my_horse2zebra/train_A/n02381460_4529.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b694b6f32e49e9c9a6d3b4297371f017aaf1d37 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4529.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4536.jpg b/training/my_horse2zebra/train_A/n02381460_4536.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ed3e46a8ffa55754e457659e75500dc749daede Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4536.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4538.jpg b/training/my_horse2zebra/train_A/n02381460_4538.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9bb394bb0424f2ddf96df8f003cbb981b4b1a7bd Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4538.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_454.jpg b/training/my_horse2zebra/train_A/n02381460_454.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31f1e23768ba30b58acafec6e802031d66e46adc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_454.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4541.jpg b/training/my_horse2zebra/train_A/n02381460_4541.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60af584b014acf56a3ce39af10e9299753358cca Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4541.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4542.jpg b/training/my_horse2zebra/train_A/n02381460_4542.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97ac973aa7683e02e47472d2fb2bf5f54d08e628 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4542.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4543.jpg b/training/my_horse2zebra/train_A/n02381460_4543.jpg new file mode 100644 index 0000000000000000000000000000000000000000..660ad1eeff5795aa1dcde1fb97061739812fa782 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4543.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4551.jpg b/training/my_horse2zebra/train_A/n02381460_4551.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5634f689042ea550ad9a3acfc2da3caadf6f726 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4551.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4566.jpg b/training/my_horse2zebra/train_A/n02381460_4566.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d65c728c934c099dcedc2acf653999aa14044426 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4566.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4571.jpg b/training/my_horse2zebra/train_A/n02381460_4571.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9e8860d947038867d56cd35acce51cc4ace40e2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4571.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4572.jpg b/training/my_horse2zebra/train_A/n02381460_4572.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be296da7f072c38c25c22dad69b82bbd8a59b0fe Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4572.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4585.jpg b/training/my_horse2zebra/train_A/n02381460_4585.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1fa737e56ce1bc86a03f8de844e2cfba73d626e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4585.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4593.jpg b/training/my_horse2zebra/train_A/n02381460_4593.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b86d97f5695fc5d89f5a1660d1bbc6e882cf3be Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4593.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4597.jpg b/training/my_horse2zebra/train_A/n02381460_4597.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5bfed21703ae2513903a10cae95cfb68b2a98e8d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4597.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4598.jpg b/training/my_horse2zebra/train_A/n02381460_4598.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57971271ea0d87c634a3a45d2ebbf6c4363bcbe2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4598.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4602.jpg b/training/my_horse2zebra/train_A/n02381460_4602.jpg new file mode 100644 index 0000000000000000000000000000000000000000..597d6d40670282ff3da440bcca9b9c0a75d9ebd0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4602.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4606.jpg b/training/my_horse2zebra/train_A/n02381460_4606.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d9ebcbaa6a7372ae5f4df61e65a5a47213637f3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4606.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4608.jpg b/training/my_horse2zebra/train_A/n02381460_4608.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e11d046ad96330aa66f64bcf5f2e19093430007 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4608.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_461.jpg b/training/my_horse2zebra/train_A/n02381460_461.jpg new file mode 100644 index 0000000000000000000000000000000000000000..321ab0484b84066c8ca309f753ddf2e062a37cf2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_461.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4613.jpg b/training/my_horse2zebra/train_A/n02381460_4613.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8dbc826fae4f8cc02a6ee024190a398abfe1b76a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4613.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4621.jpg b/training/my_horse2zebra/train_A/n02381460_4621.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc0954a863b775c82f05731f456af2c91fcc986e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4621.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4624.jpg b/training/my_horse2zebra/train_A/n02381460_4624.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6b554e46513b1d61e2b053703d49cb99f7ab8ab Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4624.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4625.jpg b/training/my_horse2zebra/train_A/n02381460_4625.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a36497539193c4550b2642aebbc4d55d5ed33e4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4625.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4629.jpg b/training/my_horse2zebra/train_A/n02381460_4629.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd6fa5623141bee4c93ceef42a9732db99640ba8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4629.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4632.jpg b/training/my_horse2zebra/train_A/n02381460_4632.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b8d9f4286d218eaca40e8843e349cb42bcbb776 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4632.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4637.jpg b/training/my_horse2zebra/train_A/n02381460_4637.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d8cfd1fda20dc806b3db8a2ef6109542b07e22c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4637.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4638.jpg b/training/my_horse2zebra/train_A/n02381460_4638.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ba265d0876eb3dcea6c30cf9875db9abd88c4fa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4638.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4639.jpg b/training/my_horse2zebra/train_A/n02381460_4639.jpg new file mode 100644 index 0000000000000000000000000000000000000000..472471f20f35469bb50eff0da612ee35599d6017 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4639.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4642.jpg b/training/my_horse2zebra/train_A/n02381460_4642.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2bed408845d8c7cfea480cc309b165ebc4cee90 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4642.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4645.jpg b/training/my_horse2zebra/train_A/n02381460_4645.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72a4e580cc407c96887d56050b7704728cb2c2e4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4645.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4648.jpg b/training/my_horse2zebra/train_A/n02381460_4648.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b8cc1d14ebe0ed93cc2dfae1de9623c5411bb2d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4648.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4657.jpg b/training/my_horse2zebra/train_A/n02381460_4657.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f826f5b80f0d7399f674b978d5672554321679e3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4657.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_466.jpg b/training/my_horse2zebra/train_A/n02381460_466.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c942106a60da6dfc3cd794e22ac31a716a985651 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_466.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4661.jpg b/training/my_horse2zebra/train_A/n02381460_4661.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da0507ab77d738f80c8060dcc0c7c0e3dc878c25 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4661.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4663.jpg b/training/my_horse2zebra/train_A/n02381460_4663.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f0aeb694c45185929c3ee0aa5d8b7f4380531fb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4663.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4665.jpg b/training/my_horse2zebra/train_A/n02381460_4665.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c407c53e919765e39bd95756de188a1869880acd Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4665.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4668.jpg b/training/my_horse2zebra/train_A/n02381460_4668.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63bfae7f7363e2f3f2ca168db38a5c1ccab3a7f4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4668.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4674.jpg b/training/my_horse2zebra/train_A/n02381460_4674.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fcc9d6f7e18cc169ac76e90c63eb38ca74dc1fcc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4674.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4687.jpg b/training/my_horse2zebra/train_A/n02381460_4687.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce4e9cae9baa35ff79f9da003c3176318ffa3d72 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4687.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4695.jpg b/training/my_horse2zebra/train_A/n02381460_4695.jpg new file mode 100644 index 0000000000000000000000000000000000000000..714133eb6b01596abbaed8bfcbecf45d41695a8c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4695.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4701.jpg b/training/my_horse2zebra/train_A/n02381460_4701.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b0b589ff2e87429f2a431cd64cede276a5c9fe9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4701.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4711.jpg b/training/my_horse2zebra/train_A/n02381460_4711.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f188ac249c90ece33fcdd4f155b32c05c3412988 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4711.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4726.jpg b/training/my_horse2zebra/train_A/n02381460_4726.jpg new file mode 100644 index 0000000000000000000000000000000000000000..255fbef93a7f28f035f2b5018825983a60d4e1e1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4726.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4729.jpg b/training/my_horse2zebra/train_A/n02381460_4729.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7955f013be792dd8fb20f8ab8ff7732a136b543d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4729.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4731.jpg b/training/my_horse2zebra/train_A/n02381460_4731.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e22a21e67e1a7a9553064a03c5a7663989f4172 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4731.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4737.jpg b/training/my_horse2zebra/train_A/n02381460_4737.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5652ff57556c3a1e0a57d70409d8ab9d849ab081 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4737.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_474.jpg b/training/my_horse2zebra/train_A/n02381460_474.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dbe4402f1222eb1b6abafd708a17a1b887848358 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_474.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4743.jpg b/training/my_horse2zebra/train_A/n02381460_4743.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53f508da6c4d171f31cda5fb21781759460787fa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4743.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4748.jpg b/training/my_horse2zebra/train_A/n02381460_4748.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a22c1b3a7bf7a22d90304df7b90b3acf04536a1e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4748.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4751.jpg b/training/my_horse2zebra/train_A/n02381460_4751.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5d0fcc8213a3cde115140805422083f3c704886 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4751.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4758.jpg b/training/my_horse2zebra/train_A/n02381460_4758.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b81422644a8532abee6e96992d274a73b4cc12d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4758.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_476.jpg b/training/my_horse2zebra/train_A/n02381460_476.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7dafc371246583619a6279b393f5b3deb793acc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_476.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4763.jpg b/training/my_horse2zebra/train_A/n02381460_4763.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd68013dbd87d81ebc32a7aeecd708662e2a2732 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4763.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4766.jpg b/training/my_horse2zebra/train_A/n02381460_4766.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81bbc4d9a5ef9331836f543ff17450403dc50059 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4766.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4769.jpg b/training/my_horse2zebra/train_A/n02381460_4769.jpg new file mode 100644 index 0000000000000000000000000000000000000000..610aa64853ef992f8d5a7636989327715b6ed7f5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4769.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_477.jpg b/training/my_horse2zebra/train_A/n02381460_477.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f972c2197bf0fae8599d9f4211b301977dfaf263 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_477.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4771.jpg b/training/my_horse2zebra/train_A/n02381460_4771.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09fd8191e75c93459242277e85a7a6aed618da2f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4771.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4779.jpg b/training/my_horse2zebra/train_A/n02381460_4779.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9d5f9ff63048a9f74f3da5e9ee61fd1fe1ade90 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4779.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4781.jpg b/training/my_horse2zebra/train_A/n02381460_4781.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70f4cc447926baa0b1f9ebe48f87910ad6b5d287 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4781.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4783.jpg b/training/my_horse2zebra/train_A/n02381460_4783.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a47d5f1a08a3ff429e196daaa014b39cc4e95699 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4783.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4785.jpg b/training/my_horse2zebra/train_A/n02381460_4785.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d986efb704e42202f81081ccf315d453f6730fcb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4785.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4788.jpg b/training/my_horse2zebra/train_A/n02381460_4788.jpg new file mode 100644 index 0000000000000000000000000000000000000000..183b2e464768b79c88e147a8ec65e2554f8f6b97 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4788.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4804.jpg b/training/my_horse2zebra/train_A/n02381460_4804.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a448249a07ab37679cc40b831ca5ae721f772434 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4804.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4809.jpg b/training/my_horse2zebra/train_A/n02381460_4809.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f205afa5499b09ea786aefffee0322de2f18cdd2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4809.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4815.jpg b/training/my_horse2zebra/train_A/n02381460_4815.jpg new file mode 100644 index 0000000000000000000000000000000000000000..045cbd91ceec24c96e6035e95a8d6e2f7aa19613 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4815.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4816.jpg b/training/my_horse2zebra/train_A/n02381460_4816.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5954224c63a3e7be0747daa4529038cef47da7b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4816.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4817.jpg b/training/my_horse2zebra/train_A/n02381460_4817.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de9d10689359bf1beafd8761a1488b4da94d75ef Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4817.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4833.jpg b/training/my_horse2zebra/train_A/n02381460_4833.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bfd519bd7884ddca185fe5733e72542cb7260ca Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4833.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4856.jpg b/training/my_horse2zebra/train_A/n02381460_4856.jpg new file mode 100644 index 0000000000000000000000000000000000000000..118b4097c6f4252007af308814116500e0639339 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4856.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_489.jpg b/training/my_horse2zebra/train_A/n02381460_489.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84d7ab0807837c27d37accb4f095efd118731e15 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_489.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4916.jpg b/training/my_horse2zebra/train_A/n02381460_4916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97ff8dd844557a2af0df764ecfcdf8c303391f32 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4916.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4917.jpg b/training/my_horse2zebra/train_A/n02381460_4917.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2d9d80517c291211eade07948faa750a91cf0ea Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4917.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4927.jpg b/training/my_horse2zebra/train_A/n02381460_4927.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bcdaf839c5056646610b0644e5b547696a686e0b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4927.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4928.jpg b/training/my_horse2zebra/train_A/n02381460_4928.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09cafe1f8bf0365721f7628b01cfdff3c20c5986 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4928.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4944.jpg b/training/my_horse2zebra/train_A/n02381460_4944.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb92b6cbd467d71c581c1e15eeca42aecce138b4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4944.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4946.jpg b/training/my_horse2zebra/train_A/n02381460_4946.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4dfa784f7164c54a5db3202913d42e3279be652 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4946.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4965.jpg b/training/my_horse2zebra/train_A/n02381460_4965.jpg new file mode 100644 index 0000000000000000000000000000000000000000..616ca188e87513c4cbd8ffc5957eed514b5f3005 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4965.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4967.jpg b/training/my_horse2zebra/train_A/n02381460_4967.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cdc6b5d5c14b7aef4b26cbf7426122a8d9ff5319 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4967.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4975.jpg b/training/my_horse2zebra/train_A/n02381460_4975.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abd0a96dca92aa196fd4f34be1f8d90591c76c46 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4975.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4977.jpg b/training/my_horse2zebra/train_A/n02381460_4977.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff340ffa46a8b5f08ebce5ff4a65cb4e8b4d9579 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4977.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4991.jpg b/training/my_horse2zebra/train_A/n02381460_4991.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a3c9666e7fe0d5a545955ed1eabad25267759fb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4991.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_4999.jpg b/training/my_horse2zebra/train_A/n02381460_4999.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a8eec85d9b08c177974bf396495e9dea008c870 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_4999.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_501.jpg b/training/my_horse2zebra/train_A/n02381460_501.jpg new file mode 100644 index 0000000000000000000000000000000000000000..212c26662c936bc70eac20648bb576c97699e9c7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_501.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5029.jpg b/training/my_horse2zebra/train_A/n02381460_5029.jpg new file mode 100644 index 0000000000000000000000000000000000000000..042f4c38fc72388b8d0840ac12759e53b6b8df42 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5029.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_503.jpg b/training/my_horse2zebra/train_A/n02381460_503.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c89959556082388ec4ed551e5d14fc881c42592 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_503.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5034.jpg b/training/my_horse2zebra/train_A/n02381460_5034.jpg new file mode 100644 index 0000000000000000000000000000000000000000..102ad7f8cce08de2d787a5d61dcbcdcf471c0d0c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5034.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5036.jpg b/training/my_horse2zebra/train_A/n02381460_5036.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d2b92e55a7f8b30160fc58435a26b7fcec93af9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5036.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5045.jpg b/training/my_horse2zebra/train_A/n02381460_5045.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ce9c212c12b4023b5d2341fc6bd61a165cc2187 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5045.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_506.jpg b/training/my_horse2zebra/train_A/n02381460_506.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38095fb4aba7b621176035a86e6d49b03fcd8f82 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_506.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5075.jpg b/training/my_horse2zebra/train_A/n02381460_5075.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b01eb30becec9e4d448c5ff2acc7d638ad951f90 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5075.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5087.jpg b/training/my_horse2zebra/train_A/n02381460_5087.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78201bd3cd8612637dace4cf2e97dfdf93c0116e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5087.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_509.jpg b/training/my_horse2zebra/train_A/n02381460_509.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f7c54c1a4ef5a5f4975d9e9928cee936ebe4f47 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_509.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5107.jpg b/training/my_horse2zebra/train_A/n02381460_5107.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f37dcb52612dcf42473b3fd3eefb3ba1ce11847 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5107.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5135.jpg b/training/my_horse2zebra/train_A/n02381460_5135.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f4def0d8f5faa97d99d7b0fac69574622f9c6fc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5135.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5156.jpg b/training/my_horse2zebra/train_A/n02381460_5156.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0ce0449fd5a75720b90859f206cde5d83ff5978 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5156.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5167.jpg b/training/my_horse2zebra/train_A/n02381460_5167.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c235a6c0d2e45e9228782cd431340e496b1f13e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5167.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_518.jpg b/training/my_horse2zebra/train_A/n02381460_518.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c26eddf6900697dc9cab742afde69718e30f2fe Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_518.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_519.jpg b/training/my_horse2zebra/train_A/n02381460_519.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2350b55cf20bdae9240c28eeeaaae323d5ab7541 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_519.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5203.jpg b/training/my_horse2zebra/train_A/n02381460_5203.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47c4355f5d3f8e6d948c62922541360422f25dc5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5203.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_521.jpg b/training/my_horse2zebra/train_A/n02381460_521.jpg new file mode 100644 index 0000000000000000000000000000000000000000..996f9cedebd0dd1dd6dba59473fd0e0044d6af5c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_521.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5214.jpg b/training/my_horse2zebra/train_A/n02381460_5214.jpg new file mode 100644 index 0000000000000000000000000000000000000000..196449498114245be34a3702ecac44e0dea8dfd3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5214.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5241.jpg b/training/my_horse2zebra/train_A/n02381460_5241.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ea44ace2006ca6fec8ad49f1854070c06c7b1fa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5241.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_525.jpg b/training/my_horse2zebra/train_A/n02381460_525.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6008060c7dff874240ba7c7a1fd61bcc51bc3fbf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_525.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5265.jpg b/training/my_horse2zebra/train_A/n02381460_5265.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39889bbe7a52a5d4d0f8281614306c6609b7a43b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5265.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5266.jpg b/training/my_horse2zebra/train_A/n02381460_5266.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecc83dcf9f42e21563050d33dc67cabe3c400652 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5266.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_528.jpg b/training/my_horse2zebra/train_A/n02381460_528.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a57e08f750d713f7cb6054ae9f25b2529d92fd3f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_528.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5286.jpg b/training/my_horse2zebra/train_A/n02381460_5286.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07a7e4f60012eb46f7a1025b6ad503a2fb0dae29 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5286.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5287.jpg b/training/my_horse2zebra/train_A/n02381460_5287.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49e982aaafa23ea11517c48199f678c3435d33dc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5287.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5292.jpg b/training/my_horse2zebra/train_A/n02381460_5292.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b026cc28f96beac93435b3fdf32362a2aba0ca88 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5292.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5355.jpg b/training/my_horse2zebra/train_A/n02381460_5355.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92cb4842c575901ab1074b958fdb1f7dbcd756e7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5355.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5374.jpg b/training/my_horse2zebra/train_A/n02381460_5374.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a73e9ac00ae37713b9122f5e9cdaade178256b3c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5374.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5386.jpg b/training/my_horse2zebra/train_A/n02381460_5386.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0399bd0895266545ca378c5ac565d6bb65d1f6ad Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5386.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5396.jpg b/training/my_horse2zebra/train_A/n02381460_5396.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08dc0f028b8b50ba55a2b36e19589a9da3597dea Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5396.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5406.jpg b/training/my_horse2zebra/train_A/n02381460_5406.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b71660cf75c60034693f5409868f7a32a0ffe3a9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5406.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5408.jpg b/training/my_horse2zebra/train_A/n02381460_5408.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2199d258165e67f0a9cd24bffad917101c830adb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5408.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_541.jpg b/training/my_horse2zebra/train_A/n02381460_541.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cefc9c14a2f7d49fdbccaa4c9d86963f1b4de211 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_541.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5411.jpg b/training/my_horse2zebra/train_A/n02381460_5411.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e39cdd8eed516c848888d9088dae5e0cf5e072fc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5411.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_543.jpg b/training/my_horse2zebra/train_A/n02381460_543.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e944af95199fdac507f4b1f712614c11ce24102 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_543.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5442.jpg b/training/my_horse2zebra/train_A/n02381460_5442.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6aac72a8536c0de8a92c7172b9e9232f058da15 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5442.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_545.jpg b/training/my_horse2zebra/train_A/n02381460_545.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23c12ddd4d2a474f42e09185290cd54672ee558f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_545.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5489.jpg b/training/my_horse2zebra/train_A/n02381460_5489.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a501117d637a2a302d88202ea77f287b65a6e84 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5489.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5502.jpg b/training/my_horse2zebra/train_A/n02381460_5502.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd8d765f02d392799f05013e5c0fe829274d7d43 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5502.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5519.jpg b/training/my_horse2zebra/train_A/n02381460_5519.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1c79eb6ac56445ae8aaaddfe37fb0f0c1887663 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5519.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_552.jpg b/training/my_horse2zebra/train_A/n02381460_552.jpg new file mode 100644 index 0000000000000000000000000000000000000000..287c370c22f25cc53daca791cc9aa0c4beb0ccfb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_552.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5525.jpg b/training/my_horse2zebra/train_A/n02381460_5525.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc878fbfc15203aad62d9c2f1050e1e396733d42 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5525.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5526.jpg b/training/my_horse2zebra/train_A/n02381460_5526.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b500f80b0ea8cef29e9d73ba2fc932e0758d6c10 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5526.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_553.jpg b/training/my_horse2zebra/train_A/n02381460_553.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8da21a7d73961effae8007501e502f7cf13a782b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_553.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5537.jpg b/training/my_horse2zebra/train_A/n02381460_5537.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99689d8703a70c8b84f4ea23bc28debdfa4bba4d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5537.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5538.jpg b/training/my_horse2zebra/train_A/n02381460_5538.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc8f0c5753eca7f81d0eccaf25924379137a3248 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5538.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5545.jpg b/training/my_horse2zebra/train_A/n02381460_5545.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d6580a0de11b599dc99ae6b026d98bc5644607c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5545.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5551.jpg b/training/my_horse2zebra/train_A/n02381460_5551.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11d607d29331e684821b9a5ce0f4e1f1a33b007a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5551.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5558.jpg b/training/my_horse2zebra/train_A/n02381460_5558.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d8fa57e901b62f1428867829c07f45ae1871183 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5558.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_558.jpg b/training/my_horse2zebra/train_A/n02381460_558.jpg new file mode 100644 index 0000000000000000000000000000000000000000..375b145190935a0e7e0da265bcc00e5afdbdc160 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_558.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_559.jpg b/training/my_horse2zebra/train_A/n02381460_559.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73d040da5ecc2416eed003d22553d654e3691aed Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_559.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5601.jpg b/training/my_horse2zebra/train_A/n02381460_5601.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e5cdb00bf3680d04419023e161c1c9794066353 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5601.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5607.jpg b/training/my_horse2zebra/train_A/n02381460_5607.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abba96279860c1b2e27d0ee388a2fb0c4468a6e4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5607.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5618.jpg b/training/my_horse2zebra/train_A/n02381460_5618.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e08eae1561f2528263d62fd18b22b5050282bf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5618.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_565.jpg b/training/my_horse2zebra/train_A/n02381460_565.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8a457c681207d790024a21db268830309b4a30c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_565.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_567.jpg b/training/my_horse2zebra/train_A/n02381460_567.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92ab6941a09f09fcafccfa52f6b98bd24e64f2cf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_567.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5674.jpg b/training/my_horse2zebra/train_A/n02381460_5674.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c7369fe6b7224c920d65b9a7091c353ee72af2f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5674.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5696.jpg b/training/my_horse2zebra/train_A/n02381460_5696.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82492212abbccd78ca55fd37ff9b5017c17cc75f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5696.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5699.jpg b/training/my_horse2zebra/train_A/n02381460_5699.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d72dc2e7a92dd5f73b8f13c9075a010a0a23145 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5699.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5704.jpg b/training/my_horse2zebra/train_A/n02381460_5704.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea60ee68f0eda7671459c0f548d22f7b5875fcb3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5704.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5708.jpg b/training/my_horse2zebra/train_A/n02381460_5708.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53ce36898ae80db6ba0fd28cdd4bffeda5aec014 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5708.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5721.jpg b/training/my_horse2zebra/train_A/n02381460_5721.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90422b08e1280921ac303d366fd3a969c4160638 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5721.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5729.jpg b/training/my_horse2zebra/train_A/n02381460_5729.jpg new file mode 100644 index 0000000000000000000000000000000000000000..307209ac4632ccc7cbd0761ee973c3f676fee6a2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5729.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5739.jpg b/training/my_horse2zebra/train_A/n02381460_5739.jpg new file mode 100644 index 0000000000000000000000000000000000000000..650041f3de54ba63ddb996e84270e44e308282c7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5739.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5761.jpg b/training/my_horse2zebra/train_A/n02381460_5761.jpg new file mode 100644 index 0000000000000000000000000000000000000000..425db2745f41cf53554574dfd173da8be05faf5e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5761.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5771.jpg b/training/my_horse2zebra/train_A/n02381460_5771.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b057681b6628d1543a4914a753072789b5d807aa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5771.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5782.jpg b/training/my_horse2zebra/train_A/n02381460_5782.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b01aefa380d970b4c2654f55a40180917929c10 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5782.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_58.jpg b/training/my_horse2zebra/train_A/n02381460_58.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9bf9af99e339c58e183afecb7e03c9c18b50f196 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_58.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5803.jpg b/training/my_horse2zebra/train_A/n02381460_5803.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a93ba958ecd8e76f92cb4d364a17c0e29b1562be Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5803.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5804.jpg b/training/my_horse2zebra/train_A/n02381460_5804.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9bbe7beb2e4c31de91c30df069c0d50c87d9f373 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5804.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5805.jpg b/training/my_horse2zebra/train_A/n02381460_5805.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c86d4b210015cecbed20437b5d7d34297dfe967 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5805.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5819.jpg b/training/my_horse2zebra/train_A/n02381460_5819.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20002dd49b30eeacc0dc45b2299f73bbc160bb82 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5819.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_582.jpg b/training/my_horse2zebra/train_A/n02381460_582.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1099715bdc7b0cc780fabb01173afefc463b4819 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_582.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_584.jpg b/training/my_horse2zebra/train_A/n02381460_584.jpg new file mode 100644 index 0000000000000000000000000000000000000000..859070bb83ac2513b8fc85b0bb0c45a3262fa42c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_584.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5857.jpg b/training/my_horse2zebra/train_A/n02381460_5857.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1e9a35d6d2fee17883012682f90b9fa24552f4b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5857.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5864.jpg b/training/my_horse2zebra/train_A/n02381460_5864.jpg new file mode 100644 index 0000000000000000000000000000000000000000..441b6ab226f4a09defcff4b34f30df16a8c30866 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5864.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5869.jpg b/training/my_horse2zebra/train_A/n02381460_5869.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd07a599b19a644c14ad0d8e7d2d282ded02c018 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5869.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5878.jpg b/training/my_horse2zebra/train_A/n02381460_5878.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d5cd10f996798b4c2c1d28ada8ba155a31170ea Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5878.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_588.jpg b/training/my_horse2zebra/train_A/n02381460_588.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83b9b54150f81330772b1b1916cf22e439de984e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_588.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5891.jpg b/training/my_horse2zebra/train_A/n02381460_5891.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0bda7ccd6bdda0ad907b5d5fbe9c9a082b9f9e2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5891.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5892.jpg b/training/my_horse2zebra/train_A/n02381460_5892.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b2b9701481471e54b6269326e4c957868f6258e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5892.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_591.jpg b/training/my_horse2zebra/train_A/n02381460_591.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73edcc710e0895a6e400beecdc0f044b8a84b79d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_591.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5915.jpg b/training/my_horse2zebra/train_A/n02381460_5915.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5901c32e4adc8b2bbeeb8ab847afa6ba50c9a433 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5915.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5917.jpg b/training/my_horse2zebra/train_A/n02381460_5917.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5993ea92aedc084799e6da812fc8317645f96aeb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5917.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5927.jpg b/training/my_horse2zebra/train_A/n02381460_5927.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1aba93f1f1f866d7ba740c5140f36b562365d223 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5927.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_594.jpg b/training/my_horse2zebra/train_A/n02381460_594.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d13dba7c79cff478b45939814df2b8b2484afbe Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_594.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5944.jpg b/training/my_horse2zebra/train_A/n02381460_5944.jpg new file mode 100644 index 0000000000000000000000000000000000000000..79d7d16149be13bb1687baa7256d10c24eb2e855 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5944.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_595.jpg b/training/my_horse2zebra/train_A/n02381460_595.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3be637044e5c8a556b8fbcd4597041e3ef84c6e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_595.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5951.jpg b/training/my_horse2zebra/train_A/n02381460_5951.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce27594cb30a7ebe195d98f9eeaba6ba4a289e12 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5951.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_596.jpg b/training/my_horse2zebra/train_A/n02381460_596.jpg new file mode 100644 index 0000000000000000000000000000000000000000..591d83cffb6fb02050c809672c01dbf3e5b536ba Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_596.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_598.jpg b/training/my_horse2zebra/train_A/n02381460_598.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad6fd210f46cf6bba4873c98c1f205447b792eb3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_598.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_5983.jpg b/training/my_horse2zebra/train_A/n02381460_5983.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b013586ca02df2591743d4a82470ebddb179ea3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_5983.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_601.jpg b/training/my_horse2zebra/train_A/n02381460_601.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2bfc30b32c41b6783133b78ec0694e862066ccea Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_601.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6089.jpg b/training/my_horse2zebra/train_A/n02381460_6089.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ce399e587c887aa0e60e8273fbb183f400d40b5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6089.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_61.jpg b/training/my_horse2zebra/train_A/n02381460_61.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a663f987a329a461fc2ed77355b78cc3067ef4c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_61.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6152.jpg b/training/my_horse2zebra/train_A/n02381460_6152.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7303ccc9292eed1cb3e85ed41c09fdec375e23cc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6152.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_616.jpg b/training/my_horse2zebra/train_A/n02381460_616.jpg new file mode 100644 index 0000000000000000000000000000000000000000..525c81e054a64bd5d5bb930c40340e90eebaecc2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_616.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6204.jpg b/training/my_horse2zebra/train_A/n02381460_6204.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fdeb91c9b8d765000cc8a3706ffcc48b93b0a2cf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6204.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6223.jpg b/training/my_horse2zebra/train_A/n02381460_6223.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1549c33683f2a278c7bc615c85d6397894c2338 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6223.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_624.jpg b/training/my_horse2zebra/train_A/n02381460_624.jpg new file mode 100644 index 0000000000000000000000000000000000000000..127ccc1c61e8bc5852963c374af55bfd8d490076 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_624.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6252.jpg b/training/my_horse2zebra/train_A/n02381460_6252.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8240cec6c5a48d94115c3f62b65eb607dc9f252d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6252.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6258.jpg b/training/my_horse2zebra/train_A/n02381460_6258.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1330a964a68d9ec5441fede893b7dddd261470ec Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6258.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6267.jpg b/training/my_horse2zebra/train_A/n02381460_6267.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc314caa02d96783f46ceac33de10d05d7c89a63 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6267.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6268.jpg b/training/my_horse2zebra/train_A/n02381460_6268.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4f986ac7943fa95248f4c17c2b6b24af7ba85c0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6268.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_627.jpg b/training/my_horse2zebra/train_A/n02381460_627.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e3aff103bf0ff393a98b331c304b13fd22da5f6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_627.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6277.jpg b/training/my_horse2zebra/train_A/n02381460_6277.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cc8473aaadd590fed225b2959a0c4aa67d7ea07 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6277.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6289.jpg b/training/my_horse2zebra/train_A/n02381460_6289.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee1b637b1a0c2e663e6bf7fe61c8bd3d817b93f7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6289.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_629.jpg b/training/my_horse2zebra/train_A/n02381460_629.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6bc3e99e30305d0b01c11cff67c03e94899133e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_629.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6294.jpg b/training/my_horse2zebra/train_A/n02381460_6294.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bc4ad1da72fe6d7fe2a3cecd80b26ecfdb1f3cc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6294.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6297.jpg b/training/my_horse2zebra/train_A/n02381460_6297.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a13a7413b33161e79e9a3d4c91956485eb8470e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6297.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_631.jpg b/training/my_horse2zebra/train_A/n02381460_631.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f88e73c8ef7f493285c071f6604aafdae985a2f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_631.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6335.jpg b/training/my_horse2zebra/train_A/n02381460_6335.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb33c7e95631a9c54ae88c964244691cd0656ab0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6335.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6373.jpg b/training/my_horse2zebra/train_A/n02381460_6373.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f27f6e5052dd98a8bfc7381866429e243f0c1fc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6373.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6388.jpg b/training/my_horse2zebra/train_A/n02381460_6388.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43e1ce78c280f4f7cec5f59b96c314bdbdf27295 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6388.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6397.jpg b/training/my_horse2zebra/train_A/n02381460_6397.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e1db38bd8bd98751bda5584b60002444363adb7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6397.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6402.jpg b/training/my_horse2zebra/train_A/n02381460_6402.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ab7e62f8ac67ee7ae3b41f499334cfa60e19020 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6402.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6403.jpg b/training/my_horse2zebra/train_A/n02381460_6403.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02e71ec850871a568fd146d41dc41e2e95c489db Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6403.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6411.jpg b/training/my_horse2zebra/train_A/n02381460_6411.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25cb8e9024eda68ea70c4afa2e94fd03482b917a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6411.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_643.jpg b/training/my_horse2zebra/train_A/n02381460_643.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99f857306e891b493628c2ab1ba94e9c716e2143 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_643.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6441.jpg b/training/my_horse2zebra/train_A/n02381460_6441.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a19899b81e159866b3529e03b4c5eb6fb996cfe3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6441.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6466.jpg b/training/my_horse2zebra/train_A/n02381460_6466.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43162a960f87b96ef2206955831dfddcc9fe03ef Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6466.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6476.jpg b/training/my_horse2zebra/train_A/n02381460_6476.jpg new file mode 100644 index 0000000000000000000000000000000000000000..950b61067abbf611bfbe6f997bb994dcb5104112 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6476.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6511.jpg b/training/my_horse2zebra/train_A/n02381460_6511.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1ac07a2c4b7f1b31a49397cedaaf7572de69735 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6511.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_654.jpg b/training/my_horse2zebra/train_A/n02381460_654.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b2c37d9d62d834ddfc50ff966e3d0a1d3f9a1746 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_654.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6549.jpg b/training/my_horse2zebra/train_A/n02381460_6549.jpg new file mode 100644 index 0000000000000000000000000000000000000000..451598e0cd4ce7c32bd90546ff67ac1355621673 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6549.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6556.jpg b/training/my_horse2zebra/train_A/n02381460_6556.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39e1e7aea48e93dd730821fecd9d272f0193e14f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6556.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_66.jpg b/training/my_horse2zebra/train_A/n02381460_66.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da609311ee0b4c0a369a08f5de4576f4e99af87a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_66.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_668.jpg b/training/my_horse2zebra/train_A/n02381460_668.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e462af8b8d363bf53350e429ca4d68226b9e677 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_668.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6688.jpg b/training/my_horse2zebra/train_A/n02381460_6688.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87f5162878bdb27ca5f6ebb7d81206d747306b4b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6688.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_671.jpg b/training/my_horse2zebra/train_A/n02381460_671.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b3e59882969fc0ca5c080bc3d975cb2de5d3724 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_671.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6721.jpg b/training/my_horse2zebra/train_A/n02381460_6721.jpg new file mode 100644 index 0000000000000000000000000000000000000000..308868b0bc4f6d33007184aeae5cfd2145be6f01 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6721.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_674.jpg b/training/my_horse2zebra/train_A/n02381460_674.jpg new file mode 100644 index 0000000000000000000000000000000000000000..504bd8e072a10b9721b0a5d319a9e7e20ab8b33a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_674.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6743.jpg b/training/my_horse2zebra/train_A/n02381460_6743.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e494d5687f1eeb16ce8b3eeab20ca037eb9e4fd9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6743.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_675.jpg b/training/my_horse2zebra/train_A/n02381460_675.jpg new file mode 100644 index 0000000000000000000000000000000000000000..412d3ae3206f75f62736e86f018044692498b60a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_675.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_676.jpg b/training/my_horse2zebra/train_A/n02381460_676.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6fd8b8b8203a737c93b0f81f44295f5cbd6f417c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_676.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6761.jpg b/training/my_horse2zebra/train_A/n02381460_6761.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e799294981d949ca862902af28ca7b6a6e22e0db Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6761.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6763.jpg b/training/my_horse2zebra/train_A/n02381460_6763.jpg new file mode 100644 index 0000000000000000000000000000000000000000..accd161c50c9a8ad43252169ed1f38c5629972d6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6763.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_677.jpg b/training/my_horse2zebra/train_A/n02381460_677.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb60d4b149dc9231d8fad5f2a51a4d8b2fdd04ce Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_677.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6782.jpg b/training/my_horse2zebra/train_A/n02381460_6782.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de7088c59f0f16ee5d8729446af3cba497751cf1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6782.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6792.jpg b/training/my_horse2zebra/train_A/n02381460_6792.jpg new file mode 100644 index 0000000000000000000000000000000000000000..752aa27d9ebc349d6a08c7f500eef0aace21f067 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6792.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6822.jpg b/training/my_horse2zebra/train_A/n02381460_6822.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d3b9127b64281cb011f976c1655ea9163afbdd9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6822.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6824.jpg b/training/my_horse2zebra/train_A/n02381460_6824.jpg new file mode 100644 index 0000000000000000000000000000000000000000..984c10ce297d7ff69369aa5e634a8cf3baa98f89 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6824.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6836.jpg b/training/my_horse2zebra/train_A/n02381460_6836.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03574d7b1c972606b345d19c2a7aee3d7ef0ccf3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6836.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6873.jpg b/training/my_horse2zebra/train_A/n02381460_6873.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ea597edc4feb14d77dbc0ec77cc19db0790f059 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6873.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6876.jpg b/training/my_horse2zebra/train_A/n02381460_6876.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32d988f4f4cb035f9badcd063266edb02bf03d91 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6876.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_69.jpg b/training/my_horse2zebra/train_A/n02381460_69.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b69d22dcaac9a8fbfda2262a9bfbd5980af5b741 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_69.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_691.jpg b/training/my_horse2zebra/train_A/n02381460_691.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05d7f4fa2a8ecac8bd5b6fd48ed080ac7cd7628b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_691.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6922.jpg b/training/my_horse2zebra/train_A/n02381460_6922.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f130078c14e8f38960a98c9215f0c02f6ad31bdc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6922.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6941.jpg b/training/my_horse2zebra/train_A/n02381460_6941.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29ce3025f1a6e864db051904a7425a8e26bf0bdc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6941.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6944.jpg b/training/my_horse2zebra/train_A/n02381460_6944.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9925cf1f87e0bec3e94946b30bae363e871ca03d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6944.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6946.jpg b/training/my_horse2zebra/train_A/n02381460_6946.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ab039cb05edcce74e32f96f8e3605dac5ce6cc4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6946.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6964.jpg b/training/my_horse2zebra/train_A/n02381460_6964.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98f812dfe99beae010a955d6030be258c9583a4b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6964.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_697.jpg b/training/my_horse2zebra/train_A/n02381460_697.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba361e038c86568df6660b8e510d6828bbe3cd47 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_697.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6975.jpg b/training/my_horse2zebra/train_A/n02381460_6975.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dabc058281367dbea0ddf54766374527d85fc74e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6975.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6978.jpg b/training/my_horse2zebra/train_A/n02381460_6978.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6845e3359d5b316ce499e14d712507f73fba50db Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6978.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6981.jpg b/training/my_horse2zebra/train_A/n02381460_6981.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf014fbbb80de5992704b233904e25e77948d62b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6981.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6987.jpg b/training/my_horse2zebra/train_A/n02381460_6987.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01511170aaa71696b9e9e41b5909d2b580bc5190 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6987.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_6995.jpg b/training/my_horse2zebra/train_A/n02381460_6995.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8db47e3b5acca90c910b8b78d6e582dd3f29e72b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_6995.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_703.jpg b/training/my_horse2zebra/train_A/n02381460_703.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bdd76ab1c11302659a318e862a317e9c6a085532 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_703.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7033.jpg b/training/my_horse2zebra/train_A/n02381460_7033.jpg new file mode 100644 index 0000000000000000000000000000000000000000..647e807aee8301a25a7ba53adf31a43e8d84456e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7033.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_706.jpg b/training/my_horse2zebra/train_A/n02381460_706.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c7cbda7da2af6c445ce3e654f7758194a74cdc8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_706.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_707.jpg b/training/my_horse2zebra/train_A/n02381460_707.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a3026226cd782cb9c096231049d9bdd804d6e56 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_707.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7122.jpg b/training/my_horse2zebra/train_A/n02381460_7122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..730d27e5048b2bb439a74d7d5ea807770cc0f35b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7122.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7126.jpg b/training/my_horse2zebra/train_A/n02381460_7126.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efc9d92176e18182ec4d3cdb856c5900e7aee0f6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7126.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7165.jpg b/training/my_horse2zebra/train_A/n02381460_7165.jpg new file mode 100644 index 0000000000000000000000000000000000000000..41e94f62dd8406cb0f7ae54595060cecd33d5410 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7165.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_717.jpg b/training/my_horse2zebra/train_A/n02381460_717.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a86abb2b918a6ccac388d3ddb4b522169cca8e6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_717.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7178.jpg b/training/my_horse2zebra/train_A/n02381460_7178.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ead7297d9561b3d1bffe8702c14f7a57ba83ea0c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7178.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_718.jpg b/training/my_horse2zebra/train_A/n02381460_718.jpg new file mode 100644 index 0000000000000000000000000000000000000000..789dd1f053f481b13a30a8b0137c1623c8b9e440 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_718.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7219.jpg b/training/my_horse2zebra/train_A/n02381460_7219.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5491b591cecaa9fe40ba2d239397d847adcb443a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7219.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7231.jpg b/training/my_horse2zebra/train_A/n02381460_7231.jpg new file mode 100644 index 0000000000000000000000000000000000000000..adffbc77c2069e8e9ed74d0c403ed16f35d15d16 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7231.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_726.jpg b/training/my_horse2zebra/train_A/n02381460_726.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac0615d065228b3e09cceac747e30a3c57199ea4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_726.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7261.jpg b/training/my_horse2zebra/train_A/n02381460_7261.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d860502b8ec6ed32d01f2a6ad13c195232d73953 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7261.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_728.jpg b/training/my_horse2zebra/train_A/n02381460_728.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8cc19a52605f5090016c5c1eb7d601fe3f258d1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_728.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7297.jpg b/training/my_horse2zebra/train_A/n02381460_7297.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b13b3827039e202dad05bbe5c51a64016d54086b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7297.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_73.jpg b/training/my_horse2zebra/train_A/n02381460_73.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00f60353068db9dfbcea3560ac701476274c540e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_73.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7305.jpg b/training/my_horse2zebra/train_A/n02381460_7305.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88efe79f47bbcf17ca7ce096882030ffa57da02f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7305.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_732.jpg b/training/my_horse2zebra/train_A/n02381460_732.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50be42bea8c58295b4b9b82e8fb2c2d0b5257f36 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_732.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7348.jpg b/training/my_horse2zebra/train_A/n02381460_7348.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5d360600216d29a43eef7131be7159751a21ecf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7348.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_736.jpg b/training/my_horse2zebra/train_A/n02381460_736.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0357d532b2150be2596a3bb58082dcad97f516f5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_736.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_739.jpg b/training/my_horse2zebra/train_A/n02381460_739.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87851a9e50b37cf136869d21f35a4fe0f16419d9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_739.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7398.jpg b/training/my_horse2zebra/train_A/n02381460_7398.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40ac93cc9b053e17f0c745b5a28d96d53f071594 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7398.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7412.jpg b/training/my_horse2zebra/train_A/n02381460_7412.jpg new file mode 100644 index 0000000000000000000000000000000000000000..983261a7c49c8e7b51be43dc9387a765c5cff5d4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7412.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_742.jpg b/training/my_horse2zebra/train_A/n02381460_742.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f7884690ec0b1ecd24d8a923e829f64851a80f9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_742.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_743.jpg b/training/my_horse2zebra/train_A/n02381460_743.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8480b118ae95ce71234807ffd72c915438af6fb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_743.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7456.jpg b/training/my_horse2zebra/train_A/n02381460_7456.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30fc1c8cfb096671db5ac41362c3907bde01d232 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7456.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_747.jpg b/training/my_horse2zebra/train_A/n02381460_747.jpg new file mode 100644 index 0000000000000000000000000000000000000000..385ed56d644c75c9e77cc1bba79b064469bfd6b2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_747.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7476.jpg b/training/my_horse2zebra/train_A/n02381460_7476.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9c16d30c15287c321518a70031ac84591043e2e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7476.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7493.jpg b/training/my_horse2zebra/train_A/n02381460_7493.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ae93f3c675bfad3e2161d7865c805be566fa5fb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7493.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7495.jpg b/training/my_horse2zebra/train_A/n02381460_7495.jpg new file mode 100644 index 0000000000000000000000000000000000000000..855e83b80015565324700776d80e10b2b81b147c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7495.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7512.jpg b/training/my_horse2zebra/train_A/n02381460_7512.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f91ea78bbe1a854c653686349f0a352f3644963 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7512.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7515.jpg b/training/my_horse2zebra/train_A/n02381460_7515.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09b9e0b7345146d2f3791783919f2b3b014c7768 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7515.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7528.jpg b/training/my_horse2zebra/train_A/n02381460_7528.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0994fc0d4258423dd619c37c562ed07b9be169e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7528.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7537.jpg b/training/my_horse2zebra/train_A/n02381460_7537.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dbf9412a61baf88780f1a363344474ecc6ebf21d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7537.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_754.jpg b/training/my_horse2zebra/train_A/n02381460_754.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a67033f3729a45e488d3be9b7bdf874098f974c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_754.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7548.jpg b/training/my_horse2zebra/train_A/n02381460_7548.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5915f498abcccd86a0f69388d3644bd1ec91dfe Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7548.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_755.jpg b/training/my_horse2zebra/train_A/n02381460_755.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12814e2bab10b7a91014fe6c04d1a6b137664962 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_755.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_757.jpg b/training/my_horse2zebra/train_A/n02381460_757.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c293aeb3afc0d0da89f4908cc5f3bda1670d20e6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_757.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7571.jpg b/training/my_horse2zebra/train_A/n02381460_7571.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95935d8c3606424c811f372f732fd127d907a0f8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7571.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7597.jpg b/training/my_horse2zebra/train_A/n02381460_7597.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b259f8c36ba873114882171b5e2d58e51f53898 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7597.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7613.jpg b/training/my_horse2zebra/train_A/n02381460_7613.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df5ce5b7d5f409a9be69c888ae83f209286625a8 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7613.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7622.jpg b/training/my_horse2zebra/train_A/n02381460_7622.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c622f42ea83784d80fe4040b44fba67b18e21c7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7622.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7634.jpg b/training/my_horse2zebra/train_A/n02381460_7634.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f154e62ae1f1d77424016d5249a580e4c41b124 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7634.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_764.jpg b/training/my_horse2zebra/train_A/n02381460_764.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6a4855fa9773c50855494af9688f27eb2b896db Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_764.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_765.jpg b/training/my_horse2zebra/train_A/n02381460_765.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0e6858ca541a448177f60f52bb8b6f184ffcb32 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_765.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7651.jpg b/training/my_horse2zebra/train_A/n02381460_7651.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53d7698120421a5f8c66b79047374d4c9d6435ef Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7651.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_767.jpg b/training/my_horse2zebra/train_A/n02381460_767.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e626aaf0c666b7c3229b9a24e354b2988d9c54cd Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_767.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7689.jpg b/training/my_horse2zebra/train_A/n02381460_7689.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5bd8243811a52dc252509d190a633fd5190c36f9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7689.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_769.jpg b/training/my_horse2zebra/train_A/n02381460_769.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4a221daddf6d97aadc1aaa6a4d815d180bac00c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_769.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7692.jpg b/training/my_horse2zebra/train_A/n02381460_7692.jpg new file mode 100644 index 0000000000000000000000000000000000000000..149ff1335e5fb676ad6dae6bbf205b7dd14abc29 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7692.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7695.jpg b/training/my_horse2zebra/train_A/n02381460_7695.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69b217a9a7a26edf74982532ee000ddf0fdacdbf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7695.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7754.jpg b/training/my_horse2zebra/train_A/n02381460_7754.jpg new file mode 100644 index 0000000000000000000000000000000000000000..224a4ca53500bcb6bc5a4d71d30a928fb447c441 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7754.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7756.jpg b/training/my_horse2zebra/train_A/n02381460_7756.jpg new file mode 100644 index 0000000000000000000000000000000000000000..880821feaf2afbde93cefc99247f962493757b12 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7756.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_776.jpg b/training/my_horse2zebra/train_A/n02381460_776.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23ec7bef26115680902bd791b425683496f5da8a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_776.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_777.jpg b/training/my_horse2zebra/train_A/n02381460_777.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a97d458f8e1196f60a4451a29ee622ea4c9445e1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_777.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7779.jpg b/training/my_horse2zebra/train_A/n02381460_7779.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f93f44e5bcb361148aaae6ad5fa1abccc8d189fb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7779.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_778.jpg b/training/my_horse2zebra/train_A/n02381460_778.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97acaf5b48f23e9fce219062e5ff168407479c60 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_778.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7803.jpg b/training/my_horse2zebra/train_A/n02381460_7803.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1ce149dfe30a77b63d0034a1e7b4f6feacf1da1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7803.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7806.jpg b/training/my_horse2zebra/train_A/n02381460_7806.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d84cb94c426d30c48ef3b35c83903b4fb8cf2c23 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7806.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_782.jpg b/training/my_horse2zebra/train_A/n02381460_782.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4cf17cba1185e3992415dc34dedbf34c9a7b45f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_782.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_784.jpg b/training/my_horse2zebra/train_A/n02381460_784.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f47e995fd0b49db046ad45f692f134e01222a2c3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_784.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7845.jpg b/training/my_horse2zebra/train_A/n02381460_7845.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9d6deab08212e9e05b1e38a2acaf41db8a3f6ad Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7845.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7858.jpg b/training/my_horse2zebra/train_A/n02381460_7858.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffad3af30e665b0723f8d62083bfad5fd8a5de8b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7858.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7876.jpg b/training/my_horse2zebra/train_A/n02381460_7876.jpg new file mode 100644 index 0000000000000000000000000000000000000000..241913428365ec8b2675250dec9b3c721285ab46 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7876.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_788.jpg b/training/my_horse2zebra/train_A/n02381460_788.jpg new file mode 100644 index 0000000000000000000000000000000000000000..daecd47cf4af96d9a2910e26cb97b70b769a6179 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_788.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7888.jpg b/training/my_horse2zebra/train_A/n02381460_7888.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1691dd28fbf1277e9c0cedec7937e490d1f9ccaa Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7888.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7903.jpg b/training/my_horse2zebra/train_A/n02381460_7903.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3665373a41d35c1b1b0a962e66a2f64aa218181d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7903.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7905.jpg b/training/my_horse2zebra/train_A/n02381460_7905.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e694604934f36c4ceb49a6064fcedb4d97893d5d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7905.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7919.jpg b/training/my_horse2zebra/train_A/n02381460_7919.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c1b774b8defae4495de5482bb37346dc97657c2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7919.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7932.jpg b/training/my_horse2zebra/train_A/n02381460_7932.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf4185e2bc55195dc38d29960189bc9280ec739a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7932.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7942.jpg b/training/my_horse2zebra/train_A/n02381460_7942.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7a2d44315e53cec59cdc9c65c5d2bdde4e5bf86 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7942.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_7959.jpg b/training/my_horse2zebra/train_A/n02381460_7959.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5cb0146d6c4e8cf07c546fbd5c3102737c9570c6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_7959.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_798.jpg b/training/my_horse2zebra/train_A/n02381460_798.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1617bd4578cc728f436608b548b71d547e4c19b2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_798.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8006.jpg b/training/my_horse2zebra/train_A/n02381460_8006.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51905d32af34360aede8ef74933bcb2bab054a2b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8006.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8013.jpg b/training/my_horse2zebra/train_A/n02381460_8013.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2dc2387f5d6e134e4547d7f71d879bd2873ca1e9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8013.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_803.jpg b/training/my_horse2zebra/train_A/n02381460_803.jpg new file mode 100644 index 0000000000000000000000000000000000000000..441bec46146339beb8f42ca2cd1e5dd8ff20e764 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_803.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_804.jpg b/training/my_horse2zebra/train_A/n02381460_804.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47a5f07dd56810e8cd6cd9203812d6775fa16b55 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_804.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8048.jpg b/training/my_horse2zebra/train_A/n02381460_8048.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6791fdc974dd700008015ad59f1b1e34e6d580a3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8048.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8052.jpg b/training/my_horse2zebra/train_A/n02381460_8052.jpg new file mode 100644 index 0000000000000000000000000000000000000000..898a466e071d79f01cde485784cfd97157bfb22e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8052.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_807.jpg b/training/my_horse2zebra/train_A/n02381460_807.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8608e4c6a909dfd948e633e431f0bea371078cc7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_807.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8088.jpg b/training/my_horse2zebra/train_A/n02381460_8088.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ceb0508b0e4cca01cfa0e106c8f82c15ede60e0 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8088.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8104.jpg b/training/my_horse2zebra/train_A/n02381460_8104.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3dce9ab13e3e1e01e66ea2649e2ecbf6ec9cb86 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8104.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_811.jpg b/training/my_horse2zebra/train_A/n02381460_811.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc570483f2a4261e94996d865ac19bc887d2c9ea Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_811.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8153.jpg b/training/my_horse2zebra/train_A/n02381460_8153.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e694604934f36c4ceb49a6064fcedb4d97893d5d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8153.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8157.jpg b/training/my_horse2zebra/train_A/n02381460_8157.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a2bd4d840b23f3ea62afb326add6b0f8e680fb1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8157.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8179.jpg b/training/my_horse2zebra/train_A/n02381460_8179.jpg new file mode 100644 index 0000000000000000000000000000000000000000..260a1ea85389b347a543bba04a7cbc2271a423d1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8179.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8241.jpg b/training/my_horse2zebra/train_A/n02381460_8241.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d06e428154cd0daf1e24c6603b20a9e1ea4c2e12 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8241.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_825.jpg b/training/my_horse2zebra/train_A/n02381460_825.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0b4e8e74fcf56b4e500aab05e721d6e5895b72f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_825.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8277.jpg b/training/my_horse2zebra/train_A/n02381460_8277.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fbe7c389fbf50475c9ab1a9751227c8baae5d8f1 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8277.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8306.jpg b/training/my_horse2zebra/train_A/n02381460_8306.jpg new file mode 100644 index 0000000000000000000000000000000000000000..457ea7d72ee4ea572395477bc0300dbecde1c03f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8306.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8325.jpg b/training/my_horse2zebra/train_A/n02381460_8325.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af4c091406d93981670f9b12b5e8151fafd93bdf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8325.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_834.jpg b/training/my_horse2zebra/train_A/n02381460_834.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38c4a3a8050a56fed34bd0a1d5c3da8f9f6aaa90 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_834.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_835.jpg b/training/my_horse2zebra/train_A/n02381460_835.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e58d7e14909cb4b2990a656514e4907ecbda86a6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_835.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_836.jpg b/training/my_horse2zebra/train_A/n02381460_836.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2a101dffe3da927bfe1baa0c2d07cee0164bcbf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_836.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8389.jpg b/training/my_horse2zebra/train_A/n02381460_8389.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00dc88da0fc88f54f1faadb0168f2dfcd1fb93e6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8389.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8435.jpg b/training/my_horse2zebra/train_A/n02381460_8435.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fce9ca103b416c4feb8c7a94bdbd409f1ddb9edb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8435.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8437.jpg b/training/my_horse2zebra/train_A/n02381460_8437.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca67a3f74136339b60df31378d3b9b14e0cd92d4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8437.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8449.jpg b/training/my_horse2zebra/train_A/n02381460_8449.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43fbd7d2dc20ba767d3b649b8b242e7c7b4639b6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8449.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8479.jpg b/training/my_horse2zebra/train_A/n02381460_8479.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c65ed4ac70a6d5fbfa98b8578e03893b0fddba62 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8479.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_849.jpg b/training/my_horse2zebra/train_A/n02381460_849.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f26b2e1330628686960af3fbd860cf1271f61623 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_849.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8507.jpg b/training/my_horse2zebra/train_A/n02381460_8507.jpg new file mode 100644 index 0000000000000000000000000000000000000000..faea4a9cbcd331f72058d520942dd75e9f6243a5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8507.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8515.jpg b/training/my_horse2zebra/train_A/n02381460_8515.jpg new file mode 100644 index 0000000000000000000000000000000000000000..144ca36bc73acb498fe422a00b526676dac5cfd4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8515.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_852.jpg b/training/my_horse2zebra/train_A/n02381460_852.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb7225017a4665d10900d23382d7e079fa6ab66e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_852.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8527.jpg b/training/my_horse2zebra/train_A/n02381460_8527.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a0a89383d7536f4df035bd1beaff80d77d019e9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8527.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_854.jpg b/training/my_horse2zebra/train_A/n02381460_854.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df0802349358509204981fbbd4002379dd0fa131 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_854.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_855.jpg b/training/my_horse2zebra/train_A/n02381460_855.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eacb9f1ec193ff43c5913b084fdb4c0e22e9e412 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_855.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_856.jpg b/training/my_horse2zebra/train_A/n02381460_856.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ea3f00a95978854a741feeaad13cd68488cd93b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_856.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8575.jpg b/training/my_horse2zebra/train_A/n02381460_8575.jpg new file mode 100644 index 0000000000000000000000000000000000000000..985b1980b67956095999b1293b80dd9fc1bab25f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8575.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8577.jpg b/training/my_horse2zebra/train_A/n02381460_8577.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d071111a75c2a7d42289aac2b8fc1c33ce51e7eb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8577.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_858.jpg b/training/my_horse2zebra/train_A/n02381460_858.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c52a8dbc1cd6513f0d3c451890d1f6827aba1fc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_858.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8585.jpg b/training/my_horse2zebra/train_A/n02381460_8585.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96096120044b7c332556e2fe360cbd15cf2bbbe7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8585.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8586.jpg b/training/my_horse2zebra/train_A/n02381460_8586.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12e62e80946ab0084085ff8465289b5c3fa4d506 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8586.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_86.jpg b/training/my_horse2zebra/train_A/n02381460_86.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2bfc30b32c41b6783133b78ec0694e862066ccea Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_86.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8611.jpg b/training/my_horse2zebra/train_A/n02381460_8611.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d72e148b0dee94d8d5d616198b30316f6cf6cee Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8611.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8626.jpg b/training/my_horse2zebra/train_A/n02381460_8626.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f008587d7baa4c9633c69e82999106ce368521b9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8626.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_863.jpg b/training/my_horse2zebra/train_A/n02381460_863.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ca15dd192c0b2b9f986b85bf3a3d975f7e4169f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_863.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8639.jpg b/training/my_horse2zebra/train_A/n02381460_8639.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9751fc3d1969d6479a2929ea240057ebfe4a5c87 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8639.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8659.jpg b/training/my_horse2zebra/train_A/n02381460_8659.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5f7bdbb718e159f6f3801e2f6a3a8e0510c53e2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8659.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8668.jpg b/training/my_horse2zebra/train_A/n02381460_8668.jpg new file mode 100644 index 0000000000000000000000000000000000000000..717b098a72036af611b5b192303617ddc0bd86f4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8668.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_869.jpg b/training/my_horse2zebra/train_A/n02381460_869.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2305226f4cf4503fc00663313502e622e0ef129 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_869.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8704.jpg b/training/my_horse2zebra/train_A/n02381460_8704.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aea81592b10fb214261308d4b39cfd7a4240cf24 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8704.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8708.jpg b/training/my_horse2zebra/train_A/n02381460_8708.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92255e0b1fa9fb5366a6ae0d17e8ed47e89bdc74 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8708.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8714.jpg b/training/my_horse2zebra/train_A/n02381460_8714.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0a355d8914b87e7ce3a9cab671b62b92b7aba3d Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8714.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8718.jpg b/training/my_horse2zebra/train_A/n02381460_8718.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5857cdb2ad7e4457a3efe96bd6bb93d5abc8cbe9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8718.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8725.jpg b/training/my_horse2zebra/train_A/n02381460_8725.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67b6c255c07104b21d86400b0c906879972fa80a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8725.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8735.jpg b/training/my_horse2zebra/train_A/n02381460_8735.jpg new file mode 100644 index 0000000000000000000000000000000000000000..042f4c38fc72388b8d0840ac12759e53b6b8df42 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8735.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8759.jpg b/training/my_horse2zebra/train_A/n02381460_8759.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8fc5ea889c124929890e9885f1843fd7d5a2a67c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8759.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8765.jpg b/training/my_horse2zebra/train_A/n02381460_8765.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cdac2a1e76bdd4d14c113209a6ceefea38473b9a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8765.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8769.jpg b/training/my_horse2zebra/train_A/n02381460_8769.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6a9946c731621205dfbce5e2696e4216889d593 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8769.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_879.jpg b/training/my_horse2zebra/train_A/n02381460_879.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31ca0ed9b1104a3b533b3e049dea34b14d3d51ca Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_879.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_881.jpg b/training/my_horse2zebra/train_A/n02381460_881.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c241b5806ecfe25d6ecbcfa451e160dfd3c1353 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_881.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8812.jpg b/training/my_horse2zebra/train_A/n02381460_8812.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d1cf99e53da74946579ab0a9a44b71d4248e3b5 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8812.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8838.jpg b/training/my_horse2zebra/train_A/n02381460_8838.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c265bf082bf9b51b53f28b0421c8ac9c4c87c725 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8838.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8862.jpg b/training/my_horse2zebra/train_A/n02381460_8862.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c1f019f8c3e7076834ed5cc22519d6936edab5c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8862.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8877.jpg b/training/my_horse2zebra/train_A/n02381460_8877.jpg new file mode 100644 index 0000000000000000000000000000000000000000..989f472f7fb84524fc17890f00ec43d3cde9b536 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8877.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8895.jpg b/training/my_horse2zebra/train_A/n02381460_8895.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80ee1049f8eafb38bd027846f169ef0ce3630fde Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8895.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8903.jpg b/training/my_horse2zebra/train_A/n02381460_8903.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11d2f688f4a698ed78e5fe6d88dc7bfc1e8d196f Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8903.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_891.jpg b/training/my_horse2zebra/train_A/n02381460_891.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a65b46c232761400d048b86cdfd1bab46f0a424 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_891.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8944.jpg b/training/my_horse2zebra/train_A/n02381460_8944.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c2be84cbb97d82938f1d10ea8081988689e9f58 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8944.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8958.jpg b/training/my_horse2zebra/train_A/n02381460_8958.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c437d41c27468eb1bd736a6b203053590827e9e2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8958.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_897.jpg b/training/my_horse2zebra/train_A/n02381460_897.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d7ece248e0932e5d64b4e109e3090466af75681 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_897.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8974.jpg b/training/my_horse2zebra/train_A/n02381460_8974.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5efbe8936d7b8cfdc7f70dd1099e9aa1974278a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8974.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8985.jpg b/training/my_horse2zebra/train_A/n02381460_8985.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8a2b33afa3022175a00fefe34478433ae531cbf Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8985.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_8989.jpg b/training/my_horse2zebra/train_A/n02381460_8989.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8239f79ac6c8ea6d56efc9b0d06accbffe6a134b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_8989.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_901.jpg b/training/my_horse2zebra/train_A/n02381460_901.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2aea72a8f23daed9ce1d773e62a3e7f47bdd40a4 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_901.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_902.jpg b/training/my_horse2zebra/train_A/n02381460_902.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee13f0e65183c3eae7f230bd47333f68cef5d65c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_902.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_903.jpg b/training/my_horse2zebra/train_A/n02381460_903.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2a25efe0e9bdf8fbe1c05104632edbfe78691e3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_903.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9052.jpg b/training/my_horse2zebra/train_A/n02381460_9052.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e85ea54e902728cc0391f3befcdcf92c5b6a004e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9052.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9063.jpg b/training/my_horse2zebra/train_A/n02381460_9063.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2744ae7e40b20d3b8fa801ad23f740107f9d457 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9063.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9064.jpg b/training/my_horse2zebra/train_A/n02381460_9064.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ceb593d7ed57a14a34402b9ad3b265ab35ec3f5a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9064.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_908.jpg b/training/my_horse2zebra/train_A/n02381460_908.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6c0ba4b5403bf4fe9a3e6b9074284babe979c10 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_908.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9083.jpg b/training/my_horse2zebra/train_A/n02381460_9083.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ceca04cc6ccb8e828a369b10e23433fd0116125 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9083.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9095.jpg b/training/my_horse2zebra/train_A/n02381460_9095.jpg new file mode 100644 index 0000000000000000000000000000000000000000..656b905cfb52e848dc68ee76cd30e487063ae5a2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9095.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_91.jpg b/training/my_horse2zebra/train_A/n02381460_91.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfe93af58fb3ae0cd0ae00a5baf7bed2da849ebc Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_91.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_911.jpg b/training/my_horse2zebra/train_A/n02381460_911.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1c412d54cd5ccad6fc9b539b93b35f097fbe51a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_911.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_912.jpg b/training/my_horse2zebra/train_A/n02381460_912.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f7cd8dc38201ad38c34b316e79236e555ed0662 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_912.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9127.jpg b/training/my_horse2zebra/train_A/n02381460_9127.jpg new file mode 100644 index 0000000000000000000000000000000000000000..615702d10fe329d1554db0702b6314d61a7ec662 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9127.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9167.jpg b/training/my_horse2zebra/train_A/n02381460_9167.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45b95c970a18a91a70d89c7961fd54c71a0baf6e Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9167.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9184.jpg b/training/my_horse2zebra/train_A/n02381460_9184.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b839082b4553e5a501c89dfd9dc1bc5872977552 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9184.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_919.jpg b/training/my_horse2zebra/train_A/n02381460_919.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fc16d231d16f5efa4afdd4b54a980c5adbc7f82 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_919.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_921.jpg b/training/my_horse2zebra/train_A/n02381460_921.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9abcb4ee3393a7e6d71933d9ff40bc1f2365befb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_921.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9223.jpg b/training/my_horse2zebra/train_A/n02381460_9223.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d54f2b038d653d52a12dd41c3a3b3e30df3becb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9223.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9234.jpg b/training/my_horse2zebra/train_A/n02381460_9234.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e7a1645d65030a556da64dd28a7b3f98e951b8a Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9234.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9243.jpg b/training/my_horse2zebra/train_A/n02381460_9243.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9df4f4efcdc437ae783e27d80dc34ea1853b6711 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9243.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_9263.jpg b/training/my_horse2zebra/train_A/n02381460_9263.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23ea99d6edd13797d022d4aee46f333739d57ac2 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_9263.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_933.jpg b/training/my_horse2zebra/train_A/n02381460_933.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0b439784dcd9076ed1f7a276d586df3dce4d9e7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_933.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_935.jpg b/training/my_horse2zebra/train_A/n02381460_935.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6346a6af35675854e304e9a53135016a2370da6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_935.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_939.jpg b/training/my_horse2zebra/train_A/n02381460_939.jpg new file mode 100644 index 0000000000000000000000000000000000000000..830150c0b7cabf9b495b0400bf6d955a2950bcb3 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_939.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_941.jpg b/training/my_horse2zebra/train_A/n02381460_941.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e20de8832f00ce1b27d03a6594bf13ff354cea6c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_941.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_948.jpg b/training/my_horse2zebra/train_A/n02381460_948.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d61350290d16905ba1d750aa8491fcfbc42c7de Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_948.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_967.jpg b/training/my_horse2zebra/train_A/n02381460_967.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82b3e3ff2c475c7344e6cb6e4442732bb1bd9ee7 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_967.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_968.jpg b/training/my_horse2zebra/train_A/n02381460_968.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49a7ba752b09554eea827f2f00b31582c0b75699 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_968.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_969.jpg b/training/my_horse2zebra/train_A/n02381460_969.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe879adf6faa8d3f7e4cf7bdcde56a5d86ff0b1c Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_969.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_971.jpg b/training/my_horse2zebra/train_A/n02381460_971.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e98c31a15f3fe75472619fd7988b9ce4cab5406b Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_971.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_976.jpg b/training/my_horse2zebra/train_A/n02381460_976.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c1da83ca6e3f5ad01d4cccb91f62fd18d4dccc9 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_976.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_979.jpg b/training/my_horse2zebra/train_A/n02381460_979.jpg new file mode 100644 index 0000000000000000000000000000000000000000..685d3124245ab135ccb0e82a1be251735219c508 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_979.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_981.jpg b/training/my_horse2zebra/train_A/n02381460_981.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6480b1811868aac4570b6a09ebdf09f0e3f0ccb Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_981.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_986.jpg b/training/my_horse2zebra/train_A/n02381460_986.jpg new file mode 100644 index 0000000000000000000000000000000000000000..132b0b28e2f71b949dac44512556a8ecebd38841 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_986.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_993.jpg b/training/my_horse2zebra/train_A/n02381460_993.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e39b931021608b52cd83ff04f379e6c4047c4a6 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_993.jpg differ diff --git a/training/my_horse2zebra/train_A/n02381460_998.jpg b/training/my_horse2zebra/train_A/n02381460_998.jpg new file mode 100644 index 0000000000000000000000000000000000000000..722113566c4365a0f189d44b0cb4a90d70b37334 Binary files /dev/null and b/training/my_horse2zebra/train_A/n02381460_998.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10007.jpg b/training/my_horse2zebra/train_B/n02391049_10007.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2858b0e8e36bcda966c5536da27b6bbc8c89301c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10007.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10027.jpg b/training/my_horse2zebra/train_B/n02391049_10027.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0027896a48b8de7df2d70cfdf7155792995684f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10027.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1004.jpg b/training/my_horse2zebra/train_B/n02391049_1004.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28aa240773802e220c69458c81776cc7392f7f79 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1004.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10047.jpg b/training/my_horse2zebra/train_B/n02391049_10047.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da06d1080352322771540dab003bdaf2b58c8998 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10047.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10063.jpg b/training/my_horse2zebra/train_B/n02391049_10063.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0fa0ee7edac4678fb74463e72109a882b78aa660 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10063.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_101.jpg b/training/my_horse2zebra/train_B/n02391049_101.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ae39e811002ca42003ef360684d49fb86c272f0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_101.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1012.jpg b/training/my_horse2zebra/train_B/n02391049_1012.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e50eca3ff83653a39a35cece86f7d0a97c0c1574 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1012.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10122.jpg b/training/my_horse2zebra/train_B/n02391049_10122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b9c9fbc20545620edf5d53eccb4e7603d7221d6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10122.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10123.jpg b/training/my_horse2zebra/train_B/n02391049_10123.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81202289c9b7ccd970621ba55bb0436f61c27a1c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10123.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10129.jpg b/training/my_horse2zebra/train_B/n02391049_10129.jpg new file mode 100644 index 0000000000000000000000000000000000000000..262c6da9c1320c622ec45f60778575815fe11492 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10129.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10131.jpg b/training/my_horse2zebra/train_B/n02391049_10131.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1b14c148314dc5c6ab3b72637c1d3bcc1c923db Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10131.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10132.jpg b/training/my_horse2zebra/train_B/n02391049_10132.jpg new file mode 100644 index 0000000000000000000000000000000000000000..969ad2b3be450e814850619f66b09c8cca9b47bd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10132.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10134.jpg b/training/my_horse2zebra/train_B/n02391049_10134.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77298998a9ba4f25d4871551bacb5dc1e436fbfd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10134.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10158.jpg b/training/my_horse2zebra/train_B/n02391049_10158.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5bda2e7e31059c4fb552471d5876db6a81bc7a82 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10158.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10159.jpg b/training/my_horse2zebra/train_B/n02391049_10159.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43d34cc0fb1c2001e81182faf709d838257d8f59 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10159.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10165.jpg b/training/my_horse2zebra/train_B/n02391049_10165.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6216d0ffe5f506432f39023ca1fff28598b513fa Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10165.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10175.jpg b/training/my_horse2zebra/train_B/n02391049_10175.jpg new file mode 100644 index 0000000000000000000000000000000000000000..560acdff32c42ffad2ae20afba9fbf214f3b422d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10175.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_102.jpg b/training/my_horse2zebra/train_B/n02391049_102.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0e1f47b2d5a82ef445643b69c9f27744b7bbbfd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_102.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10209.jpg b/training/my_horse2zebra/train_B/n02391049_10209.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6c0bf768f560c553c9b85cd955b369b286a6096 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10209.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10239.jpg b/training/my_horse2zebra/train_B/n02391049_10239.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca1dcfac172dc021751eda86e3dbadf9be7a9eda Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10239.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1024.jpg b/training/my_horse2zebra/train_B/n02391049_1024.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b22a953947158cd671a318f99118734e0e3a548a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1024.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10244.jpg b/training/my_horse2zebra/train_B/n02391049_10244.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f980b20aee33ff976b3a192865ef8c9936ec59e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10244.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1025.jpg b/training/my_horse2zebra/train_B/n02391049_1025.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec598a9fd85ed56d0891742889b8b6a52b6825d4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1025.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10257.jpg b/training/my_horse2zebra/train_B/n02391049_10257.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7e620dfbc81fe81f7844681bcbd158fc0e48859 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10257.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1026.jpg b/training/my_horse2zebra/train_B/n02391049_1026.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72c6d01da783bbfa5116b8e30149c5a3aa307680 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1026.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10269.jpg b/training/my_horse2zebra/train_B/n02391049_10269.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2e451df1b7d1a5e4882cd7ae30dad54c05f7211 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10269.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10278.jpg b/training/my_horse2zebra/train_B/n02391049_10278.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69c6fd75935977fbbb31bbb7b9a4da93a296c4cf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10278.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1028.jpg b/training/my_horse2zebra/train_B/n02391049_1028.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a733288995227471f091fb88434fad7c73a65f5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1028.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10295.jpg b/training/my_horse2zebra/train_B/n02391049_10295.jpg new file mode 100644 index 0000000000000000000000000000000000000000..354daf5f062bbcf1cec1cd935a721629c92375c0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10295.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10307.jpg b/training/my_horse2zebra/train_B/n02391049_10307.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a0231827c27e106b97c496d36b5ed74bac9f658 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10307.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10322.jpg b/training/my_horse2zebra/train_B/n02391049_10322.jpg new file mode 100644 index 0000000000000000000000000000000000000000..176606b72daffdcb4f0573c65389a93004ffa94c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10322.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10324.jpg b/training/my_horse2zebra/train_B/n02391049_10324.jpg new file mode 100644 index 0000000000000000000000000000000000000000..deacbbcf8c74533cf4608ae1313aa7f5d3528023 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10324.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10336.jpg b/training/my_horse2zebra/train_B/n02391049_10336.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16dd74df4439d2501adc62092ca55a2cf29dac7b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10336.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10339.jpg b/training/my_horse2zebra/train_B/n02391049_10339.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77fc90177a7f9af62ab553ee4823116f70e7d5b8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10339.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10342.jpg b/training/my_horse2zebra/train_B/n02391049_10342.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8dde1bda9a9370731e7af3aafec404bc2b5c9851 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10342.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10356.jpg b/training/my_horse2zebra/train_B/n02391049_10356.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecd7907ec74914c7108c3bf24b24dcfa4ee792eb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10356.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1038.jpg b/training/my_horse2zebra/train_B/n02391049_1038.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6935e3ccbea140642aafa7fc466cbaee9c970c51 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1038.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10398.jpg b/training/my_horse2zebra/train_B/n02391049_10398.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74f6a9b3b61bc75fb6a1b71ebd12b6f0d43027a3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10398.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1042.jpg b/training/my_horse2zebra/train_B/n02391049_1042.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84664beedb35f97bb4bc12da4ed7c65a33759921 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1042.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10426.jpg b/training/my_horse2zebra/train_B/n02391049_10426.jpg new file mode 100644 index 0000000000000000000000000000000000000000..59023a6fcfd8a234fc2011b7c0af4dbfc0317e52 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10426.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10427.jpg b/training/my_horse2zebra/train_B/n02391049_10427.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4d497f60a3aa8d8d7520a5ba5045074bd5c736d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10427.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10429.jpg b/training/my_horse2zebra/train_B/n02391049_10429.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a73bf0728b3188f5dfe46fafa7cf29364c1f2579 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10429.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10432.jpg b/training/my_horse2zebra/train_B/n02391049_10432.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0131f3eeca18a8ea22407ad61a7897528edcf11 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10432.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10435.jpg b/training/my_horse2zebra/train_B/n02391049_10435.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fdc2d0222602539f5e9228c47a2e603312bf672 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10435.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10452.jpg b/training/my_horse2zebra/train_B/n02391049_10452.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c257d1c7f2290310532527daa7afae68a3447100 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10452.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10454.jpg b/training/my_horse2zebra/train_B/n02391049_10454.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c397b2d9405b622f58ff0f2165c652991217250 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10454.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1046.jpg b/training/my_horse2zebra/train_B/n02391049_1046.jpg new file mode 100644 index 0000000000000000000000000000000000000000..519c61c962b436eb56419fb923d7d09d82c5ecd1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1046.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10461.jpg b/training/my_horse2zebra/train_B/n02391049_10461.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eee47b3307552810ac4ae92b963ebddc678d63a6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10461.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10467.jpg b/training/my_horse2zebra/train_B/n02391049_10467.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46664e158e478b04a101d402ae05a59f99f880c5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10467.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10497.jpg b/training/my_horse2zebra/train_B/n02391049_10497.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa63dd019d44b008b97ed711d2856fe2e8ac020f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10497.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10504.jpg b/training/my_horse2zebra/train_B/n02391049_10504.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64a80b667b29f8cc57d151beef7f87f77bdce986 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10504.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1053.jpg b/training/my_horse2zebra/train_B/n02391049_1053.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6b781342c6859f2ff7c8becfd933aa3a4f5cafb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1053.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1054.jpg b/training/my_horse2zebra/train_B/n02391049_1054.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af85c202c2a05e0a00bbb8ece5d6032c35cc64c4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1054.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1056.jpg b/training/my_horse2zebra/train_B/n02391049_1056.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4f1be89bf8d285ac885a9c5cf56af6f69c02a8b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1056.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10576.jpg b/training/my_horse2zebra/train_B/n02391049_10576.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c88bb93426f786a1ed6b0c6fe7a90d625c512e26 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10576.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10589.jpg b/training/my_horse2zebra/train_B/n02391049_10589.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bcb1277c087a460cf434c58f8e80a9f75b88035c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10589.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10591.jpg b/training/my_horse2zebra/train_B/n02391049_10591.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94ee6606fea2e322d747c34a8c21131afafdf07d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10591.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10596.jpg b/training/my_horse2zebra/train_B/n02391049_10596.jpg new file mode 100644 index 0000000000000000000000000000000000000000..787a2599ab8eefa748c9e3d68726fe3848a57364 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10596.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10597.jpg b/training/my_horse2zebra/train_B/n02391049_10597.jpg new file mode 100644 index 0000000000000000000000000000000000000000..825361ee78848f118cb2b4b4b915c180444e2a0a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10597.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10613.jpg b/training/my_horse2zebra/train_B/n02391049_10613.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c0eb88f88cc7f2375ca0600468cdae9b0a7b462 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10613.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1062.jpg b/training/my_horse2zebra/train_B/n02391049_1062.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a44d172f8ea64f7fbc6d41b781d4b3405962422 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1062.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1063.jpg b/training/my_horse2zebra/train_B/n02391049_1063.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58a045fb86e004469792b3f08a143d9828b41d5f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1063.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10636.jpg b/training/my_horse2zebra/train_B/n02391049_10636.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61aeb402491d686e4288d5aae87a0565b6a7693e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10636.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1064.jpg b/training/my_horse2zebra/train_B/n02391049_1064.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6de55d2a6210520f29033a23d5c1c6bd06fba6ce Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1064.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10649.jpg b/training/my_horse2zebra/train_B/n02391049_10649.jpg new file mode 100644 index 0000000000000000000000000000000000000000..261a5538d624e852b4ba530d4ff68e90c1299704 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10649.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1067.jpg b/training/my_horse2zebra/train_B/n02391049_1067.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bbab4109b9014da7a3251be1f98d7db13501f506 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1067.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10681.jpg b/training/my_horse2zebra/train_B/n02391049_10681.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22e4e070f4b5abbd8911ca613f6c9acf98b2f736 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10681.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10682.jpg b/training/my_horse2zebra/train_B/n02391049_10682.jpg new file mode 100644 index 0000000000000000000000000000000000000000..618ec34d1b60da22b8c6ce661168c1c0de752b2d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10682.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_107.jpg b/training/my_horse2zebra/train_B/n02391049_107.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b56cc9735d0abd15b43462d35f646d04a147fd5b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_107.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10701.jpg b/training/my_horse2zebra/train_B/n02391049_10701.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe6cc04dac4f7c387b2676f3db7d705614b27d5f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10701.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1073.jpg b/training/my_horse2zebra/train_B/n02391049_1073.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78888bf5dc882745b30a494512830b183b2704b6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1073.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10738.jpg b/training/my_horse2zebra/train_B/n02391049_10738.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9f79186ea07aeb210bf1dd94ce3ee0dfef499bc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10738.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10739.jpg b/training/my_horse2zebra/train_B/n02391049_10739.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aaac959c6264d9f1313926db6df4d9f699912554 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10739.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10749.jpg b/training/my_horse2zebra/train_B/n02391049_10749.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12a93a7723ecd579b18668126f402204eae41c66 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10749.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10754.jpg b/training/my_horse2zebra/train_B/n02391049_10754.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96fd56509ab55e26c1fc430fc79c2e33e55bcde0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10754.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1076.jpg b/training/my_horse2zebra/train_B/n02391049_1076.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c232f4473257a52f30c1bf2b54c5f7732bb4d2c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1076.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_108.jpg b/training/my_horse2zebra/train_B/n02391049_108.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8c56ad4dca7a7cf2dece2e8d640f5c8c4463e39 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_108.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10824.jpg b/training/my_horse2zebra/train_B/n02391049_10824.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d674b0cc7bd67f73f1f34b4d18e3bfb4a90d55e1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10824.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10825.jpg b/training/my_horse2zebra/train_B/n02391049_10825.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c3b095cc3f36c35f9b9b99252573f286bde2a70 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10825.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10837.jpg b/training/my_horse2zebra/train_B/n02391049_10837.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eedae37cab7f406472afb67f7daec17e7d0283ca Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10837.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1086.jpg b/training/my_horse2zebra/train_B/n02391049_1086.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e1c9e5719b117acee21f31695b5451366158528 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1086.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1087.jpg b/training/my_horse2zebra/train_B/n02391049_1087.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ea5d452b78f4bc21594770103df9bf4984c5541 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1087.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1088.jpg b/training/my_horse2zebra/train_B/n02391049_1088.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17d7d8c4343a09e83f8d33da2fab58b712afebec Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1088.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_109.jpg b/training/my_horse2zebra/train_B/n02391049_109.jpg new file mode 100644 index 0000000000000000000000000000000000000000..740ee055cf028fe7fd4978ff18644acf24e6517e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_109.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10917.jpg b/training/my_horse2zebra/train_B/n02391049_10917.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58afba28e7095658b57565862fc9cfe6bfee8b41 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10917.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10948.jpg b/training/my_horse2zebra/train_B/n02391049_10948.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1f743524d596f81466cf8aeaaa1621407928fd6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10948.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1095.jpg b/training/my_horse2zebra/train_B/n02391049_1095.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fff7aceff7878370dd4c7f0d4bbf868802a7f445 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1095.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_10966.jpg b/training/my_horse2zebra/train_B/n02391049_10966.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2aab36d90e9580cfeafb5dce6217880a754ad44 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_10966.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1097.jpg b/training/my_horse2zebra/train_B/n02391049_1097.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c8e51dc708f9a153bbcedfe5e9fc6ffd3c9689d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1097.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1099.jpg b/training/my_horse2zebra/train_B/n02391049_1099.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c141ba66d5ab30af05fdfd986ea4b7d690a0ccd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1099.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_11.jpg b/training/my_horse2zebra/train_B/n02391049_11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f29509ea564eac468ce7da3897a79beb69746ba Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_11.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1104.jpg b/training/my_horse2zebra/train_B/n02391049_1104.jpg new file mode 100644 index 0000000000000000000000000000000000000000..143ea83f2580218c32e5714a65d38aeb575ade78 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1104.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_11041.jpg b/training/my_horse2zebra/train_B/n02391049_11041.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7c48511f9a821a3b3f3f996803bee594d855181 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_11041.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1105.jpg b/training/my_horse2zebra/train_B/n02391049_1105.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fdd310e20bba4310410d4f10a4000bd68618e372 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1105.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_11063.jpg b/training/my_horse2zebra/train_B/n02391049_11063.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7a5572bce1873fdfe46108b8ee67201bfb8cdb4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_11063.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_111.jpg b/training/my_horse2zebra/train_B/n02391049_111.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc30c96fc18fd1948aa963224f9a5052f403d630 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_111.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1112.jpg b/training/my_horse2zebra/train_B/n02391049_1112.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03ab7ffd56a20bff52d94a7264651936fa586248 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1112.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_11128.jpg b/training/my_horse2zebra/train_B/n02391049_11128.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a33b0d84ce98a69d874cf754bb93ad63206f7495 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_11128.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1113.jpg b/training/my_horse2zebra/train_B/n02391049_1113.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fbc01855f51fc87b02db51e354c9483b7e42eaf8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1113.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_11153.jpg b/training/my_horse2zebra/train_B/n02391049_11153.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d16af25ab4472de10164a8d4a50c357c30ab1ced Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_11153.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_11162.jpg b/training/my_horse2zebra/train_B/n02391049_11162.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17c82f400d1361158dcdd351035633872b04078d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_11162.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_11166.jpg b/training/my_horse2zebra/train_B/n02391049_11166.jpg new file mode 100644 index 0000000000000000000000000000000000000000..184262fa604ee86a93096d726a6bdd6ab1decc2c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_11166.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1118.jpg b/training/my_horse2zebra/train_B/n02391049_1118.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a59ea02596e2d7531d4642f6a155396ebcc3ec79 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1118.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_11181.jpg b/training/my_horse2zebra/train_B/n02391049_11181.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc0fdd6286c5a983471c4345bd093ccb806cfc78 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_11181.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_11195.jpg b/training/my_horse2zebra/train_B/n02391049_11195.jpg new file mode 100644 index 0000000000000000000000000000000000000000..160680e562ff40ed90d20faa8940a127a752d8f6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_11195.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1121.jpg b/training/my_horse2zebra/train_B/n02391049_1121.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88c29af1c47019edcfc84546a1d6c2b5c841c76a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1121.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1124.jpg b/training/my_horse2zebra/train_B/n02391049_1124.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe0a4e9d5475a7a61122a43db1839d4fa49b4fcf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1124.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1125.jpg b/training/my_horse2zebra/train_B/n02391049_1125.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6743b6173f9d3719246a76e10f7daefff9591ffd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1125.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1126.jpg b/training/my_horse2zebra/train_B/n02391049_1126.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0919b30f715574767d564c23f71f41b660c68fd6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1126.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1127.jpg b/training/my_horse2zebra/train_B/n02391049_1127.jpg new file mode 100644 index 0000000000000000000000000000000000000000..56c998938c5d23353cfa54ee93eeb49e64df20ad Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1127.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1129.jpg b/training/my_horse2zebra/train_B/n02391049_1129.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2595a76910a22f8dc3e045430a7ef372e916e374 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1129.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1131.jpg b/training/my_horse2zebra/train_B/n02391049_1131.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c93cc035bd462f9a48e29d3fbab18f31bd4a148 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1131.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1135.jpg b/training/my_horse2zebra/train_B/n02391049_1135.jpg new file mode 100644 index 0000000000000000000000000000000000000000..312c32d829fdc2a4319298135483023911532e87 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1135.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1145.jpg b/training/my_horse2zebra/train_B/n02391049_1145.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9efc6c457035e721d05c06bb7f004ffe4825f639 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1145.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1147.jpg b/training/my_horse2zebra/train_B/n02391049_1147.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c965324b29f5ebc2f8f75a50e0301f7dcfce523 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1147.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1148.jpg b/training/my_horse2zebra/train_B/n02391049_1148.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09e0b655b78d90a2b6c85c0adf6f56b50e9f5b5b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1148.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1149.jpg b/training/my_horse2zebra/train_B/n02391049_1149.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4963911ac0bf58aac5fc0f1442ab47189c387dea Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1149.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_115.jpg b/training/my_horse2zebra/train_B/n02391049_115.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa59ad6a3ed817439b6394acebec064f6a112b89 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_115.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1153.jpg b/training/my_horse2zebra/train_B/n02391049_1153.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9253ba6159120516a954f68055f039aaa4937795 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1153.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1156.jpg b/training/my_horse2zebra/train_B/n02391049_1156.jpg new file mode 100644 index 0000000000000000000000000000000000000000..375958f6edf1e88a850b56a4067fc1518b30e9d3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1156.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1158.jpg b/training/my_horse2zebra/train_B/n02391049_1158.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a81adb2253b7edc244e930266a8339f492ec708 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1158.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1159.jpg b/training/my_horse2zebra/train_B/n02391049_1159.jpg new file mode 100644 index 0000000000000000000000000000000000000000..940b96de9911dfc0806b63bf9892ad63dec7e66e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1159.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_116.jpg b/training/my_horse2zebra/train_B/n02391049_116.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ace9095b6b2faf6893306b32a9a4404c663fe64 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_116.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1163.jpg b/training/my_horse2zebra/train_B/n02391049_1163.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfe5551cef11afb0f93b532622f9f59aa815255d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1163.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1164.jpg b/training/my_horse2zebra/train_B/n02391049_1164.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e96a6037fe1b32dba257329472a731d665604399 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1164.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1172.jpg b/training/my_horse2zebra/train_B/n02391049_1172.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e24ec7a5a043b4f7c97c2f499c2f59b28fe18463 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1172.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1174.jpg b/training/my_horse2zebra/train_B/n02391049_1174.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9a99b9c35fdc3b22580c8ea26980b547c4d5e8f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1174.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1175.jpg b/training/my_horse2zebra/train_B/n02391049_1175.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad5964b0afae11d8ae88fea5be55bd806b38e94e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1175.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1178.jpg b/training/my_horse2zebra/train_B/n02391049_1178.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4fbdfea31869d3adb8afa3cc41cffbbe4b9f6d99 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1178.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_118.jpg b/training/my_horse2zebra/train_B/n02391049_118.jpg new file mode 100644 index 0000000000000000000000000000000000000000..651bab2dab0b305230dd0643982ef90cfefb3ac4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_118.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1181.jpg b/training/my_horse2zebra/train_B/n02391049_1181.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f573b3833c640726d59a38f399558dfc75a629f1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1181.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1183.jpg b/training/my_horse2zebra/train_B/n02391049_1183.jpg new file mode 100644 index 0000000000000000000000000000000000000000..556d5a7281986d5290228320444f4ed598cfc23f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1183.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1184.jpg b/training/my_horse2zebra/train_B/n02391049_1184.jpg new file mode 100644 index 0000000000000000000000000000000000000000..142532995b7f6dda18ee9f6af977655d29e41f5c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1184.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1188.jpg b/training/my_horse2zebra/train_B/n02391049_1188.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d892a27d41de975e6b9a40701098e717c6ecff0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1188.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1189.jpg b/training/my_horse2zebra/train_B/n02391049_1189.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58c0fd5fd5ff4818131df81cf4cf8cacf318eb05 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1189.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_119.jpg b/training/my_horse2zebra/train_B/n02391049_119.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ff2403975bae800e7b956743ff4fb57add44175 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_119.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1191.jpg b/training/my_horse2zebra/train_B/n02391049_1191.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a23bee581289cf8893fa57baa0d6be454a9ff249 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1191.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1195.jpg b/training/my_horse2zebra/train_B/n02391049_1195.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66417637eefb77499ee8c6734c527d938e613219 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1195.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1198.jpg b/training/my_horse2zebra/train_B/n02391049_1198.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef3d8d186996dc61439c84d0a66751c5d79eb1e4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1198.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1199.jpg b/training/my_horse2zebra/train_B/n02391049_1199.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5fe616129f63766bffb4c30262c6345e91c9f5a5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1199.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_12.jpg b/training/my_horse2zebra/train_B/n02391049_12.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92e831103f8a3becd358e5f1e4214b1e6892c31c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_12.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_121.jpg b/training/my_horse2zebra/train_B/n02391049_121.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74b8b30b7492438a120f9d1a68c5ab22b3abcc0e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_121.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1211.jpg b/training/my_horse2zebra/train_B/n02391049_1211.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76bafaea79ee4954ef36d411286393424808a2dc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1211.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_122.jpg b/training/my_horse2zebra/train_B/n02391049_122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7d6f31afe66ba846538c5aa361563de70f849b0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_122.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1223.jpg b/training/my_horse2zebra/train_B/n02391049_1223.jpg new file mode 100644 index 0000000000000000000000000000000000000000..479429aafb02ce56f4740cc60ef59b6449c6be0e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1223.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1235.jpg b/training/my_horse2zebra/train_B/n02391049_1235.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98726e3392410ff999bd375a60aeb07b998c01d1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1235.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1236.jpg b/training/my_horse2zebra/train_B/n02391049_1236.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a7f33d6e4023ab4f17f44bb131f743ea54d15494 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1236.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_125.jpg b/training/my_horse2zebra/train_B/n02391049_125.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67768b82d61f4ad0ac7f283154590e3e7faa0f0e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_125.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1256.jpg b/training/my_horse2zebra/train_B/n02391049_1256.jpg new file mode 100644 index 0000000000000000000000000000000000000000..806425fdf6309e7cc2539a9b72c534ea3a7875e7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1256.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1267.jpg b/training/my_horse2zebra/train_B/n02391049_1267.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c1b40e857972c20d1eac42fbdf89741af751e36 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1267.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_127.jpg b/training/my_horse2zebra/train_B/n02391049_127.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2780d7838a8be608812b26f64518760f444d79c2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_127.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1288.jpg b/training/my_horse2zebra/train_B/n02391049_1288.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ffe6156194fe61b0054742b4af3672c23b271be Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1288.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1295.jpg b/training/my_horse2zebra/train_B/n02391049_1295.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a882ffaa310bf46ee5f15d197114781f418c34e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1295.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1296.jpg b/training/my_horse2zebra/train_B/n02391049_1296.jpg new file mode 100644 index 0000000000000000000000000000000000000000..370de1109cc2b8011e38e7ac7725e5b2d2039115 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1296.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1303.jpg b/training/my_horse2zebra/train_B/n02391049_1303.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cccd2bb7bac36bb9674cc2972147a5090737c010 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1303.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1309.jpg b/training/my_horse2zebra/train_B/n02391049_1309.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62cc486b1651ea7571a723bd15d6f2e0a4d5f56e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1309.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1314.jpg b/training/my_horse2zebra/train_B/n02391049_1314.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18f6b82a99bd1b345291f086b3e64587230234bf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1314.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1316.jpg b/training/my_horse2zebra/train_B/n02391049_1316.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58338f41cd31f894c32aea71a7981ddf1b80bb2f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1316.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_133.jpg b/training/my_horse2zebra/train_B/n02391049_133.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14c74dc6d064f2240e1071d8f373d2f8c3117ba8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_133.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1355.jpg b/training/my_horse2zebra/train_B/n02391049_1355.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2e9b0799896af5a5d2d066d2efa98f511241c47 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1355.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1378.jpg b/training/my_horse2zebra/train_B/n02391049_1378.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f70d8a93e1ed1e29ec2a7ea897c10dae878df81b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1378.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1404.jpg b/training/my_horse2zebra/train_B/n02391049_1404.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc275293739eb7133135b533a6145894c62d3e90 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1404.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_141.jpg b/training/my_horse2zebra/train_B/n02391049_141.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e91fd65c6d2ee97f02e96eafdc59b40cd2c3b7ee Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_141.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1417.jpg b/training/my_horse2zebra/train_B/n02391049_1417.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62d8de1c1d17593334f722890b4d25cfa1b53034 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1417.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1419.jpg b/training/my_horse2zebra/train_B/n02391049_1419.jpg new file mode 100644 index 0000000000000000000000000000000000000000..488332b2d2c1faaecf5724776d17e05173c3e68a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1419.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_142.jpg b/training/my_horse2zebra/train_B/n02391049_142.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac9b45e5ea9a4e57774b912fee126dce7f722ee4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_142.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1434.jpg b/training/my_horse2zebra/train_B/n02391049_1434.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f42fffa747e05b1810014e50d6377a87ffdfbd7c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1434.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1436.jpg b/training/my_horse2zebra/train_B/n02391049_1436.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f604da24946a765be940f1594d53b64840140553 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1436.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1441.jpg b/training/my_horse2zebra/train_B/n02391049_1441.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8a458e630af048a8cd5bb88b841560bec86cf48 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1441.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1442.jpg b/training/my_horse2zebra/train_B/n02391049_1442.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3832b2d76705ff34d7c29834225e9a25a13d59f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1442.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1451.jpg b/training/my_horse2zebra/train_B/n02391049_1451.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecfd279c7a0de6bcbb4af3fec2a8a29471312a6a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1451.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1459.jpg b/training/my_horse2zebra/train_B/n02391049_1459.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e35f370fca0bc3c0d30265c06369537a36ce2179 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1459.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_146.jpg b/training/my_horse2zebra/train_B/n02391049_146.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27fbade8c9735fda55476e593761a5aaa7c3e25b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_146.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1464.jpg b/training/my_horse2zebra/train_B/n02391049_1464.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e1945e72771523f0ea1469e666204579db4893a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1464.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1465.jpg b/training/my_horse2zebra/train_B/n02391049_1465.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd1639f5127763e463b152def15381ac3876045b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1465.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_147.jpg b/training/my_horse2zebra/train_B/n02391049_147.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8e7995a7a818bb9589b1654c9a045ecaa547213 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_147.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1479.jpg b/training/my_horse2zebra/train_B/n02391049_1479.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01fe356af8690767951e1ecabb50f4c5273be0c6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1479.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_148.jpg b/training/my_horse2zebra/train_B/n02391049_148.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69bed19b0984286d049f7d8ba29dba7b213f0096 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_148.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1495.jpg b/training/my_horse2zebra/train_B/n02391049_1495.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94de23412fe50d9d3a5b0c962d184152d56cc9ce Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1495.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_15.jpg b/training/my_horse2zebra/train_B/n02391049_15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05d808945af39684c3b7f2ad46668cec4115e116 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_15.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1509.jpg b/training/my_horse2zebra/train_B/n02391049_1509.jpg new file mode 100644 index 0000000000000000000000000000000000000000..277b1dcd47415b84a2b70e31a90b3a13a6914c1f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1509.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1516.jpg b/training/my_horse2zebra/train_B/n02391049_1516.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a59e823b9b1dbc131b2ce78db4e65cc0ac8547e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1516.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_152.jpg b/training/my_horse2zebra/train_B/n02391049_152.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95508a8705b081700c00eee027b92e8709ab2cbb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_152.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1523.jpg b/training/my_horse2zebra/train_B/n02391049_1523.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53b859a7407325def6ff58078c4d26d4f3f34c6f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1523.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1524.jpg b/training/my_horse2zebra/train_B/n02391049_1524.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55fbf6e07dfcd8244aac05807e109456fe753030 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1524.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1526.jpg b/training/my_horse2zebra/train_B/n02391049_1526.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1786163e9aa9d16a328faa530523caada6953f9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1526.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1531.jpg b/training/my_horse2zebra/train_B/n02391049_1531.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b21452d7f1edfd54fbf2420188a37a5d08dc1fc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1531.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1532.jpg b/training/my_horse2zebra/train_B/n02391049_1532.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88dd35eadeb66a81ab604a2716ad1bc587a99dd5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1532.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1535.jpg b/training/my_horse2zebra/train_B/n02391049_1535.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4cc98650596ef7dbd60cada2d664edd8f882c07 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1535.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_154.jpg b/training/my_horse2zebra/train_B/n02391049_154.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5de8d22f6eda84219b478f2c0a5d25df47662c65 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_154.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_155.jpg b/training/my_horse2zebra/train_B/n02391049_155.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddc8a72e0701ef3cd29d9f321381691adb5b0951 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_155.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1551.jpg b/training/my_horse2zebra/train_B/n02391049_1551.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e18166eea4a781127d075be5faafac022210c6a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1551.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1555.jpg b/training/my_horse2zebra/train_B/n02391049_1555.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d1b78618d66598b76f99ad53065ee58e72a9bdd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1555.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1567.jpg b/training/my_horse2zebra/train_B/n02391049_1567.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b32956d1de04bb13ce1a2fd9fcdbc306cf4fa51 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1567.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_161.jpg b/training/my_horse2zebra/train_B/n02391049_161.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6dfb9d32f355eb899e3b3dafe823152cf200de90 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_161.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_163.jpg b/training/my_horse2zebra/train_B/n02391049_163.jpg new file mode 100644 index 0000000000000000000000000000000000000000..324241e0304764bbf957f7770765c8074ba12afe Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_163.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_164.jpg b/training/my_horse2zebra/train_B/n02391049_164.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a423cf326005814a818d4f92c0501aed6843e6e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_164.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_165.jpg b/training/my_horse2zebra/train_B/n02391049_165.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eec897d0c03bded8f62ad0380046d1512fb94f18 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_165.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1652.jpg b/training/my_horse2zebra/train_B/n02391049_1652.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3428c0f070a8ae0b5197756bdbe4634495ca105b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1652.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_166.jpg b/training/my_horse2zebra/train_B/n02391049_166.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3760a79eb22994f5134fde6f3c938f5843e78ad Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_166.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_167.jpg b/training/my_horse2zebra/train_B/n02391049_167.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d8f0dfce8903f4585614321dd155257d8d90281 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_167.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1679.jpg b/training/my_horse2zebra/train_B/n02391049_1679.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c67a045e9748bc570a6233d08d511da6d5d3d47 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1679.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_168.jpg b/training/my_horse2zebra/train_B/n02391049_168.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed7a6485009d7950be90a05ee0caf4165391b2a2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_168.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_169.jpg b/training/my_horse2zebra/train_B/n02391049_169.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e66a6fe4e4741e2eb6302034621fc0adce5d65e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_169.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_17.jpg b/training/my_horse2zebra/train_B/n02391049_17.jpg new file mode 100644 index 0000000000000000000000000000000000000000..193d41be9aa249ef8c7d7a79b831de5196216550 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_17.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_171.jpg b/training/my_horse2zebra/train_B/n02391049_171.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8283457b8a0f07bb81cc378a1eaa6f55e25b934 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_171.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1712.jpg b/training/my_horse2zebra/train_B/n02391049_1712.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6580e44af2e4e293c11846852987fef1f378872 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1712.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1721.jpg b/training/my_horse2zebra/train_B/n02391049_1721.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e13917f52ff7b5e13384cb890f676f5d9f8f5113 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1721.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1725.jpg b/training/my_horse2zebra/train_B/n02391049_1725.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1da073a65713c6731d68fa83632897bee67d1cc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1725.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_173.jpg b/training/my_horse2zebra/train_B/n02391049_173.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0532847609d8cea666dcfb904bffcf6c65b4a7a4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_173.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1731.jpg b/training/my_horse2zebra/train_B/n02391049_1731.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43de5ec50081bd1478be43d0640ae4d13e9d1e39 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1731.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1738.jpg b/training/my_horse2zebra/train_B/n02391049_1738.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd34fc99c6bdb52ba713f15447502251f1682965 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1738.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1742.jpg b/training/my_horse2zebra/train_B/n02391049_1742.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a89c8d0f1a522fb7df72a213abffe0b3a3eb9c9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1742.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1743.jpg b/training/my_horse2zebra/train_B/n02391049_1743.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d56eb71c6694c8e85c73c4ac417df5f6ab946e9c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1743.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1751.jpg b/training/my_horse2zebra/train_B/n02391049_1751.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4e6ad994307c50de553bc5f8b1701ddbe6782e4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1751.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1752.jpg b/training/my_horse2zebra/train_B/n02391049_1752.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3499e692e4ecc79c46025ff14696d825390c32a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1752.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1758.jpg b/training/my_horse2zebra/train_B/n02391049_1758.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53ef1098d5bfab41cd6db8ec8d352f5abfd8feb2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1758.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_176.jpg b/training/my_horse2zebra/train_B/n02391049_176.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5b1403425ed623a65bbf17dc24b9bfaaa6446bc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_176.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_178.jpg b/training/my_horse2zebra/train_B/n02391049_178.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37407240145056a67d6370ec8dd289a307a09413 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_178.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1789.jpg b/training/my_horse2zebra/train_B/n02391049_1789.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b330ab488cc6e9d3e9b39b33ba9574e171d8ebb6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1789.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_18.jpg b/training/my_horse2zebra/train_B/n02391049_18.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad2f8dcda4a20dbbe05df09b21cbe0dae81f37ef Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_18.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1817.jpg b/training/my_horse2zebra/train_B/n02391049_1817.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f79076492f48b6aa790f72adf41e53ed3f7050e6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1817.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1818.jpg b/training/my_horse2zebra/train_B/n02391049_1818.jpg new file mode 100644 index 0000000000000000000000000000000000000000..513018e52489bb195ddce4cf760d4a12acef3510 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1818.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_182.jpg b/training/my_horse2zebra/train_B/n02391049_182.jpg new file mode 100644 index 0000000000000000000000000000000000000000..592b77e4922a822ae04e2b7b25469c58b5844014 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_182.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1827.jpg b/training/my_horse2zebra/train_B/n02391049_1827.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d71fe1c78bea9729a7af7774b9e69571adf263e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1827.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1836.jpg b/training/my_horse2zebra/train_B/n02391049_1836.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be5e92185e2b92218884fb13e3605f19c9c993c6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1836.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1844.jpg b/training/my_horse2zebra/train_B/n02391049_1844.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5944510ad656d11a147ad44115099e30ec71f1a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1844.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1846.jpg b/training/my_horse2zebra/train_B/n02391049_1846.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e81c04c35c9dec18e1b01f96c675a36a9bd0fd4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1846.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1852.jpg b/training/my_horse2zebra/train_B/n02391049_1852.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07b38fd5b47e97a2deb79564e3b3af412e2dcb83 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1852.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1855.jpg b/training/my_horse2zebra/train_B/n02391049_1855.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b8fef2fec585f9059104cec7e3a47b6a712aef1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1855.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1869.jpg b/training/my_horse2zebra/train_B/n02391049_1869.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1fb41967b363bd73273bd14b46257bb9418d0b5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1869.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1875.jpg b/training/my_horse2zebra/train_B/n02391049_1875.jpg new file mode 100644 index 0000000000000000000000000000000000000000..500d942bc2321e51cf57e3342903243d460bc38c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1875.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1884.jpg b/training/my_horse2zebra/train_B/n02391049_1884.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97e5827a7323ff889eb25fbc68c2e74e283a613f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1884.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1891.jpg b/training/my_horse2zebra/train_B/n02391049_1891.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7e8c722a2ac3e4dfb8d53b115d4ab31eed6af37 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1891.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1894.jpg b/training/my_horse2zebra/train_B/n02391049_1894.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efa10a5a572be850de1f08140609649adb83a63a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1894.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_19.jpg b/training/my_horse2zebra/train_B/n02391049_19.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ca5a3537798f43daf273faad530007ee616494b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_19.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1908.jpg b/training/my_horse2zebra/train_B/n02391049_1908.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07bec0a3467bd1c4d4c9aad26d8fac36e3b6e667 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1908.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_192.jpg b/training/my_horse2zebra/train_B/n02391049_192.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfcbf03ed59d80534b9cb6389c7b599d58c84612 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_192.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1928.jpg b/training/my_horse2zebra/train_B/n02391049_1928.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8ff08d41727c17870b9604f0a3554b3904327a8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1928.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_193.jpg b/training/my_horse2zebra/train_B/n02391049_193.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a22b1dd1249c0e3419325caeb3e0547e3a476864 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_193.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1937.jpg b/training/my_horse2zebra/train_B/n02391049_1937.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55dae5735a91535201dd5ee06eeecfd9b599c77a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1937.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1946.jpg b/training/my_horse2zebra/train_B/n02391049_1946.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32a7273055383ca409f041a8a437b573b559157b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1946.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1952.jpg b/training/my_horse2zebra/train_B/n02391049_1952.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec10e4868c6d85a4f8c3572ac9197f8be87e6f0e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1952.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1973.jpg b/training/my_horse2zebra/train_B/n02391049_1973.jpg new file mode 100644 index 0000000000000000000000000000000000000000..751b966f5a43a1dc386f30390c489a9e7cb17e28 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1973.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_1992.jpg b/training/my_horse2zebra/train_B/n02391049_1992.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce6f6895710947aa038b955427dc95993e64c277 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_1992.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2.jpg b/training/my_horse2zebra/train_B/n02391049_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..390a937ed88f2e75c67b7d4c7d5db1d6795437b9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2003.jpg b/training/my_horse2zebra/train_B/n02391049_2003.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81f86bd15519289eb96e870f0b660b291accb95b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2003.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2005.jpg b/training/my_horse2zebra/train_B/n02391049_2005.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6a900351c3ac4c34333e3bcd110845480502967 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2005.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2014.jpg b/training/my_horse2zebra/train_B/n02391049_2014.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddfb5c38f2f4e4c127f972018878b67ae1100771 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2014.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2017.jpg b/training/my_horse2zebra/train_B/n02391049_2017.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df4e7fe425c1a9d8df04b19e222548cda2488b80 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2017.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2018.jpg b/training/my_horse2zebra/train_B/n02391049_2018.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e92669753c7e56e997542cf6931cc5ba84c2e97 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2018.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_202.jpg b/training/my_horse2zebra/train_B/n02391049_202.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3738cf5932776c6361fb0e6f8387ddad56d1678 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_202.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2024.jpg b/training/my_horse2zebra/train_B/n02391049_2024.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4f596273200fe72df4a2b304783f9022faa25da Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2024.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2034.jpg b/training/my_horse2zebra/train_B/n02391049_2034.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ed237184f3bbbb727011a512f90c81b42854769 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2034.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2036.jpg b/training/my_horse2zebra/train_B/n02391049_2036.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa396c8a6895fa7a82f78edf24d3db91a8ede64b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2036.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2043.jpg b/training/my_horse2zebra/train_B/n02391049_2043.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5380febc13fdb012a4806dbcb554a516d0385c27 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2043.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2048.jpg b/training/my_horse2zebra/train_B/n02391049_2048.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e8f00dc0bc61cda7613d08a90f18723534b08e9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2048.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2049.jpg b/training/my_horse2zebra/train_B/n02391049_2049.jpg new file mode 100644 index 0000000000000000000000000000000000000000..56a1937a060837c3a2d2099527471b5444b947ab Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2049.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2057.jpg b/training/my_horse2zebra/train_B/n02391049_2057.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2031bc3a204fde0496b7284792f24a3ea575c8b5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2057.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2061.jpg b/training/my_horse2zebra/train_B/n02391049_2061.jpg new file mode 100644 index 0000000000000000000000000000000000000000..79cf2aac004be03aafdc7dd9baaf8e8c7ba2845a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2061.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2091.jpg b/training/my_horse2zebra/train_B/n02391049_2091.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7fd894a2e404801271010676b2f3ad662c1895c7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2091.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2098.jpg b/training/my_horse2zebra/train_B/n02391049_2098.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c608ee9e1c4d448281fd91acecb85fb0e755fd31 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2098.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2104.jpg b/training/my_horse2zebra/train_B/n02391049_2104.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e594c61eddeac169fb969c2bc81219f9aa3d4204 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2104.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2111.jpg b/training/my_horse2zebra/train_B/n02391049_2111.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c1e07c3167a397650354564f4886edb6daeaf0a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2111.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2116.jpg b/training/my_horse2zebra/train_B/n02391049_2116.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18141fb73b522b92e0f4b86d627c6ab27f768879 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2116.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2117.jpg b/training/my_horse2zebra/train_B/n02391049_2117.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65d4885d20c8e1c31d247a4f4f066006d6d04931 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2117.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2131.jpg b/training/my_horse2zebra/train_B/n02391049_2131.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5afa830fd04287e24beda7d15c1846ba0bc1780 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2131.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2133.jpg b/training/my_horse2zebra/train_B/n02391049_2133.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a53d899d035196d411d128ceb0eac0467f5cf8c2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2133.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2136.jpg b/training/my_horse2zebra/train_B/n02391049_2136.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2f6228e130324b1fbd22e18b0830a97ad7b9f02 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2136.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2141.jpg b/training/my_horse2zebra/train_B/n02391049_2141.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd0dbf2fa944a1d37bdd14ee4cd6fa1e6a079c87 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2141.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2146.jpg b/training/my_horse2zebra/train_B/n02391049_2146.jpg new file mode 100644 index 0000000000000000000000000000000000000000..114a9df1bf15c4e1ca398e9491554221e622a9bb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2146.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2155.jpg b/training/my_horse2zebra/train_B/n02391049_2155.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba0f0e7de3e0c595d193a4e284092bdb82f64185 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2155.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2157.jpg b/training/my_horse2zebra/train_B/n02391049_2157.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43eda961bb25329da8ce4bd27808572161a7d35c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2157.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2162.jpg b/training/my_horse2zebra/train_B/n02391049_2162.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4a2e8da2b88a47ce6a1b6c3d14bd1bb08e89308 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2162.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2163.jpg b/training/my_horse2zebra/train_B/n02391049_2163.jpg new file mode 100644 index 0000000000000000000000000000000000000000..579e27da39e06294c8da10273563c6eac5c13e6c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2163.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2165.jpg b/training/my_horse2zebra/train_B/n02391049_2165.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f77fd2f1e73ebc0e8d7c9f3861a4d8f4b99a3c4e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2165.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2166.jpg b/training/my_horse2zebra/train_B/n02391049_2166.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb2be5b3aefe078e49f242e4adde72185702d5ec Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2166.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_217.jpg b/training/my_horse2zebra/train_B/n02391049_217.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0af2b8e34337618c4eeb26484a133e519c71be05 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_217.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2177.jpg b/training/my_horse2zebra/train_B/n02391049_2177.jpg new file mode 100644 index 0000000000000000000000000000000000000000..632ca4ec76934d2ed2b12c05e2309a7ea0d210c5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2177.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2181.jpg b/training/my_horse2zebra/train_B/n02391049_2181.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5aebe10dbe66fd1699ca5ea3066d2191e3091fab Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2181.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2182.jpg b/training/my_horse2zebra/train_B/n02391049_2182.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4fb55f71896ace7997af8847bdaa4eb08230c604 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2182.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2183.jpg b/training/my_horse2zebra/train_B/n02391049_2183.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed78d92a22fac23e900b967b791f998e517b6cbc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2183.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2184.jpg b/training/my_horse2zebra/train_B/n02391049_2184.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34fe9663c52df658563797d86279fdea533b5536 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2184.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2187.jpg b/training/my_horse2zebra/train_B/n02391049_2187.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6f665546910a2a3f4887d7814fb07c045650786 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2187.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2191.jpg b/training/my_horse2zebra/train_B/n02391049_2191.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d6c1194bd7b05b8c2aafbfbf8dc0b74b9b93bd5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2191.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2197.jpg b/training/my_horse2zebra/train_B/n02391049_2197.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7da8b9890757ccfa1c246487b96c2830a4ff90d7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2197.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_22.jpg b/training/my_horse2zebra/train_B/n02391049_22.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf2dc6ea0ad9d130985c6f76aebe4b3ec893d281 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_22.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2201.jpg b/training/my_horse2zebra/train_B/n02391049_2201.jpg new file mode 100644 index 0000000000000000000000000000000000000000..340da99cc5a78e7349dca523eebdc54ce4994b59 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2201.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2204.jpg b/training/my_horse2zebra/train_B/n02391049_2204.jpg new file mode 100644 index 0000000000000000000000000000000000000000..524f58577aac6f9d459d296bca9c940b1ffa479d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2204.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_221.jpg b/training/my_horse2zebra/train_B/n02391049_221.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1587fa72e80b7cb268a3221b6b91e6c6e2221132 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_221.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2211.jpg b/training/my_horse2zebra/train_B/n02391049_2211.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a14295c83fa2c157a8926bed9f46db70d923bc85 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2211.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2214.jpg b/training/my_horse2zebra/train_B/n02391049_2214.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93670eaeb9824609716425f5276e36537b2007db Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2214.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2217.jpg b/training/my_horse2zebra/train_B/n02391049_2217.jpg new file mode 100644 index 0000000000000000000000000000000000000000..940f610cd25022154f2f90a800f7bec257b99aac Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2217.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2218.jpg b/training/my_horse2zebra/train_B/n02391049_2218.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73ac8e3430e4644fea3d659793a8a23ff00777f7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2218.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2221.jpg b/training/my_horse2zebra/train_B/n02391049_2221.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fce311639d8d997b8fef38c83ba800952463138c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2221.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2222.jpg b/training/my_horse2zebra/train_B/n02391049_2222.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b43f582087e9ffc67aec8f9e450bc63b38e9b7ea Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2222.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2223.jpg b/training/my_horse2zebra/train_B/n02391049_2223.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3aa246549fcbc7ed970eb5fd5dce52157a958444 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2223.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2225.jpg b/training/my_horse2zebra/train_B/n02391049_2225.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95efe8c7238ebeee169141863cb08104397af7d3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2225.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2228.jpg b/training/my_horse2zebra/train_B/n02391049_2228.jpg new file mode 100644 index 0000000000000000000000000000000000000000..449bc9d315b951b438151530a1d788c126f4a8dd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2228.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2229.jpg b/training/my_horse2zebra/train_B/n02391049_2229.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef69abb99681a4b57fd2ec2b906f6f8c230117d7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2229.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2231.jpg b/training/my_horse2zebra/train_B/n02391049_2231.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef07dcfd763f65245a8c366fcd139b8427ac5a12 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2231.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2232.jpg b/training/my_horse2zebra/train_B/n02391049_2232.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9de0bdc6efd78046fe9f2a4078dd173eb0525c65 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2232.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2239.jpg b/training/my_horse2zebra/train_B/n02391049_2239.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f375cb137ac1da0513c91c2da04ef6e4bc9bee5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2239.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_224.jpg b/training/my_horse2zebra/train_B/n02391049_224.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df98c07c3546ca1f77af3e40270a611d181efca2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_224.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2242.jpg b/training/my_horse2zebra/train_B/n02391049_2242.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b72d0af02c5c9e11bb3cee109120f40ec0816098 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2242.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_225.jpg b/training/my_horse2zebra/train_B/n02391049_225.jpg new file mode 100644 index 0000000000000000000000000000000000000000..486e675a9b703c0dd5f97e0d8669b371fa8b670f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_225.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2251.jpg b/training/my_horse2zebra/train_B/n02391049_2251.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d857f4a286f2eada016d08f100ff1a745246dd1b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2251.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2258.jpg b/training/my_horse2zebra/train_B/n02391049_2258.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0206191cddaac8e05e6618e42cc921f8957fbd6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2258.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_226.jpg b/training/my_horse2zebra/train_B/n02391049_226.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10dd0f16459e12dace53ae97cace79a03bb9ea6d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_226.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2265.jpg b/training/my_horse2zebra/train_B/n02391049_2265.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a99b8bfe5909425a35688c253543b0d79cc77da Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2265.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2266.jpg b/training/my_horse2zebra/train_B/n02391049_2266.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78b6248c8c1fb113589b6bd9ecccd2cabe6028fb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2266.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2273.jpg b/training/my_horse2zebra/train_B/n02391049_2273.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0173d02c34ff7ebe8528c5f2753e176a92f60f13 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2273.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2275.jpg b/training/my_horse2zebra/train_B/n02391049_2275.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd49ad607bce1dede93745cbedd03bf8cd52b60f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2275.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_228.jpg b/training/my_horse2zebra/train_B/n02391049_228.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fe62513b303222224e6d0d5127988de6bdec5ca Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_228.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2281.jpg b/training/my_horse2zebra/train_B/n02391049_2281.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8e1c9e2a253970644362e31d9d969924c506087 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2281.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2285.jpg b/training/my_horse2zebra/train_B/n02391049_2285.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2fd5f5588788ba1233795fb12de458b2b21216b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2285.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2286.jpg b/training/my_horse2zebra/train_B/n02391049_2286.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b5b89dce6dac1e15613e75e42628be82cddc945 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2286.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2289.jpg b/training/my_horse2zebra/train_B/n02391049_2289.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3957823857bcfcb1de09d1ba407fb82ff2acf16d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2289.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2293.jpg b/training/my_horse2zebra/train_B/n02391049_2293.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8019ab9dcdeadbe2788c7fa6611d67b09091b224 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2293.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2294.jpg b/training/my_horse2zebra/train_B/n02391049_2294.jpg new file mode 100644 index 0000000000000000000000000000000000000000..247c97dfc68d054d9ff4ad6813b33fa958405481 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2294.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2295.jpg b/training/my_horse2zebra/train_B/n02391049_2295.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0860a15900c1593e2397e23cb3dc2a8a3eb8afe7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2295.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2297.jpg b/training/my_horse2zebra/train_B/n02391049_2297.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d846c8b380c79438ec566364c99fed1efd80756 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2297.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_23.jpg b/training/my_horse2zebra/train_B/n02391049_23.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60b11e9592c7b673e3d1a8d6b9e6987905e3bde6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_23.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2304.jpg b/training/my_horse2zebra/train_B/n02391049_2304.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1292da90a90789bfc2f96946a7845fb6752f2d9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2304.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2306.jpg b/training/my_horse2zebra/train_B/n02391049_2306.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21a318a774fd78d599d7e0a1d7b37b35c4720d74 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2306.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2311.jpg b/training/my_horse2zebra/train_B/n02391049_2311.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0901c941d4489c93f18654affae4331799edb9b1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2311.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_232.jpg b/training/my_horse2zebra/train_B/n02391049_232.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b514bfe8674b88c6ce08254fd3e9c4308ac6fb3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_232.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2321.jpg b/training/my_horse2zebra/train_B/n02391049_2321.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09ea8836b7c8823d77af86f6150529f437471935 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2321.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2322.jpg b/training/my_horse2zebra/train_B/n02391049_2322.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e97b9b1f056010befbc842e34ef8390d007a531c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2322.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2333.jpg b/training/my_horse2zebra/train_B/n02391049_2333.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ef0f79306856fd18f7c888930185fb3e514e3bb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2333.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2337.jpg b/training/my_horse2zebra/train_B/n02391049_2337.jpg new file mode 100644 index 0000000000000000000000000000000000000000..797ff5c48bf1f154c573064af14258f67e3988b9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2337.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_234.jpg b/training/my_horse2zebra/train_B/n02391049_234.jpg new file mode 100644 index 0000000000000000000000000000000000000000..770b9b7e4572dcf19910f8a622e80a40d5679791 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_234.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2341.jpg b/training/my_horse2zebra/train_B/n02391049_2341.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98012ebae8cb96de44442fa56e1cf70d8902b939 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2341.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2355.jpg b/training/my_horse2zebra/train_B/n02391049_2355.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32908461ef79ee8d0a1e42af48b44bca0ec93b1e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2355.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2356.jpg b/training/my_horse2zebra/train_B/n02391049_2356.jpg new file mode 100644 index 0000000000000000000000000000000000000000..684ca3c21ceb38940a310441af7b2b010eedf999 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2356.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2361.jpg b/training/my_horse2zebra/train_B/n02391049_2361.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab0ce66e954d56ed72a6c4d58cbdfb09e87666f3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2361.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2363.jpg b/training/my_horse2zebra/train_B/n02391049_2363.jpg new file mode 100644 index 0000000000000000000000000000000000000000..443dd38b88ad84154d0b830960fe2d2c7854340d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2363.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2364.jpg b/training/my_horse2zebra/train_B/n02391049_2364.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0124b1a64404c6c3b7b23f077925b208ce962579 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2364.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2366.jpg b/training/my_horse2zebra/train_B/n02391049_2366.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70ad9163c2773b0558d86cd5746f658c0190a869 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2366.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2367.jpg b/training/my_horse2zebra/train_B/n02391049_2367.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77f6aaa30976197e81c2fd31b21913b42a6f7487 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2367.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2372.jpg b/training/my_horse2zebra/train_B/n02391049_2372.jpg new file mode 100644 index 0000000000000000000000000000000000000000..295859f520bc3f2957747899b2b81ee8ca2bf587 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2372.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2375.jpg b/training/my_horse2zebra/train_B/n02391049_2375.jpg new file mode 100644 index 0000000000000000000000000000000000000000..571e6f4d542b2b7c68d8cbd246c3d30017a410c9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2375.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2379.jpg b/training/my_horse2zebra/train_B/n02391049_2379.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5b3af71fe30f8be388e61cb741a42b62978494c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2379.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2381.jpg b/training/my_horse2zebra/train_B/n02391049_2381.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3b4875940dd83a31b1009580045fa5c0ea97f9a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2381.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2383.jpg b/training/my_horse2zebra/train_B/n02391049_2383.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52334f40fead565734b04b70833e8eb6a5fd2f7e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2383.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2386.jpg b/training/my_horse2zebra/train_B/n02391049_2386.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e18166eea4a781127d075be5faafac022210c6a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2386.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2405.jpg b/training/my_horse2zebra/train_B/n02391049_2405.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bdeabae673f1601a2c30d854e6ece9b867ff30ac Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2405.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2407.jpg b/training/my_horse2zebra/train_B/n02391049_2407.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58467cb7c752de9a4fe182a9692cd9a880d89589 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2407.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2408.jpg b/training/my_horse2zebra/train_B/n02391049_2408.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0aeddb96ae3432c1f8c912d3b1896f21ef408191 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2408.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2416.jpg b/training/my_horse2zebra/train_B/n02391049_2416.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69c4d5e9b313c89283ef12af0b5ae28092fdef50 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2416.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2418.jpg b/training/my_horse2zebra/train_B/n02391049_2418.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c14247b136d5ac040de5e28294d24c5da5f54061 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2418.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2424.jpg b/training/my_horse2zebra/train_B/n02391049_2424.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16a55c9d9c07c926533b9ab906ec9dd8e763969a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2424.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2437.jpg b/training/my_horse2zebra/train_B/n02391049_2437.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72861af89434253881261e14f96a33db59f91515 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2437.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2439.jpg b/training/my_horse2zebra/train_B/n02391049_2439.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63dfec319917ca39e68fe762f96cc08be9f9783f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2439.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2446.jpg b/training/my_horse2zebra/train_B/n02391049_2446.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36fb0c205dd5185418a2157bacb98d15b6463a91 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2446.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2448.jpg b/training/my_horse2zebra/train_B/n02391049_2448.jpg new file mode 100644 index 0000000000000000000000000000000000000000..372d0d98597d6a7efea0f9184266db059c5c18ad Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2448.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2451.jpg b/training/my_horse2zebra/train_B/n02391049_2451.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d78707ea1a0dc121b4f02eb5472497e3e41ae39 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2451.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2457.jpg b/training/my_horse2zebra/train_B/n02391049_2457.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c914283e1920f48f9d1f3c9b8c02babacd55b2d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2457.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2459.jpg b/training/my_horse2zebra/train_B/n02391049_2459.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99355c29c16b8b387a1b855357e786277221b744 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2459.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_246.jpg b/training/my_horse2zebra/train_B/n02391049_246.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a0308db370e72a741ebe4ba2e51e42c819f3c07 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_246.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2464.jpg b/training/my_horse2zebra/train_B/n02391049_2464.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca474a9bb36064dfa896a66a6cf0a94c2c8266c7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2464.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2465.jpg b/training/my_horse2zebra/train_B/n02391049_2465.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ad17af9b0150af590b98e583e1685179aa7daac Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2465.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2466.jpg b/training/my_horse2zebra/train_B/n02391049_2466.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff37446459301d84946b8b208266cf84f0c7036e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2466.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2469.jpg b/training/my_horse2zebra/train_B/n02391049_2469.jpg new file mode 100644 index 0000000000000000000000000000000000000000..594e568e9c2f54555c98a0252ebdea84d8a632a7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2469.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2476.jpg b/training/my_horse2zebra/train_B/n02391049_2476.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5651e081db4ef6f13bc63a8de6e1c29d4c1e0fed Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2476.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2477.jpg b/training/my_horse2zebra/train_B/n02391049_2477.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4682e6a76168f403e1aa088c186b1b1ac288cf4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2477.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2478.jpg b/training/my_horse2zebra/train_B/n02391049_2478.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3de393cb490378531396e148535eeac2277765f9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2478.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_248.jpg b/training/my_horse2zebra/train_B/n02391049_248.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85460f694b1ebef4eb7100efa09671cef71d2476 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_248.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2481.jpg b/training/my_horse2zebra/train_B/n02391049_2481.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5113b5cf2d3bd3288ff428bdbcc0e73f39d35fb2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2481.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2485.jpg b/training/my_horse2zebra/train_B/n02391049_2485.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffeebaaae0017d359957a2d22896347e19357767 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2485.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2486.jpg b/training/my_horse2zebra/train_B/n02391049_2486.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26bb5393a2496f467058301eb6a4935e9a03bb10 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2486.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_249.jpg b/training/my_horse2zebra/train_B/n02391049_249.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77a25061d9fafdcf1bc0cf2ea82197587118cde9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_249.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2491.jpg b/training/my_horse2zebra/train_B/n02391049_2491.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f866153bb2618b855aa8e29dd3c2306e7db7de57 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2491.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2495.jpg b/training/my_horse2zebra/train_B/n02391049_2495.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9857b57d47f2040b2342494f29494ca29aa6c3ae Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2495.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_25.jpg b/training/my_horse2zebra/train_B/n02391049_25.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b155e1b391e1de19e23a8b0ed6e6e6f4d7b963ae Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_25.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2504.jpg b/training/my_horse2zebra/train_B/n02391049_2504.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed4c29c702d5b59d4167ed3964f2c58a59a95520 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2504.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2506.jpg b/training/my_horse2zebra/train_B/n02391049_2506.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0059a9f069fb304fbf1e15a3e9fc489747f3ce0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2506.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2507.jpg b/training/my_horse2zebra/train_B/n02391049_2507.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5236636c66e29686238f8a7c5b64ec2051e4e71 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2507.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2508.jpg b/training/my_horse2zebra/train_B/n02391049_2508.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a47cc1c7a3810753592e6ac955adc2923b2bee8d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2508.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_251.jpg b/training/my_horse2zebra/train_B/n02391049_251.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50f53bb2377b96ffb90865887fae3084455628a7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_251.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2511.jpg b/training/my_horse2zebra/train_B/n02391049_2511.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22f04e24f2377a8d46a15f5f6e1c5afd0c8dbd28 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2511.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2518.jpg b/training/my_horse2zebra/train_B/n02391049_2518.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f142f35cb56a53044977e63b6efede4d0d00037 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2518.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2523.jpg b/training/my_horse2zebra/train_B/n02391049_2523.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93403971ab805d6589e79d152bc95f6003215262 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2523.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2524.jpg b/training/my_horse2zebra/train_B/n02391049_2524.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c525045727df4f01532979b1fe051ae5474a2ac Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2524.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2534.jpg b/training/my_horse2zebra/train_B/n02391049_2534.jpg new file mode 100644 index 0000000000000000000000000000000000000000..860a77d856cf7c4a314be883c8cc95703adb27ab Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2534.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_254.jpg b/training/my_horse2zebra/train_B/n02391049_254.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d266f8c02835f3f950ce6b8baa7771d1176dc5ac Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_254.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2541.jpg b/training/my_horse2zebra/train_B/n02391049_2541.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55444df369aa525de03db23c864e239b7b83e076 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2541.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2549.jpg b/training/my_horse2zebra/train_B/n02391049_2549.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4fd5fb6ec2d28835d17cf5e754e500b0ab5b39b5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2549.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2559.jpg b/training/my_horse2zebra/train_B/n02391049_2559.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d1b183c891a494ca5a1b1b71ea9a504de76ed90 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2559.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2567.jpg b/training/my_horse2zebra/train_B/n02391049_2567.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc0336fb08bdf3ce28a9dda47052e8170ec1cb9d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2567.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2571.jpg b/training/my_horse2zebra/train_B/n02391049_2571.jpg new file mode 100644 index 0000000000000000000000000000000000000000..baa1f92276b6bcdb7a83e86368e412ca3dda3dc4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2571.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2579.jpg b/training/my_horse2zebra/train_B/n02391049_2579.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2194c4f56195705c7d0eb699eae33e8ad979f069 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2579.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2584.jpg b/training/my_horse2zebra/train_B/n02391049_2584.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f584334f6c90abbaac3148ebd52162bacdf7d20e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2584.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2585.jpg b/training/my_horse2zebra/train_B/n02391049_2585.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f88f339a7acf77f6e29b17c3a4c157d291791625 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2585.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2586.jpg b/training/my_horse2zebra/train_B/n02391049_2586.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51f007167bf7241b47dcce052b1782b287983429 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2586.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2588.jpg b/training/my_horse2zebra/train_B/n02391049_2588.jpg new file mode 100644 index 0000000000000000000000000000000000000000..262ac986273c0a2646374fc60ad71718cbb96a14 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2588.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2591.jpg b/training/my_horse2zebra/train_B/n02391049_2591.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf4bf4ae0d8d2434008cb0d73bb7a3b0c8438b72 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2591.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2593.jpg b/training/my_horse2zebra/train_B/n02391049_2593.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6562ef998943465bd445c48851036c9e223d078 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2593.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2596.jpg b/training/my_horse2zebra/train_B/n02391049_2596.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33d220793832bbc044f7e853a1ba02c06c4a8d66 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2596.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2597.jpg b/training/my_horse2zebra/train_B/n02391049_2597.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af381efcbba7cb6ddd6c4ec6621fe21e16fead45 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2597.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_26.jpg b/training/my_horse2zebra/train_B/n02391049_26.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69e9564eee528aac17d2b05c58c2b686aa5c908d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_26.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2603.jpg b/training/my_horse2zebra/train_B/n02391049_2603.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cf151f0dc20a89591903487d493d908ef15fa7c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2603.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2606.jpg b/training/my_horse2zebra/train_B/n02391049_2606.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a059e5ed226786ec00b1308c8dd268b4f18e806a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2606.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2609.jpg b/training/my_horse2zebra/train_B/n02391049_2609.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e01f80481041b2975f93ec95c6266845e69af2e9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2609.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_261.jpg b/training/my_horse2zebra/train_B/n02391049_261.jpg new file mode 100644 index 0000000000000000000000000000000000000000..691858d882a80dbd27d9d0ef2ab3e0255f1ad652 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_261.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2612.jpg b/training/my_horse2zebra/train_B/n02391049_2612.jpg new file mode 100644 index 0000000000000000000000000000000000000000..13c91c36ac1cbfde81ad44fa53a8af843ad72e02 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2612.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2616.jpg b/training/my_horse2zebra/train_B/n02391049_2616.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac8f8a8279405b1652596ce2fa7bfc7ea7bc7fee Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2616.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2623.jpg b/training/my_horse2zebra/train_B/n02391049_2623.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95e7ab54a08f1be00304a62b431d5e2321505452 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2623.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2627.jpg b/training/my_horse2zebra/train_B/n02391049_2627.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e30ddf15ba56cf5c9948b6aa4094049b1fe5e43 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2627.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2628.jpg b/training/my_horse2zebra/train_B/n02391049_2628.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a9e01d546298f7423f173b45e72785c519e8635 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2628.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2631.jpg b/training/my_horse2zebra/train_B/n02391049_2631.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33751ce8fca409d44e795d681850fccb814808e4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2631.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2633.jpg b/training/my_horse2zebra/train_B/n02391049_2633.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef3f89eda28379ca34e7b88720fc31391ecd9883 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2633.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2636.jpg b/training/my_horse2zebra/train_B/n02391049_2636.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e6bd0139eb3419c26696fc7779a439c91f4f798 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2636.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2637.jpg b/training/my_horse2zebra/train_B/n02391049_2637.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49741bc776f65c73b422f39c5242a4a00c9d3fce Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2637.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2638.jpg b/training/my_horse2zebra/train_B/n02391049_2638.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b835a03a0de39c681f2891c696d3f000f093bd0c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2638.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2639.jpg b/training/my_horse2zebra/train_B/n02391049_2639.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb1d94e812ce2066baba6277069339e254d0d1d8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2639.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2642.jpg b/training/my_horse2zebra/train_B/n02391049_2642.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3d0a8b4c883218d3a60b7ea0593128b65f3d2c9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2642.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2644.jpg b/training/my_horse2zebra/train_B/n02391049_2644.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0aacd753a7677acf4eaa355b0f071368eb254ac6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2644.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2645.jpg b/training/my_horse2zebra/train_B/n02391049_2645.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce824d3c8c1169a0d3b262ab9069124a1621672e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2645.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2647.jpg b/training/my_horse2zebra/train_B/n02391049_2647.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b636384b0fede001253fbfa562e33032695a9b7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2647.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2648.jpg b/training/my_horse2zebra/train_B/n02391049_2648.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e836c68cf384d93a0bdc008434c7ef6ccd1e5f4f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2648.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2651.jpg b/training/my_horse2zebra/train_B/n02391049_2651.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84518c52a85ee9ca2da121cb0f822719f5c81cca Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2651.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2656.jpg b/training/my_horse2zebra/train_B/n02391049_2656.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c133e3c2a7fafc1d2abfa041c5ffc13449888196 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2656.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2657.jpg b/training/my_horse2zebra/train_B/n02391049_2657.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2dd991d3afb2ddc993821034d040b8b4a793437 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2657.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2659.jpg b/training/my_horse2zebra/train_B/n02391049_2659.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9402768bd405f8e7c76ce1e11fd19453931e764b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2659.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2663.jpg b/training/my_horse2zebra/train_B/n02391049_2663.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d8b4e913a452d66bb2bb986fd530f082d816f2a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2663.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2665.jpg b/training/my_horse2zebra/train_B/n02391049_2665.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c89aab21939cf696642594ff54e69c28ad9ecb54 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2665.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_267.jpg b/training/my_horse2zebra/train_B/n02391049_267.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c480126d2d354ec6cb0df5ea9d5c3b9e4f92ff3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_267.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2671.jpg b/training/my_horse2zebra/train_B/n02391049_2671.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3827ca66e0e13e05c629f442a2e7c154788397b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2671.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2673.jpg b/training/my_horse2zebra/train_B/n02391049_2673.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a680076f9b83d6bda699951d1c2d9a154a571b92 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2673.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2674.jpg b/training/my_horse2zebra/train_B/n02391049_2674.jpg new file mode 100644 index 0000000000000000000000000000000000000000..012cce880deb8531ba7f0e2581da883926d381f0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2674.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_268.jpg b/training/my_horse2zebra/train_B/n02391049_268.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75d5daaeb531deeb48f03b53fd9f94b67eaa0954 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_268.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2681.jpg b/training/my_horse2zebra/train_B/n02391049_2681.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5bf8e0c0e97b253fcb58679467660729370a7185 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2681.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2684.jpg b/training/my_horse2zebra/train_B/n02391049_2684.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94a40784a55fc87208ec654372328a7978240de1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2684.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2687.jpg b/training/my_horse2zebra/train_B/n02391049_2687.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbac0983b3223c8ebea0c532f7daaa1f3aafe503 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2687.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2691.jpg b/training/my_horse2zebra/train_B/n02391049_2691.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c94bf34ee4defbaaa8021a452b25c966165e0d2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2691.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2693.jpg b/training/my_horse2zebra/train_B/n02391049_2693.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50151528168b8a78d5aba74b85a9bf6f87579797 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2693.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2696.jpg b/training/my_horse2zebra/train_B/n02391049_2696.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7bab58395efe33ff2e5cac44b9c182c66de3273a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2696.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2698.jpg b/training/my_horse2zebra/train_B/n02391049_2698.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea001beca9ad9c63602a35071ddd7e31474f95bc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2698.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2701.jpg b/training/my_horse2zebra/train_B/n02391049_2701.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d31b8274e155925307d016031c54236a90256352 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2701.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2702.jpg b/training/my_horse2zebra/train_B/n02391049_2702.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c088117d9412dc9bccece27db643cfb4b5f20ea Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2702.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2704.jpg b/training/my_horse2zebra/train_B/n02391049_2704.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12cbef04e0751e7e15529aa2c1b7d0e8b0f77ee4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2704.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2709.jpg b/training/my_horse2zebra/train_B/n02391049_2709.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b32c66c1777072c13d0b77c8178c2b4b04362db Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2709.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2714.jpg b/training/my_horse2zebra/train_B/n02391049_2714.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9857b57d47f2040b2342494f29494ca29aa6c3ae Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2714.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2718.jpg b/training/my_horse2zebra/train_B/n02391049_2718.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d304faf1883c9b0e51fb2c39a124b3eabf2f0c2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2718.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_272.jpg b/training/my_horse2zebra/train_B/n02391049_272.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9db29a4389c2a80929fc5de0d49d72163cc1d43d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_272.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2723.jpg b/training/my_horse2zebra/train_B/n02391049_2723.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ec60d1de79f3ea4944202c7591ebaced8866c77 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2723.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2729.jpg b/training/my_horse2zebra/train_B/n02391049_2729.jpg new file mode 100644 index 0000000000000000000000000000000000000000..449b3b67ab60e2f3aa41d9aea254b6e36d6ad023 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2729.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2731.jpg b/training/my_horse2zebra/train_B/n02391049_2731.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fd7570ea181a94bd3b7d690c52bc9fb4025b24a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2731.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2732.jpg b/training/my_horse2zebra/train_B/n02391049_2732.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00fad99e0f47712eeb68ea7d84e3bf3f0224a7eb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2732.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2733.jpg b/training/my_horse2zebra/train_B/n02391049_2733.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30b9f3873385d33ed63c8c23ddda9e91ec6e4eba Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2733.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2739.jpg b/training/my_horse2zebra/train_B/n02391049_2739.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e4c146480d6da4b064d32141e22995ba073f4fa Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2739.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_274.jpg b/training/my_horse2zebra/train_B/n02391049_274.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db8468a0e2816bccfb69969394237c937cb8c5b7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_274.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2741.jpg b/training/my_horse2zebra/train_B/n02391049_2741.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d3628261ad31daec80957474f4b9eb9db4ebe66 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2741.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2743.jpg b/training/my_horse2zebra/train_B/n02391049_2743.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eeb9909f51b2e26ecea7a6173a161670ad2603d8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2743.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2746.jpg b/training/my_horse2zebra/train_B/n02391049_2746.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d525f99587b6ec7990176278e3257fa6b7099382 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2746.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2747.jpg b/training/my_horse2zebra/train_B/n02391049_2747.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27017bfaedf3912789d7bff9072159a686a0459d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2747.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2748.jpg b/training/my_horse2zebra/train_B/n02391049_2748.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12e79f7a612835035e995bf6c44955389501dabc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2748.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2749.jpg b/training/my_horse2zebra/train_B/n02391049_2749.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0dfeecb01b30fc3eac524c15e6bce40c262a7c06 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2749.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_275.jpg b/training/my_horse2zebra/train_B/n02391049_275.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f059de42e09edfe606f03976db0d630bd969071b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_275.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2752.jpg b/training/my_horse2zebra/train_B/n02391049_2752.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aee8dffdab508c96250cc4478d1433af3d233d29 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2752.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2756.jpg b/training/my_horse2zebra/train_B/n02391049_2756.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51adbf47581b14268db81eb91df7ccf13cf2909a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2756.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2757.jpg b/training/my_horse2zebra/train_B/n02391049_2757.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0353b10d61a7c000de4246d55d2adc31e1f332fb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2757.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2758.jpg b/training/my_horse2zebra/train_B/n02391049_2758.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d4aa465d4f77716f0b12461f05add1e2f8c1b6c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2758.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_276.jpg b/training/my_horse2zebra/train_B/n02391049_276.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7873f7ad67470ce362ebc63b580ba2ec541816ee Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_276.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2766.jpg b/training/my_horse2zebra/train_B/n02391049_2766.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e1b97dca7a64cc628fbfc41a425d33d3e01080d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2766.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2767.jpg b/training/my_horse2zebra/train_B/n02391049_2767.jpg new file mode 100644 index 0000000000000000000000000000000000000000..882d0793e4ba6e782c09a7427a28e3fc71061ab9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2767.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2768.jpg b/training/my_horse2zebra/train_B/n02391049_2768.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f56c99595fcd8313eb85ac5c03b7465c1bfab59d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2768.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2771.jpg b/training/my_horse2zebra/train_B/n02391049_2771.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b97bd156a6884d80c86b82a40caa45eba0ddd78 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2771.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2776.jpg b/training/my_horse2zebra/train_B/n02391049_2776.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b043a98cd247b1b097f6428e8ce344d5d3f6870 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2776.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2781.jpg b/training/my_horse2zebra/train_B/n02391049_2781.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14ae924b5c88ca1e54113aff18c957300dbdd159 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2781.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2782.jpg b/training/my_horse2zebra/train_B/n02391049_2782.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b27fea068d76e20e6004d1bda639222ba227637 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2782.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2784.jpg b/training/my_horse2zebra/train_B/n02391049_2784.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5c8f0f376bdf16266faae084945a863d407d610 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2784.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2785.jpg b/training/my_horse2zebra/train_B/n02391049_2785.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfc320578e01a09405de294f85f45a13770a3477 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2785.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2786.jpg b/training/my_horse2zebra/train_B/n02391049_2786.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5aa7e78036238c54eb9e882bc18c5aa4287b8adc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2786.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2788.jpg b/training/my_horse2zebra/train_B/n02391049_2788.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d84157b9215b51e3c6b5a7a947ebeef8c5057c75 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2788.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2789.jpg b/training/my_horse2zebra/train_B/n02391049_2789.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98c1c71595e774c399f301fdedcaea6a59e163a3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2789.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_279.jpg b/training/my_horse2zebra/train_B/n02391049_279.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e84c99e4ffa7bae8fb0a9d3ce0b534fe645b1f4b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_279.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2794.jpg b/training/my_horse2zebra/train_B/n02391049_2794.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cef5e7c15aef235bce7be0afda8e49da3dec063d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2794.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2798.jpg b/training/my_horse2zebra/train_B/n02391049_2798.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3441f428296365c3e3b70c9c6cdf9c6642448e8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2798.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2803.jpg b/training/my_horse2zebra/train_B/n02391049_2803.jpg new file mode 100644 index 0000000000000000000000000000000000000000..037cf9448111db624ab38301ff9ba454eb417006 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2803.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2805.jpg b/training/my_horse2zebra/train_B/n02391049_2805.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c832170dc43eadc7e5846610628142736be8612a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2805.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2806.jpg b/training/my_horse2zebra/train_B/n02391049_2806.jpg new file mode 100644 index 0000000000000000000000000000000000000000..71eb5d7c7c5a8aa26b6ffd5e3958b379724f4c21 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2806.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2811.jpg b/training/my_horse2zebra/train_B/n02391049_2811.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d8a74e54d47420f61568dbaad3bce9835fd88b2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2811.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2813.jpg b/training/my_horse2zebra/train_B/n02391049_2813.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43aca324013180379dc30c63a598fdd4403d6ac6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2813.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2814.jpg b/training/my_horse2zebra/train_B/n02391049_2814.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33745d6f0b9098c01506466330460dfc9a4a77a3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2814.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2816.jpg b/training/my_horse2zebra/train_B/n02391049_2816.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6564f4de94bf1ba25c6468ff399a7f41588c75e2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2816.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2817.jpg b/training/my_horse2zebra/train_B/n02391049_2817.jpg new file mode 100644 index 0000000000000000000000000000000000000000..187f28b13cc693ec5a447c24fec215c294980802 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2817.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2818.jpg b/training/my_horse2zebra/train_B/n02391049_2818.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38bdad887119118012e16ba8c752d4196f2fc3d8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2818.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2819.jpg b/training/my_horse2zebra/train_B/n02391049_2819.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf00d04e33019f7413c13daa9f711440013d3acf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2819.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2821.jpg b/training/my_horse2zebra/train_B/n02391049_2821.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d322ad3e0c2678d79d8f45682700df8abfac824f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2821.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2824.jpg b/training/my_horse2zebra/train_B/n02391049_2824.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5289eabe7ae4359a8eb691d0443bb9a8d2b2b854 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2824.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2825.jpg b/training/my_horse2zebra/train_B/n02391049_2825.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94390679f34c9b7b54c1d457e057a041973a6dd4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2825.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2826.jpg b/training/my_horse2zebra/train_B/n02391049_2826.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e757d15d6ec99e3d646a4f44e6c8fcc7730dac6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2826.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2829.jpg b/training/my_horse2zebra/train_B/n02391049_2829.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ded4b9ee720797059971b05058cbbf687bb238c6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2829.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_283.jpg b/training/my_horse2zebra/train_B/n02391049_283.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09bfac6ea8485319c9a9acc5b91a5d9b081e0d2d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_283.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2831.jpg b/training/my_horse2zebra/train_B/n02391049_2831.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd074008fd23bbe6bf6dae040863aa370c3764b2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2831.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2836.jpg b/training/my_horse2zebra/train_B/n02391049_2836.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b7a01f8bd535fb93bc3fbd6ebc4d2bb8a113286 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2836.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2837.jpg b/training/my_horse2zebra/train_B/n02391049_2837.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d36c96d1857b733c50a250d93841493fbd9ea581 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2837.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2838.jpg b/training/my_horse2zebra/train_B/n02391049_2838.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73af933c8cdbe4bab286e28f83a5517e47f561a4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2838.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2842.jpg b/training/my_horse2zebra/train_B/n02391049_2842.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94f9d8f2935a535ee4cad5976a54dc143c4d1cfc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2842.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2844.jpg b/training/my_horse2zebra/train_B/n02391049_2844.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c67b426cd72a70f382e72f057b8760c3aca11814 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2844.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2847.jpg b/training/my_horse2zebra/train_B/n02391049_2847.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b1fedfb8f2cdb2c761fc493e42c1ecf7e65fffc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2847.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2848.jpg b/training/my_horse2zebra/train_B/n02391049_2848.jpg new file mode 100644 index 0000000000000000000000000000000000000000..acc402b050a8482c8c4dd81e68c6c8f7fa95f8b5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2848.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_285.jpg b/training/my_horse2zebra/train_B/n02391049_285.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35a24c17d4970c929eb89acf5cef4faac5fc0926 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_285.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2852.jpg b/training/my_horse2zebra/train_B/n02391049_2852.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2db7351e6f9a33e8f773d39272b203c2764516a6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2852.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2853.jpg b/training/my_horse2zebra/train_B/n02391049_2853.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce8a9e773a8f352fbffd6e71a26fe7c911f4dbfe Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2853.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2856.jpg b/training/my_horse2zebra/train_B/n02391049_2856.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d491ad245c36e75d9a35321dfecbb186e29fcf50 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2856.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2857.jpg b/training/my_horse2zebra/train_B/n02391049_2857.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efb7549f416816ba617a759dfe7eb98f84ce09af Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2857.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_286.jpg b/training/my_horse2zebra/train_B/n02391049_286.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77e859de0a8bca5a89bbb7adc495d4025c3600ee Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_286.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2871.jpg b/training/my_horse2zebra/train_B/n02391049_2871.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38bb6904ac8bdae0d7e0ba7c2df94912b9f0d204 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2871.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2875.jpg b/training/my_horse2zebra/train_B/n02391049_2875.jpg new file mode 100644 index 0000000000000000000000000000000000000000..681064539251d87af0e1373ea0276d41d2034c0e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2875.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2876.jpg b/training/my_horse2zebra/train_B/n02391049_2876.jpg new file mode 100644 index 0000000000000000000000000000000000000000..953ed192883191eb6de76df6aac0ab674b6f12f7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2876.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2877.jpg b/training/my_horse2zebra/train_B/n02391049_2877.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9e7e8cf5237102c42fff9090d42a40d4de7281d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2877.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2879.jpg b/training/my_horse2zebra/train_B/n02391049_2879.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65ba531451fe5b5faedb0e815feea4d6648b1e99 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2879.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2883.jpg b/training/my_horse2zebra/train_B/n02391049_2883.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc9b861f0411e1b8d674be681a3b520f5fdf35c5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2883.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2886.jpg b/training/my_horse2zebra/train_B/n02391049_2886.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77f8f31e873e6cae5a021c88e9a5b7376d27d9a9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2886.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2888.jpg b/training/my_horse2zebra/train_B/n02391049_2888.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d7bf99926f7bf3c2cd5b84a04856d9bb747dcf4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2888.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2889.jpg b/training/my_horse2zebra/train_B/n02391049_2889.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6e2307a796040c2791c18374d969b12e118abc9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2889.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2895.jpg b/training/my_horse2zebra/train_B/n02391049_2895.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1022424d40097d5ecde5ab3feb8cf38d8291532e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2895.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2897.jpg b/training/my_horse2zebra/train_B/n02391049_2897.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3310dc7132f7511281a889d1da60b911b83af96e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2897.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2899.jpg b/training/my_horse2zebra/train_B/n02391049_2899.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d491ec5116c1079b61871951e28c3d3a136ad2b4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2899.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2901.jpg b/training/my_horse2zebra/train_B/n02391049_2901.jpg new file mode 100644 index 0000000000000000000000000000000000000000..820ca46d8f5c750a81cf0c2ee712de834138bb3c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2901.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2905.jpg b/training/my_horse2zebra/train_B/n02391049_2905.jpg new file mode 100644 index 0000000000000000000000000000000000000000..caa8fda2ac3b3e19098a55606548292a18ce78ef Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2905.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2906.jpg b/training/my_horse2zebra/train_B/n02391049_2906.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0486cf079ba1298ef495275b313f4eee578fc7bd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2906.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2907.jpg b/training/my_horse2zebra/train_B/n02391049_2907.jpg new file mode 100644 index 0000000000000000000000000000000000000000..06384a18dc371147cc1a466b8a8bfcc95d636bbd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2907.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2911.jpg b/training/my_horse2zebra/train_B/n02391049_2911.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76f287e789ea7071f9b903a17487409b3f6963ba Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2911.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2916.jpg b/training/my_horse2zebra/train_B/n02391049_2916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36b08fed927d613232a07a7db41d3b11eb124143 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2916.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2921.jpg b/training/my_horse2zebra/train_B/n02391049_2921.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a39966d3135177abb40090b19f68ffab49159e08 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2921.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2922.jpg b/training/my_horse2zebra/train_B/n02391049_2922.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94c23efb1a7ab8a38e138ab9356cacb2350c1f97 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2922.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2924.jpg b/training/my_horse2zebra/train_B/n02391049_2924.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0fea7b5d7c29831dcbaaa0d02ee22833378e4c49 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2924.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2926.jpg b/training/my_horse2zebra/train_B/n02391049_2926.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93e33f06609a47cb2bdbd5180cd64e9371adbdb2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2926.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2927.jpg b/training/my_horse2zebra/train_B/n02391049_2927.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e34819f0f240e20c9e5163fd94f537d30dc17c8b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2927.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2935.jpg b/training/my_horse2zebra/train_B/n02391049_2935.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24937e8a31f9c745f013689bcb58ac099d9e0bf7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2935.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2941.jpg b/training/my_horse2zebra/train_B/n02391049_2941.jpg new file mode 100644 index 0000000000000000000000000000000000000000..222c672a1fa57941933be6244ce1539b2d98ddf7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2941.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2946.jpg b/training/my_horse2zebra/train_B/n02391049_2946.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d111c43e5ee186e301309774a7e3fea33945e512 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2946.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2949.jpg b/training/my_horse2zebra/train_B/n02391049_2949.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a64d8912c4d9de803ba518809e3412cc1ab0c317 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2949.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_295.jpg b/training/my_horse2zebra/train_B/n02391049_295.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e20974cecce4be55c0774a579add6035256dd83 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_295.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2951.jpg b/training/my_horse2zebra/train_B/n02391049_2951.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e23227144e47b0f5bd8ca6397766981e049e75bd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2951.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2957.jpg b/training/my_horse2zebra/train_B/n02391049_2957.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93556341bbbef12085731ebe8d40afcb650374a0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2957.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2959.jpg b/training/my_horse2zebra/train_B/n02391049_2959.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37773ff5ed230928cb0af8ebb3c6420b21a6ef85 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2959.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2963.jpg b/training/my_horse2zebra/train_B/n02391049_2963.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c10b67802482f503bc59c9395a45add9cb0ffcf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2963.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2964.jpg b/training/my_horse2zebra/train_B/n02391049_2964.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc8f711b835b9247f583606ac39f8c3788e35221 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2964.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2967.jpg b/training/my_horse2zebra/train_B/n02391049_2967.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4b405e0c38e8dbf1769edeaca18877e9d3b5eaf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2967.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2973.jpg b/training/my_horse2zebra/train_B/n02391049_2973.jpg new file mode 100644 index 0000000000000000000000000000000000000000..140ffd4a4fec8ba43c63ea3a26defac222963638 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2973.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2974.jpg b/training/my_horse2zebra/train_B/n02391049_2974.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20be815f524e031c952742176bf188bab70c9e93 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2974.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2982.jpg b/training/my_horse2zebra/train_B/n02391049_2982.jpg new file mode 100644 index 0000000000000000000000000000000000000000..565cad7a647a7f94f0731b7319a0c01848c9a2bc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2982.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2984.jpg b/training/my_horse2zebra/train_B/n02391049_2984.jpg new file mode 100644 index 0000000000000000000000000000000000000000..692aa04864ff3f00e833d8903afb619ca99a5ba9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2984.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2985.jpg b/training/my_horse2zebra/train_B/n02391049_2985.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0f90378a629ca5777b10bc618d10d81554fce59 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2985.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2989.jpg b/training/my_horse2zebra/train_B/n02391049_2989.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27c8c5a08391e4eadd0269081b7b078a24cb8b90 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2989.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2995.jpg b/training/my_horse2zebra/train_B/n02391049_2995.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30d32f26c89c2683a1955f5860b3202ef3e06927 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2995.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2996.jpg b/training/my_horse2zebra/train_B/n02391049_2996.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c749c0b1e8914bdd55e03b2411247ff52adf5c51 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2996.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2997.jpg b/training/my_horse2zebra/train_B/n02391049_2997.jpg new file mode 100644 index 0000000000000000000000000000000000000000..59c9efc58c40d50aed92d9a139f17788c4772732 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2997.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_2999.jpg b/training/my_horse2zebra/train_B/n02391049_2999.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6912b98badb2bdf7bfdc19cf94f1706b66963d53 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_2999.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3001.jpg b/training/my_horse2zebra/train_B/n02391049_3001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee3fe38f8a9be7dcf3a6fc196303a0354767dda8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3001.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3016.jpg b/training/my_horse2zebra/train_B/n02391049_3016.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ba246f1a3dbc6b84b9334fc540676ad8208ce08 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3016.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3018.jpg b/training/my_horse2zebra/train_B/n02391049_3018.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0142e109b534be754d4e10699eea61f8a2a529cc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3018.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3022.jpg b/training/my_horse2zebra/train_B/n02391049_3022.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a8070e3b3859a54eba678ecd394bc0d7438ab8f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3022.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3023.jpg b/training/my_horse2zebra/train_B/n02391049_3023.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e548aa34aa9adca10d3b630442ed8ae49dbe439d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3023.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3024.jpg b/training/my_horse2zebra/train_B/n02391049_3024.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bada1789f580e162f9e9a1e5b128a1c54a4880ed Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3024.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3026.jpg b/training/my_horse2zebra/train_B/n02391049_3026.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a77f72982030ddc5c6a9ea347fcbb653f5d7469a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3026.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3028.jpg b/training/my_horse2zebra/train_B/n02391049_3028.jpg new file mode 100644 index 0000000000000000000000000000000000000000..506ae68bda9b66874e4bbc9a8629b61486eca6b6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3028.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3031.jpg b/training/my_horse2zebra/train_B/n02391049_3031.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8b3c737a00d565a1b0f7084a05a1912bad59cac Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3031.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3034.jpg b/training/my_horse2zebra/train_B/n02391049_3034.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f424f167b5d0378fd176d74176a19d8fdc3d4948 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3034.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3037.jpg b/training/my_horse2zebra/train_B/n02391049_3037.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8744a54223712f4350b931d98cbd4d9417f3c0b5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3037.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3038.jpg b/training/my_horse2zebra/train_B/n02391049_3038.jpg new file mode 100644 index 0000000000000000000000000000000000000000..399f9b224625df11006f2e404feaf16386f1dc80 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3038.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3041.jpg b/training/my_horse2zebra/train_B/n02391049_3041.jpg new file mode 100644 index 0000000000000000000000000000000000000000..784a4356e0d84fee125862c76e216ccef3f00e46 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3041.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3043.jpg b/training/my_horse2zebra/train_B/n02391049_3043.jpg new file mode 100644 index 0000000000000000000000000000000000000000..acac5e8d419248831938ba195f2b05b9c1953f2b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3043.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3044.jpg b/training/my_horse2zebra/train_B/n02391049_3044.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea00236b587254e781ea7087fe1e98eca1c98749 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3044.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3046.jpg b/training/my_horse2zebra/train_B/n02391049_3046.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb824416b5e3ba3381c35a22a009566adf825e99 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3046.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3053.jpg b/training/my_horse2zebra/train_B/n02391049_3053.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2546c8784e18d7bf0c7280947d4a1634427945a3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3053.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3054.jpg b/training/my_horse2zebra/train_B/n02391049_3054.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bb3135bf1a4a1960811e4415f666bba20e8a1a0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3054.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_306.jpg b/training/my_horse2zebra/train_B/n02391049_306.jpg new file mode 100644 index 0000000000000000000000000000000000000000..422e4b1f32eacb54e452072e9048932ddc260921 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_306.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3069.jpg b/training/my_horse2zebra/train_B/n02391049_3069.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e647c6c436ba82b07e185113310413106ec6a385 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3069.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3071.jpg b/training/my_horse2zebra/train_B/n02391049_3071.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad756181f5eba331f70232b48015cac6b0425294 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3071.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3072.jpg b/training/my_horse2zebra/train_B/n02391049_3072.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b35be32dffad055dbe5398e11045e4c11ae4fe41 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3072.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3073.jpg b/training/my_horse2zebra/train_B/n02391049_3073.jpg new file mode 100644 index 0000000000000000000000000000000000000000..972b765d472faa7d32dd53a956da8dad437521a4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3073.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3075.jpg b/training/my_horse2zebra/train_B/n02391049_3075.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86d0358b90416df6c2f119a6ab77dbbccb114e66 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3075.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3079.jpg b/training/my_horse2zebra/train_B/n02391049_3079.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6aa301798ea6297751d06853c4322adc6554e950 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3079.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_308.jpg b/training/my_horse2zebra/train_B/n02391049_308.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dab9ed182215285bea668bb969c1cba5c40b0e3c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_308.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3081.jpg b/training/my_horse2zebra/train_B/n02391049_3081.jpg new file mode 100644 index 0000000000000000000000000000000000000000..801129f95ed9e4cf8d86108c9d98e2a4fdd2ba80 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3081.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3084.jpg b/training/my_horse2zebra/train_B/n02391049_3084.jpg new file mode 100644 index 0000000000000000000000000000000000000000..075d911f896d732a636962b1d006458bd32cf43a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3084.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3085.jpg b/training/my_horse2zebra/train_B/n02391049_3085.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d39c590838a1fad77cfaedd728d98cd57c5ed9d4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3085.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3086.jpg b/training/my_horse2zebra/train_B/n02391049_3086.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7b4a192e53210429c3b7312d54bb7d8795d782d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3086.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3087.jpg b/training/my_horse2zebra/train_B/n02391049_3087.jpg new file mode 100644 index 0000000000000000000000000000000000000000..190c8bbf33e1833b62d0fcbf15e823e425031a3c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3087.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3088.jpg b/training/my_horse2zebra/train_B/n02391049_3088.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b800a96b1126aff87162734161606c45324c898 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3088.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3091.jpg b/training/my_horse2zebra/train_B/n02391049_3091.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed878ccb4266ac54cbae5e12937a0967ee911d5b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3091.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3092.jpg b/training/my_horse2zebra/train_B/n02391049_3092.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d333c5007f9250e5a7db2d328fd462f7c866d3fa Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3092.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3096.jpg b/training/my_horse2zebra/train_B/n02391049_3096.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a76f57edd6e8b034e359dd3a96268e8271fb2821 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3096.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3098.jpg b/training/my_horse2zebra/train_B/n02391049_3098.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5473ce4807324003623011bd62a7ce97cbae16a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3098.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3105.jpg b/training/my_horse2zebra/train_B/n02391049_3105.jpg new file mode 100644 index 0000000000000000000000000000000000000000..625d7c701828d9c444841b345d33f112c1e2790c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3105.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3114.jpg b/training/my_horse2zebra/train_B/n02391049_3114.jpg new file mode 100644 index 0000000000000000000000000000000000000000..571e6f4d542b2b7c68d8cbd246c3d30017a410c9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3114.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3115.jpg b/training/my_horse2zebra/train_B/n02391049_3115.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8753d3fd79720ab6ff855c910589f5739951106 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3115.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3119.jpg b/training/my_horse2zebra/train_B/n02391049_3119.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9952be4378b53e7f3e8d15988a224b898a5428f7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3119.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3122.jpg b/training/my_horse2zebra/train_B/n02391049_3122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..59b8284b02ff38436c6767396f5279a2d6b7d178 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3122.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3128.jpg b/training/my_horse2zebra/train_B/n02391049_3128.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b2e92dd8d870318c21d42ee0881da709ac44dea Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3128.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3135.jpg b/training/my_horse2zebra/train_B/n02391049_3135.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16925c53a78bdf832bb5a345784eeda85d7254ce Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3135.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3137.jpg b/training/my_horse2zebra/train_B/n02391049_3137.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e840a8f94f10ff09160737718af4fb466aa03615 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3137.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3139.jpg b/training/my_horse2zebra/train_B/n02391049_3139.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1440aedfd3a18c8ec788f23c62627b9a3f67c1dc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3139.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_314.jpg b/training/my_horse2zebra/train_B/n02391049_314.jpg new file mode 100644 index 0000000000000000000000000000000000000000..918e41c8bb1d5af8811d6e806075ba8fd2c38f07 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_314.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3148.jpg b/training/my_horse2zebra/train_B/n02391049_3148.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3457f3da4d17062d097d6c523fa915d768d0e38c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3148.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3149.jpg b/training/my_horse2zebra/train_B/n02391049_3149.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29ff4f8109fed72eab7850f045a15812eb02239d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3149.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3153.jpg b/training/my_horse2zebra/train_B/n02391049_3153.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82e5afdedb762a7a08e212cd6571db597b230dbb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3153.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3154.jpg b/training/my_horse2zebra/train_B/n02391049_3154.jpg new file mode 100644 index 0000000000000000000000000000000000000000..086c23921e06e6a3c883469cf462a7ce9553309b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3154.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3158.jpg b/training/my_horse2zebra/train_B/n02391049_3158.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b43501fc6d767461e75829a586414448dc846df0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3158.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_316.jpg b/training/my_horse2zebra/train_B/n02391049_316.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1c1620e57f96d764bae38584de36ba49abc3505 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_316.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3162.jpg b/training/my_horse2zebra/train_B/n02391049_3162.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d055b644738ea35a9eb4a4c9bf9525fface66047 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3162.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3165.jpg b/training/my_horse2zebra/train_B/n02391049_3165.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10a6e702dae9bd99fcdf5dbd4ec9d35929d99643 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3165.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3173.jpg b/training/my_horse2zebra/train_B/n02391049_3173.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cef7953d926b00fd0dc599b76659d628ea628748 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3173.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3174.jpg b/training/my_horse2zebra/train_B/n02391049_3174.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3529a8eb1dec7e333eaa96649e10d3762262586b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3174.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3177.jpg b/training/my_horse2zebra/train_B/n02391049_3177.jpg new file mode 100644 index 0000000000000000000000000000000000000000..522cd22a37a8c3cb0fdb468c4d2759c6d860ebf5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3177.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3187.jpg b/training/my_horse2zebra/train_B/n02391049_3187.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1196c3e9c15b9b6862261f8590608cb3181361b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3187.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3191.jpg b/training/my_horse2zebra/train_B/n02391049_3191.jpg new file mode 100644 index 0000000000000000000000000000000000000000..48cffce28566215302c9a6cfcd4c59aa0b454ec1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3191.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3199.jpg b/training/my_horse2zebra/train_B/n02391049_3199.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb75f65644684e8a2677502eaef34363d14bf4e6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3199.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_32.jpg b/training/my_horse2zebra/train_B/n02391049_32.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b03ab73582e43bf7b5ca69e88aba4dd452842e09 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_32.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3202.jpg b/training/my_horse2zebra/train_B/n02391049_3202.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6451c80ab75ee9bb0d4ad04e3b05145e3571f9c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3202.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3209.jpg b/training/my_horse2zebra/train_B/n02391049_3209.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69299dc5a6b24448e02b0169c6eb1ad5e2dd9439 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3209.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3211.jpg b/training/my_horse2zebra/train_B/n02391049_3211.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d27fb89fe48242e21430cc8e431d7ba3ea6854e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3211.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3219.jpg b/training/my_horse2zebra/train_B/n02391049_3219.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98253c29ef930c6affdfbe8b35fce64073e7ef06 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3219.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3221.jpg b/training/my_horse2zebra/train_B/n02391049_3221.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b65e98437c343891d9d9d74be3b498b969bca19f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3221.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3228.jpg b/training/my_horse2zebra/train_B/n02391049_3228.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8ee630522c1e109f2e5bae0dc0f56efce84a3f5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3228.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3229.jpg b/training/my_horse2zebra/train_B/n02391049_3229.jpg new file mode 100644 index 0000000000000000000000000000000000000000..290503c09fc58ba254c29ff1ecf2724c661e4aa8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3229.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3232.jpg b/training/my_horse2zebra/train_B/n02391049_3232.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddcbe009a5f90aa72bfc0ddf5d13a57c9845a55c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3232.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3233.jpg b/training/my_horse2zebra/train_B/n02391049_3233.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d1677c38d91150a6086b0f79b62eed53a4922d0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3233.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3235.jpg b/training/my_horse2zebra/train_B/n02391049_3235.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1ecdd4c1023ab1a9e1a69cf046002a92eece0e2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3235.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3236.jpg b/training/my_horse2zebra/train_B/n02391049_3236.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97323293ba800d8dd57487d799ea07c42266e9b6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3236.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3238.jpg b/training/my_horse2zebra/train_B/n02391049_3238.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3aaea22e765ce480eaa943b8aecd58619f1ff261 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3238.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3239.jpg b/training/my_horse2zebra/train_B/n02391049_3239.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b507f825223fdf3cff98b7b7a3bf3790f18f0d59 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3239.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3242.jpg b/training/my_horse2zebra/train_B/n02391049_3242.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9f65eb179ca049a63a56af454328e6edbf97bb4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3242.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3246.jpg b/training/my_horse2zebra/train_B/n02391049_3246.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c7bd66195d0efc24742fd6367f37e7723b0bc69 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3246.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3247.jpg b/training/my_horse2zebra/train_B/n02391049_3247.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7a888c3567f89e3e8f8f6fb131fca8a12b17654 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3247.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3248.jpg b/training/my_horse2zebra/train_B/n02391049_3248.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a4f660911b2385fc750ac0f0813b1f6e2bca58a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3248.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3249.jpg b/training/my_horse2zebra/train_B/n02391049_3249.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9e93ba8e7c16cbab1113c897c1613b4db60b04e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3249.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3251.jpg b/training/my_horse2zebra/train_B/n02391049_3251.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfb3e81b88f8c00bccf218f41d43bae829e4d6d6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3251.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3253.jpg b/training/my_horse2zebra/train_B/n02391049_3253.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d71adbc5957d400083ece3689cc91ad762ca57d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3253.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3257.jpg b/training/my_horse2zebra/train_B/n02391049_3257.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5cf16e566748e193dcb8a77d28e0b80cb502d3c8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3257.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3261.jpg b/training/my_horse2zebra/train_B/n02391049_3261.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e0bea41a9d212454418fc70818346371642ea61 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3261.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3262.jpg b/training/my_horse2zebra/train_B/n02391049_3262.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb672465a9c35a2f5992a196b89f32f17bb14a14 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3262.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3264.jpg b/training/my_horse2zebra/train_B/n02391049_3264.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea74b7bda0d318c6ca1f0a5d2d67522652f3b9fe Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3264.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3265.jpg b/training/my_horse2zebra/train_B/n02391049_3265.jpg new file mode 100644 index 0000000000000000000000000000000000000000..894060351ccca3b0a951fb7c655740fb7f1f0c7b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3265.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3266.jpg b/training/my_horse2zebra/train_B/n02391049_3266.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2b4b6dc238b9a271c727ed76d4c2b1bcdab1e45 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3266.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3267.jpg b/training/my_horse2zebra/train_B/n02391049_3267.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efa10a5a572be850de1f08140609649adb83a63a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3267.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3271.jpg b/training/my_horse2zebra/train_B/n02391049_3271.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cf242607b61fe4df34574a5e93ab2cd019d4fd7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3271.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3276.jpg b/training/my_horse2zebra/train_B/n02391049_3276.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4ec4458b7b36ce3b4621f47915b90400a3f65d4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3276.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_328.jpg b/training/my_horse2zebra/train_B/n02391049_328.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9065654d62386ad5c64dc88bab005846810a22b6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_328.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3289.jpg b/training/my_horse2zebra/train_B/n02391049_3289.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f44bcca6f16c35101078e5b897942c1ef74000d3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3289.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_329.jpg b/training/my_horse2zebra/train_B/n02391049_329.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf773d338238165e4d6fb200a1810ced30a589cf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_329.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3291.jpg b/training/my_horse2zebra/train_B/n02391049_3291.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09382ae442f773dcf6b7d6e5c832dda76d03718b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3291.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3292.jpg b/training/my_horse2zebra/train_B/n02391049_3292.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d1d810f6081b3a32a9442d9778b327ede36a29b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3292.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3293.jpg b/training/my_horse2zebra/train_B/n02391049_3293.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4b611de1f1b1bcbf885dc85cada6c73a44bf98a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3293.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3294.jpg b/training/my_horse2zebra/train_B/n02391049_3294.jpg new file mode 100644 index 0000000000000000000000000000000000000000..390a937ed88f2e75c67b7d4c7d5db1d6795437b9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3294.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3296.jpg b/training/my_horse2zebra/train_B/n02391049_3296.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b2644a73f5146c7803b2dffd43aae233a023cc9b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3296.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_33.jpg b/training/my_horse2zebra/train_B/n02391049_33.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82f68d917ddab4ee08b364248f1c1ce6a544a55f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_33.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3303.jpg b/training/my_horse2zebra/train_B/n02391049_3303.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27750a9db92e0ab5f5f7620ebd28ee3bf0af998f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3303.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3306.jpg b/training/my_horse2zebra/train_B/n02391049_3306.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f72d5cf6fce96d3d9ffbc041c447dbd3b22ad30d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3306.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3314.jpg b/training/my_horse2zebra/train_B/n02391049_3314.jpg new file mode 100644 index 0000000000000000000000000000000000000000..873f6bf390d41b62ff04863e2e75bc0f5516ea59 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3314.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3317.jpg b/training/my_horse2zebra/train_B/n02391049_3317.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d702df90cbc6547f6ee25e940aebb39bc185f53 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3317.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3319.jpg b/training/my_horse2zebra/train_B/n02391049_3319.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d2be9f45098bcbf41ca9693732fdeb2eefcab57 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3319.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_332.jpg b/training/my_horse2zebra/train_B/n02391049_332.jpg new file mode 100644 index 0000000000000000000000000000000000000000..530c0de7c95442e08bbc712e8a0abf1c814fbc7c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_332.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3324.jpg b/training/my_horse2zebra/train_B/n02391049_3324.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d497840d371933928bc847db42f6fd278a39e8e9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3324.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3326.jpg b/training/my_horse2zebra/train_B/n02391049_3326.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e149f076e6234fc7376463a50a42e1772ef4bc75 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3326.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3328.jpg b/training/my_horse2zebra/train_B/n02391049_3328.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73aecfd343d4d53b8bb0d4e9bc092e37c530a8d3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3328.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_333.jpg b/training/my_horse2zebra/train_B/n02391049_333.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e032c5a2d0af61d8c2209f76db2e7ad79b98d83 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_333.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3333.jpg b/training/my_horse2zebra/train_B/n02391049_3333.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7081400ae8f5333f458a2700fa5e0012beadf2b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3333.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3339.jpg b/training/my_horse2zebra/train_B/n02391049_3339.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4abb140f4e6ce25536b3963621d2dffe0c0d87a2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3339.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3342.jpg b/training/my_horse2zebra/train_B/n02391049_3342.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b85a819589abd86c242dddb660c1ad96011c5a3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3342.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3348.jpg b/training/my_horse2zebra/train_B/n02391049_3348.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f39d1f2c8973fae28fa5bcb5984aad227a41fb86 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3348.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_335.jpg b/training/my_horse2zebra/train_B/n02391049_335.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d2f0242d3086e040cbd4b6cf309d932c8f2c5c6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_335.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3365.jpg b/training/my_horse2zebra/train_B/n02391049_3365.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4745c9fad016d244c28a40973fa81b01e6e44f4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3365.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3371.jpg b/training/my_horse2zebra/train_B/n02391049_3371.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d71199d6a55ae1608c204432909b95b6ce7c57cf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3371.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3397.jpg b/training/my_horse2zebra/train_B/n02391049_3397.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57c6f49bb056fcaee3dfdf093aa4b6b4ab969ad6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3397.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3402.jpg b/training/my_horse2zebra/train_B/n02391049_3402.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c85719d384a8d1aa6ec3ee8f3c9e76dfa934807 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3402.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_341.jpg b/training/my_horse2zebra/train_B/n02391049_341.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e02d6d2fef2c10bfffcf10e606487253ce355a7f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_341.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3415.jpg b/training/my_horse2zebra/train_B/n02391049_3415.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23b8a16b5f6d1e10323879af5f64fd0b71ea16f7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3415.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3426.jpg b/training/my_horse2zebra/train_B/n02391049_3426.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5a04c21317572a6c7d77083bd4ce31164b926a7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3426.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3428.jpg b/training/my_horse2zebra/train_B/n02391049_3428.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07d8f7f62393df5dc3a369d35fcf343243ecbe3e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3428.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_343.jpg b/training/my_horse2zebra/train_B/n02391049_343.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c86fb1a14eeab7d5478329cc3fc4fbf0bc4bf08 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_343.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3436.jpg b/training/my_horse2zebra/train_B/n02391049_3436.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf0a6bacbd343523e65900efdd67242bf9190190 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3436.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_344.jpg b/training/my_horse2zebra/train_B/n02391049_344.jpg new file mode 100644 index 0000000000000000000000000000000000000000..012fbca68d4093dad00d27c7b75b10611e5ab53b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_344.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3443.jpg b/training/my_horse2zebra/train_B/n02391049_3443.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82e83adf92f66e6f93dc5c7dfc68e461483e63a0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3443.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3446.jpg b/training/my_horse2zebra/train_B/n02391049_3446.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d29fbb7f4a9193e198867a78fec3a8d63898ad70 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3446.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_345.jpg b/training/my_horse2zebra/train_B/n02391049_345.jpg new file mode 100644 index 0000000000000000000000000000000000000000..566a980dc690a0ed7da30f13bb9979dd71045d03 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_345.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3465.jpg b/training/my_horse2zebra/train_B/n02391049_3465.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db9536eac28263e362f2ca7470ec35437aa25732 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3465.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_35.jpg b/training/my_horse2zebra/train_B/n02391049_35.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c4087128689425b6d00b51c06b7c9d0138c7169 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_35.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3509.jpg b/training/my_horse2zebra/train_B/n02391049_3509.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b44726d7e925a928f054081c12338c2ab71b329 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3509.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_351.jpg b/training/my_horse2zebra/train_B/n02391049_351.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42b1605e1daea8d61321477fb5fbc64c9f713e60 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_351.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3513.jpg b/training/my_horse2zebra/train_B/n02391049_3513.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92df10ab52898fcdde16d9bab8fa6f095ad7c3eb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3513.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3517.jpg b/training/my_horse2zebra/train_B/n02391049_3517.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b2186f3bc8ebab86baaa38d71306be6dacee9a8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3517.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3518.jpg b/training/my_horse2zebra/train_B/n02391049_3518.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7e414fb043305e03d32845e80fe60aa0ca98989 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3518.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_353.jpg b/training/my_horse2zebra/train_B/n02391049_353.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7013424d086fc5cf382a3acccb81acfbc98a0496 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_353.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3536.jpg b/training/my_horse2zebra/train_B/n02391049_3536.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a9d2de456fdb5b84ec985a6e5063e2c2ff5571c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3536.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_354.jpg b/training/my_horse2zebra/train_B/n02391049_354.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a231de7fbe43a9700cbec501b69f0f5d8e4dc7c1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_354.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_356.jpg b/training/my_horse2zebra/train_B/n02391049_356.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac36069c582f2f0f93297be9b134e5605a811a94 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_356.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_357.jpg b/training/my_horse2zebra/train_B/n02391049_357.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17bc647f59e4be44c762d93ba80506ba84d58751 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_357.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3578.jpg b/training/my_horse2zebra/train_B/n02391049_3578.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ee142a5f3adbb9c2f87c754debf78140e8c99cd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3578.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_358.jpg b/training/my_horse2zebra/train_B/n02391049_358.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5abedc6b5c0696a1eb92e07ee6db0d4e56643cfe Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_358.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3582.jpg b/training/my_horse2zebra/train_B/n02391049_3582.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec44f9597b7ba0c11326c4b2d33817191f602ae3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3582.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_36.jpg b/training/my_horse2zebra/train_B/n02391049_36.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa196d73d477cbca06dc7c7bf30b46de47ea301d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_36.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_362.jpg b/training/my_horse2zebra/train_B/n02391049_362.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2641bccfff76565db36e98487a96ea19882a04dc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_362.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3623.jpg b/training/my_horse2zebra/train_B/n02391049_3623.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee9f33fbcec355941e7be22377d31c7f8c8a6b4c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3623.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_363.jpg b/training/my_horse2zebra/train_B/n02391049_363.jpg new file mode 100644 index 0000000000000000000000000000000000000000..551c5c9d4130051a875e5835aad3772911558389 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_363.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3631.jpg b/training/my_horse2zebra/train_B/n02391049_3631.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b37ba7ccb0ef8f0b32397a24a71955e06a65e69 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3631.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3636.jpg b/training/my_horse2zebra/train_B/n02391049_3636.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b5fc71ca487ccb32e519dbcc31892eee3e8f09c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3636.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3654.jpg b/training/my_horse2zebra/train_B/n02391049_3654.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6d5714f12fd0095eb18b2b06fd042714f849371 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3654.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_368.jpg b/training/my_horse2zebra/train_B/n02391049_368.jpg new file mode 100644 index 0000000000000000000000000000000000000000..432333f77c3ab122ed531f93a908651bf88fb330 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_368.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3681.jpg b/training/my_horse2zebra/train_B/n02391049_3681.jpg new file mode 100644 index 0000000000000000000000000000000000000000..120c081c0eb6135ab82e43e84361ff482dd71706 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3681.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3682.jpg b/training/my_horse2zebra/train_B/n02391049_3682.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61b25295ef6654014f09be0aaccdf6908ed15609 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3682.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3693.jpg b/training/my_horse2zebra/train_B/n02391049_3693.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4842b016045922170ec42b7944286b5b00fe276c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3693.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_37.jpg b/training/my_horse2zebra/train_B/n02391049_37.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9696d2c1d388017023ae3a31eb4d6057ed4e21c2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_37.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3733.jpg b/training/my_horse2zebra/train_B/n02391049_3733.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30f5ee7c0759bb1abcc1a7b68c7932417f5acb8e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3733.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3749.jpg b/training/my_horse2zebra/train_B/n02391049_3749.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e8f7defd6027e746a35a2ef94014d910423b62a3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3749.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3754.jpg b/training/my_horse2zebra/train_B/n02391049_3754.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67f4a5f2262986f0cb2b8bd8e2cd2f9a16e6b187 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3754.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3755.jpg b/training/my_horse2zebra/train_B/n02391049_3755.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51e65e3801a7e5d625ab8d2d65cd7c0c173329d9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3755.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_377.jpg b/training/my_horse2zebra/train_B/n02391049_377.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b27b4b624811da367b6157ba116b316db03cc855 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_377.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3771.jpg b/training/my_horse2zebra/train_B/n02391049_3771.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ca8f3dc93f59d61d2b43b6a0cb11274da7b4750 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3771.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3778.jpg b/training/my_horse2zebra/train_B/n02391049_3778.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20b11eeed26937018bcf03d0c40b973f32b80948 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3778.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3779.jpg b/training/my_horse2zebra/train_B/n02391049_3779.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cebd573e80b2e6bb4b8841ea36f33cc20212dce1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3779.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3785.jpg b/training/my_horse2zebra/train_B/n02391049_3785.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c47d9ff520fd27cfa2b4478f820faaac663e751 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3785.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_379.jpg b/training/my_horse2zebra/train_B/n02391049_379.jpg new file mode 100644 index 0000000000000000000000000000000000000000..798fe92daf319ed43c1f73f2cb624839f6fec285 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_379.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3805.jpg b/training/my_horse2zebra/train_B/n02391049_3805.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47eacda0da71ae1ba91659e51c3a569a11586894 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3805.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_383.jpg b/training/my_horse2zebra/train_B/n02391049_383.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ef123f59babcefcde09f7d920faa02ae077e489 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_383.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_384.jpg b/training/my_horse2zebra/train_B/n02391049_384.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a24022bacd0a8c9a69bbb4f3b47e3d68fe8ff0d7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_384.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3844.jpg b/training/my_horse2zebra/train_B/n02391049_3844.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4512a39467a7880c2e471753c07bb68656c82438 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3844.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3861.jpg b/training/my_horse2zebra/train_B/n02391049_3861.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87b398b2c8b3aab776c51ad5f154879160a6ab6c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3861.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3868.jpg b/training/my_horse2zebra/train_B/n02391049_3868.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a45e8d3852f0e4e03cf02885205ec34abca494d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3868.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3872.jpg b/training/my_horse2zebra/train_B/n02391049_3872.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44bd1d1c986cc9615aac1b33aae50a9a6dc4ba6f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3872.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3878.jpg b/training/my_horse2zebra/train_B/n02391049_3878.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ef2e096e827968bad86d3c7b828af3570dd7a45 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3878.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_39.jpg b/training/my_horse2zebra/train_B/n02391049_39.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1540e0a00e7b0e4500b18d27d2d9ad81080ac0e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_39.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3901.jpg b/training/my_horse2zebra/train_B/n02391049_3901.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99b8a56a2a713baada093bcc3a251e8b2f23e8ef Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3901.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3905.jpg b/training/my_horse2zebra/train_B/n02391049_3905.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31b3032148ac6297e037c6df2f8850cd5ab3c179 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3905.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3917.jpg b/training/my_horse2zebra/train_B/n02391049_3917.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f43ed8a43cb2617a4985a7aaee21ecfde6ecfb3d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3917.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_392.jpg b/training/my_horse2zebra/train_B/n02391049_392.jpg new file mode 100644 index 0000000000000000000000000000000000000000..827a53e04f2d961eb5fb0adec7da6f822c7c1dfb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_392.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3937.jpg b/training/my_horse2zebra/train_B/n02391049_3937.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78a508889978cef2b015901b5b88550c002ed0ef Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3937.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3938.jpg b/training/my_horse2zebra/train_B/n02391049_3938.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85ae6717a3414b98e1c614a4c000e845402c7fe5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3938.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3947.jpg b/training/my_horse2zebra/train_B/n02391049_3947.jpg new file mode 100644 index 0000000000000000000000000000000000000000..214e301e156ce6831fc1beb07a3f9c9137139a54 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3947.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3949.jpg b/training/my_horse2zebra/train_B/n02391049_3949.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8585ee06434437892b09626d10fca33449dacb22 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3949.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_395.jpg b/training/my_horse2zebra/train_B/n02391049_395.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3313a6dc1d10efcd1f20549dc21564f92ed196a8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_395.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_3958.jpg b/training/my_horse2zebra/train_B/n02391049_3958.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9fea539d48d98a3c6e6614915ee04ec0ae98cc6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_3958.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_396.jpg b/training/my_horse2zebra/train_B/n02391049_396.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76137613867940f05903e9f4dfe60af67e0bdeab Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_396.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4.jpg b/training/my_horse2zebra/train_B/n02391049_4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3acc05d2377a87c5d0ce7e7b2f12658f80e0d874 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4027.jpg b/training/my_horse2zebra/train_B/n02391049_4027.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e27d91db6da63c3fc784a0fb57626379ce72a84e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4027.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4028.jpg b/training/my_horse2zebra/train_B/n02391049_4028.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7da9a300b396e198610ea5ca9001a9d921315e93 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4028.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_403.jpg b/training/my_horse2zebra/train_B/n02391049_403.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f3b78cf30fb078d9fd4d844a161db5700de4469 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_403.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4034.jpg b/training/my_horse2zebra/train_B/n02391049_4034.jpg new file mode 100644 index 0000000000000000000000000000000000000000..743bf7555c41d36e2f6a2b9139a277f6cb1c0319 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4034.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_404.jpg b/training/my_horse2zebra/train_B/n02391049_404.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fca4bd6c65b8f48c4989fba99581bf8a3165c614 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_404.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4058.jpg b/training/my_horse2zebra/train_B/n02391049_4058.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c00014d6129ecc89653a9d2952387de96ef6ca7e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4058.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_406.jpg b/training/my_horse2zebra/train_B/n02391049_406.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0636192c58ecc33072a56ad51fc8bef2a817da34 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_406.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4069.jpg b/training/my_horse2zebra/train_B/n02391049_4069.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4b13291fdad12a1e8870142585d2f676883f286 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4069.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_407.jpg b/training/my_horse2zebra/train_B/n02391049_407.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65977d6cd8167ef48bc47d62c77806eecd573d05 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_407.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4077.jpg b/training/my_horse2zebra/train_B/n02391049_4077.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ca4191bba1d451dc87e5351c827c41b0e2fe040 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4077.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_41.jpg b/training/my_horse2zebra/train_B/n02391049_41.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91a7752d027e517fb8f406e2bc9d89c1ac747c66 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_41.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4106.jpg b/training/my_horse2zebra/train_B/n02391049_4106.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87bf7a1ccb09c180b67a5148bb168920eb56b363 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4106.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4144.jpg b/training/my_horse2zebra/train_B/n02391049_4144.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3a876f7989d4e68cd2727dbfcaac1a575c8a425 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4144.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_415.jpg b/training/my_horse2zebra/train_B/n02391049_415.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0dd643bf99f41c7ebce9097c014338e67cf324f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_415.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4161.jpg b/training/my_horse2zebra/train_B/n02391049_4161.jpg new file mode 100644 index 0000000000000000000000000000000000000000..019cf1cedd1ab85651283b2b3aae23de4b4db758 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4161.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4165.jpg b/training/my_horse2zebra/train_B/n02391049_4165.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d403bb488e8b3c4a005086d79b24271907a2a2b6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4165.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4176.jpg b/training/my_horse2zebra/train_B/n02391049_4176.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc2f2f323252e6993ed02fba19e1fc571a1493e5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4176.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4185.jpg b/training/my_horse2zebra/train_B/n02391049_4185.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01d12ef7bedf6cb9c150137e00ad7329c87a743b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4185.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4189.jpg b/training/my_horse2zebra/train_B/n02391049_4189.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f5eeb41d0f13ecbcf60f31081b41b51611735a2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4189.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_419.jpg b/training/my_horse2zebra/train_B/n02391049_419.jpg new file mode 100644 index 0000000000000000000000000000000000000000..286bc4f2538d836a05bff71e4081d1c5d6de14e1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_419.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_421.jpg b/training/my_horse2zebra/train_B/n02391049_421.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ffa9aa3a12c72ecf296be274209f70abee45ede Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_421.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4218.jpg b/training/my_horse2zebra/train_B/n02391049_4218.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce69d9cecc5e978c5c81d3028466819e7b459e38 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4218.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_424.jpg b/training/my_horse2zebra/train_B/n02391049_424.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa222764449051f522fb2fc9014666a91fbad3c5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_424.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_425.jpg b/training/my_horse2zebra/train_B/n02391049_425.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfcb98d32fc39670ff98b9cfa009e0070de82744 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_425.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4259.jpg b/training/my_horse2zebra/train_B/n02391049_4259.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21519e8c3d405cd0ac819c2f52632c22a65bbb5b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4259.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4261.jpg b/training/my_horse2zebra/train_B/n02391049_4261.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc17024012b116085b7086f2fbdffffaa6ed6adf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4261.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_427.jpg b/training/my_horse2zebra/train_B/n02391049_427.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49199cd6e446b8699b220a9eef8501ca4c31bc70 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_427.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_428.jpg b/training/my_horse2zebra/train_B/n02391049_428.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b7066157e3b02da5f94055c6a1dea736c720b39 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_428.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4292.jpg b/training/my_horse2zebra/train_B/n02391049_4292.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c75f48ae4f2f6a800bf6dfe0b4c3a49877f3f84f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4292.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_43.jpg b/training/my_horse2zebra/train_B/n02391049_43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c45a8c0ed6cae2ef5d3b0125805d8bf903d7907 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_43.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4329.jpg b/training/my_horse2zebra/train_B/n02391049_4329.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18481c409a1c20322220950e5b6e4fe2eaa948ff Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4329.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4351.jpg b/training/my_horse2zebra/train_B/n02391049_4351.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b7ecd9fc17fae4fdb907a68c2a40048d01cc71c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4351.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_437.jpg b/training/my_horse2zebra/train_B/n02391049_437.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72fec051d26dbbddbe7332ac0b141eff2ca4702b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_437.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4413.jpg b/training/my_horse2zebra/train_B/n02391049_4413.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5530a1faa5637a7056f110c4213cbcd8cc829935 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4413.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_444.jpg b/training/my_horse2zebra/train_B/n02391049_444.jpg new file mode 100644 index 0000000000000000000000000000000000000000..714d24e5f3cabe67657654eb0fcdee0a8c42634f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_444.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4445.jpg b/training/my_horse2zebra/train_B/n02391049_4445.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16fc014281383db5c31636f83e002f85e76db876 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4445.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4448.jpg b/training/my_horse2zebra/train_B/n02391049_4448.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f924f82dd4fb8db92e8031bd2850892df8b6840a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4448.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4474.jpg b/training/my_horse2zebra/train_B/n02391049_4474.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94e507f1807bd36b27355a45f93845b7ac5ca561 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4474.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4475.jpg b/training/my_horse2zebra/train_B/n02391049_4475.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7eae455d3561258973f02f502b62dfc2318a6fa Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4475.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4496.jpg b/training/my_horse2zebra/train_B/n02391049_4496.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d160e6cf2fc2c5e357c8bdd694b3cad1b9ce7192 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4496.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_45.jpg b/training/my_horse2zebra/train_B/n02391049_45.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2da26016a490375620ed2e5e119976552bb1381e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_45.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4517.jpg b/training/my_horse2zebra/train_B/n02391049_4517.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2abe919aee526d7074fd8e30ae3316d0bf5e3700 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4517.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4525.jpg b/training/my_horse2zebra/train_B/n02391049_4525.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92ddfec88d1ac7cb542ecf0a9897411be2518db6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4525.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4528.jpg b/training/my_horse2zebra/train_B/n02391049_4528.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f3ad56f9b4d12f6c7c4f541b92f75ce3fd25cf7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4528.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4564.jpg b/training/my_horse2zebra/train_B/n02391049_4564.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e1c03ec23699665584b96944330256b690b2928 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4564.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4569.jpg b/training/my_horse2zebra/train_B/n02391049_4569.jpg new file mode 100644 index 0000000000000000000000000000000000000000..805f358530342f9469c2691df9ffc624e03367da Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4569.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4576.jpg b/training/my_horse2zebra/train_B/n02391049_4576.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46e53c9728f9ea956d313d11e918d5ab29f0fcb8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4576.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4584.jpg b/training/my_horse2zebra/train_B/n02391049_4584.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3723caf49b8c9c2de7d85f42609828793463b142 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4584.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_459.jpg b/training/my_horse2zebra/train_B/n02391049_459.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2afe7ae78883dcc8a237afe59e7f7c3c3c87cc6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_459.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_46.jpg b/training/my_horse2zebra/train_B/n02391049_46.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1abfefc2a914244cc8fa204626023ff2163864ab Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_46.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_461.jpg b/training/my_horse2zebra/train_B/n02391049_461.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e66a6fe4e4741e2eb6302034621fc0adce5d65e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_461.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_463.jpg b/training/my_horse2zebra/train_B/n02391049_463.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0074aac43c83a4d9e124811856edc192add1e368 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_463.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4638.jpg b/training/my_horse2zebra/train_B/n02391049_4638.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a65b65e2264fc717e08464eaa685081364821d72 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4638.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4644.jpg b/training/my_horse2zebra/train_B/n02391049_4644.jpg new file mode 100644 index 0000000000000000000000000000000000000000..704b9baa98e9a1a238a7e5c9c5d14f0937e63689 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4644.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_465.jpg b/training/my_horse2zebra/train_B/n02391049_465.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f3f861a9a4f3bda22b13e107f6e8f2bbcc600f1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_465.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4677.jpg b/training/my_horse2zebra/train_B/n02391049_4677.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fcaa80861a5c634efb81c5d40fe91dc71528fbc6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4677.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_468.jpg b/training/my_horse2zebra/train_B/n02391049_468.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f592d7b44f9968ceedd279abdfaa0bcd59b6ab3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_468.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4682.jpg b/training/my_horse2zebra/train_B/n02391049_4682.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57c8dbda66c2c306ce223413dd674bd9a154770d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4682.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4692.jpg b/training/my_horse2zebra/train_B/n02391049_4692.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d50eedee705634a8ba76137f69d21e19e6cc68a0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4692.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4693.jpg b/training/my_horse2zebra/train_B/n02391049_4693.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8df36952fb6efba290be864d2a84a67581d6aff8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4693.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4697.jpg b/training/my_horse2zebra/train_B/n02391049_4697.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb47af8a7bf2eae934e9d42a09d7a26de9cf645a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4697.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4704.jpg b/training/my_horse2zebra/train_B/n02391049_4704.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87e2eb164c5c1e8cccac8b28d5fa891042359811 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4704.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_471.jpg b/training/my_horse2zebra/train_B/n02391049_471.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e73f8e0c760abd67b5d4893870d681d28a38b5d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_471.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4729.jpg b/training/my_horse2zebra/train_B/n02391049_4729.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d67a521d32af696eaee80d8cb65ef3900fca24de Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4729.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4734.jpg b/training/my_horse2zebra/train_B/n02391049_4734.jpg new file mode 100644 index 0000000000000000000000000000000000000000..563b0dff8fd01a6b503eb8dcd0538fc10cccdb3a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4734.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_474.jpg b/training/my_horse2zebra/train_B/n02391049_474.jpg new file mode 100644 index 0000000000000000000000000000000000000000..478287aeabad1f9c954e6d1719448bb9e08388e8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_474.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4745.jpg b/training/my_horse2zebra/train_B/n02391049_4745.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d97072523675f5fdcab7f4a1df565979fba3a01 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4745.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4747.jpg b/training/my_horse2zebra/train_B/n02391049_4747.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50fee6ffd44fbae18ae555c52e3832afa87e6dc4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4747.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4748.jpg b/training/my_horse2zebra/train_B/n02391049_4748.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1db733bf8f0e51c7438c9a2ec9a23c137a207b97 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4748.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_475.jpg b/training/my_horse2zebra/train_B/n02391049_475.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8137ba32ee4af9341a23e3047ae220fbae5d6a0a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_475.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4775.jpg b/training/my_horse2zebra/train_B/n02391049_4775.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7c0b958d89de264fc7a1cb85bf381b4bf4b0f81 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4775.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4805.jpg b/training/my_horse2zebra/train_B/n02391049_4805.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b40e912aaeca42f5fc7dab2d800606e6af684950 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4805.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4814.jpg b/training/my_horse2zebra/train_B/n02391049_4814.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b3a11a1be9803fd4e158dd2229b40e23b0cfd75 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4814.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4824.jpg b/training/my_horse2zebra/train_B/n02391049_4824.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a19b45050830ea89d99e9e9ec74ce318b97aaa76 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4824.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_483.jpg b/training/my_horse2zebra/train_B/n02391049_483.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3cd1ce0e84cefaf752fa7ba8b0276dae0fa961d6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_483.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4839.jpg b/training/my_horse2zebra/train_B/n02391049_4839.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dbabebddfac814b4e1c63f2c7082436d65c19d65 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4839.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4863.jpg b/training/my_horse2zebra/train_B/n02391049_4863.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d61d546cd68d7390978de7a2f955e4462028d11 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4863.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_487.jpg b/training/my_horse2zebra/train_B/n02391049_487.jpg new file mode 100644 index 0000000000000000000000000000000000000000..491861e49ec097840a9f7f3e5aba851c7289bd59 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_487.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4873.jpg b/training/my_horse2zebra/train_B/n02391049_4873.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfc868996541929a6085d989f94db3f47008caed Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4873.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4879.jpg b/training/my_horse2zebra/train_B/n02391049_4879.jpg new file mode 100644 index 0000000000000000000000000000000000000000..388f9199ebd2d4424997af1f2b3eece33909f9b9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4879.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4889.jpg b/training/my_horse2zebra/train_B/n02391049_4889.jpg new file mode 100644 index 0000000000000000000000000000000000000000..753582a6b89ca8aed74f6a7147fed7531af92e4d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4889.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4896.jpg b/training/my_horse2zebra/train_B/n02391049_4896.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68f34274f9fe9bbc9f286c4c11a87778d3cf2b3d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4896.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4898.jpg b/training/my_horse2zebra/train_B/n02391049_4898.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d716f80f4166b0bde3eaeea2c28743a502c4f433 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4898.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4901.jpg b/training/my_horse2zebra/train_B/n02391049_4901.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1290b4d923f012dbf848fb9e7f9b04dad6275c78 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4901.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4903.jpg b/training/my_horse2zebra/train_B/n02391049_4903.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd693a8c08f906f818b53ef1b44817ababb4a990 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4903.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4909.jpg b/training/my_horse2zebra/train_B/n02391049_4909.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f685ca4a5994102758a378dec950b49e8ca334da Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4909.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4914.jpg b/training/my_horse2zebra/train_B/n02391049_4914.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab89b6c34edff880f228098be76b66540eaed8fe Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4914.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4922.jpg b/training/my_horse2zebra/train_B/n02391049_4922.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33e8d00df75c91b40c4dad1d02a0a60c17d11dcc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4922.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4932.jpg b/training/my_horse2zebra/train_B/n02391049_4932.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80a3e972a24f70dfcfdd28f12d46ac44a17f5a6e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4932.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4952.jpg b/training/my_horse2zebra/train_B/n02391049_4952.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2f674c9becc8e864bb40db523e7fc5be2686081 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4952.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_496.jpg b/training/my_horse2zebra/train_B/n02391049_496.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6fcee4a473ae971ad4a55be9e6a7d702968a404 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_496.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4965.jpg b/training/my_horse2zebra/train_B/n02391049_4965.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24ecfbbda6768244cee52cb4b47e59123aa0d799 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4965.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4969.jpg b/training/my_horse2zebra/train_B/n02391049_4969.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4052e3e615d3f1e6d117acd4bdfc57f57efa358b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4969.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_497.jpg b/training/my_horse2zebra/train_B/n02391049_497.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94768e8c81b521319888db581ccb19a0853a46e5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_497.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_4974.jpg b/training/my_horse2zebra/train_B/n02391049_4974.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7aaa10eedf74e2bc501138dfa4809d94fbe7026d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_4974.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_499.jpg b/training/my_horse2zebra/train_B/n02391049_499.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10cc572e327b9d7f813a075da7143379b86ad7d6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_499.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5005.jpg b/training/my_horse2zebra/train_B/n02391049_5005.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b42acc3d40e6723d4b68ece01e220ce5dc7d9662 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5005.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_501.jpg b/training/my_horse2zebra/train_B/n02391049_501.jpg new file mode 100644 index 0000000000000000000000000000000000000000..823e82d463d99ac04f94fadbbe8e695fc3fa8aca Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_501.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5015.jpg b/training/my_horse2zebra/train_B/n02391049_5015.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fecafbe9e5019d58555c35e42dedbfcfd64d3fdc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5015.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_506.jpg b/training/my_horse2zebra/train_B/n02391049_506.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9feb48391aa66de567afe8a280e648179bba7efc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_506.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5093.jpg b/training/my_horse2zebra/train_B/n02391049_5093.jpg new file mode 100644 index 0000000000000000000000000000000000000000..440f4c502c6d7da51505519a8c0f82c75033c1e7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5093.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5115.jpg b/training/my_horse2zebra/train_B/n02391049_5115.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25e5b10eb920414c481d972a8afafb35a3f914ca Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5115.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5121.jpg b/training/my_horse2zebra/train_B/n02391049_5121.jpg new file mode 100644 index 0000000000000000000000000000000000000000..294f6541f419ed3d8178ab5ab4cd7eede23f5ae0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5121.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5131.jpg b/training/my_horse2zebra/train_B/n02391049_5131.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3800bba08662f9d37a9913ace2d90bda63c476b1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5131.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_514.jpg b/training/my_horse2zebra/train_B/n02391049_514.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b54e8cba3a35bb387b27733248e3c9c4c56712c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_514.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_515.jpg b/training/my_horse2zebra/train_B/n02391049_515.jpg new file mode 100644 index 0000000000000000000000000000000000000000..041adb1774cbd64e7968ea7fc64e9b5019062f79 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_515.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5165.jpg b/training/my_horse2zebra/train_B/n02391049_5165.jpg new file mode 100644 index 0000000000000000000000000000000000000000..439f4097b4853603295075e0698664d3af9d0719 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5165.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5169.jpg b/training/my_horse2zebra/train_B/n02391049_5169.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74db9f7c589315f8a63493442856e31e760d5ba4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5169.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5189.jpg b/training/my_horse2zebra/train_B/n02391049_5189.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8defc4b619b0cee71e2e529a7666cf7acd91a0ca Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5189.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5208.jpg b/training/my_horse2zebra/train_B/n02391049_5208.jpg new file mode 100644 index 0000000000000000000000000000000000000000..79429ce646a64b16cddf709335f8f11ab480e7a8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5208.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5209.jpg b/training/my_horse2zebra/train_B/n02391049_5209.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f9998b376d731ff56333587b7aa9967ebedd9ab Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5209.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5216.jpg b/training/my_horse2zebra/train_B/n02391049_5216.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40417461cd279173bf6cdab8ce17da045e36a8f5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5216.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5217.jpg b/training/my_horse2zebra/train_B/n02391049_5217.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ca7efb16a340137fb8462efcd07603149df32e6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5217.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5236.jpg b/training/my_horse2zebra/train_B/n02391049_5236.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8a4482e561b003da4b765efe81a99c14a6113c1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5236.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_527.jpg b/training/my_horse2zebra/train_B/n02391049_527.jpg new file mode 100644 index 0000000000000000000000000000000000000000..063c0df23ff7c2b5b3cdf51bb491ece6d8f6e698 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_527.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5273.jpg b/training/my_horse2zebra/train_B/n02391049_5273.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa58b94093aae1e18c0ba5f579990f8659377c49 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5273.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5276.jpg b/training/my_horse2zebra/train_B/n02391049_5276.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09a65f587522c5f138496c5f06eb173b7f72bedd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5276.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5291.jpg b/training/my_horse2zebra/train_B/n02391049_5291.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9366acee1e082aa2ac79555f5c29ac7ba285aa68 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5291.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5295.jpg b/training/my_horse2zebra/train_B/n02391049_5295.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a040e9a42eb9a7b80f6b200aa213ba89da45ac2d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5295.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5307.jpg b/training/my_horse2zebra/train_B/n02391049_5307.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28db4fb4348f444b29abe8150a0371d0e2103911 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5307.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_533.jpg b/training/my_horse2zebra/train_B/n02391049_533.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dbbcf818597c9b1c542923e0f72eea4514a506eb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_533.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5333.jpg b/training/my_horse2zebra/train_B/n02391049_5333.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f3700f863a62899b86d48e47311f79a91e10ede Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5333.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5344.jpg b/training/my_horse2zebra/train_B/n02391049_5344.jpg new file mode 100644 index 0000000000000000000000000000000000000000..540ff95d550fdc7833712cdb401f3446b937f761 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5344.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5356.jpg b/training/my_horse2zebra/train_B/n02391049_5356.jpg new file mode 100644 index 0000000000000000000000000000000000000000..625f1351f7d71f5897cb877a82bdc8e12c5cce36 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5356.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_536.jpg b/training/my_horse2zebra/train_B/n02391049_536.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f25b4f0eb25bcd8658b31468cfbfe857f43cfc1c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_536.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5366.jpg b/training/my_horse2zebra/train_B/n02391049_5366.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f88b3242d0e384884f72bd3fb41b9b42eab1df49 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5366.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5367.jpg b/training/my_horse2zebra/train_B/n02391049_5367.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f8f9392b9bb91bf024a5b784a84783868cff0cf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5367.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5371.jpg b/training/my_horse2zebra/train_B/n02391049_5371.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17dc94173f5cf4a00c2bfae109e78405ef2af81b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5371.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_538.jpg b/training/my_horse2zebra/train_B/n02391049_538.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01f307535dc9dc98aaabf2b3598e322abde613d1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_538.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5383.jpg b/training/my_horse2zebra/train_B/n02391049_5383.jpg new file mode 100644 index 0000000000000000000000000000000000000000..222c672a1fa57941933be6244ce1539b2d98ddf7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5383.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_541.jpg b/training/my_horse2zebra/train_B/n02391049_541.jpg new file mode 100644 index 0000000000000000000000000000000000000000..663448fadb99c927e14a4194efd1d4b11f2491e9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_541.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_543.jpg b/training/my_horse2zebra/train_B/n02391049_543.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80012bf29e1187cd99ea7e8d5f9c2093ff8608bd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_543.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_544.jpg b/training/my_horse2zebra/train_B/n02391049_544.jpg new file mode 100644 index 0000000000000000000000000000000000000000..366be3588cf90410fcfe870b4766bf731a21c683 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_544.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5501.jpg b/training/my_horse2zebra/train_B/n02391049_5501.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0cdfa634ae13e28d3728d76f7d92e61f17d0b995 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5501.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5503.jpg b/training/my_horse2zebra/train_B/n02391049_5503.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec29105a6427d51bcdcff6b051a74374e0e0074f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5503.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5509.jpg b/training/my_horse2zebra/train_B/n02391049_5509.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91e6b62f9e3d63581bd20155c2a083954c752b87 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5509.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_551.jpg b/training/my_horse2zebra/train_B/n02391049_551.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7df6744c9b7b5ff88dc6bad7a14bf462e3db154 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_551.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5527.jpg b/training/my_horse2zebra/train_B/n02391049_5527.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b06b0f7d8fb169b6fbb429c946b546d96deb11b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5527.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_554.jpg b/training/my_horse2zebra/train_B/n02391049_554.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b36d48d31e7c68040e5d1861204af1206d10597 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_554.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5547.jpg b/training/my_horse2zebra/train_B/n02391049_5547.jpg new file mode 100644 index 0000000000000000000000000000000000000000..989412830a846e34e85952f0c88fde0e6342223b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5547.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5551.jpg b/training/my_horse2zebra/train_B/n02391049_5551.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7802f551c2d056f6d62f943099b4778768daa0c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5551.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_556.jpg b/training/my_horse2zebra/train_B/n02391049_556.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c80cd9aea6608bc32f90acd0fb17a07aa5e437a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_556.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_557.jpg b/training/my_horse2zebra/train_B/n02391049_557.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3f994e3416bf89a9c47517ba65d3d0da8a433a1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_557.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5586.jpg b/training/my_horse2zebra/train_B/n02391049_5586.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a32f789861f01f9bccda9c3d7f2ee923921bd9b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5586.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5595.jpg b/training/my_horse2zebra/train_B/n02391049_5595.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a021e49bc004cfda6bbc4a12efaab0a12c83e9c1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5595.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_56.jpg b/training/my_horse2zebra/train_B/n02391049_56.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4518bf21dec0988e331f4f848e481e7e486c7e16 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_56.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5618.jpg b/training/my_horse2zebra/train_B/n02391049_5618.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99e8ff13e21ab570a50072bfbfcb1d2cba0f02dc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5618.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5633.jpg b/training/my_horse2zebra/train_B/n02391049_5633.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7a1244f01d2ae92232a031cdc2364ceadb8394a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5633.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5637.jpg b/training/my_horse2zebra/train_B/n02391049_5637.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1319038039e0ef3692e382d5782b915e0f96d73 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5637.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5638.jpg b/training/my_horse2zebra/train_B/n02391049_5638.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97323293ba800d8dd57487d799ea07c42266e9b6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5638.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_565.jpg b/training/my_horse2zebra/train_B/n02391049_565.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07b38fd5b47e97a2deb79564e3b3af412e2dcb83 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_565.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_566.jpg b/training/my_horse2zebra/train_B/n02391049_566.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a0a8549f38eaa25d075e6b8c394aed3151711a5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_566.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5661.jpg b/training/my_horse2zebra/train_B/n02391049_5661.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0898f99b39d77351bc6bdd127616b696b9d364f1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5661.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5679.jpg b/training/my_horse2zebra/train_B/n02391049_5679.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07077d07aad71b9b0d3ca6ebb8ade301a5ef437b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5679.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5695.jpg b/training/my_horse2zebra/train_B/n02391049_5695.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e61daff321f18090d1c4304b554ae47915a18c2f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5695.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5711.jpg b/training/my_horse2zebra/train_B/n02391049_5711.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b49e2106101e1415a65d616e1af6176200b7071 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5711.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5714.jpg b/training/my_horse2zebra/train_B/n02391049_5714.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7698810cc7bc781fafc2e1552ce94d036f9c396d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5714.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5724.jpg b/training/my_horse2zebra/train_B/n02391049_5724.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0d9b8c7b2dde4d7de2f333b3489f8bd6b57aa38 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5724.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_574.jpg b/training/my_horse2zebra/train_B/n02391049_574.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86ce739fbde22e198d272f4b383ecb8b4446289f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_574.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5755.jpg b/training/my_horse2zebra/train_B/n02391049_5755.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12e80c085caf1a83d97138bfb865ce91057b65b7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5755.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_578.jpg b/training/my_horse2zebra/train_B/n02391049_578.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f78fd918a45489694532f5fb10f5f2f319ef38b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_578.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5781.jpg b/training/my_horse2zebra/train_B/n02391049_5781.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecd4babc240a64f242ab9743ef6b63c72478b504 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5781.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5782.jpg b/training/my_horse2zebra/train_B/n02391049_5782.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be8099439e26cf3428f2ac49555d38bb56c97fae Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5782.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5788.jpg b/training/my_horse2zebra/train_B/n02391049_5788.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3226a22312b6e2597b05caf7fd44953bd2d88c4f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5788.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5789.jpg b/training/my_horse2zebra/train_B/n02391049_5789.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb9a541d1cb25c1d8aceb62eba6bfb2a5fbe4919 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5789.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5791.jpg b/training/my_horse2zebra/train_B/n02391049_5791.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e6f9cc27fd71e226a8b4997cf297908bc91e428e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5791.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_58.jpg b/training/my_horse2zebra/train_B/n02391049_58.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8df488510b30e823198b0a22d229e7eed32aed8e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_58.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_584.jpg b/training/my_horse2zebra/train_B/n02391049_584.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28f5b2bcb13e913945ee7e188bdca2612c6dee69 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_584.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5853.jpg b/training/my_horse2zebra/train_B/n02391049_5853.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40a8d1f426bca82098846193740cca37542667d5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5853.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_587.jpg b/training/my_horse2zebra/train_B/n02391049_587.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7f05a83010c1f5f57a742cb993d79fcd0e957dd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_587.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5875.jpg b/training/my_horse2zebra/train_B/n02391049_5875.jpg new file mode 100644 index 0000000000000000000000000000000000000000..409598dde274f7e8005324b2bfed7e8fa47432ed Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5875.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5889.jpg b/training/my_horse2zebra/train_B/n02391049_5889.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ad57f19a6b1717cef2bf53318a78f3751974064 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5889.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_589.jpg b/training/my_horse2zebra/train_B/n02391049_589.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58fb6344b36022e70f29dc87211e3179e56d111d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_589.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5908.jpg b/training/my_horse2zebra/train_B/n02391049_5908.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fac75e0a563066421cc3056fbfd1a4c2722b9ca8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5908.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5909.jpg b/training/my_horse2zebra/train_B/n02391049_5909.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ed7ab9351a5aca15be10e62e47b7725246d35f0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5909.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5924.jpg b/training/my_horse2zebra/train_B/n02391049_5924.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e8cd5e6aac56cdd570d92ffaf0806ff50146c45 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5924.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5947.jpg b/training/my_horse2zebra/train_B/n02391049_5947.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ba52170060395595ad12e63a65f1169c872fb05 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5947.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_596.jpg b/training/my_horse2zebra/train_B/n02391049_596.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea6041c505e76160bcc0007adc7fd80133672b00 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_596.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5982.jpg b/training/my_horse2zebra/train_B/n02391049_5982.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2bbecc85bd5fcadde79424ac1c9d48498169962 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5982.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_5985.jpg b/training/my_horse2zebra/train_B/n02391049_5985.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5840418f81029a67f3acb5ab1499bf9230e05772 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_5985.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_601.jpg b/training/my_horse2zebra/train_B/n02391049_601.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77a1ea40728a00fd39f225c88a0f26fb5aa8b7aa Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_601.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6012.jpg b/training/my_horse2zebra/train_B/n02391049_6012.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1dcb1f14be8e133d89392361240c67953003d8c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6012.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6015.jpg b/training/my_horse2zebra/train_B/n02391049_6015.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a862f61a1749b16cd48be3d6dcb407d8eead3c23 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6015.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_602.jpg b/training/my_horse2zebra/train_B/n02391049_602.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba60085da0c3470b15b2d8cb8a84eb0970b22f2a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_602.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6023.jpg b/training/my_horse2zebra/train_B/n02391049_6023.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0312b4ba7230895d7764b2091d4079587ac84e6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6023.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6026.jpg b/training/my_horse2zebra/train_B/n02391049_6026.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0aa75a3079cb81d22b54200feeffcc8dd357a80 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6026.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_603.jpg b/training/my_horse2zebra/train_B/n02391049_603.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8be9b9d3964499ca77b10527fe17ec07c84ae4a6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_603.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_605.jpg b/training/my_horse2zebra/train_B/n02391049_605.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4df5c07b0494f4202d0cbdba4f249c39106886a2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_605.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6053.jpg b/training/my_horse2zebra/train_B/n02391049_6053.jpg new file mode 100644 index 0000000000000000000000000000000000000000..644d656d6f5fb478786c8c95db5d9ad86d91caf8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6053.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6074.jpg b/training/my_horse2zebra/train_B/n02391049_6074.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02af691dc97eeb43f956730c9b7ef02798277b0f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6074.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_608.jpg b/training/my_horse2zebra/train_B/n02391049_608.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfae8fc63f95495a94983f5b8ebc79de3c9e2349 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_608.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6081.jpg b/training/my_horse2zebra/train_B/n02391049_6081.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a283eb112e89f2bfeff806773c45bc36907522a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6081.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6097.jpg b/training/my_horse2zebra/train_B/n02391049_6097.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab2db8d433230965c73c50672b1102a522dfa8cd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6097.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_611.jpg b/training/my_horse2zebra/train_B/n02391049_611.jpg new file mode 100644 index 0000000000000000000000000000000000000000..411ea287b6746a67eb844110b9652e5b66b4997a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_611.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6121.jpg b/training/my_horse2zebra/train_B/n02391049_6121.jpg new file mode 100644 index 0000000000000000000000000000000000000000..15656e846f326a82bd459484f60b7859cffae319 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6121.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6122.jpg b/training/my_horse2zebra/train_B/n02391049_6122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40b9f3900b3b04964c65a43712d75e31c0ff8a0a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6122.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_614.jpg b/training/my_horse2zebra/train_B/n02391049_614.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1709c6cfdf30dcddc1d4f2f490400c3610b8205b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_614.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6159.jpg b/training/my_horse2zebra/train_B/n02391049_6159.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b78ef80dffb29e308f3c02e20525d67f9871ed0b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6159.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6163.jpg b/training/my_horse2zebra/train_B/n02391049_6163.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4080af1159985c27d73bd599013790dc2bd02093 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6163.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6184.jpg b/training/my_horse2zebra/train_B/n02391049_6184.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64a9721e80c7b54df4cf47cb153622cb11f547bd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6184.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6186.jpg b/training/my_horse2zebra/train_B/n02391049_6186.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b51c84737e670d40c082423a31b94e0b3c281448 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6186.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6198.jpg b/training/my_horse2zebra/train_B/n02391049_6198.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc2822fccd4e192c8b45be2fdd1220e369e54bab Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6198.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6202.jpg b/training/my_horse2zebra/train_B/n02391049_6202.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a27ce3634974ee015ab0bd0ec8174917a41ec19d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6202.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6208.jpg b/training/my_horse2zebra/train_B/n02391049_6208.jpg new file mode 100644 index 0000000000000000000000000000000000000000..176774f434ccefe2197f3cf576e53b6ef76f88ed Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6208.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_621.jpg b/training/my_horse2zebra/train_B/n02391049_621.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e115608c844040181f771523c9723273a67314e8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_621.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6216.jpg b/training/my_horse2zebra/train_B/n02391049_6216.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33c5140213711229d2f9fdbced414315bb7bc046 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6216.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6227.jpg b/training/my_horse2zebra/train_B/n02391049_6227.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90560d8cae183ce5bbb2566f70f55951a38c0076 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6227.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6236.jpg b/training/my_horse2zebra/train_B/n02391049_6236.jpg new file mode 100644 index 0000000000000000000000000000000000000000..854acb10aa4a8fa5ec39647ae1ef7324c9905d16 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6236.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6245.jpg b/training/my_horse2zebra/train_B/n02391049_6245.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f62d70d46e0402575daf5a7fe55ff231c6c9fe8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6245.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_626.jpg b/training/my_horse2zebra/train_B/n02391049_626.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f7e827b019329941d4478c2c97f7ea85de83ced Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_626.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6267.jpg b/training/my_horse2zebra/train_B/n02391049_6267.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4833ed86c69531a3d168808f8613fcaac709725e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6267.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_627.jpg b/training/my_horse2zebra/train_B/n02391049_627.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e37ade87c9504e0cbfd9ab053e3b17f1470cb9d8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_627.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_628.jpg b/training/my_horse2zebra/train_B/n02391049_628.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8dc31b8dfe54957aaaaae000f2ce7bf0f139e78 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_628.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_629.jpg b/training/my_horse2zebra/train_B/n02391049_629.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e5203a617bac4452861faf233fc32d22c6ccb12 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_629.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6293.jpg b/training/my_horse2zebra/train_B/n02391049_6293.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5862f22d801f469e174195437323a528822dae79 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6293.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_63.jpg b/training/my_horse2zebra/train_B/n02391049_63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0109f5ffb1ee2e4546857ba5cadb290fd0e3c52 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_63.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6317.jpg b/training/my_horse2zebra/train_B/n02391049_6317.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5edeb1a99ea999995a79589fee83548f7ddfa325 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6317.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6326.jpg b/training/my_horse2zebra/train_B/n02391049_6326.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64ac5b0a293985a3a3aa5efe40bf4c23deb8de7e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6326.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_633.jpg b/training/my_horse2zebra/train_B/n02391049_633.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97b09cf9a8eb12cb833f5c38edf200d45ea8a62e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_633.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6336.jpg b/training/my_horse2zebra/train_B/n02391049_6336.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aeb63a5ca97967bf81277780262b115325c2ca43 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6336.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_635.jpg b/training/my_horse2zebra/train_B/n02391049_635.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7acfcd05e65330daafc2074ef5a282186d86220 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_635.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6359.jpg b/training/my_horse2zebra/train_B/n02391049_6359.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bbd37defa488d58a4671993fd3db07c63da331f9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6359.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6374.jpg b/training/my_horse2zebra/train_B/n02391049_6374.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec1536f3d510d72fbf81b1b7562fb8f789b9b7b4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6374.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6378.jpg b/training/my_horse2zebra/train_B/n02391049_6378.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c676d604eeb9baf231aee5c461ff31de993e370 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6378.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_638.jpg b/training/my_horse2zebra/train_B/n02391049_638.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c3dc7c68558e0d403803805343911fb2d8b4bed Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_638.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6385.jpg b/training/my_horse2zebra/train_B/n02391049_6385.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e244c2f7451abc756c5f024880177cfda26fed6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6385.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6386.jpg b/training/my_horse2zebra/train_B/n02391049_6386.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00bce473589f74b73c8f1cc1b43c4fa6ae49c624 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6386.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_639.jpg b/training/my_horse2zebra/train_B/n02391049_639.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cc9296be4e1821168e43f1149a1bfd485239776 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_639.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6396.jpg b/training/my_horse2zebra/train_B/n02391049_6396.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e125b74859a3c39bcccb97a9c324417ca678bbb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6396.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6413.jpg b/training/my_horse2zebra/train_B/n02391049_6413.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a47cd767b95312a01c2f535fb3e134db494eef41 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6413.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_642.jpg b/training/my_horse2zebra/train_B/n02391049_642.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01e74c39550535b65ea56272037c5fb538b8afcd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_642.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6421.jpg b/training/my_horse2zebra/train_B/n02391049_6421.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e6d478b5d286d4c8c36a8b559bbeeef4ea59112 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6421.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_643.jpg b/training/my_horse2zebra/train_B/n02391049_643.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb817b943306db56573d4ae6149087e951ddc1b3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_643.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6436.jpg b/training/my_horse2zebra/train_B/n02391049_6436.jpg new file mode 100644 index 0000000000000000000000000000000000000000..500b2005d8ee50158c99fcdf47ab356be4426f5a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6436.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_644.jpg b/training/my_horse2zebra/train_B/n02391049_644.jpg new file mode 100644 index 0000000000000000000000000000000000000000..886a24aed84e18eac8d73b9b4ac1b451e41c74af Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_644.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6444.jpg b/training/my_horse2zebra/train_B/n02391049_6444.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3cce0291f83bec267793cd39e9d4015fb3ad8d77 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6444.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6452.jpg b/training/my_horse2zebra/train_B/n02391049_6452.jpg new file mode 100644 index 0000000000000000000000000000000000000000..245cc05beb82b6e89f15163cd2ab715bfcec64a4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6452.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_646.jpg b/training/my_horse2zebra/train_B/n02391049_646.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73b8d1526095fefac9a79a04644b46a6d166794e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_646.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6465.jpg b/training/my_horse2zebra/train_B/n02391049_6465.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f924f82dd4fb8db92e8031bd2850892df8b6840a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6465.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6467.jpg b/training/my_horse2zebra/train_B/n02391049_6467.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7f993527d55e14ebdf941a1385043380a814db7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6467.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6469.jpg b/training/my_horse2zebra/train_B/n02391049_6469.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a453df500f28c4606eb696e5abd7c0356596684f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6469.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6471.jpg b/training/my_horse2zebra/train_B/n02391049_6471.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff06cc7b38a8a6e41bdadacba1598c0cdcd1a0ec Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6471.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6475.jpg b/training/my_horse2zebra/train_B/n02391049_6475.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7730246ecd6d8e0e8b001491bdbd0ac368a3af1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6475.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6487.jpg b/training/my_horse2zebra/train_B/n02391049_6487.jpg new file mode 100644 index 0000000000000000000000000000000000000000..59dfddc2b2f303db99c27f715a692062654e7b9d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6487.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6503.jpg b/training/my_horse2zebra/train_B/n02391049_6503.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d76229502c7dfda1256db18c81999c7336d0f60 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6503.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6511.jpg b/training/my_horse2zebra/train_B/n02391049_6511.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50a8bdddf3641745cded1c75df0916fe1f285946 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6511.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6512.jpg b/training/my_horse2zebra/train_B/n02391049_6512.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf1726573ee7ae4400a1cf85bee076d6511b25bc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6512.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6517.jpg b/training/my_horse2zebra/train_B/n02391049_6517.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3214a540c5cc1539825797a9bbf054822b6aed6b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6517.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6524.jpg b/training/my_horse2zebra/train_B/n02391049_6524.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8423953dd339c3ec418aceca4231c72f59de93ba Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6524.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6546.jpg b/training/my_horse2zebra/train_B/n02391049_6546.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17bc647f59e4be44c762d93ba80506ba84d58751 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6546.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6561.jpg b/training/my_horse2zebra/train_B/n02391049_6561.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc92973236a71706776f708ae1a50deb2a4942fb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6561.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6564.jpg b/training/my_horse2zebra/train_B/n02391049_6564.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a7a0d694db1a89c871719a67dc456f9e229d8b53 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6564.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6565.jpg b/training/my_horse2zebra/train_B/n02391049_6565.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f7447188d5b86ef77c6cb1d3d34f557c6d59146e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6565.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6582.jpg b/training/my_horse2zebra/train_B/n02391049_6582.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4822941ee3c632290b2c1c5bc24b364cf25af7b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6582.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_659.jpg b/training/my_horse2zebra/train_B/n02391049_659.jpg new file mode 100644 index 0000000000000000000000000000000000000000..262356fad45060a77b5cdfb1be9e3fdb3381d6b7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_659.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6609.jpg b/training/my_horse2zebra/train_B/n02391049_6609.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3dacfa3b7af3792d962aed606367169437d2b7da Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6609.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6622.jpg b/training/my_horse2zebra/train_B/n02391049_6622.jpg new file mode 100644 index 0000000000000000000000000000000000000000..365a93082a5123fc92dbd708fb519aae66c806f7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6622.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6629.jpg b/training/my_horse2zebra/train_B/n02391049_6629.jpg new file mode 100644 index 0000000000000000000000000000000000000000..534f45bf4743f6258a7ae47d63f9597c7a8183d9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6629.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6631.jpg b/training/my_horse2zebra/train_B/n02391049_6631.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f94de009d5d471895eb372ec8907bbc0a9fc213 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6631.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6655.jpg b/training/my_horse2zebra/train_B/n02391049_6655.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f10f6b9a94fc5d472622a306ede3c18387277206 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6655.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6664.jpg b/training/my_horse2zebra/train_B/n02391049_6664.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e0278e06315c2caed232901e1cf0bf5645ff479 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6664.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6683.jpg b/training/my_horse2zebra/train_B/n02391049_6683.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3c8125efca75b0122e3e2dd09845e1327ce5b6b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6683.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_671.jpg b/training/my_horse2zebra/train_B/n02391049_671.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ce6ebab90060123b88d6d9db6af72d3a779aaf0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_671.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6735.jpg b/training/my_horse2zebra/train_B/n02391049_6735.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4716ee8c58fc119ff740780306bd366bcf75eeb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6735.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_675.jpg b/training/my_horse2zebra/train_B/n02391049_675.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c95bb06dc08b52aad38b921f1896be998876997 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_675.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6757.jpg b/training/my_horse2zebra/train_B/n02391049_6757.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c72e2b7bc6c30229acee721efe5a63eedbcdf9cb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6757.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_676.jpg b/training/my_horse2zebra/train_B/n02391049_676.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f499edba1f22d5cce61c331dcb51173041ca93d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_676.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6762.jpg b/training/my_horse2zebra/train_B/n02391049_6762.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83cd77f49d161e6bc25e3ebef18c3c0aff2cb1d3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6762.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6775.jpg b/training/my_horse2zebra/train_B/n02391049_6775.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5693f8d1467cd8237adbe6a5b4def69892c20a53 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6775.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6804.jpg b/training/my_horse2zebra/train_B/n02391049_6804.jpg new file mode 100644 index 0000000000000000000000000000000000000000..713723a4e4fd6270308d8da9aa2283a39e431752 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6804.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6818.jpg b/training/my_horse2zebra/train_B/n02391049_6818.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f1c143e11c2ffe8c5d8bf8346c2ca00e02c207c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6818.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_682.jpg b/training/my_horse2zebra/train_B/n02391049_682.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0c39a23c3bf6f3736e51b8c705aebe99f51f89a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_682.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6834.jpg b/training/my_horse2zebra/train_B/n02391049_6834.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8178f57c460a77c9b5d6be0c4c0a37eee8243ec Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6834.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_685.jpg b/training/my_horse2zebra/train_B/n02391049_685.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbf4b34515754a830bee070c767b6475d1fb429a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_685.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6856.jpg b/training/my_horse2zebra/train_B/n02391049_6856.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9debbb03d02b49fed0aeee731cf7e48c99ce616f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6856.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_686.jpg b/training/my_horse2zebra/train_B/n02391049_686.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e953d340b759f477d171bff2c2e758f12fb91b4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_686.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6866.jpg b/training/my_horse2zebra/train_B/n02391049_6866.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c68c418362b9f43e59291b5f5ea3d2f125cf4384 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6866.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6902.jpg b/training/my_horse2zebra/train_B/n02391049_6902.jpg new file mode 100644 index 0000000000000000000000000000000000000000..640416f0dfcd53c783b7511f9e241a288c8c4ea0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6902.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6918.jpg b/training/my_horse2zebra/train_B/n02391049_6918.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b628c867a685936dcc12a3fdf0f322050711656 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6918.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6919.jpg b/training/my_horse2zebra/train_B/n02391049_6919.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24907774e8e517b67ed94a47a66ebd8b2fb73b53 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6919.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6922.jpg b/training/my_horse2zebra/train_B/n02391049_6922.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd9813fa541b8fa976bafad937bc6a8e1b8ce932 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6922.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6935.jpg b/training/my_horse2zebra/train_B/n02391049_6935.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af80f59f35811a1a25f350237971b6a8240f56cd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6935.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6942.jpg b/training/my_horse2zebra/train_B/n02391049_6942.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90da30d56e2d4fc2b608464c768cf0ed12126d3c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6942.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6947.jpg b/training/my_horse2zebra/train_B/n02391049_6947.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a97a1f190e60e365078ac75504674f2e32045c8d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6947.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_695.jpg b/training/my_horse2zebra/train_B/n02391049_695.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9726c8b6d43ec2819d0975cd130001f3ef7446ce Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_695.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6951.jpg b/training/my_horse2zebra/train_B/n02391049_6951.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50c627ff5eb5cbac1c1c37c39fd573809be21ee2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6951.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6957.jpg b/training/my_horse2zebra/train_B/n02391049_6957.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c99a4fc54fb6804651d2eb0850c86e45162cb852 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6957.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6962.jpg b/training/my_horse2zebra/train_B/n02391049_6962.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d317bc91f1ecea6384565b3694f5e65dab705ad1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6962.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6987.jpg b/training/my_horse2zebra/train_B/n02391049_6987.jpg new file mode 100644 index 0000000000000000000000000000000000000000..012cce880deb8531ba7f0e2581da883926d381f0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6987.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_699.jpg b/training/my_horse2zebra/train_B/n02391049_699.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0cbb32e7355381e429e0a5005d6a28b2dd533c11 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_699.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6991.jpg b/training/my_horse2zebra/train_B/n02391049_6991.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c89f60e42600c399e6d3d0b0ec80c2fbd3f9294 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6991.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_6993.jpg b/training/my_horse2zebra/train_B/n02391049_6993.jpg new file mode 100644 index 0000000000000000000000000000000000000000..212637079127e162cb9abb5ace10877edab384bb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_6993.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7.jpg b/training/my_horse2zebra/train_B/n02391049_7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5862b64dea4a83c35c8314287ca2e32487ca66f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7018.jpg b/training/my_horse2zebra/train_B/n02391049_7018.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26470a551ea3740f6fc096754716a420d69173d2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7018.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7038.jpg b/training/my_horse2zebra/train_B/n02391049_7038.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d45f20178065533ecf0d1f4def47c0e1cfb942c6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7038.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_704.jpg b/training/my_horse2zebra/train_B/n02391049_704.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e684c9fe6634fee4372b9688126d50112c9c8296 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_704.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7048.jpg b/training/my_horse2zebra/train_B/n02391049_7048.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0bb779ea2f2e5e63c996accd1f256514b053c92 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7048.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7062.jpg b/training/my_horse2zebra/train_B/n02391049_7062.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93a0d74739a0e63d6a5edd052e3b564555de7c70 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7062.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_707.jpg b/training/my_horse2zebra/train_B/n02391049_707.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d94426eee730c0698e6fa777ef1488c1909b0dee Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_707.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7071.jpg b/training/my_horse2zebra/train_B/n02391049_7071.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03476bd2cf0a7757d67b29a95828eed8a45766e2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7071.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7074.jpg b/training/my_horse2zebra/train_B/n02391049_7074.jpg new file mode 100644 index 0000000000000000000000000000000000000000..803d49edcd9f12656595193ec1f4fc44ec684c70 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7074.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7077.jpg b/training/my_horse2zebra/train_B/n02391049_7077.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61ceb89b97457f41d90deab5f5b5c2df47dcb7cb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7077.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7096.jpg b/training/my_horse2zebra/train_B/n02391049_7096.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dcec59d3d9f7076f0ad7754e00e8181e9324a87e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7096.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_71.jpg b/training/my_horse2zebra/train_B/n02391049_71.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4aa90ef497dffda0a7777a99f718c88740cd83ff Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_71.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7105.jpg b/training/my_horse2zebra/train_B/n02391049_7105.jpg new file mode 100644 index 0000000000000000000000000000000000000000..747a28d3b3a2e24c4a4151f22db1c2bb51c53a1f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7105.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_711.jpg b/training/my_horse2zebra/train_B/n02391049_711.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2907010044cf2d0e2defed1783ad2ab4e8c605a5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_711.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7115.jpg b/training/my_horse2zebra/train_B/n02391049_7115.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5e127fcf43e42331bc94d6cc83daf12ee4a6fbf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7115.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_712.jpg b/training/my_horse2zebra/train_B/n02391049_712.jpg new file mode 100644 index 0000000000000000000000000000000000000000..351236d8f3bbb334cb56462ef7d2f8b514b5a75a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_712.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_713.jpg b/training/my_horse2zebra/train_B/n02391049_713.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d10428c54c2d7d184bfe9186e656f10502b5a04 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_713.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_715.jpg b/training/my_horse2zebra/train_B/n02391049_715.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d6ebc1c2a447ddbe19eda6bb2f5b39c35e44e35 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_715.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7151.jpg b/training/my_horse2zebra/train_B/n02391049_7151.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0039db8304765a3c069985f26ebf935a168c2f36 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7151.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7169.jpg b/training/my_horse2zebra/train_B/n02391049_7169.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec9a635138bc9b00e757d63c28823674f7de0c91 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7169.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_717.jpg b/training/my_horse2zebra/train_B/n02391049_717.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aaf00b114d4fc51ed0fa945b306234ffd28e6b84 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_717.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_718.jpg b/training/my_horse2zebra/train_B/n02391049_718.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4276b85dfb6528a3601aca81060da2a0a5bdae8f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_718.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7188.jpg b/training/my_horse2zebra/train_B/n02391049_7188.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65e65959353a467cbafc726e6e59adb9caa0142a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7188.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_719.jpg b/training/my_horse2zebra/train_B/n02391049_719.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb361cd053cb3f8c118ef91442af100d2c9a9d67 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_719.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7205.jpg b/training/my_horse2zebra/train_B/n02391049_7205.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18e8fa0f01370d9b307f08c9d4cde59c9b6927b3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7205.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_721.jpg b/training/my_horse2zebra/train_B/n02391049_721.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9af15332af379a9f18c79e758ebddb0fc113ea0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_721.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7236.jpg b/training/my_horse2zebra/train_B/n02391049_7236.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02f0b5cbb944ffdef97ec34ee5597fd0040df62d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7236.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_725.jpg b/training/my_horse2zebra/train_B/n02391049_725.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e909201a698f15feb895fe0bb64f6e70591ad6be Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_725.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7258.jpg b/training/my_horse2zebra/train_B/n02391049_7258.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8d2c1f56e21f6c1627085c36bc12d07823dd10e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7258.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7261.jpg b/training/my_horse2zebra/train_B/n02391049_7261.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbcc86c5825c5d488912138f9c59b3ed4d2e3d4e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7261.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7263.jpg b/training/my_horse2zebra/train_B/n02391049_7263.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38c46f4c10992d6a2734e4a1be05288ab9440534 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7263.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7306.jpg b/training/my_horse2zebra/train_B/n02391049_7306.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b2e5a2b880eccd399790399aa4d4a90216ea1c0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7306.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7318.jpg b/training/my_horse2zebra/train_B/n02391049_7318.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fe2d65576430422285fc6bef399a0959a92420d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7318.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7319.jpg b/training/my_horse2zebra/train_B/n02391049_7319.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee4a22ee4c7c04077c835ffac6e4c186d84b5624 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7319.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7324.jpg b/training/my_horse2zebra/train_B/n02391049_7324.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2eac87df09dd248928a86d7446b90d3687d32b02 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7324.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_733.jpg b/training/my_horse2zebra/train_B/n02391049_733.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47c7885356e8fafb127af448d663b57ae58bb5d5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_733.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_734.jpg b/training/my_horse2zebra/train_B/n02391049_734.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1f50ea006a5b564c43cfad562d76b702d947b8e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_734.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7344.jpg b/training/my_horse2zebra/train_B/n02391049_7344.jpg new file mode 100644 index 0000000000000000000000000000000000000000..889cb4446e94c1ef550f37ab4981f6777d3aa604 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7344.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7364.jpg b/training/my_horse2zebra/train_B/n02391049_7364.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f925f3792668c2aed1c3c12228c6ecf9b270c9e3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7364.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7368.jpg b/training/my_horse2zebra/train_B/n02391049_7368.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9c88c77ec4fffe777a0dcf1b3b160f698b110f8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7368.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_737.jpg b/training/my_horse2zebra/train_B/n02391049_737.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eef35d5b955548a876893b4669911c2d19fdcae2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_737.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7378.jpg b/training/my_horse2zebra/train_B/n02391049_7378.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e522d2e98de909cb2c9d88879491e7f550b93308 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7378.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_738.jpg b/training/my_horse2zebra/train_B/n02391049_738.jpg new file mode 100644 index 0000000000000000000000000000000000000000..325a0c6e98f12a9df75f1dc28a06ddcbf13f4179 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_738.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7396.jpg b/training/my_horse2zebra/train_B/n02391049_7396.jpg new file mode 100644 index 0000000000000000000000000000000000000000..583e52cba825dc7b2300ba0967379230b1de1e05 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7396.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7398.jpg b/training/my_horse2zebra/train_B/n02391049_7398.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc09ea48d428afa2985aed7bd227b9c93f4126dd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7398.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_74.jpg b/training/my_horse2zebra/train_B/n02391049_74.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c09e242ebf27f0a03096fe88a103d8bf715535fb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_74.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7407.jpg b/training/my_horse2zebra/train_B/n02391049_7407.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a66028d176e97d54bd8ea87dea264187a30b89b6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7407.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7409.jpg b/training/my_horse2zebra/train_B/n02391049_7409.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a6ab60563d407b68f8da645fe9c5b056dacdc85 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7409.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7416.jpg b/training/my_horse2zebra/train_B/n02391049_7416.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2058f20fae30f972bd4d4ca9a8d4d196521d73e2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7416.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7418.jpg b/training/my_horse2zebra/train_B/n02391049_7418.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca150e588178dbf731b0fe168351d4859e109721 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7418.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_743.jpg b/training/my_horse2zebra/train_B/n02391049_743.jpg new file mode 100644 index 0000000000000000000000000000000000000000..acc599715789ac1f87ec3a9fb89f19549ea40fd3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_743.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7434.jpg b/training/my_horse2zebra/train_B/n02391049_7434.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc43a100870599e37acd296a9179f68ccccb3b1c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7434.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_744.jpg b/training/my_horse2zebra/train_B/n02391049_744.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9fa9cb5bb1c56f153d85f4ef608dd3e1c4bcb96f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_744.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_745.jpg b/training/my_horse2zebra/train_B/n02391049_745.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9c2483752af080b87580ac47987b10b59aa4c16 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_745.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7457.jpg b/training/my_horse2zebra/train_B/n02391049_7457.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7234f86fbb7b1d327780f2b423fe8f3c0fced5b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7457.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7466.jpg b/training/my_horse2zebra/train_B/n02391049_7466.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51cfeb09b686411ad060a9a93e25da0ad4ec7e91 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7466.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7487.jpg b/training/my_horse2zebra/train_B/n02391049_7487.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f082618db6de7361625bff349cf562fa3d539dd6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7487.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7494.jpg b/training/my_horse2zebra/train_B/n02391049_7494.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a8b6fb87979c4d1d14cdbb939eaa2124d8caa05 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7494.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7503.jpg b/training/my_horse2zebra/train_B/n02391049_7503.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1362ae32d277b833437f600da2f47a93e80854a9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7503.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7512.jpg b/training/my_horse2zebra/train_B/n02391049_7512.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86ba30d483a50699782ad7d29bdce60c6907dff2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7512.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_752.jpg b/training/my_horse2zebra/train_B/n02391049_752.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88137ade07b30e013bb1068af15f04eab7508fa2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_752.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7521.jpg b/training/my_horse2zebra/train_B/n02391049_7521.jpg new file mode 100644 index 0000000000000000000000000000000000000000..194796bb2fd80770164ffb948f1e59c84aae0dcb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7521.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7557.jpg b/training/my_horse2zebra/train_B/n02391049_7557.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f5034b26cfb37bda0d5f580114d684f96ebdce7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7557.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7563.jpg b/training/my_horse2zebra/train_B/n02391049_7563.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb2ad12b67ccf4caf84941a3652bf19760275274 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7563.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7566.jpg b/training/my_horse2zebra/train_B/n02391049_7566.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95cdab9927a744a07ba6a9109209fa2907b05a83 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7566.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7567.jpg b/training/my_horse2zebra/train_B/n02391049_7567.jpg new file mode 100644 index 0000000000000000000000000000000000000000..06b01a37910019fcba66646ff9cf735b9bd125a5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7567.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_757.jpg b/training/my_horse2zebra/train_B/n02391049_757.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0693b4afde8aab989e123306064ffd5572d9b90e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_757.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7581.jpg b/training/my_horse2zebra/train_B/n02391049_7581.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ef0ea0875f3b06a21592ad63f3aff234bfd6dae Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7581.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7584.jpg b/training/my_horse2zebra/train_B/n02391049_7584.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7aa7091a83e1c4ca18bdf50a530ecbc1c4194b72 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7584.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7589.jpg b/training/my_horse2zebra/train_B/n02391049_7589.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92f9b395b80c15d52a048e6e9d8ebd679a834c15 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7589.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7599.jpg b/training/my_horse2zebra/train_B/n02391049_7599.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ae297524acb51d6bafb476c8e6de9470fe5613c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7599.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_764.jpg b/training/my_horse2zebra/train_B/n02391049_764.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80386679083e531b6e0f55de98dfb57a6fd35ddd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_764.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7645.jpg b/training/my_horse2zebra/train_B/n02391049_7645.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19dedd8097a4bbeae33ec5b1b52dac26cd62902c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7645.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7648.jpg b/training/my_horse2zebra/train_B/n02391049_7648.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b910b8435e4619ef85990d9cbd625cb5b1aa450e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7648.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7668.jpg b/training/my_horse2zebra/train_B/n02391049_7668.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12a96071b28356cd893db288c5675cc9a8fe1121 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7668.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7678.jpg b/training/my_horse2zebra/train_B/n02391049_7678.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddfb5c38f2f4e4c127f972018878b67ae1100771 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7678.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7683.jpg b/training/my_horse2zebra/train_B/n02391049_7683.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfa385065ec2e1caf285a3228f01702e9d556034 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7683.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_77.jpg b/training/my_horse2zebra/train_B/n02391049_77.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90fdad834b96ac58bc825637d1eaa5c6aaf69ef9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_77.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7721.jpg b/training/my_horse2zebra/train_B/n02391049_7721.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ed707d1e0f48a3d69acf3a8d175d70f98a54f82 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7721.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7722.jpg b/training/my_horse2zebra/train_B/n02391049_7722.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a3e03c7f1dd649500425ceee8669cc891d5546e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7722.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_773.jpg b/training/my_horse2zebra/train_B/n02391049_773.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e6fcb1c9442403d6733f776ef79a4696a5d92fb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_773.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_775.jpg b/training/my_horse2zebra/train_B/n02391049_775.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a0026d25880e7129d41907b66fef0baca239ebb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_775.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_776.jpg b/training/my_horse2zebra/train_B/n02391049_776.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11b3be48d8d8c71d83fb41822a6e139f83c243c9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_776.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7779.jpg b/training/my_horse2zebra/train_B/n02391049_7779.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aebf3462ac7b6f343520da34980b1283c89956da Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7779.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7812.jpg b/training/my_horse2zebra/train_B/n02391049_7812.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d40be42a998807c359a7efe0708d87704123282 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7812.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7832.jpg b/training/my_horse2zebra/train_B/n02391049_7832.jpg new file mode 100644 index 0000000000000000000000000000000000000000..edff6adc439b64bf8d39bdbc8982347990304b34 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7832.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7836.jpg b/training/my_horse2zebra/train_B/n02391049_7836.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23086877c7c577b0a88734cb02eb22de8fcef89d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7836.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7839.jpg b/training/my_horse2zebra/train_B/n02391049_7839.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f210005ecfa4f093caafc98ea9b6924e98fc7984 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7839.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7847.jpg b/training/my_horse2zebra/train_B/n02391049_7847.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80944d71067c19c4aaba529084dc90657832754a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7847.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7848.jpg b/training/my_horse2zebra/train_B/n02391049_7848.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5dc273c15876f79b445b177fa2709814f3ff0be0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7848.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7851.jpg b/training/my_horse2zebra/train_B/n02391049_7851.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e52b55ec68a3111e75351a23a1fdcbbbceede0b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7851.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_786.jpg b/training/my_horse2zebra/train_B/n02391049_786.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d760940669becb9bfa50ca1129a113e7090db359 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_786.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_787.jpg b/training/my_horse2zebra/train_B/n02391049_787.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05755612891528ad60a4f15ef2da8b05cb05ac5f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_787.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_788.jpg b/training/my_horse2zebra/train_B/n02391049_788.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7fc6575b6e747c455e2c77202b23f3488fa37f5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_788.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7886.jpg b/training/my_horse2zebra/train_B/n02391049_7886.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f58c97834a77dee514bedb8130bcd0f9e582bc66 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7886.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_789.jpg b/training/my_horse2zebra/train_B/n02391049_789.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2b204e09d392882304b0d6a11d3c995f3059c10 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_789.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_79.jpg b/training/my_horse2zebra/train_B/n02391049_79.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b840c60d74205c1320c495f8e849bade53b1448 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_79.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7911.jpg b/training/my_horse2zebra/train_B/n02391049_7911.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddf1e3fd73dfea9eb6ef827643829ac78d5f27d3 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7911.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7919.jpg b/training/my_horse2zebra/train_B/n02391049_7919.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5fb2be4eb8c980c11bb975640c83e02bc99ce77 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7919.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7927.jpg b/training/my_horse2zebra/train_B/n02391049_7927.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd1661782b4f2bb15c84d38c2874801fc3f8b90e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7927.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7949.jpg b/training/my_horse2zebra/train_B/n02391049_7949.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de6cf3e29c7d8d529e5e2e9517a9771a1df08365 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7949.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_795.jpg b/training/my_horse2zebra/train_B/n02391049_795.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35fcb2c6d5843792e0bb887c48874b011e56e754 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_795.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_796.jpg b/training/my_horse2zebra/train_B/n02391049_796.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8560345d533881201e0364dda244c126699c4ebf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_796.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7972.jpg b/training/my_horse2zebra/train_B/n02391049_7972.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bbfb828cd66e31b77f9f439c0ec68cf0eb0ca372 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7972.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_7979.jpg b/training/my_horse2zebra/train_B/n02391049_7979.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28caa2e4d942e79d28958450c83640cc27f237d9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_7979.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8008.jpg b/training/my_horse2zebra/train_B/n02391049_8008.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffc8635a860ed0d017408632d30d2d98a7ea4876 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8008.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8015.jpg b/training/my_horse2zebra/train_B/n02391049_8015.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d737e6fa87e45641cd6e4e641755484534b2e3f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8015.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8021.jpg b/training/my_horse2zebra/train_B/n02391049_8021.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd65714cea46d5f4161d1dd16720c2b3460572cb Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8021.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8028.jpg b/training/my_horse2zebra/train_B/n02391049_8028.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd0f4c6b86c334a2b3eb86f0f230f11e78843316 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8028.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8032.jpg b/training/my_horse2zebra/train_B/n02391049_8032.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95cef3da5414baa70216deecd8d6a469671b8b63 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8032.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8059.jpg b/training/my_horse2zebra/train_B/n02391049_8059.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aadb4b46cf219538bb05965e94388f8dbfc66f31 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8059.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8061.jpg b/training/my_horse2zebra/train_B/n02391049_8061.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c573abd89e7a1bc5a8069714f15b20d8f620aac Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8061.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8075.jpg b/training/my_horse2zebra/train_B/n02391049_8075.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5ae03571bc1e453d2f854393597bf4890ead086 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8075.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_808.jpg b/training/my_horse2zebra/train_B/n02391049_808.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67c3334dda39527e03fb4604c9a8922efa998630 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_808.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_809.jpg b/training/my_horse2zebra/train_B/n02391049_809.jpg new file mode 100644 index 0000000000000000000000000000000000000000..321806c7ff33c03bcea054a2567f587d14b2c46c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_809.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8102.jpg b/training/my_horse2zebra/train_B/n02391049_8102.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36bc4dbf9de94ab230651c3c9070a7ded5b6a5cc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8102.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_812.jpg b/training/my_horse2zebra/train_B/n02391049_812.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8aedd4116ddd0a8f74278e9ac691f49c162bd4cd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_812.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8148.jpg b/training/my_horse2zebra/train_B/n02391049_8148.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d125270bbb60307096e546e5a11453e6e96ce372 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8148.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8149.jpg b/training/my_horse2zebra/train_B/n02391049_8149.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b817fd10596bb7b3dafafdb3c29b9eeafd26d2c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8149.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8158.jpg b/training/my_horse2zebra/train_B/n02391049_8158.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35521b7d033d88dc8bad653602e576d84f4443c7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8158.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_817.jpg b/training/my_horse2zebra/train_B/n02391049_817.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cdbff2fd8060ae3e70c77492d82316ead1970c6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_817.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8178.jpg b/training/my_horse2zebra/train_B/n02391049_8178.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e516e2627510d00fcad55127ba6da9c67b10408 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8178.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8182.jpg b/training/my_horse2zebra/train_B/n02391049_8182.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dbe60dcb668830b09e804ea8d530fbdc071ce584 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8182.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8192.jpg b/training/my_horse2zebra/train_B/n02391049_8192.jpg new file mode 100644 index 0000000000000000000000000000000000000000..71190603f3f14e43951038f91dafeff1902b1d8a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8192.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8201.jpg b/training/my_horse2zebra/train_B/n02391049_8201.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08ecb644d793255b833adff2422a15283c5dfd90 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8201.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8209.jpg b/training/my_horse2zebra/train_B/n02391049_8209.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f83bad79547273103394905c4c60ea732a17c51 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8209.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8214.jpg b/training/my_horse2zebra/train_B/n02391049_8214.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2fa9c80a5e689ec16097a28757e6a36f6768aa9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8214.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_824.jpg b/training/my_horse2zebra/train_B/n02391049_824.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3dda0e5dc81cf8d9edc42890835b88b67764de75 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_824.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_826.jpg b/training/my_horse2zebra/train_B/n02391049_826.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ef9d6eeabe96bcd7a4b8f788abf6983fc24829d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_826.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8266.jpg b/training/my_horse2zebra/train_B/n02391049_8266.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f15ebeea978f8dcae1dba5504d166980c158100 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8266.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8288.jpg b/training/my_horse2zebra/train_B/n02391049_8288.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0bb19409a42b4226177b2acfe3d2b3f9500b96a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8288.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8291.jpg b/training/my_horse2zebra/train_B/n02391049_8291.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de2311a2745ff8249eaf81a8b8f3dc54031a45af Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8291.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8301.jpg b/training/my_horse2zebra/train_B/n02391049_8301.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a683da16e9339e09487bf7182da8f87627d3231 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8301.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8321.jpg b/training/my_horse2zebra/train_B/n02391049_8321.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d985381a523e8be65320174ca34666864a05c169 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8321.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8334.jpg b/training/my_horse2zebra/train_B/n02391049_8334.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7c3158a79872ee5fa4fade3c6efc971a8311190 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8334.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_834.jpg b/training/my_horse2zebra/train_B/n02391049_834.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11cd39f5833810dd63ec9c88567dbd4b582874b1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_834.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8347.jpg b/training/my_horse2zebra/train_B/n02391049_8347.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95d06bed3d22802d7fa73822c8a8695015694923 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8347.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_835.jpg b/training/my_horse2zebra/train_B/n02391049_835.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e819a7410a2fee9762a3311f13c30ecc9ce577cd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_835.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8373.jpg b/training/my_horse2zebra/train_B/n02391049_8373.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd7d68c81522e7d81cf5ebdef27a2003fda12770 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8373.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8387.jpg b/training/my_horse2zebra/train_B/n02391049_8387.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92bb14da4d06cb73d268d976b1ab985d58d10249 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8387.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_839.jpg b/training/my_horse2zebra/train_B/n02391049_839.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6765d5b78cbad915500fe14f3da993775143d080 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_839.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8394.jpg b/training/my_horse2zebra/train_B/n02391049_8394.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c0eac4bd0ffd79f86de74cb0eb06d44fb3dd9fa Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8394.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_841.jpg b/training/my_horse2zebra/train_B/n02391049_841.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d4f6cd7024c3b961d4e91e9960c175801874e0c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_841.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8425.jpg b/training/my_horse2zebra/train_B/n02391049_8425.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66e90c1197ad1bfa8e7355585073a27d6ef5e4a9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8425.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8444.jpg b/training/my_horse2zebra/train_B/n02391049_8444.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1a2917339ce21a6194c2762dda1b591bfb2e2cf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8444.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8445.jpg b/training/my_horse2zebra/train_B/n02391049_8445.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a17770d4ffb3a778e56796a09110d1820a170b9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8445.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8447.jpg b/training/my_horse2zebra/train_B/n02391049_8447.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a0a8549f38eaa25d075e6b8c394aed3151711a5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8447.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_847.jpg b/training/my_horse2zebra/train_B/n02391049_847.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58a10c7daafe37ef48cd91c9b3dd2f13e5993e26 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_847.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8488.jpg b/training/my_horse2zebra/train_B/n02391049_8488.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10587a2ddac525ff5dc18b4aad50366f7dda92f2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8488.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_85.jpg b/training/my_horse2zebra/train_B/n02391049_85.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7f2ac7c53cf15ac65eebc2e03b9f144d03fbb38 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_85.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_851.jpg b/training/my_horse2zebra/train_B/n02391049_851.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed046b5167edc1a546cf1d5b9d1d4e1b71a7295d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_851.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8526.jpg b/training/my_horse2zebra/train_B/n02391049_8526.jpg new file mode 100644 index 0000000000000000000000000000000000000000..969e2aa4a65680f2057762cd5bf5e5a411bcd186 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8526.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8539.jpg b/training/my_horse2zebra/train_B/n02391049_8539.jpg new file mode 100644 index 0000000000000000000000000000000000000000..677ebe19c0d4b18d548b362ec87b02c47f93281a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8539.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8565.jpg b/training/my_horse2zebra/train_B/n02391049_8565.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a6547a06a80381c6288e9491e0a5188d93d7a18 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8565.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8568.jpg b/training/my_horse2zebra/train_B/n02391049_8568.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d8238f8247b96a30cdf6b16b1615a1ed0e8686c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8568.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_857.jpg b/training/my_horse2zebra/train_B/n02391049_857.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b06601a2382ecfb34db7de99ce6aca00e384639f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_857.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8593.jpg b/training/my_horse2zebra/train_B/n02391049_8593.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05d8ec2e04b0dc635f2644d902c195479cc2e0e4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8593.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8616.jpg b/training/my_horse2zebra/train_B/n02391049_8616.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81a990430ebb83efa7dca4ddab0a10fb6dabbca2 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8616.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8633.jpg b/training/my_horse2zebra/train_B/n02391049_8633.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b228666cfb9bc1bfc6f027a398f57edb198ffdd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8633.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_865.jpg b/training/my_horse2zebra/train_B/n02391049_865.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b8041169a1f1c888fd696895fc75cc5456191c0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_865.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8657.jpg b/training/my_horse2zebra/train_B/n02391049_8657.jpg new file mode 100644 index 0000000000000000000000000000000000000000..284b65d4939b0cec3640cdc4e9e5728786296d66 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8657.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8659.jpg b/training/my_horse2zebra/train_B/n02391049_8659.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a518fe36c3db8e42ea29effd673066edb87c55ae Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8659.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_866.jpg b/training/my_horse2zebra/train_B/n02391049_866.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5db641cf60327e554789b25905d30c84283e7786 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_866.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8689.jpg b/training/my_horse2zebra/train_B/n02391049_8689.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4175a25195fed1798d4e4f2ecb19023df1a0880e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8689.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8696.jpg b/training/my_horse2zebra/train_B/n02391049_8696.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91a486c48e8d3f594815ac38a057bed2ee76e857 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8696.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8699.jpg b/training/my_horse2zebra/train_B/n02391049_8699.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fdb9c192e1704de98987fe06f6cde9f33c8b099a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8699.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_87.jpg b/training/my_horse2zebra/train_B/n02391049_87.jpg new file mode 100644 index 0000000000000000000000000000000000000000..220a9cd1a4a44bdc5f54d1e5b1f1a98ac8735afa Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_87.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_873.jpg b/training/my_horse2zebra/train_B/n02391049_873.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7f2ac7c53cf15ac65eebc2e03b9f144d03fbb38 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_873.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_875.jpg b/training/my_horse2zebra/train_B/n02391049_875.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e8ca27daf68c4bc287a3fc5bbc2fad107d2be23c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_875.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8764.jpg b/training/my_horse2zebra/train_B/n02391049_8764.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d847a6afedc0a0a4e3cce66a81add7880cde9f38 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8764.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8782.jpg b/training/my_horse2zebra/train_B/n02391049_8782.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5793b1405317b09b86771742bd93dd14ea595b5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8782.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_879.jpg b/training/my_horse2zebra/train_B/n02391049_879.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62be7eb93c13820dbcf757c29ed294688fd40772 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_879.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8793.jpg b/training/my_horse2zebra/train_B/n02391049_8793.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb8329e2e5cfb10a8b3eb95575866e0c1148037d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8793.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8831.jpg b/training/my_horse2zebra/train_B/n02391049_8831.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4ec71945f0d8d167d94e2e31441cb891d5da2c4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8831.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8844.jpg b/training/my_horse2zebra/train_B/n02391049_8844.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd09b1b1d1543653fc1cb99fc998fde82873d095 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8844.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8855.jpg b/training/my_horse2zebra/train_B/n02391049_8855.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82959a533b1653afe97e5ca7c9481b420646ccfd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8855.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8856.jpg b/training/my_horse2zebra/train_B/n02391049_8856.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8a5f6d1d4dcba0387a5259fec1be6828835fb3b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8856.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8857.jpg b/training/my_horse2zebra/train_B/n02391049_8857.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b997c8b99032f1dbbe10036b82aaf6b666177709 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8857.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8859.jpg b/training/my_horse2zebra/train_B/n02391049_8859.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0135598f0f0053046049ccf5a9b1cdbaa8321ff7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8859.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_886.jpg b/training/my_horse2zebra/train_B/n02391049_886.jpg new file mode 100644 index 0000000000000000000000000000000000000000..468fda0c0c5f947f20eee40e32e953fe1a35f8a8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_886.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8878.jpg b/training/my_horse2zebra/train_B/n02391049_8878.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5714b20f5d3e61021fe5957a11951585db3c3f61 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8878.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8902.jpg b/training/my_horse2zebra/train_B/n02391049_8902.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ab7add59cb906cb52cf5345531252ed67201939 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8902.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8937.jpg b/training/my_horse2zebra/train_B/n02391049_8937.jpg new file mode 100644 index 0000000000000000000000000000000000000000..564de64d2a684c80a4bfda9c6b58345dcceb4f5a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8937.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8951.jpg b/training/my_horse2zebra/train_B/n02391049_8951.jpg new file mode 100644 index 0000000000000000000000000000000000000000..849055062b4c8be23db4c65668fdd696e6b1dd11 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8951.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_897.jpg b/training/my_horse2zebra/train_B/n02391049_897.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50efbda25fc09f2a39741b6073f5650ce83f278d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_897.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8982.jpg b/training/my_horse2zebra/train_B/n02391049_8982.jpg new file mode 100644 index 0000000000000000000000000000000000000000..907efb8e24252e60e2912751217634b1ad2878b1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8982.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_8994.jpg b/training/my_horse2zebra/train_B/n02391049_8994.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b033788589f35969f1b5f3ee63fc91c89e015bab Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_8994.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9002.jpg b/training/my_horse2zebra/train_B/n02391049_9002.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62e9cb3a0a48dd211e420ce67c4c17f760c0662b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9002.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9006.jpg b/training/my_horse2zebra/train_B/n02391049_9006.jpg new file mode 100644 index 0000000000000000000000000000000000000000..929102916647a4ff4288e7ac6db0dc601b40da53 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9006.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9016.jpg b/training/my_horse2zebra/train_B/n02391049_9016.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f22740197b594feac20e3ff9e98f81fed258cbf6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9016.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9027.jpg b/training/my_horse2zebra/train_B/n02391049_9027.jpg new file mode 100644 index 0000000000000000000000000000000000000000..262faf8cc40b38ce7d2dd20f322611ae1b24ac4b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9027.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_904.jpg b/training/my_horse2zebra/train_B/n02391049_904.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46149b5df0015b78e7fb7ec1e7e4430d2e5023f9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_904.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9051.jpg b/training/my_horse2zebra/train_B/n02391049_9051.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac95bff9060db69bbff99ee0045075cdc70a98af Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9051.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9055.jpg b/training/my_horse2zebra/train_B/n02391049_9055.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50ee5b3cadb721bd2394d725cd6d3b6d2b48282f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9055.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9058.jpg b/training/my_horse2zebra/train_B/n02391049_9058.jpg new file mode 100644 index 0000000000000000000000000000000000000000..992c5fc9d98b754557c751d752c39de64a9ddc6d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9058.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9062.jpg b/training/my_horse2zebra/train_B/n02391049_9062.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db16ad28b16c61ebf75522f03ddf61caf07e107e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9062.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_907.jpg b/training/my_horse2zebra/train_B/n02391049_907.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4901a26c6bbcfcc3ee70db18927bc7eb7efe9bc9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_907.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_909.jpg b/training/my_horse2zebra/train_B/n02391049_909.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bdf4858663fd93b70cede31e07377dba0ca7007b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_909.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9113.jpg b/training/my_horse2zebra/train_B/n02391049_9113.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2faaf83743df6feed1810a019c19465f07a7006d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9113.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9122.jpg b/training/my_horse2zebra/train_B/n02391049_9122.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cba980e3988baa4b19588fa551e2169fef9159a8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9122.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_913.jpg b/training/my_horse2zebra/train_B/n02391049_913.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f19bde47181ffc5e7e5d23129037985344faaa85 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_913.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9135.jpg b/training/my_horse2zebra/train_B/n02391049_9135.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b54867f59cbce93479ccb68f75bade0e4f4a8c0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9135.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9136.jpg b/training/my_horse2zebra/train_B/n02391049_9136.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3380e3eabfe56b304341352a6e5de56c93bbfca Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9136.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9137.jpg b/training/my_horse2zebra/train_B/n02391049_9137.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9b687c75f08ccd8d06ae6a948c9f4583ddf7b83 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9137.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9149.jpg b/training/my_horse2zebra/train_B/n02391049_9149.jpg new file mode 100644 index 0000000000000000000000000000000000000000..656177eabf3f762dd7ad9ea6ae89829044b60623 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9149.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_915.jpg b/training/my_horse2zebra/train_B/n02391049_915.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bca12faa9126df7db06d7cebe6042da822da2cce Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_915.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9151.jpg b/training/my_horse2zebra/train_B/n02391049_9151.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cac26529f6e38487c230f8f98e038bb3b9e6c57 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9151.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_916.jpg b/training/my_horse2zebra/train_B/n02391049_916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ebb2dc0b4a21a01720686ae8ec60cf18ec091b13 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_916.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_918.jpg b/training/my_horse2zebra/train_B/n02391049_918.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b90f1b421e1b76ca774caead8e628d19ad54482 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_918.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9193.jpg b/training/my_horse2zebra/train_B/n02391049_9193.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b73e8007c3b5118e70156410cdb4df07d9b2460 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9193.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_921.jpg b/training/my_horse2zebra/train_B/n02391049_921.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abd52d2a6ff8e163ec9a176e364b0cc355d0774a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_921.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9219.jpg b/training/my_horse2zebra/train_B/n02391049_9219.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5e91317d57be25716fd0a523e44f94a454dc032 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9219.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_924.jpg b/training/my_horse2zebra/train_B/n02391049_924.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a7c9d9518b3113c7742cc40fac953b0fe6d873d9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_924.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_925.jpg b/training/my_horse2zebra/train_B/n02391049_925.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac823981ad51fbd1f4e88ee24d19e9f03b05a39c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_925.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9258.jpg b/training/my_horse2zebra/train_B/n02391049_9258.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63e8452235335c33a685ae2b88617572f58c4de9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9258.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_926.jpg b/training/my_horse2zebra/train_B/n02391049_926.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f2f8b2ed43265a1a4d1ecb6d5dce7c74fdd00568 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_926.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_927.jpg b/training/my_horse2zebra/train_B/n02391049_927.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57aa9366cce29e208cd0bf692f64b374e626668f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_927.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9273.jpg b/training/my_horse2zebra/train_B/n02391049_9273.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58c0fe6e3551965d42d003b84b7df2965618dd1a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9273.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_929.jpg b/training/my_horse2zebra/train_B/n02391049_929.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da982d920c2b5d10b8e74d60f785037826ecbd9a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_929.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9303.jpg b/training/my_horse2zebra/train_B/n02391049_9303.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87c25e6e65c46d901a2e421cdc07d0b1090fcffc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9303.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9309.jpg b/training/my_horse2zebra/train_B/n02391049_9309.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a9a7e94fd950a31c98435f299b60065b4bafbc6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9309.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9317.jpg b/training/my_horse2zebra/train_B/n02391049_9317.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0bb313c1d2e6f4495665f9d30d00e64c8965e7fc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9317.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_932.jpg b/training/my_horse2zebra/train_B/n02391049_932.jpg new file mode 100644 index 0000000000000000000000000000000000000000..219e3bdbd05b20bc8d2c726fec439629a73e0844 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_932.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9331.jpg b/training/my_horse2zebra/train_B/n02391049_9331.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbe6d54d9347e9e37ebd6bc32799cfad02c52cf6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9331.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9336.jpg b/training/my_horse2zebra/train_B/n02391049_9336.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b31fc84c8222891fd5a842ab015581c910c1cbd7 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9336.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_934.jpg b/training/my_horse2zebra/train_B/n02391049_934.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6dfcc60f359ef38d7f9daf8657b9bdfc4879ea90 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_934.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_935.jpg b/training/my_horse2zebra/train_B/n02391049_935.jpg new file mode 100644 index 0000000000000000000000000000000000000000..382b121dc82faa06c3bc6ea0f91d2840d071648a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_935.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9357.jpg b/training/my_horse2zebra/train_B/n02391049_9357.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef24793b96581c3e07785c2577569154b00c511d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9357.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_936.jpg b/training/my_horse2zebra/train_B/n02391049_936.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db2eeaa9c9dac59cab2b5e575b55c4a7ab77e080 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_936.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9365.jpg b/training/my_horse2zebra/train_B/n02391049_9365.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e671d40efda5f8287fe91d94bf88ab2bbb07de5d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9365.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9377.jpg b/training/my_horse2zebra/train_B/n02391049_9377.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4e4f48d54df1af525aff692ec96d33d42275a74 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9377.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9387.jpg b/training/my_horse2zebra/train_B/n02391049_9387.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c52dfbd736a6c9989854f8a752227132e57ca6b0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9387.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9398.jpg b/training/my_horse2zebra/train_B/n02391049_9398.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9345aa1910ee74682454e5c6b85b1ebf0184b38 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9398.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9416.jpg b/training/my_horse2zebra/train_B/n02391049_9416.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff22616ef224f437be0df84895cac51d54c75e88 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9416.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9417.jpg b/training/my_horse2zebra/train_B/n02391049_9417.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37d6f5424e735203300d4fcd67d830277229e983 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9417.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9421.jpg b/training/my_horse2zebra/train_B/n02391049_9421.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd8cf816b84e6db08d0a6f444d21e9b9c35c9eff Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9421.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9427.jpg b/training/my_horse2zebra/train_B/n02391049_9427.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ba8cdb07861ca625a35ae4327a3e09d2f5bbbaf Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9427.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_943.jpg b/training/my_horse2zebra/train_B/n02391049_943.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d8e585f7a741063a312be67602a4ec2a589a3e50 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_943.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_944.jpg b/training/my_horse2zebra/train_B/n02391049_944.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de0a169b933d0da6c2e3dc7a0d9684783058df56 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_944.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9441.jpg b/training/my_horse2zebra/train_B/n02391049_9441.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6b24376c3ed96b8eaf54b3d2acb2870d0c77077 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9441.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9443.jpg b/training/my_horse2zebra/train_B/n02391049_9443.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98b42e33dbb1cf3ba94bc1fc7d971b24ee49b41f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9443.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9478.jpg b/training/my_horse2zebra/train_B/n02391049_9478.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eeb70335ecf09a22aa84e00287b81fac0b97690d Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9478.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9487.jpg b/training/my_horse2zebra/train_B/n02391049_9487.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0bcaae5b241e27de0e510b9825173e5f65776478 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9487.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_949.jpg b/training/my_horse2zebra/train_B/n02391049_949.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52851b7b1ce2be9f505ce96b875479bd4958df51 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_949.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9494.jpg b/training/my_horse2zebra/train_B/n02391049_9494.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af708b37ee3151be639d6ab74b7d55c4125cd9d0 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9494.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9497.jpg b/training/my_horse2zebra/train_B/n02391049_9497.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5bf42ee5d00a7557c66f421623ae97dfdef13638 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9497.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9499.jpg b/training/my_horse2zebra/train_B/n02391049_9499.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65f9f95bbdf488939a58c2dff4eb4a828e59a577 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9499.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9519.jpg b/training/my_horse2zebra/train_B/n02391049_9519.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd51f90314ab837df1072d454613fb497bec56de Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9519.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9524.jpg b/training/my_horse2zebra/train_B/n02391049_9524.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38bc08cbb17665ddb107620e765f285cdf04bd82 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9524.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9528.jpg b/training/my_horse2zebra/train_B/n02391049_9528.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e4c19cabce5f14236cdfe646da0ecdb5f8e87e8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9528.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9532.jpg b/training/my_horse2zebra/train_B/n02391049_9532.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf02f14626bbad1cc5c9b50766a90f7c571ceb8b Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9532.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9533.jpg b/training/my_horse2zebra/train_B/n02391049_9533.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d0b8c0ecf45d3ecdbef9b0104f527633ce8e380 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9533.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_954.jpg b/training/my_horse2zebra/train_B/n02391049_954.jpg new file mode 100644 index 0000000000000000000000000000000000000000..003d14722458c883840550373268f1a19377f6e1 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_954.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9542.jpg b/training/my_horse2zebra/train_B/n02391049_9542.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ebf705169d13eba3d874c213a5dcfaf167422ea Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9542.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9555.jpg b/training/my_horse2zebra/train_B/n02391049_9555.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c79d196b4df49912c76bdf256f97854e386fa382 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9555.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9556.jpg b/training/my_horse2zebra/train_B/n02391049_9556.jpg new file mode 100644 index 0000000000000000000000000000000000000000..481a145e3ec516e383bc4fb0c8e1373ff91de38c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9556.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_956.jpg b/training/my_horse2zebra/train_B/n02391049_956.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a455680bbc61fb537303ea3234071867d47aeacd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_956.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_957.jpg b/training/my_horse2zebra/train_B/n02391049_957.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6e4823a2b48189c1bd8ec9617e35bd513c57692 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_957.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9583.jpg b/training/my_horse2zebra/train_B/n02391049_9583.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36bc4dbf9de94ab230651c3c9070a7ded5b6a5cc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9583.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9593.jpg b/training/my_horse2zebra/train_B/n02391049_9593.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5c7cb46b35726e4a2e8fc4a7a090050e26748ad Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9593.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9625.jpg b/training/my_horse2zebra/train_B/n02391049_9625.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f7c818e4ea6564362491a90f66298c08261b402 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9625.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9626.jpg b/training/my_horse2zebra/train_B/n02391049_9626.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f74f857624bc4c77a2416b0e4151561716f1858 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9626.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9629.jpg b/training/my_horse2zebra/train_B/n02391049_9629.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1569ccc5e83a12755245a8f161c29fe674c80c6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9629.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9635.jpg b/training/my_horse2zebra/train_B/n02391049_9635.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee22ca03e4488ab7b80859ba824b56e574de6b8f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9635.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_964.jpg b/training/my_horse2zebra/train_B/n02391049_964.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ddfb40637c01f068b7c698e13b30b29891ea2ac Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_964.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9656.jpg b/training/my_horse2zebra/train_B/n02391049_9656.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba13564db14bf0678cfda1620313b389c32805ab Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9656.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_966.jpg b/training/my_horse2zebra/train_B/n02391049_966.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ce57c72e185e1b85920c7c378732407d0359d3e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_966.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9665.jpg b/training/my_horse2zebra/train_B/n02391049_9665.jpg new file mode 100644 index 0000000000000000000000000000000000000000..355549855c7fcf159d8be8347e097e7723760674 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9665.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9675.jpg b/training/my_horse2zebra/train_B/n02391049_9675.jpg new file mode 100644 index 0000000000000000000000000000000000000000..235442cd26d8bd6b0ef49db1770b7b7fe8fa4f17 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9675.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_968.jpg b/training/my_horse2zebra/train_B/n02391049_968.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f07ccdf68293611ec8a90e62d6771c0a26d1563f Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_968.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_969.jpg b/training/my_horse2zebra/train_B/n02391049_969.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01efa27af2d434a1bbb970dec2e4dacead07943a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_969.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9698.jpg b/training/my_horse2zebra/train_B/n02391049_9698.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a7d937b36ee3881ec87aa7584dc92a5f67243ebc Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9698.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9705.jpg b/training/my_horse2zebra/train_B/n02391049_9705.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a84ff57957fe8301f5f39b7630c5b77e5b9c4d05 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9705.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9719.jpg b/training/my_horse2zebra/train_B/n02391049_9719.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28801ddc995e8aa5966ce656d32defcaa2dac944 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9719.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9726.jpg b/training/my_horse2zebra/train_B/n02391049_9726.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d851243f2a862d740d648d28411c12c0b808e1e5 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9726.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9747.jpg b/training/my_horse2zebra/train_B/n02391049_9747.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9cfb954877d6ca319a7e1168df05f1cf643db39 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9747.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_976.jpg b/training/my_horse2zebra/train_B/n02391049_976.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7760bc4e7d53107826a2a6268d70c43bfe8dbf8 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_976.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9762.jpg b/training/my_horse2zebra/train_B/n02391049_9762.jpg new file mode 100644 index 0000000000000000000000000000000000000000..373fbdc9fd82bb5bfc5c13e5b438aa064174bf35 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9762.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9777.jpg b/training/my_horse2zebra/train_B/n02391049_9777.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1a10c25b94538732fd13bb75da1de7e45984e00 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9777.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_978.jpg b/training/my_horse2zebra/train_B/n02391049_978.jpg new file mode 100644 index 0000000000000000000000000000000000000000..108124984d63dc46e836d07d3ad428da1eea7cab Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_978.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_98.jpg b/training/my_horse2zebra/train_B/n02391049_98.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b1e6193c0185db409d1f1e9b6fc58845f38f3cd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_98.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9804.jpg b/training/my_horse2zebra/train_B/n02391049_9804.jpg new file mode 100644 index 0000000000000000000000000000000000000000..772ce43edb28c9992d21bfd289e34e49bfba8d01 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9804.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9822.jpg b/training/my_horse2zebra/train_B/n02391049_9822.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d22f5394922cdf1628d393269e181abd3e2b1ad Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9822.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_983.jpg b/training/my_horse2zebra/train_B/n02391049_983.jpg new file mode 100644 index 0000000000000000000000000000000000000000..330e1b1ed9d9826cb6b5762589ba9656b719f9db Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_983.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_984.jpg b/training/my_horse2zebra/train_B/n02391049_984.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af375c2db72e8cf8dc1202962f186aa7d1875f5c Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_984.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9844.jpg b/training/my_horse2zebra/train_B/n02391049_9844.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a058feb41916ebe6dc91fcc0276fd953b8748c60 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9844.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_985.jpg b/training/my_horse2zebra/train_B/n02391049_985.jpg new file mode 100644 index 0000000000000000000000000000000000000000..579ce40a55cb98e80ccedc08f4b2ae44083235f4 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_985.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_986.jpg b/training/my_horse2zebra/train_B/n02391049_986.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0e21d9affca9a5740580c9b4d960d95879cc89a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_986.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9864.jpg b/training/my_horse2zebra/train_B/n02391049_9864.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cb3f7cdead42a8b0048c886ab1b5df075f47151 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9864.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9911.jpg b/training/my_horse2zebra/train_B/n02391049_9911.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3002f744efdc77c3c74297ab09f3476142e87647 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9911.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9918.jpg b/training/my_horse2zebra/train_B/n02391049_9918.jpg new file mode 100644 index 0000000000000000000000000000000000000000..79c340a854c74393c3e73a9b37ee1494e51924e6 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9918.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9919.jpg b/training/my_horse2zebra/train_B/n02391049_9919.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74463ec1183e4f0a290cf056790d48ddc26c8b19 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9919.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_992.jpg b/training/my_horse2zebra/train_B/n02391049_992.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab6430aa169122c12e6663dc7cad5b27c3e24a13 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_992.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9922.jpg b/training/my_horse2zebra/train_B/n02391049_9922.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5d2fbb31a14f1a2884005c023e334f9bb5aab62 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9922.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_993.jpg b/training/my_horse2zebra/train_B/n02391049_993.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52870cb73d94953037bbd8976a01ad961932f9a9 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_993.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9951.jpg b/training/my_horse2zebra/train_B/n02391049_9951.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6cd6f1878493182143cee18e91af05f00e9387a Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9951.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9964.jpg b/training/my_horse2zebra/train_B/n02391049_9964.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca854f178eb53c27fa573172b952e1684fdebb0e Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9964.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9965.jpg b/training/my_horse2zebra/train_B/n02391049_9965.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63ceb89712dd94f1367306f3b8245e2b72991c20 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9965.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9977.jpg b/training/my_horse2zebra/train_B/n02391049_9977.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45cb97fced6d691fa676b1e8ad8297e630a830ba Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9977.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9979.jpg b/training/my_horse2zebra/train_B/n02391049_9979.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0276fc7a7e4c96e78d03cf29f9af4638fb867500 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9979.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_9987.jpg b/training/my_horse2zebra/train_B/n02391049_9987.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c75d2f19ad988a22a637449464be64b456b78dd Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_9987.jpg differ diff --git a/training/my_horse2zebra/train_B/n02391049_999.jpg b/training/my_horse2zebra/train_B/n02391049_999.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c53d93f5de3a524ab03a864e8f04c3e202ab824 Binary files /dev/null and b/training/my_horse2zebra/train_B/n02391049_999.jpg differ