Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

1092 lines
77 KiB
C++

/*
* (c) Copyright Ascensio System SIA 2010-2023
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#include "GraphicFrame.h"
#include "SpTree.h"
#include "../Slide.h"
#include "../SlideLayout.h"
#include "../SlideMaster.h"
#include "../DrawingConverter/ASCOfficeDrawingConverter.h"
#include "../../../OfficeUtils/src/OfficeUtils.h"
#include "../../XlsxFormat/Slicer/SlicerCacheExt.h"
#include "../../XlsxFormat/Timelines/Timeline.h"
#include "../../XlsxFormat/Chart/Chart.h"
#include "../../DocxFormat/VmlDrawing.h"
#include "../../DocxFormat/Drawing/DrawingExt.h"
#include "../../../DesktopEditor/common/Directory.h"
namespace PPTX
{
BYTE binImageWmfChartReplacement[2274] = {
0xd7,0xcd,0xc6,0x9a,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x12,0x88,0x05,0xb0,0x04,0x00,0x00,0x00,0x00,0x5a,0x44,0x01,0x00,0x09,0x00,0x00,0x03,0x71,0x04,0x00,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0c,0x02,0x88,0x05,0x73,0x12,0x05,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x01,0x08,0x00,0x05,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x01,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2e,0x01,0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x04,0x01,0x0d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x26,0x06,0x17,0x00,0x04,0x00,0x05,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xfa,0x02,0x05,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x1e,0x00,0x00,0x00,0x24,0x03,0x0d,0x00,0xe4,0x00,0x64,0x01,0xca,0x01,0x64,0x01,0xca,0x01,0x8e,0x01,0x15,0x01,0x8e,0x01,0x15,0x01,0xfa,0x01,0xc3,0x01,0xfa,0x01,0xc3,0x01,0x23,0x02,0x15,0x01,0x23,0x02,0x15,0x01,0xa7,0x02,0xcf,0x01,0xa7,0x02,0xcf,0x01,0xd1,0x02,0xe4,0x00,0xd1,0x02,0xe4,0x00,0x64,0x01,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x1e,0x00,0x00,0x00,0x24,0x03,0x0d,0x00,0x01,0x03,0xbf,0x01,0x9f,0x02,0x45,0x02,0x07,0x03,0xd1,0x02,0xd2,0x02,0xd1,0x02,0x82,0x02,0x65,0x02,0x32,0x02,0xd1,0x02,0xfd,0x01,0xd1,0x02,0x68,0x02,0x42,0x02,0x06,0x02,0xbf,0x01,0x3b,0x02,0xbf,0x01,0x84,0x02,0x21,0x02,0xcc,0x02,0xbf,0x01,0x01,0x03,0xbf,0x01,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x6a,0x00,0x00,0x00,0x24,0x03,0x33,0x00,0x02,0x04,0xca,0x01,0x02,0x04,0xf4,0x01,0xef,0x03,0xea,0x01,0xdc,0x03,0xe4,0x01,0xc9,0x03,0xe0,0x01,0xb5,0x03,0xdf,0x01,0xa0,0x03,0xe0,0x01,0x7e,0x03,0xee,0x01,0x71,0x03,0xfb,0x01,0x66,0x03,0x0a,0x02,0x5a,0x03,0x30,0x02,0x59,0x03,0x48,0x02,0x5a,0x03,0x61,0x02,0x66,0x03,0x87,0x02,0x71,0x03,0x96,0x02,0x7e,0x03,0xa3,0x02,0xa0,0x03,0xb1,0x02,0xb5,0x03,0xb2,0x02,0xc9,0x03,0xb1,0x02,0xdc,0x03,0xad,0x02,0xef,0x03,0xa7,0x02,0x02,0x04,0x9d,0x02,0x02,0x04,0xc6,0x02,0xef,0x03,0xce,0x02,0xdb,0x03,0xd4,0x02,0xc6,0x03,0xd7,0x02,0xb0,0x03,0xd8,0x02,0xa1,0x03,0xd8,0x02,0x85,0x03,0xd3,0x02,0x6d,0x03,0xc9,0x02,0x57,0x03,0xba,0x02,0x4e,0x03,0xb1,0x02,0x45,0x03,0xa7,0x02,0x38,0x03,0x90,0x02,0x2f,0x03,0x76,0x02,0x2a,0x03,0x59,0x02,0x2a,0x03,0x48,0x02,0x2a,0x03,0x38,0x02,0x2f,0x03,0x1a,0x02,0x38,0x03,0x00,0x02,0x46,0x03,0xe9,0x01,0x4e,0x03,0xdf,0x01,0x58,0x03,0xd6,0x01,0x6e,0x03,0xc8,0x01,0x87,0x03,0xbe,0x01,0xa3,0x03,0xb9,0x01,0xb3,0x03,0xb9,0x01,0xc8,0x03,0xba,0x01,0xdc,0x03,0xbd,0x01,0xef,0x03,0xc2,0x01,0x02,0x04,0xca,0x01,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x7c,0x00,0x00,0x00,0x38,0x05,0x02,0x00,0x2e,0x00,0x0d,0x00,0x3a,0x05,0x3d,0x02,0x3a,0x05,0x53,0x02,0x6c,0x04,0x53,0x02,0x6e,0x04,0x69,0x02,0x7c,0x04,0x8d,0x02,0x88,0x04,0x9a,0x02,0x95,0x04,0xa5,0x02,0xb8,0x04,0xb1,0x02,0xce,0x04,0xb2,0x02,0xe7,0x04,0xb1,0x02,0x00,0x05,0xac,0x02,0x18,0x05,0xa4,0x02,0x30,0x05,0x98,0x02,0x30,0x05,0xc3,0x02,0x18,0x05,0xcc,0x02,0xfe,0x04,0xd3,0x02,0xe5,0x04,0xd7,0x02,0xcb,0x04,0xd8,0x02,0xbb,0x04,0xd8,0x02,0x9e,0x04,0xd3,0x02,0x84,0x04,0xc9,0x02,0x6d,0x04,0xbb,0x02,0x63,0x04,0xb2,0x02,0x5a,0x04,0xa8,0x02,0x4c,0x04,0x92,0x02,0x42,0x04,0x78,0x02,0x3d,0x04,0x5b,0x02,0x3d,0x04,0x4b,0x02,0x3d,0x04,0x3a,0x02,0x42,0x04,0x1c,0x02,0x4b,0x04,0x02,0x02,0x59,0x04,0xeb,0x01,0x61,0x04,0xe0,0x01,0x6b,0x04,0xd7,0x01,0x80,0x04,0xc8,0x01,0x98,0x04,0xbe,0x01,0xb4,0x04,0xb9,0x01,0xc3,0x04,0xb9,0x01,0xd1,0x04,0xb9,0x01,0xe9,0x04,0xbe,0x01,0xff,0x04,0xc7,0x01,0x12,0x05,0xd4,0x01,0x1a,0x05,0xdd,0x01,0x22,0x05,0xe6,0x01,0x2e,0x05,0xfb,0x01,0x39,0x05,0x1f,0x02,0x0e,0x05,0x30,0x02,0x0c,0x05,0x1e,0x02,0x02,0x05,0x01,0x02,0xf9,0x04,0xf5,0x01,0xee,0x04,0xeb,0x01,0xd4,0x04,0xe0,0x01,0xc4,0x04,0xdf,0x01,0xb1,0x04,0xe0,0x01,0x93,0x04,0xea,0x01,0x87,0x04,0xf4,0x01,0x7d,0x04,0x00,0x02,0x70,0x04,0x1d,0x02,0x6d,0x04,0x30,0x02,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x0e,0x00,0x00,0x00,0x24,0x03,0x05,0x00,0x84,0x05,0x55,0x01,0xb1,0x05,0x55,0x01,0xb1,0x05,0xd1,0x02,0x84,0x05,0xd1,0x02,0x84,0x05,0x55,0x01,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x0e,0x00,0x00,0x00,0x24,0x03,0x05,0x00,0x15,0x06,0x93,0x02,0x49,0x06,0x93,0x02,0x49,0x06,0xd1,0x02,0x15,0x06,0xd1,0x02,0x15,0x06,0x93,0x02,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x80,0x00,0x00,0x00,0x24,0x03,0x3e,0x00,0xc1,0x07,0x80,0x01,0xc1,0x07,0xb4,0x01,0xb4,0x07,0xa9,0x01,0x9a,0x07,0x98,0x01,0x8c,0x07,0x92,0x01,0x7e,0x07,0x8d,0x01,0x60,0x07,0x87,0x01,0x50,0x07,0x86,0x01,0x41,0x07,0x87,0x01,0x25,0x07,0x8c,0x01,0x0d,0x07,0x95,0x01,0xf9,0x06,0xa3,0x01,0xf0,0x06,0xad,0x01,0xe8,0x06,0xb7,0x01,0xdc,0x06,0xce,0x01,0xd0,0x06,0xf8,0x01,0xcf,0x06,0x1b,0x02,0xd0,0x06,0x3e,0x02,0xdc,0x06,0x68,0x02,0xe8,0x06,0x7f,0x02,0xf0,0x06,0x89,0x02,0xf9,0x06,0x92,0x02,0x0d,0x07,0xa1,0x02,0x25,0x07,0xaa,0x02,0x41,0x07,0xaf,0x02,0x50,0x07,0xaf,0x02,0x60,0x07,0xaf,0x02,0x7e,0x07,0xa9,0x02,0x8c,0x07,0xa4,0x02,0x9a,0x07,0x9e,0x02,0xb4,0x07,0x8c,0x02,0xc1,0x07,0x81,0x02,0xc1,0x07,0xb5,0x02,0xa7,0x07,0xc5,0x02,0x8a,0x07,0xcf,0x02,0x6d,0x07,0xd7,0x02,0x4d,0x07,0xd8,0x02,0x39,0x07,0xd7,0x02,0x14,0x07,0xd1,0x02,0xf3,0x06,0xc4,0x02,0xd7,0x06,0xb2,0x02,0xcb,0x06,0xa5,0x02,0xbf,0x06,0x98,0x02,0xad,0x06,0x7a,0x02,0xa1,0x06,0x58,0x02,0x9c,0x06,0x31,0x02,0x9b,0x06,0x1b,0x02,0x9c,0x06,0x05,0x02,0xa1,0x06,0xde,0x01,0xad,0x06,0xbc,0x01,0xbf,0x06,0x9e,0x01,0xcb,0x06,0x91,0x01,0xd7,0x06,0x84,0x01,0xf3,0x06,0x71,0x01,0x14,0x07,0x65,0x01,0x39,0x07,0x5e,0x01,0x4d,0x07,0x5e,0x01,0x6d,0x07,0x5f,0x01,0x8b,0x07,0x67,0x01,0x99,0x07,0x6b,0x01,0xb4,0x07,0x78,0x01,0xc1,0x07,0x80,0x01,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x46,0x00,0x00,0x00,0x24,0x03,0x21,0x00,0xef,0x08,0x2c,0x02,0xef,0x08,0xd1,0x02,0xc2,0x08,0xd1,0x02,0xc2,0x08,0x2d,0x02,0xc1,0x08,0x1b,0x02,0xba,0x08,0xfe,0x01,0xb3,0x08,0xf3,0x01,0xab,0x08,0xea,0x01,0x94,0x08,0xe1,0x01,0x86,0x08,0xe0,0x01,0x74,0x08,0xe1,0x01,0x57,0x08,0xec,0x01,0x4c,0x08,0xf7,0x01,0x43,0x08,0x03,0x02,0x38,0x08,0x23,0x02,0x37,0x08,0x36,0x02,0x37,0x08,0xd1,0x02,0x0a,0x08,0xd1,0x02,0x0a,0x08,0x55,0x01,0x37,0x08,0x55,0x01,0x37,0x08,0xea,0x01,0x3f,0x08,0xde,0x01,0x52,0x08,0xcc,0x01,0x5d,0x08,0xc5,0x01,0x68,0x08,0xbf,0x01,0x82,0x08,0xb9,0x01,0x90,0x08,0xb9,0x01,0xa6,0x08,0xba,0x01,0xca,0x08,0xc9,0x01,0xd7,0x08,0xd6,0x01,0xe2,0x08,0xe6,0x01,0xee,0x08,0x11,0x02,0xef,0x08,0x2c,0x02,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x8c,0x00,0x00,0x00,0x38,0x05,0x02,0x00,0x14,0x00,0x2f,0x00,0xc5,0x09,0x47,0x02,0xab,0x09,0x48,0x02,0x86,0x09,0x4e,0x02,0x7a,0x09,0x54,0x02,0x70,0x09,0x5b,0x02,0x66,0x09,0x70,0x02,0x65,0x09,0x7e,0x02,0x66,0x09,0x8a,0x02,0x6d,0x09,0x9d,0x02,0x75,0x09,0xa4,0x02,0x7d,0x09,0xab,0x02,0x92,0x09,0xb2,0x02,0x9f,0x09,0xb2,0x02,0xb2,0x09,0xb1,0x02,0xcf,0x09,0xa4,0x02,0xdb,0x09,0x98,0x02,0xe6,0x09,0x8a,0x02,0xf1,0x09,0x67,0x02,0xf2,0x09,0x51,0x02,0xf2,0x09,0x47,0x02,0x1f,0x0a,0x35,0x02,0x1f,0x0a,0xd1,0x02,0xf2,0x09,0xd1,0x02,0xf2,0x09,0xa7,0x02,0xea,0x09,0xb3,0x02,0xd7,0x09,0xc6,0x02,0xcc,0x09,0xcc,0x02,0xc0,0x09,0xd2,0x02,0xa4,0x09,0xd7,0x02,0x94,0x09,0xd8,0x02,0x7f,0x09,0xd7,0x02,0x5e,0x09,0xcb,0x02,0x51,0x09,0xc1,0x02,0x45,0x09,0xb4,0x02,0x39,0x09,0x94,0x02,0x38,0x09,0x81,0x02,0x39,0x09,0x6b,0x02,0x44,0x09,0x50,0x02,0x4f,0x09,0x42,0x02,0x57,0x09,0x3c,0x02,0x67,0x09,0x31,0x02,0x96,0x09,0x25,0x02,0xb3,0x09,0x24,0x02,0xf2,0x09,0x24,0x02,0xf2,0x09,0x20,0x02,0xf1,0x09,0x11,0x02,0xe7,0x09,0xf9,0x01,0xdd,0x09,0xf0,0x01,0xd3,0x09,0xe8,0x01,0xb6,0x09,0xe0,0x01,0xa4,0x09,0xdf,0x01,0x8d,0x09,0xe0,0x01,0x77,0x09,0xe5,0x01,0x61,0x09,0xeb,0x01,0x4c,0x09,0xf5,0x01,0x4c,0x09,0xcc,0x01,0x64,0x09,0xc3,0x01,0x7c,0x09,0xbe,0x01,0x93,0x09,0xba,0x01,0xa9,0x09,0xb9,0x01,0xc5,0x09,0xba,0x01,0xe8,0x09,0xc5,0x01,0xfa,0x09,0xd0,0x01,0x02,0x0a,0xd8,0x01,0x09,0x0a,0xe0,0x01,0x14,0x0a,0xf3,0x01,0x1e,0x0a,0x17,0x02,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x3a,0x00,0x00,0x00,0x24,0x03,0x1b,0x00,0x1a,0x0b,0xe9,0x01,0x12,0x0b,0xe5,0x01,0x0a,0x0b,0xe3,0x01,0x00,0x0b,0xe1,0x01,0xf6,0x0a,0xe1,0x01,0xe4,0x0a,0xe2,0x01,0xc6,0x0a,0xee,0x01,0xbb,0x0a,0xfa,0x01,0xb2,0x0a,0x07,0x02,0xa8,0x0a,0x2b,0x02,0xa7,0x0a,0x41,0x02,0xa7,0x0a,0xd1,0x02,0x7a,0x0a,0xd1,0x02,0x7a,0x0a,0xbf,0x01,0xa7,0x0a,0xbf,0x01,0xa7,0x0a,0xea,0x01,0xaf,0x0a,0xde,0x01,0xc1,0x0a,0xcc,0x01,0xcc,0x0a,0xc5,0x01,0xd8,0x0a,0xbf,0x01,0xf3,0x0a,0xb9,0x01,0x03,0x0b,0xb9,0x01,0x08,0x0b,0xb9,0x01,0x0d,0x0b,0xba,0x01,0x13,0x0b,0xba,0x01,0x1a,0x0b,0xbb,0x01,0x1a,0x0b,0xe9,0x01,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x07,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x01,0x00,0x3a,0x00,0x00,0x00,0x24,0x03,0x1b,0x00,0x76,0x0b,0x72,0x01,0x76,0x0b,0xbf,0x01,0xd3,0x0b,0xbf,0x01,0xd3,0x0b,0xe2,0x01,0x76,0x0b,0xe2,0x01,0x76,0x0b,0x77,0x02,0x77,0x0b,0x87,0x02,0x7b,0x0b,0x9c,0x02,0x7f,0x0b,0xa2,0x02,0x85,0x0b,0xa6,0x02,0x97,0x0b,0xab,0x02,0xa5,0x0b,0xab,0x02,0xd3,0x0b,0xab,0x02,0xd3,0x0b,0xd1,0x02,0xa5,0x0b,0xd1,0x02,0x8c,0x0b,0xd0,0x02,0x68,0x0b,0xc6,0x02,0x5d,0x0b,0xbe,0x02,0x54,0x0b,0xb3,0x02,0x4a,0x0b,0x8f,0x02,0x49,0x0b,0x77,0x02,0x49,0x0b,0xe2,0x01,0x28,0x0b,0xe2,0x01,0x28,0x0b,0xbf,0x01,0x49,0x0b,0xbf,0x01,0x49,0x0b,0x72,0x01,0x76,0x0b,0x72,0x01,0x04,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x04,0x00,0x00,0x00,0x2d,0x01,0x02,0x00,0x04,0x00,0x00,0x00,0xf0,0x01,0x02,0x00,0x04,0x00,0x00,0x00,0xf0,0x01,0x01,0x00,0x04,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00
};
BYTE binImagePngChartReplacement[6171] = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x04,0x80,0x00,0x00,0x01,0x59,0x08,0x06,0x00,0x00,0x00,0xe0,0xa1,0x54,0x1a,0x00,0x00,0x00,0x01,0x73,0x52,0x47,0x42,0x00,0xae,0xce,0x1c,0xe9,0x00,0x00,0x00,0x04,0x67,0x41,0x4d,0x41,0x00,0x00,0xb1,0x8f,0x0b,0xfc,0x61,0x05,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0xb8,0x8c,0x00,0x00,0xb8,0x8c,0x01,0xcc,0xf6,0xbb,0x2f,0x00,0x00,0x17,0xb0,0x49,0x44,0x41,0x54,0x78,0x5e,0xed,0xd7,0xd1,0xae,0xdc,0xb6,0xb2,0x45,0xd1,0xfc,0xff,0x4f,0xdf,0x0b,0x23,0x30,0xec,0xec,0xb3,0x8a,0x94,0xba,0x49,0x8a,0x92,0xc6,0x00,0xe6,0x8b,0xdd,0x5b,0x55,0x64,0xdc,0x96,0xf3,0x0f,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,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,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,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,0x40,0xf6,0x7f,0x27,0x82,0x51,0xd2,0x9f,0xaf,0x2a,0x00,0x00,0x00,0xe0,0x4b,0xe9,0x7f,0xb8,0xab,0x60,0x94,0xf4,0xe7,0xab,0x0a,0x00,0x00,0x00,0xf8,0x52,0xfa,0x1f,0xee,0x2a,0xae,0xf5,0xa4,0xff,0x26,0xe9,0x2c,0x55,0x00,0x00,0x00,0xc0,0x97,0xd2,0xff,0x70,0x57,0xb1,0x56,0xfa,0x6f,0x70,0xb6,0x5d,0xa5,0x5d,0xab,0x00,0x00,0xe0,0x31,0xd2,0x3f,0x78,0x9f,0x14,0xb0,0xaf,0xf4,0x9d,0xad,0x62,0x9e,0x74,0xdf,0xb3,0xbb,0x52,0xda,0xa7,0x0a,0x00,0x00,0x1e,0x23,0xfd,0x83,0xf7,0x49,0x01,0xfb,0x4a,0xdf,0xd9,0x2a,0xc6,0x4b,0xf7,0x7c,0x45,0xab,0xa5,0x1d,0xaa,0x00,0x00,0xe0,0x31,0xd2,0x3f,0x78,0x9f,0x14,0xb0,0xaf,0xf4,0x9d,0xad,0x62,0x8c,0x74,0xb7,0xbb,0xb4,0x4a,0x9a,0x5d,0x05,0x00,0x00,0x8f,0x91,0xfe,0xc1,0xfb,0xa4,0x80,0x7d,0xa5,0xef,0x6c,0x15,0x9f,0x4b,0xf7,0xb9,0x73,0xb3,0xa5,0x99,0x55,0xf0,0x66,0xe9,0x3b,0x51,0x05,0x00,0xdc,0x40,0x7a,0x89,0x3f,0x29,0x60,0x5f,0xe9,0x3b,0x5b,0xc5,0x67,0xd2,0x5d,0xde,0xa5,0x59,0xd2,0xac,0x2a,0x78,0xb3,0xf4,0x9d,0xa8,0x02,0x00,0x6e,0x20,0xbd,0xc4,0x9f,0x14,0xb0,0xaf,0xf4,0x9d,0xad,0xe2,0xbc,0x74,0x8f,0x77,0x6b,0x86,0x34,0xa7,0x0a,0xde,0x2c,0x7d,0x27,0xaa,0x00,0x80,0x1b,0x48,0x2f,0xf1,0x27,0x05,0xec,0x2b,0x7d,0x67,0xab,0x38,0x2e,0xdd,0xdf,0xdd,0x1b,0x29,0x3d,0xbf,0x0a,0xde,0x2c,0x7d,0x27,0xaa,0x00,0x80,0x1b,0x48,0x2f,0xf1,0x27,0x05,0xec,0x2b,0x7d,0x67,0xab,0x38,0x26,0xdd,0xdd,0x53,0x1a,0x25,0x3d,0xbb,0x0a,0xde,0x2c,0x7d,0x27,0xaa,0x00,0x80,0x1b,0x48,0x2f,0xf1,0x27,0x05,0xec,0x2b,0x7d,0x67,0xab,0x68,0x4b,0x77,0x36,0xa3,0x9e,0xf4,0x33,0xa3,0x1a,0x25,0x3d,0xbb,0x0a,0xde,0x2c,0x7d,0x27,0xaa,0x00,0x80,0x1b,0x48,0x2f,0xf1,0x27,0x05,0xec,0x2b,0x7d,0x67,0xab,0xa8,0xa5,0xfb,0x1a,0xd9,0x37,0xd2,0xf3,0x3e,0x6d,0x94,0xf4,0xec,0x2a,0x78,0xb3,0xf4,0x9d,0xa8,0x02,0x00,0x6e,0x20,0xbd,0xc4,0x5b,0x01,0x8c,0x92,0xfe,0x8e,0xa9,0x22,0x4b,0x77,0xf5,0x6d,0xb3,0xa4,0x59,0x67,0x1a,0x25,0x3d,0xbb,0x0a,0xde,0x2c,0x7d,0x27,0xaa,0x00,0x80,0x1b,0x48,0x2f,0xf1,0x56,0x00,0xa3,0xa4,0xbf,0x63,0xaa,0xf8,0x5f,0xe9,0x9e,0x3e,0x6d,0xb5,0xb4,0x43,0xaf,0x51,0xd2,0xb3,0xab,0xe0,0xcd,0xd2,0x77,0xa2,0x0a,0x00,0xb8,0x81,0xf4,0x12,0x6f,0x05,0x30,0x4a,0xfa,0x3b,0xa6,0x8a,0xff,0x4a,0x77,0x74,0xb6,0x9d,0xa4,0xfd,0x7e,0x36,0x4a,0x7a,0x76,0x15,0xbc,0x59,0xfa,0x4e,0x54,0x01,0x00,0x37,0x90,0x5e,0xe2,0xad,0x00,0x46,0x49,0x7f,0xc7,0x54,0xf1,0x47,0xba,0x9f,0xb3,0xed,0x2a,0xed,0xfa,0xbb,0x51,0xd2,0xb3,0xab,0xe0,0xcd,0xd2,0x77,0xa2,0x0a,0x00,0xb8,0x81,0xf4,0x12,0x6f,0x05,0x30,0x4a,0xfa,0x3b,0xa6,0x8a,0x7f,0xa5,0xbb,0x39,0xd3,0x1d,0xa4,0xbd,0x7f,0x35,0x4a,0x7a,0x76,0x15,0xbc,0x59,0xfa,0x4e,0x54,0x01,0x00,0x37,0x90,0x5e,0xe2,0xad,0x00,0x46,0x49,0x7f,0xc7,0x54,0xf1,0xaf,0x74,0x37,0x47,0xba,0x9b,0x99,0x67,0x48,0xcf,0xae,0x82,0x37,0x4b,0xdf,0x89,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xbc,0x15,0xc0,0x28,0xe9,0xef,0x98,0x2a,0xf2,0xbd,0x1c,0xed,0x8e,0x66,0x9d,0xe1,0xe7,0x73,0x5b,0xc1,0x9b,0xa5,0xef,0x44,0x15,0x00,0x70,0x03,0xe9,0x25,0xde,0x0a,0x60,0x94,0xf4,0x77,0x4c,0x15,0xf9,0x5e,0x8e,0x74,0x67,0x33,0xce,0xf1,0xf7,0x33,0x7b,0xc1,0x9b,0xa5,0xef,0x44,0x15,0x00,0x70,0x03,0xe9,0x25,0xde,0x0a,0x60,0x94,0xf4,0x77,0x4c,0xd5,0xdb,0xa5,0x3b,0x39,0xd2,0x53,0x8c,0x3c,0xcb,0xcf,0x3b,0x6a,0x05,0x6f,0x96,0xbe,0x13,0x55,0x00,0xc0,0x0d,0xa4,0x97,0x78,0x2b,0x80,0x51,0xd2,0xdf,0x31,0x55,0x6f,0x97,0xee,0xa4,0x17,0x59,0xba,0xab,0x2a,0x78,0xb3,0xf4,0x9d,0xa8,0x02,0x00,0x6e,0x20,0xbd,0xc4,0x5b,0xc1,0x55,0xfc,0x59,0xfc,0xe3,0xe7,0x5d,0xfc,0xdd,0x9d,0xa4,0xfd,0xab,0xde,0x2c,0xdd,0x47,0x2f,0x6a,0xe9,0xbe,0xaa,0x46,0x99,0xf5,0x5c,0xf8,0xed,0xe7,0x9f,0xb1,0x11,0x7f,0xce,0xd2,0x33,0xab,0x00,0x80,0x1b,0x48,0x2f,0xf1,0x56,0xb0,0x52,0xfa,0x33,0x78,0xb6,0xa7,0x48,0x67,0xeb,0xb5,0xbb,0xb4,0x73,0xd5,0x5b,0xa5,0xbb,0x38,0x12,0xb5,0x74,0x5f,0x55,0xdf,0x48,0xcf,0x6b,0xf5,0x16,0xe9,0xec,0xad,0xa8,0xa5,0xfb,0x6a,0x75,0x56,0x7a,0x46,0x15,0x00,0x70,0x03,0xe9,0x25,0xde,0xea,0x2d,0xd2,0xd9,0x7b,0xed,0x26,0xed,0xd8,0xeb,0x6a,0x69,0xa7,0x91,0xdd,0x49,0xda,0xff,0x9b,0x76,0x94,0xf6,0xac,0x7a,0xab,0x74,0x17,0xbd,0x68,0x4b,0x77,0x56,0x75,0x56,0x7a,0xc6,0x27,0x3d,0x41,0x3a,0xd7,0xa8,0x76,0x96,0xf6,0xad,0x3a,0x2b,0x3d,0xe3,0x4c,0x3f,0xa5,0xcf,0xec,0x16,0x00,0x30,0x50,0x7a,0xd9,0xb6,0x7a,0x93,0x74,0xfe,0x5e,0x3b,0x49,0xfb,0xf5,0xba,0x42,0xda,0x63,0x76,0xbb,0x4a,0xbb,0xce,0x68,0x17,0x69,0xb7,0xaa,0xb7,0x4a,0x77,0xd1,0x8b,0xb6,0x74,0x67,0x55,0x47,0xa4,0x9f,0x1b,0xd9,0xee,0xd2,0xce,0xab,0xdb,0x49,0xda,0xaf,0xea,0x88,0xf4,0x73,0x9f,0xf6,0x53,0xfa,0xcc,0x6e,0x01,0x00,0x03,0xa5,0x97,0x6d,0xab,0xb7,0x49,0x77,0xd0,0x6b,0x07,0x69,0xaf,0x5e,0x2b,0xa5,0xf9,0x57,0xb4,0x83,0xb4,0xd7,0xaa,0xae,0x96,0x76,0xaa,0x7a,0xa3,0x74,0x0f,0xbd,0xe8,0x4b,0xf7,0x56,0xd5,0x93,0x7e,0x66,0x66,0x3b,0x49,0xfb,0x5d,0xdd,0x0e,0xd2,0x5e,0x55,0x3d,0xe9,0x67,0xbe,0xe9,0xa7,0xf4,0x99,0xdd,0x02,0x00,0x06,0x4a,0x2f,0xdb,0x56,0x6f,0x94,0xee,0xa1,0xd7,0x95,0xd2,0x3e,0xbd,0x56,0x4a,0xf3,0xaf,0xee,0x2a,0x69,0x97,0x2b,0xba,0x4a,0xda,0xa5,0xea,0x8d,0xd2,0x3d,0xf4,0xa2,0x2f,0xdd,0x5b,0x55,0x4b,0xfa,0xfc,0x8a,0xae,0x94,0xf6,0xd9,0xad,0xab,0xa5,0x9d,0xaa,0x5a,0xd2,0xe7,0xbf,0xed,0xa7,0xf4,0x99,0xdd,0x02,0x00,0x06,0x4a,0x2f,0xdb,0x56,0x6f,0x94,0xee,0xa1,0xd7,0x55,0xd2,0x2e,0x47,0x5a,0x25,0xcd,0xde,0xa1,0x2b,0xa4,0x3d,0xae,0x6e,0xb5,0xb4,0x43,0xd5,0x1b,0xa5,0x7b,0x68,0xc5,0x31,0xe9,0xee,0xaa,0x2a,0xe9,0xb3,0x2b,0xbb,0x4a,0xda,0x65,0xc7,0xae,0x94,0xf6,0xa9,0xaa,0xa4,0xcf,0x8e,0xe8,0xa7,0xf4,0x99,0xdd,0x02,0x00,0x06,0x4a,0x2f,0xdb,0x56,0x6f,0x95,0xee,0xa2,0xd7,0x15,0xd2,0x1e,0xbd,0x56,0x49,0xb3,0x77,0x69,0xb5,0xb4,0xc3,0x2e,0xad,0x94,0xe6,0x57,0xbd,0x4d,0xba,0x83,0x5e,0x1c,0x93,0xee,0xae,0x2a,0x49,0x9f,0xbb,0xa2,0x2b,0xa4,0x3d,0x76,0xed,0x2a,0x69,0x97,0xaa,0x24,0x7d,0x6e,0x54,0x3f,0xa5,0xcf,0xec,0x16,0x00,0x30,0x50,0x7a,0xd9,0xb6,0x7a,0xb3,0x74,0x1f,0xbd,0x56,0x4a,0xf3,0x7b,0xad,0x90,0xe6,0xee,0xd6,0x2a,0x69,0xf6,0x8e,0xad,0x92,0x66,0x57,0xbd,0x4d,0xba,0x83,0x5e,0x1c,0x93,0xee,0xae,0xea,0xa7,0xf4,0x99,0xab,0xba,0x42,0xda,0x63,0xe7,0xae,0x90,0xf6,0xa8,0xfa,0x29,0x7d,0x66,0x64,0x3f,0xa5,0xcf,0xec,0x16,0x00,0x30,0x50,0x7a,0xd9,0xb6,0x7a,0xbb,0x74,0x27,0xbd,0x56,0x48,0x73,0x7b,0xad,0x90,0xe6,0xee,0xd8,0x0a,0x69,0xee,0xce,0xad,0x90,0xe6,0x56,0xbd,0x49,0x3a,0xff,0x91,0x38,0x26,0xdd,0x5d,0xd5,0x6f,0xe9,0xf7,0x76,0x68,0xb5,0xb4,0xc3,0xee,0xad,0x96,0x76,0xa8,0xfa,0x2d,0xfd,0xde,0x8c,0x7e,0x4a,0x9f,0xd9,0x2d,0x00,0x60,0xa0,0xf4,0xb2,0x6d,0xf5,0x76,0xe9,0x4e,0x7a,0xcd,0x96,0x66,0x1e,0x69,0xa6,0x34,0xef,0x9b,0x8e,0x4a,0x3f,0x7b,0xa4,0x99,0xd2,0xbc,0x6f,0x3a,0x22,0xfd,0xdc,0x27,0xcd,0x96,0x66,0x56,0xbd,0x49,0x3a,0x7f,0x2f,0x8e,0x4b,0xf7,0x57,0xf5,0x5b,0xfa,0xbd,0x5e,0x3d,0xe9,0x67,0x3e,0x69,0xa5,0x34,0xff,0x68,0x47,0xa5,0x9f,0xfd,0xb6,0x95,0xd2,0xfc,0xaa,0xdf,0xd2,0xef,0xf5,0x6a,0x49,0x9f,0xff,0xd5,0x59,0xe9,0x19,0x55,0x00,0xc0,0x0d,0xa4,0x97,0x78,0x2b,0xf2,0xbd,0xf4,0x9a,0x29,0xcd,0xeb,0x35,0x53,0x9a,0xf7,0x69,0x23,0xa4,0xe7,0xfe,0x6c,0xa6,0x34,0xef,0x6c,0x9f,0x4a,0xcf,0x3a,0xdb,0x4c,0x69,0x5e,0xd5,0x9b,0xa4,0xf3,0xf7,0xe2,0xb8,0x74,0x7f,0x55,0xbf,0xa4,0x5f,0x6f,0xf5,0x89,0xf4,0x9c,0x33,0xad,0x92,0x66,0xa7,0x46,0x4a,0xcf,0xff,0xa4,0x55,0xd2,0xec,0xaa,0x5f,0xd2,0xaf,0xb7,0xfa,0xc4,0xa7,0x3f,0xfb,0xf7,0xdc,0x5e,0x00,0xc0,0x0d,0xa4,0x97,0x78,0x2b,0xfe,0x95,0xee,0xa6,0xd7,0x0c,0x69,0x4e,0xaf,0x99,0xd2,0xbc,0xb3,0xad,0xb0,0x72,0xe6,0xcf,0x59,0x47,0x1a,0x2d,0xcd,0x38,0xd3,0x2c,0x69,0x56,0xd5,0x9b,0xa4,0xf3,0xf7,0xe2,0xb8,0x74,0x7f,0x23,0x1a,0x21,0x3d,0xf7,0x68,0x2b,0xa4,0xb9,0x7f,0x37,0x5b,0x9a,0x79,0xb4,0x55,0xd2,0xec,0x11,0x5d,0x21,0xed,0x51,0x05,0x00,0xdc,0x40,0x7a,0x89,0xb7,0xe2,0x8f,0x74,0x3f,0xbd,0x46,0x4a,0xcf,0xef,0x35,0x5b,0x9a,0x79,0xa4,0xab,0xcc,0x9e,0xff,0xf7,0x19,0x8f,0x36,0x53,0x9a,0x77,0xa4,0x59,0xd2,0xac,0xaa,0x37,0x49,0xe7,0x6f,0xc5,0x39,0xe9,0x0e,0x3f,0x6d,0x86,0x34,0xe7,0x48,0x2b,0x5c,0x35,0xf7,0xa7,0xb4,0xc7,0x91,0x56,0x48,0x73,0x3f,0xed,0x6a,0x69,0xa7,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xbc,0x15,0x7f,0xa4,0xfb,0xe9,0x35,0x4a,0x7a,0xf6,0x91,0x66,0x4a,0xf3,0x8e,0x76,0xa5,0x99,0xf3,0x7f,0x9e,0xb3,0xd7,0x2a,0x69,0x76,0xab,0x59,0xd2,0xac,0xaa,0x37,0x49,0xe7,0x6f,0xc5,0x39,0xe9,0x0e,0x3f,0x69,0xa6,0x34,0xaf,0xd7,0x0a,0xab,0xe7,0xb5,0xfc,0xbd,0xcb,0xd1,0x56,0x48,0x73,0x3f,0x69,0x07,0x69,0xaf,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xbc,0x15,0xff,0x95,0xee,0xa8,0xd7,0x08,0xe9,0xb9,0xbd,0x66,0x4b,0x33,0x8f,0xf4,0x54,0xe9,0xac,0xad,0x56,0x4b,0x3b,0xb4,0x9a,0x21,0xcd,0xa9,0x7a,0x93,0x74,0xfe,0x56,0x9c,0x93,0xee,0xf0,0x6c,0xb3,0xa5,0x99,0x47,0x7a,0x9b,0x74,0x07,0xad,0x56,0x48,0x73,0xcf,0xb6,0x8b,0xb4,0x5b,0x15,0x00,0x70,0x03,0xe9,0x25,0xfe,0x84,0x56,0x4a,0xf3,0x7b,0x7d,0x23,0x3d,0xaf,0xd7,0x6c,0x69,0xe6,0x91,0x9e,0x2a,0x9d,0xb5,0xd5,0x55,0xd2,0x2e,0x55,0x33,0xa4,0x39,0x55,0x6f,0x92,0xce,0x5f,0xc5,0x79,0xe9,0x1e,0xcf,0xb4,0x4a,0x9a,0xdd,0xeb,0x8d,0xd2,0x3d,0xb4,0x9a,0x2d,0xcd,0x3c,0xd3,0x4e,0xd2,0x7e,0x55,0x00,0xc0,0x0d,0xa4,0x97,0xf8,0x13,0x5a,0x2d,0xed,0xd0,0xeb,0x13,0xe9,0x39,0x47,0x9a,0x2d,0xcd,0xec,0xf5,0x54,0xe9,0xac,0xad,0xae,0x96,0x76,0x4a,0xcd,0x90,0xe6,0x54,0xbd,0x49,0x3a,0x7f,0x15,0xe7,0xa5,0x7b,0x3c,0xd3,0x4a,0x69,0x7e,0xab,0xb7,0x4a,0x77,0x51,0x35,0x5b,0x9a,0x79,0xa6,0x9d,0xa4,0xfd,0xaa,0x00,0x80,0x1b,0x48,0x2f,0xf1,0x27,0xb4,0x5a,0xda,0xa1,0xd7,0x59,0xe9,0x19,0x47,0x9a,0x2d,0xcd,0xec,0xf5,0x54,0xe9,0xac,0xad,0x76,0x90,0xf6,0xaa,0x1a,0x2d,0xcd,0xa8,0x7a,0x93,0x74,0xfe,0x2a,0xce,0x4b,0xf7,0x78,0xb4,0x2b,0xa4,0x3d,0xaa,0xde,0x2a,0xdd,0x45,0xab,0x99,0xd2,0xbc,0xa3,0xed,0x26,0xed,0x58,0x05,0x00,0xdc,0x40,0x7a,0x89,0x3f,0xa1,0x2b,0xa4,0x3d,0x7a,0x9d,0x91,0x7e,0xbe,0xd7,0x0a,0x69,0x6e,0xab,0x27,0x4b,0xe7,0x6d,0xb5,0x8b,0xb4,0x5b,0x6a,0xb4,0x34,0xa3,0xea,0x2d,0xd2,0xd9,0x5b,0x71,0x5e,0xba,0xc7,0x23,0x5d,0x25,0xed,0xd2,0xea,0xad,0xd2,0x5d,0x54,0xcd,0x94,0xe6,0x1d,0x69,0x47,0x69,0xcf,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xfc,0x09,0x5d,0x25,0xed,0xd2,0xeb,0x88,0xf4,0x73,0xbd,0x56,0x49,0xb3,0xab,0x9e,0x2e,0x9d,0xb9,0xd5,0x2e,0xd2,0x6e,0x55,0x23,0xa5,0xe7,0x57,0xbd,0x45,0x3a,0x7b,0x2b,0xce,0x4b,0xf7,0x78,0xa4,0xab,0xa4,0x5d,0x5a,0xbd,0x55,0xba,0x8b,0xaa,0x99,0xd2,0xbc,0x23,0xed,0x28,0xed,0x59,0x05,0x00,0xdc,0x40,0x7a,0x89,0x3f,0xa1,0x2b,0xa5,0x7d,0x7a,0xb5,0xa4,0xcf,0x1f,0x69,0x85,0x34,0xb7,0xd5,0xd3,0xa5,0x33,0x57,0xed,0x24,0xed,0x57,0x35,0x52,0x7a,0x7e,0xd5,0x5b,0xa4,0xb3,0xb7,0xe2,0xbc,0x74,0x8f,0x47,0xba,0x52,0xda,0xa7,0xea,0xcd,0xd2,0x7d,0x54,0xcd,0x92,0x66,0x1d,0x69,0x47,0x69,0xcf,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xfc,0x09,0x5d,0x29,0xed,0xd3,0xab,0x92,0x3e,0x7b,0xa4,0x55,0xd2,0xec,0x56,0x4f,0x96,0xce,0xdb,0x6a,0x37,0x69,0xc7,0xd4,0x48,0xe9,0xf9,0x55,0x6f,0x91,0xce,0xde,0x8a,0xf3,0xd2,0x3d,0xf6,0xba,0x5a,0xda,0xa9,0xea,0xcd,0xd2,0x7d,0x54,0xcd,0x92,0x66,0xf5,0xda,0x55,0xda,0xb5,0x0a,0x00,0xb8,0x81,0xf4,0x12,0x7f,0x42,0x57,0x4b,0x3b,0xf5,0x4a,0xd2,0xe7,0x7a,0xad,0x94,0xe6,0x57,0x3d,0x5d,0x3a,0x73,0xd5,0x8e,0xd2,0x9e,0x55,0xa3,0xa4,0x67,0x57,0xbd,0x45,0x3a,0x7b,0x2b,0xce,0x4b,0xf7,0xd8,0xeb,0x6a,0x69,0xa7,0xaa,0x37,0x4b,0xf7,0x51,0x35,0x4b,0x9a,0xd5,0x6b,0x57,0x69,0xd7,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xfc,0x09,0xed,0x20,0xed,0xd5,0xeb,0x6f,0xe9,0xf7,0x7b,0xad,0x94,0xe6,0xb7,0x7a,0xba,0x74,0xe6,0xaa,0x1d,0xa5,0x3d,0xab,0x46,0x49,0xcf,0xae,0x7a,0x83,0x74,0xee,0x5e,0x9c,0x97,0xee,0xb1,0xd5,0x0e,0xd2,0x5e,0x55,0x6f,0x96,0xee,0xa3,0x6a,0x96,0x34,0xab,0xd7,0xae,0xd2,0xae,0x55,0x00,0xc0,0x0d,0xa4,0x97,0xf8,0x13,0xda,0x45,0xda,0xad,0xd7,0x2f,0xe9,0xd7,0x8f,0xb4,0x52,0x9a,0xdf,0xea,0xc9,0xd2,0x79,0xab,0x76,0x95,0x76,0xad,0x1a,0x25,0x3d,0xbb,0xea,0x2d,0xd2,0xd9,0x5b,0x71,0x5e,0xba,0xc7,0x56,0x3b,0x48,0x7b,0x55,0xbd,0x59,0xba,0x8f,0xaa,0x59,0xd2,0xac,0x56,0x3b,0x4b,0xfb,0x56,0x01,0x00,0x37,0x90,0x5e,0xe2,0xad,0x38,0x27,0xdd,0xe1,0xac,0x56,0x4b,0x3b,0x54,0x3d,0x5d,0x3a,0x73,0xd5,0xce,0xd2,0xbe,0xa9,0x51,0xd2,0xb3,0xab,0xde,0x22,0x9d,0xbd,0x15,0xe7,0xa5,0x7b,0xac,0xda,0x45,0xda,0xad,0xea,0xcd,0xd2,0x7d,0x54,0xcd,0x92,0x66,0xb5,0xda,0x59,0xda,0xb7,0x0a,0x00,0xb8,0x81,0xf4,0x12,0x6f,0xc5,0x79,0xe9,0x1e,0x47,0x77,0x85,0xb4,0x47,0xd5,0xd3,0xa5,0x33,0x57,0xed,0x2c,0xed,0x9b,0x1a,0x25,0x3d,0xbb,0xea,0x2d,0xd2,0xd9,0x5b,0x71,0x5e,0xba,0xc7,0xaa,0x5d,0xa4,0xdd,0xaa,0xee,0x20,0xed,0xbd,0xba,0x59,0xd2,0xac,0x56,0x3b,0x4b,0xfb,0x56,0x01,0x00,0x37,0x90,0x5e,0xe2,0xad,0xf8,0x4c,0xba,0xcb,0x91,0x5d,0x21,0xed,0x51,0xf5,0x74,0xe9,0xcc,0x55,0x3b,0x4b,0xfb,0xa6,0x46,0x49,0xcf,0xae,0x7a,0x8b,0x74,0xf6,0x56,0x9c,0x97,0xee,0xb1,0x6a,0x17,0x69,0xb7,0xaa,0x1d,0xa5,0x3d,0xaf,0x6e,0x96,0x34,0xab,0x6a,0x77,0x69,0xe7,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xbc,0x15,0x9f,0x4b,0xf7,0x39,0xa2,0xab,0xa4,0x5d,0x52,0x6f,0x90,0xce,0xfd,0xe4,0x46,0x49,0xcf,0xae,0x7a,0x8b,0x74,0xf6,0x56,0x9c,0x97,0xee,0xb1,0x6a,0x17,0x69,0xb7,0xaa,0x1d,0xa4,0xbd,0x76,0x6b,0x96,0x34,0xab,0x6a,0x77,0x69,0xe7,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xbc,0x15,0x9f,0x4b,0xf7,0xf9,0x6d,0x57,0x4a,0xfb,0xa4,0xde,0x20,0x9d,0xfb,0xc9,0x8d,0x92,0x9e,0x5d,0xf5,0x16,0xe9,0xec,0xad,0x38,0x2f,0xdd,0x63,0xd5,0x2e,0xd2,0x6e,0x55,0x57,0x48,0x7b,0xec,0xde,0x2c,0x69,0x56,0xd5,0xee,0xd2,0xce,0x55,0x00,0xc0,0x0d,0xa4,0x97,0x78,0x2b,0xbe,0x93,0xee,0xf4,0xd3,0xae,0x94,0xf6,0xa9,0x7a,0x83,0x74,0xee,0x27,0x37,0x4a,0x7a,0x76,0xd5,0x9b,0xa4,0xf3,0x57,0x71,0x5e,0xba,0xc7,0xaa,0x5d,0xa4,0xdd,0xaa,0x56,0x4a,0xf3,0xef,0xd2,0x2c,0x69,0x56,0xd5,0xee,0xd2,0xce,0x55,0x00,0xc0,0x0d,0xa4,0x97,0x78,0x2b,0xbe,0x97,0xee,0xf5,0x93,0xae,0x94,0xf6,0xa9,0x7a,0xba,0x74,0xe6,0xa7,0x37,0x4a,0x7a,0x76,0xd5,0x9b,0xa4,0xf3,0x57,0x71,0x5e,0xba,0xc7,0xaa,0x5d,0xa4,0xdd,0xaa,0x56,0x48,0x73,0xef,0xd6,0x2c,0x69,0x56,0xd5,0xee,0xd2,0xce,0x55,0x00,0xc0,0x0d,0xa4,0x97,0x78,0x2b,0xc6,0x48,0x77,0x7b,0xa6,0xab,0xa5,0x9d,0xaa,0x9e,0x2e,0x9d,0xf9,0xe9,0x8d,0x92,0x9e,0x5d,0xf5,0x26,0xe9,0xfc,0x55,0x9c,0x97,0xee,0xb1,0x6a,0x17,0x69,0xb7,0xaa,0xd9,0xd2,0xcc,0x3b,0x36,0x4b,0x9a,0x55,0xb5,0xbb,0xb4,0x73,0x15,0x00,0x70,0x03,0xe9,0x25,0xde,0x8a,0x31,0xd2,0xdd,0x1e,0x6d,0x07,0x69,0xaf,0xaa,0xa7,0x4b,0x67,0x7e,0x7a,0xa3,0xa4,0x67,0x57,0xbd,0x49,0x3a,0x7f,0x2b,0xce,0x49,0x77,0x58,0xb5,0x8b,0xb4,0x5b,0xd5,0x4c,0x69,0xde,0x5d,0x9b,0x25,0xcd,0xaa,0xda,0x5d,0xda,0xb9,0x0a,0x00,0xb8,0x81,0xf4,0x12,0x6f,0xc5,0x18,0xe9,0x6e,0x8f,0xb4,0x8b,0xb4,0x5b,0xd5,0xd3,0xa5,0x33,0x3f,0xbd,0x51,0xd2,0xb3,0xab,0xde,0x24,0x9d,0xbf,0x15,0xe7,0xa4,0x3b,0xac,0xda,0x45,0xda,0xad,0x6a,0xa6,0x34,0x6f,0x54,0x23,0xa4,0xe7,0x56,0xcd,0x92,0x66,0x55,0xed,0x2e,0xed,0x5c,0x05,0x00,0xdc,0x40,0x7a,0x89,0xb7,0xe2,0x7b,0xe9,0x5e,0xcf,0xb4,0x83,0xb4,0x57,0xd5,0xd3,0xa5,0x33,0x3f,0xbd,0x51,0xd2,0xb3,0xab,0xde,0x24,0x9d,0xbf,0x15,0xe7,0xa4,0x3b,0xac,0xda,0x45,0xda,0xad,0x6a,0x96,0x34,0xeb,0x9b,0x66,0x48,0x73,0xaa,0x66,0x49,0xb3,0xaa,0x76,0x97,0x76,0xae,0x02,0x00,0x6e,0x20,0xbd,0xc4,0x5b,0xf1,0x9d,0x74,0xa7,0x9f,0x74,0xb5,0xb4,0x53,0xd5,0xd3,0xa5,0x33,0x3f,0xbd,0x51,0xd2,0xb3,0xab,0xde,0x24,0x9d,0xbf,0x17,0xc7,0xa5,0xfb,0xab,0xda,0x45,0xda,0xad,0x6a,0x86,0x34,0xe7,0x4c,0xab,0xa4,0xd9,0x55,0xb3,0xa4,0x59,0x55,0xbb,0x4b,0x3b,0x57,0x01,0x00,0x37,0x90,0x5e,0xe2,0xad,0xf8,0x4e,0xba,0xd3,0x4f,0xbb,0x52,0xda,0xa7,0xea,0xe9,0xd2,0x99,0xab,0xf8,0xaf,0x74,0x47,0x55,0x6f,0x92,0xce,0xdf,0x8b,0xe3,0xd2,0xfd,0x55,0xed,0x22,0xed,0x56,0x35,0x43,0x9a,0xd3,0xeb,0x0a,0x69,0x8f,0xaa,0x59,0xd2,0xac,0xaa,0xdd,0xa5,0x9d,0xab,0x00,0x80,0x1b,0x48,0x2f,0xf1,0x56,0x7c,0x2e,0xdd,0xe7,0x37,0x5d,0x29,0xed,0x53,0xf5,0x74,0xe9,0xcc,0xad,0xf8,0x23,0xdd,0x4f,0xd5,0x9b,0xa4,0xf3,0xf7,0xe2,0xb8,0x74,0x7f,0x55,0xbb,0x48,0xbb,0x55,0xcd,0x90,0xe6,0xb4,0xba,0x4a,0xda,0xa5,0x6a,0x96,0x34,0xab,0x6a,0x77,0x69,0xe7,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xbc,0x15,0x9f,0x49,0x77,0x39,0xa2,0x2b,0xa5,0x7d,0x52,0x4f,0x97,0xce,0xdc,0x8a,0x3f,0xd2,0xfd,0x54,0xbd,0x4d,0xba,0x83,0x5e,0x1c,0x93,0xee,0xae,0x6a,0x17,0x69,0xb7,0xaa,0xd1,0xd2,0x8c,0xaa,0xab,0xa5,0x9d,0xaa,0x66,0x49,0xb3,0xaa,0x76,0x97,0x76,0xae,0x02,0x00,0x6e,0x20,0xbd,0xc4,0x5b,0x71,0x5e,0xba,0xc7,0x91,0x5d,0x25,0xed,0x92,0x7a,0x83,0x74,0xee,0x2a,0xfe,0x48,0xf7,0x53,0xf5,0x36,0xe9,0x0e,0x7a,0x71,0x4c,0xba,0xbb,0xaa,0x5d,0xa4,0xdd,0xaa,0x46,0x4b,0x33,0xaa,0xae,0x96,0x76,0xaa,0x9a,0x25,0xcd,0xaa,0xda,0x5d,0xda,0xb9,0x0a,0x00,0xb8,0x81,0xf4,0x12,0x6f,0xc5,0x79,0xe9,0x1e,0x47,0x77,0x85,0xb4,0x47,0xd5,0xd3,0xa5,0x33,0x57,0xf1,0x47,0xba,0x9f,0xaa,0xb7,0x49,0x77,0xd0,0x8b,0x63,0xd2,0xdd,0x55,0xed,0x22,0xed,0x56,0x35,0x52,0x7a,0x7e,0xab,0xab,0xa5,0x9d,0xaa,0x66,0x49,0xb3,0xaa,0x76,0x97,0x76,0xae,0x02,0x00,0x6e,0x20,0xbd,0xc4,0x5b,0x71,0x4e,0xba,0xc3,0x5e,0xbf,0xa4,0x5f,0x6f,0x75,0x85,0xb4,0x47,0xd5,0xd3,0xa5,0x33,0x57,0xf1,0x47,0xba,0x9f,0xaa,0x37,0x4a,0xf7,0xd0,0x8a,0x63,0xd2,0xdd,0x55,0xed,0x22,0xed,0x56,0x35,0x52,0x7a,0x7e,0xd5,0x0e,0xd2,0x5e,0x55,0xb3,0xa4,0x59,0x55,0xbb,0x4b,0x3b,0x57,0x01,0x00,0x37,0x90,0x5e,0xe2,0xad,0x38,0x2e,0xdd,0x5f,0xaf,0xbf,0xa5,0xdf,0x6f,0xb5,0x5a,0xda,0xa1,0xea,0xe9,0xd2,0x99,0x5b,0xf1,0xaf,0x74,0x37,0x55,0x6f,0x94,0xee,0xa1,0x17,0x7d,0xe9,0xde,0xaa,0x76,0x91,0x76,0xab,0x1a,0x25,0x3d,0xbb,0xd5,0x0e,0xd2,0x5e,0x55,0xb3,0xa4,0x59,0x55,0xbb,0x4b,0x3b,0x57,0x01,0x00,0x37,0x90,0x5e,0xe2,0xad,0x38,0x26,0xdd,0x5d,0xaf,0x24,0x7d,0xae,0xd5,0x4a,0x69,0x7e,0xab,0x27,0x4b,0xe7,0x6d,0xc5,0xbf,0xd2,0xdd,0x54,0xbd,0x51,0xba,0x87,0x5e,0xf4,0xa5,0x7b,0xab,0xda,0x45,0xda,0xad,0x6a,0x94,0xf4,0xec,0xaa,0x5d,0xa4,0xdd,0xaa,0x66,0x49,0xb3,0xaa,0x76,0x97,0x76,0xae,0x02,0x00,0x6e,0x20,0xbd,0xc4,0x5b,0x71,0x4c,0xba,0xbb,0x5e,0x49,0xfa,0x5c,0xaf,0x55,0xd2,0xec,0x56,0x4f,0x96,0xce,0xdb,0x8a,0x7f,0xa5,0xbb,0xa9,0x7a,0xab,0x74,0x17,0xbd,0x68,0x4b,0x77,0x56,0xb5,0x8b,0xb4,0x5b,0xd5,0x28,0xe9,0xd9,0x55,0x3b,0x48,0x7b,0xb5,0x9a,0x25,0xcd,0xaa,0xda,0x5d,0xda,0xb9,0x0a,0x00,0xb8,0x81,0xf4,0x12,0x6f,0x45,0x5f,0xba,0xb7,0x5e,0x2d,0xe9,0xf3,0xad,0x56,0x49,0xb3,0x5b,0x3d,0x59,0x3a,0x6f,0x2f,0xf2,0xbd,0x54,0xbd,0x55,0xba,0x8b,0x5e,0xb4,0xa5,0x3b,0xab,0xda,0x45,0xda,0xad,0x6a,0x94,0xf4,0xec,0xaa,0x1d,0xa4,0xbd,0x5a,0xcd,0x92,0x66,0x55,0xed,0x2e,0xed,0x5c,0x05,0x00,0xdc,0x40,0x7a,0x89,0xb7,0xa2,0x2d,0xdd,0x59,0xaf,0x23,0xd2,0xcf,0xb5,0x5a,0x25,0xcd,0x6e,0xf5,0x64,0xe9,0xbc,0xad,0xc8,0xf7,0x52,0xf5,0x56,0xe9,0x2e,0x8e,0x44,0x2d,0xdd,0x57,0xd5,0x2e,0xd2,0x6e,0x55,0xa3,0xa4,0x67,0x57,0xed,0x20,0xed,0xd5,0x6a,0x96,0x34,0xab,0x6a,0x77,0x69,0xe7,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xbc,0x15,0xb5,0x74,0x5f,0xbd,0x8e,0x4a,0x3f,0xdb,0x6b,0x85,0x34,0xb7,0xd5,0x93,0xa5,0xf3,0xb6,0x22,0xdf,0x4b,0xd5,0x9b,0xa5,0xfb,0xe8,0x45,0x2d,0xdd,0x57,0xd5,0x2e,0xd2,0x6e,0x55,0xa3,0xa4,0x67,0x57,0x5d,0x2d,0xed,0xd4,0x6b,0x96,0x34,0xab,0x6a,0x77,0x69,0xe7,0x2a,0x00,0xe0,0x06,0xd2,0x4b,0xbc,0x15,0xb5,0x74,0x5f,0xbd,0xce,0x48,0x3f,0xdf,0x6b,0xb6,0x34,0xb3,0xd5,0x93,0xa5,0xf3,0xf6,0x7a,0xbb,0x74,0x27,0x55,0x6f,0x97,0xee,0xa4,0xd7,0x93,0x8c,0x3c,0xcf,0xcf,0x7b,0x6a,0xb5,0x8b,0xb4,0x5b,0xd5,0x28,0xe9,0xd9,0x55,0x57,0x4b,0x3b,0xf5,0x9a,0x25,0xcd,0xaa,0xda,0x5d,0xda,0xb9,0x0a,0x00,0xb8,0x81,0xf4,0x12,0x6f,0x45,0x96,0xee,0xaa,0xd7,0x27,0xd2,0x73,0x5a,0xad,0x90,0xe6,0x56,0x3d,0x5d,0x3a,0x73,0xab,0xb7,0x4b,0x77,0x52,0xf5,0x76,0xe9,0x4e,0x8e,0xf4,0x04,0xa3,0xcf,0xf2,0xf7,0xfd,0xf4,0xda,0x45,0xda,0xad,0x6a,0x94,0xf4,0xec,0xaa,0x2b,0xa5,0x7d,0x8e,0x34,0x4b,0x9a,0x55,0xb5,0xbb,0xb4,0x73,0x15,0x00,0x70,0x03,0xe9,0x25,0xde,0x8a,0xff,0x95,0xee,0xa9,0xd7,0x37,0xd2,0xf3,0x5a,0xcd,0x96,0x66,0xb6,0x7a,0xb2,0x74,0xde,0x56,0x6f,0x97,0xee,0xa4,0x8a,0x7c,0x2f,0x47,0xba,0xb3,0x19,0xe7,0xf8,0xfb,0x99,0xbd,0x76,0x91,0x76,0xab,0x1a,0x25,0x3d,0xbb,0xd5,0x55,0xd2,0x2e,0x47,0x9a,0x25,0xcd,0xaa,0xda,0x5d,0xda,0xb9,0x15,0x00,0xb0,0xb9,0xf4,0x02,0x6f,0xc5,0x7f,0xa5,0x3b,0xea,0xf5,0xad,0xf4,0xcc,0x5e,0x33,0xa5,0x79,0xbd,0x9e,0x2a,0x9d,0xb5,0xd7,0x9b,0xa5,0xfb,0xa8,0x22,0xdf,0xcb,0xd1,0xee,0x68,0xd6,0x19,0x7e,0x3e,0xb7,0xd5,0x2e,0xd2,0x6e,0x55,0xa3,0xa4,0x67,0xb7,0xba,0x42,0xda,0xe3,0x68,0xb3,0xa4,0x59,0x55,0xbb,0x4b,0x3b,0xb7,0x02,0x00,0x36,0x97,0x5e,0xe0,0xad,0xf8,0xaf,0x74,0x47,0xbd,0x46,0x48,0xcf,0x6d,0x35,0x5b,0x9a,0xd9,0xeb,0xa9,0xd2,0x59,0x7b,0xbd,0x55,0xba,0x8b,0xaa,0x15,0xd2,0xdc,0x56,0x57,0x48,0x7b,0x9c,0xe9,0x0e,0xd2,0xde,0xbf,0x1a,0x25,0x3d,0xbb,0x6a,0x17,0x69,0xb7,0xaa,0x51,0xd2,0xb3,0x7b,0xad,0x94,0xe6,0x9f,0x69,0x96,0x34,0xab,0xea,0x0e,0xd2,0xde,0x55,0x00,0xc0,0xe6,0xd2,0x0b,0xbc,0x15,0x7f,0xa4,0xfb,0xe9,0x35,0x52,0x7a,0x7e,0xab,0xd9,0xd2,0xcc,0x5e,0x4f,0x95,0xce,0xda,0xeb,0x8d,0xd2,0x3d,0x54,0xad,0x90,0xe6,0xb6,0xba,0x42,0xda,0xe3,0x6c,0x3b,0x4b,0xfb,0xfe,0x6e,0x94,0xf4,0xec,0xaa,0x5d,0xa4,0xdd,0xaa,0x46,0x4a,0xcf,0x6f,0xb5,0x4a,0x9a,0x7d,0xb6,0x59,0xd2,0xac,0xaa,0x3b,0x48,0x7b,0x57,0x01,0x00,0x9b,0x4b,0x2f,0xf0,0x56,0xfc,0x2b,0xdd,0x4d,0xaf,0xd1,0xd2,0x8c,0x5e,0x33,0xa5,0x79,0x47,0x7a,0xa2,0x74,0xce,0x23,0xed,0x6a,0xd6,0x7e,0x7f,0x9f,0xbd,0xd7,0x0a,0x69,0x6e,0xab,0xab,0xa4,0x5d,0xce,0xb6,0x9b,0xb4,0xe3,0xcf,0x46,0x49,0xcf,0xae,0xda,0x45,0xda,0xad,0x6a,0xa4,0xf4,0xfc,0x56,0x2b,0xa4,0xb9,0x9f,0x34,0x4b,0x9a,0x55,0x75,0x07,0x69,0xef,0x2a,0x00,0x60,0x73,0xe9,0x05,0xde,0x8a,0x7c,0x2f,0xbd,0x66,0x49,0xb3,0x7a,0xcd,0x94,0xe6,0x1d,0xe9,0x2a,0x33,0xe7,0xff,0x7d,0xbe,0x33,0xed,0x64,0xf6,0x6e,0x3f,0x9f,0xdf,0x6a,0x85,0x34,0xb7,0xd5,0x95,0xd2,0x3e,0x67,0xdb,0x41,0xda,0xab,0x6a,0x94,0xf4,0xec,0xaa,0x5d,0xa4,0xdd,0xaa,0x46,0x4b,0x33,0x5a,0xcd,0x94,0xe6,0x7d,0xda,0x2c,0x69,0x56,0xd5,0x1d,0xa4,0xbd,0x5b,0x01,0x00,0x1b,0x4b,0x2f,0xef,0xa7,0x35,0x5a,0x9a,0xd1,0x6b,0xa6,0x34,0xaf,0xd5,0x4c,0x69,0xde,0x99,0x56,0x59,0x35,0xf7,0xe7,0x9c,0xa3,0x5d,0x2d,0xed,0xf4,0xab,0xd1,0xd2,0x8c,0xaa,0x15,0xd2,0xdc,0x56,0x57,0x4b,0x3b,0x7d,0xda,0x6a,0x69,0x87,0x5e,0xa3,0xa4,0x67,0x57,0xed,0x22,0xed,0x56,0x35,0x5a,0x9a,0xd1,0x6b,0x86,0x34,0xe7,0x9b,0x66,0x49,0xb3,0xaa,0xee,0x22,0xed,0xde,0x0a,0x00,0xd8,0x54,0x7a,0x71,0x3f,0xad,0x91,0xd2,0xf3,0x7b,0xcd,0x96,0x66,0xf6,0x9a,0x29,0xcd,0x3b,0xdb,0x2c,0x69,0xd6,0xaf,0x66,0x49,0xb3,0xce,0xb6,0x4a,0x9a,0xfd,0xb3,0xd1,0xd2,0x8c,0xaa,0x15,0xd2,0xdc,0x56,0x3b,0x48,0x7b,0x7d,0xdb,0x2c,0x69,0xd6,0x99,0x46,0x49,0xcf,0xae,0xda,0x45,0xda,0xad,0x6a,0xb4,0x34,0xe3,0x48,0xa3,0xa4,0x67,0x8f,0x68,0x96,0x34,0xab,0xea,0x2e,0xd2,0xee,0xab,0x02,0x00,0x06,0x4a,0x2f,0xdb,0xa7,0x35,0x4a,0x7a,0x76,0xaf,0x55,0xd2,0xec,0x5e,0x33,0xa5,0x79,0x9f,0x34,0x42,0x7a,0xee,0xcf,0x66,0x4a,0xf3,0x3e,0x6d,0xb4,0x34,0xa3,0xd5,0x68,0x69,0x46,0xd5,0x0a,0x69,0x6e,0xab,0x5d,0xa4,0xdd,0x9e,0xd8,0x28,0xe9,0xd9,0x55,0xbb,0x48,0xbb,0x55,0xcd,0x90,0xe6,0x9c,0xe9,0x13,0xe9,0x39,0xad,0x7e,0x49,0xbf,0x5e,0x35,0x4b,0x9a,0x55,0x75,0x17,0x69,0xf7,0x55,0x01,0x00,0x03,0xa5,0x97,0xed,0xd3,0x1a,0x21,0x3d,0xb7,0xd7,0x6a,0x69,0x87,0x5e,0xb3,0xa4,0x59,0x3b,0x37,0x5b,0x9a,0x79,0xc7,0x46,0x4b,0x33,0xaa,0x56,0x48,0x73,0x5b,0xed,0x24,0xed,0xf7,0xb4,0x46,0x49,0xcf,0xae,0xda,0x45,0xda,0xad,0x6a,0x86,0x34,0x67,0xa7,0x7e,0x4b,0xbf,0x57,0x35,0x4b,0x9a,0x55,0x75,0x17,0x69,0xf7,0x55,0x01,0x00,0x03,0xa5,0x97,0xed,0xd3,0x1a,0x21,0x3d,0xb7,0xd7,0x15,0xd2,0x1e,0xad,0x66,0x4b,0x33,0x77,0x6c,0x85,0x34,0xf7,0x6e,0x8d,0x96,0x66,0x54,0xad,0x90,0xe6,0xb6,0xda,0x51,0xda,0xf3,0x29,0x8d,0x92,0x9e,0x5d,0xb5,0x8b,0xb4,0x5b,0xd5,0x0c,0x69,0xce,0x2e,0xfd,0x2d,0xfd,0x7e,0xd5,0x2c,0x69,0x56,0xd5,0x9d,0xa4,0xfd,0x57,0x04,0x00,0x0c,0x94,0x5e,0xb6,0x4f,0xeb,0x5b,0xe9,0x99,0xbd,0xae,0x92,0x76,0xe9,0x35,0x5b,0x9a,0xb9,0x5b,0xab,0xa4,0xd9,0x77,0x6a,0xb4,0x34,0xa3,0x6a,0x85,0x34,0xb7,0xd5,0xae,0xd2,0xae,0x77,0x6f,0xa4,0xf4,0xfc,0xaa,0x5d,0xa4,0xdd,0xaa,0x66,0x49,0xb3,0xae,0xee,0xa7,0xf4,0x99,0xaa,0x59,0xd2,0xac,0xaa,0xbb,0x49,0x67,0x98,0x1d,0x00,0x30,0x50,0x7a,0xd9,0x3e,0xad,0x6f,0xa4,0xe7,0xf5,0xba,0x5a,0xda,0xa9,0xd7,0x0a,0x69,0xee,0x2e,0xad,0x96,0x76,0xb8,0x43,0xa3,0xa5,0x19,0x55,0x2b,0xa4,0xb9,0xad,0x76,0x97,0x76,0xbe,0x5b,0x33,0xa4,0x39,0x55,0xbb,0x48,0xbb,0x55,0xcd,0x94,0xe6,0x5d,0x55,0x92,0x3e,0x57,0x35,0x4b,0x9a,0x55,0x75,0x47,0xe9,0x1c,0x33,0x03,0x00,0x06,0x4a,0x2f,0xdb,0xa7,0xf5,0xa9,0xf4,0xac,0x5e,0xbb,0x48,0xbb,0xf5,0x5a,0x21,0xcd,0xdd,0xa1,0x2b,0xa4,0x3d,0x76,0x6f,0xb4,0x34,0xa3,0x6a,0x85,0x34,0xb7,0xd5,0x1d,0xa4,0xbd,0xef,0xd2,0x2c,0x69,0x56,0xd5,0x2e,0xd2,0x6e,0x55,0xb3,0xa5,0x99,0xab,0xab,0xa4,0xcf,0x56,0xcd,0x92,0x66,0x55,0xdd,0x55,0x3a,0xcb,0xac,0x00,0x80,0x81,0xd2,0xcb,0xf6,0x69,0x7d,0x2a,0x3d,0xab,0xd7,0x2e,0xd2,0x6e,0xbd,0x56,0x49,0xb3,0xaf,0xee,0x4a,0x69,0x9f,0x9d,0x9a,0x29,0xcd,0xab,0x5a,0x21,0xcd,0x6d,0x75,0x17,0x69,0xf7,0x9d,0x9b,0x2d,0xcd,0xac,0xda,0x45,0xda,0xad,0x6a,0x95,0x34,0x7b,0x45,0x2d,0xe9,0xf3,0x55,0xb3,0xa4,0x59,0x55,0x77,0x96,0xce,0x33,0x23,0x00,0x60,0xa0,0xf4,0xb2,0x7d,0x5a,0x9f,0x48,0xcf,0xe9,0xb5,0x9b,0xb4,0x63,0xaf,0x55,0xd2,0xec,0x2b,0xda,0x45,0xda,0xed,0xca,0x56,0x49,0xb3,0xab,0x56,0x48,0x73,0x5b,0xdd,0x51,0x3a,0xc7,0x0e,0xad,0x94,0xe6,0x57,0xed,0x22,0xed,0x56,0xb5,0x52,0x9a,0x3f,0xab,0x23,0xd2,0xcf,0x55,0xcd,0x92,0x66,0x55,0x3d,0x4d,0x3a,0xe3,0xb7,0x01,0x00,0x03,0xa5,0x97,0xed,0xd3,0x3a,0x2b,0x3d,0xa3,0xd7,0xae,0xd2,0xae,0xbd,0x56,0x4b,0x3b,0xcc,0x6e,0x67,0x69,0xdf,0x15,0x5d,0x21,0xed,0x51,0xb5,0x42,0x9a,0xdb,0xea,0xee,0xd2,0x99,0x56,0x75,0xa5,0xb4,0x4f,0xd5,0x2e,0xd2,0x6e,0x55,0x57,0x49,0xbb,0x8c,0xea,0xa8,0xf4,0xb3,0x55,0xb3,0xa4,0x59,0x55,0x4f,0x97,0xce,0x7c,0x36,0x00,0x00,0x1e,0x2a,0xfd,0xe3,0xef,0xdb,0xee,0x2c,0x9d,0x67,0x64,0xf0,0x4b,0xfa,0xb3,0x31,0x23,0xde,0x23,0xfd,0xf7,0xff,0x24,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,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,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,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,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,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,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,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,0xb6,0xf6,0xcf,0x3f,0xff,0x0f,0xbb,0x2b,0x27,0x79,0x57,0xc9,0xc6,0x55,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
};
namespace Logic
{
GraphicFrame::GraphicFrame(std::wstring ns)
{
m_namespace = ns;
}
GraphicFrame::~GraphicFrame()
{
}
GraphicFrame::GraphicFrame(XmlUtils::CXmlNode& node)
{
fromXML(node);
}
const GraphicFrame& GraphicFrame::operator =(XmlUtils::CXmlNode& node)
{
fromXML(node);
return *this;
}
GraphicFrame::GraphicFrame(XmlUtils::CXmlLiteReader& oReader)
{
fromXML(oReader);
}
const GraphicFrame& GraphicFrame::operator =(XmlUtils::CXmlLiteReader& oReader)
{
fromXML(oReader);
return *this;
}
void GraphicFrame::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
m_namespace = XmlUtils::GetNamespace(oReader.GetName());
ReadAttributes(oReader);
if ( oReader.IsEmptyNode() )
return;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
fromXML2(oReader);
}
FillParentPointersForChilds();
}
void GraphicFrame::ReadAttributes2(XmlUtils::CXmlLiteReader& oReader)
{
//todooo нормальный объект сделать!!
if (!olePic.IsInit()) olePic.Init();
if (!olePic->oleObject.IsInit()) olePic->oleObject.Init();
WritingElement_ReadAttributes_Start(oReader)
WritingElement_ReadAttributes_Read_if(oReader, L"progId", olePic->oleObject->m_sProgId)
WritingElement_ReadAttributes_Read_else_if(oReader, L"r:id", olePic->oleObject->m_oId)
WritingElement_ReadAttributes_Read_else_if(oReader, L"relationships:id", olePic->oleObject->m_oId)
WritingElement_ReadAttributes_Read_else_if(oReader, L"imgW", olePic->oleObject->m_oDxaOrig)
WritingElement_ReadAttributes_Read_else_if(oReader, L"imgH", olePic->oleObject->m_oDyaOrig)
WritingElement_ReadAttributes_Read_else_if(oReader, L"showAsIcon", olePic->oleObject->m_oShowAsIcon)
WritingElement_ReadAttributes_Read_else_if(oReader, L"name", olePic->oleObject->m_oName);
WritingElement_ReadAttributes_End(oReader)
if(olePic->oleObject->m_oDxaOrig.IsInit())
{
olePic->oleObject->m_oDxaOrig = (int)Emu_To_Twips(olePic->oleObject->m_oDxaOrig.get());
}
if(olePic->oleObject->m_oDyaOrig.IsInit())
{
olePic->oleObject->m_oDyaOrig = (int)Emu_To_Twips(olePic->oleObject->m_oDyaOrig.get());
}
if ((olePic->oleObject->m_oShowAsIcon.IsInit()) && (*olePic->oleObject->m_oShowAsIcon))
{
olePic->oleObject->m_oDrawAspect = (BYTE)1;
}
}
void GraphicFrame::ReadAttributes3(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle ( oReader, (L"spid"), vmlSpid )
WritingElement_ReadAttributes_End( oReader )
}
void GraphicFrame::fromXML2(XmlUtils::CXmlLiteReader& oReader)
{
std::wstring strName = XmlUtils::GetNameNoNS(oReader.GetName());
std::wstring strNamespace = XmlUtils::GetNamespace(oReader.GetName());
if (L"xfrm" == strName)
xfrm = oReader;
else if (L"cNvFrPr" == strName)
{
}
else if (L"cNvPr" == strName)
{
if (!nvGraphicFramePr.IsInit())
nvGraphicFramePr.Init();
nvGraphicFramePr->cNvPr.fromXML(oReader);
}
else if (L"cNvGraphicFramePr" == strName)
{
if (!nvGraphicFramePr.IsInit())
nvGraphicFramePr.Init();
nvGraphicFramePr->cNvGraphicFramePr.fromXML(oReader);
}
else if (L"nvGraphicFramePr" == strName)
{
nvGraphicFramePr = oReader;
}
else if (L"graphic" == strName)
{
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring strName1 = oReader.GetName();
if (strName1 == L"a:graphicData")
{
fromXML3(oReader);
}
}
}
}
bool GraphicFrame::fromXML3(XmlUtils::CXmlLiteReader& oReader)
{
bool result = false;
if ( oReader.IsEmptyNode() )
return result;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring strName = XmlUtils::GetNameNoNS(oReader.GetName());
if (strName == L"tbl")
{
table = oReader;
result = true;
}
else if (strName == L"oleObj")
{
ReadAttributes2(oReader);
if ( oReader.IsEmptyNode() )
continue;
int nCurDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth1 ) )
{
std::wstring strName1 = XmlUtils::GetNameNoNS(oReader.GetName());
if (strName1 == L"pic")
{
result = true;
if (!olePic.IsInit()) //создается уровнем выше
olePic.Init();
olePic->fromXML(oReader);
if (xfrm.IsInit())
xfrm->Merge(olePic->spPr.xfrm);
}
}
}
else if (strName == L"relIds")
{
smartArt = oReader;
result = true;
}
else if (strName == L"chart")
{
chartRec = oReader;
result = true;
}
else if (strName == L"legacyDrawing")
{
ReadAttributes3(oReader);
result = true;
}
else if (strName == L"slicer")
{
if(L"a14" == m_sRequires)
{
slicer = oReader;
}
else
{
slicerExt = oReader;
}
result = true;
}
else if (strName == L"timeslicer")
{
timeslicer = oReader;
}
else if (strName == L"contentPart")
{
contentPart = oReader;
result = true;
}
else if (strName == L"AlternateContent")
{
if ( oReader.IsEmptyNode() )
continue;
int nCurDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth1 ) )
{
std::wstring strName1 = oReader.GetName();
if (strName1 == L"mc:Choice")
{
result = fromXML3(oReader);
if (result)
break;
}
else if (strName1 == L"mc:Fallback")
{
result = fromXML3(oReader);
if (result)
break;
}
}
}
else
{
element.fromXML( oReader );
if (element.is_init())
result = true;
}
}
return result;
}
bool GraphicFrame::fromXML3(XmlUtils::CXmlNode& node)
{
bool result = false;
std::vector<XmlUtils::CXmlNode> oNodes;
if (node.GetNodes((L"*"), oNodes))
{
size_t count = oNodes.size();
for (size_t i = 0; i < count; ++i)
{
XmlUtils::CXmlNode& oNode = oNodes[i];
std::wstring strName = XmlUtils::GetNameNoNS(oNode.GetName());
if (L"tbl" == strName)
{
table = oNode;
if (table.IsInit()) result = true;
}
else if (L"oleObj" == strName)
{
olePic = oNode.ReadNode(L"p:pic"); //нормальный вариант объекта
if (olePic.IsInit())
{
olePic->fromXMLOle(oNode);
result = true;
}
else
{
olePic.Init(); //старый вариант описания объекта через spid в VmlDrawing
Logic::PrstGeom* geom = new Logic::PrstGeom();
geom->prst = L"rect";
olePic->spPr.Geometry.m_geometry.reset(geom);
olePic->fromXMLOle(oNode);
result = true;
}
if (olePic->spPr.xfrm.IsInit() == false)
olePic->spPr.xfrm = xfrm;
}
else if (L"AlternateContent" == strName)
{
XmlUtils::CXmlNode oNodeChoice;
if (!result && oNode.GetNode(L"mc:Choice", oNodeChoice))
result = fromXML3(oNodeChoice);
if (result)
{
if ((olePic->blipFill.blip.IsInit()) && (false == olePic->blipFill.blip->embed.IsInit())
&& (olePic->oleObject.IsInit()) && (false == olePic->oleObject->m_sShapeId.IsInit()))
{
result = false;
}
}
XmlUtils::CXmlNode oNodeFallback;
if (!result && oNode.GetNode(L"mc:Fallback", oNodeFallback))
result = fromXML3(oNodeFallback);
}
else if (L"relIds" == strName)
{
smartArt = oNode;
result = true;
}
else if (L"chart" == strName)
{
chartRec = oNode;
result = chartRec.IsInit();
}
else if (L"slicer" == strName)
{
if(L"a14" == m_sRequires)
{
slicer = oNode;
}
else
{
slicerExt = oNode;
}
result = true;
}
else if (L"legacyDrawing" == strName)
{
XmlMacroReadAttributeBase(oNode, L"spid", vmlSpid);
result = true;
}
else
{
element.fromXML( oNode );
if (element.is_init())
result = true;
}
}
}
return result;
}
void GraphicFrame::fromXML(XmlUtils::CXmlNode& node)
{
m_namespace = XmlUtils::GetNamespace(node.GetName());
XmlMacroReadAttributeBase(node, L"macro",macro);
std::vector<XmlUtils::CXmlNode> oNodes;
if (node.GetNodes(L"*", oNodes))
{
size_t count = oNodes.size();
for (size_t i = 0; i < count; ++i)
{
XmlUtils::CXmlNode& oNode = oNodes[i];
std::wstring strName = XmlUtils::GetNameNoNS(oNode.GetName());
std::wstring strNamespace = XmlUtils::GetNamespace(oNode.GetName());
if (L"xfrm" == strName)
xfrm = oNode;
else if (L"nvGraphicFramePr" == strName)
nvGraphicFramePr = oNode;
if (L"graphic" == strName)
{
XmlUtils::CXmlNode oNodeData;
if (oNode.GetNode(L"a:graphicData", oNodeData))
{
fromXML3(oNodeData);
}
}
}
}
FillParentPointersForChilds();
}
void GraphicFrame::toXmlWriter2(NSBinPptxRW::CXmlWriter* pWriter) const
{
if (nvGraphicFramePr.IsInit())
nvGraphicFramePr->toXmlWriter(pWriter);
if (xfrm.IsInit() && (!(pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX ||
pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX_GLOSSARY) || pWriter->m_lGroupIndex >= 0))
{
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX && pWriter->m_lGroupIndex >= 0) xfrm->node_name = L"xdr:xfrm";
else if ((pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX ||
pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX_GLOSSARY) && pWriter->m_lGroupIndex >= 0) xfrm->node_name = L"wpg:xfrm";
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_GRAPHICS) xfrm->node_name = L"a:xfrm";
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_CHART_DRAWING) xfrm->node_name = L"cdr:xfrm";
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DIAGRAM) xfrm->node_name = L"dgm:xfrm";
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DSP_DRAWING) xfrm->node_name = L"dsp:xfrm";
xfrm->toXmlWriter(pWriter);
}
if (table.is_init())
{
pWriter->WriteString (L"<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">");
table->toXmlWriter (pWriter);
pWriter->WriteString (L"</a:graphicData></a:graphic>");
}
else if (chartRec.is_init())
{
std::wstring sUri = chartRec->m_bChartEx ? L"http://schemas.microsoft.com/office/drawing/2014/chartex" : L"http://schemas.openxmlformats.org/drawingml/2006/chart";
pWriter->WriteString(L"<a:graphic><a:graphicData uri=\"" + sUri + L"\">");
chartRec->toXmlWriter(pWriter);
pWriter->WriteString(L"</a:graphicData></a:graphic>");
}
else if (slicer.is_init())
{
pWriter->WriteString(L"<a:graphic><a:graphicData uri=\"http://schemas.microsoft.com/office/drawing/2010/slicer\">");
slicer->toXML(*pWriter, L"sle:slicer");
pWriter->WriteString(L"</a:graphicData></a:graphic>");
}
else if (slicerExt.is_init())
{
pWriter->WriteString(L"<a:graphic><a:graphicData uri=\"http://schemas.microsoft.com/office/drawing/2010/slicer\">");
slicerExt->toXML(*pWriter, L"sle:slicer");
pWriter->WriteString(L"</a:graphicData></a:graphic>");
}
else if (timeslicer.is_init())
{
pWriter->WriteString(L"<a:graphic><a:graphicData uri=\"http://schemas.microsoft.com/office/drawing/2012/timeslicer\">");
timeslicer->toXmlWriter(pWriter);
pWriter->WriteString(L"</a:graphicData></a:graphic>");
}
else if (smartArt.is_init())
{
pWriter->WriteString(L"<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\">");
smartArt->toXmlWriter(pWriter);
pWriter->WriteString(L"</a:graphicData></a:graphic>");
}
}
void GraphicFrame::toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
{
if (smartArt.is_init() && ( pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX ||
pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX_GLOSSARY) &&
pWriter->m_lGroupIndex == 0)
{
pWriter->WriteString(L"<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\">");
smartArt->toXmlWriter(pWriter);
pWriter->WriteString(L"</a:graphicData></a:graphic>");
}
else
{
std::wstring namespace_ = m_namespace;
if ((pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX ||
pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX_GLOSSARY) && pWriter->m_lGroupIndex >= 0) namespace_ = L"wpg";
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX && pWriter->m_lGroupIndex >= 0) namespace_ = L"xdr";
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_GRAPHICS) namespace_ = L"a";
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_CHART_DRAWING) namespace_ = L"cdr";
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DIAGRAM) namespace_ = L"dgm";
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DSP_DRAWING) namespace_ = L"dsp";
pWriter->StartNode(namespace_ + L":graphicFrame");
pWriter->WriteAttribute2(L"macro", macro);
pWriter->EndAttributes();
toXmlWriter2(pWriter);
pWriter->EndNode(namespace_ + L":graphicFrame");
}
}
bool GraphicFrame::IsEmpty() const
{
return !olePic.is_init() && !smartArt.is_init() && !table.is_init() && !chartRec.is_init() && !vmlSpid.is_init() && !slicer.is_init() && !slicerExt.is_init() && !timeslicer.is_init() && !element.is_init();
}
void GraphicFrame::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
if (IsEmpty())
return;
if (olePic.is_init())
{
if (nvGraphicFramePr.IsInit())
{
if (olePic->nvPicPr.cNvPr.id < 1)
olePic->nvPicPr.cNvPr.id = nvGraphicFramePr->cNvPr.id;
if (olePic->nvPicPr.cNvPr.name.empty())
olePic->nvPicPr.cNvPr.name = nvGraphicFramePr->cNvPr.name;
}
olePic->toPPTY(pWriter);
return;
}
std::wstring xml_object_vml;
smart_ptr<OOX::IFileContainer> xml_object_rels;
if (vmlSpid.is_init())
{
xml_object_vml = GetVmlXmlBySpid(xml_object_rels);
}
if (false == xml_object_vml.empty() && !table.IsInit() && !chartRec.IsInit() && !slicer.IsInit() && !slicerExt.IsInit() && !smartArt.IsInit())
{
std::wstring temp = L"<v:object>";
temp += xml_object_vml;
temp += L"</v:object>";
NSBinPptxRW::CDrawingConverter oDrawingConverter;
RELEASEOBJECT(oDrawingConverter.m_pBinaryWriter->m_pCommon->m_pMediaManager);
oDrawingConverter.m_pBinaryWriter->m_pCommon->m_pMediaManager = pWriter->m_pCommon->m_pMediaManager;
oDrawingConverter.SetRels(xml_object_rels);
oDrawingConverter.SetAdditionalParam(L"xfrm_override", (BYTE*)xfrm.GetPointer(), sizeof(xfrm));
std::vector<nullable<PPTX::Logic::SpTreeElem>> elements;
nullable<OOX::WritingElement> anchor;
oDrawingConverter.ConvertVml(temp, elements, anchor);
oDrawingConverter.m_pBinaryWriter->m_pCommon->m_pMediaManager = NULL;
smart_ptr<OOX::IFileContainer> rels_old = pWriter->GetRels();
pWriter->SetRels(xml_object_rels);
for (size_t i = 0; i < elements.size(); ++i)
{
elements[i]->toPPTY(pWriter);
}
pWriter->SetRels(rels_old);
return;
}
pWriter->StartRecord(SPTREE_TYPE_GRFRAME);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
pWriter->WriteString2(0, vmlSpid);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
pWriter->WriteRecord2(0, nvGraphicFramePr);
pWriter->WriteRecord2(1, xfrm);
if (table.is_init())
{
pWriter->WriteRecord2(2, table);
}
else if (smartArt.is_init())
{
pWriter->WriteRecord2(8, smartArt);
}
else if (chartRec.is_init())
{
if (chartRec->m_bChartEx)
{
pWriter->WriteRecord2(7, chartRec);
}
else
{
pWriter->WriteRecord2(3, chartRec);
}
}
else if (slicer.is_init())
{
pWriter->WriteRecord2(5, slicer);
}
else if (slicerExt.is_init())
{
pWriter->WriteRecord2(6, slicerExt);
}
else if (timeslicer.is_init())
{
pWriter->WriteRecord2(9, timeslicer);
}
else if (element.is_init())
{
pWriter->WriteRecord1(4, element);
}
else
{
//????
}
if (macro.IsInit())
{
pWriter->StartRecord(SPTREE_TYPE_MACRO);
pWriter->WriteString1(0, *macro);
pWriter->EndRecord();
}
pWriter->EndRecord();
}
void GraphicFrame::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
{
LONG _end_rec = pReader->GetPos() + pReader->GetRecordSize() + 4;
pReader->Skip(1); // start attributes
while (true)
{
BYTE _at = pReader->GetUChar_TypeNode();
if (_at == NSBinPptxRW::g_nodeAttributeEnd)
break;
switch (_at)
{
case 0:
{
vmlSpid = pReader->GetString2();
}break;
default:
break;
}
}
while (pReader->GetPos() < _end_rec)
{
BYTE _at = pReader->GetUChar();
switch (_at)
{
case 0:
{
nvGraphicFramePr.Init();
nvGraphicFramePr->fromPPTY(pReader);
}break;
case 1:
{
xfrm = new Logic::Xfrm();
xfrm->node_name = L"p:xfrm";
xfrm->fromPPTY(pReader);
}break;
case 2:
{
table = new Logic::Table();
table->fromPPTY(pReader);
}break;
case 3:
{
chartRec = new Logic::ChartRec();
chartRec->fromPPTY(pReader);
}break;
case 4:
{
element.fromPPTY(pReader);
}break;
case 5:
{
slicer = new OOX::Spreadsheet::CDrawingSlicer();
slicer->fromPPTY(pReader);
}break;
case 6:
{
slicerExt = new OOX::Spreadsheet::CDrawingSlicer();
slicerExt->fromPPTY(pReader);
}break;
case 7:
{
chartRec = new Logic::ChartRec();
chartRec->m_bChartEx = true;
chartRec->fromPPTY(pReader);
}break;
case 8:
{
smartArt = new Logic::SmartArt();
smartArt->fromPPTY(pReader);
}break;
case 9:
{
timeslicer = new OOX::Spreadsheet::CDrawingTimeslicer();
timeslicer->fromPPTY(pReader);
}break;
case SPTREE_TYPE_MACRO:
{
pReader->Skip(5); // type + size
macro = pReader->GetString2();
}break;
default:
pReader->SkipRecord();
break;
}
}
pReader->Seek(_end_rec);
if (!xfrm.IsInit())
xfrm = new Logic::Xfrm();
}
void GraphicFrame::GetRect(Aggplus::RECT& pRect)const
{
if (xfrm.IsInit() == false) return;
pRect.left = xfrm->offX.get();
pRect.top = xfrm->offY.get();
pRect.right = pRect.left + xfrm->extX.get();
pRect.bottom = pRect.top + xfrm->extY.get();
if(parentIs<Logic::SpTree>())
parentAs<Logic::SpTree>().NormalizeRect(pRect);
}
std::wstring GraphicFrame::toXML2() const
{
std::wstring sXml;
if (nvGraphicFramePr.IsInit())
sXml += nvGraphicFramePr->toXML();
if (xfrm.IsInit() && m_namespace != L"wp")
{
sXml += xfrm->toXML();
}
if (table.IsInit())
{
sXml += L"<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">\
<a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">";
sXml += table->toXML();
sXml += L"</a:graphicData></a:graphic>";
}
else if (chartRec.IsInit())
{
std::wstring sUri = chartRec->m_bChartEx ? L"http://schemas.microsoft.com/office/drawing/2014/chartex" : L"http://schemas.openxmlformats.org/drawingml/2006/chart";
sXml += L"<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"><a:graphicData uri=\"" + sUri + L"\">";
sXml += chartRec->toXML();
sXml += L"</a:graphicData></a:graphic>";
}
else if (slicer.IsInit())
{
sXml += L"<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">\
<a:graphicData uri=\"http://schemas.microsoft.com/office/drawing/2010/slicer\">";
sXml += slicer->toXML();
sXml += L"</a:graphicData></a:graphic>";
}
else if (slicerExt.IsInit())
{
sXml += L"<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">\
<a:graphicData uri=\"http://schemas.microsoft.com/office/drawing/2010/slicer\">";
sXml += slicerExt->toXML();
sXml += L"</a:graphicData></a:graphic>";
}
else if (smartArt.IsInit())
{
sXml += L"<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">\
<a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\">";
sXml += smartArt->toXML();
sXml += L"</a:graphicData></a:graphic>";
}
return sXml;
}
std::wstring GraphicFrame::toXML() const
{
std::wstring sXml;
sXml += L"<" + m_namespace + L":graphicFrame";
sXml += L" macro=\"" + (macro.IsInit() ? XmlUtils::EncodeXmlString(*macro) : L"") + L"\">";
sXml += toXML2();
sXml += L"</" + m_namespace + L":graphicFrame>";
sXml += L"<" + m_namespace + L":clientData/>";
return sXml;
}
void GraphicFrame::FillParentPointersForChilds()
{
if (nvGraphicFramePr.is_init()) nvGraphicFramePr->SetParentPointer(this);
if (xfrm.IsInit()) xfrm->SetParentPointer(this);
if (table.IsInit()) table->SetParentPointer(this);
if (smartArt.is_init()) smartArt->SetParentPointer(this);
if (chartRec.is_init()) chartRec->SetParentPointer(this);
if (olePic.is_init()) olePic->SetParentPointer(this);
}
std::wstring GraphicFrame::GetVmlXmlBySpid(smart_ptr<OOX::IFileContainer> & rels)const
{
std::wstring xml;
if(parentFileIs<PPTX::Slide>() && parentFileAs<PPTX::Slide>().Vml.IsInit())
{
xml = parentFileAs<PPTX::Slide>().GetVmlXmlBySpid(vmlSpid.get_value_or(L""));
rels = parentFileAs<PPTX::Slide>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
else if(parentFileIs<PPTX::SlideLayout>() && parentFileAs<PPTX::SlideLayout>().Vml.IsInit())
{
xml = parentFileAs<PPTX::SlideLayout>().GetVmlXmlBySpid(vmlSpid.get_value_or(L""));
rels = parentFileAs<PPTX::SlideLayout>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
else if(parentFileIs<PPTX::SlideMaster>() && parentFileAs<PPTX::SlideMaster>().Vml.IsInit())
{
xml = parentFileAs<PPTX::SlideMaster>().GetVmlXmlBySpid(vmlSpid.get_value_or(L""));
rels = parentFileAs<PPTX::SlideMaster>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
return xml;
}
void GraphicFrame::ChartToOlePackageInStorage(OOX::IFileContainer* pRels, const std::wstring &sTempDirectory, int nCurrentGenerateId)
{
// AVS_OFFICESTUDIO_FILE_OTHER_PACKAGE_IN_OLE
if (!chartRec.IsInit()) return;
if (olePic.IsInit()) return;
std::wstring sXlsxFile = ChartToXlsx(pRels, sTempDirectory);
if (sXlsxFile.empty()) return;
DWORD nativeDataSize = 0;
BYTE* nativeData = NULL;
if (!NSFile::CFileBinary::ReadAllBytes(sXlsxFile, &nativeData, nativeDataSize))
return;
std::string sUserType = "Chart";
std::string sClipboardFormat = "ExcelML12";
std::string sProgram = "Excel.Sheet.12";
std::wstring sOleFile = sTempDirectory + FILE_SEPARATOR_STR + L"OleObject" + std::to_wstring(1024 + nCurrentGenerateId) + L".bin";
POLE::Storage * storageOut = new POLE::Storage(sOleFile.c_str());
if ( (storageOut) && (storageOut->open(true, true)))
{
_UINT32 zero = 0, str_size = 0;
//Ole
BYTE dataOleInfo[] = {0x01,0x00,0x00,0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
POLE::Stream oStream3(storageOut, L"\001Ole", true, 20);
oStream3.write(dataOleInfo, 20);
oStream3.flush();
//CompObj
BYTE dataCompObjHeader[28] = {0x01,0x00,0xfe,0xff,0x03,0x0a,0x00,0x00,0xff,0xff,0xff,0xff
,0x30,0x08,0x02
//,0x0a,0x00,0x03
,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46};
POLE::Stream oStream1(storageOut, L"\001CompObj", true, 28 + (sUserType.length() + 5) +
(sClipboardFormat.length() + 5) +
(sProgram.length() + 5) + 4 * 4);
oStream1.write(dataCompObjHeader, 28);
str_size = sUserType.length() + 1;
oStream1.write((BYTE*)&str_size, 4);
oStream1.write((BYTE*)sUserType.c_str(), sUserType.length());
oStream1.write((BYTE*)&zero, 1);
str_size = sClipboardFormat.length() + 1;
oStream1.write((BYTE*)&str_size, 4);
oStream1.write((BYTE*)sClipboardFormat.c_str(), sClipboardFormat.length());
oStream1.write((BYTE*)&zero, 1);
str_size = sProgram.length() + 1;
oStream1.write((BYTE*)&str_size, 4);
oStream1.write((BYTE*)sProgram.c_str(), sProgram.length());
oStream1.write((BYTE*)&zero, 1);
_UINT32 nUnicodeMarker = 0x71B239F4;
oStream1.write((BYTE*)&nUnicodeMarker, 4);
oStream1.write((BYTE*)&zero, 4); // UnicodeUserType
oStream1.write((BYTE*)&zero, 4); // UnicodeClipboardFormat
oStream1.write((BYTE*)&zero, 4); //
oStream1.flush();
//ObjInfo
BYTE dataObjInfo[] = {0x00,0x00,0x03,0x00,0x01,0x00};//{0x00,0x00,0x03,0x00,0x0D,0x00};
POLE::Stream oStream2(storageOut, L"\003ObjInfo", true, 6);
oStream2.write(dataObjInfo, 6);
oStream2.flush();
//Package
POLE::Stream streamData(storageOut, L"Package", true, nativeDataSize);
streamData.write(nativeData, nativeDataSize);
streamData.flush();
storageOut->close();
delete storageOut;
}
delete []nativeData;
NSFile::CFileBinary::Remove(sXlsxFile);
olePic.Init();
olePic->blipFill.blip.Init();
olePic->blipFill.stretch.Init();
olePic->blipFill.stretch->fillRect.Init();
olePic->blipFill.srcRect.Init();
olePic->blipFill.blip->oleFilepathImage = NSDirectory::CreateTempFileWithUniqueName(sTempDirectory, L"img");
NSFile::CFileBinary file;
if (file.CreateFileW(olePic->blipFill.blip->oleFilepathImage))
{
file.WriteFile(binImagePngChartReplacement, 6171);
//file.WriteFile(binImageWmfChartReplacement, 2274);
file.CloseFile();
}
olePic->oleObject.Init();
olePic->oleObject->m_OleObjectFile = new OOX::OleObject(NULL, false, true);
olePic->oleObject->m_OleObjectFile->set_filename(sOleFile, false);
olePic->oleObject->m_sObjectId = std::wstring(L"_3617162112") + std::to_wstring(nCurrentGenerateId);
olePic->oleObject->m_sProgId = std::wstring(sProgram.begin(), sProgram.end());
//olePic->oleObject->m_sShapeId;
olePic->oleObject->m_oType = new Limit::OLEType();
olePic->oleObject->m_oUpdateMode = new Limit::OLEUpdateMode();
if (xfrm.IsInit())
{
olePic->oleObject->m_oDxaOrig = xfrm->chExtX;
olePic->oleObject->m_oDyaOrig = xfrm->chExtY;
}
}
std::wstring GraphicFrame::ChartToXlsx(OOX::IFileContainer* pRels, const std::wstring &sTempDirectory)
{
if (!chartRec.IsInit()) return L"";
smart_ptr<OOX::File> file;
if(chartRec->id_data.IsInit())
{
if(parentFileIs<OOX::IFileContainer>()) file = parentFileAs<OOX::IFileContainer>().Find(*chartRec->id_data);
else if (pRels != NULL) file = pRels->Find(*chartRec->id_data);
}
smart_ptr<OOX::Spreadsheet::CChartFile> pChart = file.smart_dynamic_cast<OOX::Spreadsheet::CChartFile>();
if (pChart.IsInit() == false) return L"";
if (!pChart->m_oChartSpace.m_externalData) return L"";
if (!pChart->m_oChartSpace.m_externalData->m_id.IsInit()) return L"";
file = pChart->Find(*pChart->m_oChartSpace.m_externalData->m_id);
smart_ptr<OOX::OleObject> pExternalXslxPackage = file.smart_dynamic_cast<OOX::OleObject>();
if (!pExternalXslxPackage.IsInit()) return L"";
std::wstring sUnpackedXlsx = sTempDirectory + FILE_SEPARATOR_STR + (L"xslx_unpacked");
if (false == NSDirectory::CreateDirectory(sUnpackedXlsx)) return L"";
COfficeUtils oCOfficeUtils(NULL);
if (S_OK != oCOfficeUtils.ExtractToDirectory(pExternalXslxPackage->filename().GetPath(), sUnpackedXlsx, NULL, 0)) return L"";
//-------------------------------------------------------
std::wstring sXlPath = sUnpackedXlsx + FILE_SEPARATOR_STR + L"xl";
std::wstring sChartPath = sXlPath + FILE_SEPARATOR_STR + L"charts";
std::wstring sDrawingsPath = sXlPath + FILE_SEPARATOR_STR + L"drawings";
std::wstring sChartSheetsPath = sXlPath + FILE_SEPARATOR_STR + L"chartsheets";
NSDirectory::CreateDirectory(sChartPath);
NSDirectory::CreateDirectory(sDrawingsPath);
NSDirectory::CreateDirectory(sDrawingsPath + FILE_SEPARATOR_STR + L"_rels");
NSDirectory::CreateDirectory(sChartSheetsPath);
NSDirectory::CreateDirectory(sChartSheetsPath + FILE_SEPARATOR_STR + L"_rels");
OOX::Spreadsheet::CT_ExternalData* keepExternalData = pChart->m_oChartSpace.m_externalData;
pChart->m_oChartSpace.m_externalData = NULL;
pChart->write2(sChartPath + FILE_SEPARATOR_STR + L"chart1.xml");
//----------------
NSStringUtils::CStringBuilder sXmlDrawing;
sXmlDrawing.WriteString(L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n");
sXmlDrawing.WriteString(L"<xdr:wsDr xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\" \
xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">");
sXmlDrawing.WriteString(L"<xdr:absoluteAnchor><xdr:pos x=\"0\" y=\"0\"/><xdr:ext cx=\"2946400\" cy=\"2057400\"/>");
this->xfrm.Init();
this->xfrm->offX = 0; this->xfrm->offY = 0; this->xfrm->extX = 0; this->xfrm->extY = 0;
NSBinPptxRW::CXmlWriter oXlsxWriter(XMLWRITER_DOC_TYPE_XLSX);
this->toXmlWriter(&oXlsxWriter);
sXmlDrawing.WriteString(oXlsxWriter.GetXmlString());
sXmlDrawing.WriteString(L"<xdr:clientData/></xdr:absoluteAnchor></xdr:wsDr>");
NSFile::CFileBinary::SaveToFile(sDrawingsPath + FILE_SEPARATOR_STR + L"drawing1.xml", sXmlDrawing.GetData());
std::wstring sDrawingRels = L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n\
<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\
<Relationship Target=\"../charts/chart1.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\" \
Id=\"" + chartRec->id_data->ToString() + L"\"/></Relationships>";
NSFile::CFileBinary::SaveToFile(sDrawingsPath + FILE_SEPARATOR_STR + L"drawing1.xml", sXmlDrawing.GetData());
NSFile::CFileBinary::SaveToFile(sDrawingsPath + FILE_SEPARATOR_STR + L"_rels" + FILE_SEPARATOR_STR + L"drawing1.xml.rels", sDrawingRels);
//-----------------
std::wstring sChartSheet = L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n\
<chartsheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" \
xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" \
xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\">\
<sheetPr/><sheetViews><sheetView showGridLines=\"0\" workbookViewId=\"0\"/></sheetViews><sheetData/><drawing r:id=\"rId1\"/></chartsheet>";
std::wstring sChartSheetRels = L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n\
<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\
<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\" Target=\"../drawings/drawing1.xml\"/>\
</Relationships>";
NSFile::CFileBinary::SaveToFile(sChartSheetsPath + FILE_SEPARATOR_STR + L"sheet1.xml", sChartSheet);
NSFile::CFileBinary::SaveToFile(sChartSheetsPath + FILE_SEPARATOR_STR + L"_rels" + FILE_SEPARATOR_STR + L"sheet1.xml.rels", sChartSheetRels);
//-----------------
std::wstring sWorkbookData;
NSFile::CFileBinary::ReadAllTextUtf8(sXlPath + FILE_SEPARATOR_STR + L"workbook.xml", sWorkbookData);
int pos = (int)sWorkbookData.find(L"<sheets>");
if (pos > 0)
{
pos += 8;//
std::wstring sNewWorkbookData = sWorkbookData.substr(0, pos) +
L"<sheet name=\"Chart1\" sheetId=\"2\" state=\"visible\" r:id=\"csId1\"/>" + sWorkbookData.substr(pos);
NSFile::CFileBinary::SaveToFile(sXlPath + FILE_SEPARATOR_STR + L"workbook.xml", sNewWorkbookData);
}
std::wstring sWorkbookRelsData;
NSFile::CFileBinary::ReadAllTextUtf8(sXlPath + FILE_SEPARATOR_STR + L"_rels" + FILE_SEPARATOR_STR + L"workbook.xml.rels", sWorkbookRelsData);
pos = (int)sWorkbookRelsData.find(L"</Relationships>");
if (pos > 0)
{
std::wstring sNewWorkbookRelsData = sWorkbookRelsData.substr(0, pos) +
L"<Relationship Id=\"csId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\" \
Target=\"chartsheets/sheet1.xml\"/>" + sWorkbookRelsData.substr(pos);
NSFile::CFileBinary::SaveToFile(sXlPath + FILE_SEPARATOR_STR + L"_rels" + FILE_SEPARATOR_STR + L"workbook.xml.rels", sNewWorkbookRelsData);
}
//-----------------
std::wstring sContentTypesData;
NSFile::CFileBinary::ReadAllTextUtf8(sUnpackedXlsx + FILE_SEPARATOR_STR + L"[Content_Types].xml", sContentTypesData);
pos = (int)sContentTypesData.find(L"</Types>");
if (pos > 0)
{
std::wstring sNewContentTypesData = sContentTypesData.substr(0, pos) +
L"<Override PartName=\"/xl/chartsheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\"/>\
<Override PartName=\"/xl/charts/chart1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>\
<Override PartName=\"/xl/drawings/drawing1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.drawing+xml\"/>"
+ sContentTypesData.substr(pos);
NSFile::CFileBinary::SaveToFile(sUnpackedXlsx + FILE_SEPARATOR_STR + L"[Content_Types].xml", sNewContentTypesData);
}
pChart->m_oChartSpace.m_externalData = keepExternalData;
//-------------------------------------------------------
std::wstring sPackedXlsx = sTempDirectory + FILE_SEPARATOR_STR + (L"xlsx_package.xlsx");
if (S_OK != oCOfficeUtils.CompressFileOrDirectory(sUnpackedXlsx, sPackedXlsx, true)) return L"";
NSDirectory::DeleteDirectory(sUnpackedXlsx);
return sPackedXlsx;
}
} // namespace Logic
} // namespace PPTX