13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%           IIIII  DDDD   EEEEE  N   N  TTTTT  IIIII  FFFFF  Y   Y            %
73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%             I    D   D  E      NN  N    T      I    F       Y Y             %
83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%             I    D   D  EEE    N N N    T      I    FFF      Y              %
93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%             I    D   D  E      N  NN    T      I    F        Y              %
103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%           IIIII  DDDD   EEEEE  N   N    T    IIIII  F        Y              %
113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%               Identify an Image Format and Characteristics.                 %
143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                           Software Design                                   %
16de984cdc3631106b1cbbb8d3972b76a0fc27e8e8cristy%                                Cristy                                       %
173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                            September 1994                                   %
183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
207ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy%  Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization      %
213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  dedicated to making software imaging solutions freely available.           %
223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  You may not use this file except in compliance with the License.  You may  %
243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  obtain a copy of the License at                                            %
253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    http://www.imagemagick.org/script/license.php                            %
273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  Unless required by applicable law or agreed to in writing, software        %
293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  distributed under the License is distributed on an "AS IS" BASIS,          %
303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  See the License for the specific language governing permissions and        %
323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  limitations under the License.                                             %
333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  The identify program describes the format and characteristics of one or more
373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  image files. It also reports if an image is incomplete or corrupt. The
383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  information returned includes the image number, the file name, the width and
393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  height of the image, whether the image is colormapped or not, the number of
403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  colors in the image, the number of bytes in the image, the format of the
413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  image (JPEG, PNM, etc.), and finally the number of seconds it took to read
423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  and process the image. Many more attributes are available with the verbose
433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  option.
443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  Include declarations.
493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickWand/studio.h"
514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickWand/MagickWand.h"
524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickWand/mogrify-private.h"
53196372de602f3999bb9059f9f3c5756d3d8654c0cristy#include "MagickCore/string-private.h"
543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy+   I d e n t i f y I m a g e C o m m a n d                                   %
613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  IdentifyImageCommand() describes the format and characteristics of one or
673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  more image files. It will also report if an image is incomplete or corrupt.
683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  The information displayed includes the scene number, the file name, the
693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  width and height of the image, whether the image is colormapped or not,
703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  the number of colors in the image, the number of bytes in the image, the
713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  format of the image (JPEG, PNM, etc.), and finally the number of seconds
723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  it took to read and process the image.
733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  The format of the IdentifyImageCommand method is:
753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      MagickBooleanType IdentifyImageCommand(ImageInfo *image_info,int argc,
773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%        char **argv,char **metadata,ExceptionInfo *exception)
783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  A description of each parameter follows:
803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o image_info: the image info.
823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o argc: the number of elements in the argument vector.
843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o argv: A text array containing the command line arguments.
863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o metadata: any metadata is returned here.
883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o exception: return any errors or warnings in this structure.
903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
933ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType IdentifyUsage(void)
943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  const char
963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    **p;
973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  static const char
993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *miscellaneous[]=
1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-debug events        display copious debugging information",
1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-help                print program options",
1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-list type           print a list of supported option arguments",
1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-log format          format of debugging information",
1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-version             print version information",
1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      (char *) NULL
1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    },
108e48c6a917e8d2f5a1af59492e771f760c04a7824cristy    *operators[]=
109e48c6a917e8d2f5a1af59492e771f760c04a7824cristy    {
11017ada024a8d39285affcac96ff344f3142c41aadcristy      "-channel mask        set the image channel mask",
1110a09e9d7c5020869e171099665da2f2077cbaae8cristy      "-grayscale method    convert image to grayscale",
112e48c6a917e8d2f5a1af59492e771f760c04a7824cristy      "-negate              replace every pixel with its complementary color ",
113e48c6a917e8d2f5a1af59492e771f760c04a7824cristy      (char *) NULL
114e48c6a917e8d2f5a1af59492e771f760c04a7824cristy    },
1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *settings[]=
1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-alpha option        on, activate, off, deactivate, set, opaque, copy",
1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "                     transparent, extract, background, or shape",
1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-antialias           remove pixel-aliasing",
1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-authenticate password",
1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "                     decipher image with this password",
1221e61810417db04c4c5ea5975f6b85bf063da645fcristy      "-clip                clip along the first path from the 8BIM profile",
1231e61810417db04c4c5ea5975f6b85bf063da645fcristy      "-clip-mask filename  associate a clip mask with the image",
1241e61810417db04c4c5ea5975f6b85bf063da645fcristy      "-clip-path id        clip along a named path from the 8BIM profile",
1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-colorspace type     alternate image colorspace",
1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-crop geometry       cut out a rectangular region of the image",
1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-define format:option",
1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "                     define one or more image format options",
1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-density geometry    horizontal and vertical density of the image",
1303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-depth value         image depth",
131605e80d8c89290e0b3119577f7c1cc115ba530d3cristy      "-endian type         endianness (MSB or LSB) of the image",
1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-extract geometry    extract area from image",
13314154224e937198c540f38d146528c0cdc45d24dcristy      "-features distance   analyze image features (e.g. contrast, correlation)",
1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-format \"string\"     output formatted image characteristics",
1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-fuzz distance       colors within this distance are considered equal",
136cd483f1d951479be76dd654c398b11c17de2e17ecristy      "-gamma value         of gamma correction",
1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-interlace type      type of image interlacing scheme",
1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-interpolate method  pixel color interpolation method",
1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-limit type value    pixel cache resource limit",
140e9252c26b8f1dcf9d41023fb5918c2ce5e1f01c0cristy      "-matte               store matte channel if the image has one",
141bd4a3c228c0e785517b8ab630b2cc6095373f710cristy      "-moments             report image moments",
1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-monitor             monitor progress",
1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-ping                efficiently determine image attributes",
144a1b1486951e2507b7c645831dbcc8f10428d8917cristy      "-precision value     maximum number of significant digits to print",
1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-quiet               suppress all warning messages",
146327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy      "-read-mask filename  associate a read mask with the image",
1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-regard-warnings     pay attention to warning messages",
1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-respect-parentheses settings remain in effect until parenthesis boundary",
1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-sampling-factor geometry",
1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "                     horizontal and vertical sampling factor",
1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-seed value          seed a new sequence of pseudo-random numbers",
1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-set attribute value set an image attribute",
1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-size geometry       width and height of image",
1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-strip               strip image of all profiles and comments",
155045bd909148720f6ee8bc910eab96fa057b54a5fcristy      "-unique              display the number of unique colors in the image",
1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-units type          the units of image resolution",
1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-verbose             print detailed information about the image",
1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "-virtual-pixel method",
1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      "                     virtual pixel access method",
1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      (char *) NULL
1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    };
1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1634f7a61361f38ef4d3eaae0c74b9964a57aee813acristy  ListMagickVersion(stdout);
1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) printf("Usage: %s [options ...] file [ [options ...] "
1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    "file ... ]\n",GetClientName());
1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) printf("\nImage Settings:\n");
1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  for (p=settings; *p != (char *) NULL; p++)
1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    (void) printf("  %s\n",*p);
169e48c6a917e8d2f5a1af59492e771f760c04a7824cristy  (void) printf("\nImage Operators:\n");
170e48c6a917e8d2f5a1af59492e771f760c04a7824cristy  for (p=operators; *p != (char *) NULL; p++)
171e48c6a917e8d2f5a1af59492e771f760c04a7824cristy    (void) printf("  %s\n",*p);
1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) printf("\nMiscellaneous Options:\n");
1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  for (p=miscellaneous; *p != (char *) NULL; p++)
1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    (void) printf("  %s\n",*p);
1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) printf(
176e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony    "\nBy default, the image format of 'file' is determined by its magic\n");
1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) printf(
1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    "number.  To specify a particular image format, precede the filename\n");
1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) printf(
1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    "with an image format name and a colon (i.e. ps:image) or specify the\n");
1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) printf(
1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    "image type as the filename suffix (i.e. image.ps).  Specify 'file' as\n");
1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) printf("'-' for standard input or output.\n");
1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(MagickFalse);
1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristyWandExport MagickBooleanType IdentifyImageCommand(ImageInfo *image_info,
1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  int argc,char **argv,char **metadata,ExceptionInfo *exception)
1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define DestroyIdentify() \
1913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ \
1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  DestroyImageStack(); \
193bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy  for (i=0; i < (ssize_t) argc; i++) \
1943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    argv[i]=DestroyString(argv[i]); \
1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  argv=(char **) RelinquishMagickMemory(argv); \
1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ThrowIdentifyException(asperity,tag,option) \
1983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ \
199efe601ce9ea5ad34ad0e8ad6e61d9be9b148b2a3cristy  (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
2003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    option); \
2013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  DestroyIdentify(); \
2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(MagickFalse); \
2033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#define ThrowIdentifyInvalidArgumentException(option,argument) \
2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ \
2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
207e5b39652d8d21bc3940d83b8d6088d4070a8a34aanthony    "InvalidArgument","'%s': %s",option,argument); \
2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  DestroyIdentify(); \
2093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(MagickFalse); \
2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  const char
2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *format,
2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *option;
2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  Image
2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *image;
2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  ImageStack
2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    image_stack[MaxImageStackDepth+1];
2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  MagickBooleanType
2233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    fire,
224ebbcfea9ab0a5066ff5f0b5257c9598ca77579d3cristy    pend,
225ebbcfea9ab0a5066ff5f0b5257c9598ca77579d3cristy    respect_parenthesis;
2263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  MagickStatusType
2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    status;
2293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
230bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy  register ssize_t
2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    i;
2323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
233bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy  size_t
2343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    count;
2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2369d314ff2c17a77996c05413c2013880387e50f0ecristy  ssize_t
2379d314ff2c17a77996c05413c2013880387e50f0ecristy    j,
2389d314ff2c17a77996c05413c2013880387e50f0ecristy    k;
2399d314ff2c17a77996c05413c2013880387e50f0ecristy
2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  /*
2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    Set defaults.
2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  */
2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  assert(image_info != (ImageInfo *) NULL);
244e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy  assert(image_info->signature == MagickCoreSignature);
2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  if (image_info->debug != MagickFalse)
2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
2473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  assert(exception != (ExceptionInfo *) NULL);
2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  if (argc == 2)
2493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      option=argv[1];
2513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      if ((LocaleCompare("version",option+1) == 0) ||
2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          (LocaleCompare("-version",option+1) == 0))
2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
2544f7a61361f38ef4d3eaae0c74b9964a57aee813acristy          ListMagickVersion(stdout);
255668f87ddf220ca4af92506cca2698f86695dfa51dirk          return(MagickTrue);
2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  if (argc < 2)
25913e61a1ac6772c75eac4825ebca144e22f636b6bcristy    return(IdentifyUsage());
2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  count=0;
2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  format=NULL;
2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  j=1;
2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  k=0;
2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  NewImageStack();
2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  option=(char *) NULL;
2663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  pend=MagickFalse;
267ebbcfea9ab0a5066ff5f0b5257c9598ca77579d3cristy  respect_parenthesis=MagickFalse;
2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  status=MagickTrue;
2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  /*
2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    Identify an image.
2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  */
2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  ReadCommandlLine(argc,&argv);
2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  status=ExpandFilenames(&argc,&argv);
2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  if (status == MagickFalse)
2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    ThrowIdentifyException(ResourceLimitError,"MemoryAllocationFailed",
2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      GetExceptionMessage(errno));
2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  image_info->ping=MagickTrue;
278bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy  for (i=1; i < (ssize_t) argc; i++)
2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  {
2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    option=argv[i];
2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if (LocaleCompare(option,"(") == 0)
2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        FireImageStack(MagickFalse,MagickTrue,pend);
2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (k == MaxImageStackDepth)
2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          ThrowIdentifyException(OptionError,"ParenthesisNestedTooDeeply",
2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            option);
2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        PushImageStack();
2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        continue;
2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if (LocaleCompare(option,")") == 0)
2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        FireImageStack(MagickFalse,MagickTrue,MagickTrue);
2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (k == 0)
2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          ThrowIdentifyException(OptionError,"UnableToParseExpression",option);
2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        PopImageStack();
2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        continue;
2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
298042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy    if (IsCommandOption(option) == MagickFalse)
2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        char
3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          *filename;
3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        Image
3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          *images;
3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ImageInfo
3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          *identify_info;
3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        /*
3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          Read input image.
3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        */
3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        FireImageStack(MagickFalse,MagickFalse,pend);
3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        identify_info=CloneImageInfo(image_info);
3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        identify_info->verbose=MagickFalse;
3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        filename=argv[i];
316cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy        if ((LocaleCompare(filename,"--") == 0) && (i < (ssize_t) (argc-1)))
3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          filename=argv[++i];
3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (identify_info->ping != MagickFalse)
3191b58f25a8c2616ecdf2898ab358e1ee63d1b522ecristy          images=PingImages(identify_info,filename,exception);
3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        else
3211b58f25a8c2616ecdf2898ab358e1ee63d1b522ecristy          images=ReadImages(identify_info,filename,exception);
3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        identify_info=DestroyImageInfo(identify_info);
3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        status&=(images != (Image *) NULL) &&
3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          (exception->severity < ErrorException);
3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (images == (Image *) NULL)
3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          continue;
3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        AppendImageStack(images);
3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        FinalizeImageSettings(image_info,image,MagickFalse);
3290ccbde849cd582307bf57ffb41169dd8d9d44fe7dirk        count=0;
3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        for ( ; image != (Image *) NULL; image=GetNextImageInList(image))
3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          if (image->scene == 0)
3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            image->scene=count++;
3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          if (format == (char *) NULL)
3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            {
336a403727ea73ef5840a476a3c4614445807f42827cristy              (void) IdentifyImage(image,stdout,image_info->verbose,exception);
3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              continue;
3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            }
3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          if (metadata != (char **) NULL)
3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            {
3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              char
3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                *text;
3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
344018f07f7333b25743d0afff892450cebdb905c1acristy              text=InterpretImageProperties(image_info,image,format,exception);
3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              if (text == (char *) NULL)
3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                ThrowIdentifyException(ResourceLimitError,
3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                  "MemoryAllocationFailed",GetExceptionMessage(errno));
3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              (void) ConcatenateString(&(*metadata),text);
3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              text=DestroyString(text);
3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            }
3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        RemoveAllImageStack();
3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        continue;
3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    switch (*(option+1))
3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'a':
3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("alpha",option+1) == 0)
3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
362bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            ssize_t
3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              type;
3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
368bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
37077ffd93537728a06355eac7fcc2cc39326e162a7cristy            type=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,
37177ffd93537728a06355eac7fcc2cc39326e162a7cristy              argv[i]);
3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (type < 0)
37377ffd93537728a06355eac7fcc2cc39326e162a7cristy              ThrowIdentifyException(OptionError,
37477ffd93537728a06355eac7fcc2cc39326e162a7cristy                "UnrecognizedAlphaChannelOption",argv[i]);
3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("antialias",option+1) == 0)
3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("authenticate",option+1) == 0)
3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
384e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'c':
3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("cache",option+1) == 0)
3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
397bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (IsGeometry(argv[i]) == MagickFalse)
4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("channel",option+1) == 0)
4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
405bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            ssize_t
4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              channel;
4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
411e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            channel=ParseChannelOption(argv[i]);
4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (channel < 0)
4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"UnrecognizedChannelType",
4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                argv[i]);
4173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
4191e61810417db04c4c5ea5975f6b85bf063da645fcristy        if (LocaleCompare("clip",option+1) == 0)
4201e61810417db04c4c5ea5975f6b85bf063da645fcristy          break;
4211e61810417db04c4c5ea5975f6b85bf063da645fcristy        if (LocaleCompare("clip-mask",option+1) == 0)
4221e61810417db04c4c5ea5975f6b85bf063da645fcristy          {
4231e61810417db04c4c5ea5975f6b85bf063da645fcristy            if (*option == '+')
4241e61810417db04c4c5ea5975f6b85bf063da645fcristy              break;
4251e61810417db04c4c5ea5975f6b85bf063da645fcristy            i++;
426e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
4271e61810417db04c4c5ea5975f6b85bf063da645fcristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
4281e61810417db04c4c5ea5975f6b85bf063da645fcristy            break;
4291e61810417db04c4c5ea5975f6b85bf063da645fcristy          }
4301e61810417db04c4c5ea5975f6b85bf063da645fcristy        if (LocaleCompare("clip-path",option+1) == 0)
4311e61810417db04c4c5ea5975f6b85bf063da645fcristy          {
4321e61810417db04c4c5ea5975f6b85bf063da645fcristy            i++;
433e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
4341e61810417db04c4c5ea5975f6b85bf063da645fcristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
4351e61810417db04c4c5ea5975f6b85bf063da645fcristy            break;
4361e61810417db04c4c5ea5975f6b85bf063da645fcristy          }
4373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("colorspace",option+1) == 0)
4383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
439bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            ssize_t
4403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              colorspace;
4413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
4433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
4443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
445e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
4463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
447042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy            colorspace=ParseCommandOption(MagickColorspaceOptions,
4483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              MagickFalse,argv[i]);
4493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (colorspace < 0)
4503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"UnrecognizedColorspace",
4513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                argv[i]);
4523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
4533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
4543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("crop",option+1) == 0)
4553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
4563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
4573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
4583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
459e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
4603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
4613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (IsGeometry(argv[i]) == MagickFalse)
4623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
4633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            image_info->ping=MagickFalse;
4643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
4653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
4662287975e02162155f1500d91ccce6e0fde5de7c8cristy        if (LocaleCompare("concurrent",option+1) == 0)
4672287975e02162155f1500d91ccce6e0fde5de7c8cristy          break;
4683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
4693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
4703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'd':
4713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
4723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("debug",option+1) == 0)
4733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
474bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            ssize_t
4753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              event;
4763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
4783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
4793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
480bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
4813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
482042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy            event=ParseCommandOption(MagickLogEventOptions,MagickFalse,argv[i]);
4833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (event < 0)
4843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"UnrecognizedEventType",
4853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                argv[i]);
4863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            (void) SetLogEventMask(argv[i]);
4873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
4883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
4893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("define",option+1) == 0)
4903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
4913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
492bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
4933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
4943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
4953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              {
4963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                const char
4973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                  *define;
4983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
4993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                define=GetImageOption(image_info,argv[i]);
5003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                if (define == (const char *) NULL)
5013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                  ThrowIdentifyException(OptionError,"NoSuchOption",argv[i]);
5023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                break;
5033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              }
504fc0f4c58bda6cf6dcc930ac6f59470d45572d981cristy            if (LocaleNCompare("identify:locate",argv[i],15) == 0)
5057d8529e089faadb7c096e4514a222623d84eb093cristy              image_info->ping=MagickFalse;
5063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
5073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
5083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("density",option+1) == 0)
5093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
5103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
5113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
5123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
513bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
5143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
5153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (IsGeometry(argv[i]) == MagickFalse)
5163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
5173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
5183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
5193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("depth",option+1) == 0)
5203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
5213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
5223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
5233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
524bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
5253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
5263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (IsGeometry(argv[i]) == MagickFalse)
5273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
5283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
5293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
5302287975e02162155f1500d91ccce6e0fde5de7c8cristy        if (LocaleCompare("duration",option+1) == 0)
5312287975e02162155f1500d91ccce6e0fde5de7c8cristy          {
5322287975e02162155f1500d91ccce6e0fde5de7c8cristy            if (*option == '+')
5332287975e02162155f1500d91ccce6e0fde5de7c8cristy              break;
5342287975e02162155f1500d91ccce6e0fde5de7c8cristy            i++;
535e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
5362287975e02162155f1500d91ccce6e0fde5de7c8cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
5372287975e02162155f1500d91ccce6e0fde5de7c8cristy            if (IsGeometry(argv[i]) == MagickFalse)
5382287975e02162155f1500d91ccce6e0fde5de7c8cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
5392287975e02162155f1500d91ccce6e0fde5de7c8cristy            break;
5402287975e02162155f1500d91ccce6e0fde5de7c8cristy          }
5413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
5423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
5431e61810417db04c4c5ea5975f6b85bf063da645fcristy      case 'e':
544605e80d8c89290e0b3119577f7c1cc115ba530d3cristy      {
545605e80d8c89290e0b3119577f7c1cc115ba530d3cristy        if (LocaleCompare("endian",option+1) == 0)
546605e80d8c89290e0b3119577f7c1cc115ba530d3cristy          {
547605e80d8c89290e0b3119577f7c1cc115ba530d3cristy            ssize_t
548605e80d8c89290e0b3119577f7c1cc115ba530d3cristy              endian;
549605e80d8c89290e0b3119577f7c1cc115ba530d3cristy
550605e80d8c89290e0b3119577f7c1cc115ba530d3cristy            if (*option == '+')
551605e80d8c89290e0b3119577f7c1cc115ba530d3cristy              break;
552605e80d8c89290e0b3119577f7c1cc115ba530d3cristy            i++;
553e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
554605e80d8c89290e0b3119577f7c1cc115ba530d3cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
555605e80d8c89290e0b3119577f7c1cc115ba530d3cristy            endian=ParseCommandOption(MagickEndianOptions,MagickFalse,
556605e80d8c89290e0b3119577f7c1cc115ba530d3cristy              argv[i]);
557605e80d8c89290e0b3119577f7c1cc115ba530d3cristy            if (endian < 0)
558605e80d8c89290e0b3119577f7c1cc115ba530d3cristy              ThrowIdentifyException(OptionError,"UnrecognizedEndianType",
559605e80d8c89290e0b3119577f7c1cc115ba530d3cristy                argv[i]);
560605e80d8c89290e0b3119577f7c1cc115ba530d3cristy            break;
561605e80d8c89290e0b3119577f7c1cc115ba530d3cristy          }
562605e80d8c89290e0b3119577f7c1cc115ba530d3cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
563605e80d8c89290e0b3119577f7c1cc115ba530d3cristy      }
5643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'f':
5653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
566549a37e6cd4593dcb997230cd3584c5afead5552cristy        if (LocaleCompare("features",option+1) == 0)
567cd483f1d951479be76dd654c398b11c17de2e17ecristy          {
568cd483f1d951479be76dd654c398b11c17de2e17ecristy            if (*option == '+')
569cd483f1d951479be76dd654c398b11c17de2e17ecristy              break;
570cd483f1d951479be76dd654c398b11c17de2e17ecristy            i++;
571e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
572cd483f1d951479be76dd654c398b11c17de2e17ecristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
573cd483f1d951479be76dd654c398b11c17de2e17ecristy            if (IsGeometry(argv[i]) == MagickFalse)
574cd483f1d951479be76dd654c398b11c17de2e17ecristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
575cd483f1d951479be76dd654c398b11c17de2e17ecristy            break;
576cd483f1d951479be76dd654c398b11c17de2e17ecristy          }
5773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("format",option+1) == 0)
5783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
5793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            format=(char *) NULL;
5803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
5813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
5823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
583bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
5843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
5853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            format=argv[i];
5863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
5873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
5883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("fuzz",option+1) == 0)
5893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
5903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
5913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
5923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
593e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
5943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
5953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (IsGeometry(argv[i]) == MagickFalse)
5963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
5973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
5983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
5993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
6003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
6013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'g':
6023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
6033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("gamma",option+1) == 0)
6043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
6053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
606e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
6073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
6083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (IsGeometry(argv[i]) == MagickFalse)
6093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
6103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
6113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
6120a09e9d7c5020869e171099665da2f2077cbaae8cristy        if (LocaleCompare("grayscale",option+1) == 0)
6130a09e9d7c5020869e171099665da2f2077cbaae8cristy          {
6140a09e9d7c5020869e171099665da2f2077cbaae8cristy            ssize_t
6150a09e9d7c5020869e171099665da2f2077cbaae8cristy              method;
6160a09e9d7c5020869e171099665da2f2077cbaae8cristy
6170a09e9d7c5020869e171099665da2f2077cbaae8cristy            if (*option == '+')
6180a09e9d7c5020869e171099665da2f2077cbaae8cristy              break;
6190a09e9d7c5020869e171099665da2f2077cbaae8cristy            i++;
620e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
6210a09e9d7c5020869e171099665da2f2077cbaae8cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
6220a09e9d7c5020869e171099665da2f2077cbaae8cristy            method=ParseCommandOption(MagickPixelIntensityOptions,MagickFalse,
6230a09e9d7c5020869e171099665da2f2077cbaae8cristy              argv[i]);
6240a09e9d7c5020869e171099665da2f2077cbaae8cristy            if (method < 0)
6250a09e9d7c5020869e171099665da2f2077cbaae8cristy              ThrowIdentifyException(OptionError,"UnrecognizedIntensityMethod",
6260a09e9d7c5020869e171099665da2f2077cbaae8cristy                argv[i]);
6270a09e9d7c5020869e171099665da2f2077cbaae8cristy            break;
6280a09e9d7c5020869e171099665da2f2077cbaae8cristy          }
6290a09e9d7c5020869e171099665da2f2077cbaae8cristy        if (LocaleCompare("green-primary",option+1) == 0)
6300a09e9d7c5020869e171099665da2f2077cbaae8cristy          {
6310a09e9d7c5020869e171099665da2f2077cbaae8cristy            if (*option == '+')
6320a09e9d7c5020869e171099665da2f2077cbaae8cristy              break;
6330a09e9d7c5020869e171099665da2f2077cbaae8cristy            i++;
634e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
6350a09e9d7c5020869e171099665da2f2077cbaae8cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
6360a09e9d7c5020869e171099665da2f2077cbaae8cristy            if (IsGeometry(argv[i]) == MagickFalse)
6370a09e9d7c5020869e171099665da2f2077cbaae8cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
6380a09e9d7c5020869e171099665da2f2077cbaae8cristy            break;
6390a09e9d7c5020869e171099665da2f2077cbaae8cristy          }
6403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
6413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
6423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'h':
6433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
6443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if ((LocaleCompare("help",option+1) == 0) ||
6453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            (LocaleCompare("-help",option+1) == 0))
6463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          return(IdentifyUsage());
6473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
6483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
6493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'i':
6503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
6513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("interlace",option+1) == 0)
6523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
653bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            ssize_t
6543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              interlace;
6553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
6573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
6583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
659bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
6603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
661042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy            interlace=ParseCommandOption(MagickInterlaceOptions,MagickFalse,
6623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              argv[i]);
6633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (interlace < 0)
6643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,
6653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                "UnrecognizedInterlaceType",argv[i]);
6663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
6673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
6683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("interpolate",option+1) == 0)
6693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
670bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            ssize_t
6713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              interpolate;
6723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
6743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
6753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
676bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
6773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
678042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy            interpolate=ParseCommandOption(MagickInterpolateOptions,MagickFalse,
6793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              argv[i]);
6803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (interpolate < 0)
6813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,
6823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                "UnrecognizedInterpolateMethod",argv[i]);
6833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
6843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
6853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
6863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
6873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'l':
6883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
6893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("limit",option+1) == 0)
6903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
6913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            char
6923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              *p;
6933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
6943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            double
6953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              value;
6963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
697bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            ssize_t
6983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              resource;
6993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
7013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
7023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
703bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
7043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
705042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy            resource=ParseCommandOption(MagickResourceOptions,MagickFalse,
7063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              argv[i]);
7073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (resource < 0)
7083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"UnrecognizedResourceType",
7093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                argv[i]);
7103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
711bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
7123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
713dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy            value=StringToDouble(argv[i],&p);
714da16f16767eb31921af855f17bda465fffc4e000cristy            (void) value;
7153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
7163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
7173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
7183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
7193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("list",option+1) == 0)
7203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
721bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            ssize_t
7223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              list;
7233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
7243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
7253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
7263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
727bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
7283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
729042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy            list=ParseCommandOption(MagickListOptions,MagickFalse,argv[i]);
7303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (list < 0)
7313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"UnrecognizedListType",
7323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                argv[i]);
733aeb2cbc4eb61cc6a04744db1dc52f5319c466e29cristy            status=MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
7343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              argv+j,exception);
7353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            DestroyIdentify();
73632ce2391bb7051ac53c7c3c25d3ad8f41836824dcristy            return(status == 0 ? MagickTrue : MagickFalse);
7373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
7383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("log",option+1) == 0)
7393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
7403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
7413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
7423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
743bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if ((i == (ssize_t) argc) ||
7443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                (strchr(argv[i],'%') == (char *) NULL))
7453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
7463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
7473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
7483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
7493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
7503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'm':
7513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
7525048d30ffd6670a4b4c9986bbcb46b228afdd884cristy        if (LocaleCompare("mask",option+1) == 0)
7535048d30ffd6670a4b4c9986bbcb46b228afdd884cristy          {
7545048d30ffd6670a4b4c9986bbcb46b228afdd884cristy            if (*option == '+')
7555048d30ffd6670a4b4c9986bbcb46b228afdd884cristy              break;
7565048d30ffd6670a4b4c9986bbcb46b228afdd884cristy            i++;
757e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
7585048d30ffd6670a4b4c9986bbcb46b228afdd884cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
7595048d30ffd6670a4b4c9986bbcb46b228afdd884cristy            break;
7605048d30ffd6670a4b4c9986bbcb46b228afdd884cristy          }
7613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("matte",option+1) == 0)
7623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
763e444b04b07c0777f3059c1cd0a897ba90bbb0d45cristy        if (LocaleCompare("moments",option+1) == 0)
764d12341f93d69d6eaea921232a7662755226ee453cristy          break;
7653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("monitor",option+1) == 0)
7663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
7673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
7683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
769e48c6a917e8d2f5a1af59492e771f760c04a7824cristy      case 'n':
770e48c6a917e8d2f5a1af59492e771f760c04a7824cristy      {
771e48c6a917e8d2f5a1af59492e771f760c04a7824cristy        if (LocaleCompare("negate",option+1) == 0)
772e48c6a917e8d2f5a1af59492e771f760c04a7824cristy          break;
773e48c6a917e8d2f5a1af59492e771f760c04a7824cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
774e48c6a917e8d2f5a1af59492e771f760c04a7824cristy      }
7753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'p':
7763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
7773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("ping",option+1) == 0)
7783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
779a1b1486951e2507b7c645831dbcc8f10428d8917cristy        if (LocaleCompare("precision",option+1) == 0)
780a1b1486951e2507b7c645831dbcc8f10428d8917cristy          {
781a1b1486951e2507b7c645831dbcc8f10428d8917cristy            if (*option == '+')
782a1b1486951e2507b7c645831dbcc8f10428d8917cristy              break;
783a1b1486951e2507b7c645831dbcc8f10428d8917cristy            i++;
784e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
785a1b1486951e2507b7c645831dbcc8f10428d8917cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
786a1b1486951e2507b7c645831dbcc8f10428d8917cristy            if (IsGeometry(argv[i]) == MagickFalse)
787a1b1486951e2507b7c645831dbcc8f10428d8917cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
788a1b1486951e2507b7c645831dbcc8f10428d8917cristy            break;
789a1b1486951e2507b7c645831dbcc8f10428d8917cristy          }
7903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
7913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
7923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'q':
7933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
7943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("quiet",option+1) == 0)
7953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
7963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
7973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
7983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'r':
7993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
8003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("regard-warnings",option+1) == 0)
8013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
8023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
8033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
8043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
8053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
8063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
8073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
8083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
8093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 's':
8103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
8113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("sampling-factor",option+1) == 0)
8123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
8133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
8143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
8153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
816bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
8173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
8183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (IsGeometry(argv[i]) == MagickFalse)
8193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
8203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
8213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
8223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("seed",option+1) == 0)
8233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
8243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
8253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
8263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
827e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
8283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
8293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (IsGeometry(argv[i]) == MagickFalse)
8303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
8313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
8323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
8333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("set",option+1) == 0)
8343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
8353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
836bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
8373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
8383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
8393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
8403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
841bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
8423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
8433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
8443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
8453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("size",option+1) == 0)
8463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
8473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
8483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
8493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
850bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
8513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
8523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (IsGeometry(argv[i]) == MagickFalse)
8533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
8543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
8553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
8563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("strip",option+1) == 0)
8573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
8583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("support",option+1) == 0)
8593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
8603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
8613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
8623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
863bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            if (i == (ssize_t) argc)
8643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
8653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (IsGeometry(argv[i]) == MagickFalse)
8663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyInvalidArgumentException(option,argv[i]);
8673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
8683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
8693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
8703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
8713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'u':
8723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
873045bd909148720f6ee8bc910eab96fa057b54a5fcristy        if (LocaleCompare("unique",option+1) == 0)
874045bd909148720f6ee8bc910eab96fa057b54a5fcristy          break;
8753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("units",option+1) == 0)
8763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
877bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            ssize_t
8783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              units;
8793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
8803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
8813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
8823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
883e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
8843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
885042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy            units=ParseCommandOption(MagickResolutionOptions,MagickFalse,
8863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              argv[i]);
8873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (units < 0)
8883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"UnrecognizedUnitsType",
8893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                argv[i]);
8903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
8913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
8923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
8933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
8943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case 'v':
8953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      {
8963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("verbose",option+1) == 0)
8973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          break;
8983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        if (LocaleCompare("virtual-pixel",option+1) == 0)
8993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          {
900bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy            ssize_t
9013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              method;
9023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
9033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (*option == '+')
9043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              break;
9053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            i++;
906e81f552f8ca2fc16632bd9830db3f93af07d514ccristy            if (i == (ssize_t) argc)
9073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,"MissingArgument",option);
908042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy            method=ParseCommandOption(MagickVirtualPixelOptions,MagickFalse,
9093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              argv[i]);
9103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            if (method < 0)
9113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ThrowIdentifyException(OptionError,
9123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                "UnrecognizedVirtualPixelMethod",argv[i]);
9133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            break;
9143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          }
9153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
9163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      }
9173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      case '?':
9183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        break;
9193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      default:
9203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        ThrowIdentifyException(OptionError,"UnrecognizedOption",option)
9213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
922042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy    fire=(GetCommandOptionFlags(MagickCommandOptions,MagickFalse,option) &
923042ee78fa9004bf1ac6a95f09d9d1faca631dda1cristy      FireOptionFlag) == 0 ?  MagickFalse : MagickTrue;
9243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    if (fire != MagickFalse)
9253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      FireImageStack(MagickFalse,MagickTrue,MagickTrue);
9263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  }
9273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  if (k != 0)
9283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    ThrowIdentifyException(OptionError,"UnbalancedParenthesis",argv[i]);
929cee9711bbc334b5677d5ec4ea1cc70340d35ee35cristy  if (i != (ssize_t) argc)
9303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    ThrowIdentifyException(OptionError,"MissingAnImageFilename",argv[i]);
9313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  DestroyIdentify();
9323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(status != 0 ? MagickTrue : MagickFalse);
9333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
934