text: /* Copyright (c) 2009 Robert Kooima                                           */
  /*                                                                            */
  /* Permission is hereby granted, free of charge, to any person obtaining a    */
  /* copy of this software and associated documentation files (the "Software"), */
  /* to deal in the Software without restriction, including without limitation  */
  /* the rights to use, copy, modify, merge, publish, distribute, sublicense,   */
  /* and/or sell copies of the Software, and to permit persons to whom the      */
  /* Software is furnished to do so, subject to the following conditions:       */
  /*                                                                            */
  /* The above copyright notice and this permission notice shall be included in */
  /* all copies or substantial portions of the Software.                        */
  /*                                                                            */
  /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
  /* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   */
  /* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    */
  /* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
  /* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    */
  /* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        */
  /* DEALINGS IN THE SOFTWARE.                                                  */
  
  #include <assert.h>
  #include <string.h>
  #include <stdlib.h>
  #include <stdio.h>
  #include <errno.h>
  #include <math.h>
  
  #include <GL/glew.h>
  
  /* NOTE: Channel byte count implies channel storage type:                     */
  /*     b = 1 selects unsigned byte                                            */
  /*     b = 2 selects unsigned short                                           */
  /*     b = 4 selects float                                                    */
  
  #define CONFIG_NO_EXR 1
  
  /*----------------------------------------------------------------------------*/
  
  /* Generic Gray Gamma 2.2 Profile                                             */
  /* Copyright (C) 2008 Apple Inc.                                              */
  
  unsigned char gray_icc[] = {
    0x00, 0x00, 0x11, 0x90, 0x61, 0x70, 0x70, 0x6c, 0x02, 0x00, 0x00, 0x00,
    0x6d, 0x6e, 0x74, 0x72, 0x47, 0x52, 0x41, 0x59, 0x58, 0x59, 0x5a, 0x20,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x61, 0x63, 0x73, 0x70, 0x41, 0x50, 0x50, 0x4c, 0x00, 0x00, 0x00, 0x00,
    0x6e, 0x6f, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6,
    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x61, 0x70, 0x70, 0x6c,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
    0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x79,
    0x64, 0x73, 0x63, 0x6d, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x08, 0x10,
    0x63, 0x70, 0x72, 0x74, 0x00, 0x00, 0x09, 0x4c, 0x00, 0x00, 0x00, 0x23,
    0x77, 0x74, 0x70, 0x74, 0x00, 0x00, 0x09, 0x70, 0x00, 0x00, 0x00, 0x14,
    0x6b, 0x54, 0x52, 0x43, 0x00, 0x00, 0x09, 0x84, 0x00, 0x00, 0x08, 0x0c,
    0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
    0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x20, 0x47, 0x72, 0x61, 0x79,
    0x20, 0x47, 0x61, 0x6d, 0x6d, 0x61, 0x20, 0x32, 0x2e, 0x32, 0x20, 0x50,
    0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x6d, 0x6c, 0x75, 0x63, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0c, 0x73, 0x6b, 0x53, 0x4b,
    0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x01, 0x78, 0x68, 0x72, 0x48, 0x52,
    0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0xa6, 0x63, 0x61, 0x45, 0x53,
    0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x01, 0xe4, 0x70, 0x74, 0x42, 0x52,
    0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x02, 0x90, 0x75, 0x6b, 0x55, 0x41,
    0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x02, 0xda, 0x66, 0x72, 0x46, 0x55,
    0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x03, 0x06, 0x7a, 0x68, 0x54, 0x57,
    0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x03, 0x44, 0x69, 0x74, 0x49, 0x54,
    0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x03, 0x62, 0x6e, 0x62, 0x4e, 0x4f,
    0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x03, 0xb0, 0x6b, 0x6f, 0x4b, 0x52,
    0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x03, 0xea, 0x63, 0x73, 0x43, 0x5a,
    0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x04, 0x0c, 0x68, 0x65, 0x49, 0x4c,
    0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x04, 0x34, 0x64, 0x65, 0x44, 0x45,
    0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x04, 0x58, 0x68, 0x75, 0x48, 0x55,
    0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x04, 0xa6, 0x73, 0x76, 0x53, 0x45,
    0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x04, 0xda, 0x7a, 0x68, 0x43, 0x4e,
    0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x05, 0x12, 0x6a, 0x61, 0x4a, 0x50,
    0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x05, 0x30, 0x72, 0x6f, 0x52, 0x4f,
    0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x05, 0x56, 0x65, 0x6c, 0x47, 0x52,
    0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x05, 0x80, 0x70, 0x74, 0x50, 0x4f,
    0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x05, 0xaa, 0x6e, 0x6c, 0x4e, 0x4c,
    0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x05, 0xfc, 0x65, 0x73, 0x45, 0x53,
    0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x06, 0x3c, 0x74, 0x68, 0x54, 0x48,
    0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x06, 0x88, 0x74, 0x72, 0x54, 0x52,
    0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x06, 0xba, 0x66, 0x69, 0x46, 0x49,
    0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x06, 0xde, 0x70, 0x6c, 0x50, 0x4c,
    0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x07, 0x24, 0x72, 0x75, 0x52, 0x55,
    0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x07, 0x6e, 0x61, 0x72, 0x45, 0x47,
    0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x07, 0xa8, 0x65, 0x6e, 0x55, 0x53,
    0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x07, 0xd4, 0x64, 0x61, 0x44, 0x4b,
    0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x04, 0xda, 0x00, 0x56, 0x01, 0x61,
    0x00, 0x65, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x65, 0x00, 0x63, 0x00, 0x6e,
    0x00, 0xe1, 0x00, 0x20, 0x00, 0x73, 0x00, 0x69, 0x00, 0x76, 0x00, 0xe1,
    0x00, 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x20,
    0x00, 0x32, 0x00, 0x2c, 0x00, 0x32, 0x00, 0x47, 0x00, 0x65, 0x00, 0x6e,
    0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x01, 0x0d, 0x00, 0x6b, 0x00, 0x69,
    0x00, 0x20, 0x00, 0x47, 0x00, 0x72, 0x00, 0x61, 0x00, 0x79, 0x00, 0x20,
    0x00, 0x47, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x20,
    0x00, 0x32, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x20, 0x00, 0x70, 0x00, 0x72,
    0x00, 0x6f, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x47, 0x00, 0x61,
    0x00, 0x6d, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65,
    0x00, 0x20, 0x00, 0x67, 0x00, 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f,
    0x00, 0x73, 0x00, 0x20, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0xe8,
    0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x20, 0x00, 0x32,
    0x00, 0x2e, 0x00, 0x32, 0x00, 0x0a, 0x00, 0x47, 0x00, 0x61, 0x00, 0x6d,
    0x00, 0x6d, 0x00, 0x61, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x00, 0x20,
    0x00, 0x67, 0x00, 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x73,
    0x00, 0x20, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0xe8, 0x00, 0x72,
    0x00, 0x69, 0x00, 0x63, 0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e,
    0x00, 0x32, 0x00, 0x0a, 0x00, 0x47, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x6d,
    0x00, 0x61, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x00, 0x20, 0x00, 0x67,
    0x00, 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x73, 0x00, 0x20,
    0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0xe8, 0x00, 0x72, 0x00, 0x69,
    0x00, 0x63, 0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32,
    0x00, 0x50, 0x00, 0x65, 0x00, 0x72, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6c,
    0x00, 0x20, 0x00, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0xe9, 0x00, 0x72,
    0x00, 0x69, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61,
    0x00, 0x20, 0x00, 0x47, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x20,
    0x00, 0x64, 0x00, 0x65, 0x00, 0x20, 0x00, 0x43, 0x00, 0x69, 0x00, 0x6e,
    0x00, 0x7a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2c,
    0x00, 0x32, 0x04, 0x17, 0x04, 0x30, 0x04, 0x33, 0x04, 0x30, 0x04, 0x3b,
    0x04, 0x4c, 0x04, 0x3d, 0x04, 0x30, 0x00, 0x20, 0x00, 0x47, 0x00, 0x72,
    0x00, 0x61, 0x00, 0x79, 0x00, 0x2d, 0x04, 0x33, 0x04, 0x30, 0x04, 0x3c,
    0x04, 0x30, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x50,
    0x00, 0x72, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x20,
    0x00, 0x67, 0x00, 0xe9, 0x00, 0x6e, 0x00, 0xe9, 0x00, 0x72, 0x00, 0x69,
    0x00, 0x71, 0x00, 0x75, 0x00, 0x65, 0x00, 0x20, 0x00, 0x67, 0x00, 0x72,
    0x00, 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6d,
    0x00, 0x6d, 0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x32,
    0x90, 0x1a, 0x75, 0x28, 0x70, 0x70, 0x96, 0x8e, 0x51, 0x49, 0x5e, 0xa6,
    0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x20, 0x82, 0x72,
    0x5f, 0x69, 0x63, 0xcf, 0x8f, 0xf0, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6f,
    0x00, 0x66, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x67,
    0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x20,
    0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69,
    0x00, 0x63, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6c,
    0x00, 0x6c, 0x00, 0x61, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6d,
    0x00, 0x6d, 0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x32,
    0x00, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69,
    0x00, 0x73, 0x00, 0x6b, 0x00, 0x20, 0x00, 0x67, 0x00, 0x72, 0x00, 0xe5,
    0x00, 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x6d, 0x00, 0x61,
    0x00, 0x20, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x70,
    0x00, 0x72, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6c, 0xc7, 0x7c,
    0xbc, 0x18, 0x00, 0x20, 0xd6, 0x8c, 0xc0, 0xc9, 0x00, 0x20, 0xac, 0x10,
    0xb9, 0xc8, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x20,
    0xd5, 0x04, 0xb8, 0x5c, 0xd3, 0x0c, 0xc7, 0x7c, 0x00, 0x4f, 0x00, 0x62,
    0x00, 0x65, 0x00, 0x63, 0x00, 0x6e, 0x00, 0xe1, 0x00, 0x20, 0x01, 0x61,
    0x00, 0x65, 0x00, 0x64, 0x00, 0xe1, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61,
    0x00, 0x6d, 0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32,
    0x05, 0xd2, 0x05, 0xd0, 0x05, 0xde, 0x05, 0xd4, 0x00, 0x20, 0x05, 0xd0,
    0x05, 0xe4, 0x05, 0xd5, 0x05, 0xe8, 0x00, 0x20, 0x05, 0xdb, 0x05, 0xdc,
    0x05, 0xdc, 0x05, 0xd9, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32,
    0x00, 0x41, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6d,
    0x00, 0x65, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x73, 0x00, 0x20,
    0x00, 0x47, 0x00, 0x72, 0x00, 0x61, 0x00, 0x75, 0x00, 0x73, 0x00, 0x74,
    0x00, 0x75, 0x00, 0x66, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x50,
    0x00, 0x72, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x20,
    0x00, 0x47, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x20,
    0x00, 0x32, 0x00, 0x2c, 0x00, 0x32, 0x00, 0xc1, 0x00, 0x6c, 0x00, 0x74,
    0x00, 0x61, 0x00, 0x6c, 0x00, 0xe1, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x73,
    0x00, 0x20, 0x00, 0x73, 0x00, 0x7a, 0x00, 0xfc, 0x00, 0x72, 0x00, 0x6b,
    0x00, 0x65, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x6d,
    0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x47,
    0x00, 0x65, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x73,
    0x00, 0x6b, 0x00, 0x20, 0x00, 0x67, 0x00, 0x72, 0x00, 0xe5, 0x00, 0x20,
    0x00, 0x32, 0x00, 0x2c, 0x00, 0x32, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61,
    0x00, 0x6d, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6f,
    0x00, 0x66, 0x00, 0x69, 0x00, 0x6c, 0x90, 0x1a, 0x75, 0x28, 0x70, 0x70,
    0x5e, 0xa6, 0x7c, 0xfb, 0x65, 0x70, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e,
    0x00, 0x32, 0x00, 0x20, 0x63, 0xcf, 0x8f, 0xf0, 0x65, 0x87, 0x4e, 0xf6,
    0x4e, 0x00, 0x82, 0x2c, 0x30, 0xb0, 0x30, 0xec, 0x30, 0xa4, 0x30, 0xac,
    0x30, 0xf3, 0x30, 0xde, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32,
    0x00, 0x20, 0x30, 0xd7, 0x30, 0xed, 0x30, 0xd5, 0x30, 0xa1, 0x30, 0xa4,
    0x30, 0xeb, 0x00, 0x47, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x20,
    0x00, 0x67, 0x00, 0x72, 0x00, 0x69, 0x00, 0x20, 0x00, 0x67, 0x00, 0x65,
    0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x01, 0x03,
    0x00, 0x20, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x32, 0x03, 0x93, 0x03, 0xb5,
    0x03, 0xbd, 0x03, 0xb9, 0x03, 0xba, 0x03, 0xcc, 0x00, 0x20, 0x03, 0x93,
    0x03, 0xba, 0x03, 0xc1, 0x03, 0xb9, 0x00, 0x20, 0x03, 0x93, 0x03, 0xac,
    0x03, 0xbc, 0x03, 0xbc, 0x03, 0xb1, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e,
    0x00, 0x32, 0x00, 0x50, 0x00, 0x65, 0x00, 0x72, 0x00, 0x66, 0x00, 0x69,
    0x00, 0x6c, 0x00, 0x20, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0xe9,
    0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x64,
    0x00, 0x65, 0x00, 0x20, 0x00, 0x63, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x7a,
    0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x73, 0x00, 0x20,
    0x00, 0x64, 0x00, 0x61, 0x00, 0x20, 0x00, 0x47, 0x00, 0x61, 0x00, 0x6d,
    0x00, 0x6d, 0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x32,
    0x00, 0x41, 0x00, 0x6c, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x65,
    0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x67, 0x00, 0x72, 0x00, 0x69,
    0x00, 0x6a, 0x00, 0x73, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6d,
    0x00, 0x6d, 0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x32,
    0x00, 0x2d, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x69,
    0x00, 0x65, 0x00, 0x6c, 0x00, 0x50, 0x00, 0x65, 0x00, 0x72, 0x00, 0x66,
    0x00, 0x69, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e,
    0x00, 0xe9, 0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x20,
    0x00, 0x64, 0x00, 0x65, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6d,
    0x00, 0x6d, 0x00, 0x61, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x00, 0x20,
    0x00, 0x67, 0x00, 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, 0x65, 0x00, 0x73,
    0x00, 0x20, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x32, 0x0e, 0x23, 0x0e, 0x31,
    0x0e, 0x07, 0x0e, 0x2a, 0x0e, 0x35, 0x0e, 0x41, 0x0e, 0x01, 0x0e, 0x21,
    0x0e, 0x21, 0x0e, 0x32, 0x0e, 0x40, 0x0e, 0x01, 0x0e, 0x23, 0x0e, 0x22,
    0x0e, 0x4c, 0x0e, 0x17, 0x0e, 0x31, 0x0e, 0x48, 0x0e, 0x27, 0x0e, 0x44,
    0x0e, 0x1b, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x47,
    0x00, 0x65, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x47,
    0x00, 0x72, 0x00, 0x69, 0x00, 0x20, 0x00, 0x47, 0x00, 0x61, 0x00, 0x6d,
    0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x32, 0x00, 0x59,
    0x00, 0x6c, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x6e,
    0x00, 0x20, 0x00, 0x68, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x61,
    0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6d,
    0x00, 0x6d, 0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x32,
    0x00, 0x20, 0x00, 0x2d, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x66,
    0x00, 0x69, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x55, 0x00, 0x6e,
    0x00, 0x69, 0x00, 0x77, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x61,
    0x00, 0x6c, 0x00, 0x6e, 0x00, 0x79, 0x00, 0x20, 0x00, 0x70, 0x00, 0x72,
    0x00, 0x6f, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x73,
    0x00, 0x7a, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x01, 0x5b, 0x00, 0x63,
    0x00, 0x69, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x6d,
    0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x32, 0x04, 0x1e,
    0x04, 0x31, 0x04, 0x49, 0x04, 0x30, 0x04, 0x4f, 0x00, 0x20, 0x04, 0x41,
    0x04, 0x35, 0x04, 0x40, 0x04, 0x30, 0x04, 0x4f, 0x00, 0x20, 0x04, 0x33,
    0x04, 0x30, 0x04, 0x3c, 0x04, 0x3c, 0x04, 0x30, 0x00, 0x20, 0x00, 0x32,
    0x00, 0x2c, 0x00, 0x32, 0x00, 0x2d, 0x04, 0x3f, 0x04, 0x40, 0x04, 0x3e,
    0x04, 0x44, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x4c, 0x06, 0x3a, 0x06, 0x27,
    0x06, 0x45, 0x06, 0x27, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32,
    0x00, 0x20, 0x06, 0x44, 0x06, 0x48, 0x06, 0x46, 0x00, 0x20, 0x06, 0x31,
    0x06, 0x45, 0x06, 0x27, 0x06, 0x2f, 0x06, 0x4a, 0x00, 0x20, 0x06, 0x39,
    0x06, 0x27, 0x06, 0x45, 0x00, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x65,
    0x00, 0x72, 0x00, 0x69, 0x00, 0x63, 0x00, 0x20, 0x00, 0x47, 0x00, 0x72,
    0x00, 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x47, 0x00, 0x61, 0x00, 0x6d,
    0x00, 0x6d, 0x00, 0x61, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x32,
    0x00, 0x20, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x69,
    0x00, 0x6c, 0x00, 0x65, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, 0x00,
    0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x41, 0x70,
    0x70, 0x6c, 0x65, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x2c, 0x20, 0x32, 0x30,
    0x30, 0x38, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xf3, 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x16, 0xcc,
    0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
    0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x0f, 0x00, 0x14, 0x00, 0x19,
    0x00, 0x1e, 0x00, 0x23, 0x00, 0x28, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x37,
    0x00, 0x3b, 0x00, 0x40, 0x00, 0x45, 0x00, 0x4a, 0x00, 0x4f, 0x00, 0x54,
    0x00, 0x59, 0x00, 0x5e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6d, 0x00, 0x72,
    0x00, 0x77, 0x00, 0x7c, 0x00, 0x81, 0x00, 0x86, 0x00, 0x8b, 0x00, 0x90,
    0x00, 0x95, 0x00, 0x9a, 0x00, 0x9f, 0x00, 0xa4, 0x00, 0xa9, 0x00, 0xae,
    0x00, 0xb2, 0x00, 0xb7, 0x00, 0xbc, 0x00, 0xc1, 0x00, 0xc6, 0x00, 0xcb,
    0x00, 0xd0, 0x00, 0xd5, 0x00, 0xdb, 0x00, 0xe0, 0x00, 0xe5, 0x00, 0xeb,
    0x00, 0xf0, 0x00, 0xf6, 0x00, 0xfb, 0x01, 0x01, 0x01, 0x07, 0x01, 0x0d,
    0x01, 0x13, 0x01, 0x19, 0x01, 0x1f, 0x01, 0x25, 0x01, 0x2b, 0x01, 0x32,
    0x01, 0x38, 0x01, 0x3e, 0x01, 0x45, 0x01, 0x4c, 0x01, 0x52, 0x01, 0x59,
    0x01, 0x60, 0x01, 0x67, 0x01, 0x6e, 0x01, 0x75, 0x01, 0x7c, 0x01, 0x83,
    0x01, 0x8b, 0x01, 0x92, 0x01, 0x9a, 0x01, 0xa1, 0x01, 0xa9, 0x01, 0xb1,
    0x01, 0xb9, 0x01, 0xc1, 0x01, 0xc9, 0x01, 0xd1, 0x01, 0xd9, 0x01, 0xe1,
    0x01, 0xe9, 0x01, 0xf2, 0x01, 0xfa, 0x02, 0x03, 0x02, 0x0c, 0x02, 0x14,
    0x02, 0x1d, 0x02, 0x26, 0x02, 0x2f, 0x02, 0x38, 0x02, 0x41, 0x02, 0x4b,
    0x02, 0x54, 0x02, 0x5d, 0x02, 0x67, 0x02, 0x71, 0x02, 0x7a, 0x02, 0x84,
    0x02, 0x8e, 0x02, 0x98, 0x02, 0xa2, 0x02, 0xac, 0x02, 0xb6, 0x02, 0xc1,
    0x02, 0xcb, 0x02, 0xd5, 0x02, 0xe0, 0x02, 0xeb, 0x02, 0xf5, 0x03, 0x00,
    0x03, 0x0b, 0x03, 0x16, 0x03, 0x21, 0x03, 0x2d, 0x03, 0x38, 0x03, 0x43,
    0x03, 0x4f, 0x03, 0x5a, 0x03, 0x66, 0x03, 0x72, 0x03, 0x7e, 0x03, 0x8a,
    0x03, 0x96, 0x03, 0xa2, 0x03, 0xae, 0x03, 0xba, 0x03, 0xc7, 0x03, 0xd3,
    0x03, 0xe0, 0x03, 0xec, 0x03, 0xf9, 0x04, 0x06, 0x04, 0x13, 0x04, 0x20,
    0x04, 0x2d, 0x04, 0x3b, 0x04, 0x48, 0x04, 0x55, 0x04, 0x63, 0x04, 0x71,
    0x04, 0x7e, 0x04, 0x8c, 0x04, 0x9a, 0x04, 0xa8, 0x04, 0xb6, 0x04, 0xc4,
    0x04, 0xd3, 0x04, 0xe1, 0x04, 0xf0, 0x04, 0xfe, 0x05, 0x0d, 0x05, 0x1c,
    0x05, 0x2b, 0x05, 0x3a, 0x05, 0x49, 0x05, 0x58, 0x05, 0x67, 0x05, 0x77,
    0x05, 0x86, 0x05, 0x96, 0x05, 0xa6, 0x05, 0xb5, 0x05, 0xc5, 0x05, 0xd5,
    0x05, 0xe5, 0x05, 0xf6, 0x06, 0x06, 0x06, 0x16, 0x06, 0x27, 0x06, 0x37,
    0x06, 0x48, 0x06, 0x59, 0x06, 0x6a, 0x06, 0x7b, 0x06, 0x8c, 0x06, 0x9d,
    0x06, 0xaf, 0x06, 0xc0, 0x06, 0xd1, 0x06, 0xe3, 0x06, 0xf5, 0x07, 0x07,
    0x07, 0x19, 0x07, 0x2b, 0x07, 0x3d, 0x07, 0x4f, 0x07, 0x61, 0x07, 0x74,
    0x07, 0x86, 0x07, 0x99, 0x07, 0xac, 0x07, 0xbf, 0x07, 0xd2, 0x07, 0xe5,
    0x07, 0xf8, 0x08, 0x0b, 0x08, 0x1f, 0x08, 0x32, 0x08, 0x46, 0x08, 0x5a,
    0x08, 0x6e, 0x08, 0x82, 0x08, 0x96, 0x08, 0xaa, 0x08, 0xbe, 0x08, 0xd2,
    0x08, 0xe7, 0x08, 0xfb, 0x09, 0x10, 0x09, 0x25, 0x09, 0x3a, 0x09, 0x4f,
    0x09, 0x64, 0x09, 0x79, 0x09, 0x8f, 0x09, 0xa4, 0x09, 0xba, 0x09, 0xcf,
    0x09, 0xe5, 0x09, 0xfb, 0x0a, 0x11, 0x0a, 0x27, 0x0a, 0x3d, 0x0a, 0x54,
    0x0a, 0x6a, 0x0a, 0x81, 0x0a, 0x98, 0x0a, 0xae, 0x0a, 0xc5, 0x0a, 0xdc,
    0x0a, 0xf3, 0x0b, 0x0b, 0x0b, 0x22, 0x0b, 0x39, 0x0b, 0x51, 0x0b, 0x69,
    0x0b, 0x80, 0x0b, 0x98, 0x0b, 0xb0, 0x0b, 0xc8, 0x0b, 0xe1, 0x0b, 0xf9,
    0x0c, 0x12, 0x0c, 0x2a, 0x0c, 0x43, 0x0c, 0x5c, 0x0c, 0x75, 0x0c, 0x8e,
    0x0c, 0xa7, 0x0c, 0xc0, 0x0c, 0xd9, 0x0c, 0xf3, 0x0d, 0x0d, 0x0d, 0x26,
    0x0d, 0x40, 0x0d, 0x5a, 0x0d, 0x74, 0x0d, 0x8e, 0x0d, 0xa9, 0x0d, 0xc3,
    0x0d, 0xde, 0x0d, 0xf8, 0x0e, 0x13, 0x0e, 0x2e, 0x0e, 0x49, 0x0e, 0x64,
    0x0e, 0x7f, 0x0e, 0x9b, 0x0e, 0xb6, 0x0e, 0xd2, 0x0e, 0xee, 0x0f, 0x09,
    0x0f, 0x25, 0x0f, 0x41, 0x0f, 0x5e, 0x0f, 0x7a, 0x0f, 0x96, 0x0f, 0xb3,
    0x0f, 0xcf, 0x0f, 0xec, 0x10, 0x09, 0x10, 0x26, 0x10, 0x43, 0x10, 0x61,
    0x10, 0x7e, 0x10, 0x9b, 0x10, 0xb9, 0x10, 0xd7, 0x10, 0xf5, 0x11, 0x13,
    0x11, 0x31, 0x11, 0x4f, 0x11, 0x6d, 0x11, 0x8c, 0x11, 0xaa, 0x11, 0xc9,
    0x11, 0xe8, 0x12, 0x07, 0x12, 0x26, 0x12, 0x45, 0x12, 0x64, 0x12, 0x84,
    0x12, 0xa3, 0x12, 0xc3, 0x12, 0xe3, 0x13, 0x03, 0x13, 0x23, 0x13, 0x43,
    0x13, 0x63, 0x13, 0x83, 0x13, 0xa4, 0x13, 0xc5, 0x13, 0xe5, 0x14, 0x06,
    0x14, 0x27, 0x14, 0x49, 0x14, 0x6a, 0x14, 0x8b, 0x14, 0xad, 0x14, 0xce,
    0x14, 0xf0, 0x15, 0x12, 0x15, 0x34, 0x15, 0x56, 0x15, 0x78, 0x15, 0x9b,
    0x15, 0xbd, 0x15, 0xe0, 0x16, 0x03, 0x16, 0x26, 0x16, 0x49, 0x16, 0x6c,
    0x16, 0x8f, 0x16, 0xb2, 0x16, 0xd6, 0x16, 0xfa, 0x17, 0x1d, 0x17, 0x41,
    0x17, 0x65, 0x17, 0x89, 0x17, 0xae, 0x17, 0xd2, 0x17, 0xf7, 0x18, 0x1b,
    0x18, 0x40, 0x18, 0x65, 0x18, 0x8a, 0x18, 0xaf, 0x18, 0xd5, 0x18, 0xfa,
    0x19, 0x20, 0x19, 0x45, 0x19, 0x6b, 0x19, 0x91, 0x19, 0xb7, 0x19, 0xdd,
    0x1a, 0x04, 0x1a, 0x2a, 0x1a, 0x51, 0x1a, 0x77, 0x1a, 0x9e, 0x1a, 0xc5,
    0x1a, 0xec, 0x1b, 0x14, 0x1b, 0x3b, 0x1b, 0x63, 0x1b, 0x8a, 0x1b, 0xb2,
    0x1b, 0xda, 0x1c, 0x02, 0x1c, 0x2a, 0x1c, 0x52, 0x1c, 0x7b, 0x1c, 0xa3,
    0x1c, 0xcc, 0x1c, 0xf5, 0x1d, 0x1e, 0x1d, 0x47, 0x1d, 0x70, 0x1d, 0x99,
    0x1d, 0xc3, 0x1d, 0xec, 0x1e, 0x16, 0x1e, 0x40, 0x1e, 0x6a, 0x1e, 0x94,
    0x1e, 0xbe, 0x1e, 0xe9, 0x1f, 0x13, 0x1f, 0x3e, 0x1f, 0x69, 0x1f, 0x94,
    0x1f, 0xbf, 0x1f, 0xea, 0x20, 0x15, 0x20, 0x41, 0x20, 0x6c, 0x20, 0x98,
    0x20, 0xc4, 0x20, 0xf0, 0x21, 0x1c, 0x21, 0x48, 0x21, 0x75, 0x21, 0xa1,
    0x21, 0xce, 0x21, 0xfb, 0x22, 0x27, 0x22, 0x55, 0x22, 0x82, 0x22, 0xaf,
    0x22, 0xdd, 0x23, 0x0a, 0x23, 0x38, 0x23, 0x66, 0x23, 0x94, 0x23, 0xc2,
    0x23, 0xf0, 0x24, 0x1f, 0x24, 0x4d, 0x24, 0x7c, 0x24, 0xab, 0x24, 0xda,
    0x25, 0x09, 0x25, 0x38, 0x25, 0x68, 0x25, 0x97, 0x25, 0xc7, 0x25, 0xf7,
    0x26, 0x27, 0x26, 0x57, 0x26, 0x87, 0x26, 0xb7, 0x26, 0xe8, 0x27, 0x18,
    0x27, 0x49, 0x27, 0x7a, 0x27, 0xab, 0x27, 0xdc, 0x28, 0x0d, 0x28, 0x3f,
    0x28, 0x71, 0x28, 0xa2, 0x28, 0xd4, 0x29, 0x06, 0x29, 0x38, 0x29, 0x6b,
    0x29, 0x9d, 0x29, 0xd0, 0x2a, 0x02, 0x2a, 0x35, 0x2a, 0x68, 0x2a, 0x9b,
    0x2a, 0xcf, 0x2b, 0x02, 0x2b, 0x36, 0x2b, 0x69, 0x2b, 0x9d, 0x2b, 0xd1,
    0x2c, 0x05, 0x2c, 0x39, 0x2c, 0x6e, 0x2c, 0xa2, 0x2c, 0xd7, 0x2d, 0x0c,
    0x2d, 0x41, 0x2d, 0x76, 0x2d, 0xab, 0x2d, 0xe1, 0x2e, 0x16, 0x2e, 0x4c,
    0x2e, 0x82, 0x2e, 0xb7, 0x2e, 0xee, 0x2f, 0x24, 0x2f, 0x5a, 0x2f, 0x91,
    0x2f, 0xc7, 0x2f, 0xfe, 0x30, 0x35, 0x30, 0x6c, 0x30, 0xa4, 0x30, 0xdb,
    0x31, 0x12, 0x31, 0x4a, 0x31, 0x82, 0x31, 0xba, 0x31, 0xf2, 0x32, 0x2a,
    0x32, 0x63, 0x32, 0x9b, 0x32, 0xd4, 0x33, 0x0d, 0x33, 0x46, 0x33, 0x7f,
    0x33, 0xb8, 0x33, 0xf1, 0x34, 0x2b, 0x34, 0x65, 0x34, 0x9e, 0x34, 0xd8,
    0x35, 0x13, 0x35, 0x4d, 0x35, 0x87, 0x35, 0xc2, 0x35, 0xfd, 0x36, 0x37,
    0x36, 0x72, 0x36, 0xae, 0x36, 0xe9, 0x37, 0x24, 0x37, 0x60, 0x37, 0x9c,
    0x37, 0xd7, 0x38, 0x14, 0x38, 0x50, 0x38, 0x8c, 0x38, 0xc8, 0x39, 0x05,
    0x39, 0x42, 0x39, 0x7f, 0x39, 0xbc, 0x39, 0xf9, 0x3a, 0x36, 0x3a, 0x74,
    0x3a, 0xb2, 0x3a, 0xef, 0x3b, 0x2d, 0x3b, 0x6b, 0x3b, 0xaa, 0x3b, 0xe8,
    0x3c, 0x27, 0x3c, 0x65, 0x3c, 0xa4, 0x3c, 0xe3, 0x3d, 0x22, 0x3d, 0x61,
    0x3d, 0xa1, 0x3d, 0xe0, 0x3e, 0x20, 0x3e, 0x60, 0x3e, 0xa0, 0x3e, 0xe0,
    0x3f, 0x21, 0x3f, 0x61, 0x3f, 0xa2, 0x3f, 0xe2, 0x40, 0x23, 0x40, 0x64,
    0x40, 0xa6, 0x40, 0xe7, 0x41, 0x29, 0x41, 0x6a, 0x41, 0xac, 0x41, 0xee,
    0x42, 0x30, 0x42, 0x72, 0x42, 0xb5, 0x42, 0xf7, 0x43, 0x3a, 0x43, 0x7d,
    0x43, 0xc0, 0x44, 0x03, 0x44, 0x47, 0x44, 0x8a, 0x44, 0xce, 0x45, 0x12,
    0x45, 0x55, 0x45, 0x9a, 0x45, 0xde, 0x46, 0x22, 0x46, 0x67, 0x46, 0xab,
    0x46, 0xf0, 0x47, 0x35, 0x47, 0x7b, 0x47, 0xc0, 0x48, 0x05, 0x48, 0x4b,
    0x48, 0x91, 0x48, 0xd7, 0x49, 0x1d, 0x49, 0x63, 0x49, 0xa9, 0x49, 0xf0,
    0x4a, 0x37, 0x4a, 0x7d, 0x4a, 0xc4, 0x4b, 0x0c, 0x4b, 0x53, 0x4b, 0x9a,
    0x4b, 0xe2, 0x4c, 0x2a, 0x4c, 0x72, 0x4c, 0xba, 0x4d, 0x02, 0x4d, 0x4a,
    0x4d, 0x93, 0x4d, 0xdc, 0x4e, 0x25, 0x4e, 0x6e, 0x4e, 0xb7, 0x4f, 0x00,
    0x4f, 0x49, 0x4f, 0x93, 0x4f, 0xdd, 0x50, 0x27, 0x50, 0x71, 0x50, 0xbb,
    0x51, 0x06, 0x51, 0x50, 0x51, 0x9b, 0x51, 0xe6, 0x52, 0x31, 0x52, 0x7c,
    0x52, 0xc7, 0x53, 0x13, 0x53, 0x5f, 0x53, 0xaa, 0x53, 0xf6, 0x54, 0x42,
    0x54, 0x8f, 0x54, 0xdb, 0x55, 0x28, 0x55, 0x75, 0x55, 0xc2, 0x56, 0x0f,
    0x56, 0x5c, 0x56, 0xa9, 0x56, 0xf7, 0x57, 0x44, 0x57, 0x92, 0x57, 0xe0,
    0x58, 0x2f, 0x58, 0x7d, 0x58, 0xcb, 0x59, 0x1a, 0x59, 0x69, 0x59, 0xb8,
    0x5a, 0x07, 0x5a, 0x56, 0x5a, 0xa6, 0x5a, 0xf5, 0x5b, 0x45, 0x5b, 0x95,
    0x5b, 0xe5, 0x5c, 0x35, 0x5c, 0x86, 0x5c, 0xd6, 0x5d, 0x27, 0x5d, 0x78,
    0x5d, 0xc9, 0x5e, 0x1a, 0x5e, 0x6c, 0x5e, 0xbd, 0x5f, 0x0f, 0x5f, 0x61,
    0x5f, 0xb3, 0x60, 0x05, 0x60, 0x57, 0x60, 0xaa, 0x60, 0xfc, 0x61, 0x4f,
    0x61, 0xa2, 0x61, 0xf5, 0x62, 0x49, 0x62, 0x9c, 0x62, 0xf0, 0x63, 0x43,
    0x63, 0x97, 0x63, 0xeb, 0x64, 0x40, 0x64, 0x94, 0x64, 0xe9, 0x65, 0x3d,
    0x65, 0x92, 0x65, 0xe7, 0x66, 0x3d, 0x66, 0x92, 0x66, 0xe8, 0x67, 0x3d,
    0x67, 0x93, 0x67, 0xe9, 0x68, 0x3f, 0x68, 0x96, 0x68, 0xec, 0x69, 0x43,
    0x69, 0x9a, 0x69, 0xf1, 0x6a, 0x48, 0x6a, 0x9f, 0x6a, 0xf7, 0x6b, 0x4f,
    0x6b, 0xa7, 0x6b, 0xff, 0x6c, 0x57, 0x6c, 0xaf, 0x6d, 0x08, 0x6d, 0x60,
    0x6d, 0xb9, 0x6e, 0x12, 0x6e, 0x6b, 0x6e, 0xc4, 0x6f, 0x1e, 0x6f, 0x78,
    0x6f, 0xd1, 0x70, 0x2b, 0x70, 0x86, 0x70, 0xe0, 0x71, 0x3a, 0x71, 0x95,
    0x71, 0xf0, 0x72, 0x4b, 0x72, 0xa6, 0x73, 0x01, 0x73, 0x5d, 0x73, 0xb8,
    0x74, 0x14, 0x74, 0x70, 0x74, 0xcc, 0x75, 0x28, 0x75, 0x85, 0x75, 0xe1,
    0x76, 0x3e, 0x76, 0x9b, 0x76, 0xf8, 0x77, 0x56, 0x77, 0xb3, 0x78, 0x11,
    0x78, 0x6e, 0x78, 0xcc, 0x79, 0x2a, 0x79, 0x89, 0x79, 0xe7, 0x7a, 0x46,
    0x7a, 0xa5, 0x7b, 0x04, 0x7b, 0x63, 0x7b, 0xc2, 0x7c, 0x21, 0x7c, 0x81,
    0x7c, 0xe1, 0x7d, 0x41, 0x7d, 0xa1, 0x7e, 0x01, 0x7e, 0x62, 0x7e, 0xc2,
    0x7f, 0x23, 0x7f, 0x84, 0x7f, 0xe5, 0x80, 0x47, 0x80, 0xa8, 0x81, 0x0a,
    0x81, 0x6b, 0x81, 0xcd, 0x82, 0x30, 0x82, 0x92, 0x82, 0xf4, 0x83, 0x57,
    0x83, 0xba, 0x84, 0x1d, 0x84, 0x80, 0x84, 0xe3, 0x85, 0x47, 0x85, 0xab,
    0x86, 0x0e, 0x86, 0x72, 0x86, 0xd7, 0x87, 0x3b, 0x87, 0x9f, 0x88, 0x04,
    0x88, 0x69, 0x88, 0xce, 0x89, 0x33, 0x89, 0x99, 0x89, 0xfe, 0x8a, 0x64,
    0x8a, 0xca, 0x8b, 0x30, 0x8b, 0x96, 0x8b, 0xfc, 0x8c, 0x63, 0x8c, 0xca,
    0x8d, 0x31, 0x8d, 0x98, 0x8d, 0xff, 0x8e, 0x66, 0x8e, 0xce, 0x8f, 0x36,
    0x8f, 0x9e, 0x90, 0x06, 0x90, 0x6e, 0x90, 0xd6, 0x91, 0x3f, 0x91, 0xa8,
    0x92, 0x11, 0x92, 0x7a, 0x92, 0xe3, 0x93, 0x4d, 0x93, 0xb6, 0x94, 0x20,
    0x94, 0x8a, 0x94, 0xf4, 0x95, 0x5f, 0x95, 0xc9, 0x96, 0x34, 0x96, 0x9f,
    0x97, 0x0a, 0x97, 0x75, 0x97, 0xe0, 0x98, 0x4c, 0x98, 0xb8, 0x99, 0x24,
    0x99, 0x90, 0x99, 0xfc, 0x9a, 0x68, 0x9a, 0xd5, 0x9b, 0x42, 0x9b, 0xaf,
    0x9c, 0x1c, 0x9c, 0x89, 0x9c, 0xf7, 0x9d, 0x64, 0x9d, 0xd2, 0x9e, 0x40,
    0x9e, 0xae, 0x9f, 0x1d, 0x9f, 0x8b, 0x9f, 0xfa, 0xa0, 0x69, 0xa0, 0xd8,
    0xa1, 0x47, 0xa1, 0xb6, 0xa2, 0x26, 0xa2, 0x96, 0xa3, 0x06, 0xa3, 0x76,
    0xa3, 0xe6, 0xa4, 0x56, 0xa4, 0xc7, 0xa5, 0x38, 0xa5, 0xa9, 0xa6, 0x1a,
    0xa6, 0x8b, 0xa6, 0xfd, 0xa7, 0x6e, 0xa7, 0xe0, 0xa8, 0x52, 0xa8, 0xc4,
    0xa9, 0x37, 0xa9, 0xa9, 0xaa, 0x1c, 0xaa, 0x8f, 0xab, 0x02, 0xab, 0x75,
    0xab, 0xe9, 0xac, 0x5c, 0xac, 0xd0, 0xad, 0x44, 0xad, 0xb8, 0xae, 0x2d,
    0xae, 0xa1, 0xaf, 0x16, 0xaf, 0x8b, 0xb0, 0x00, 0xb0, 0x75, 0xb0, 0xea,
    0xb1, 0x60, 0xb1, 0xd6, 0xb2, 0x4b, 0xb2, 0xc2, 0xb3, 0x38, 0xb3, 0xae,
    0xb4, 0x25, 0xb4, 0x9c, 0xb5, 0x13, 0xb5, 0x8a, 0xb6, 0x01, 0xb6, 0x79,
    0xb6, 0xf0, 0xb7, 0x68, 0xb7, 0xe0, 0xb8, 0x59, 0xb8, 0xd1, 0xb9, 0x4a,
    0xb9, 0xc2, 0xba, 0x3b, 0xba, 0xb5, 0xbb, 0x2e, 0xbb, 0xa7, 0xbc, 0x21,
    0xbc, 0x9b, 0xbd, 0x15, 0xbd, 0x8f, 0xbe, 0x0a, 0xbe, 0x84, 0xbe, 0xff,
    0xbf, 0x7a, 0xbf, 0xf5, 0xc0, 0x70, 0xc0, 0xec, 0xc1, 0x67, 0xc1, 0xe3,
    0xc2, 0x5f, 0xc2, 0xdb, 0xc3, 0x58, 0xc3, 0xd4, 0xc4, 0x51, 0xc4, 0xce,
    0xc5, 0x4b, 0xc5, 0xc8, 0xc6, 0x46, 0xc6, 0xc3, 0xc7, 0x41, 0xc7, 0xbf,
    0xc8, 0x3d, 0xc8, 0xbc, 0xc9, 0x3a, 0xc9, 0xb9, 0xca, 0x38, 0xca, 0xb7,
    0xcb, 0x36, 0xcb, 0xb6, 0xcc, 0x35, 0xcc, 0xb5, 0xcd, 0x35, 0xcd, 0xb5,
    0xce, 0x36, 0xce, 0xb6, 0xcf, 0x37, 0xcf, 0xb8, 0xd0, 0x39, 0xd0, 0xba,
    0xd1, 0x3c, 0xd1, 0xbe, 0xd2, 0x3f, 0xd2, 0xc1, 0xd3, 0x44, 0xd3, 0xc6,
    0xd4, 0x49, 0xd4, 0xcb, 0xd5, 0x4e, 0xd5, 0xd1, 0xd6, 0x55, 0xd6, 0xd8,
    0xd7, 0x5c, 0xd7, 0xe0, 0xd8, 0x64, 0xd8, 0xe8, 0xd9, 0x6c, 0xd9, 0xf1,
    0xda, 0x76, 0xda, 0xfb, 0xdb, 0x80, 0xdc, 0x05, 0xdc, 0x8a, 0xdd, 0x10,
    0xdd, 0x96, 0xde, 0x1c, 0xde, 0xa2, 0xdf, 0x29, 0xdf, 0xaf, 0xe0, 0x36,
    0xe0, 0xbd, 0xe1, 0x44, 0xe1, 0xcc, 0xe2, 0x53, 0xe2, 0xdb, 0xe3, 0x63,
    0xe3, 0xeb, 0xe4, 0x73, 0xe4, 0xfc, 0xe5, 0x84, 0xe6, 0x0d, 0xe6, 0x96,
    0xe7, 0x1f, 0xe7, 0xa9, 0xe8, 0x32, 0xe8, 0xbc, 0xe9, 0x46, 0xe9, 0xd0,
    0xea, 0x5b, 0xea, 0xe5, 0xeb, 0x70, 0xeb, 0xfb, 0xec, 0x86, 0xed, 0x11,
    0xed, 0x9c, 0xee, 0x28, 0xee, 0xb4, 0xef, 0x40, 0xef, 0xcc, 0xf0, 0x58,
    0xf0, 0xe5, 0xf1, 0x72, 0xf1, 0xff, 0xf2, 0x8c, 0xf3, 0x19, 0xf3, 0xa7,
    0xf4, 0x34, 0xf4, 0xc2, 0xf5, 0x50, 0xf5, 0xde, 0xf6, 0x6d, 0xf6, 0xfb,
    0xf7, 0x8a, 0xf8, 0x19, 0xf8, 0xa8, 0xf9, 0x38, 0xf9, 0xc7, 0xfa, 0x57,
    0xfa, 0xe7, 0xfb, 0x77, 0xfc, 0x07, 0xfc, 0x98, 0xfd, 0x29, 0xfd, 0xba,
    0xfe, 0x4b, 0xfe, 0xdc, 0xff, 0x6d, 0xff, 0xff
  };
  
  /*----------------------------------------------------------------------------*/
  
  /* IEC 61966-2.1 Default RGB colour space - sRGB                              */
  /* Copyright (c) 1998 Hewlett-Packard Company                                 */
  
  unsigned char sRGB_icc[] = {
    0x00, 0x00, 0x0c, 0x48, 0x4c, 0x69, 0x6e, 0x6f, 0x02, 0x10, 0x00, 0x00,
    0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20,
    0x07, 0xce, 0x00, 0x02, 0x00, 0x09, 0x00, 0x06, 0x00, 0x31, 0x00, 0x00,
    0x61, 0x63, 0x73, 0x70, 0x4d, 0x53, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00,
    0x49, 0x45, 0x43, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6,
    0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x48, 0x50, 0x20, 0x20,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
    0x63, 0x70, 0x72, 0x74, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x00, 0x33,
    0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x01, 0x84, 0x00, 0x00, 0x00, 0x6c,
    0x77, 0x74, 0x70, 0x74, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x14,
    0x62, 0x6b, 0x70, 0x74, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x14,
    0x72, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x00, 0x14,
    0x67, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x00, 0x14,
    0x62, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x14,
    0x64, 0x6d, 0x6e, 0x64, 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, 0x00, 0x70,
    0x64, 0x6d, 0x64, 0x64, 0x00, 0x00, 0x02, 0xc4, 0x00, 0x00, 0x00, 0x88,
    0x76, 0x75, 0x65, 0x64, 0x00, 0x00, 0x03, 0x4c, 0x00, 0x00, 0x00, 0x86,
    0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x03, 0xd4, 0x00, 0x00, 0x00, 0x24,
    0x6c, 0x75, 0x6d, 0x69, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x14,
    0x6d, 0x65, 0x61, 0x73, 0x00, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x24,
    0x74, 0x65, 0x63, 0x68, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x0c,
    0x72, 0x54, 0x52, 0x43, 0x00, 0x00, 0x04, 0x3c, 0x00, 0x00, 0x08, 0x0c,
    0x67, 0x54, 0x52, 0x43, 0x00, 0x00, 0x04, 0x3c, 0x00, 0x00, 0x08, 0x0c,
    0x62, 0x54, 0x52, 0x43, 0x00, 0x00, 0x04, 0x3c, 0x00, 0x00, 0x08, 0x0c,
    0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x70, 0x79,
    0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x31, 0x39,
    0x39, 0x38, 0x20, 0x48, 0x65, 0x77, 0x6c, 0x65, 0x74, 0x74, 0x2d, 0x50,
    0x61, 0x63, 0x6b, 0x61, 0x72, 0x64, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61,
    0x6e, 0x79, 0x00, 0x00, 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x12, 0x73, 0x52, 0x47, 0x42, 0x20, 0x49, 0x45, 0x43,
    0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x73, 0x52, 0x47,
    0x42, 0x20, 0x49, 0x45, 0x43, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32,
    0x2e, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xf3, 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x16, 0xcc,
    0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xa2, 0x00, 0x00, 0x38, 0xf5,
    0x00, 0x00, 0x03, 0x90, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x62, 0x99, 0x00, 0x00, 0xb7, 0x85, 0x00, 0x00, 0x18, 0xda,
    0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xa0,
    0x00, 0x00, 0x0f, 0x84, 0x00, 0x00, 0xb6, 0xcf, 0x64, 0x65, 0x73, 0x63,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x49, 0x45, 0x43, 0x20,
    0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69,
    0x65, 0x63, 0x2e, 0x63, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x16, 0x49, 0x45, 0x43, 0x20, 0x68, 0x74, 0x74,
    0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x65, 0x63, 0x2e,
    0x63, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e,
    0x49, 0x45, 0x43, 0x20, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e,
    0x31, 0x20, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x52, 0x47,
    0x42, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x73, 0x70, 0x61,
    0x63, 0x65, 0x20, 0x2d, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x49, 0x45, 0x43,
    0x20, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, 0x20, 0x44,
    0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x52, 0x47, 0x42, 0x20, 0x63,
    0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20,
    0x2d, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x2c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
    0x65, 0x20, 0x56, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x6f,
    0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x49,
    0x45, 0x43, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x52,
    0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x56, 0x69, 0x65,
    0x77, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69,
    0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x45, 0x43, 0x36, 0x31, 0x39,
    0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x69, 0x65, 0x77,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xfe, 0x00, 0x14, 0x5f, 0x2e,
    0x00, 0x10, 0xcf, 0x14, 0x00, 0x03, 0xed, 0xcc, 0x00, 0x04, 0x13, 0x0b,
    0x00, 0x03, 0x5c, 0x9e, 0x00, 0x00, 0x00, 0x01, 0x58, 0x59, 0x5a, 0x20,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x09, 0x56, 0x00, 0x50, 0x00, 0x00,
    0x00, 0x57, 0x1f, 0xe7, 0x6d, 0x65, 0x61, 0x73, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x8f,
    0x00, 0x00, 0x00, 0x02, 0x73, 0x69, 0x67, 0x20, 0x00, 0x00, 0x00, 0x00,
    0x43, 0x52, 0x54, 0x20, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x0f,
    0x00, 0x14, 0x00, 0x19, 0x00, 0x1e, 0x00, 0x23, 0x00, 0x28, 0x00, 0x2d,
    0x00, 0x32, 0x00, 0x37, 0x00, 0x3b, 0x00, 0x40, 0x00, 0x45, 0x00, 0x4a,
    0x00, 0x4f, 0x00, 0x54, 0x00, 0x59, 0x00, 0x5e, 0x00, 0x63, 0x00, 0x68,
    0x00, 0x6d, 0x00, 0x72, 0x00, 0x77, 0x00, 0x7c, 0x00, 0x81, 0x00, 0x86,
    0x00, 0x8b, 0x00, 0x90, 0x00, 0x95, 0x00, 0x9a, 0x00, 0x9f, 0x00, 0xa4,
    0x00, 0xa9, 0x00, 0xae, 0x00, 0xb2, 0x00, 0xb7, 0x00, 0xbc, 0x00, 0xc1,
    0x00, 0xc6, 0x00, 0xcb, 0x00, 0xd0, 0x00, 0xd5, 0x00, 0xdb, 0x00, 0xe0,
    0x00, 0xe5, 0x00, 0xeb, 0x00, 0xf0, 0x00, 0xf6, 0x00, 0xfb, 0x01, 0x01,
    0x01, 0x07, 0x01, 0x0d, 0x01, 0x13, 0x01, 0x19, 0x01, 0x1f, 0x01, 0x25,
    0x01, 0x2b, 0x01, 0x32, 0x01, 0x38, 0x01, 0x3e, 0x01, 0x45, 0x01, 0x4c,
    0x01, 0x52, 0x01, 0x59, 0x01, 0x60, 0x01, 0x67, 0x01, 0x6e, 0x01, 0x75,
    0x01, 0x7c, 0x01, 0x83, 0x01, 0x8b, 0x01, 0x92, 0x01, 0x9a, 0x01, 0xa1,
    0x01, 0xa9, 0x01, 0xb1, 0x01, 0xb9, 0x01, 0xc1, 0x01, 0xc9, 0x01, 0xd1,
    0x01, 0xd9, 0x01, 0xe1, 0x01, 0xe9, 0x01, 0xf2, 0x01, 0xfa, 0x02, 0x03,
    0x02, 0x0c, 0x02, 0x14, 0x02, 0x1d, 0x02, 0x26, 0x02, 0x2f, 0x02, 0x38,
    0x02, 0x41, 0x02, 0x4b, 0x02, 0x54, 0x02, 0x5d, 0x02, 0x67, 0x02, 0x71,
    0x02, 0x7a, 0x02, 0x84, 0x02, 0x8e, 0x02, 0x98, 0x02, 0xa2, 0x02, 0xac,
    0x02, 0xb6, 0x02, 0xc1, 0x02, 0xcb, 0x02, 0xd5, 0x02, 0xe0, 0x02, 0xeb,
    0x02, 0xf5, 0x03, 0x00, 0x03, 0x0b, 0x03, 0x16, 0x03, 0x21, 0x03, 0x2d,
    0x03, 0x38, 0x03, 0x43, 0x03, 0x4f, 0x03, 0x5a, 0x03, 0x66, 0x03, 0x72,
    0x03, 0x7e, 0x03, 0x8a, 0x03, 0x96, 0x03, 0xa2, 0x03, 0xae, 0x03, 0xba,
    0x03, 0xc7, 0x03, 0xd3, 0x03, 0xe0, 0x03, 0xec, 0x03, 0xf9, 0x04, 0x06,
    0x04, 0x13, 0x04, 0x20, 0x04, 0x2d, 0x04, 0x3b, 0x04, 0x48, 0x04, 0x55,
    0x04, 0x63, 0x04, 0x71, 0x04, 0x7e, 0x04, 0x8c, 0x04, 0x9a, 0x04, 0xa8,
    0x04, 0xb6, 0x04, 0xc4, 0x04, 0xd3, 0x04, 0xe1, 0x04, 0xf0, 0x04, 0xfe,
    0x05, 0x0d, 0x05, 0x1c, 0x05, 0x2b, 0x05, 0x3a, 0x05, 0x49, 0x05, 0x58,
    0x05, 0x67, 0x05, 0x77, 0x05, 0x86, 0x05, 0x96, 0x05, 0xa6, 0x05, 0xb5,
    0x05, 0xc5, 0x05, 0xd5, 0x05, 0xe5, 0x05, 0xf6, 0x06, 0x06, 0x06, 0x16,
    0x06, 0x27, 0x06, 0x37, 0x06, 0x48, 0x06, 0x59, 0x06, 0x6a, 0x06, 0x7b,
    0x06, 0x8c, 0x06, 0x9d, 0x06, 0xaf, 0x06, 0xc0, 0x06, 0xd1, 0x06, 0xe3,
    0x06, 0xf5, 0x07, 0x07, 0x07, 0x19, 0x07, 0x2b, 0x07, 0x3d, 0x07, 0x4f,
    0x07, 0x61, 0x07, 0x74, 0x07, 0x86, 0x07, 0x99, 0x07, 0xac, 0x07, 0xbf,
    0x07, 0xd2, 0x07, 0xe5, 0x07, 0xf8, 0x08, 0x0b, 0x08, 0x1f, 0x08, 0x32,
    0x08, 0x46, 0x08, 0x5a, 0x08, 0x6e, 0x08, 0x82, 0x08, 0x96, 0x08, 0xaa,
    0x08, 0xbe, 0x08, 0xd2, 0x08, 0xe7, 0x08, 0xfb, 0x09, 0x10, 0x09, 0x25,
    0x09, 0x3a, 0x09, 0x4f, 0x09, 0x64, 0x09, 0x79, 0x09, 0x8f, 0x09, 0xa4,
    0x09, 0xba, 0x09, 0xcf, 0x09, 0xe5, 0x09, 0xfb, 0x0a, 0x11, 0x0a, 0x27,
    0x0a, 0x3d, 0x0a, 0x54, 0x0a, 0x6a, 0x0a, 0x81, 0x0a, 0x98, 0x0a, 0xae,
    0x0a, 0xc5, 0x0a, 0xdc, 0x0a, 0xf3, 0x0b, 0x0b, 0x0b, 0x22, 0x0b, 0x39,
    0x0b, 0x51, 0x0b, 0x69, 0x0b, 0x80, 0x0b, 0x98, 0x0b, 0xb0, 0x0b, 0xc8,
    0x0b, 0xe1, 0x0b, 0xf9, 0x0c, 0x12, 0x0c, 0x2a, 0x0c, 0x43, 0x0c, 0x5c,
    0x0c, 0x75, 0x0c, 0x8e, 0x0c, 0xa7, 0x0c, 0xc0, 0x0c, 0xd9, 0x0c, 0xf3,
    0x0d, 0x0d, 0x0d, 0x26, 0x0d, 0x40, 0x0d, 0x5a, 0x0d, 0x74, 0x0d, 0x8e,
    0x0d, 0xa9, 0x0d, 0xc3, 0x0d, 0xde, 0x0d, 0xf8, 0x0e, 0x13, 0x0e, 0x2e,
    0x0e, 0x49, 0x0e, 0x64, 0x0e, 0x7f, 0x0e, 0x9b, 0x0e, 0xb6, 0x0e, 0xd2,
    0x0e, 0xee, 0x0f, 0x09, 0x0f, 0x25, 0x0f, 0x41, 0x0f, 0x5e, 0x0f, 0x7a,
    0x0f, 0x96, 0x0f, 0xb3, 0x0f, 0xcf, 0x0f, 0xec, 0x10, 0x09, 0x10, 0x26,
    0x10, 0x43, 0x10, 0x61, 0x10, 0x7e, 0x10, 0x9b, 0x10, 0xb9, 0x10, 0xd7,
    0x10, 0xf5, 0x11, 0x13, 0x11, 0x31, 0x11, 0x4f, 0x11, 0x6d, 0x11, 0x8c,
    0x11, 0xaa, 0x11, 0xc9, 0x11, 0xe8, 0x12, 0x07, 0x12, 0x26, 0x12, 0x45,
    0x12, 0x64, 0x12, 0x84, 0x12, 0xa3, 0x12, 0xc3, 0x12, 0xe3, 0x13, 0x03,
    0x13, 0x23, 0x13, 0x43, 0x13, 0x63, 0x13, 0x83, 0x13, 0xa4, 0x13, 0xc5,
    0x13, 0xe5, 0x14, 0x06, 0x14, 0x27, 0x14, 0x49, 0x14, 0x6a, 0x14, 0x8b,
    0x14, 0xad, 0x14, 0xce, 0x14, 0xf0, 0x15, 0x12, 0x15, 0x34, 0x15, 0x56,
    0x15, 0x78, 0x15, 0x9b, 0x15, 0xbd, 0x15, 0xe0, 0x16, 0x03, 0x16, 0x26,
    0x16, 0x49, 0x16, 0x6c, 0x16, 0x8f, 0x16, 0xb2, 0x16, 0xd6, 0x16, 0xfa,
    0x17, 0x1d, 0x17, 0x41, 0x17, 0x65, 0x17, 0x89, 0x17, 0xae, 0x17, 0xd2,
    0x17, 0xf7, 0x18, 0x1b, 0x18, 0x40, 0x18, 0x65, 0x18, 0x8a, 0x18, 0xaf,
    0x18, 0xd5, 0x18, 0xfa, 0x19, 0x20, 0x19, 0x45, 0x19, 0x6b, 0x19, 0x91,
    0x19, 0xb7, 0x19, 0xdd, 0x1a, 0x04, 0x1a, 0x2a, 0x1a, 0x51, 0x1a, 0x77,
    0x1a, 0x9e, 0x1a, 0xc5, 0x1a, 0xec, 0x1b, 0x14, 0x1b, 0x3b, 0x1b, 0x63,
    0x1b, 0x8a, 0x1b, 0xb2, 0x1b, 0xda, 0x1c, 0x02, 0x1c, 0x2a, 0x1c, 0x52,
    0x1c, 0x7b, 0x1c, 0xa3, 0x1c, 0xcc, 0x1c, 0xf5, 0x1d, 0x1e, 0x1d, 0x47,
    0x1d, 0x70, 0x1d, 0x99, 0x1d, 0xc3, 0x1d, 0xec, 0x1e, 0x16, 0x1e, 0x40,
    0x1e, 0x6a, 0x1e, 0x94, 0x1e, 0xbe, 0x1e, 0xe9, 0x1f, 0x13, 0x1f, 0x3e,
    0x1f, 0x69, 0x1f, 0x94, 0x1f, 0xbf, 0x1f, 0xea, 0x20, 0x15, 0x20, 0x41,
    0x20, 0x6c, 0x20, 0x98, 0x20, 0xc4, 0x20, 0xf0, 0x21, 0x1c, 0x21, 0x48,
    0x21, 0x75, 0x21, 0xa1, 0x21, 0xce, 0x21, 0xfb, 0x22, 0x27, 0x22, 0x55,
    0x22, 0x82, 0x22, 0xaf, 0x22, 0xdd, 0x23, 0x0a, 0x23, 0x38, 0x23, 0x66,
    0x23, 0x94, 0x23, 0xc2, 0x23, 0xf0, 0x24, 0x1f, 0x24, 0x4d, 0x24, 0x7c,
    0x24, 0xab, 0x24, 0xda, 0x25, 0x09, 0x25, 0x38, 0x25, 0x68, 0x25, 0x97,
    0x25, 0xc7, 0x25, 0xf7, 0x26, 0x27, 0x26, 0x57, 0x26, 0x87, 0x26, 0xb7,
    0x26, 0xe8, 0x27, 0x18, 0x27, 0x49, 0x27, 0x7a, 0x27, 0xab, 0x27, 0xdc,
    0x28, 0x0d, 0x28, 0x3f, 0x28, 0x71, 0x28, 0xa2, 0x28, 0xd4, 0x29, 0x06,
    0x29, 0x38, 0x29, 0x6b, 0x29, 0x9d, 0x29, 0xd0, 0x2a, 0x02, 0x2a, 0x35,
    0x2a, 0x68, 0x2a, 0x9b, 0x2a, 0xcf, 0x2b, 0x02, 0x2b, 0x36, 0x2b, 0x69,
    0x2b, 0x9d, 0x2b, 0xd1, 0x2c, 0x05, 0x2c, 0x39, 0x2c, 0x6e, 0x2c, 0xa2,
    0x2c, 0xd7, 0x2d, 0x0c, 0x2d, 0x41, 0x2d, 0x76, 0x2d, 0xab, 0x2d, 0xe1,
    0x2e, 0x16, 0x2e, 0x4c, 0x2e, 0x82, 0x2e, 0xb7, 0x2e, 0xee, 0x2f, 0x24,
    0x2f, 0x5a, 0x2f, 0x91, 0x2f, 0xc7, 0x2f, 0xfe, 0x30, 0x35, 0x30, 0x6c,
    0x30, 0xa4, 0x30, 0xdb, 0x31, 0x12, 0x31, 0x4a, 0x31, 0x82, 0x31, 0xba,
    0x31, 0xf2, 0x32, 0x2a, 0x32, 0x63, 0x32, 0x9b, 0x32, 0xd4, 0x33, 0x0d,
    0x33, 0x46, 0x33, 0x7f, 0x33, 0xb8, 0x33, 0xf1, 0x34, 0x2b, 0x34, 0x65,
    0x34, 0x9e, 0x34, 0xd8, 0x35, 0x13, 0x35, 0x4d, 0x35, 0x87, 0x35, 0xc2,
    0x35, 0xfd, 0x36, 0x37, 0x36, 0x72, 0x36, 0xae, 0x36, 0xe9, 0x37, 0x24,
    0x37, 0x60, 0x37, 0x9c, 0x37, 0xd7, 0x38, 0x14, 0x38, 0x50, 0x38, 0x8c,
    0x38, 0xc8, 0x39, 0x05, 0x39, 0x42, 0x39, 0x7f, 0x39, 0xbc, 0x39, 0xf9,
    0x3a, 0x36, 0x3a, 0x74, 0x3a, 0xb2, 0x3a, 0xef, 0x3b, 0x2d, 0x3b, 0x6b,
    0x3b, 0xaa, 0x3b, 0xe8, 0x3c, 0x27, 0x3c, 0x65, 0x3c, 0xa4, 0x3c, 0xe3,
    0x3d, 0x22, 0x3d, 0x61, 0x3d, 0xa1, 0x3d, 0xe0, 0x3e, 0x20, 0x3e, 0x60,
    0x3e, 0xa0, 0x3e, 0xe0, 0x3f, 0x21, 0x3f, 0x61, 0x3f, 0xa2, 0x3f, 0xe2,
    0x40, 0x23, 0x40, 0x64, 0x40, 0xa6, 0x40, 0xe7, 0x41, 0x29, 0x41, 0x6a,
    0x41, 0xac, 0x41, 0xee, 0x42, 0x30, 0x42, 0x72, 0x42, 0xb5, 0x42, 0xf7,
    0x43, 0x3a, 0x43, 0x7d, 0x43, 0xc0, 0x44, 0x03, 0x44, 0x47, 0x44, 0x8a,
    0x44, 0xce, 0x45, 0x12, 0x45, 0x55, 0x45, 0x9a, 0x45, 0xde, 0x46, 0x22,
    0x46, 0x67, 0x46, 0xab, 0x46, 0xf0, 0x47, 0x35, 0x47, 0x7b, 0x47, 0xc0,
    0x48, 0x05, 0x48, 0x4b, 0x48, 0x91, 0x48, 0xd7, 0x49, 0x1d, 0x49, 0x63,
    0x49, 0xa9, 0x49, 0xf0, 0x4a, 0x37, 0x4a, 0x7d, 0x4a, 0xc4, 0x4b, 0x0c,
    0x4b, 0x53, 0x4b, 0x9a, 0x4b, 0xe2, 0x4c, 0x2a, 0x4c, 0x72, 0x4c, 0xba,
    0x4d, 0x02, 0x4d, 0x4a, 0x4d, 0x93, 0x4d, 0xdc, 0x4e, 0x25, 0x4e, 0x6e,
    0x4e, 0xb7, 0x4f, 0x00, 0x4f, 0x49, 0x4f, 0x93, 0x4f, 0xdd, 0x50, 0x27,
    0x50, 0x71, 0x50, 0xbb, 0x51, 0x06, 0x51, 0x50, 0x51, 0x9b, 0x51, 0xe6,
    0x52, 0x31, 0x52, 0x7c, 0x52, 0xc7, 0x53, 0x13, 0x53, 0x5f, 0x53, 0xaa,
    0x53, 0xf6, 0x54, 0x42, 0x54, 0x8f, 0x54, 0xdb, 0x55, 0x28, 0x55, 0x75,
    0x55, 0xc2, 0x56, 0x0f, 0x56, 0x5c, 0x56, 0xa9, 0x56, 0xf7, 0x57, 0x44,
    0x57, 0x92, 0x57, 0xe0, 0x58, 0x2f, 0x58, 0x7d, 0x58, 0xcb, 0x59, 0x1a,
    0x59, 0x69, 0x59, 0xb8, 0x5a, 0x07, 0x5a, 0x56, 0x5a, 0xa6, 0x5a, 0xf5,
    0x5b, 0x45, 0x5b, 0x95, 0x5b, 0xe5, 0x5c, 0x35, 0x5c, 0x86, 0x5c, 0xd6,
    0x5d, 0x27, 0x5d, 0x78, 0x5d, 0xc9, 0x5e, 0x1a, 0x5e, 0x6c, 0x5e, 0xbd,
    0x5f, 0x0f, 0x5f, 0x61, 0x5f, 0xb3, 0x60, 0x05, 0x60, 0x57, 0x60, 0xaa,
    0x60, 0xfc, 0x61, 0x4f, 0x61, 0xa2, 0x61, 0xf5, 0x62, 0x49, 0x62, 0x9c,
    0x62, 0xf0, 0x63, 0x43, 0x63, 0x97, 0x63, 0xeb, 0x64, 0x40, 0x64, 0x94,
    0x64, 0xe9, 0x65, 0x3d, 0x65, 0x92, 0x65, 0xe7, 0x66, 0x3d, 0x66, 0x92,
    0x66, 0xe8, 0x67, 0x3d, 0x67, 0x93, 0x67, 0xe9, 0x68, 0x3f, 0x68, 0x96,
    0x68, 0xec, 0x69, 0x43, 0x69, 0x9a, 0x69, 0xf1, 0x6a, 0x48, 0x6a, 0x9f,
    0x6a, 0xf7, 0x6b, 0x4f, 0x6b, 0xa7, 0x6b, 0xff, 0x6c, 0x57, 0x6c, 0xaf,
    0x6d, 0x08, 0x6d, 0x60, 0x6d, 0xb9, 0x6e, 0x12, 0x6e, 0x6b, 0x6e, 0xc4,
    0x6f, 0x1e, 0x6f, 0x78, 0x6f, 0xd1, 0x70, 0x2b, 0x70, 0x86, 0x70, 0xe0,
    0x71, 0x3a, 0x71, 0x95, 0x71, 0xf0, 0x72, 0x4b, 0x72, 0xa6, 0x73, 0x01,
    0x73, 0x5d, 0x73, 0xb8, 0x74, 0x14, 0x74, 0x70, 0x74, 0xcc, 0x75, 0x28,
    0x75, 0x85, 0x75, 0xe1, 0x76, 0x3e, 0x76, 0x9b, 0x76, 0xf8, 0x77, 0x56,
    0x77, 0xb3, 0x78, 0x11, 0x78, 0x6e, 0x78, 0xcc, 0x79, 0x2a, 0x79, 0x89,
    0x79, 0xe7, 0x7a, 0x46, 0x7a, 0xa5, 0x7b, 0x04, 0x7b, 0x63, 0x7b, 0xc2,
    0x7c, 0x21, 0x7c, 0x81, 0x7c, 0xe1, 0x7d, 0x41, 0x7d, 0xa1, 0x7e, 0x01,
    0x7e, 0x62, 0x7e, 0xc2, 0x7f, 0x23, 0x7f, 0x84, 0x7f, 0xe5, 0x80, 0x47,
    0x80, 0xa8, 0x81, 0x0a, 0x81, 0x6b, 0x81, 0xcd, 0x82, 0x30, 0x82, 0x92,
    0x82, 0xf4, 0x83, 0x57, 0x83, 0xba, 0x84, 0x1d, 0x84, 0x80, 0x84, 0xe3,
    0x85, 0x47, 0x85, 0xab, 0x86, 0x0e, 0x86, 0x72, 0x86, 0xd7, 0x87, 0x3b,
    0x87, 0x9f, 0x88, 0x04, 0x88, 0x69, 0x88, 0xce, 0x89, 0x33, 0x89, 0x99,
    0x89, 0xfe, 0x8a, 0x64, 0x8a, 0xca, 0x8b, 0x30, 0x8b, 0x96, 0x8b, 0xfc,
    0x8c, 0x63, 0x8c, 0xca, 0x8d, 0x31, 0x8d, 0x98, 0x8d, 0xff, 0x8e, 0x66,
    0x8e, 0xce, 0x8f, 0x36, 0x8f, 0x9e, 0x90, 0x06, 0x90, 0x6e, 0x90, 0xd6,
    0x91, 0x3f, 0x91, 0xa8, 0x92, 0x11, 0x92, 0x7a, 0x92, 0xe3, 0x93, 0x4d,
    0x93, 0xb6, 0x94, 0x20, 0x94, 0x8a, 0x94, 0xf4, 0x95, 0x5f, 0x95, 0xc9,
    0x96, 0x34, 0x96, 0x9f, 0x97, 0x0a, 0x97, 0x75, 0x97, 0xe0, 0x98, 0x4c,
    0x98, 0xb8, 0x99, 0x24, 0x99, 0x90, 0x99, 0xfc, 0x9a, 0x68, 0x9a, 0xd5,
    0x9b, 0x42, 0x9b, 0xaf, 0x9c, 0x1c, 0x9c, 0x89, 0x9c, 0xf7, 0x9d, 0x64,
    0x9d, 0xd2, 0x9e, 0x40, 0x9e, 0xae, 0x9f, 0x1d, 0x9f, 0x8b, 0x9f, 0xfa,
    0xa0, 0x69, 0xa0, 0xd8, 0xa1, 0x47, 0xa1, 0xb6, 0xa2, 0x26, 0xa2, 0x96,
    0xa3, 0x06, 0xa3, 0x76, 0xa3, 0xe6, 0xa4, 0x56, 0xa4, 0xc7, 0xa5, 0x38,
    0xa5, 0xa9, 0xa6, 0x1a, 0xa6, 0x8b, 0xa6, 0xfd, 0xa7, 0x6e, 0xa7, 0xe0,
    0xa8, 0x52, 0xa8, 0xc4, 0xa9, 0x37, 0xa9, 0xa9, 0xaa, 0x1c, 0xaa, 0x8f,
    0xab, 0x02, 0xab, 0x75, 0xab, 0xe9, 0xac, 0x5c, 0xac, 0xd0, 0xad, 0x44,
    0xad, 0xb8, 0xae, 0x2d, 0xae, 0xa1, 0xaf, 0x16, 0xaf, 0x8b, 0xb0, 0x00,
    0xb0, 0x75, 0xb0, 0xea, 0xb1, 0x60, 0xb1, 0xd6, 0xb2, 0x4b, 0xb2, 0xc2,
    0xb3, 0x38, 0xb3, 0xae, 0xb4, 0x25, 0xb4, 0x9c, 0xb5, 0x13, 0xb5, 0x8a,
    0xb6, 0x01, 0xb6, 0x79, 0xb6, 0xf0, 0xb7, 0x68, 0xb7, 0xe0, 0xb8, 0x59,
    0xb8, 0xd1, 0xb9, 0x4a, 0xb9, 0xc2, 0xba, 0x3b, 0xba, 0xb5, 0xbb, 0x2e,
    0xbb, 0xa7, 0xbc, 0x21, 0xbc, 0x9b, 0xbd, 0x15, 0xbd, 0x8f, 0xbe, 0x0a,
    0xbe, 0x84, 0xbe, 0xff, 0xbf, 0x7a, 0xbf, 0xf5, 0xc0, 0x70, 0xc0, 0xec,
    0xc1, 0x67, 0xc1, 0xe3, 0xc2, 0x5f, 0xc2, 0xdb, 0xc3, 0x58, 0xc3, 0xd4,
    0xc4, 0x51, 0xc4, 0xce, 0xc5, 0x4b, 0xc5, 0xc8, 0xc6, 0x46, 0xc6, 0xc3,
    0xc7, 0x41, 0xc7, 0xbf, 0xc8, 0x3d, 0xc8, 0xbc, 0xc9, 0x3a, 0xc9, 0xb9,
    0xca, 0x38, 0xca, 0xb7, 0xcb, 0x36, 0xcb, 0xb6, 0xcc, 0x35, 0xcc, 0xb5,
    0xcd, 0x35, 0xcd, 0xb5, 0xce, 0x36, 0xce, 0xb6, 0xcf, 0x37, 0xcf, 0xb8,
    0xd0, 0x39, 0xd0, 0xba, 0xd1, 0x3c, 0xd1, 0xbe, 0xd2, 0x3f, 0xd2, 0xc1,
    0xd3, 0x44, 0xd3, 0xc6, 0xd4, 0x49, 0xd4, 0xcb, 0xd5, 0x4e, 0xd5, 0xd1,
    0xd6, 0x55, 0xd6, 0xd8, 0xd7, 0x5c, 0xd7, 0xe0, 0xd8, 0x64, 0xd8, 0xe8,
    0xd9, 0x6c, 0xd9, 0xf1, 0xda, 0x76, 0xda, 0xfb, 0xdb, 0x80, 0xdc, 0x05,
    0xdc, 0x8a, 0xdd, 0x10, 0xdd, 0x96, 0xde, 0x1c, 0xde, 0xa2, 0xdf, 0x29,
    0xdf, 0xaf, 0xe0, 0x36, 0xe0, 0xbd, 0xe1, 0x44, 0xe1, 0xcc, 0xe2, 0x53,
    0xe2, 0xdb, 0xe3, 0x63, 0xe3, 0xeb, 0xe4, 0x73, 0xe4, 0xfc, 0xe5, 0x84,
    0xe6, 0x0d, 0xe6, 0x96, 0xe7, 0x1f, 0xe7, 0xa9, 0xe8, 0x32, 0xe8, 0xbc,
    0xe9, 0x46, 0xe9, 0xd0, 0xea, 0x5b, 0xea, 0xe5, 0xeb, 0x70, 0xeb, 0xfb,
    0xec, 0x86, 0xed, 0x11, 0xed, 0x9c, 0xee, 0x28, 0xee, 0xb4, 0xef, 0x40,
    0xef, 0xcc, 0xf0, 0x58, 0xf0, 0xe5, 0xf1, 0x72, 0xf1, 0xff, 0xf2, 0x8c,
    0xf3, 0x19, 0xf3, 0xa7, 0xf4, 0x34, 0xf4, 0xc2, 0xf5, 0x50, 0xf5, 0xde,
    0xf6, 0x6d, 0xf6, 0xfb, 0xf7, 0x8a, 0xf8, 0x19, 0xf8, 0xa8, 0xf9, 0x38,
    0xf9, 0xc7, 0xfa, 0x57, 0xfa, 0xe7, 0xfb, 0x77, 0xfc, 0x07, 0xfc, 0x98,
    0xfd, 0x29, 0xfd, 0xba, 0xfe, 0x4b, 0xfe, 0xdc, 0xff, 0x6d, 0xff, 0xff
  };
  
  /*----------------------------------------------------------------------------*/
  
  static void fail(const char *name, const char *error)
  {
      fprintf(stderr, "Image error: %s: %s\n", name, error);
      exit(EXIT_FAILURE);
  }
  
  /*----------------------------------------------------------------------------*/
  
  /* Flip the given image buffer vertically.                                    */
  
  void image_flip(int w, int h, int c, int b, void *p)
  {
      const int s = w * c * b;
  
      void *t;
      int   i;
  
      if ((t = malloc(s)))
      {
          for (i = 0; i < h / 2; ++i)
          {
              unsigned char *a = (unsigned char *) p + (        i) * s;
              unsigned char *b = (unsigned char *) p + (h - 1 - i) * s;
  
              memcpy(t, a, s);
              memcpy(a, b, s);
              memcpy(b, t, s);
          }
          free(t);
      }
      else fail("image_flip", "Failure to allocate temporary buffer");
  }
  
  /*----------------------------------------------------------------------------*/
  
  #ifndef CONFIG_NO_PNG
  #include <png.h>
  
  void *image_read_png(const char *name, int *w, int *h, int *c, int *b)
  {
      png_structp rp = NULL;
      png_infop   ip = NULL;
      png_bytep  *bp = NULL;
      FILE       *fp = NULL;
      void        *p = NULL;
  
      assert(name);
      assert(w);
      assert(h);
      assert(c);
      assert(b);
  
      /* Initialize all PNG import data structures. */
  
      if (!(fp = fopen(name, "rb")))
          fail(name, strerror(errno));
  
      if (!(rp = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0)))
          fail(name, "Failure to allocate PNG read structure");
  
      if (!(ip = png_create_info_struct(rp)))
          fail(name, "Failure to allocate PNG info structure");
  
      /* Enable the default PNG error handler. */
  
      if (setjmp(png_jmpbuf(rp)) == 0)
      {
          /* Read the PNG header. */
  
          png_init_io (rp, fp);
          png_read_png(rp, ip, PNG_TRANSFORM_EXPAND  |
                               PNG_TRANSFORM_PACKING |
                               PNG_TRANSFORM_SWAP_ENDIAN, NULL);
  
          *w = (int) png_get_image_width (rp, ip);
          *h = (int) png_get_image_height(rp, ip);
          *c = (int) png_get_channels    (rp, ip);
          *b = (int) png_get_bit_depth   (rp, ip) / 8;
  
          /* Read the pixel data. */
  
          if ((bp = png_get_rows(rp, ip)))
          {
              /* Allocate the final buffer and flip-copy the pixels there. */
  
              int i, j, s = (*w) * (*c) * (*b);
  
              if ((p = malloc((*w) * (*h) * (*c) * (*b))))
  
                  for (i = 0, j = (*h) - 1; j >= 0; ++i, --j)
                      memcpy((png_bytep) p + s * i, bp[i], s);
  
              else fail(name, "Failure to allocate image buffer");
          }
      }
  
      /* Release all resources. */
  
      png_destroy_read_struct(&rp, &ip, NULL);
      fclose(fp);
  
      return p;
  }
  
  void image_write_png(const char *name, int w, int h, int c, int b, void *p)
  {
      png_structp wp = NULL;
      png_infop   ip = NULL;
      png_bytep  *bp = NULL;
      FILE       *fp = NULL;
  
      assert(name);
      assert(p);
  
      /* Initialize all PNG export data structures. */
  
      if (!(fp = fopen(name, "wb")))
          fail(name, strerror(errno));
  
      if (!(wp = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0)))
          fail(name, "Failure to allocate PNG write structure");
  
      if (!(ip = png_create_info_struct(wp)))
          fail(name, "Failure to allocate PNG info structure");
  
      /* Enable the default PNG error handler. */
  
      if (setjmp(png_jmpbuf(wp)) == 0)
      {
          static const int color[] = {
              0,
              PNG_COLOR_TYPE_GRAY,
              PNG_COLOR_TYPE_GRAY_ALPHA,
              PNG_COLOR_TYPE_RGB,
              PNG_COLOR_TYPE_RGB_ALPHA
          };
  
          /* Initialize the PNG header. */
  
          png_init_io (wp, fp);
  /*      png_set_compression_level(wp, 9); */
          png_set_IHDR(wp, ip, w, h, b*8, color[c], PNG_INTERLACE_NONE,
                                                    PNG_COMPRESSION_TYPE_DEFAULT,
                                                    PNG_FILTER_TYPE_DEFAULT);
  
          /* Allocate and initialize the row pointers. */
  
          if ((bp = (png_bytep *) png_malloc(wp, h * sizeof (png_bytep))))
          {
              int i, j;
  
              for (i = 0, j = h - 1; j >= 0; ++i, --j)
                  bp[i] = (png_bytep) p + i * w * c * b;
  
              /* Write the PNG image file. */
  
              png_set_rows  (wp, ip, bp);
              png_write_info(wp, ip);
              png_write_png (wp, ip, PNG_TRANSFORM_SWAP_ENDIAN, NULL);
  
              free(bp);
          }
          else fail(name, "Failure to allocate PNG row array");
      }
  
      /* Release all resources. */
  
      png_destroy_write_struct(&wp, &ip);
      fclose(fp);
  }
  
  #endif /* CONFIG_NO_PNG */
  
  /*----------------------------------------------------------------------------*/
  
  #ifndef CONFIG_NO_JPG
  #include <jpeglib.h>
  
  void *image_read_jpg(const char *name, int *w, int *h, int *c, int *b)
  {
      unsigned char *p = NULL;
  
      FILE *fp;
  
      assert(name);
      assert(w);
      assert(h);
      assert(c);
      assert(b);
  
      if ((fp = fopen(name, "rb")))
      {
          struct jpeg_decompress_struct cinfo;
          struct jpeg_error_mgr         jerr;
  
          unsigned char *s[1];
  
          /* Initialize the JPG decompressor. */
  
          cinfo.err = jpeg_std_error(&jerr);
  
          jpeg_create_decompress(&cinfo);
          jpeg_stdio_src(&cinfo, fp);
  
          /* Grab the JPG header info. */
  
          jpeg_read_header(&cinfo, TRUE);
          jpeg_start_decompress(&cinfo);
  
          *w = cinfo.output_width;
          *h = cinfo.output_height;
          *c = cinfo.output_components;
          *b = 1;
  
          /* Allocate the pixel buffer and copy pixels there. */
  
          if ((p = (unsigned char *) malloc ((*w) * (*h) * (*c))))
          {
              while (cinfo.output_scanline < cinfo.output_height)
              {
                  s[0] = p + cinfo.output_scanline * (*w) * (*c);
                  jpeg_read_scanlines(&cinfo, s, 1);
              }
          }
          else fail(name, "Failure to allocate image buffer");
  
          /* Finalize the decompression. */
  
          jpeg_finish_decompress (&cinfo);
          jpeg_destroy_decompress(&cinfo);
  
          fclose(fp);
      }
      else fail(name, strerror(errno));
  
      return p;
  }
  
  void image_write_jpg(const char *name, int w, int h, int c, int b, void *p)
  {
      FILE *fp;
  
      assert(name);
      assert(p);
  
      if ((fp = fopen(name, "wb")))
      {
          struct jpeg_compress_struct cinfo;
          struct jpeg_error_mgr       jerr;
  
          unsigned char *s[1];
  
          /* Initialize the JPG compressor. */
  
          cinfo.err = jpeg_std_error(&jerr);
  
          jpeg_create_compress(&cinfo);
          jpeg_stdio_dest(&cinfo, fp);
  
          /* Set the JPG header info. */
  
          cinfo.image_width      = w;
          cinfo.image_height     = h;
          cinfo.input_components = c;
  
          if (c == 1) cinfo.in_color_space = JCS_GRAYSCALE;
          if (c == 3) cinfo.in_color_space = JCS_RGB;
  
          jpeg_set_defaults  (&cinfo);
          jpeg_set_quality   (&cinfo, 75, TRUE);
          jpeg_start_compress(&cinfo,     TRUE);
  
          /* Write each scanline in turn. */
  
          while (cinfo.next_scanline < cinfo.image_height)
          {
              s[0] = (unsigned char *) p + w * c * cinfo.next_scanline;
              jpeg_write_scanlines(&cinfo, s, 1);
          }
  
          /* Finalize the compression. */
  
          jpeg_finish_compress (&cinfo);
          jpeg_destroy_compress(&cinfo);
  
          fclose(fp);
      }
      else fail(name, strerror(errno));
  }
  
  #endif /* CONFIG_NO_JPG */
  
  /*----------------------------------------------------------------------------*/
  
  #ifndef CONFIG_NO_EXR
  #include <OpenEXR/ImfCRgbaFile.h>
  
  void *image_read_exr(const char *name, int *w, int *h, int *c, int *b)
  {
      ImfInputFile    *file;
      ImfRgba         *data;
      const ImfHeader *head;
  
      float *p = 0;
  
      if ((file = ImfOpenInputFile(name)))
      {
           if ((head = ImfInputHeader(file)))
           {
               int x0;
               int x1;
               int y0;
               int y1;
               int i;
  
               /* Read and extract header info. */
  
               ImfHeaderDataWindow(head, &x0, &y0, &x1, &y1);
  
               *w = x1 - x0 + 1;
               *h = y1 - y0 + 1;
               *c = 4;
               *b = sizeof (float);
  
               /* Allocate temporary storage and read pixel data to it. */
  
               if ((data = (ImfRgba *) malloc((*w) * (*h) * sizeof (ImfRgba))))
               {
                   ImfInputSetFrameBuffer(file, data - x0 - y0 * (*w), 1, (*w));
                   ImfInputReadPixels    (file, y0, y1);
  
                   /* Allocate final storage and copy pixel data to it. */
  
                   if ((p = (float *) malloc((*w) * (*h) * (*c) * (*b))))
                   {
                       for (i = 0; i < (*w) * (*h); ++i)
                       {
                           p[i * 4 + 0] = ImfHalfToFloat(data[i].r);
                           p[i * 4 + 1] = ImfHalfToFloat(data[i].g);
                           p[i * 4 + 2] = ImfHalfToFloat(data[i].b);
                           p[i * 4 + 3] = ImfHalfToFloat(data[i].a);
                       }
                   }
                   free(data);
               }
           }
           ImfCloseInputFile(file);
      }
      return p;
  }
  
  void image_write_exr(const char *name, int w, int h, int c, int b, void *p)
  {
      ImfOutputFile *file;
      ImfRgba       *data;
      ImfHeader     *head;
  
      const float *q = (const float *) p;
  
      /* Allocation and intialize a new header. */
  
      if ((head = ImfNewHeader()))
      {
          ImfHeaderSetDataWindow   (head, 0, 0, w - 1, h - 1);
          ImfHeaderSetDisplayWindow(head, 0, 0, w - 1, h - 1);
          ImfHeaderSetCompression  (head, IMF_ZIP_COMPRESSION);
          ImfHeaderSetLineOrder    (head, IMF_INCREASING_Y);
  
          if ((file = ImfOpenOutputFile(name, head, IMF_WRITE_RGBA)))
          {
               /* Allocate temporary storage and copy pixel data to it. */
  
               if ((data = (ImfRgba *) calloc(w * h, sizeof (ImfRgba))))
               {
                   int i;
  
                   for (i = 0; i < w * h; ++i)
                   {
                       float R = (c > 0) ? q[i * c + 0] : 0.0f;
                       float G = (c > 1) ? q[i * c + 1] : 0.0f;
                       float B = (c > 2) ? q[i * c + 2] : 0.0f;
                       float A = (c > 3) ? q[i * c + 3] : 1.0f;
  
                       ImfFloatToHalf(R, &data[i].r);
                       ImfFloatToHalf(G, &data[i].g);
                       ImfFloatToHalf(B, &data[i].b);
                       ImfFloatToHalf(A, &data[i].a);
                   }
  
                   /* Write the file. */
  
                   ImfOutputSetFrameBuffer(file, data, 1, w);
                   ImfOutputWritePixels   (file, h);
  
                   free(data);
               }
               ImfCloseOutputFile(file);
           }
           ImfDeleteHeader(head);
      }
  }
  
  #endif /* CONFIG_NO_EXR */
  
  /*----------------------------------------------------------------------------*/
  
  #ifndef CONFIG_NO_TIF
  #include <tiffio.h>
  
  void *image_read_tif(const char *name, int *w, int *h, int *c, int *b, int n)
  {
      TIFF *T = 0;
      void *p = 0;
  
      TIFFSetWarningHandler(0);
  
      if ((T = TIFFOpen(name, "r")))
      {
          if ((n == 0) || TIFFSetDirectory(T, n))
          {
              uint32 i, s = (uint32) TIFFScanlineSize(T);
              uint32 W, H;
              uint16 B, C;
  
              TIFFGetField(T, TIFFTAG_IMAGEWIDTH,      &W);
              TIFFGetField(T, TIFFTAG_IMAGELENGTH,     &H);
              TIFFGetField(T, TIFFTAG_BITSPERSAMPLE,   &B);
              TIFFGetField(T, TIFFTAG_SAMPLESPERPIXEL, &C);
  
              if ((p = malloc(H * s)))
              {
                  for (i = 0; i < H; ++i)
                      TIFFReadScanline(T, (uint8 *) p + i * s, i, 0);
  
                  *w = (int) W;
                  *h = (int) H;
                  *b = (int) B / 8;
                  *c = (int) C;
              }
          }
          TIFFClose(T);
      }
      return p;
  }
  
  void image_write_tif(const char *name, int w, int h, int c, int b, int n, void **p)
  {
      TIFF *T = 0;
  
      TIFFSetWarningHandler(0);
  
      if ((T = TIFFOpen(name, "w")))
      {
          uint32 k, i, s;
  
          for (k = 0; k < n; ++k)
          {
              TIFFSetField(T, TIFFTAG_IMAGEWIDTH,      w);
              TIFFSetField(T, TIFFTAG_IMAGELENGTH,     h);
              TIFFSetField(T, TIFFTAG_BITSPERSAMPLE, 8*b);
              TIFFSetField(T, TIFFTAG_SAMPLESPERPIXEL, c);
              TIFFSetField(T, TIFFTAG_ORIENTATION,  ORIENTATION_TOPLEFT);
              TIFFSetField(T, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
  
              if (c == 1)
              {
                  TIFFSetField(T, TIFFTAG_PHOTOMETRIC,  PHOTOMETRIC_MINISBLACK);
                  TIFFSetField(T, TIFFTAG_ICCPROFILE, sizeof (gray_icc), gray_icc);
              }
              else
              {
                  TIFFSetField(T, TIFFTAG_PHOTOMETRIC,  PHOTOMETRIC_RGB);
                  TIFFSetField(T, TIFFTAG_ICCPROFILE, sizeof (sRGB_icc), sRGB_icc);
              }
              if (b == 4)
                  TIFFSetField(T, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP);
  
              s = (uint32) TIFFScanlineSize(T);
  
              for (i = 0; i < h; ++i)
                  TIFFWriteScanline(T, (uint8 *) p[k] + i * s, i, 0);
  
              TIFFWriteDirectory(T);
          }
          TIFFClose(T);
      }
  }
  
  #endif /* CONFIG_NO_TIF */
  
  /*----------------------------------------------------------------------------*/
  
  /* Compare the end of string name with string ext.                            */
  
  static int extcmp(const char *name, const char *ext)
  {
      return strcmp(name + strlen(name) - strlen(ext), ext);
  }
  
  /* Use the file name extension to select an image read function.              */
  
  void *image_read(const char *name, int *w, int *h, int *c, int *b)
  {
      assert(name);
  
      if (0) { }
  #ifndef CONFIG_NO_PNG
      else if (extcmp(name, ".png") == 0) return image_read_png(name, w, h, c, b);
      else if (extcmp(name, ".PNG") == 0) return image_read_png(name, w, h, c, b);
  #endif
  #ifndef CONFIG_NO_JPG
      else if (extcmp(name, ".jpg") == 0) return image_read_jpg(name, w, h, c, b);
      else if (extcmp(name, ".JPG") == 0) return image_read_jpg(name, w, h, c, b);
  #endif
  #ifndef CONFIG_NO_EXR
      else if (extcmp(name, ".exr") == 0) return image_read_exr(name, w, h, c, b);
      else if (extcmp(name, ".EXR") == 0) return image_read_exr(name, w, h, c, b);
  #endif
  #ifndef CONFIG_NO_TIF
      else if (extcmp(name, ".tif") == 0) return image_read_tif(name, w, h, c, b, 0);
      else if (extcmp(name, ".TIF") == 0) return image_read_tif(name, w, h, c, b, 0);
  #endif
      else fail(name, "Unsupported image format extension");
  
      return NULL;
  }
  
  /* Use the file name extension to select an image write function.             */
  
  void image_write(const char *name, int w, int h, int c, int b, void *p)
  {
      assert(name);
  
      if (0) { }
  #ifndef CONFIG_NO_PNG
      else if (extcmp(name, ".png") == 0) image_write_png(name, w, h, c, b, p);
      else if (extcmp(name, ".PNG") == 0) image_write_png(name, w, h, c, b, p);
  #endif
  #ifndef CONFIG_NO_JPG
      else if (extcmp(name, ".jpg") == 0) image_write_jpg(name, w, h, c, b, p);
      else if (extcmp(name, ".JPG") == 0) image_write_jpg(name, w, h, c, b, p);
  #endif
  #ifndef CONFIG_NO_EXR
      else if (extcmp(name, ".exr") == 0) image_write_exr(name, w, h, c, b, p);
      else if (extcmp(name, ".EXR") == 0) image_write_exr(name, w, h, c, b, p);
  #endif
  #ifndef CONFIG_NO_TIF
      else if (extcmp(name, ".tif") == 0) image_write_tif(name, w, h, c, b, 1, &p);
      else if (extcmp(name, ".TIF") == 0) image_write_tif(name, w, h, c, b, 1, &p);
  #endif
      else fail(name, "Unsupported image format extension");
  }
  
  /*----------------------------------------------------------------------------*/
  
  static float clamp(float f, float a, float z)
  {
      if      (f < a) return a;
      else if (f > z) return z;
      else            return f;
  }
  
  static unsigned char ftob(float f)
  {
      return (unsigned char) (f * 255.0f);
  }
  
  static unsigned short ftos(float f)
  {
      return (unsigned short) (f * 65535.0f);
  }
  
  static float btof(unsigned char b)
  {
      return (float) b / 255.0f;
  }
  
  static float stof(unsigned short s)
  {
      return (float) s / 65535.0f;
  }
  
  float *image_read_float(const char *name, int *w, int *h, int *c, int *b)
  {
      void  *p = 0;
      float *q = 0;
      int    i;
  
      /* Read the named file. */
  
      if ((p = image_read(name, w, h, c, b)))
      {
          int n = (*w) * (*h) * (*c);
  
          /* If the type is already float (b == 4) then return immediately. */
  
          if ((*b) == 4)
              return (float *) p;
  
          /* Otherwise, convert the file before returning. */
  
          if ((q = (float *) malloc(n * sizeof (float))))
          {
              if ((*b) == 1)
                  for (i = 0; i < n; ++i)
                      q[i] = btof(((unsigned char  *) p)[i]);
              if ((*b) == 2)
                  for (i = 0; i < n; ++i)
                      q[i] = stof(((unsigned short *) p)[i]);
          }
          free(p);
      }
      return q;
  }
  
  void image_write_float(const char *name, int w, int h, int c, int b, float *q)
  {
      void *p;
      int   i;
      int   n = w * h * c;
  
      /* If the caller requests a float file (b = 4) then write immediately. */
  
      if (b == 4)
          image_write(name, w, h, c, b, q);
  
      /* Otherwise, convert the file to float before writing. */
  
      else if ((p = malloc(n * b)))
      {
          if (b == 1)
              for (i = 0; i < n; ++i)
                  ((unsigned char  *) p)[i] = ftob(clamp(q[i], 0.f, 1.f));
          if (b == 2)
              for (i = 0; i < n; ++i)
                  ((unsigned short *) p)[i] = ftos(clamp(q[i], 0.f, 1.f));
  
          image_write(name, w, h, c, b, p);
  
          free(p);
      }
  }
  
  #define LERP(A, B, T) ((A) * (1.0 - (T)) + (B) * (T))
  
  float *image_scale_float(int W, int H, int w, int h, int c, const float *p)
  {
      float *q;
      int    I;
      int    J;
      int    k;
  
      if ((q = (float *) malloc(W * H * c * sizeof (float))))
      {
          for     (I = 0; I < H; I++)
              for (J = 0; J < W; J++)
              {
                  float i  = clamp(h * (I + 0.5) / H - 0.5, 0.f, h - 1.f);
                  float j  = clamp(w * (J + 0.5) / W - 0.5, 0.f, w - 1.f);
  
                  int   i0 = (int) floor(i), i1 = (int) ceil(i);
                  int   j0 = (int) floor(j), j1 = (int) ceil(j);
  
                  float di = i - i0;
                  float dj = j - j0;
  
                  for (k = 0; k < c; k++)
                      q[(W * I + J) * c + k] =
                          LERP(LERP(p[(w * i0 + j0) * c + k],
                                    p[(w * i0 + j1) * c + k], dj),
                               LERP(p[(w * i1 + j0) * c + k],
                                    p[(w * i1 + j1) * c + k], dj), di);
              }
      }
      return q;
  }
  
  /*----------------------------------------------------------------------------*/
  /* Select an OpenGL internal texture format for an image with c channels and  */
  /* b bytes per channel.                                                       */
  
  int image_internal_form(int c, int b)
  {
      assert((1 <= c) && (c <= 4));
      assert((1 <= b) && (b <= 4));
  
      if (b == 1)
          switch (c)
          {
          case  1: return GL_LUMINANCE;
          case  2: return GL_LUMINANCE_ALPHA;
          case  3: return GL_RGB;
          default: return GL_RGBA;
          }
      if (b == 2)
          switch (c)
          {
          case  1: return GL_LUMINANCE16;
          case  2: return GL_LUMINANCE16_ALPHA16;
          case  3: return GL_RGB16;
          default: return GL_RGBA16;
          }
      if (b == 4)
          switch (c)
          {
          case  1: return GL_RGB32F;
          case  2: return GL_RGB32F;
          case  3: return GL_RGB32F;
          default: return GL_RGBA32F;
          }
  
      return 0;
  }
  
  /* Select an OpenGL external texture format for an image with c channels.     */
  
  int image_external_form(int c)
  {
      assert((1 <= c) && (c <= 4));
  
      switch (c)
      {
      case  1: return GL_LUMINANCE;
      case  2: return GL_LUMINANCE_ALPHA;
      case  3: return GL_RGB;
      default: return GL_RGBA;
      }
  }
  
  /* Select an OpenGL data type for an image with b bytes per channel.          */
  
  int image_external_type(int b)
  {
      assert((1 <= b) && (b <= 4));
  
      if (b == 1) return GL_UNSIGNED_BYTE;
      if (b == 2) return GL_UNSIGNED_SHORT;
      if (b == 4) return GL_FLOAT;
  
      return 0;
  }
  
  /*----------------------------------------------------------------------------*/
  