//------------------------------------------------------------------------- // Desc: Miscellaneous utility functions and methods for formatting monitor // web pages. // Tabs: 3 // // Copyright (c) 2002-2006 Novell, Inc. All Rights Reserved. // // This program is free software; you can redistribute it and/or // modify it under the terms of version 2 of the GNU General Public // License as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, contact Novell, Inc. // // To contact Novell about this file by physical or electronic mail, // you may find current contact information at www.novell.com // // $Id: imonutil.cpp 12331 2006-01-23 10:19:55 -0700 (Mon, 23 Jan 2006) ahodgkinson $ //------------------------------------------------------------------------- #include "flaimsys.h" // Static data static FLMBYTE gv_imonhdr_gif[] = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x8A, 0x02, 0x3B, 0x00, 0xE6, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEC, 0xE1, 0xEB, 0xFD, 0xFB, 0xFD, 0xEE, 0xE9, 0xEF, 0xF1, 0xEE, 0xF2, 0xE6, 0xE5, 0xEB, 0xED, 0xEC, 0xF3, 0xE9, 0xE8, 0xEF, 0xE2, 0xE1, 0xEB, 0xE5, 0xE5, 0xF0, 0xEE, 0xEE, 0xF6, 0xEA, 0xEA, 0xF2, 0xE2, 0xE2, 0xE6, 0xF7, 0xF7, 0xFA, 0xF3, 0xF3, 0xF6, 0xDF, 0xDF, 0xE2, 0xFD, 0xFD, 0xFF, 0xF6, 0xF6, 0xF7, 0xF2, 0xF3, 0xF9, 0xEA, 0xEC, 0xF5, 0xF1, 0xF2, 0xF6, 0xDA, 0xDB, 0xDF, 0xCE, 0xCF, 0xD2, 0xFA, 0xFB, 0xFD, 0xC8, 0xCA, 0xCD, 0xF4, 0xF6, 0xF9, 0xB5, 0xB7, 0xB9, 0xEF, 0xF1, 0xF3, 0xED, 0xEF, 0xF1, 0xEA, 0xEC, 0xEE, 0xF3, 0xF8, 0xFC, 0xEC, 0xF2, 0xF6, 0xE6, 0xEA, 0xEC, 0xEA, 0xEF, 0xF1, 0xF6, 0xF9, 0xFA, 0xF2, 0xF5, 0xF6, 0xE2, 0xE6, 0xE7, 0xFB, 0xFD, 0xFD, 0xFA, 0xFB, 0xFB, 0xF2, 0xF3, 0xF3, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFD, 0xFD, 0xFD, 0xFB, 0xC1, 0xC1, 0xBF, 0xF9, 0xF9, 0xF8, 0x9C, 0x9B, 0x80, 0xA0, 0x9F, 0x86, 0xDB, 0xDA, 0xC2, 0xA7, 0xA4, 0x8F, 0xAB, 0xA8, 0x9A, 0xE1, 0xDF, 0xD5, 0xD2, 0xD1, 0xCC, 0xE4, 0xE2, 0xDA, 0xE1, 0xDF, 0xD7, 0xDF, 0xDD, 0xD5, 0xB2, 0xAB, 0x96, 0xB7, 0xB3, 0xA7, 0xC1, 0xBD, 0xB1, 0xDC, 0xDA, 0xD4, 0xFB, 0xF6, 0xE8, 0xC7, 0xC2, 0xB5, 0xE5, 0xE0, 0xD3, 0xEE, 0xE9, 0xDC, 0xBC, 0xB8, 0xAE, 0xD9, 0xD7, 0xD2, 0xB3, 0xAD, 0xA0, 0xDA, 0xD6, 0xCD, 0xCF, 0xC6, 0xB3, 0xE3, 0xDD, 0xD1, 0xCB, 0xC6, 0xBC, 0xD6, 0xD1, 0xC7, 0xE3, 0xDF, 0xD7, 0xCF, 0xCC, 0xC6, 0xE0, 0xDD, 0xD7, 0xD6, 0xD4, 0xD0, 0xC2, 0xB8, 0xA5, 0xBC, 0xB2, 0xA0, 0xDF, 0xDB, 0xD4, 0xCB, 0xC8, 0xC3, 0xD2, 0xCA, 0xBE, 0xF2, 0xF0, 0xED, 0xE7, 0xE4, 0xE0, 0xDA, 0xCF, 0xC1, 0xF6, 0xF4, 0xF2, 0xEC, 0xEA, 0xE8, 0xEA, 0xE6, 0xE3, 0xF8, 0xEC, 0xE5, 0xF9, 0xF7, 0xF6, 0xF2, 0xE6, 0xE4, 0xFF, 0xFD, 0xFD, 0xFD, 0xFB, 0xFB, 0xFD, 0xFD, 0xFD, 0xD9, 0xD9, 0xD9, 0xD5, 0xD5, 0xD5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x02, 0x3B, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x35, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x88, 0x32, 0x8E, 0x35, 0x32, 0x82, 0x49, 0x93, 0x35, 0x93, 0x49, 0x36, 0x36, 0x4D, 0x9A, 0x9B, 0x3A, 0x4D, 0x3A, 0x9F, 0xA0, 0xA1, 0x40, 0xA3, 0xA4, 0xA5, 0x40, 0x3A, 0x40, 0x5D, 0xAA, 0xA7, 0x9F, 0xAA, 0x4A, 0xAF, 0xB0, 0xB1, 0xB2, 0xB1, 0xAA, 0x5C, 0xA0, 0xA9, 0xAB, 0xA6, 0xAC, 0xA0, 0x98, 0xBD, 0xBE, 0xBF, 0x99, 0x9B, 0x9E, 0xA0, 0xC2, 0xC5, 0xC5, 0xA2, 0x40, 0x42, 0x42, 0x38, 0x37, 0xCD, 0xCE, 0x37, 0x41, 0xD1, 0xD2, 0xD2, 0x38, 0xD5, 0xD6, 0x4C, 0xD6, 0xD9, 0x4B, 0xDB, 0x4B, 0x39, 0xDE, 0xDE, 0x3F, 0x39, 0x3C, 0xDE, 0x3C, 0xE5, 0xE5, 0x45, 0x45, 0x43, 0x3C, 0x43, 0xEC, 0x4F, 0xEE, 0xEF, 0xF0, 0xF0, 0xE8, 0xF3, 0x45, 0x4E, 0x48, 0xB3, 0xB0, 0xA4, 0xF9, 0xB1, 0x33, 0xFD, 0xFD, 0xAF, 0x48, 0xDE, 0xD1, 0x9B, 0x67, 0xAE, 0x1E, 0x3F, 0x24, 0x48, 0x9C, 0x60, 0x70, 0xF2, 0x4F, 0xC9, 0x3F, 0x21, 0x46, 0xE2, 0x49, 0x84, 0xE7, 0xC4, 0x89, 0xBB, 0x8A, 0x18, 0xDD, 0x21, 0xAC, 0x98, 0x10, 0xA1, 0xC7, 0x8F, 0x20, 0x91, 0xF8, 0x1B, 0x49, 0xD2, 0x9F, 0x43, 0x7C, 0xB2, 0x74, 0x8D, 0x0A, 0xC5, 0x32, 0x94, 0xB1, 0x4D, 0x98, 0x9A, 0x00, 0xBB, 0x34, 0xC9, 0x91, 0xCD, 0x9B, 0x36, 0x07, 0x1D, 0xD9, 0x49, 0xA3, 0xA7, 0xCF, 0x9F, 0x40, 0xA3, 0x08, 0x1D, 0x4A, 0x34, 0x4A, 0x95, 0xA3, 0x48, 0x93, 0x52, 0x59, 0xCA, 0xB4, 0xA9, 0x53, 0x2A, 0x50, 0xA2, 0x4A, 0x9D, 0x4A, 0x95, 0xEA, 0x94, 0xAB, 0x58, 0xB3, 0x4E, 0x89, 0xC0, 0xF5, 0x8A, 0xD7, 0xAF, 0x2C, 0xC2, 0x8A, 0x65, 0x61, 0xA2, 0x6C, 0x59, 0x2D, 0x2A, 0xD2, 0x0A, 0x10, 0x90, 0x56, 0x45, 0x96, 0x2C, 0x29, 0xFF, 0x00, 0xC8, 0x9D, 0x4B, 0xB7, 0xAE, 0xDD, 0xBB, 0x78, 0xF3, 0xEA, 0xDD, 0xCB, 0xB7, 0xAF, 0xDF, 0xBF, 0x10, 0x02, 0x0B, 0x16, 0x5C, 0xA2, 0xF0, 0x85, 0xC3, 0x26, 0x2E, 0x90, 0x35, 0x11, 0xB6, 0x81, 0xE3, 0xC7, 0x0D, 0x32, 0x48, 0x9E, 0x9C, 0xC1, 0x83, 0x08, 0x0F, 0x12, 0x46, 0x64, 0xCE, 0x6C, 0xF9, 0xB2, 0x07, 0xCD, 0x14, 0x42, 0x8B, 0xA6, 0xF0, 0xA1, 0xB4, 0x69, 0xD1, 0x12, 0x24, 0x58, 0xBE, 0x70, 0x99, 0xF2, 0x64, 0x11, 0x8E, 0x45, 0xC8, 0x3E, 0x7C, 0xB8, 0xB0, 0xED, 0x12, 0x02, 0x68, 0x3F, 0x8E, 0x90, 0xC1, 0x81, 0xEF, 0xDF, 0xBE, 0xB9, 0x36, 0x08, 0x6B, 0x62, 0xAD, 0x71, 0x2D, 0x5A, 0x18, 0xB3, 0xF0, 0xDA, 0xE0, 0x4A, 0x14, 0x73, 0xE7, 0x06, 0xD2, 0x7B, 0xC2, 0x31, 0xE4, 0x47, 0x23, 0xD8, 0x95, 0x29, 0x23, 0x42, 0xA4, 0x89, 0x10, 0x25, 0x40, 0x26, 0xE9, 0x48, 0x52, 0x03, 0x28, 0x4F, 0x1A, 0x3E, 0xD2, 0xAB, 0x5F, 0xAF, 0x1E, 0x4B, 0x95, 0xA1, 0x34, 0x18, 0xC8, 0x2F, 0x30, 0x80, 0xC2, 0xEF, 0xD0, 0x92, 0x53, 0x67, 0x70, 0x2C, 0x81, 0x82, 0x84, 0x06, 0x14, 0x18, 0x10, 0x9A, 0x02, 0x04, 0x4A, 0x66, 0x00, 0x16, 0x58, 0x10, 0xF5, 0xC0, 0x82, 0x0C, 0x2E, 0x18, 0xC5, 0x00, 0x09, 0x24, 0x80, 0x00, 0x02, 0x11, 0x1E, 0xB0, 0x80, 0x01, 0x0A, 0x50, 0x90, 0xA1, 0x04, 0x0A, 0x18, 0x40, 0xC0, 0x14, 0x04, 0x20, 0x28, 0xE2, 0x88, 0x22, 0x26, 0xE5, 0xDE, 0x51, 0x05, 0xA0, 0x98, 0x54, 0x15, 0x05, 0xB4, 0x08, 0xC2, 0x8B, 0x30, 0xC2, 0xD8, 0xC1, 0x8C, 0x34, 0xCE, 0x18, 0xC2, 0x8D, 0x21, 0x70, 0xA0, 0xE3, 0x8E, 0x1C, 0x6C, 0xE0, 0xE3, 0x8F, 0x1B, 0x8C, 0x46, 0xC1, 0x08, 0x44, 0x16, 0x29, 0x19, 0x57, 0x11, 0x34, 0x20, 0x5B, 0xFF, 0x6C, 0x22, 0xB0, 0x20, 0x82, 0x59, 0x65, 0xD1, 0x56, 0x5B, 0x61, 0xC6, 0xAD, 0x65, 0xDB, 0x16, 0x58, 0x42, 0x20, 0x97, 0x96, 0x7F, 0x75, 0xE9, 0xE5, 0x97, 0x60, 0x86, 0x29, 0xE6, 0x98, 0x63, 0x32, 0x62, 0xE6, 0x99, 0x68, 0xA6, 0x49, 0xC8, 0x23, 0x82, 0x38, 0x62, 0x83, 0x25, 0x98, 0xD0, 0xF4, 0x0B, 0x27, 0x2D, 0xDD, 0xA2, 0xD2, 0x27, 0xA3, 0xE0, 0xB3, 0x12, 0x9E, 0x5D, 0xA0, 0x84, 0x52, 0x17, 0xA4, 0x20, 0xB3, 0x27, 0x4B, 0x32, 0x01, 0x93, 0x09, 0x2A, 0x40, 0xA0, 0x94, 0xA8, 0xA2, 0xA7, 0xBC, 0x34, 0x0C, 0x9E, 0x39, 0x38, 0x33, 0xCD, 0xA4, 0xD1, 0x60, 0x93, 0xCD, 0xA5, 0x97, 0x72, 0x93, 0x43, 0x37, 0xE6, 0xE4, 0x10, 0x0E, 0x74, 0x3C, 0x0C, 0xB4, 0x0E, 0x3B, 0x43, 0x4C, 0x64, 0xEA, 0x13, 0x03, 0xD9, 0x13, 0xCB, 0xA2, 0xE0, 0x2D, 0xAA, 0x8F, 0x12, 0x22, 0x25, 0x6A, 0x52, 0xA2, 0x45, 0x48, 0x21, 0x1D, 0x41, 0xE7, 0x28, 0x24, 0x52, 0x3E, 0xA5, 0xBC, 0x42, 0x92, 0x12, 0x11, 0x9D, 0xFA, 0x84, 0x47, 0x1A, 0x61, 0x84, 0x51, 0x47, 0xC3, 0xDA, 0x53, 0x9D, 0x75, 0x21, 0x95, 0xE4, 0xEC, 0x48, 0x7E, 0xF2, 0xAA, 0x4B, 0x4B, 0x8F, 0x7E, 0xE2, 0xA8, 0x26, 0x86, 0xBE, 0x19, 0x27, 0x4E, 0xDC, 0x12, 0xB2, 0xD3, 0x11, 0x40, 0x85, 0xEB, 0x53, 0x51, 0xE4, 0xAE, 0xB8, 0xE2, 0x53, 0xE8, 0x32, 0x55, 0xD5, 0xBA, 0xEB, 0x6A, 0xE5, 0xEE, 0x56, 0x11, 0x7C, 0x05, 0xD6, 0x58, 0xC4, 0x41, 0x89, 0x9C, 0x5A, 0x6C, 0xA9, 0x80, 0x25, 0x5C, 0x64, 0xF6, 0xEB, 0xEF, 0xBF, 0x63, 0x0E, 0x26, 0x80, 0x6D, 0x83, 0x05, 0x66, 0xD8, 0x05, 0x65, 0xD1, 0x0B, 0x19, 0x6F, 0xAF, 0x89, 0x30, 0x99, 0x66, 0x23, 0x0C, 0x19, 0x31, 0xC4, 0x1E, 0x58, 0x56, 0x71, 0xFF, 0xC4, 0x42, 0x86, 0x96, 0xDA, 0xC6, 0x15, 0x67, 0x20, 0x41, 0x65, 0x22, 0x1C, 0xB6, 0xA4, 0x92, 0x21, 0x4B, 0x39, 0xE5, 0x61, 0x2C, 0x34, 0x10, 0xC1, 0xC6, 0xFB, 0xC9, 0xE6, 0xB2, 0xC9, 0x2E, 0xC3, 0xE6, 0x71, 0x7F, 0xC1, 0x91, 0x75, 0x5C, 0xC2, 0x2C, 0x50, 0x71, 0x6B, 0xAA, 0x19, 0x69, 0xE4, 0x11, 0x76, 0x3F, 0x63, 0x67, 0x84, 0x76, 0x42, 0x34, 0xC1, 0x1D, 0x11, 0xCA, 0x00, 0x61, 0x43, 0x25, 0x93, 0x3C, 0x40, 0xC3, 0x50, 0x49, 0xF4, 0x80, 0x1E, 0x7B, 0x54, 0xA7, 0x87, 0x60, 0x52, 0x51, 0xC8, 0xC7, 0xC0, 0x01, 0x1B, 0x44, 0xF6, 0xB1, 0xCA, 0x11, 0x10, 0x20, 0xF6, 0x00, 0x03, 0x2C, 0xC5, 0xE2, 0x01, 0x1E, 0x12, 0x90, 0xA1, 0x86, 0x0A, 0x40, 0x51, 0x85, 0x7B, 0xF0, 0xD1, 0xD0, 0x20, 0x83, 0x54, 0x40, 0xE6, 0x98, 0x6B, 0x1E, 0xB3, 0x1D, 0x9A, 0x87, 0x53, 0x0C, 0x60, 0xE2, 0xD5, 0x7F, 0x9F, 0x98, 0x62, 0x52, 0x83, 0xA3, 0x58, 0x40, 0x8C, 0x88, 0x83, 0x50, 0x63, 0x8D, 0x38, 0xF2, 0xC8, 0x23, 0x90, 0x3F, 0x0A, 0x59, 0x24, 0x91, 0x94, 0x21, 0x49, 0xF2, 0x70, 0x5A, 0x84, 0xF5, 0xA4, 0x59, 0x52, 0xDA, 0x56, 0xA5, 0x95, 0x58, 0x66, 0xA9, 0x25, 0x97, 0x00, 0x97, 0x6E, 0xFA, 0xE9, 0xA8, 0x93, 0xA9, 0xE6, 0xEA, 0xAC, 0xB7, 0xBE, 0xA6, 0x23, 0x96, 0x5C, 0x92, 0xED, 0x9C, 0xD5, 0xDE, 0x82, 0xE8, 0x9E, 0xBD, 0x46, 0x0B, 0x1E, 0x9F, 0x7D, 0x32, 0x7A, 0xA7, 0x0E, 0xBD, 0x58, 0x5B, 0xA8, 0x2F, 0x9E, 0xE4, 0x39, 0xA8, 0xA0, 0xD3, 0xB6, 0xC4, 0xEA, 0xEE, 0xC6, 0xE8, 0x90, 0x03, 0xA5, 0x93, 0xE2, 0x60, 0x29, 0xA6, 0x38, 0xFC, 0x60, 0xBD, 0x35, 0xD6, 0x6B, 0xFA, 0x4D, 0xA7, 0xDB, 0x17, 0x84, 0x8E, 0x13, 0x45, 0x8C, 0x5A, 0xEA, 0xFF, 0xA9, 0x52, 0x9C, 0x3A, 0x4F, 0x45, 0x33, 0x0C, 0x6D, 0x44, 0xF9, 0xE5, 0xA3, 0x5A, 0x84, 0xFB, 0xD2, 0x55, 0x37, 0x43, 0xFB, 0xF0, 0xD3, 0x13, 0x2A, 0x3A, 0x3C, 0x3C, 0xA1, 0x92, 0x29, 0xE0, 0x9D, 0xE4, 0xEB, 0x0C, 0x10, 0x09, 0x48, 0x3C, 0x10, 0xE2, 0xB3, 0x8B, 0x1C, 0x2B, 0x21, 0xC7, 0xB2, 0x47, 0x47, 0x98, 0xD5, 0xAC, 0x67, 0x39, 0x70, 0x06, 0xBA, 0xDB, 0xDF, 0x2E, 0x34, 0x41, 0xAD, 0x6B, 0x65, 0x2B, 0x76, 0xDC, 0xCA, 0x49, 0x21, 0xC0, 0x25, 0xAE, 0x70, 0x91, 0xAB, 0x28, 0xE6, 0x52, 0x4A, 0xBA, 0xD0, 0xC5, 0xAE, 0x12, 0x4A, 0xE5, 0x5D, 0x5A, 0xE9, 0x8A, 0xBC, 0xAE, 0x40, 0xAF, 0x7A, 0x99, 0xE5, 0x5E, 0x2A, 0x58, 0x4B, 0x5A, 0xF6, 0x15, 0x97, 0xD4, 0xD9, 0xF0, 0x86, 0x61, 0x1A, 0x4C, 0x61, 0xB6, 0x80, 0x1B, 0xDC, 0x0C, 0xAC, 0x04, 0x3A, 0x2C, 0x01, 0x62, 0x46, 0xA6, 0xA4, 0xC8, 0xB8, 0xCC, 0x03, 0x0F, 0x9B, 0x1C, 0xC6, 0x84, 0x94, 0x9A, 0x8A, 0xB5, 0xA6, 0x3F, 0xFE, 0xF1, 0x8F, 0x6A, 0x3A, 0x46, 0x99, 0xC7, 0x94, 0xEC, 0x60, 0xB5, 0x19, 0xD8, 0x05, 0x22, 0xE3, 0x80, 0x8F, 0x95, 0xAC, 0x35, 0x6C, 0x23, 0x90, 0x01, 0xC6, 0x48, 0x46, 0x0C, 0x11, 0x88, 0x02, 0x20, 0x13, 0x59, 0xDE, 0xEC, 0x33, 0x9C, 0xE3, 0xE8, 0x6C, 0x67, 0xEF, 0xB3, 0xC8, 0x3B, 0xAC, 0x63, 0x84, 0xF4, 0x09, 0x4D, 0x68, 0x44, 0x33, 0xDA, 0xD1, 0xBC, 0x33, 0x0A, 0xF2, 0x08, 0xA2, 0x27, 0x46, 0x89, 0x42, 0x0D, 0xC0, 0x15, 0x85, 0xAA, 0xB1, 0xC7, 0x0A, 0x88, 0xB4, 0x42, 0x89, 0xDE, 0x23, 0x14, 0x06, 0x18, 0x05, 0x0B, 0x88, 0x2C, 0x11, 0x51, 0xE4, 0x36, 0x37, 0xF9, 0x44, 0xE1, 0x01, 0x47, 0xC1, 0x64, 0x82, 0xE0, 0x13, 0x05, 0x4A, 0x32, 0x28, 0xFF, 0x0A, 0x68, 0x7C, 0x0C, 0xDE, 0x66, 0xE6, 0x31, 0x02, 0xF5, 0x87, 0x40, 0x0E, 0x08, 0x11, 0xE0, 0x4E, 0x04, 0x38, 0x15, 0xB5, 0x08, 0x29, 0x83, 0x7B, 0x65, 0x8B, 0x0E, 0x97, 0xB8, 0xC5, 0x2D, 0x0E, 0x47, 0x39, 0x72, 0x9C, 0x8E, 0x20, 0xE7, 0x23, 0xC9, 0x29, 0x71, 0x32, 0x96, 0x83, 0xCD, 0x70, 0x9A, 0x04, 0xA5, 0x28, 0xD1, 0xE6, 0x36, 0xC6, 0xB9, 0xD2, 0x16, 0x20, 0xB0, 0x4C, 0xD2, 0xE1, 0xF0, 0x99, 0xD0, 0x8C, 0xA6, 0x98, 0x5C, 0x47, 0xCD, 0x6A, 0x32, 0xC2, 0x26, 0xB1, 0x9B, 0x9D, 0x36, 0x95, 0x87, 0xBC, 0xE5, 0xE9, 0x6E, 0x77, 0xAD, 0xE8, 0x5D, 0xAB, 0x72, 0x11, 0xA8, 0x50, 0x18, 0x4A, 0x13, 0xC6, 0x13, 0x85, 0x43, 0xFA, 0xC1, 0xC0, 0x8F, 0x58, 0xE0, 0x9D, 0x16, 0x80, 0x60, 0x17, 0xD4, 0xF9, 0x8A, 0x46, 0x35, 0x01, 0x08, 0xCF, 0x9B, 0x06, 0x13, 0xF6, 0xC9, 0xCF, 0xE9, 0x51, 0xAF, 0x1A, 0xD7, 0xB3, 0xDE, 0x0F, 0xB4, 0xD7, 0xBD, 0x72, 0x7C, 0x43, 0x1C, 0xF7, 0x3B, 0x5F, 0x3A, 0xDA, 0x01, 0x0F, 0xFA, 0x3D, 0x41, 0x0A, 0x10, 0x8D, 0x68, 0x44, 0x2F, 0x32, 0x8F, 0x87, 0x42, 0xB4, 0x7E, 0xF4, 0x30, 0x16, 0x3A, 0xDC, 0x31, 0x9D, 0x50, 0x61, 0x14, 0x57, 0xE7, 0x90, 0x96, 0x2E, 0x66, 0x31, 0x83, 0x78, 0x3E, 0x44, 0x22, 0x02, 0x1C, 0xD6, 0x46, 0x94, 0xC5, 0xD2, 0x04, 0x6E, 0xA4, 0x9D, 0x20, 0x79, 0xA0, 0x03, 0x23, 0x28, 0xC1, 0x3A, 0x11, 0xC3, 0x82, 0x86, 0xB2, 0x44, 0x06, 0xD9, 0x54, 0x88, 0x0E, 0x7A, 0xF0, 0x83, 0x43, 0x09, 0x21, 0x52, 0x46, 0x48, 0x42, 0x13, 0x96, 0x10, 0x85, 0x58, 0x41, 0xD2, 0x0A, 0x59, 0xD8, 0xC2, 0x62, 0xA2, 0x05, 0x5F, 0x33, 0xDC, 0x02, 0x5C, 0x6A, 0x28, 0xCD, 0xAA, 0x46, 0x73, 0x30, 0x59, 0xFF, 0xA2, 0x12, 0x95, 0xAC, 0x44, 0x30, 0x83, 0x09, 0x91, 0x35, 0x4C, 0x92, 0x4D, 0x12, 0x33, 0x43, 0xA4, 0x8C, 0x99, 0xB5, 0x89, 0x47, 0xAC, 0x18, 0x12, 0xAB, 0xE8, 0x18, 0x27, 0xB1, 0x40, 0x4A, 0x3F, 0x14, 0xA2, 0xD7, 0x94, 0xC4, 0x1A, 0x0E, 0x19, 0x60, 0x01, 0x0B, 0x38, 0x80, 0x5E, 0xF5, 0x0A, 0x82, 0x59, 0xFA, 0xB5, 0x45, 0x7B, 0xB5, 0xD0, 0x02, 0x26, 0x80, 0x21, 0x09, 0x94, 0x0C, 0x33, 0xA1, 0x71, 0x40, 0x03, 0x4C, 0x40, 0x83, 0x8D, 0x0E, 0x70, 0x80, 0x20, 0xB9, 0xA3, 0x64, 0xB3, 0x43, 0xB4, 0xA2, 0xE9, 0x91, 0x08, 0x3D, 0x20, 0xC2, 0x9E, 0x92, 0x00, 0x48, 0xA1, 0xBC, 0xE7, 0x08, 0x42, 0x31, 0xA4, 0x0F, 0x20, 0x99, 0xC8, 0xD2, 0x46, 0x92, 0x0A, 0x41, 0x3D, 0x4A, 0xD6, 0x3C, 0xBB, 0xA2, 0x72, 0x99, 0x8D, 0x91, 0x0B, 0x62, 0x64, 0x51, 0x3C, 0xB9, 0x20, 0x02, 0x34, 0x40, 0x3F, 0xA3, 0xCC, 0xCF, 0xC6, 0x02, 0xD4, 0xA1, 0x31, 0x7E, 0x68, 0x00, 0xEE, 0x39, 0x51, 0x08, 0x0B, 0xA7, 0x22, 0xC3, 0xB1, 0xC8, 0x45, 0x89, 0x53, 0x9C, 0x2D, 0x69, 0xA4, 0xCB, 0xE6, 0xF2, 0xD2, 0x97, 0x93, 0x03, 0x26, 0x92, 0x84, 0x29, 0x1B, 0x27, 0x41, 0xC9, 0x64, 0x9E, 0xAB, 0x52, 0x09, 0x42, 0xD7, 0xCC, 0xC0, 0x58, 0xF5, 0xBB, 0xE0, 0xB5, 0xAA, 0x35, 0xC7, 0x4B, 0xDE, 0x41, 0x60, 0x13, 0x4E, 0x93, 0xD0, 0xE6, 0x36, 0x91, 0xF7, 0xCD, 0x68, 0x01, 0xAA, 0x9B, 0x75, 0xC2, 0x56, 0x2F, 0x8A, 0xB7, 0x0B, 0x59, 0x85, 0xC4, 0x58, 0xF8, 0xCD, 0xEF, 0x01, 0x11, 0xF2, 0xCE, 0x19, 0xCC, 0xB3, 0x15, 0xB0, 0x40, 0x02, 0x0E, 0x82, 0xD0, 0xCF, 0x7D, 0xFE, 0xF3, 0x52, 0x02, 0x4D, 0x70, 0x82, 0xBB, 0x71, 0x50, 0x84, 0x96, 0x83, 0x1D, 0xE3, 0x00, 0x95, 0xFF, 0xA8, 0xC6, 0xF7, 0x0E, 0x89, 0xB2, 0xCF, 0xC2, 0x16, 0x9D, 0x28, 0x47, 0x7A, 0x26, 0x11, 0x38, 0xD6, 0x83, 0x80, 0xA8, 0xB2, 0x15, 0x1C, 0xCF, 0x81, 0x84, 0x3C, 0xB5, 0x4A, 0x82, 0xFE, 0x6B, 0x48, 0x3F, 0x20, 0x02, 0x0F, 0x01, 0xAE, 0x74, 0x59, 0x0A, 0x34, 0x96, 0x47, 0x14, 0x08, 0x53, 0x91, 0xC8, 0x74, 0xA6, 0x34, 0xFD, 0x9D, 0x4D, 0xAF, 0x35, 0xBC, 0x5F, 0x60, 0x10, 0x27, 0x88, 0xE0, 0x20, 0x07, 0xC5, 0x05, 0xD4, 0xD4, 0x0A, 0x95, 0xA8, 0x4F, 0x31, 0xEA, 0x51, 0x91, 0x0A, 0xAF, 0x78, 0xAD, 0xB0, 0x85, 0x8B, 0x79, 0xE1, 0x53, 0x65, 0xA8, 0x2F, 0xA9, 0x52, 0x35, 0xBC, 0x58, 0x2E, 0x5D, 0xC1, 0x02, 0xB3, 0x4C, 0xEE, 0x62, 0xC9, 0x87, 0x5C, 0xBD, 0xCD, 0x57, 0xC1, 0x9A, 0x01, 0xDE, 0x14, 0x09, 0x38, 0x66, 0xCD, 0xD8, 0x6F, 0x3E, 0xD6, 0x19, 0xD6, 0xB8, 0x2C, 0x36, 0x6F, 0x85, 0xAB, 0x16, 0x55, 0x96, 0x81, 0x90, 0x89, 0x80, 0x43, 0x34, 0xD2, 0x6B, 0x8B, 0x48, 0x40, 0x02, 0xAD, 0xF9, 0xF9, 0xCF, 0x80, 0x66, 0xC0, 0x2C, 0x2D, 0x44, 0x58, 0x0A, 0x78, 0x80, 0x35, 0x19, 0xA0, 0xC0, 0x01, 0x66, 0xE0, 0xD8, 0x39, 0xB6, 0x18, 0x09, 0x46, 0xB8, 0x8E, 0x64, 0x81, 0xD5, 0x0F, 0x3C, 0x2A, 0x63, 0x13, 0xDC, 0xD1, 0x63, 0x0F, 0x36, 0x2D, 0x03, 0x4D, 0xC4, 0x2E, 0x09, 0x43, 0x9E, 0xDA, 0x7A, 0xAC, 0xE0, 0x83, 0x48, 0x92, 0xD6, 0xB4, 0xA6, 0xA5, 0x82, 0x6A, 0x8D, 0xB2, 0x22, 0xE1, 0xAE, 0x5A, 0x41, 0x4E, 0x73, 0xE4, 0x6A, 0x81, 0xDA, 0x93, 0x05, 0xD1, 0xA0, 0x0A, 0xA9, 0xF1, 0xDA, 0xC7, 0x72, 0x6B, 0x57, 0xFF, 0x6C, 0xA8, 0x43, 0x0A, 0x48, 0x65, 0x70, 0x8F, 0x22, 0xB8, 0x57, 0x56, 0x81, 0x0A, 0xC6, 0x3E, 0x6E, 0x01, 0x90, 0xFF, 0x3D, 0xCB, 0xE4, 0x2A, 0x77, 0xB9, 0x1D, 0xC0, 0x65, 0x2E, 0x75, 0xC9, 0xCB, 0x5E, 0x8A, 0x46, 0x89, 0x23, 0x90, 0x6E, 0x92, 0xA8, 0x4B, 0xCC, 0xEB, 0x76, 0x2E, 0xBB, 0x3F, 0xE4, 0xAE, 0x77, 0xB3, 0x4C, 0xEE, 0x72, 0xFB, 0xAB, 0xBC, 0xE8, 0xAE, 0xE6, 0x79, 0x3F, 0xFD, 0x69, 0x6D, 0xCA, 0xF7, 0x17, 0x78, 0x32, 0x71, 0x7B, 0x15, 0x85, 0xA8, 0xF8, 0x16, 0x23, 0x26, 0xF5, 0xFE, 0x84, 0x43, 0x40, 0xA2, 0x51, 0x0F, 0xDF, 0x4A, 0xBF, 0x0A, 0x8C, 0x27, 0x2B, 0x94, 0x10, 0xA9, 0x68, 0x48, 0xEF, 0xC0, 0x07, 0x47, 0xB0, 0x82, 0x15, 0xCC, 0xE0, 0x82, 0x9A, 0x83, 0x54, 0xEA, 0x00, 0x55, 0x42, 0xF3, 0x27, 0x91, 0x89, 0x66, 0xD8, 0xC2, 0x18, 0x26, 0x9F, 0x44, 0x3B, 0x7C, 0x2B, 0x8F, 0xFA, 0xBB, 0x08, 0xBC, 0xAA, 0xE7, 0xFE, 0xFC, 0xF1, 0x4E, 0x24, 0x98, 0x34, 0x9E, 0xC0, 0x9A, 0x63, 0x40, 0x10, 0x48, 0x63, 0x7E, 0xCF, 0x78, 0xBF, 0xED, 0xBC, 0xF1, 0x8D, 0xBF, 0xA9, 0xE3, 0x1D, 0x3B, 0x6A, 0x76, 0x3A, 0xBD, 0x49, 0x90, 0x7D, 0x3A, 0xAE, 0x22, 0xB3, 0xFA, 0xC8, 0x48, 0x6E, 0x8A, 0x92, 0xD9, 0xC5, 0xE4, 0xAB, 0xA8, 0x50, 0x5E, 0x50, 0x76, 0x6A, 0x5B, 0xA8, 0xAC, 0xAF, 0xA9, 0x9A, 0xFB, 0xE9, 0x39, 0x9C, 0xCB, 0x96, 0xA7, 0x9E, 0x5D, 0x2C, 0x9A, 0xCC, 0xCD, 0xF9, 0x41, 0x73, 0x9A, 0x45, 0x03, 0x1C, 0x25, 0x79, 0xC0, 0x8A, 0x25, 0xC3, 0xAE, 0x71, 0x52, 0x56, 0x67, 0xD6, 0x38, 0x80, 0x03, 0x34, 0xEA, 0x6B, 0x01, 0xF8, 0xFC, 0xE7, 0xB9, 0xB9, 0xBD, 0x41, 0x81, 0x9E, 0x4F, 0x01, 0x0E, 0x30, 0x01, 0x05, 0xD4, 0xB9, 0x06, 0xE1, 0xBB, 0x9F, 0x4A, 0x23, 0x2D, 0xE9, 0xC9, 0x4E, 0x56, 0x16, 0x95, 0x15, 0x46, 0x77, 0x30, 0xBB, 0xE9, 0xFF, 0xA9, 0xD1, 0xE0, 0x08, 0x93, 0xF8, 0xD6, 0xE1, 0x8F, 0x50, 0x05, 0xAA, 0x25, 0x52, 0x44, 0xA5, 0x3D, 0xF5, 0x0E, 0x4C, 0x8B, 0x20, 0x54, 0x5B, 0xDE, 0xD4, 0x48, 0x89, 0x9B, 0xD3, 0x02, 0xE9, 0x73, 0x03, 0x78, 0x6D, 0x3F, 0xB8, 0xC5, 0x9B, 0x18, 0x15, 0xA0, 0x57, 0x0C, 0x8D, 0xB1, 0x43, 0x14, 0x20, 0x80, 0xDF, 0xCC, 0x85, 0xAE, 0xBF, 0xFE, 0x15, 0x46, 0x07, 0x58, 0x8A, 0x8C, 0xA0, 0x6D, 0xA3, 0xC6, 0x35, 0xB7, 0x47, 0xD5, 0x1E, 0x0D, 0xB6, 0x2B, 0xC7, 0x15, 0x61, 0x0E, 0xB3, 0x98, 0xDF, 0xDE, 0x2A, 0x57, 0x43, 0x27, 0x18, 0xA8, 0x1B, 0xFF, 0xF8, 0x79, 0x49, 0xB7, 0xF2, 0x59, 0x87, 0xCD, 0xE6, 0xCB, 0x80, 0xDD, 0xB2, 0x53, 0x6F, 0xED, 0x90, 0x31, 0x6F, 0x5E, 0xDD, 0x6E, 0x17, 0xC0, 0x3B, 0x67, 0xBE, 0xF7, 0xFD, 0x11, 0xFC, 0xFA, 0x7B, 0x05, 0xE0, 0x0F, 0xFF, 0x0A, 0xE2, 0xA7, 0x5F, 0x93, 0xCF, 0x80, 0x07, 0x94, 0xFA, 0xE7, 0x0F, 0xAA, 0x37, 0xD0, 0x85, 0xBB, 0xDF, 0x7A, 0x0D, 0x76, 0x30, 0x74, 0x20, 0x2E, 0x8F, 0x81, 0x3C, 0xD4, 0x1D, 0x17, 0xC5, 0x78, 0x86, 0x1B, 0xBA, 0xF1, 0x8B, 0x63, 0xFC, 0xFF, 0x17, 0x55, 0x7F, 0xF6, 0x77, 0x2B, 0x1C, 0x85, 0x04, 0x7D, 0xE2, 0x2A, 0x22, 0x37, 0x52, 0xBE, 0xD2, 0x3F, 0x10, 0xB4, 0x4E, 0xC0, 0x82, 0x2C, 0x3E, 0xC3, 0x40, 0x30, 0x57, 0x63, 0x08, 0x21, 0x73, 0x33, 0x17, 0x2D, 0xFB, 0x63, 0x53, 0xC2, 0xF3, 0x12, 0x31, 0x31, 0x13, 0x39, 0x17, 0x09, 0x87, 0xA0, 0x78, 0x3E, 0xE5, 0x73, 0x3F, 0x17, 0x42, 0x41, 0x27, 0x74, 0x43, 0x57, 0x15, 0x45, 0x07, 0x2F, 0x4B, 0x95, 0x74, 0xF6, 0xB2, 0x74, 0xF9, 0xD2, 0x74, 0x57, 0x86, 0x7C, 0x34, 0x78, 0x17, 0xCE, 0xB4, 0x25, 0x00, 0x20, 0xFF, 0x18, 0xC9, 0x94, 0x1B, 0x17, 0xF0, 0x39, 0x3F, 0x84, 0x30, 0x9A, 0x43, 0x32, 0x5F, 0x84, 0x44, 0x4B, 0x24, 0x24, 0xBE, 0x61, 0x1F, 0x5E, 0xE4, 0x7B, 0x4C, 0x92, 0x18, 0x17, 0x50, 0x18, 0x3A, 0x98, 0x32, 0x74, 0x95, 0x01, 0x1B, 0x30, 0x23, 0x30, 0xC2, 0x67, 0x7D, 0xE6, 0x67, 0x6F, 0x97, 0x85, 0x59, 0xE8, 0x67, 0x13, 0x22, 0x77, 0x4A, 0x10, 0x2A, 0x15, 0x71, 0x3E, 0x90, 0xE6, 0x77, 0x64, 0x28, 0x34, 0xF8, 0x60, 0x59, 0x14, 0x74, 0x59, 0xDC, 0x71, 0x04, 0x85, 0x27, 0x6A, 0xA2, 0x35, 0x5A, 0xA5, 0x86, 0x6A, 0x95, 0xA7, 0x48, 0xAB, 0xE4, 0x6A, 0xC4, 0x76, 0x35, 0xC1, 0x75, 0x6A, 0x97, 0xA7, 0x48, 0xAD, 0x05, 0x42, 0x40, 0x55, 0x05, 0xA4, 0xA4, 0x1F, 0xFD, 0xB1, 0x6B, 0x78, 0xD3, 0x6B, 0xA5, 0xE4, 0x6B, 0x69, 0xB3, 0x7A, 0x80, 0xC3, 0x6C, 0xCB, 0xC6, 0x14, 0x7E, 0x05, 0x23, 0xB4, 0x04, 0x02, 0xB2, 0x17, 0x23, 0xB4, 0x57, 0x7B, 0xB6, 0xE7, 0x5C, 0xB9, 0x77, 0x6D, 0xBB, 0x57, 0x66, 0xBD, 0x07, 0x1B, 0xD5, 0x05, 0x7C, 0xC1, 0x07, 0x66, 0x3B, 0x94, 0x25, 0xCB, 0x54, 0x83, 0xA6, 0x08, 0x75, 0xCB, 0x97, 0x8A, 0x68, 0xB2, 0x53, 0xB0, 0x03, 0x27, 0xEA, 0x35, 0x5F, 0x14, 0x64, 0x27, 0xC7, 0x83, 0x0A, 0x18, 0xC8, 0x0A, 0xA5, 0x40, 0x28, 0xF2, 0x75, 0x09, 0xA8, 0x00, 0x0A, 0xDC, 0xF7, 0x62, 0x61, 0x08, 0x47, 0x2B, 0x00, 0x1D, 0xC1, 0x28, 0x7E, 0xE5, 0x20, 0x7E, 0xE7, 0x83, 0x5F, 0x2B, 0x80, 0x03, 0x31, 0xB0, 0x8C, 0x41, 0x50, 0x0D, 0xD4, 0x80, 0x03, 0x4B, 0xF0, 0x7E, 0x03, 0xB5, 0x0D, 0xD3, 0x18, 0x8D, 0xEE, 0x47, 0x0E, 0x0E, 0x07, 0x2A, 0xA4, 0x22, 0x2C, 0xFE, 0xA7, 0x7F, 0xFD, 0xD7, 0x61, 0xE0, 0x03, 0x47, 0x15, 0xF6, 0xFF, 0x7F, 0xF7, 0x27, 0x10, 0xF6, 0xC7, 0x51, 0xD2, 0xD1, 0x3F, 0xEA, 0x68, 0x62, 0xFB, 0xE3, 0x3F, 0xFF, 0x13, 0x4F, 0x28, 0x17, 0x2C, 0x30, 0xB5, 0x61, 0x14, 0x68, 0x1D, 0x16, 0x28, 0x53, 0x39, 0x66, 0x0A, 0x1A, 0xD8, 0x09, 0x16, 0xD4, 0x63, 0x71, 0x52, 0x13, 0x20, 0x68, 0x08, 0xDF, 0x12, 0x6A, 0x41, 0xE1, 0x73, 0x42, 0x75, 0x14, 0x27, 0xA8, 0x2E, 0x29, 0x68, 0x15, 0x45, 0x77, 0x74, 0xF3, 0x42, 0x2F, 0x4A, 0x07, 0x55, 0x55, 0xC6, 0x2F, 0xA7, 0x58, 0x91, 0x79, 0x21, 0x30, 0xB6, 0x71, 0x75, 0xDF, 0x86, 0x18, 0x8D, 0xE1, 0x18, 0x0C, 0x23, 0x19, 0x31, 0x93, 0x1F, 0xF6, 0xF1, 0x1B, 0x75, 0xE6, 0x32, 0xFB, 0xD1, 0x56, 0x71, 0x46, 0x1B, 0xC6, 0xB1, 0x45, 0x0D, 0x70, 0x18, 0x19, 0x80, 0x76, 0x54, 0x08, 0x02, 0x56, 0x88, 0x85, 0x5A, 0x58, 0x93, 0x35, 0xA9, 0x35, 0x08, 0xD0, 0x05, 0x45, 0x10, 0x0E, 0x39, 0x30, 0x7E, 0x1B, 0xF1, 0x3D, 0x63, 0x78, 0x47, 0x95, 0x35, 0x94, 0x44, 0x99, 0x34, 0xFC, 0xA8, 0x09, 0x6B, 0xD8, 0x03, 0x03, 0x29, 0x35, 0x4F, 0x53, 0x48, 0xEB, 0xD1, 0x78, 0x08, 0x32, 0x5A, 0x72, 0x18, 0x49, 0x54, 0xB9, 0x48, 0x58, 0x43, 0x2E, 0xC4, 0xE5, 0x59, 0x24, 0x02, 0x79, 0x74, 0x28, 0x5B, 0x44, 0x71, 0x35, 0xB3, 0x45, 0x00, 0xBA, 0x45, 0x4A, 0x89, 0xB6, 0x6B, 0xB8, 0x65, 0x96, 0x1B, 0x63, 0x57, 0xBD, 0xA5, 0x00, 0xAA, 0x77, 0x2E, 0x4B, 0xE1, 0x7A, 0xCD, 0x86, 0x38, 0x7C, 0x55, 0x4B, 0xCB, 0x25, 0x6D, 0xB7, 0xF7, 0x38, 0xD5, 0x16, 0x24, 0xA1, 0xB1, 0x89, 0x5C, 0x01, 0x92, 0x24, 0xE3, 0x42, 0xC6, 0x74, 0x4C, 0xC2, 0x17, 0x6E, 0xDD, 0x75, 0x83, 0x16, 0x79, 0x98, 0xCF, 0xA4, 0x8A, 0x8A, 0xB9, 0x08, 0xAC, 0xF8, 0xFF, 0x7C, 0xD1, 0x37, 0x27, 0x1D, 0x08, 0x8B, 0x74, 0x12, 0x6F, 0xFA, 0x50, 0x4E, 0x88, 0xB2, 0x2A, 0x94, 0x89, 0x8B, 0xEF, 0x76, 0x4F, 0xC0, 0xA3, 0x03, 0xBD, 0xC8, 0x72, 0xBF, 0x78, 0x2B, 0xC1, 0x28, 0x71, 0x3C, 0x20, 0x7E, 0xE3, 0x77, 0x8C, 0xE0, 0x93, 0x9A, 0x15, 0x91, 0x8C, 0x31, 0x00, 0x03, 0xAE, 0xB9, 0x8C, 0x31, 0xD0, 0x8C, 0x03, 0x66, 0x70, 0xEC, 0x27, 0x8D, 0x3C, 0x19, 0x7F, 0xF1, 0x47, 0x9A, 0xE2, 0x43, 0x2A, 0xF3, 0x40, 0x61, 0xF1, 0xD0, 0x3E, 0x00, 0x78, 0x61, 0xE5, 0x28, 0x80, 0x1F, 0xD6, 0x80, 0xAB, 0x02, 0x04, 0xFD, 0x00, 0x3E, 0xE3, 0xA8, 0x7F, 0xE6, 0x68, 0x3E, 0x45, 0x70, 0x0F, 0xEB, 0x28, 0x72, 0x09, 0xD8, 0x2A, 0x28, 0xA1, 0x62, 0x10, 0xC4, 0x77, 0xC9, 0xD2, 0x4E, 0x2D, 0x57, 0x8F, 0x36, 0x76, 0x8F, 0x0F, 0x44, 0x73, 0xFA, 0xA8, 0x81, 0x38, 0x75, 0x41, 0x94, 0x10, 0x82, 0x22, 0x48, 0x64, 0x06, 0x79, 0x90, 0x09, 0xB9, 0x14, 0x0B, 0xC9, 0x90, 0x4C, 0xE6, 0x90, 0x5E, 0xE1, 0x82, 0x52, 0x26, 0x91, 0x34, 0x34, 0x83, 0x88, 0x79, 0x8A, 0x3A, 0xA8, 0x45, 0x1A, 0xB9, 0x9F, 0x08, 0xA3, 0x1C, 0x77, 0x33, 0x19, 0x0E, 0x40, 0x24, 0xBB, 0x16, 0x33, 0x4E, 0x24, 0x56, 0xB1, 0xD1, 0x56, 0x9D, 0x63, 0x1C, 0xB1, 0x71, 0x01, 0x2F, 0x99, 0x76, 0x32, 0xC9, 0x76, 0x6D, 0x67, 0x93, 0x95, 0xC4, 0x85, 0x38, 0x39, 0x21, 0x16, 0xAA, 0x93, 0x09, 0xF6, 0x0D, 0x3E, 0xF9, 0x62, 0x90, 0x56, 0x94, 0x44, 0xA9, 0x03, 0x42, 0x70, 0x94, 0xC6, 0x70, 0x34, 0xDF, 0xC2, 0x94, 0x3D, 0xE7, 0x59, 0xEC, 0x31, 0x22, 0x6F, 0x73, 0x79, 0x22, 0x42, 0x05, 0xAD, 0xA4, 0x5A, 0x2C, 0x42, 0x01, 0x0D, 0xA0, 0x58, 0x76, 0xB3, 0x5B, 0x18, 0x22, 0xFF, 0x19, 0x21, 0xB2, 0x87, 0x74, 0xB8, 0x95, 0x22, 0x02, 0x1F, 0xB8, 0xE6, 0x1F, 0x79, 0xF3, 0x31, 0x40, 0x0A, 0xA4, 0x33, 0x93, 0x96, 0x46, 0x7A, 0x4A, 0x6A, 0x99, 0x7A, 0xB0, 0xD4, 0x14, 0x83, 0x36, 0x97, 0xC9, 0xE5, 0xA4, 0xB3, 0x77, 0x4B, 0xD2, 0x76, 0x89, 0xD4, 0x96, 0x97, 0xBA, 0x17, 0x5D, 0x47, 0xC2, 0x1B, 0xD4, 0x25, 0x16, 0xA0, 0x38, 0x25, 0xA2, 0x38, 0x8A, 0x83, 0x71, 0x9F, 0x62, 0x7A, 0x43, 0x8B, 0x59, 0xA6, 0x87, 0xC0, 0x8A, 0xE9, 0x95, 0x2D, 0xD4, 0x12, 0x0C, 0xC2, 0xD0, 0x4D, 0xCB, 0x63, 0x99, 0x36, 0x10, 0x6F, 0x9A, 0x39, 0x5F, 0xA8, 0x10, 0xA7, 0x9F, 0x09, 0x9A, 0xE1, 0xB8, 0x33, 0xC2, 0x08, 0x7E, 0xDF, 0x03, 0x70, 0xFA, 0xF5, 0x3C, 0xAE, 0x19, 0xA8, 0x30, 0x00, 0x9B, 0xB1, 0x69, 0x0D, 0xB4, 0x59, 0x3D, 0xB8, 0x99, 0xA8, 0xD9, 0xA8, 0x9B, 0x10, 0x37, 0x04, 0xD3, 0xC1, 0x7F, 0x17, 0x16, 0xA9, 0xE4, 0x38, 0x11, 0xE8, 0x03, 0x41, 0xB4, 0x68, 0x99, 0x9E, 0x89, 0x10, 0x00, 0x81, 0x1D, 0x21, 0x16, 0x9C, 0xCC, 0x09, 0x3F, 0xEE, 0x23, 0x2B, 0xEA, 0x18, 0x9D, 0xF5, 0xD4, 0x5E, 0x25, 0x65, 0x52, 0x0F, 0xB8, 0x40, 0xDC, 0xC9, 0x9D, 0xDE, 0xF9, 0x9D, 0xF9, 0x88, 0xA9, 0x15, 0xC4, 0x81, 0xE4, 0xE9, 0x47, 0x1B, 0x34, 0x90, 0x1D, 0x44, 0x82, 0x07, 0x79, 0x6C, 0xEB, 0xD9, 0x9E, 0x53, 0xD1, 0x90, 0xF0, 0xC9, 0x54, 0x10, 0xF9, 0x82, 0xF4, 0x69, 0x65, 0xF6, 0x39, 0xA6, 0xC7, 0xA7, 0x83, 0x19, 0xC9, 0x9F, 0xFB, 0x59, 0x16, 0x4D, 0x22, 0x33, 0x0F, 0x13, 0xA0, 0x24, 0x09, 0x92, 0x57, 0xE7, 0x56, 0x4C, 0xD8, 0x83, 0x6B, 0xC1, 0x92, 0xAC, 0xB1, 0x01, 0x30, 0xF9, 0x96, 0x6B, 0x07, 0xA1, 0xF2, 0x21, 0xA1, 0x0F, 0xC0, 0xFF, 0x00, 0x5D, 0xC8, 0x85, 0x16, 0x5A, 0xAE, 0x08, 0xF0, 0x00, 0x5D, 0xE0, 0x04, 0x0B, 0xD7, 0x60, 0xE0, 0x67, 0x0F, 0x33, 0xC0, 0x72, 0x1D, 0x4A, 0x34, 0xB7, 0xB8, 0x8B, 0xA8, 0x50, 0x0C, 0xDC, 0xE1, 0x08, 0x3D, 0x20, 0x03, 0x03, 0x19, 0x6A, 0x42, 0xD1, 0x94, 0x46, 0x31, 0x6A, 0x8A, 0xA4, 0xA3, 0x8F, 0xB7, 0x14, 0x76, 0xD8, 0x01, 0xA1, 0x61, 0x5B, 0x33, 0x4A, 0xA3, 0x5C, 0x14, 0x20, 0x79, 0x55, 0x36, 0x77, 0x58, 0x05, 0x0B, 0x62, 0x79, 0x7A, 0xB8, 0x48, 0x8F, 0xC4, 0x48, 0x34, 0x80, 0x21, 0x0B, 0x90, 0x21, 0x41, 0x5A, 0x96, 0x41, 0x2A, 0x88, 0x47, 0x6A, 0xA3, 0x0A, 0x70, 0x21, 0x19, 0x42, 0x00, 0x2A, 0x82, 0x6C, 0xB1, 0x77, 0x00, 0xCE, 0x26, 0x97, 0x93, 0x18, 0xA5, 0x34, 0x72, 0x23, 0x3A, 0x32, 0xA5, 0x77, 0x99, 0x97, 0xD6, 0x26, 0x31, 0x58, 0xCA, 0x89, 0x25, 0x29, 0x84, 0x9C, 0x83, 0x5D, 0x83, 0x39, 0x8A, 0xA2, 0x63, 0xAC, 0x3E, 0x0B, 0x30, 0x66, 0x1A, 0xB4, 0xE6, 0x05, 0x64, 0x8E, 0xB9, 0x5E, 0xB8, 0xC8, 0xA6, 0xB1, 0xA8, 0x12, 0x29, 0x71, 0x3C, 0xC0, 0xF0, 0x6E, 0x99, 0x70, 0x0A, 0x36, 0x80, 0x9C, 0xEF, 0xDA, 0x7D, 0xDE, 0xE7, 0x61, 0x7C, 0xEA, 0xA7, 0xFA, 0xB5, 0x02, 0x3F, 0x10, 0x04, 0x31, 0xE0, 0x02, 0x5E, 0x2B, 0xA8, 0x81, 0x4A, 0xA8, 0x85, 0xBA, 0x7E, 0x08, 0xA6, 0xA8, 0xDB, 0x23, 0x7F, 0xA4, 0xD9, 0xA8, 0xEC, 0x80, 0x0E, 0xE3, 0xD3, 0x68, 0x90, 0xEA, 0xA9, 0x0E, 0x75, 0x11, 0xBB, 0xE2, 0x2B, 0x2B, 0x01, 0x0B, 0x25, 0xA1, 0x04, 0x92, 0xCA, 0x51, 0xA1, 0x42, 0x8E, 0x19, 0x37, 0x11, 0xCF, 0x59, 0x52, 0x73, 0xDB, 0x80, 0x08, 0xD8, 0x10, 0xD1, 0xF2, 0xAE, 0xFF, 0xF0, 0x0F, 0x91, 0x66, 0x11, 0xAB, 0xCA, 0xFF, 0xAA, 0xAD, 0xEA, 0x2C, 0xED, 0x55, 0x73, 0xB1, 0x7A, 0x6F, 0xFE, 0xE8, 0x0B, 0xB4, 0x5A, 0xAB, 0x04, 0xF9, 0x13, 0xB8, 0xAA, 0x9E, 0xBB, 0xCA, 0xAB, 0x51, 0xE1, 0xAB, 0x4E, 0x86, 0x74, 0x4D, 0x65, 0x2F, 0x53, 0x96, 0x2F, 0xF5, 0xF9, 0xB3, 0x35, 0x18, 0x18, 0x61, 0xA6, 0xAC, 0xFC, 0xC9, 0x18, 0xBB, 0xD1, 0x97, 0x19, 0x30, 0x02, 0xD1, 0x5A, 0x44, 0x56, 0x34, 0x25, 0xA8, 0x2B, 0x00, 0x5B, 0x20, 0x00, 0x29, 0xE3, 0x92, 0x3A, 0x32, 0x23, 0x54, 0xF0, 0x22, 0xDD, 0x0A, 0x68, 0x37, 0x29, 0xAE, 0x38, 0xC9, 0x05, 0x0F, 0xD0, 0x85, 0x15, 0xC0, 0x05, 0xB0, 0x12, 0x3E, 0x64, 0x8B, 0x3D, 0xEB, 0xAA, 0xA1, 0xED, 0xCA, 0x4E, 0xD5, 0x61, 0x04, 0x4A, 0x40, 0x2D, 0x37, 0x85, 0x2D, 0xD8, 0x92, 0x78, 0x97, 0x7B, 0xA2, 0x8D, 0xE7, 0x03, 0xAC, 0x15, 0x95, 0x95, 0xA7, 0x87, 0x72, 0xF8, 0x5A, 0xC7, 0xA6, 0x21, 0x62, 0x93, 0x7A, 0x32, 0xEA, 0x18, 0x0E, 0x30, 0x00, 0x22, 0xBB, 0x01, 0x0A, 0xB0, 0x01, 0x53, 0x50, 0x5A, 0xDC, 0x7B, 0x49, 0x0C, 0xE2, 0x03, 0x93, 0x17, 0x79, 0x01, 0x4B, 0x95, 0x01, 0x2B, 0x49, 0x51, 0x50, 0x00, 0x04, 0xA2, 0x00, 0x50, 0x94, 0x1A, 0x43, 0xFA, 0x31, 0x1C, 0x02, 0xC0, 0x52, 0x24, 0xC0, 0x14, 0xB0, 0x00, 0x12, 0x82, 0x00, 0x19, 0x7B, 0x4A, 0x02, 0x42, 0x00, 0xAA, 0x76, 0x5C, 0x28, 0x9B, 0xB2, 0x12, 0xCC, 0xB2, 0x36, 0xA2, 0x4B, 0x54, 0xFA, 0x38, 0xB8, 0xF7, 0x5C, 0x57, 0x4A, 0x39, 0xD2, 0xF5, 0x66, 0x2E, 0xD3, 0xA5, 0x4D, 0x08, 0x6E, 0x84, 0xD9, 0x4C, 0xA6, 0x5B, 0xC2, 0x61, 0x12, 0xA8, 0x5E, 0x9B, 0xC2, 0x2A, 0xBC, 0xC2, 0x2C, 0xDC, 0xC2, 0x2E, 0xFC, 0xC2, 0x30, 0xDC, 0xC2, 0x30, 0x20, 0xC3, 0x60, 0x5B, 0xFF, 0xC3, 0x28, 0x1C, 0xC3, 0x34, 0x5C, 0xC3, 0x38, 0xEC, 0x02, 0x36, 0x6C, 0xC3, 0xCB, 0xA8, 0xC3, 0x29, 0xDC, 0x02, 0x42, 0x3C, 0xC4, 0x44, 0x5C, 0xC4, 0x46, 0x4C, 0xC4, 0x3B, 0xEC, 0xC2, 0x3D, 0xFC, 0x9A, 0xB0, 0x69, 0x70, 0xCB, 0x8B, 0x3D, 0x0D, 0xA6, 0x9B, 0x52, 0xBC, 0x9B, 0x8E, 0x5A, 0x51, 0xC2, 0x12, 0x80, 0x70, 0x5B, 0x3E, 0xEE, 0x5A, 0x4F, 0x9E, 0xE9, 0x0F, 0xB9, 0xB3, 0x4E, 0x96, 0xDA, 0x3E, 0x6E, 0x8B, 0x7F, 0x19, 0x37, 0x51, 0xDE, 0x28, 0xC6, 0x06, 0xF1, 0x0F, 0xAC, 0x22, 0xB8, 0xFC, 0xC0, 0x0F, 0xD0, 0x7B, 0x2C, 0xFD, 0x00, 0x4F, 0x88, 0xAB, 0xAA, 0x8B, 0x0B, 0x53, 0x8D, 0xFB, 0x2C, 0x8F, 0x9B, 0x3C, 0x36, 0xC7, 0x81, 0x93, 0x5B, 0xB9, 0xDE, 0x72, 0x1E, 0xE8, 0x59, 0x64, 0xB9, 0xBA, 0x9E, 0x50, 0xC1, 0xB9, 0x50, 0xE0, 0xB9, 0x2D, 0x18, 0xBA, 0x2F, 0x04, 0x83, 0x51, 0x45, 0x91, 0xD0, 0xC4, 0x0D, 0x08, 0x17, 0xC9, 0x92, 0x3C, 0xC9, 0x94, 0x2C, 0xC9, 0xF0, 0xD7, 0x60, 0x09, 0x56, 0xC9, 0xD9, 0xF0, 0x7E, 0x96, 0xFC, 0x7E, 0x8A, 0xCA, 0x93, 0x97, 0x02, 0x3D, 0xA2, 0x3C, 0xCA, 0xD3, 0x90, 0x0D, 0xCF, 0x78, 0x60, 0xD7, 0x78, 0x50, 0xE2, 0xC7, 0x10, 0xEC, 0xA4, 0xAA, 0x33, 0x00, 0xB5, 0x38, 0x17, 0x3B, 0xFB, 0xFA, 0x53, 0xFF, 0xCA, 0x1E, 0x48, 0xC1, 0xA3, 0x96, 0xD7, 0x14, 0x1C, 0x40, 0xA3, 0x89, 0xB6, 0x1F, 0x19, 0xE0, 0x21, 0x27, 0x39, 0xA3, 0x49, 0x72, 0xC0, 0x32, 0xAA, 0x48, 0x97, 0x54, 0x05, 0x3B, 0x90, 0xCC, 0x12, 0x8B, 0x48, 0x51, 0x60, 0x6A, 0x73, 0xF8, 0x78, 0x24, 0x22, 0x37, 0x1C, 0x40, 0x7A, 0x02, 0x92, 0x68, 0x76, 0xC7, 0x21, 0x68, 0x84, 0x1F, 0x1A, 0xC2, 0xBE, 0x0A, 0x90, 0xC0, 0x13, 0x92, 0xFF, 0x00, 0x19, 0x2B, 0x1A, 0x21, 0xDB, 0x5B, 0x0D, 0x6C, 0xB2, 0x73, 0xF7, 0x22, 0x81, 0x35, 0xC1, 0x74, 0xC9, 0x38, 0xD3, 0x76, 0x97, 0x55, 0x9A, 0x89, 0x7B, 0x59, 0xB3, 0x65, 0x76, 0xB3, 0x1F, 0xEC, 0x6D, 0xC1, 0x97, 0x4C, 0xDB, 0x25, 0x3A, 0x86, 0x69, 0xC2, 0xFC, 0x8C, 0x17, 0x37, 0xBC, 0xC2, 0x33, 0x9C, 0xC4, 0x02, 0x3D, 0xD0, 0x2C, 0x1C, 0xD0, 0x31, 0xBC, 0xC4, 0x06, 0x3D, 0xD0, 0x3D, 0x8C, 0xC3, 0x08, 0x8D, 0xD0, 0x2B, 0x7C, 0xC4, 0x10, 0x1D, 0xD1, 0x2D, 0xC0, 0xC2, 0x43, 0x7C, 0xD0, 0x60, 0x2B, 0xB6, 0x18, 0xED, 0xC4, 0x4F, 0x0C, 0x50, 0x9F, 0x32, 0xC5, 0xBA, 0xB9, 0x33, 0xA6, 0x12, 0x80, 0x64, 0xBC, 0x3E, 0x00, 0xD8, 0x11, 0xA7, 0xF0, 0xC5, 0xA5, 0x4A, 0x9D, 0xCB, 0x13, 0x11, 0xE8, 0x20, 0x05, 0x2F, 0x90, 0xC5, 0x0E, 0x85, 0xC5, 0x7D, 0x5B, 0x80, 0xBE, 0x62, 0x01, 0xA3, 0xAA, 0xC6, 0xA5, 0xFA, 0xAE, 0x18, 0x81, 0x01, 0x36, 0x5D, 0x9D, 0x27, 0x97, 0x3E, 0x75, 0x5C, 0x8F, 0x77, 0x8C, 0xC7, 0xE0, 0x39, 0xAF, 0x7B, 0xCC, 0xC7, 0x94, 0xCB, 0x53, 0x82, 0x30, 0xCB, 0x81, 0xFC, 0x87, 0x9A, 0x9B, 0x90, 0x86, 0x7C, 0xC8, 0xEF, 0xF9, 0xAB, 0xF2, 0x79, 0x16, 0x8C, 0x3C, 0x91, 0x29, 0x50, 0xAC, 0xA8, 0x03, 0xC9, 0x98, 0xB2, 0x04, 0x91, 0xBC, 0xD1, 0xD5, 0xE0, 0x4F, 0x9A, 0xFC, 0xD5, 0x9A, 0xEC, 0x7E, 0x63, 0xCD, 0xBC, 0x0B, 0xF7, 0xD5, 0xA9, 0x1C, 0x7F, 0xF0, 0xF7, 0xC4, 0xA4, 0xFC, 0xD6, 0xA2, 0x3C, 0x9B, 0xA5, 0x8C, 0x29, 0xD2, 0x18, 0x7F, 0xA6, 0xD9, 0xAE, 0xD0, 0x19, 0x12, 0x75, 0x14, 0xA2, 0x36, 0x10, 0x90, 0xE6, 0x39, 0x82, 0x85, 0xB4, 0xBD, 0xEC, 0x41, 0xB0, 0x54, 0x20, 0xB0, 0x0F, 0x8C, 0x14, 0x03, 0x40, 0xFF, 0x00, 0x0A, 0xEB, 0x00, 0xFE, 0x81, 0xB0, 0xB7, 0xD5, 0xD8, 0xA1, 0x71, 0x37, 0x09, 0xF2, 0x00, 0x56, 0x50, 0xBF, 0x94, 0x07, 0x79, 0x92, 0x74, 0xBF, 0xCF, 0x4C, 0x22, 0xEF, 0x41, 0x03, 0x05, 0x00, 0x45, 0x63, 0x94, 0xCD, 0x52, 0xA4, 0xCD, 0x68, 0xC4, 0x21, 0xE0, 0xEC, 0xBF, 0x47, 0x3A, 0x1A, 0x17, 0x32, 0x20, 0x23, 0xEB, 0x88, 0x20, 0x10, 0x58, 0x11, 0x2C, 0xC1, 0x54, 0xD0, 0x01, 0x8A, 0xF3, 0x22, 0xB6, 0xD4, 0xCE, 0xEE, 0xEC, 0x38, 0xDA, 0xAA, 0xC1, 0xF1, 0x2C, 0xCF, 0x20, 0xE9, 0x89, 0xB2, 0x01, 0xC2, 0x22, 0x4C, 0x98, 0x5C, 0xD6, 0xCF, 0xC6, 0x9D, 0x17, 0xAE, 0x49, 0xD0, 0x5F, 0x9B, 0xD0, 0xCA, 0x4D, 0xD0, 0xCC, 0x6D, 0xD1, 0x60, 0xDB, 0xDC, 0x3C, 0xBC, 0xD0, 0x4A, 0xDC, 0xD0, 0xD4, 0xED, 0xB5, 0x12, 0x9D, 0xDD, 0x45, 0x8C, 0xDD, 0x46, 0x9C, 0xC3, 0x3E, 0x8C, 0xD1, 0x62, 0x4B, 0x0D, 0xE1, 0x40, 0x3D, 0xF0, 0x57, 0x10, 0xA4, 0xF9, 0x71, 0xEF, 0x33, 0x11, 0xF9, 0x07, 0xD3, 0xF8, 0x15, 0x10, 0xF6, 0x80, 0x1D, 0x0C, 0xB8, 0x2A, 0xFB, 0x46, 0x12, 0xA8, 0xF2, 0x04, 0x2F, 0xAD, 0x7F, 0x56, 0x9C, 0xDE, 0x32, 0x9D, 0xB7, 0xF1, 0x50, 0x0F, 0x26, 0x66, 0x7E, 0xEF, 0xA4, 0x04, 0x28, 0x17, 0x9D, 0xC6, 0xA9, 0x3B, 0x24, 0x37, 0xC7, 0x41, 0x6D, 0xC7, 0x43, 0xED, 0xB8, 0x45, 0x0D, 0xAB, 0x9A, 0x69, 0x0C, 0x3E, 0xA6, 0xD4, 0x83, 0x64, 0xAB, 0x4D, 0xFD, 0x41, 0x83, 0xBC, 0xB9, 0x9C, 0xBB, 0x82, 0x54, 0xAD, 0xC8, 0x56, 0x3D, 0xAC, 0x8E, 0xFC, 0x4C, 0x5E, 0x7D, 0xD6, 0xEC, 0x27, 0xE2, 0x93, 0x7C, 0xA8, 0x23, 0x5E, 0xC9, 0x66, 0x2D, 0xE2, 0x97, 0xAC, 0x60, 0xEA, 0xE7, 0xC9, 0x6C, 0x1D, 0x0E, 0x1B, 0x0D, 0xD7, 0x32, 0x4E, 0xFF, 0xCA, 0x9B, 0x7C, 0xC9, 0x9E, 0xA2, 0x60, 0x76, 0x7D, 0xD7, 0x2B, 0x80, 0x11, 0xAF, 0x3C, 0xB5, 0x1E, 0x61, 0x12, 0xE3, 0xC1, 0x73, 0x27, 0x6A, 0xE1, 0x47, 0x31, 0x5A, 0x6F, 0xF3, 0xCC, 0xF8, 0x6B, 0x79, 0x51, 0x41, 0x05, 0xB1, 0x07, 0x4B, 0x2C, 0xB2, 0x35, 0x07, 0x50, 0x00, 0xA7, 0x67, 0x00, 0xDC, 0xAC, 0x21, 0x56, 0x4E, 0xB2, 0x94, 0x2D, 0x87, 0x9B, 0x14, 0x48, 0x3E, 0x41, 0x6C, 0x5A, 0x0E, 0xCD, 0x08, 0x62, 0x14, 0x0F, 0x20, 0xA3, 0x89, 0x76, 0xC0, 0x64, 0xB4, 0x00, 0xA5, 0x4D, 0xDA, 0x48, 0xBA, 0x5B, 0xA3, 0x31, 0x88, 0xA9, 0xA1, 0x00, 0x84, 0x15, 0xB2, 0x69, 0x83, 0x6C, 0xE8, 0xFC, 0xDA, 0xEA, 0xEC, 0x6C, 0xB6, 0x94, 0xDB, 0xBA, 0xED, 0x23, 0x3B, 0x02, 0xCF, 0x34, 0xCB, 0xC1, 0x94, 0x11, 0x33, 0xC1, 0x9D, 0xB3, 0x82, 0x39, 0x98, 0xB6, 0x4B, 0x7C, 0xFB, 0x7C, 0xDC, 0xFD, 0xFC, 0xDC, 0x3B, 0x9C, 0xDC, 0xD2, 0xAD, 0xDC, 0x8C, 0x0E, 0xC3, 0x36, 0x2C, 0xDD, 0x4B, 0xEC, 0xDD, 0xD6, 0x2D, 0xA8, 0x0F, 0xAD, 0xDD, 0xDA, 0xED, 0x02, 0x10, 0xAD, 0xC2, 0x97, 0x0E, 0xDE, 0x4D, 0x9C, 0x7E, 0x30, 0x4E, 0xD7, 0x97, 0x9C, 0x50, 0xE8, 0x3D, 0xC6, 0x15, 0x07, 0xD3, 0x12, 0xA5, 0x0C, 0x40, 0xF3, 0x72, 0xED, 0x5D, 0xE0, 0x27, 0x01, 0x41, 0x8C, 0x56, 0x2B, 0x7D, 0xEB, 0x58, 0xF6, 0x93, 0x50, 0xCB, 0xF9, 0x8D, 0x34, 0x6D, 0x62, 0xFD, 0x55, 0x7D, 0xDF, 0x54, 0x52, 0x07, 0xEE, 0xE3, 0x09, 0xCE, 0x2C, 0xAD, 0xAA, 0x3E, 0x44, 0xED, 0x27, 0x19, 0x78, 0xD4, 0xF7, 0xD6, 0x0B, 0x49, 0xA0, 0x41, 0x4B, 0x7D, 0x9E, 0xB4, 0xEC, 0xD4, 0x40, 0x07, 0xD5, 0x86, 0x8C, 0xC8, 0x4F, 0xC6, 0xE1, 0x26, 0xF0, 0x54, 0x31, 0x44, 0xBA, 0xC4, 0x1A, 0xFF, 0x4D, 0x21, 0x3E, 0xD6, 0xD7, 0x43, 0xE2, 0x98, 0x22, 0x9B, 0xE2, 0x4E, 0xEA, 0x2C, 0xAE, 0xE2, 0x30, 0x7E, 0xEE, 0x35, 0xBE, 0xD6, 0x07, 0xD5, 0xD6, 0xA1, 0x2C, 0xE3, 0xD0, 0x30, 0xE3, 0xD1, 0x53, 0x9B, 0x02, 0xD5, 0xEE, 0xF5, 0xEE, 0x0D, 0x3A, 0x7E, 0xD7, 0x3C, 0x9E, 0x28, 0x0D, 0x04, 0x41, 0xA7, 0x30, 0xE4, 0x24, 0xC8, 0x5A, 0x45, 0xEE, 0x03, 0x85, 0xAD, 0xA3, 0x4B, 0x71, 0x79, 0x96, 0x4D, 0x05, 0x03, 0x60, 0x00, 0x65, 0xA3, 0x6A, 0xAE, 0x87, 0x36, 0x6B, 0x63, 0xE5, 0x0A, 0xC0, 0x00, 0x55, 0x20, 0xB1, 0xB7, 0xDC, 0xD9, 0x3E, 0xE1, 0x76, 0x4F, 0xC3, 0x95, 0x3B, 0x8A, 0x20, 0x34, 0x00, 0x02, 0xFD, 0xB1, 0x46, 0x78, 0x25, 0xA4, 0xA3, 0xED, 0x6B, 0x51, 0xE4, 0xBF, 0x5B, 0x57, 0xC0, 0x67, 0xA4, 0x21, 0x1E, 0x32, 0x00, 0x91, 0x68, 0xE7, 0x77, 0x4E, 0x89, 0xD0, 0xA6, 0xE7, 0x1C, 0xF0, 0x21, 0x57, 0xA1, 0xAD, 0x19, 0x0C, 0x39, 0x1B, 0x0C, 0xE8, 0xBF, 0x2D, 0xE8, 0x9B, 0x13, 0x98, 0xC7, 0xF4, 0x39, 0xF9, 0xDC, 0x65, 0xE3, 0xA6, 0xE8, 0xC7, 0xED, 0xE8, 0x02, 0x8D, 0xF4, 0x8F, 0x9E, 0xF4, 0xCD, 0x0D, 0xC4, 0x90, 0x7E, 0xDD, 0x29, 0x7C, 0xE9, 0x4E, 0x1F, 0xC4, 0x9A, 0x5E, 0xF5, 0xDB, 0xBD, 0xDC, 0x0D, 0x0D, 0xEA, 0xA1, 0x0E, 0x3D, 0x88, 0x0A, 0xD6, 0xB5, 0x49, 0x0E, 0x56, 0xEC, 0x9C, 0xE7, 0x48, 0xC6, 0x7C, 0x6B, 0x51, 0x24, 0x9D, 0xC5, 0xF7, 0x55, 0x7E, 0x23, 0x61, 0x11, 0xF7, 0x6D, 0x71, 0xF8, 0x87, 0x8E, 0xD2, 0x21, 0x61, 0xE9, 0x6D, 0x51, 0xF2, 0xE0, 0x04, 0x9E, 0x09, 0x2B, 0x24, 0x67, 0xD3, 0xC8, 0x49, 0x52, 0xBE, 0xFE, 0x3F, 0xC0, 0x0E, 0x41, 0x74, 0x3C, 0xEC, 0x1F, 0xE1, 0x9D, 0xAC, 0x8E, 0x63, 0xB5, 0x18, 0xFF, 0x9E, 0xF6, 0x76, 0x73, 0x98, 0xA0, 0x73, 0x3A, 0x01, 0xC8, 0x15, 0x0E, 0x42, 0x4F, 0x7D, 0x82, 0x51, 0x6D, 0xED, 0xA0, 0x1B, 0xAC, 0x8B, 0x2C, 0x91, 0x32, 0x28, 0x4D, 0xDF, 0x4E, 0xC9, 0x02, 0x55, 0xEE, 0xE0, 0x8E, 0xEE, 0x9D, 0x6F, 0xA8, 0x26, 0x8E, 0x70, 0xF7, 0x7E, 0xE3, 0x1B, 0xED, 0xE2, 0x6C, 0xED, 0x29, 0xE3, 0x2E, 0xEF, 0xAC, 0x4F, 0xEE, 0xF4, 0x6E, 0xB6, 0x3D, 0x99, 0xEF, 0xA6, 0x89, 0x5F, 0xAF, 0x0C, 0x2B, 0x0D, 0xC4, 0xC5, 0x9C, 0x65, 0x82, 0x4E, 0x01, 0xA3, 0xA9, 0xC5, 0xF1, 0x03, 0x5B, 0xF0, 0x3A, 0xBA, 0x03, 0x50, 0x90, 0x6A, 0xAA, 0xA6, 0xF0, 0x64, 0xC3, 0xAD, 0x82, 0x36, 0x1F, 0x54, 0x20, 0x36, 0xCD, 0x0C, 0xE6, 0x77, 0x18, 0xE6, 0xB5, 0x46, 0x5B, 0x49, 0xE0, 0x76, 0xA0, 0x15, 0x05, 0x9C, 0xCD, 0x00, 0x24, 0x1F, 0x45, 0x2C, 0xFF, 0xE6, 0x27, 0xBF, 0xE6, 0x11, 0x9F, 0xF2, 0xA7, 0x34, 0x01, 0x17, 0x72, 0x21, 0x04, 0xD0, 0x01, 0x2F, 0x1F, 0xF3, 0x14, 0xBC, 0x38, 0x34, 0xFF, 0x23, 0x7D, 0x2E, 0xB3, 0x9A, 0x68, 0x24, 0xAE, 0xE1, 0xF3, 0xF6, 0xFC, 0x6D, 0xF8, 0x2C, 0x6E, 0x45, 0x6F, 0xF4, 0xFC, 0xAC, 0xD0, 0xD3, 0x1D, 0xE9, 0x4B, 0x0F, 0x08, 0x2E, 0x82, 0x83, 0x82, 0x30, 0x30, 0x84, 0x88, 0x89, 0x84, 0x86, 0x8C, 0x8A, 0x8E, 0x2E, 0x87, 0x8B, 0x8C, 0x93, 0x94, 0x95, 0x96, 0x94, 0x89, 0x2D, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x9C, 0x89, 0x97, 0x31, 0xA4, 0xA5, 0xA6, 0xA6, 0x41, 0xA9, 0xAA, 0xAB, 0x41, 0x38, 0x3F, 0x39, 0x39, 0x38, 0xB2, 0xB3, 0xB2, 0x3F, 0xB6, 0xB0, 0x3C, 0x3C, 0x45, 0x4F, 0xBC, 0xBC, 0x48, 0xBF, 0xC0, 0xC1, 0x4F, 0x48, 0xBC, 0x4E, 0xC6, 0x4E, 0xBD, 0xBC, 0x52, 0xBE, 0x52, 0xCD, 0xFF, 0xCE, 0xCF, 0xD0, 0xD1, 0xCB, 0xBD, 0xC1, 0xBF, 0xC7, 0xBB, 0x4F, 0x45, 0x45, 0xCE, 0xC9, 0xCA, 0xBC, 0xDA, 0xDA, 0xB9, 0xE2, 0x3C, 0x4E, 0x33, 0x4E, 0xE3, 0xE2, 0xD8, 0xBD, 0x45, 0x33, 0x40, 0x40, 0x4A, 0xEE, 0x4A, 0x4A, 0x33, 0x16, 0xED, 0xF3, 0xF2, 0xF7, 0xF9, 0x33, 0xF8, 0xFC, 0xFD, 0xF5, 0x4A, 0xF5, 0x2C, 0x08, 0x9C, 0x31, 0xA3, 0x9A, 0xC1, 0x83, 0x08, 0xAB, 0x11, 0x5C, 0xC8, 0xB0, 0xA1, 0xC3, 0x87, 0xFD, 0x22, 0xC2, 0x73, 0x47, 0x11, 0x88, 0x8E, 0x8B, 0x18, 0x2F, 0x36, 0xD9, 0xC8, 0xB1, 0xA3, 0x8D, 0x8F, 0x49, 0x92, 0xC8, 0x18, 0x59, 0xA3, 0xE4, 0x91, 0x1A, 0x47, 0x68, 0xA8, 0x5C, 0xC9, 0x92, 0x46, 0x94, 0x97, 0x30, 0x61, 0x56, 0x99, 0x49, 0xB3, 0x26, 0x95, 0x9B, 0x38, 0x73, 0xEA, 0xBC, 0x09, 0xA5, 0xA7, 0xCF, 0x9F, 0x40, 0x7F, 0x4E, 0x19, 0x4A, 0xB4, 0xE8, 0x94, 0x08, 0x48, 0xAF, 0x28, 0x5D, 0xCA, 0xA2, 0xA9, 0x53, 0x16, 0x26, 0xA2, 0x46, 0xD5, 0xA2, 0x45, 0x85, 0x0A, 0x01, 0x02, 0xAC, 0x6E, 0xC9, 0x92, 0x25, 0x05, 0x80, 0xAF, 0x60, 0xC3, 0x8A, 0x1D, 0x4B, 0xB6, 0x2C, 0x58, 0x26, 0xB4, 0xD2, 0xAA, 0xB5, 0xC5, 0x56, 0xAD, 0xDB, 0xB7, 0x70, 0xDF, 0xFE, 0x88, 0x4B, 0x97, 0xAD, 0x2D, 0x5A, 0xAC, 0x52, 0xC5, 0xB5, 0x6B, 0x17, 0x56, 0x8E, 0x57, 0x7F, 0xF9, 0xFA, 0x1D, 0x0C, 0x58, 0x6D, 0xDE, 0xC3, 0x88, 0x13, 0xEB, 0x4D, 0xCB, 0x76, 0xB0, 0x5F, 0x1E, 0x7E, 0x57, 0x48, 0x9E, 0x4C, 0x79, 0xF2, 0xB1, 0xCB, 0x18, 0x66, 0xE8, 0x00, 0x72, 0x70, 0xA1, 0x3C, 0x8B, 0x49, 0x5C, 0x56, 0xD9, 0x49, 0x9A, 0x8A, 0x4F, 0x9C, 0x35, 0x47, 0xDF, 0x54, 0x8D, 0xD3, 0x8A, 0xEB, 0xD7, 0xB0, 0x5D, 0xEF, 0xD8, 0x01, 0xC5, 0x0A, 0xFF, 0x95, 0xD7, 0x58, 0x72, 0xD3, 0xD4, 0x19, 0xF3, 0x01, 0x16, 0x2B, 0xB9, 0x75, 0x57, 0xC1, 0x52, 0xE5, 0xE5, 0xCA, 0x07, 0xC8, 0x93, 0x77, 0xC8, 0xD0, 0x80, 0x42, 0x85, 0xE4, 0x0F, 0x6A, 0x24, 0xA7, 0x31, 0xBC, 0x0A, 0x0D, 0x10, 0x0D, 0x32, 0x48, 0x50, 0x90, 0x21, 0x03, 0x05, 0x0A, 0x0A, 0x16, 0x70, 0xDF, 0x2E, 0x41, 0x02, 0x78, 0xF3, 0x0A, 0xD0, 0x7F, 0x5F, 0xCF, 0xFE, 0xFB, 0x02, 0xF1, 0xE0, 0x15, 0xC8, 0x37, 0x60, 0x80, 0x00, 0x95, 0x03, 0xF8, 0x41, 0xE8, 0xDF, 0xCF, 0xBF, 0xFF, 0xFE, 0x0E, 0x00, 0x06, 0x28, 0x20, 0x07, 0x04, 0x16, 0xB8, 0x41, 0x81, 0x08, 0x26, 0xB8, 0xC1, 0x82, 0x0C, 0x32, 0xC8, 0xDE, 0x08, 0x10, 0x46, 0xD8, 0xDD, 0x84, 0x19, 0x88, 0x60, 0xA1, 0x85, 0x52, 0x49, 0x75, 0xC1, 0x86, 0x17, 0x94, 0xE0, 0x61, 0x09, 0x58, 0x79, 0xB8, 0xC5, 0x88, 0x5B, 0x40, 0x60, 0x22, 0x04, 0x66, 0xA5, 0xA8, 0xE2, 0x8A, 0x2C, 0xB6, 0xE8, 0xE2, 0x8B, 0x30, 0xC6, 0xE8, 0xE2, 0x23, 0x8B, 0x40, 0x82, 0x09, 0x8D, 0x38, 0xE6, 0x38, 0x88, 0x21, 0x3A, 0x3E, 0x72, 0x63, 0x8F, 0x85, 0x5C, 0x22, 0xE4, 0x90, 0x93, 0x64, 0x02, 0xCA, 0x91, 0x48, 0x6A, 0xE2, 0x48, 0x25, 0xA7, 0x34, 0x89, 0x4A, 0x62, 0x38, 0xB4, 0xE2, 0x0A, 0x2C, 0x72, 0x35, 0x96, 0x43, 0x2E, 0xBB, 0x54, 0x63, 0x84, 0x11, 0x48, 0x70, 0xE9, 0xE5, 0x96, 0x60, 0x82, 0x29, 0x05, 0x30, 0xC6, 0x24, 0x64, 0x84, 0x34, 0x68, 0x46, 0xD3, 0x0D, 0x99, 0x4E, 0x80, 0xD3, 0x4C, 0x37, 0xDD, 0x80, 0x93, 0x8E, 0x66, 0x16, 0x29, 0x81, 0x0E, 0x3A, 0xD8, 0x14, 0xE1, 0xC4, 0x44, 0x9F, 0xBD, 0x03, 0x90, 0x05, 0xF2, 0x10, 0x34, 0x8F, 0xA0, 0xFC, 0xEC, 0x23, 0xD1, 0x3C, 0x02, 0xD5, 0xFF, 0x43, 0xCF, 0x3E, 0x8B, 0x72, 0x99, 0xD0, 0xA3, 0x8F, 0x3E, 0x24, 0xE9, 0xA4, 0x9E, 0x1D, 0x8A, 0x4F, 0x45, 0x15, 0x65, 0x94, 0x51, 0x47, 0x9C, 0x82, 0x14, 0x92, 0x0C, 0x25, 0x85, 0x7A, 0x52, 0x4B, 0xA4, 0xBA, 0x14, 0x93, 0x4C, 0xA9, 0xD9, 0x54, 0x1A, 0x69, 0x41, 0xB5, 0xDA, 0xAA, 0x51, 0xB0, 0x22, 0x15, 0xC1, 0x52, 0x4C, 0x3D, 0xD5, 0x54, 0x86, 0x26, 0x54, 0x65, 0x15, 0x56, 0x5A, 0x6D, 0x95, 0x82, 0x57, 0x32, 0xC6, 0x88, 0x56, 0x5D, 0x7C, 0xCD, 0x45, 0xD7, 0xB1, 0xC8, 0xBA, 0x92, 0x2C, 0x5C, 0x7C, 0x19, 0x26, 0xCB, 0x62, 0xB4, 0xBC, 0x52, 0xEC, 0xB4, 0x7F, 0x39, 0x66, 0xED, 0x2D, 0xC6, 0xCE, 0xA2, 0xD8, 0xB6, 0x8A, 0x55, 0x09, 0xD8, 0x63, 0xB9, 0xAC, 0xC0, 0x43, 0x65, 0xE4, 0x3A, 0xB1, 0xC2, 0x65, 0x48, 0x10, 0x84, 0x04, 0x06, 0x99, 0x71, 0xD1, 0x45, 0x41, 0x0A, 0x79, 0xE6, 0x8E, 0x0E, 0x21, 0x45, 0xC1, 0x9A, 0x69, 0xF8, 0xBA, 0xEA, 0xEA, 0x6A, 0x05, 0xDC, 0xBB, 0x53, 0x6C, 0x00, 0xCF, 0x06, 0xDC, 0x6F, 0xB0, 0x05, 0x47, 0x53, 0xBF, 0x51, 0xF8, 0xE0, 0x5A, 0x70, 0x03, 0x2F, 0x5C, 0x1C, 0x72, 0xD2, 0x1D, 0xE0, 0x40, 0x79, 0x0D, 0x54, 0xCC, 0x40, 0x12, 0xD0, 0x41, 0x57, 0x43, 0x14, 0xC4, 0x31, 0x90, 0x5E, 0x77, 0xE6, 0x75, 0xF7, 0x1D, 0x7D, 0x0B, 0x1C, 0xB0, 0x00, 0x7D, 0x06, 0x28, 0x40, 0xC1, 0x76, 0xE9, 0xC9, 0xD7, 0xDE, 0x7A, 0xE1, 0xBD, 0xB7, 0x40, 0x02, 0x09, 0xC8, 0x6C, 0xC0, 0xC9, 0x04, 0xE8, 0x77, 0x80, 0x7F, 0x3C, 0xF7, 0x27, 0xE0, 0xCF, 0x00, 0x22, 0xD8, 0x60, 0x82, 0x44, 0x73, 0xD0, 0x60, 0x83, 0x0F, 0x46, 0x38, 0x02, 0x85, 0xDD, 0x5D, 0x78, 0x21, 0xAE, 0x1C, 0x6E, 0xF8, 0x61, 0x88, 0x25, 0x90, 0xFF, 0x38, 0xA2, 0x89, 0xC1, 0x66, 0xAD, 0xF5, 0xD6, 0x5C, 0x77, 0x3D, 0x23, 0x8E, 0x97, 0x00, 0x29, 0xB6, 0x28, 0x91, 0x8C, 0x8D, 0x48, 0x25, 0x40, 0x12, 0xA9, 0x36, 0x0C, 0xA4, 0xFC, 0x38, 0x48, 0x92, 0x70, 0x7F, 0x02, 0x09, 0xD9, 0x8C, 0x38, 0x69, 0x77, 0x0C, 0x88, 0x31, 0x56, 0x0B, 0x2C, 0x77, 0x2D, 0x11, 0xAD, 0x95, 0x57, 0x62, 0xF9, 0x4B, 0x98, 0x84, 0x17, 0x0E, 0xA6, 0x10, 0x88, 0x1B, 0x21, 0x04, 0x98, 0x90, 0xFE, 0x92, 0xE6, 0x33, 0xCA, 0x40, 0x03, 0xE7, 0x13, 0x6F, 0x46, 0xBE, 0xCC, 0x34, 0xE1, 0xF0, 0x80, 0x84, 0x12, 0x17, 0xBD, 0x33, 0x2F, 0x12, 0x77, 0xA6, 0x93, 0xA7, 0xA1, 0xF1, 0xC0, 0x63, 0x69, 0xA0, 0xA8, 0x0F, 0x7A, 0x68, 0x41, 0xF4, 0x38, 0x01, 0x8C, 0x05, 0xBF, 0x28, 0xDA, 0xF8, 0xEC, 0xF1, 0x52, 0x6A, 0x3B, 0xA1, 0xA7, 0xF7, 0x89, 0xA9, 0xA6, 0x18, 0x71, 0xEA, 0x51, 0x48, 0x22, 0x85, 0x2A, 0x6A, 0xA9, 0x2D, 0x9D, 0x8A, 0x6A, 0xAA, 0x33, 0xAD, 0xCA, 0xAA, 0xBE, 0xCC, 0xC3, 0x1A, 0xEB, 0xAC, 0xB4, 0x5E, 0x61, 0xEB, 0xAD, 0x19, 0xEA, 0x7A, 0x55, 0x56, 0x2A, 0x8C, 0xD8, 0x95, 0xD7, 0x2C, 0x32, 0x81, 0x56, 0x2B, 0x52, 0xFE, 0x5D, 0xEC, 0xB2, 0xE4, 0xAF, 0x95, 0x6D, 0xF9, 0x8C, 0x35, 0x7B, 0xEC, 0xB4, 0xEC, 0x0B, 0x66, 0x6D, 0xB5, 0xE7, 0x3F, 0xCB, 0xED, 0xFC, 0xAB, 0xAC, 0xE5, 0xCA, 0x2D, 0x83, 0xA1, 0x43, 0x6E, 0x65, 0x97, 0xB9, 0x9E, 0x6E, 0x43, 0xF5, 0xD8, 0xCC, 0x0C, 0x0A, 0xC7, 0x90, 0x3E, 0xD1, 0x0B, 0x63, 0xA3, 0x61, 0x9E, 0xAB, 0x8C, 0x02, 0x05, 0x02, 0xFC, 0x64, 0x35, 0xC8, 0x4B, 0xDE, 0x6D, 0x00, 0x86, 0x1B, 0x82, 0x55, 0x30, 0x38, 0x18, 0xCC, 0x8D, 0x15, 0x76, 0x00, 0x9C, 0xE2, 0x18, 0xFF, 0xE7, 0x01, 0x34, 0x78, 0x00, 0x09, 0x38, 0xE0, 0x80, 0x8A, 0x35, 0xA7, 0x01, 0x22, 0x20, 0x40, 0x74, 0x90, 0x63, 0x2A, 0x98, 0xE8, 0x86, 0x06, 0xCB, 0xD9, 0xC0, 0x84, 0x36, 0x20, 0x01, 0xED, 0xC0, 0xAC, 0x3C, 0x2A, 0x43, 0x8F, 0x7A, 0xE2, 0xF3, 0x32, 0x98, 0xBD, 0xE7, 0x3B, 0x0A, 0xA0, 0x4F, 0x10, 0x17, 0x40, 0x00, 0x0E, 0x80, 0x60, 0x67, 0x3D, 0x4B, 0x22, 0xD0, 0x7E, 0x26, 0xB4, 0xA1, 0x6D, 0x80, 0x00, 0x45, 0x6C, 0xE2, 0xD1, 0x90, 0x46, 0x01, 0xA5, 0x49, 0x88, 0x42, 0x4E, 0x13, 0x01, 0xAE, 0x4C, 0x10, 0xB5, 0x0F, 0x81, 0x48, 0x00, 0x22, 0xB2, 0x1A, 0xD6, 0xB8, 0x47, 0xC6, 0x32, 0x9A, 0xF1, 0x8C, 0x60, 0xD1, 0x11, 0xDA, 0xCC, 0x66, 0x36, 0x1E, 0xB1, 0x51, 0x11, 0x96, 0x58, 0xD2, 0xDA, 0xE6, 0xE8, 0x36, 0x41, 0xC4, 0xED, 0x8E, 0x4A, 0xAA, 0x91, 0x8D, 0x26, 0xE1, 0xA4, 0x1B, 0x04, 0xC1, 0x49, 0x79, 0x33, 0x9F, 0x2D, 0x20, 0xF3, 0x83, 0x25, 0x18, 0xD2, 0x90, 0xD4, 0xC2, 0x05, 0x96, 0x5C, 0x67, 0xB8, 0x46, 0x2E, 0x4E, 0x71, 0x89, 0x7B, 0x24, 0xE2, 0x12, 0xE7, 0x28, 0x24, 0xF4, 0xEF, 0x32, 0x96, 0x53, 0x93, 0xE4, 0xBA, 0x31, 0x0D, 0xCA, 0xF5, 0x62, 0x19, 0xE1, 0x58, 0x41, 0xE6, 0x8A, 0x90, 0xAE, 0x4B, 0x01, 0xA1, 0x08, 0x58, 0x52, 0x47, 0x27, 0xB3, 0xE1, 0x04, 0x3F, 0xC5, 0xA3, 0x1D, 0x7E, 0xEA, 0x87, 0xA1, 0xF4, 0x91, 0xBA, 0xD5, 0xC1, 0x4E, 0x1E, 0xFF, 0x58, 0x14, 0xBC, 0x68, 0x47, 0xBB, 0xDB, 0xF9, 0x32, 0x1F, 0xA7, 0xC3, 0xD4, 0xBC, 0x78, 0xA7, 0x11, 0xDF, 0xD9, 0x00, 0x78, 0x21, 0x11, 0x5E, 0x49, 0x88, 0xC7, 0x12, 0xE3, 0xBD, 0x24, 0x82, 0x12, 0x54, 0x5E, 0x4E, 0x14, 0xA8, 0x2F, 0xE7, 0x15, 0x45, 0x56, 0xFF, 0xD1, 0x93, 0xDE, 0xF4, 0x70, 0x45, 0x95, 0x5D, 0x61, 0x2F, 0x7B, 0x5D, 0x01, 0x16, 0x1A, 0xC3, 0xE2, 0x3D, 0x6D, 0x79, 0xEB, 0x2E, 0xE8, 0x43, 0x1F, 0x3A, 0xD3, 0x79, 0xCE, 0xF6, 0xB1, 0x4F, 0x7C, 0x89, 0x74, 0x0C, 0x60, 0xE2, 0x47, 0xBF, 0x7A, 0x9A, 0xEF, 0x7E, 0x8D, 0x81, 0xCC, 0x38, 0xF6, 0x47, 0x99, 0x4B, 0x96, 0x03, 0x5E, 0x0D, 0x51, 0x42, 0x17, 0x92, 0x00, 0x04, 0x48, 0x52, 0x72, 0x4B, 0xB3, 0x1C, 0x66, 0x48, 0x5C, 0x42, 0x85, 0x0E, 0x04, 0xE5, 0x04, 0x10, 0x3D, 0x01, 0x14, 0x22, 0x3A, 0x85, 0x13, 0x10, 0x00, 0xA2, 0x17, 0x85, 0xE2, 0x45, 0x61, 0xD5, 0x13, 0x08, 0x42, 0x73, 0x34, 0x14, 0x8C, 0x0D, 0x06, 0x87, 0x93, 0x41, 0x0D, 0x62, 0x21, 0x0A, 0x19, 0x4B, 0x29, 0x08, 0x70, 0x16, 0x85, 0x24, 0xA4, 0x44, 0x83, 0x0B, 0x0B, 0x0E, 0x4A, 0x6B, 0xB8, 0x32, 0x90, 0x51, 0x40, 0x64, 0xEC, 0xD1, 0x21, 0xCB, 0x76, 0x0A, 0x9E, 0x1E, 0xC2, 0x4C, 0x65, 0xE0, 0x39, 0xD9, 0x7B, 0xE8, 0x43, 0x80, 0x0E, 0x24, 0xF1, 0xA8, 0x20, 0x58, 0x62, 0x80, 0xA4, 0x38, 0x34, 0xA6, 0x4E, 0x71, 0x41, 0xEB, 0xB1, 0x22, 0x84, 0x98, 0x96, 0x45, 0x0C, 0x65, 0xA8, 0x8B, 0x5F, 0x04, 0x63, 0x18, 0xAF, 0x86, 0xA2, 0x71, 0x7A, 0xF5, 0xAB, 0x60, 0x35, 0x4B, 0x8F, 0xEA, 0xF8, 0xC6, 0x1C, 0xB9, 0xB1, 0xAC, 0x74, 0xA3, 0x63, 0x91, 0xF6, 0xA8, 0xD6, 0xB3, 0xDA, 0x11, 0x8F, 0x71, 0x4B, 0x2B, 0x1F, 0xEF, 0xF6, 0x24, 0x28, 0xA5, 0x2F, 0x9F, 0x39, 0x38, 0xA4, 0x5E, 0x97, 0xE0, 0x3E, 0x45, 0x6A, 0x83, 0x91, 0x8A, 0x53, 0x9C, 0x3C, 0x84, 0xA0, 0x04, 0xC1, 0x22, 0xAE, 0xB0, 0x93, 0x5C, 0x1C, 0x3F, 0x12, 0x9B, 0xD8, 0x30, 0x59, 0xD2, 0x9F, 0xC7, 0x48, 0xFF, 0x06, 0x9A, 0xE0, 0xA4, 0x0D, 0xCA, 0x55, 0x2E, 0x1B, 0xE0, 0xC8, 0x6C, 0xE6, 0xC8, 0xF1, 0x84, 0x54, 0x5A, 0x96, 0x1B, 0xBD, 0xD0, 0x9C, 0x3B, 0xF6, 0x51, 0xBA, 0x77, 0x18, 0xEA, 0xB4, 0xF8, 0x40, 0x6D, 0x2D, 0x73, 0xB7, 0x4B, 0xD8, 0xED, 0x83, 0x97, 0xBD, 0xF4, 0xE5, 0xED, 0x72, 0x67, 0xCA, 0x4C, 0x11, 0x53, 0x07, 0xC6, 0xF4, 0x54, 0x32, 0x95, 0x99, 0x12, 0x66, 0x3A, 0xD3, 0x5E, 0xD0, 0x94, 0xA6, 0x4E, 0xA8, 0xB9, 0x40, 0x6B, 0x0E, 0x05, 0x9B, 0xD1, 0x9B, 0x1E, 0x54, 0xAA, 0xA7, 0x2B, 0x5E, 0x65, 0xCF, 0x57, 0x61, 0xFD, 0xCA, 0xB2, 0xEC, 0xC2, 0x4E, 0xF2, 0xB5, 0x05, 0x2E, 0xE0, 0xB3, 0xAE, 0x3B, 0xA7, 0xE5, 0x16, 0xF6, 0xBD, 0x0F, 0x7E, 0x69, 0xA9, 0x27, 0xFD, 0xA2, 0x35, 0x0B, 0x6A, 0xDD, 0x89, 0x32, 0x45, 0x38, 0x57, 0x7A, 0xCF, 0x75, 0xC9, 0xCC, 0x48, 0xAA, 0x1E, 0x5C, 0xA8, 0x01, 0x10, 0x10, 0xF7, 0x02, 0xC6, 0x1E, 0x56, 0x77, 0x17, 0xC1, 0x98, 0x68, 0x4C, 0x73, 0x82, 0x8A, 0xF6, 0x37, 0xA2, 0x10, 0xF5, 0xEF, 0x50, 0x22, 0xEA, 0x80, 0x02, 0x6B, 0xB4, 0xBF, 0xC6, 0xED, 0xE8, 0x4C, 0x7E, 0xFB, 0x4C, 0x92, 0xBE, 0x66, 0xC1, 0xCF, 0x3C, 0x29, 0x4C, 0x5C, 0x42, 0x30, 0x86, 0xE5, 0x06, 0xA5, 0xC8, 0x61, 0x00, 0x03, 0x92, 0x73, 0x84, 0x07, 0xB8, 0x94, 0x63, 0x16, 0x1C, 0x18, 0x71, 0x92, 0x00, 0x82, 0x9B, 0x4A, 0x40, 0x86, 0xDD, 0xF9, 0x18, 0x78, 0x36, 0x70, 0x9E, 0xED, 0xAC, 0xEC, 0x3C, 0x30, 0x76, 0x19, 0x10, 0x55, 0xE6, 0x32, 0x19, 0x83, 0x67, 0x02, 0x32, 0x3B, 0xD9, 0x06, 0x90, 0xAA, 0x44, 0xA5, 0x06, 0x8D, 0x40, 0x4F, 0x2D, 0xDA, 0x53, 0x1D, 0xF4, 0x1D, 0xA9, 0x2E, 0x8D, 0xAA, 0x4E, 0xDB, 0x22, 0x17, 0xFF, 0xA5, 0xE6, 0x21, 0xAC, 0x80, 0xD1, 0x6A, 0x25, 0xEA, 0x6A, 0x74, 0xA7, 0x4C, 0x65, 0x32, 0xFA, 0x88, 0x48, 0x68, 0x35, 0x6B, 0xD9, 0xB2, 0x2C, 0x89, 0xB3, 0x1E, 0x62, 0xAD, 0x72, 0x6C, 0xAB, 0x5B, 0xE1, 0x1A, 0xD7, 0x2F, 0x97, 0x6D, 0x14, 0x77, 0xAB, 0x5F, 0x20, 0x6B, 0x51, 0x0B, 0xBE, 0xE4, 0x22, 0xAF, 0x4B, 0xB8, 0xD2, 0xFB, 0xF0, 0xA7, 0x48, 0x5D, 0xE8, 0x69, 0x70, 0xF6, 0x9D, 0xE4, 0x60, 0x09, 0xBB, 0xBA, 0x59, 0x2A, 0x21, 0xCF, 0x8F, 0xE4, 0xD2, 0x35, 0x34, 0xAB, 0xD9, 0x64, 0x10, 0xFA, 0xD0, 0x9F, 0x85, 0x1C, 0x66, 0x51, 0x99, 0x4A, 0x3B, 0x27, 0xBA, 0x1B, 0xE4, 0xF8, 0x4C, 0x9F, 0xE6, 0x51, 0x3A, 0x59, 0xA6, 0x36, 0x75, 0x7E, 0x66, 0xAD, 0xA2, 0x5C, 0xBB, 0x4B, 0xD8, 0x26, 0x04, 0x22, 0x83, 0x92, 0x2D, 0x6D, 0x75, 0x67, 0xDB, 0xDB, 0x7A, 0x44, 0xB7, 0x49, 0x50, 0xA6, 0x49, 0x7C, 0xEB, 0xCC, 0x8F, 0x0A, 0x77, 0x9A, 0xC4, 0x0D, 0x8A, 0x71, 0x89, 0x92, 0x94, 0xE4, 0x6E, 0xB3, 0x7A, 0x56, 0xB9, 0x5E, 0xAE, 0xB9, 0xF2, 0xAB, 0xE8, 0xEE, 0xA5, 0xAF, 0x84, 0xD9, 0x2E, 0x3B, 0xD7, 0xF9, 0x16, 0x56, 0x24, 0x8B, 0xD8, 0xEA, 0x8C, 0xA7, 0x3C, 0xFF, 0x82, 0x17, 0xF1, 0x72, 0xCB, 0x15, 0x88, 0xBC, 0x4B, 0x22, 0xF5, 0xC7, 0x3F, 0xC8, 0x1E, 0xE3, 0x7F, 0xEA, 0x0A, 0x68, 0x17, 0x6A, 0x90, 0x84, 0x49, 0x12, 0xE1, 0xDB, 0xE0, 0x26, 0x42, 0x13, 0x10, 0x47, 0x11, 0x8C, 0x84, 0xE4, 0x01, 0x0C, 0xB0, 0x57, 0x43, 0x11, 0x7C, 0x5C, 0xA4, 0x14, 0x78, 0x28, 0x0E, 0x98, 0x82, 0x03, 0x28, 0x30, 0xEF, 0xF5, 0x38, 0x40, 0xA3, 0xF8, 0xD6, 0xA8, 0xF3, 0x7A, 0x32, 0x00, 0x2A, 0x40, 0x58, 0xC3, 0x31, 0x01, 0x38, 0x70, 0x7F, 0xCB, 0xFF, 0x42, 0x10, 0xCA, 0xA4, 0xA4, 0xC5, 0x09, 0x21, 0x72, 0x92, 0x50, 0x81, 0xD0, 0x34, 0xB8, 0x38, 0x18, 0xC4, 0xD8, 0x89, 0x6B, 0xF8, 0x31, 0xEF, 0xD0, 0x58, 0x88, 0x06, 0x58, 0x99, 0x7C, 0x70, 0xD8, 0xB2, 0xF4, 0xC4, 0x07, 0xA8, 0x20, 0x97, 0x8F, 0xC8, 0x15, 0xB0, 0x81, 0x93, 0x0D, 0x91, 0x88, 0x46, 0xE4, 0xB1, 0x7F, 0x7C, 0xFC, 0x63, 0xA3, 0x0D, 0xD9, 0xA9, 0x47, 0x4B, 0x9A, 0x15, 0x91, 0x9C, 0xC5, 0xE5, 0x46, 0x05, 0xAB, 0x4E, 0xD6, 0xAA, 0x18, 0xA5, 0x5C, 0xE5, 0x9E, 0xFB, 0x1C, 0x46, 0x63, 0x15, 0xB3, 0xDA, 0xAE, 0xBC, 0x65, 0x47, 0x84, 0x42, 0xCB, 0x45, 0x1F, 0x9B, 0x98, 0x09, 0x41, 0x66, 0xB8, 0xB1, 0x95, 0x48, 0xA7, 0xB8, 0x41, 0x93, 0xBA, 0xA5, 0x37, 0xF3, 0xF2, 0xA0, 0x90, 0xA1, 0x7B, 0xB3, 0xB5, 0xC6, 0xF1, 0xD7, 0x5F, 0xEC, 0x03, 0xD0, 0x89, 0x65, 0xAD, 0xA4, 0xB6, 0x64, 0x5F, 0xC6, 0x19, 0xE3, 0xD0, 0x68, 0x4F, 0x3B, 0xA2, 0xB3, 0xB1, 0x8E, 0xB4, 0x7F, 0x23, 0x19, 0xE3, 0x12, 0xA8, 0xE9, 0x06, 0xA5, 0x28, 0xD4, 0x79, 0x66, 0x96, 0xAA, 0x6D, 0x9D, 0xFF, 0x70, 0x27, 0x4B, 0x24, 0xB8, 0xD6, 0xEB, 0x9D, 0xF6, 0xB4, 0x41, 0x40, 0x1D, 0xA8, 0xD9, 0x8E, 0x7A, 0x22, 0xBB, 0xBB, 0x2D, 0x6E, 0x37, 0xF2, 0x91, 0xC6, 0x03, 0x4F, 0xD5, 0xBD, 0x2D, 0xD5, 0x6F, 0x5D, 0xFD, 0x6A, 0x9E, 0xC4, 0x1A, 0x28, 0xB3, 0x3E, 0x4A, 0xAD, 0x69, 0xA5, 0x5C, 0x6E, 0xE6, 0xDA, 0xB9, 0x2A, 0xE0, 0xB5, 0x38, 0xBF, 0x3A, 0xDD, 0xF8, 0x95, 0x77, 0xBB, 0xA8, 0x77, 0xDF, 0x75, 0xE3, 0x02, 0xAD, 0x5F, 0x57, 0x17, 0x9F, 0x81, 0x01, 0x9C, 0x5F, 0x0A, 0xA3, 0x2D, 0x67, 0x6F, 0x0B, 0xF6, 0x73, 0x01, 0x76, 0x64, 0xC2, 0xB5, 0xBF, 0x36, 0xFF, 0x41, 0x16, 0xDB, 0xAC, 0xD3, 0x36, 0x17, 0x1E, 0xA0, 0x03, 0xC4, 0x85, 0xBB, 0x07, 0xE1, 0x16, 0x77, 0x13, 0x34, 0x75, 0xEE, 0x07, 0x3C, 0xB3, 0xA1, 0x04, 0x48, 0x8A, 0xAC, 0xA6, 0x1F, 0x81, 0x02, 0x5B, 0xFF, 0x3B, 0xF8, 0xB6, 0x68, 0xBE, 0xB7, 0x0F, 0x45, 0x8E, 0x42, 0xA1, 0xDF, 0xFE, 0x8E, 0x82, 0x86, 0x19, 0xC0, 0x12, 0xE8, 0x9C, 0x2A, 0x63, 0xC7, 0x31, 0x95, 0x68, 0xEC, 0xF5, 0x70, 0xE1, 0x44, 0x41, 0x25, 0xF6, 0xD2, 0x4D, 0x14, 0xB8, 0x60, 0x80, 0x06, 0xD0, 0x10, 0x64, 0xE5, 0x31, 0xCF, 0x8B, 0x35, 0xAE, 0x71, 0xF1, 0xD8, 0x18, 0xE4, 0x07, 0x80, 0x00, 0x05, 0x80, 0x00, 0x04, 0x88, 0x00, 0x09, 0x60, 0x32, 0x29, 0x03, 0x80, 0x25, 0x33, 0x54, 0x1B, 0x60, 0x54, 0x2A, 0xE7, 0x33, 0x2C, 0x67, 0x20, 0x43, 0x36, 0x81, 0x54, 0x14, 0x55, 0x52, 0x85, 0x45, 0x55, 0x65, 0x73, 0x4B, 0xD6, 0x21, 0x53, 0xE3, 0x64, 0x55, 0x43, 0x22, 0x3C, 0xF7, 0x73, 0x22, 0x38, 0x82, 0x64, 0x91, 0x36, 0x62, 0xE3, 0x56, 0x41, 0x12, 0x09, 0x42, 0x47, 0x56, 0x60, 0x93, 0x65, 0x4B, 0xF7, 0x36, 0x4D, 0x77, 0x24, 0x4F, 0xB7, 0x23, 0x6C, 0x13, 0x03, 0x75, 0xF3, 0x24, 0x75, 0x95, 0x17, 0x51, 0x52, 0x5E, 0xF8, 0x84, 0x4F, 0x7D, 0x21, 0x2E, 0x7E, 0x31, 0x04, 0x42, 0x38, 0x84, 0x44, 0x38, 0x0E, 0x75, 0x66, 0x67, 0x77, 0x56, 0x4A, 0x42, 0x20, 0x4C, 0x15, 0x71, 0x5F, 0xB2, 0x24, 0x5B, 0x04, 0x41, 0x76, 0x8C, 0xC5, 0x38, 0x8F, 0xA5, 0x76, 0x84, 0x26, 0x3A, 0xA8, 0x04, 0x0E, 0x99, 0x34, 0x0D, 0x97, 0xC5, 0x68, 0x9E, 0xC4, 0x0B, 0xA2, 0x45, 0x69, 0x88, 0x67, 0x3A, 0x80, 0xC2, 0x28, 0xFB, 0xD0, 0x05, 0x12, 0x41, 0x28, 0x03, 0x11, 0x0C, 0xC6, 0x20, 0xFF, 0x19, 0xD7, 0x16, 0x3B, 0xF4, 0xC0, 0x69, 0x82, 0x17, 0x29, 0x01, 0x55, 0x28, 0x94, 0x72, 0x78, 0xB5, 0x55, 0x6E, 0x8A, 0xC7, 0x78, 0x8D, 0x77, 0x4C, 0xBB, 0x25, 0x3C, 0x47, 0x10, 0x79, 0xC5, 0xD3, 0x6A, 0xC1, 0x55, 0x79, 0xA6, 0x71, 0x79, 0x42, 0x31, 0x6B, 0xC8, 0xC5, 0x79, 0xB7, 0x26, 0x15, 0xD6, 0x03, 0x7A, 0xD0, 0xE5, 0x6B, 0xC7, 0x76, 0x6C, 0xAB, 0x67, 0x5D, 0xB1, 0x97, 0x7A, 0xC2, 0xD6, 0x66, 0xAF, 0x77, 0x3F, 0x97, 0x38, 0x67, 0x54, 0x52, 0x7B, 0xB6, 0x97, 0x37, 0xEA, 0xC3, 0x89, 0x5A, 0xE7, 0x18, 0xA2, 0xB4, 0x5E, 0xFD, 0xF4, 0x7B, 0xFF, 0x74, 0x87, 0x02, 0x85, 0x1C, 0xF3, 0x45, 0x04, 0x3D, 0x10, 0x8B, 0xB2, 0x38, 0x8B, 0xB1, 0xA8, 0x7C, 0xCB, 0xD7, 0x04, 0xCD, 0x97, 0x6E, 0xA3, 0xD1, 0x01, 0x27, 0x10, 0x01, 0x4F, 0xD1, 0x00, 0x2C, 0x30, 0x7D, 0xD6, 0x77, 0x7D, 0x0B, 0xC2, 0x7D, 0x1C, 0x80, 0x32, 0xC8, 0x88, 0x32, 0xFA, 0xE6, 0x7D, 0xF6, 0x11, 0x7E, 0x1B, 0x96, 0x52, 0xD0, 0x18, 0x8D, 0x2C, 0x14, 0x7F, 0x19, 0xF4, 0x7E, 0x34, 0x20, 0x1D, 0xCE, 0x67, 0x30, 0x18, 0x83, 0x53, 0xDA, 0x81, 0x7F, 0xE8, 0x91, 0x71, 0x38, 0x44, 0x01, 0xE2, 0xA1, 0x7F, 0x30, 0x33, 0x63, 0x23, 0x67, 0x00, 0x13, 0x90, 0x8E, 0x33, 0x33, 0x80, 0x04, 0x58, 0x00, 0x26, 0x17, 0x1E, 0x07, 0x60, 0x00, 0x29, 0xF7, 0x80, 0xFC, 0x11, 0x81, 0x2E, 0x47, 0x81, 0xF8, 0x28, 0x73, 0x4A, 0xC3, 0x34, 0x15, 0x92, 0x45, 0x5B, 0xC4, 0x21, 0x1D, 0xF8, 0x64, 0x20, 0x18, 0x82, 0x24, 0x58, 0x90, 0x22, 0x68, 0x82, 0x60, 0x13, 0x36, 0x69, 0x83, 0x82, 0x09, 0x29, 0x74, 0x27, 0xD8, 0x56, 0x30, 0x18, 0x83, 0x72, 0x33, 0x83, 0x7B, 0x14, 0x03, 0x37, 0x20, 0xFF, 0x75, 0x74, 0x85, 0x37, 0x87, 0xD1, 0x5D, 0xCD, 0x42, 0x2D, 0xA8, 0x84, 0x0B, 0x44, 0x18, 0x92, 0x45, 0x78, 0x27, 0xE0, 0x50, 0x26, 0xE9, 0x22, 0x04, 0x8B, 0x87, 0x5B, 0x19, 0xE1, 0x0E, 0x4E, 0x68, 0x87, 0x50, 0xC8, 0x10, 0x06, 0xD5, 0x58, 0x8E, 0x75, 0x76, 0x72, 0x92, 0x75, 0x24, 0x99, 0x85, 0x48, 0xB8, 0x68, 0x8C, 0x96, 0x0E, 0x70, 0xB7, 0x02, 0xA6, 0x43, 0x5A, 0x11, 0x61, 0x5A, 0xA9, 0x95, 0x69, 0xF8, 0x00, 0x28, 0x88, 0x52, 0x77, 0x85, 0xB7, 0x69, 0xC1, 0x00, 0x3B, 0xC0, 0xA0, 0x2E, 0x73, 0xD8, 0x19, 0x0E, 0x11, 0x11, 0x84, 0x87, 0x87, 0x4C, 0xA8, 0x78, 0xB8, 0xD5, 0x87, 0x8E, 0x07, 0x79, 0x81, 0x28, 0x79, 0x84, 0x18, 0x41, 0x86, 0x78, 0x88, 0x88, 0xD8, 0x13, 0x99, 0xB7, 0x88, 0xB5, 0x62, 0x2B, 0xDC, 0xD4, 0x5C, 0xD8, 0xA3, 0x3D, 0xBD, 0x16, 0x56, 0xD3, 0xB5, 0x3E, 0xEE, 0x44, 0x89, 0x9B, 0x08, 0x4F, 0x98, 0xB8, 0x5D, 0x81, 0xF1, 0x5D, 0xE0, 0x05, 0x8A, 0xA1, 0x68, 0x6C, 0x3E, 0x88, 0x4E, 0x6C, 0x81, 0x0E, 0x91, 0x41, 0x2E, 0x7F, 0xE5, 0x4F, 0xE9, 0xB2, 0x2E, 0xEE, 0xB5, 0x10, 0x03, 0xD1, 0x0F, 0x5D, 0x50, 0x01, 0x34, 0xC0, 0x05, 0x88, 0x43, 0x8B, 0x8E, 0x39, 0x8B, 0x81, 0xF8, 0x78, 0x20, 0xA4, 0x61, 0xC9, 0x43, 0x00, 0x0E, 0xE0, 0x14, 0x26, 0xE0, 0x14, 0x15, 0x23, 0x2B, 0xC3, 0x48, 0x6F, 0x04, 0x40, 0x43, 0x27, 0xA6, 0x00, 0x04, 0x40, 0x54, 0xC7, 0x98, 0x8C, 0xA6, 0x59, 0x1F, 0xDD, 0x37, 0x14, 0xF8, 0xE6, 0x13, 0x04, 0xD0, 0x6F, 0x05, 0xA0, 0x61, 0xD2, 0x18, 0x8D, 0x0A, 0x97, 0x31, 0x18, 0x93, 0x1C, 0x25, 0xF1, 0x00, 0x24, 0x45, 0x1C, 0x0F, 0xC0, 0x05, 0x1C, 0x80, 0x53, 0xF9, 0xF7, 0x9B, 0xE5, 0x41, 0xFF, 0x01, 0x29, 0x43, 0x1E, 0xE4, 0xC8, 0x1E, 0x35, 0x96, 0x80, 0x41, 0x24, 0x72, 0x1F, 0x27, 0x72, 0x25, 0x83, 0x1F, 0x26, 0x63, 0x32, 0x0D, 0x48, 0x8F, 0xF5, 0xE8, 0x63, 0x12, 0xB8, 0x01, 0x10, 0x85, 0x8F, 0x15, 0x58, 0x64, 0x46, 0x46, 0x21, 0x11, 0x50, 0x55, 0x22, 0xC0, 0x02, 0x5A, 0x74, 0x73, 0x4C, 0xD6, 0x64, 0x21, 0x22, 0x46, 0x00, 0x40, 0x90, 0x06, 0x99, 0x9E, 0xD1, 0x35, 0x56, 0x6A, 0x84, 0x65, 0x5A, 0xD6, 0x23, 0x2D, 0x10, 0x74, 0x44, 0xB7, 0x82, 0x0A, 0xE9, 0x02, 0x12, 0x39, 0x91, 0x6A, 0x63, 0x91, 0x16, 0x89, 0x91, 0x53, 0xA7, 0x83, 0xC4, 0x52, 0x2C, 0x83, 0x21, 0x4A, 0x41, 0x28, 0x92, 0x04, 0x3A, 0x84, 0x5C, 0x57, 0x92, 0xC0, 0xC0, 0x39, 0x9C, 0x82, 0x11, 0x14, 0xD1, 0x92, 0xA6, 0x54, 0x78, 0x2F, 0x19, 0x85, 0x84, 0xB3, 0x10, 0x84, 0x63, 0x0D, 0x6D, 0xB2, 0x59, 0xFB, 0x94, 0x75, 0x3B, 0x99, 0x75, 0x71, 0x92, 0x03, 0xAD, 0xB4, 0x5A, 0x69, 0xF8, 0x0F, 0x96, 0x62, 0x94, 0x84, 0x42, 0x0F, 0xD5, 0x70, 0x49, 0x7E, 0x17, 0x0C, 0xAF, 0xF5, 0x94, 0xB5, 0x53, 0x87, 0x69, 0xC8, 0x77, 0x54, 0x29, 0x4C, 0x56, 0x89, 0x95, 0x59, 0x29, 0x2A, 0x81, 0x28, 0x88, 0x2B, 0x31, 0x79, 0x85, 0x58, 0x79, 0x61, 0xE9, 0x13, 0x99, 0xA7, 0x79, 0xD9, 0xD4, 0x79, 0xB8, 0xE6, 0x4D, 0xBD, 0xB2, 0x3D, 0x92, 0xB8, 0x3E, 0x94, 0x28, 0x6D, 0xDC, 0xC5, 0x2C, 0xC8, 0x56, 0x6C, 0x7A, 0x21, 0x25, 0xAD, 0xC7, 0x83, 0xE9, 0x24, 0x7B, 0x76, 0x39, 0x7B, 0x78, 0x99, 0x97, 0xAA, 0x20, 0x97, 0xF3, 0xF4, 0x0A, 0xE7, 0x05, 0x98, 0xFE, 0x84, 0x01, 0x4D, 0xD9, 0x5A, 0x86, 0x69, 0x94, 0x7D, 0xD2, 0x05, 0x5C, 0xB0, 0x61, 0xAF, 0x38, 0x8B, 0x3E, 0xB0, 0xFF, 0xA6, 0x6C, 0xDA, 0xA6, 0x3E, 0x60, 0x1C, 0x5B, 0x09, 0x7F, 0xCF, 0xD7, 0x01, 0x04, 0xD0, 0x00, 0x1A, 0x92, 0x99, 0x4D, 0xB1, 0x99, 0xD5, 0xD7, 0x99, 0x14, 0x60, 0x99, 0xE6, 0x91, 0x7F, 0x14, 0xB0, 0x01, 0x41, 0x74, 0x9A, 0xA7, 0xF9, 0x1E, 0xF8, 0x66, 0x00, 0x03, 0xD0, 0x01, 0xEF, 0x31, 0x00, 0x0E, 0xD4, 0x40, 0xAD, 0x39, 0x00, 0x07, 0xF0, 0x9A, 0xCF, 0x98, 0x31, 0x15, 0xF0, 0x1C, 0xD0, 0x81, 0x31, 0xB5, 0x59, 0x9B, 0xC9, 0x01, 0x5C, 0xC4, 0x51, 0x05, 0xBB, 0xF9, 0x00, 0x2B, 0x83, 0x1E, 0xDA, 0x01, 0x9C, 0xBF, 0x49, 0x72, 0xC5, 0xD9, 0x1E, 0x41, 0x04, 0x1E, 0x37, 0xC3, 0x8E, 0x08, 0x90, 0x31, 0x05, 0x28, 0x80, 0x26, 0x33, 0x01, 0x29, 0x63, 0xA8, 0x45, 0x25, 0x9D, 0xFA, 0xE1, 0x63, 0x21, 0x50, 0x9D, 0x27, 0xF0, 0x1D, 0xD8, 0xF9, 0x32, 0x46, 0x36, 0x55, 0x34, 0x97, 0x64, 0x37, 0xB7, 0x64, 0x5E, 0xF4, 0x45, 0x1F, 0x78, 0x35, 0xE7, 0xA9, 0x9E, 0xCA, 0x3A, 0x65, 0xEC, 0x89, 0x74, 0x6E, 0x54, 0x9F, 0x74, 0xC3, 0x65, 0x67, 0xE3, 0x82, 0x6A, 0x15, 0x91, 0xF7, 0x99, 0x47, 0x34, 0x48, 0x09, 0x51, 0xB7, 0x9F, 0x7F, 0x54, 0x0A, 0x1B, 0x29, 0x48, 0xA7, 0x07, 0xA0, 0x01, 0xFA, 0x91, 0x39, 0x20, 0x92, 0x4F, 0x30, 0x04, 0x93, 0xD3, 0x0B, 0x42, 0x48, 0x68, 0x26, 0x39, 0x03, 0x42, 0xE0, 0x3B, 0xCB, 0xB7, 0x19, 0x2C, 0xC9, 0x67, 0x87, 0x12, 0x4B, 0x43, 0xE9, 0x4B, 0x61, 0xE2, 0x94, 0x0A, 0x51, 0xA1, 0x55, 0x98, 0x5E, 0x36, 0xF9, 0xAF, 0x76, 0x86, 0x84, 0x90, 0xB1, 0x02, 0x78, 0x87, 0x87, 0x96, 0x22, 0x28, 0xAD, 0xC3, 0x5E, 0x6F, 0x08, 0x87, 0x04, 0xE1, 0x5A, 0x4C, 0xF9, 0x3F, 0x2C, 0xAA, 0xA2, 0x53, 0x69, 0x69, 0x06, 0xDB, 0xFF, 0x0F, 0x55, 0x49, 0x4C, 0x34, 0x0A, 0x12, 0x80, 0x78, 0xA3, 0x5C, 0x69, 0x3C, 0x94, 0xC7, 0xA3, 0x3D, 0x0A, 0x05, 0x63, 0xB9, 0x79, 0x65, 0xF9, 0x14, 0x9E, 0x47, 0xA4, 0xE0, 0x64, 0xA4, 0x6C, 0x89, 0x2C, 0xA6, 0x77, 0x57, 0xD4, 0xD5, 0x66, 0xE3, 0xC3, 0x91, 0x2D, 0x9B, 0x2C, 0xF5, 0x23, 0xA5, 0x86, 0x91, 0xA5, 0x4C, 0xDA, 0x89, 0xD7, 0xC2, 0x6C, 0xF2, 0x83, 0xA5, 0xF5, 0x63, 0x2C, 0xBA, 0x17, 0x38, 0xA2, 0x33, 0x2E, 0x93, 0xA1, 0x27, 0xFD, 0xD3, 0xA2, 0xBA, 0x84, 0x98, 0x88, 0x07, 0x04, 0xC3, 0x47, 0x02, 0x5C, 0x00, 0x04, 0x4D, 0x20, 0x8B, 0x6E, 0x3A, 0xB5, 0x6C, 0x2A, 0x53, 0x1E, 0xBB, 0x8B, 0x14, 0xC0, 0x02, 0x4E, 0x76, 0x01, 0x51, 0x91, 0xA7, 0x0D, 0xE0, 0x6E, 0xD7, 0x67, 0x6F, 0x81, 0x3A, 0xAA, 0xA4, 0x3A, 0x1F, 0x39, 0x86, 0x32, 0x0B, 0xD0, 0x01, 0xCA, 0x08, 0x45, 0x88, 0xAA, 0xA8, 0xCE, 0x29, 0x20, 0x03, 0x10, 0xB7, 0x8F, 0x0A, 0xA9, 0x05, 0xF0, 0x9A, 0xB4, 0xD9, 0x70, 0xD2, 0xD8, 0x42, 0xA6, 0xF2, 0x00, 0x15, 0xC0, 0x05, 0x15, 0x70, 0x00, 0xF9, 0x97, 0x43, 0xA4, 0xFA, 0x9B, 0x3E, 0x65, 0x9C, 0x19, 0x17, 0x54, 0x13, 0x30, 0x72, 0xE7, 0x88, 0x8E, 0xCC, 0xE9, 0x9C, 0x0B, 0x58, 0xAB, 0xD2, 0xC9, 0x72, 0xB9, 0x0A, 0x64, 0x0B, 0x02, 0x60, 0xBC, 0x3A, 0x45, 0x3E, 0xF5, 0xAB, 0x47, 0x86, 0x81, 0x22, 0x80, 0x42, 0x56, 0x25, 0x9E, 0xE3, 0x49, 0x35, 0x3B, 0xB7, 0xAC, 0xA4, 0xFB, 0x55, 0x28, 0x70, 0xBA, 0xA8, 0x9B, 0xBA, 0xAA, 0xBB, 0xBA, 0xAC, 0xDB, 0xBA, 0xAE, 0xFB, 0xBA, 0xB0, 0x1B, 0xBB, 0xB2, 0x3B, 0xBB, 0xB4, 0x5B, 0xBB, 0xB6, 0x7B, 0xBB, 0xB8, 0x9B, 0xBB, 0xBA, 0xBB, 0xBB, 0xBC, 0xDB, 0xBB, 0xBE, 0xFB, 0xD9, 0xBB, 0xC0, 0x1B, 0xBC, 0xC2, 0x3B, 0xBC, 0xC4, 0x5B, 0xBC, 0xC6, 0x7B, 0xBC, 0xC8, 0x9B, 0xBB, 0x5C, 0x60, 0x01, 0xE6, 0xB2, 0x02, 0x1A, 0xF0, 0xBC, 0xD0, 0x1B, 0xBD, 0xD2, 0x3B, 0xBD, 0xD4, 0x5B, 0xBD, 0xD6, 0x7B, 0xBD, 0xD8, 0x9B, 0xBD, 0xDA, 0xBB, 0xBD, 0xDC, 0xDB, 0xBD, 0xDE, 0xFB, 0xBD, 0xE0, 0x1B, 0xBE, 0xE2, 0x3B, 0xBE, 0xE4, 0x5B, 0xBE, 0xE6, 0x7B, 0xBE, 0xE8, 0x9B, 0xBE, 0xEA, 0xBB, 0xBE, 0xEC, 0xDB, 0xBE, 0xEE, 0xFB, 0xBE, 0xF0, 0xCB, 0xBD, 0x0C, 0xD0, 0xB7, 0x7F, 0x12, 0xB1, 0xF6, 0x7B, 0xBF, 0xF8, 0x9B, 0xBF, 0xFA, 0xBB, 0xBF, 0xFC, 0xDB, 0xBF, 0xFE, 0xFB, 0xBF, 0x00, 0x1C, 0xC0, 0x02, 0x3C, 0xC0, 0x04, 0x5C, 0xC0, 0x06, 0x7C, 0xC0, 0x08, 0x4C, 0x3B, 0x1D, 0x50, 0x05, 0x93, 0x5A, 0xA9, 0x0E, 0xFC, 0xC0, 0x10, 0x1C, 0xC1, 0x12, 0x3C, 0xC1, 0x14, 0x5C, 0xC1, 0x16, 0x7C, 0xC1, 0x18, 0x9C, 0xC1, 0x1A, 0xBC, 0xC1, 0x1C, 0xDC, 0xC1, 0x1E, 0xFC, 0xC1, 0x20, 0x1C, 0xC2, 0x22, 0x3C, 0xC2, 0x24, 0x5C, 0xC2, 0x26, 0x7C, 0xC2, 0x28, 0x9C, 0xC2, 0x2A, 0xBC, 0xC2, 0x2C, 0xDC, 0xC2, 0x2E, 0xAC, 0xC1, 0x0E, 0x70, 0x20, 0x1C, 0xC0, 0x72, 0x34, 0x5C, 0xC3, 0x36, 0x7C, 0xC3, 0x38, 0x9C, 0xC3, 0x3A, 0xBC, 0xC3, 0x3C, 0xDC, 0xC3, 0x3E, 0xFC, 0xC3, 0x40, 0x1C, 0xC4, 0x42, 0x3C, 0xC4, 0x44, 0x5C, 0xC4, 0x46, 0x7C, 0xC4, 0x48, 0x9C, 0xC4, 0x4A, 0xBC, 0xC4, 0x4C, 0xDC, 0xC4, 0x42, 0x1C, 0x08, 0x00, 0x3B }; static FLMBYTE gv_novlogo_gif[] = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x64, 0x00, 0x16, 0x00, 0xC4, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFD, 0xFB, 0xFD, 0xF6, 0xF6, 0xF7, 0xFD, 0xFF, 0xFF, 0xFB, 0xFD, 0xFD, 0xFA, 0xFB, 0xFB, 0xF2, 0xF0, 0xED, 0xF6, 0xF4, 0xF2, 0xEC, 0xEA, 0xE8, 0xF8, 0xEC, 0xE5, 0xF2, 0xE6, 0xE4, 0xFD, 0x04, 0x04, 0xED, 0x47, 0x47, 0xE8, 0x6F, 0x6F, 0xEC, 0xA2, 0xA2, 0xF1, 0xBC, 0xBC, 0xEF, 0xCB, 0xCB, 0xF4, 0xDC, 0xDC, 0xFF, 0xFD, 0xFD, 0xFD, 0xFB, 0xFB, 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, 0x21, 0xF9, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x16, 0x00, 0x00, 0x05, 0xFF, 0x20, 0x20, 0x8E, 0x64, 0x69, 0x9E, 0x68, 0xAA, 0xAE, 0x6C, 0xEB, 0xBE, 0x70, 0x2C, 0xCF, 0x74, 0x6D, 0xDF, 0x78, 0xAE, 0xBF, 0x50, 0xD3, 0x44, 0x80, 0x88, 0x0F, 0xB8, 0x63, 0x39, 0x50, 0x0E, 0xC6, 0xB1, 0xA8, 0x7A, 0x2C, 0x16, 0x0F, 0x80, 0x13, 0xCA, 0x5C, 0x31, 0x18, 0x27, 0xC6, 0x02, 0x5B, 0x45, 0x4D, 0xA3, 0xDF, 0x6E, 0x4A, 0xCB, 0x25, 0x91, 0x4D, 0x91, 0xC7, 0x83, 0x28, 0x8A, 0x38, 0x1C, 0x0A, 0x92, 0xDB, 0xC1, 0x4E, 0xBC, 0x1D, 0x8F, 0x09, 0x29, 0x1C, 0x16, 0x67, 0x9F, 0x65, 0x22, 0x67, 0x23, 0x0A, 0x5A, 0x4F, 0x5B, 0x10, 0x22, 0x10, 0x80, 0x66, 0x4F, 0x40, 0x13, 0x0E, 0x87, 0x80, 0x89, 0x22, 0x7C, 0x4F, 0x51, 0x7E, 0x26, 0x86, 0x5B, 0x8D, 0x65, 0x11, 0x92, 0x92, 0x98, 0x0D, 0x8E, 0x8A, 0x4F, 0x0D, 0x22, 0xA3, 0x80, 0x9B, 0x08, 0x95, 0x97, 0x52, 0xAE, 0x99, 0x25, 0x9B, 0x88, 0x82, 0x9C, 0x00, 0x04, 0x86, 0x0D, 0x10, 0x10, 0x91, 0x4F, 0x07, 0x41, 0xA6, 0xA8, 0x4F, 0x71, 0x0A, 0x80, 0x02, 0xA5, 0x0B, 0xA7, 0xAF, 0x54, 0x7D, 0xB1, 0x23, 0x5A, 0x3E, 0x87, 0x89, 0x83, 0x53, 0xCA, 0x00, 0x90, 0x4F, 0x4B, 0xA9, 0x07, 0xC5, 0xC9, 0x22, 0xBD, 0x78, 0x6A, 0x10, 0xD4, 0xAE, 0xCD, 0xCE, 0x00, 0xD0, 0x00, 0xA9, 0x0B, 0xE3, 0xB6, 0xBD, 0x71, 0x23, 0x07, 0xE9, 0x00, 0x8B, 0x0B, 0x6F, 0xA4, 0xEA, 0xA0, 0xA0, 0xAD, 0xCC, 0xB0, 0xE7, 0xE8, 0xDE, 0xF2, 0x49, 0xE2, 0x92, 0xAA, 0x80, 0x2C, 0x5B, 0x00, 0x73, 0xE9, 0x11, 0x78, 0xA5, 0x21, 0x83, 0x06, 0x5C, 0x2C, 0x51, 0xF9, 0x07, 0xD0, 0xDA, 0x3A, 0x77, 0xFE, 0x80, 0x05, 0x1C, 0x30, 0xE5, 0x09, 0x25, 0x81, 0x09, 0x48, 0x4C, 0x60, 0x23, 0x11, 0xD3, 0xBF, 0x79, 0xDF, 0x0E, 0x69, 0x71, 0xE9, 0xC6, 0x80, 0x48, 0x02, 0x43, 0x1F, 0x01, 0x22, 0xA4, 0x17, 0x4C, 0x44, 0x80, 0x51, 0xCA, 0x4A, 0x56, 0x3A, 0x87, 0x32, 0x25, 0xC2, 0x5E, 0x5B, 0xD6, 0x59, 0x03, 0x30, 0xA0, 0x97, 0x49, 0x00, 0x37, 0x01, 0xBD, 0x31, 0x14, 0xB1, 0x9C, 0x2B, 0x07, 0x0D, 0x96, 0x64, 0xEA, 0xD9, 0xAA, 0xCC, 0x84, 0x8B, 0xA6, 0x0C, 0x94, 0x08, 0x70, 0x65, 0xE1, 0x88, 0x97, 0xFA, 0xAC, 0xE9, 0xBC, 0xE3, 0x0C, 0xEA, 0xD1, 0x11, 0x0F, 0x86, 0x4A, 0x81, 0xF8, 0xF0, 0x81, 0x84, 0x13, 0x6F, 0x90, 0x34, 0x6C, 0x70, 0x54, 0xC8, 0x0F, 0x00, 0x0A, 0x86, 0x48, 0xC1, 0x43, 0xB1, 0xAF, 0xDF, 0xBF, 0x80, 0x03, 0x0B, 0x1E, 0x4C, 0x38, 0x53, 0x08, 0x00, 0x3B }; static FLMBYTE gv_style_css[] = { 0x61, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x30, 0x33, 0x39, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x6C, 0x69, 0x6E, 0x65, 0x20, 0x7D, 0x0D, 0x0A, 0x62, 0x6F, 0x64, 0x79, 0x2C, 0x20, 0x74, 0x68, 0x2C, 0x20, 0x74, 0x72, 0x2C, 0x20, 0x74, 0x64, 0x2C, 0x20, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x66, 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x3A, 0x20, 0x22, 0x54, 0x72, 0x65, 0x62, 0x75, 0x63, 0x68, 0x65, 0x74, 0x20, 0x4D, 0x53, 0x22, 0x2C, 0x20, 0x41, 0x72, 0x69, 0x61, 0x6C, 0x2C, 0x20, 0x48, 0x65, 0x6C, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x2C, 0x20, 0x47, 0x65, 0x6E, 0x65, 0x76, 0x61, 0x2C, 0x20, 0x53, 0x77, 0x69, 0x73, 0x73, 0x2C, 0x20, 0x53, 0x75, 0x6E, 0x53, 0x61, 0x6E, 0x73, 0x2D, 0x52, 0x65, 0x67, 0x75, 0x6C, 0x61, 0x72, 0x20, 0x7D, 0x0D, 0x0A, 0x70, 0x2C, 0x20, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x6C, 0x69, 0x2C, 0x20, 0x6F, 0x6C, 0x2C, 0x20, 0x75, 0x6C, 0x20, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x39, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x68, 0x31, 0x20, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x30, 0x2E, 0x36, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x68, 0x32, 0x20, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x30, 0x2E, 0x34, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x68, 0x33, 0x20, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x30, 0x2E, 0x32, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x68, 0x34, 0x20, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x30, 0x2E, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x7B, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x3A, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x7D, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x31, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x20, 0x31, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x32, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x20, 0x32, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x34, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x20, 0x34, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x35, 0x72, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x35, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x35, 0x6C, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x35, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x36, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x20, 0x36, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x38, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x20, 0x38, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x31, 0x30, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x20, 0x31, 0x30, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x31, 0x30, 0x72, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x30, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x69, 0x6D, 0x67, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x31, 0x30, 0x6C, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x30, 0x70, 0x78, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x35, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x73, 0x70, 0x61, 0x6E, 0x2E, 0x74, 0x61, 0x62, 0x31, 0x75, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x7D, 0x0D, 0x0A, 0x73, 0x70, 0x61, 0x6E, 0x2E, 0x74, 0x61, 0x62, 0x32, 0x75, 0x20, 0x7B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x6C, 0x69, 0x6E, 0x65, 0x20, 0x7D, 0x0D, 0x0A, 0x73, 0x70, 0x61, 0x6E, 0x2E, 0x74, 0x61, 0x62, 0x32, 0x73, 0x20, 0x7B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x6C, 0x69, 0x6E, 0x65, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x7B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x65, 0x38, 0x65, 0x38, 0x38, 0x37, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x79, 0x70, 0x65, 0x67, 0x6F, 0x6C, 0x64, 0x31, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x63, 0x38, 0x32, 0x37, 0x32, 0x37, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x32, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x68, 0x65, 0x61, 0x64, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x63, 0x38, 0x32, 0x37, 0x32, 0x37, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x3A, 0x20, 0x6E, 0x6F, 0x72, 0x6D, 0x61, 0x6C, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x38, 0x30, 0x30, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x63, 0x6F, 0x6C, 0x75, 0x6D, 0x6E, 0x68, 0x65, 0x61, 0x64, 0x31, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x35, 0x35, 0x36, 0x63, 0x37, 0x39, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x65, 0x6D, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x68, 0x65, 0x61, 0x64, 0x31, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x62, 0x38, 0x38, 0x39, 0x39, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x69, 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x3A, 0x20, 0x30, 0x2E, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2D, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x30, 0x2E, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x6D, 0x69, 0x64, 0x64, 0x6C, 0x65, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x68, 0x65, 0x61, 0x64, 0x31, 0x62, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x62, 0x38, 0x38, 0x39, 0x39, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x69, 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x3A, 0x20, 0x30, 0x2E, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x6D, 0x69, 0x64, 0x64, 0x6C, 0x65, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x65, 0x78, 0x74, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x33, 0x35, 0x35, 0x32, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x65, 0x78, 0x74, 0x6D, 0x6C, 0x30, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x33, 0x35, 0x35, 0x32, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x31, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x30, 0x2E, 0x36, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x31, 0x61, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x30, 0x2E, 0x36, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x31, 0x62, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x33, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x31, 0x77, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x33, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x32, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x34, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x32, 0x61, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x34, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x32, 0x62, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x36, 0x30, 0x30, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2D, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x30, 0x2E, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x34, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x30, 0x2E, 0x34, 0x65, 0x6D, 0x3B, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x32, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, 0x36, 0x63, 0x38, 0x38, 0x39, 0x39, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x32, 0x74, 0x6D, 0x36, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x36, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x32, 0x74, 0x6D, 0x38, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x32, 0x77, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x66, 0x66, 0x66, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x32, 0x69, 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x34, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x30, 0x2E, 0x35, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x33, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x33, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x33, 0x61, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x33, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x33, 0x62, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2D, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x30, 0x2E, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x34, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x30, 0x2E, 0x34, 0x65, 0x6D, 0x3B, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x32, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, 0x36, 0x63, 0x38, 0x38, 0x39, 0x39, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x33, 0x64, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x33, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x33, 0x69, 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x33, 0x74, 0x6D, 0x36, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x36, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x33, 0x74, 0x6D, 0x38, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x33, 0x77, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x66, 0x66, 0x66, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x34, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x32, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x34, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x34, 0x62, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x32, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x34, 0x74, 0x6D, 0x36, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x36, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x34, 0x74, 0x6D, 0x38, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x34, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x34, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x64, 0x66, 0x64, 0x64, 0x64, 0x35, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x20, 0x30, 0x2E, 0x34, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x35, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x36, 0x30, 0x30, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x35, 0x61, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x36, 0x30, 0x30, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x32, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x35, 0x62, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x36, 0x30, 0x30, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x35, 0x74, 0x6D, 0x36, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x36, 0x30, 0x30, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x36, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x35, 0x74, 0x6D, 0x38, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x36, 0x30, 0x30, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x68, 0x69, 0x6E, 0x74, 0x31, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x32, 0x70, 0x78, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x69, 0x6E, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x63, 0x38, 0x38, 0x39, 0x39, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x74, 0x6F, 0x70, 0x31, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x33, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x74, 0x6F, 0x70, 0x32, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x35, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x74, 0x6F, 0x70, 0x33, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x6C, 0x65, 0x66, 0x74, 0x31, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x6C, 0x65, 0x66, 0x74, 0x31, 0x62, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x6C, 0x65, 0x66, 0x74, 0x32, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x32, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x6C, 0x65, 0x66, 0x74, 0x33, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x33, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x6C, 0x65, 0x66, 0x74, 0x34, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x34, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x6E, 0x6F, 0x6E, 0x70, 0x72, 0x6F, 0x70, 0x6F, 0x72, 0x74, 0x69, 0x6F, 0x6E, 0x61, 0x6C, 0x20, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x30, 0x70, 0x74, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x66, 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x3A, 0x20, 0x22, 0x43, 0x6F, 0x75, 0x72, 0x69, 0x65, 0x72, 0x20, 0x4E, 0x65, 0x77, 0x22, 0x2C, 0x20, 0x43, 0x6F, 0x75, 0x72, 0x69, 0x65, 0x72, 0x2C, 0x20, 0x4D, 0x6F, 0x6E, 0x61, 0x63, 0x6F, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x38, 0x20, 0x7B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x38, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x32, 0x78, 0x34, 0x20, 0x7B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x32, 0x70, 0x78, 0x3B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x32, 0x70, 0x78, 0x3B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x34, 0x70, 0x78, 0x3B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x34, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x32, 0x20, 0x7B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x32, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x73, 0x63, 0x72, 0x6F, 0x6C, 0x6C, 0x31, 0x20, 0x7B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x65, 0x66, 0x65, 0x65, 0x65, 0x39, 0x3B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x31, 0x30, 0x70, 0x78, 0x20, 0x31, 0x32, 0x70, 0x78, 0x20, 0x31, 0x30, 0x70, 0x78, 0x20, 0x31, 0x30, 0x70, 0x78, 0x3B, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x66, 0x6C, 0x6F, 0x77, 0x3A, 0x20, 0x61, 0x75, 0x74, 0x6F, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x34, 0x20, 0x7B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x34, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x72, 0x6F, 0x77, 0x61, 0x6C, 0x74, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x7B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x65, 0x66, 0x65, 0x65, 0x65, 0x39, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x72, 0x75, 0x6C, 0x65, 0x62, 0x6C, 0x75, 0x65, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x63, 0x38, 0x38, 0x39, 0x39, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x72, 0x75, 0x6C, 0x65, 0x62, 0x65, 0x6C, 0x6F, 0x77, 0x20, 0x7B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x35, 0x70, 0x78, 0x3B, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x32, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, 0x36, 0x63, 0x38, 0x38, 0x39, 0x39, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x72, 0x75, 0x6C, 0x65, 0x61, 0x62, 0x6F, 0x76, 0x65, 0x20, 0x7B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x35, 0x70, 0x78, 0x3B, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x32, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, 0x36, 0x63, 0x38, 0x38, 0x39, 0x39, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x74, 0x65, 0x78, 0x74, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x74, 0x65, 0x78, 0x74, 0x32, 0x61, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x74, 0x65, 0x78, 0x74, 0x32, 0x62, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x74, 0x65, 0x78, 0x74, 0x32, 0x63, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x33, 0x35, 0x35, 0x32, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x20, 0x34, 0x38, 0x30, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x74, 0x65, 0x78, 0x74, 0x32, 0x64, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x33, 0x35, 0x35, 0x32, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x6D, 0x65, 0x64, 0x69, 0x75, 0x6D, 0x74, 0x65, 0x78, 0x74, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x65, 0x78, 0x74, 0x62, 0x6C, 0x75, 0x65, 0x31, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x33, 0x35, 0x35, 0x32, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x39, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x32, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x63, 0x6F, 0x6C, 0x75, 0x6D, 0x6E, 0x68, 0x65, 0x61, 0x64, 0x31, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x63, 0x6F, 0x6C, 0x75, 0x6D, 0x6E, 0x68, 0x65, 0x61, 0x64, 0x31, 0x72, 0x75, 0x6C, 0x65, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x3B, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x3A, 0x20, 0x62, 0x6F, 0x74, 0x68, 0x3B, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x20, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, 0x36, 0x36, 0x33, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x63, 0x6F, 0x6C, 0x75, 0x6D, 0x6E, 0x68, 0x65, 0x61, 0x64, 0x32, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x36, 0x30, 0x30, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x37, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x68, 0x65, 0x61, 0x64, 0x31, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x63, 0x63, 0x39, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x69, 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x3A, 0x20, 0x30, 0x2E, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2D, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x30, 0x2E, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x68, 0x65, 0x61, 0x64, 0x32, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x36, 0x30, 0x30, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x39, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x63, 0x63, 0x39, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x69, 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x3A, 0x20, 0x30, 0x2E, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2D, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x30, 0x2E, 0x31, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x68, 0x65, 0x61, 0x64, 0x31, 0x62, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x2E, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x63, 0x63, 0x39, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x69, 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x3A, 0x20, 0x30, 0x2E, 0x35, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x73, 0x75, 0x62, 0x68, 0x65, 0x61, 0x64, 0x31, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x35, 0x65, 0x6D, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x65, 0x66, 0x65, 0x65, 0x65, 0x39, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x69, 0x6E, 0x64, 0x65, 0x6E, 0x74, 0x3A, 0x20, 0x30, 0x2E, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x30, 0x2E, 0x32, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x62, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x74, 0x3B, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x77, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x74, 0x3B, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x73, 0x6B, 0x31, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x31, 0x65, 0x6D, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x73, 0x6B, 0x31, 0x61, 0x20, 0x7B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x33, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x73, 0x6B, 0x32, 0x20, 0x7B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x20, 0x30, 0x2E, 0x33, 0x65, 0x6D, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x32, 0x65, 0x6D, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x38, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x77, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x68, 0x65, 0x61, 0x64, 0x64, 0x67, 0x72, 0x65, 0x79, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x35, 0x61, 0x35, 0x39, 0x35, 0x38, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x38, 0x70, 0x74, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x38, 0x70, 0x74, 0x3B, 0x20, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2D, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x31, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x77, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x68, 0x65, 0x61, 0x64, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x35, 0x61, 0x35, 0x39, 0x35, 0x38, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x38, 0x70, 0x74, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x38, 0x70, 0x74, 0x3B, 0x20, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2D, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x31, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x77, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x68, 0x65, 0x61, 0x64, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x38, 0x70, 0x74, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x38, 0x70, 0x74, 0x3B, 0x20, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2D, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x31, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x33, 0x35, 0x30, 0x20, 0x7B, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x20, 0x33, 0x35, 0x30, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x33, 0x30, 0x30, 0x20, 0x7B, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x20, 0x33, 0x30, 0x30, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x34, 0x30, 0x30, 0x20, 0x7B, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x20, 0x34, 0x30, 0x30, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x34, 0x35, 0x30, 0x20, 0x7B, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x20, 0x34, 0x35, 0x30, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x35, 0x30, 0x30, 0x20, 0x7B, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x20, 0x35, 0x30, 0x30, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x63, 0x61, 0x70, 0x77, 0x69, 0x64, 0x65, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x36, 0x33, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x36, 0x30, 0x30, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x30, 0x2E, 0x36, 0x65, 0x6D, 0x3B, 0x20, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2D, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x30, 0x2E, 0x32, 0x65, 0x6D, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x31, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x78, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x73, 0x75, 0x62, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x32, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x78, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x2E, 0x68, 0x65, 0x61, 0x64, 0x70, 0x62, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x35, 0x70, 0x78, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x20, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x74, 0x6F, 0x70, 0x3B, 0x20, 0x6C, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2D, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x32, 0x70, 0x78, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x31, 0x73, 0x20, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x32, 0x70, 0x78, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x37, 0x70, 0x78, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x62, 0x38, 0x38, 0x39, 0x39, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x31, 0x75, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x62, 0x6C, 0x61, 0x63, 0x6B, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x44, 0x46, 0x44, 0x44, 0x44, 0x35, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x32, 0x70, 0x78, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x32, 0x73, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x31, 0x70, 0x78, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x62, 0x38, 0x38, 0x39, 0x39, 0x20, 0x7D, 0x0D, 0x0A, 0x2E, 0x74, 0x61, 0x62, 0x32, 0x75, 0x20, 0x7B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x6E, 0x6F, 0x72, 0x6D, 0x61, 0x6C, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x31, 0x70, 0x78, 0x3B, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x20, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x36, 0x62, 0x38, 0x38, 0x39, 0x39, 0x20, 0x7D, 0x0D, 0x0A }; static FLMBYTE gv_spacer_gif[] = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x21, 0xF9, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x44, 0x01, 0x00, 0x3B }; static FLMBYTE gv_head_bg_gif[] = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x41, 0x00, 0xA2, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xE8, 0xE8, 0xEA, 0xFB, 0xFB, 0xFB, 0xF3, 0xF3, 0xF3, 0xD9, 0xD9, 0xD9, 0xC5, 0xC5, 0xC5, 0xAD, 0xAD, 0xAD, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x00, 0x00, 0x03, 0x0C, 0x18, 0xBA, 0xDC, 0xFE, 0x30, 0x46, 0x70, 0x4C, 0x11, 0x64, 0xB0, 0x04, 0x00, 0x3B }; // Static file table entry typedef struct { const char * pszPath; const char * pszMimeType; FLMBYTE * pucData; FLMUINT uiSize; } FlmStaticFile; // Table of static files static FlmStaticFile gv_StaticFileTbl[] = { { "head_bg.gif", "image/gif", gv_head_bg_gif, sizeof( gv_head_bg_gif) }, { "imonhdr.gif", "image/gif", gv_imonhdr_gif, sizeof( gv_imonhdr_gif) }, { "novlogo.gif", "image/gif", gv_novlogo_gif, sizeof( gv_novlogo_gif) }, { "spacer.gif", "image/gif", gv_spacer_gif, sizeof( gv_spacer_gif) }, { "style.css", "text/css", gv_style_css, sizeof( gv_style_css) }, { NULL, NULL, NULL, 0 } }; /**************************************************************************** Desc: Displays information about FLAIM threads ****************************************************************************/ RCODE F_FlmThreadsPage::display( FLMUINT uiNumParams, const char ** ppszParams) { FLMBOOL bRefresh = FALSE; char szTmp[ 256]; FLMUINT uiLoop; FLMUINT uiCurrentTime; FLMUINT uiNumThreads; F_THREAD_INFO * pThreadInfo = NULL; F_Pool pool; pool.poolInit( 1024); printDocStart( "Threads", FALSE); // Determine if we are being requested to refresh this page or not. if ((bRefresh = DetectParameter( uiNumParams, ppszParams, "refresh")) == TRUE) { fnPrintf( m_pHRequest, "\n", m_pszURLString); } if( RC_OK( ExtractParameter( uiNumParams, ppszParams, "shutdown", sizeof( szTmp), szTmp))) { FLMUINT uiThreadId = f_atoi( szTmp); if( uiThreadId) { gv_FlmSysData.pThreadMgr->setThreadShutdownFlag( uiThreadId); } } // Table printTableStart( "Threads", 7); // Refresh link printTableRowStart(); printColumnHeading( NULL, JUSTIFY_LEFT, FLM_IMON_COLOR_PUTTY_1, 7, 1, FALSE); fnPrintf( m_pHRequest, "Refresh"); // Space fnPrintf( m_pHRequest, ", "); // Auto-refresh link fnPrintf( m_pHRequest, "Start Auto-Refresh (5 sec.)"); } else { fnPrintf( m_pHRequest, ">Stop Auto-Refresh"); } printColumnHeadingClose(); printTableRowEnd(); // Table column headers printTableRowStart(); printColumnHeading( "ID"); printColumnHeading( "Group"); printColumnHeading( "Application ID"); printColumnHeading( "Name"); printColumnHeading( "Status"); printColumnHeading( "Action"); printColumnHeading( "Seconds Since Started"); printTableRowEnd(); // Output rows if( RC_BAD( FlmGetThreadInfo( &pool, &pThreadInfo, &uiNumThreads))) { fnPrintf( m_pHRequest, "Error getting thread information."); goto Exit; } f_timeGetSeconds( &uiCurrentTime); // Write out the table rows f_timeGetSeconds( &uiCurrentTime); for( uiLoop = 0; uiLoop < uiNumThreads; uiLoop++) { printTableRowStart( (uiLoop & 0x00000001) ? FALSE : TRUE); fnPrintf( m_pHRequest, TD_8x, (FLMUINT)pThreadInfo[ uiLoop].uiThreadId); fnPrintf( m_pHRequest, TD_8x, (FLMUINT)pThreadInfo[ uiLoop].uiThreadGroup); fnPrintf( m_pHRequest, TD_8x, (FLMUINT)pThreadInfo[ uiLoop].uiAppId); fnPrintf( m_pHRequest, TD_s, pThreadInfo[ uiLoop].pszThreadName ? (char *)pThreadInfo[ uiLoop].pszThreadName : "Unknown"); fnPrintf( m_pHRequest, TD_s, pThreadInfo[ uiLoop].pszThreadStatus ? (char *)pThreadInfo[ uiLoop].pszThreadName : "Unknown"); f_sprintf( (char *)szTmp, "%s/threads?shutdown=%u", m_pszURLString, (unsigned)pThreadInfo[ uiLoop].uiThreadId); if( bRefresh) { f_strcat( szTmp, "?refresh"); } fnPrintf( m_pHRequest, TD_a_s_s, szTmp, "Shutdown"); fnPrintf( m_pHRequest, TD_ui, (FLMUINT)(uiCurrentTime - pThreadInfo[ uiLoop].uiStartTime)); printTableRowEnd(); } // Close the table printTableEnd(); // Close the document printDocEnd(); Exit: fnEmit(); return( FERR_OK); } /**************************************************************************** Desc: Serves up a static file to a web browser ****************************************************************************/ RCODE F_HttpFile::display( FLMUINT uiNumParams, const char ** ppszParams) { FlmStaticFile * pStaticFile; IF_FileHdl * pSrcFile = NULL; IF_DirHdl * pDirHdl = NULL; FLMUINT uiSize; FLMUINT64 ui64FileSize; FLMUINT uiBytesRead; FLMUINT uiOffset; FLMBYTE * pucBuf = NULL; FLMUINT uiBufSize; FLMUINT uiCount; char szPath[ F_PATH_MAX_SIZE]; char szTmp[ F_PATH_MAX_SIZE]; FLMBOOL bHaveParent; FLMBOOL bStaticOnly = FALSE; FLMBOOL bMapSlashes = FALSE; RCODE rc = FERR_OK; uiSize = 10; if( f_strnicmp( ppszParams[ 0], "staticfile", uiSize) == 0) { bStaticOnly = TRUE; if( f_strlen( ppszParams[ 0]) > uiSize) { if( ppszParams[ 0][ uiSize] == '/') { uiSize++; } f_strcpy( szPath, &ppszParams[ 0][ uiSize]); bMapSlashes = TRUE; } else { rc = RC_SET( FERR_IO_PATH_NOT_FOUND); goto NotFoundExit; } } else { if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "path", sizeof( szPath), szPath))) { if( f_strnicmp( ppszParams[ 0], "file/", 5) == 0 && f_strlen( ppszParams[ 0]) > 5) { f_strcpy( szPath, &ppszParams[ 0][ 5]); bMapSlashes = TRUE; } else { printDocStart( "File Manager"); // Insert a form into the page to get the file path fnPrintf( m_pHRequest, "
\n", m_pszURLString); fnPrintf( m_pHRequest, "
\n
\nPath
\n" "
\n"); printButton( "Submit", BT_Submit); fnPrintf( m_pHRequest, "
\n

\n"); printDocEnd(); goto Exit; } } } // Translate any escaped characters in the path fcsDecodeHttpString( szPath); // Convert any forward slashes into back slashes on non-Unix platforms #ifndef FLM_UNIX if( bMapSlashes) { char * pszTmp = szPath; while( *pszTmp) { if( *pszTmp == '/') { *pszTmp = '\\'; } pszTmp++; } } #endif // Find the file in the table pStaticFile = &gv_StaticFileTbl[ 0]; while( pStaticFile->pszPath) { if( f_strcmp( pStaticFile->pszPath, szPath) == 0) { break; } pStaticFile++; } // Found the file in the static file table if( pStaticFile->pszPath) { // Send the data fnSetHdrValue( "Content-Type", (char *)pStaticFile->pszMimeType); f_sprintf( (char *)szTmp, "%u", (unsigned)pStaticFile->uiSize); fnSetHdrValue( "Content-Length", (char *)szTmp); fnSendHeader( HTS_OK); fnSendBuffer( pStaticFile->pucData, pStaticFile->uiSize); goto Exit; } else if( bStaticOnly) { rc = RC_SET( FERR_IO_PATH_NOT_FOUND); goto NotFoundExit; } // See if a directory listing has been requested. if( gv_FlmSysData.pFileSystem->isDir( szPath)) { if (RC_BAD( rc = gv_FlmSysData.pFileSystem->openDir( szPath, "*", &pDirHdl))) { goto ReportErrorExit; } f_sprintf( (char *)szTmp, "Directory listing of %80s", szPath); // Document printDocStart( (char *)szTmp, FALSE); // Table printTableStart( (char *)szTmp, 5); // Table column headers printTableRowStart(); printColumnHeading( "File Name"); printColumnHeading( "Type"); printColumnHeading( "Size"); printColumnHeading( "Timestamp"); printColumnHeading( "Action"); printTableRowEnd(); // Output the parent directory bHaveParent = FALSE; if( RC_BAD( rc = gv_FlmSysData.pFileSystem->pathReduce( szPath, szTmp, NULL))) { if( rc == FERR_IO_AT_PATH_ROOT) { rc = FERR_OK; } else { goto Exit; } } else if( *szTmp) { bHaveParent = TRUE; } // Output the directory contents uiCount = 0; for (;;) { if( !bHaveParent) { if (RC_BAD( rc = pDirHdl->next())) { if (rc == FERR_IO_NO_MORE_FILES) { rc = FERR_OK; break; } else { goto Exit; } } pDirHdl->currentItemPath( szTmp); } printTableRowStart( (uiCount & 0x00000001) ? FALSE : TRUE); // File Path printTableDataStart(); fnPrintf( m_pHRequest, ""); printEncodedString( bHaveParent ? ".. " : pDirHdl->currentItemName(), HTML_ENCODING); fnPrintf( m_pHRequest, "\n"); printTableDataEnd(); // File type printTableDataStart(); if( bHaveParent || pDirHdl->currentItemIsDir()) { fnPrintf( m_pHRequest, "Dir"); } else { fnPrintf( m_pHRequest, "File"); } printTableDataEnd(); // File size printTableDataStart(); if( !bHaveParent && !pDirHdl->currentItemIsDir()) { fnPrintf( m_pHRequest, "%u", pDirHdl->currentItemSize()); } else { printTableDataEmpty(); } printTableDataEnd(); // Timestamp printTableDataStart(); if( !bHaveParent) { FLMUINT uiTimestamp; if( RC_BAD( gv_FlmSysData.pFileSystem->getFileTimeStamp( szTmp, &uiTimestamp))) { uiTimestamp = 0; } printDate( uiTimestamp); } else { printTableDataEmpty(); } // Action printTableDataStart(); if( !bHaveParent && (f_strstr( pDirHdl->currentItemName(), ".db") != NULL || f_strstr( pDirHdl->currentItemName(), ".DB") != NULL)) { fnPrintf( m_pHRequest, ""); fnPrintf( m_pHRequest, "Open"); fnPrintf( m_pHRequest, "\n"); fnPrintf( m_pHRequest, ", "); fnPrintf( m_pHRequest, "Backup"); fnPrintf( m_pHRequest, "\n"); } else { printTableDataEmpty(); } printTableDataEnd(); printTableRowEnd(); uiCount++; bHaveParent = FALSE; } printTableEnd(); printDocEnd(); pDirHdl->Release(); pDirHdl = NULL; goto Exit; } // Try opening the file on the file system if( RC_BAD( rc = gv_FlmSysData.pFileSystem->openFile( szPath, FLM_IO_RDONLY | FLM_IO_SH_DENYNONE, &pSrcFile))) { if( rc == FERR_IO_PATH_NOT_FOUND) { goto NotFoundExit; } else { goto ReportErrorExit; } } // Get the file size if( RC_BAD( rc = pSrcFile->size( &ui64FileSize))) { goto ReportErrorExit; } uiSize = (FLMUINT)ui64FileSize; // Allocate a buffer for streaming the data back to the client uiBufSize = 2048; if( RC_BAD( f_alloc( uiBufSize, &pucBuf))) { goto ReportErrorExit; } // Send the HTTP header f_sprintf( (char *)szTmp, "%u", (unsigned)uiSize); fnSetHdrValue( "Content-Length", (char *)szTmp); fnSendHeader( HTS_OK); // Send the data uiOffset = 0; for( ;;) { if( RC_BAD( rc = pSrcFile->read( uiOffset, uiBufSize, pucBuf, &uiBytesRead))) { if( rc == FERR_IO_END_OF_FILE) { rc = FERR_OK; } else { goto Exit; } } if( uiBytesRead) { if( fnSendBuffer( pucBuf, uiBytesRead) != 0) { rc = RC_SET( FERR_FAILURE); goto Exit; } uiOffset += uiBytesRead; } if( uiBytesRead < uiBufSize || uiOffset == uiSize) { break; } } Exit: fnEmit(); if( pSrcFile) { pSrcFile->Release(); } if( pDirHdl) { pDirHdl->Release(); } if( pucBuf) { f_free( &pucBuf); } return( FERR_OK); ReportErrorExit: printErrorPage( rc); goto Exit; NotFoundExit: fnSetHdrValue( "Content-Type", "text/html"); fnSendHeader( HTS_NOT_FOUND); printErrorPage( rc, FALSE); goto Exit; } /**************************************************************************** Desc: Streams data back to the web browser during a database backup ****************************************************************************/ RCODE F_HttpDbBackup::backupWriteHook( void * pvBuffer, FLMUINT uiBytesToWrite, void * pvUserData) { F_HttpDbBackup * pThis = (F_HttpDbBackup *)pvUserData; RCODE rc = FERR_OK; if( gv_FlmSysData.HttpConfigParms.fnSendBuffer( pThis->m_pHRequest, pvBuffer, uiBytesToWrite)) { rc = RC_SET( FERR_FAILURE); goto Exit; } Exit: return( rc); } /**************************************************************************** Desc: Interface for performing a web-based database backup ****************************************************************************/ RCODE F_HttpDbBackup::display( FLMUINT uiNumParams, const char ** ppszParams) { RCODE rc = FERR_OK; char szPath[ 256]; HFDB hDb = HFDB_NULL; HFBACKUP hBackup = HFBACKUP_NULL; FLMBOOL bMapSlashes = FALSE; // Get the database path if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "path", sizeof( szPath), szPath))) { if( f_strnicmp( ppszParams[ 0], "dbbackup/", 9) == 0 && f_strlen( ppszParams[ 0]) > 9) { f_strcpy( szPath, &ppszParams[ 0][ 9]); bMapSlashes = TRUE; } else { printDocStart( "Database Backup"); // Insert a form into the page to get backup information fnPrintf( m_pHRequest, "
\n", m_pszURLString); fnPrintf( m_pHRequest, "
\n
\nPath
\n" "
\n"); printButton( "Submit", BT_Submit); fnPrintf( m_pHRequest, "
\n
\n"); printDocEnd(); goto Exit; } } // Translate any escaped characters in the path fcsDecodeHttpString( szPath); // Convert any forward slashes into back slashes on non-Unix platforms #ifndef FLM_UNIX if( bMapSlashes) { char * pszTmp = szPath; while( *pszTmp) { if( *pszTmp == '/') { *pszTmp = '\\'; } pszTmp++; } } #endif // Open the database if( RC_BAD( rc = FlmDbOpen( szPath, NULL, NULL, 0, NULL, &hDb))) { goto ReportErrorExit; } // Start the backup. This may return an error such as FERR_BACKUP_ACTIVE, // which we will want to report back to the client. if( RC_BAD( rc = FlmDbBackupBegin( hDb, FLM_FULL_BACKUP, TRUE, &hBackup))) { goto ReportErrorExit; } // Send the header. We don't know how big the backup will be, // so we can't send a content length. fnSetHdrValue( "Content-Type", "x-novell/dbbackup"); fnSendHeader( HTS_OK); // Perform the backup if( RC_BAD( rc = FlmDbBackup( hBackup, NULL, NULL, F_HttpDbBackup::backupWriteHook, NULL, this, NULL))) { goto Exit; } Exit: fnEmit(); if( hBackup != HFBACKUP_NULL) { FlmDbBackupEnd( &hBackup); } if( hDb != HFDB_NULL) { FlmDbClose( &hDb); } return( FERR_OK); ReportErrorExit: printErrorPage( rc); goto Exit; } /**************************************************************************** Desc: Displays information about FLAIM indexes ****************************************************************************/ RCODE F_FlmIndexPage::display( FLMUINT uiNumParams, const char ** ppszParams) { FLMBOOL bRefresh = FALSE; char szTmp[ 128]; char szPath[ F_PATH_MAX_SIZE]; char szDbKey[ F_SESSION_DB_KEY_LEN]; FLMUINT uiIndexNum; FLMUINT uiTransType; HFDB hDb = HFDB_NULL; FINDEX_STATUS indexStatus; FLMUINT uiLoop; FlmRecord * pRec = NULL; F_Session * pFlmSession = m_pFlmSession; FLMBOOL bMapSlashes = FALSE; FLMBOOL bOpenedDb = FALSE; FLMBOOL bStartedTrans = FALSE; RCODE rc = FERR_OK; // Check the session if( !pFlmSession) { rc = RC_SET( m_uiSessionRC); goto ReportErrorExit; } // Initialize the path szPath[ 0] = '\0'; // DB handle getDatabaseHandleParam( uiNumParams, ppszParams, pFlmSession, &hDb, szDbKey); if( hDb == HFDB_NULL) { // Get the database path if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "path", sizeof( szPath), szPath))) { if( f_strnicmp( ppszParams[ 0], "index/", 6) == 0 && f_strlen( ppszParams[ 0]) > 6) { f_strcpy( szPath, &ppszParams[ 0][ 6]); bMapSlashes = TRUE; } else { printDocStart( "Index Manager"); // Insert a form into the page to get the database path fnPrintf( m_pHRequest, "
\n", m_pszURLString); fnPrintf( m_pHRequest, "
\n
\nDatabase Path
\n" "
\n"); printButton( "Submit", BT_Submit); fnPrintf( m_pHRequest, "
\n
\n"); printDocEnd(); goto Exit; } } // Translate any escaped characters in the path fcsDecodeHttpString( szPath); // Convert any forward slashes into back slashes on non-Unix platforms #ifndef FLM_UNIX if( bMapSlashes) { char * pszTmp = szPath; while( *pszTmp) { if( *pszTmp == '/') { *pszTmp = '\\'; } pszTmp++; } } #endif // Open the database if( RC_BAD( rc = FlmDbOpen( szPath, NULL, NULL, 0, NULL, &hDb))) { goto ReportErrorExit; } bOpenedDb = TRUE; } // Get the current transaction type if( RC_BAD( rc = FlmDbGetTransType( hDb, &uiTransType))) { goto ReportErrorExit; } // Suspend? if( RC_OK( ExtractParameter( uiNumParams, ppszParams, "suspend", sizeof( szTmp), szTmp))) { if( (uiIndexNum = f_atoi( szTmp)) != 0) { FlmIndexSuspend( hDb, uiIndexNum); } else if( f_stricmp( szTmp, "all") == 0) { if( uiTransType != FLM_UPDATE_TRANS) { if( RC_BAD( rc = FlmDbTransBegin( hDb, FLM_UPDATE_TRANS, 5))) { goto ReportErrorExit; } uiTransType = FLM_UPDATE_TRANS; bStartedTrans = TRUE; } uiIndexNum = 0; for( uiLoop = 0;; uiLoop++) { if( RC_BAD( FlmIndexGetNext( hDb, &uiIndexNum))) { break; } (void)FlmIndexSuspend( hDb, uiIndexNum); } if( bStartedTrans) { bStartedTrans = FALSE; if( RC_BAD( rc = FlmDbTransCommit( hDb))) { FlmDbTransAbort( hDb); } } } } // Resume? if( RC_OK( ExtractParameter( uiNumParams, ppszParams, "resume", sizeof( szTmp), szTmp))) { if( (uiIndexNum = f_atoi( szTmp)) != 0) { FlmIndexResume( hDb, uiIndexNum); } else if( f_stricmp( szTmp, "all") == 0) { if( uiTransType != FLM_UPDATE_TRANS) { if( RC_BAD( rc = FlmDbTransBegin( hDb, FLM_UPDATE_TRANS, 5))) { goto ReportErrorExit; } uiTransType = FLM_UPDATE_TRANS; bStartedTrans = TRUE; } uiIndexNum = 0; for( uiLoop = 0;; uiLoop++) { if( RC_BAD( FlmIndexGetNext( hDb, &uiIndexNum))) { break; } (void)FlmIndexResume( hDb, uiIndexNum); } if( bStartedTrans) { bStartedTrans = FALSE; if( RC_BAD( rc = FlmDbTransCommit( hDb))) { FlmDbTransAbort( hDb); } } } } // Document start printDocStart( "Indexes", FALSE); // Determine if we are being requested to refresh this page or not. if ((bRefresh = DetectParameter( uiNumParams, ppszParams, "refresh")) == TRUE) { fnPrintf( m_pHRequest, "\n"); } // Table printTableStart( "Indexes", 8); // Refresh link printTableRowStart(); printColumnHeading( NULL, JUSTIFY_LEFT, FLM_IMON_COLOR_PUTTY_1, 8, 1, FALSE); fnPrintf( m_pHRequest, "Refresh"); // Space fnPrintf( m_pHRequest, ", "); // Auto-refresh link fnPrintf( m_pHRequest, "Start Auto-Refresh (5 sec.)"); } else { fnPrintf( m_pHRequest, ">Stop Auto-Refresh"); } // Space fnPrintf( m_pHRequest, ", "); // Suspend all fnPrintf( m_pHRequest, "Suspend All Indexes"); // Space fnPrintf( m_pHRequest, ", "); // Resume all fnPrintf( m_pHRequest, "Resume All Indexes"); printColumnHeadingClose(); printTableRowEnd(); // Table column headers printTableRowStart(); printColumnHeading( "Action"); printColumnHeading( "Index Number", JUSTIFY_RIGHT); printColumnHeading( "Index Name"); printColumnHeading( "Status"); printColumnHeading( "Background Start Time"); printColumnHeading( "Last Record ID Indexed", JUSTIFY_RIGHT); printColumnHeading( "Keys Processed", JUSTIFY_RIGHT); printColumnHeading( "Records Processed", JUSTIFY_RIGHT); printTableRowEnd(); // Output index list uiIndexNum = 0; for( uiLoop = 0;; uiLoop++) { if( RC_BAD( rc = FlmIndexGetNext( hDb, &uiIndexNum))) { if( rc == FERR_EOF_HIT) { rc = FERR_OK; break; } goto Exit; } if( RC_BAD( FlmIndexStatus( hDb, uiIndexNum, &indexStatus))) { continue; } // Write out the table rows printTableRowStart( (uiLoop & 0x00000001) ? FALSE : TRUE); // Action printTableDataStart(); fnPrintf( m_pHRequest, ""); fnPrintf( m_pHRequest, "%s", indexStatus.bSuspended ? "Resume" : "Suspend"); fnPrintf( m_pHRequest, "\n"); printTableDataEnd(); // Index Number printTableDataStart( TRUE, JUSTIFY_RIGHT); fnPrintf( m_pHRequest, "%u", (unsigned)indexStatus.uiIndexNum); printTableDataEnd(); // Name f_sprintf( (char *)szTmp, "Unknown"); if( RC_OK( FlmRecordRetrieve( hDb, FLM_DICT_CONTAINER, uiIndexNum, FO_EXACT, &pRec, NULL))) { FLMUINT uiBufLen = sizeof( szTmp); pRec->getNative( pRec->root(), szTmp, &uiBufLen); } printTableDataStart(); fnPrintf( m_pHRequest, "%s", szTmp); printTableDataEnd(); // Status printTableDataStart(); if( indexStatus.bSuspended) { fnPrintf( m_pHRequest, "suspended"); } else if( indexStatus.uiLastRecordIdIndexed != 0xFFFFFFFF) { fnPrintf( m_pHRequest, "bringing on-line"); } else { fnPrintf( m_pHRequest, "on-line"); } printTableDataEnd(); // Start time printTableDataStart(); if( indexStatus.uiStartTime) { printDate( indexStatus.uiStartTime); } else { printTableDataEmpty(); } printTableDataEnd(); // Last record indexed if( indexStatus.uiLastRecordIdIndexed != 0xFFFFFFFF) { printCommaNum( indexStatus.uiLastRecordIdIndexed); } else { printTableDataStart(); printTableDataEmpty(); printTableDataEnd(); } // Keys processed if( indexStatus.uiKeysProcessed) { printCommaNum( indexStatus.uiKeysProcessed); } else { printTableDataStart(); printTableDataEmpty(); printTableDataEnd(); } // Records processed if( indexStatus.uiRecordsProcessed) { printCommaNum( indexStatus.uiRecordsProcessed); } else { printTableDataStart(); printTableDataEmpty(); printTableDataEnd(); } printTableRowEnd(); } printTableEnd(); printDocEnd(); Exit: fnEmit(); if( pRec) { pRec->Release(); } if( bStartedTrans) { FlmDbTransAbort( hDb); } if( bOpenedDb && hDb != HFDB_NULL) { FlmDbClose( &hDb); } return( FERR_OK); ReportErrorExit: printErrorPage( rc); goto Exit; } /**************************************************************************** Desc: ****************************************************************************/ RCODE F_DatabasePage::display( FLMUINT uiNumParams, const char ** ppszParams) { char szOperation[ 256]; char szTmp[ 128]; char * pszPath; char * pszDataDir; char * pszRflDir; char szDbKey[ F_SESSION_DB_KEY_LEN]; char * pTmp; char * pucPathBuf = NULL; FLMUINT uiTransType; FLMUINT uiEndType; FLMUINT uiOperation; FLMUINT uiLanguage; FLMBOOL bExecute = FALSE; FLMBOOL bPrintedParms; FLMBOOL bDelRflFiles; FLMBOOL bMustConfirm = FALSE; HFDB hDb = HFDB_NULL; F_Session * pFlmSession = m_pFlmSession; FLMBOOL bHighlight; RCODE rc = FERR_OK; // Check the session if( !pFlmSession) { rc = RC_SET( m_uiSessionRC); goto ReportErrorExit; } // Allocate a path buffer if( RC_BAD( f_alloc( F_PATH_MAX_SIZE * 3, &pucPathBuf))) { goto ReportErrorExit; } pszPath = &pucPathBuf[ 0]; pszDataDir = &pucPathBuf[ F_PATH_MAX_SIZE]; pszRflDir = &pucPathBuf[ F_PATH_MAX_SIZE * 2]; // Get the database operation uiOperation = 0; szOperation[ 0] = 0; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "operation", sizeof( szOperation), szOperation))) { pTmp = &szOperation[ 0]; getFormValueByName( "operation", &pTmp, sizeof( szOperation), NULL); } if( szOperation[ 0]) { fcsDecodeHttpString( szOperation); if( (uiOperation = f_atoud( szOperation)) != 0) { szOperation[ 0] = 0; } } // DB handle if( RC_BAD( rc = getDatabaseHandleParam( uiNumParams, ppszParams, pFlmSession, &hDb, szDbKey))) { if( rc != FERR_NOT_FOUND) { goto ReportErrorExit; } rc = FERR_OK; } // Transaction type szTmp[ 0] = '\0'; uiTransType = FLM_NO_TRANS; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "transtype", sizeof( szTmp), szTmp))) { pTmp = &szTmp[ 0]; getFormValueByName( "transtype", &pTmp, sizeof( szTmp), NULL); } if( szTmp[ 0]) { uiTransType = f_atoud( szTmp); } // Language uiLanguage = DEFAULT_LANG; szTmp[ 0] = '\0'; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "language", sizeof( szTmp), szTmp))) { pTmp = &szTmp[ 0]; getFormValueByName( "language", &pTmp, sizeof( szTmp), NULL); } if( szTmp[ 0]) { uiLanguage = f_atoud( szTmp); } // End type szTmp[ 0] = '\0'; uiEndType = 0; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "endtype", sizeof( szTmp), szTmp))) { pTmp = &szTmp[ 0]; getFormValueByName( "endtype", &pTmp, sizeof( szTmp), NULL); } if( szTmp[ 0]) { uiEndType = f_atoud( szTmp); } // Delete RFL files flag szTmp[ 0] = '\0'; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "delrfl", sizeof( szTmp), szTmp))) { pTmp = &szTmp[ 0]; getFormValueByName( "delrfl", &pTmp, sizeof( szTmp), NULL); } if( szTmp[ 0]) { bDelRflFiles = f_atoud( szTmp) ? TRUE : FALSE; } else { bDelRflFiles = FALSE; } // Path pszPath[ 0] = '\0'; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "path", F_PATH_MAX_SIZE, pszPath))) { getFormValueByName( "path", &pszPath, F_PATH_MAX_SIZE, NULL); } if( pszPath[ 0]) { fcsDecodeHttpString( pszPath); } // Data directory pszDataDir[ 0] = '\0'; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "datadir", F_PATH_MAX_SIZE, pszDataDir))) { getFormValueByName( "datadir", &pszDataDir, F_PATH_MAX_SIZE, NULL); } if( pszDataDir[ 0]) { fcsDecodeHttpString( pszDataDir); } // RFL directory pszRflDir[ 0] = '\0'; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "rfldir", F_PATH_MAX_SIZE, pszRflDir))) { getFormValueByName( "rfldir", &pszRflDir, F_PATH_MAX_SIZE, NULL); } if( pszRflDir[ 0]) { fcsDecodeHttpString( pszRflDir); } // Execute bExecute = FALSE; szTmp[ 0] = '\0'; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "Action", sizeof( szTmp), szTmp))) { pTmp = &szTmp[ 0]; getFormValueByName( "Action", &pTmp, sizeof( szTmp), NULL); } if( szTmp[ 0]) { bExecute = f_atoud( szTmp) ? TRUE : FALSE; } // Start document printDocStart( "Database Operations", FALSE); popupFrame(); // Perform the requested operation if( f_stricmp( szOperation, "open") == 0 || (uiOperation == FLM_DB_OPEN && bExecute)) { // Open the database if( RC_OK( rc = FlmDbOpen( pszPath, pszDataDir, pszRflDir, 0, NULL, &hDb))) { // Insert the handle into the session if( RC_BAD( rc = pFlmSession->addDbHandle( hDb))) { FlmDbClose( &hDb); } } } else if( f_stricmp( szOperation, "create") == 0 || (uiOperation == FLM_DB_CREATE && bExecute)) { CREATE_OPTS createOpts; f_memset( &createOpts, 0, sizeof( CREATE_OPTS)); createOpts.uiBlockSize = DEFAULT_BLKSIZ; createOpts.uiVersionNum = FLM_CUR_FILE_FORMAT_VER_NUM; createOpts.uiDefaultLanguage = uiLanguage; // Create the database if( RC_OK( rc = FlmDbCreate( pszPath, pszDataDir, pszRflDir, NULL, NULL, &createOpts, &hDb))) { // Insert the handle into the session if( RC_BAD( rc = pFlmSession->addDbHandle( hDb))) { FlmDbClose( &hDb); } } } else if( f_stricmp( szOperation, "remove") == 0 || (uiOperation == FLM_DB_REMOVE && bExecute)) { // Remove the database rc = FlmDbRemove( pszPath, pszDataDir, pszRflDir, bDelRflFiles); } else if ( f_stricmp( szOperation, "loghdr") == 0 || (uiOperation == FLM_DB_LOGHDR && bExecute)) { // Generate a new display to show the Log Header(s) // for the specified file. if (RC_OK( rc = displayLogFileHdr( pszPath))) { goto Exit; } } else if( f_stricmp( szOperation, "close") == 0) { if( hDb != HFDB_NULL) { pFlmSession->closeDb( szDbKey); } } else if( f_stricmp( szOperation, "transbegin") == 0) { if( hDb != HFDB_NULL && uiTransType != FLM_NO_TRANS) { rc = FlmDbTransBegin( hDb, uiTransType, 5); } } else if( f_stricmp( szOperation, "transend") == 0) { if( hDb != HFDB_NULL) { if( uiEndType) { if( RC_BAD( rc = FlmDbTransCommit( hDb))) { FlmDbTransAbort( hDb); } } else { FlmDbTransAbort( hDb); } } } else if( f_stricmp( szOperation, "checkpoint") == 0) { if( hDb != HFDB_NULL) { rc = FlmDbCheckpoint( hDb, 5); } } else if( f_stricmp( szOperation, "lock") == 0) { if( hDb != HFDB_NULL) { rc = FlmDbLock( hDb, FLM_LOCK_EXCLUSIVE, 0, 5); } } else if( f_stricmp( szOperation, "unlock") == 0) { if( hDb != HFDB_NULL) { rc = FlmDbUnlock( hDb); } } else if( f_stricmp( szOperation, "reduce") == 0) { if( hDb != HFDB_NULL) { rc = FlmDbReduceSize( hDb, 0, NULL); } } else { rc = RC_SET( FERR_ILLEGAL_OP); } // Table if( szOperation[ 0] || (uiOperation && bExecute)) { f_sprintf( (char *)szTmp, "Database Operations (Return Code = 0x%04X, %s)", (unsigned)rc, FlmErrorString( rc)); } else { f_sprintf( (char *)szTmp, "Database Operations"); } printStartInputForm( "dbop", "database", 0); printTableStart( (char *)szTmp, 3); // Table column headers printTableRowStart(); printColumnHeading( "Operation", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 25); printColumnHeading( "", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 50); printColumnHeading( "Execute", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 25); printTableRowEnd(); // Database parameters printTableRowStart(); printTableDataStart( TRUE, JUSTIFY_LEFT, 25); fnPrintf( m_pHRequest, "\n"); printTableDataEnd(); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); // Parameter table printTableStart( (char *)"Parameters", 2); // Table column headers printTableRowStart(); printColumnHeading( "Name", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 50); printColumnHeading( "Value", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 50); printTableRowEnd(); bPrintedParms = FALSE; bHighlight = TRUE; if( uiOperation == FLM_DB_OPEN || uiOperation == FLM_DB_CREATE || uiOperation == FLM_DB_REMOVE || uiOperation == FLM_DB_LOGHDR) { printTableRowStart( bHighlight = !bHighlight); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); fnPrintf( m_pHRequest, "Path"); printTableDataEnd(); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); fnPrintf( m_pHRequest, "\n"); printTableDataEnd(); printTableRowEnd(); if (uiOperation != FLM_DB_LOGHDR) { printTableRowStart( bHighlight = !bHighlight); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); fnPrintf( m_pHRequest, "Data Directory (optional)"); printTableDataEnd(); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); fnPrintf( m_pHRequest, "\n"); printTableDataEnd(); printTableRowEnd(); printTableRowStart( bHighlight = !bHighlight); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); fnPrintf( m_pHRequest, "RFL Directory (optional)"); printTableDataEnd(); printTableDataStart(); fnPrintf( m_pHRequest, "\n"); printTableDataEnd(); printTableRowEnd(); } bPrintedParms = TRUE; } if( uiOperation == FLM_DB_REMOVE) { printTableRowStart( bHighlight = !bHighlight); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); fnPrintf( m_pHRequest, "Delete RFL files"); printTableDataEnd(); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); fnPrintf( m_pHRequest, "\n"); printTableDataEnd(); printTableRowEnd(); bMustConfirm = TRUE; } if( uiOperation == FLM_DB_CREATE) { printTableRowStart( bHighlight = !bHighlight); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); fnPrintf( m_pHRequest, "Default Language"); printTableDataEnd(); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); printLanguagePulldown( uiLanguage); printTableDataEnd(); printTableRowEnd(); } if( !bPrintedParms) { printTableRowStart(); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); printTableDataEmpty(); printTableDataEnd(); printTableDataStart( TRUE, JUSTIFY_LEFT, 50); printTableDataEmpty(); printTableDataEnd(); printTableRowEnd(); } printTableEnd(); printTableDataStart( TRUE, JUSTIFY_LEFT, 25); if( bMustConfirm) { fnPrintf( m_pHRequest, "\n"); printButton( "Execute", BT_Button, NULL, NULL, "ONCLICK='confirmAction(document.dbop)'"); } else { fnPrintf( m_pHRequest, "\n"); printButton( "Execute", BT_Button, NULL, NULL, "ONCLICK='doAction(document.dbop)'"); } printTableDataEnd(); printTableRowEnd(); // End the table printTableEnd(); // End the form printEndInputForm(); // Separator fnPrintf( m_pHRequest, "
\n"); // List the session's open databases printSessionDatabaseList( pFlmSession); // Separator fnPrintf( m_pHRequest, "
\n"); // List the global open databases printGlobalDatabaseList(); // Close the document printDocEnd(); Exit: fnEmit(); if( pucPathBuf) { f_free( &pucPathBuf); } return( FERR_OK); ReportErrorExit: printErrorPage( rc); goto Exit; } /**************************************************************************** Desc: Print an option for an open database ****************************************************************************/ void F_DatabasePage::printDbOption( FLMBOOL bOpenPopup, const char * pszMenuOption, const char * pszPage, const char * pszUrlOption1, const char * pszDbKey) { fnPrintf( m_pHRequest, "\n", pszMenuOption); } /**************************************************************************** Desc: ****************************************************************************/ void F_DatabasePage::printSessionDatabaseList( F_Session * pFlmSession) { HFDB hTmpDb; FLMBOOL bHighlight; char szPath[ F_PATH_MAX_SIZE]; F_SessionDb * pSessionDb; FLMBOOL bChecked; FLMUINT uiTransType; FLMBOOL bImplicit = FALSE; FLMBOOL bAllowLock; FLMBOOL bAllowUnlock; char * pszDbKey; char szDbOption [80]; eLockType lockType; // Table printTableStart( "Session Databases", 4); // Table column headers printTableRowStart(); printColumnHeading( "Path", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 25); printColumnHeading( "Transaction", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 25); printColumnHeading( "Lock Type", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 25); printColumnHeading( "Action", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 25); printTableRowEnd(); bChecked = FALSE; bHighlight = TRUE; pSessionDb = NULL; while( RC_OK( pFlmSession->getNextDb( &pSessionDb))) { hTmpDb = pSessionDb->getDbHandle(); printTableRowStart( bHighlight); bHighlight = !bHighlight; // Path printTableDataStart( TRUE, JUSTIFY_LEFT, 25); if( RC_OK( FlmDbGetConfig( hTmpDb, FDB_GET_PATH, &szPath[ 0]))) { fnPrintf( m_pHRequest, "%s", szPath); } else { printTableDataEmpty(); } printTableDataEnd(); // Transaction printTableDataStart( TRUE, JUSTIFY_LEFT, 25); if( RC_BAD( FlmDbGetTransType( hTmpDb, &uiTransType))) { uiTransType = FLM_NO_TRANS; } if( uiTransType == FLM_UPDATE_TRANS || uiTransType == FLM_READ_TRANS) { fnPrintf( m_pHRequest, "%s (", uiTransType == FLM_UPDATE_TRANS ? "Update" : "Read"); fnPrintf( m_pHRequest, "getKey()); fnPrintf( m_pHRequest, ">"); fnPrintf( m_pHRequest, "Commit\n"); fnPrintf( m_pHRequest, ", "); fnPrintf( m_pHRequest, "getKey()); fnPrintf( m_pHRequest, ">"); fnPrintf( m_pHRequest, "Abort\n"); fnPrintf( m_pHRequest, ")"); } else { fnPrintf( m_pHRequest, "None ("); fnPrintf( m_pHRequest, "getKey()); fnPrintf( m_pHRequest, ">"); fnPrintf( m_pHRequest, "Update\n"); fnPrintf( m_pHRequest, ", "); fnPrintf( m_pHRequest, "getKey()); fnPrintf( m_pHRequest, ">"); fnPrintf( m_pHRequest, "Read\n"); fnPrintf( m_pHRequest, ")"); } printTableDataEnd(); // Lock Type (void)FlmDbGetLockType( hTmpDb, &lockType, &bImplicit); printTableDataStart( TRUE, JUSTIFY_LEFT, 25); switch( lockType) { case FLM_LOCK_NONE: fnPrintf( m_pHRequest, "None"); break; case FLM_LOCK_EXCLUSIVE: fnPrintf( m_pHRequest, "Exclusive"); break; case FLM_LOCK_SHARED: fnPrintf( m_pHRequest, "Shared"); break; default: fnPrintf( m_pHRequest, "Unknown"); } if( bImplicit) { fnPrintf( m_pHRequest, " (Implicit)"); } printTableDataEnd(); // Action printTableDataStart( TRUE, JUSTIFY_LEFT, 25); fnPrintf( m_pHRequest, "
\n"); fnPrintf( m_pHRequest, "\n"); fnPrintf( m_pHRequest, "
\n"); printTableDataEnd(); printTableRowEnd(); } // Close the table printTableEnd(); } /**************************************************************************** Desc: ****************************************************************************/ void F_DatabasePage::printGlobalDatabaseList( void) { FLMBOOL bHighlight; FLMUINT uiLoop; FBUCKET * pBucket; FFILE * pFile; // Table printTableStart( "Global Databases", 4); // Table column headers printTableRowStart(); printColumnHeading( "Path", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 25); printColumnHeading( "External Opens", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 25); printColumnHeading( "Internal Opens", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 25); printColumnHeading( "Action", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 25); printTableRowEnd(); f_mutexLock( gv_FlmSysData.hShareMutex); bHighlight = TRUE; pBucket = gv_FlmSysData.pFileHashTbl; for( uiLoop = 0; uiLoop < FILE_HASH_ENTRIES; uiLoop++) { if( (pBucket = &gv_FlmSysData.pFileHashTbl[ uiLoop]) != NULL) { pFile = (FFILE *)pBucket->pFirstInBucket; while( pFile) { // Start a new row printTableRowStart( bHighlight); bHighlight = !bHighlight; // Path printTableDataStart( TRUE, JUSTIFY_LEFT, 25); fnPrintf( m_pHRequest, "%s", pFile->pszDbPath); printTableDataEnd(); // External open count printTableDataStart( TRUE, JUSTIFY_LEFT, 25); fnPrintf( m_pHRequest, "%u", (unsigned)pFile->uiUseCount); printTableDataEnd(); // Internal open count printTableDataStart( TRUE, JUSTIFY_LEFT, 25); fnPrintf( m_pHRequest, "%u", (unsigned)pFile->uiInternalUseCount); printTableDataEnd(); // Action printTableDataStart( TRUE, JUSTIFY_LEFT, 25); fnPrintf( m_pHRequest, "
\n"); fnPrintf( m_pHRequest, "\n"); // End the action selection list fnPrintf( m_pHRequest, "\n"); fnPrintf( m_pHRequest, "
\n"); // End the row printTableRowEnd(); // Get the next FFILE pFile = pFile->pNext; } } } f_mutexUnlock( gv_FlmSysData.hShareMutex); // Close the table printTableEnd(); } /**************************************************************************** Desc: ****************************************************************************/ RCODE F_RecordMgrPage::display( FLMUINT uiNumParams, const char ** ppszParams) { RCODE rc = FERR_OK; char szOperation[ 256]; char szTmp[ 128]; char * pTmp; FLMUINT uiDrn; FLMUINT uiContainer; FLMUINT uiFlags; HFDB hDb = HFDB_NULL; char * pszXmlInRec = NULL; char * pszXmlOutRec = NULL; FlmRecord * pRec = NULL; FlmRecord * pInRec = NULL; F_Session * pFlmSession = m_pFlmSession; F_NameTable * pNameTable = NULL; char szDbKey[ F_SESSION_DB_KEY_LEN]; FLMBOOL bHighlight; FLMBOOL bExecute = FALSE; FLMBOOL bRetrieveSelected = FALSE; FLMBOOL bAddSelected = FALSE; FLMBOOL bUpdateSelected = FALSE; FLMBOOL bDeleteSelected = FALSE; FLMBOOL bReserveDrnSelected = FALSE; F_Pool pool; // Initialize a pool for XML parsing pool.poolInit( 1024); // Check the session if( !pFlmSession) { rc = RC_SET( m_uiSessionRC); goto ReportErrorExit; } // Get the database operation szOperation[ 0] = 0; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "operation", sizeof( szOperation), szOperation))) { pTmp = &szOperation[ 0]; getFormValueByName( "operation", &pTmp, sizeof( szOperation), NULL); } if( szOperation[ 0]) { fcsDecodeHttpString( szOperation); } // Execute szTmp[ 0] = '\0'; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "execute", sizeof( szTmp), szTmp))) { pTmp = &szTmp[ 0]; getFormValueByName( "execute", &pTmp, sizeof( szTmp), NULL); } bExecute = (FLMBOOL)f_atoud( szTmp); // DB handle if( RC_BAD( rc = getDatabaseHandleParam( uiNumParams, ppszParams, pFlmSession, &hDb, szDbKey))) { goto ReportErrorExit; } // Name table if( RC_BAD( rc = pFlmSession->getNameTable( hDb, &pNameTable))) { goto ReportErrorExit; } // Drn szTmp[ 0] = '\0'; uiDrn = 0; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "drn", sizeof( szTmp), szTmp))) { pTmp = &szTmp[ 0]; getFormValueByName( "drn", &pTmp, sizeof( szTmp), NULL); } if( szTmp[ 0]) { uiDrn = f_atoud( szTmp); } // Container szTmp[ 0] = '\0'; uiContainer = 0; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "container", sizeof( szTmp), szTmp))) { pTmp = &szTmp[ 0]; getFormValueByName( "container", &pTmp, sizeof( szTmp), NULL); } if( szTmp[ 0]) { uiContainer = f_atoud( szTmp); } // Flags szTmp[ 0] = '\0'; uiFlags = 0; if( RC_BAD( ExtractParameter( uiNumParams, ppszParams, "flags", sizeof( szTmp), szTmp))) { pTmp = &szTmp[ 0]; getFormValueByName( "flags", &pTmp, sizeof( szTmp), NULL); } if( szTmp[ 0]) { uiFlags = f_atoud( szTmp); } // XML record if( RC_OK( getFormValueByName( "record", &pszXmlInRec, 0, NULL))) { fcsDecodeHttpString( pszXmlInRec); } // if( pszXmlInRec && *pszXmlInRec && hDb != HFDB_NULL) // { // FCS_BUFISTM bufIStream( (FLMBYTE *)pszXmlInRec, f_strlen( pszXmlInRec)); // (void)pFlmSession->getXmlImport()->importDocument( // hDb, pNameTable, &bufIStream, TRUE, &pInRec); // } if( hDb == HFDB_NULL) { rc = RC_SET( FERR_BAD_HDL); goto ReportErrorExit; } // Perform the requested operation if( f_stricmp( szOperation, "none") == 0) { bExecute = FALSE; } else if( f_stricmp( szOperation, "retrieve") == 0) { bRetrieveSelected = TRUE; if( bExecute) { rc = FlmRecordRetrieve( hDb, uiContainer, uiDrn, uiFlags, &pRec, &uiDrn); if( pInRec) { pInRec->Release(); pInRec = NULL; } if( pszXmlInRec) { f_free( &pszXmlInRec); } } } else if( f_stricmp( szOperation, "update") == 0) { bUpdateSelected = TRUE; if( bExecute) { if( !pInRec) { // The parser was unable to create a valid // FLAIM record from the XML data rc = RC_SET( FERR_SYNTAX); } else { rc = FlmRecordModify( hDb, uiContainer, uiDrn, pInRec, FLM_AUTO_TRANS | FLM_NO_TIMEOUT); } } } else if( f_stricmp( szOperation, "add") == 0) { bAddSelected = TRUE; if( bExecute) { if( !pInRec) { // The parser was unable to create a valid // FLAIM record from the XML data rc = RC_SET( FERR_SYNTAX); } else { rc = FlmRecordAdd( hDb, uiContainer, &uiDrn, pInRec, FLM_AUTO_TRANS | FLM_NO_TIMEOUT); } } } else if( f_stricmp( szOperation, "delete") == 0) { bDeleteSelected = TRUE; if( bExecute) { rc = FlmRecordDelete( hDb, uiContainer, uiDrn, 0); if( pInRec) { pInRec->Release(); pInRec = NULL; } } } else if( f_stricmp( szOperation, "reservenextdrn") == 0) { bReserveDrnSelected = TRUE; if( bExecute) { rc = FlmReserveNextDrn( hDb, uiContainer, &uiDrn); } } else if( szOperation[ 0] != '\0') { rc = RC_SET( FERR_ILLEGAL_OP); goto ReportErrorExit; } // Start document printDocStart( "Record Manager", FALSE); // Form fnPrintf( m_pHRequest, "
\n", m_pszURLString); fnPrintf( m_pHRequest, "\n", szDbKey); fnPrintf( m_pHRequest, "\n"); fnPrintf( m_pHRequest, "\n"); // Table if( bExecute) { f_sprintf( (char *)szTmp, "Record Manager (Return Code = 0x%04X, %s)", (unsigned)rc, FlmErrorString( rc)); } else { f_sprintf( (char *)szTmp, "Record Manager"); } printTableStart( (char *)szTmp, 2); // Table column headers printTableRowStart(); printColumnHeading( "Parameter", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 20); printColumnHeading( "Value", JUSTIFY_LEFT, NULL, 1, 1, TRUE, 80); printTableRowEnd(); bHighlight = TRUE; // Operation printTableRowStart( bHighlight); bHighlight = !bHighlight; printTableDataStart( TRUE, JUSTIFY_LEFT); fnPrintf( m_pHRequest, "Operation"); printTableDataEnd(); printTableDataStart( TRUE, JUSTIFY_LEFT); fnPrintf( m_pHRequest, "\n"); printSpaces( 2); printButton( "Execute", BT_Button, NULL, NULL, "onClick=\"setExecute()\""); printTableDataEnd(); printTableRowEnd(); // Flags if( bRetrieveSelected) { printTableRowStart( bHighlight); bHighlight = !bHighlight; printTableDataStart( TRUE, JUSTIFY_LEFT); fnPrintf( m_pHRequest, "Flags"); printTableDataEnd(); printTableDataStart( TRUE, JUSTIFY_LEFT); printRetrievalFlagsPulldown( uiFlags); printTableDataEnd(); printTableRowEnd(); } // DRN printTableRowStart( bHighlight); bHighlight = !bHighlight; printTableDataStart( TRUE, JUSTIFY_LEFT); fnPrintf( m_pHRequest, "DRN"); printTableDataEnd(); printTableDataStart( TRUE, JUSTIFY_LEFT); fnPrintf( m_pHRequest, "\n", (unsigned)uiDrn); printTableDataEnd(); printTableRowEnd(); // Container printTableRowStart( bHighlight); bHighlight = !bHighlight; printTableDataStart( TRUE, JUSTIFY_LEFT); fnPrintf( m_pHRequest, "Container"); printTableDataEnd(); printTableDataStart(); printContainerPulldown( pNameTable, uiContainer); printTableDataEnd(); printTableRowEnd(); // Record // if( pRec || pInRec) // { // if( !pRec) // { // pRec = pInRec; // pInRec = NULL; // } // // if( RC_BAD( rc = pFlmSession->getXmlExport()->exportRecord( // pNameTable, pRec, 0, 3, &pool, &pszXmlOutRec, NULL))) // { // goto Exit; // } // } printTableRowStart( bHighlight); bHighlight = !bHighlight; printTableDataStart( TRUE, JUSTIFY_LEFT); fnPrintf( m_pHRequest, "Record"); printTableDataEnd(); printTableDataStart(); fnPrintf( m_pHRequest, "\n"); printTableDataEnd(); printTableRowEnd(); // Close the table printTableEnd(); // Close the form fnPrintf( m_pHRequest, "
\n"); // Close the document printDocEnd(); Exit: fnEmit(); if( pRec) { pRec->Release(); } if( pInRec) { pInRec->Release(); } if( pszXmlInRec) { f_free( &pszXmlInRec); } return( FERR_OK); ReportErrorExit: printErrorPage( rc); goto Exit; } /**************************************************************************** Desc: Print an option for a selection list. ****************************************************************************/ void F_WebPage::printSelectOption( FLMUINT uiSelectedValue, FLMUINT uiOptionValue, const char * pszOptionName, FLMBOOL bPrintOptionVal) { fnPrintf( m_pHRequest, "", (unsigned)uiOptionValue); printEncodedString( pszOptionName, HTML_ENCODING); if( bPrintOptionVal) { fnPrintf( m_pHRequest, " (%u)", (unsigned)uiOptionValue); } fnPrintf( m_pHRequest, "\n"); } /**************************************************************************** Desc: Print a selection list for containers using the supplied name table. ****************************************************************************/ void F_WebPage::printContainerPulldown( F_NameTable * pNameTable, FLMUINT uiSelectedContainer) { char szNameBuf[ 128]; FLMUINT uiId; FLMUINT uiType; FLMUINT uiNextPos; fnPrintf( m_pHRequest, "\n"); return; } /**************************************************************************** Desc: Print a selection list for fields using the supplied name table. ****************************************************************************/ void F_WebPage::printFieldPulldown( F_NameTable * pNameTable, FLMUINT uiSelectedField ) { FLMUINT uiNextPos; char szNameBuf[ 128]; FLMUINT uiId; FLMUINT uiType; fnPrintf( m_pHRequest, "\n"); } /**************************************************************************** Desc: Print a selection list for indexes using the supplied name table. ****************************************************************************/ void F_WebPage::printIndexPulldown( F_NameTable * pNameTable, FLMUINT uiSelectedIndex, FLMBOOL bIncludeNoIndex, FLMBOOL bIncludeChooseBestIndex, FLMBOOL bPrintSelect, const char * pszExtra) { FLMUINT uiNextPos; char szNameBuf[ 128]; FLMUINT uiId; FLMUINT uiType; fnPrintf( m_pHRequest, "\n"); } /**************************************************************************** Desc: ****************************************************************************/ RCODE F_DatabaseConfigPage::display( FLMUINT uiNumParams, const char ** ppszParams) { RCODE rc = FERR_OK; HFDB hDb; char szDbKey[ F_SESSION_DB_KEY_LEN]; char szTmp[ 128]; FLMBOOL bExecuted = FALSE; FLMBOOL bHighlight; // DB handle if( RC_BAD( rc = getDatabaseHandleParam( uiNumParams, ppszParams, m_pFlmSession, &hDb, szDbKey))) { if( rc == FERR_NOT_FOUND) { rc = RC_SET( FERR_BAD_HDL); } goto Exit; } // Config parameters if( RC_OK( rc)) { f_sprintf( (char *)szTmp, "%u", FDB_RFL_KEEP_FILES); if( RC_OK( ExtractParameter( uiNumParams, ppszParams, szTmp, sizeof( szTmp), szTmp))) { FLMBOOL bFlag = f_atoi( szTmp) ? TRUE : FALSE; rc = FlmDbConfig( hDb, FDB_RFL_KEEP_FILES, (void *)bFlag, NULL); bExecuted = TRUE; } } if( RC_OK( rc)) { f_sprintf( (char *)szTmp, "%u", FDB_AUTO_TURN_OFF_KEEP_RFL); if( RC_OK( ExtractParameter( uiNumParams, ppszParams, szTmp, sizeof( szTmp), szTmp))) { FLMBOOL bFlag = f_atoi( szTmp) ? TRUE : FALSE; rc = FlmDbConfig( hDb, FDB_AUTO_TURN_OFF_KEEP_RFL, (void *)bFlag, NULL); bExecuted = TRUE; } } if( RC_OK( rc)) { f_sprintf( (char *)szTmp, "%u", FDB_KEEP_ABORTED_TRANS_IN_RFL); if( RC_OK( ExtractParameter( uiNumParams, ppszParams, szTmp, sizeof( szTmp), szTmp))) { FLMBOOL bFlag = f_atoi( szTmp) ? TRUE : FALSE; rc = FlmDbConfig( hDb, FDB_KEEP_ABORTED_TRANS_IN_RFL, (void *)bFlag, NULL); bExecuted = TRUE; } } if( RC_OK( rc)) { f_sprintf( (char *)szTmp, "%u", FDB_FILE_EXTEND_SIZE); if( RC_OK( ExtractParameter( uiNumParams, ppszParams, szTmp, sizeof( szTmp), szTmp))) { FLMUINT uiValue = f_atoud( szTmp); rc = FlmDbConfig( hDb, FDB_FILE_EXTEND_SIZE, (void *)uiValue, NULL); bExecuted = TRUE; } } // Document printDocStart( (char *)"Database Configuration", FALSE); // Table if( bExecuted) { f_sprintf( (char *)szTmp, "Database Configuration (Return Code = 0x%04X, %s)", (unsigned)rc, FlmErrorString( rc)); } else { f_sprintf( (char *)szTmp, "Database Configuration"); } printTableStart( (char *)szTmp, 2); // Table column headers printTableRowStart(); printColumnHeading( "Option"); printColumnHeading( "Value"); printTableRowEnd(); bHighlight = FALSE; outputValue( &bHighlight, hDb, szDbKey, FDB_GET_PATH, "Database Path"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_RFL_DIR, "RFL Directory"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_SIZES, "Database Size"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_VERSION, "Version"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_SERIAL_NUMBER, "Serial Number"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_BLKSIZ, "Block Size"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_DEFAULT_LANG, "Default Language"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_TRANS_ID, "Current Transaction ID"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_RFL_FILE_NUM, "RFL File Number"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_RFL_HIGHEST_NU, "RFL Highest Unused File"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_LAST_BACKUP_TRANS_ID, "Last Backup Transaction ID"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_BLOCKS_CHANGED_SINCE_BACKUP, "Blocks Changed Since Last Backup"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_NEXT_INC_BACKUP_SEQ_NUM, "Next Incremental Backup Sequence Number"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_DICT_SEQ_NUM, "Dictionary Sequence Number"); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_FILE_EXTEND_SIZE, "File Extend Size", FDB_FILE_EXTEND_SIZE); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_RFL_KEEP_FLAG, "Keep RFL Files", FDB_RFL_KEEP_FILES); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_KEEP_ABORTED_TRANS_IN_RFL_FLAG, "Keep Aborted Transactions in RFL", FDB_KEEP_ABORTED_TRANS_IN_RFL); outputValue( &bHighlight, hDb, szDbKey, FDB_GET_AUTO_TURN_OFF_KEEP_RFL_FLAG, "Auto Disable of RFL Keep Flag", FDB_AUTO_TURN_OFF_KEEP_RFL); printTableEnd(); printDocEnd(); Exit: fnEmit(); return( FERR_OK); } /**************************************************************************** Desc: ****************************************************************************/ void F_DatabaseConfigPage::outputValue( FLMBOOL * pbHighlight, HFDB hDb, const char * szDbKey, FLMUINT uiType, const char * pszParamDescription, FLMUINT uiConfigVal) { FLMUINT uiValue1; FLMUINT64 ui64Value1; FLMUINT64 ui64Value2; FLMUINT64 ui64Value3; FLMBOOL bFlag; char szValue[ F_PATH_MAX_SIZE]; FLMBYTE ucSerialNum[ F_SERIAL_NUM_SIZE]; FLMUINT uiLoop; RCODE rc = FERR_OK; printTableRowStart( *pbHighlight = !(*pbHighlight)); fnPrintf( m_pHRequest, TD_s, pszParamDescription); switch( (eDbGetConfigType)uiType) { case FDB_GET_DEFAULT_LANG: if( RC_OK( rc = FlmDbGetConfig( hDb, (eDbGetConfigType)uiType, &uiValue1))) { f_languageToStr( uiValue1, (char *)szValue); fnPrintf( m_pHRequest, TD_s, szValue); } break; case FDB_GET_VERSION: case FDB_GET_BLKSIZ: case FDB_GET_TRANS_ID: case FDB_GET_RFL_FILE_NUM: case FDB_GET_RFL_HIGHEST_NU: case FDB_GET_LAST_BACKUP_TRANS_ID: case FDB_GET_BLOCKS_CHANGED_SINCE_BACKUP: case FDB_GET_FILE_EXTEND_SIZE: case FDB_GET_NEXT_INC_BACKUP_SEQ_NUM: case FDB_GET_DICT_SEQ_NUM: if( RC_OK( rc = FlmDbGetConfig( hDb, (eDbGetConfigType)uiType, &uiValue1))) { printTableDataStart(); if( uiConfigVal) { fnPrintf( m_pHRequest, "
\n", m_pszURLString); fnPrintf( m_pHRequest, "\n", szDbKey); fnPrintf( m_pHRequest, "\n", (unsigned)uiConfigVal, (unsigned)uiValue1); printButton( "Submit", BT_Submit); fnPrintf( m_pHRequest, "
\n"); } else { fnPrintf( m_pHRequest, "%u", (unsigned)uiValue1); } printTableDataEnd(); } break; case FDB_GET_SIZES: if( RC_OK( rc = FlmDbGetConfig( hDb, (eDbGetConfigType)uiType, &ui64Value1, &ui64Value2, &ui64Value3))) { printTableDataStart(); printTableStart( NULL, 2); printTableRowStart(); printTableDataStart(); fnPrintf( m_pHRequest, "Database"); printTableDataEnd(); printCommaNum( ui64Value1); printTableRowEnd(); printTableRowStart(); printTableDataStart(); fnPrintf( m_pHRequest, "Rollback"); printTableDataEnd(); printCommaNum( ui64Value2); printTableRowEnd(); printTableRowStart(); printTableDataStart(); fnPrintf( m_pHRequest, "RFL"); printTableDataEnd(); printCommaNum( ui64Value3); printTableRowEnd(); printTableRowStart(); printTableDataStart(); fnPrintf( m_pHRequest, "Total"); printTableDataEnd(); printCommaNum( ui64Value1 + ui64Value2 + ui64Value3); printTableRowEnd(); printTableEnd(); printTableDataEnd(); } break; case FDB_GET_PATH: case FDB_GET_RFL_DIR: if( RC_OK( rc = FlmDbGetConfig( hDb, (eDbGetConfigType)uiType, szValue))) { printTableDataStart(); if( szValue[ 0]) { printEncodedString( szValue, HTML_ENCODING); } else { printTableDataEmpty(); } printTableDataEnd(); } break; case FDB_GET_RFL_KEEP_FLAG: case FDB_GET_AUTO_TURN_OFF_KEEP_RFL_FLAG: case FDB_GET_KEEP_ABORTED_TRANS_IN_RFL_FLAG: if( RC_OK( rc = FlmDbGetConfig( hDb, (eDbGetConfigType)uiType, &bFlag))) { printTableDataStart(); if( uiConfigVal) { fnPrintf( m_pHRequest, "
\n", m_pszURLString); fnPrintf( m_pHRequest, "\n", szDbKey); fnPrintf( m_pHRequest, "\n"); fnPrintf( m_pHRequest, "
\n"); } else { fnPrintf( m_pHRequest, "%s", (char *)(bFlag ? "Yes" : "No")); } printTableDataEnd(); } break; case FDB_GET_SERIAL_NUMBER: if( RC_OK( rc = FlmDbGetConfig( hDb, (eDbGetConfigType)uiType, ucSerialNum))) { printTableDataStart(); for( uiLoop = 0; uiLoop < F_SERIAL_NUM_SIZE; uiLoop++) { if( uiLoop) { fnPrintf( m_pHRequest, " "); } fnPrintf( m_pHRequest, "%02X", (unsigned)ucSerialNum[ uiLoop]); } printTableDataEnd(); } break; default: rc = RC_SET( FERR_INVALID_PARM); } if( RC_BAD( rc)) { printTableDataStart(); fnPrintf( m_pHRequest, "Error %04X", (unsigned)rc); printTableDataEnd(); } printTableRowEnd(); } /**************************************************************************** Desc: Print a selection list for record retrieval flags. ****************************************************************************/ void F_WebPage::printRetrievalFlagsPulldown( FLMUINT uiSelectedFlag) { fnPrintf( m_pHRequest, "\n"); } /**************************************************************************** Desc: Print the setOperation javascript function. ****************************************************************************/ void F_WebPage::printSetOperationScript( void) { fnPrintf( m_pHRequest, "\n" "\n"); } /**************************************************************************** Desc: Print an operation button - this ties to the setOperation script. ****************************************************************************/ void F_WebPage::printOperationButton( const char * pszFormName, const char * pszButtonLabel, const char * pszButtonValue) { fnPrintf( m_pHRequest, "\n", pszButtonValue, pszButtonLabel, pszFormName, pszButtonValue); } /**************************************************************************** Desc: Print the
HTML. ****************************************************************************/ void F_WebPage::printStartCenter( void) { fnPrintf( m_pHRequest, "
"); } /**************************************************************************** Desc: Print the
HTML. ****************************************************************************/ void F_WebPage::printEndCenter( FLMBOOL bPrintCR ) { if (bPrintCR) { fnPrintf( m_pHRequest, "
\n"); } else { fnPrintf( m_pHRequest, ""); } } /**************************************************************************** Desc: Print a selection list of FLAIM language codes ****************************************************************************/ void F_WebPage::printLanguagePulldown( FLMUINT uiSelectedLang) { FLMUINT uiLoop; char szLangCode [32]; fnPrintf( m_pHRequest, "\n"); } /**************************************************************************** Desc: ****************************************************************************/ RCODE F_WebPage::displayLogFileHdr( const char * pszPath) { RCODE rc = FERR_OK; IF_FileHdl * pFileHdl = NULL; FLMBYTE * pucLogHdr = NULL; FLMUINT uiBytesRead = 0; char szTitle[ 128]; if (RC_BAD( rc = gv_FlmSysData.pFileSystem->openFile( pszPath, FLM_IO_RDONLY, &pFileHdl))) { goto Exit; } // Create a temporay buffer to hold the log header if( RC_BAD( rc = f_alloc( LOG_HEADER_SIZE, &pucLogHdr))) { goto Exit; } // Read in the file log header if (RC_BAD( rc = pFileHdl->read( (unsigned)DB_LOG_HEADER_START, (unsigned)LOG_HEADER_SIZE, (void *)pucLogHdr, &uiBytesRead))) { goto Exit; } if (uiBytesRead == LOG_HEADER_SIZE) { f_sprintf( (char *)szTitle, "Log File Header - %s", pszPath); printTableStart( (char *)szTitle, 1, 100); printTableEnd(); printLogHeaders( pucLogHdr, NULL, NULL); } else { rc = RC_SET( FERR_READING_FILE); goto Exit; } Exit: if (pFileHdl) { pFileHdl->Release(); } if (pucLogHdr) { f_free( &pucLogHdr); } return( rc); }