Commit c4068d88 authored by 赖纪均's avatar 赖纪均

V2.0.2.0 新增 By Ray 2020-08-24

合并上海版功能
parents

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

This diff is collapsed.
This diff is collapsed.
#include "StdAfx.h"
#include "BookInfo.h"
#include "BookDal.h"
#include "MyReader-DUI-MFC.h"
const CString CatalogListItems[]={_T("幼儿园"),_T("一年级"),_T("二年级"),_T("三年级"),_T("四年级"),_T("五年级"),_T("六年级"),_T("七年级"),_T("八年级"),_T("九年级"),_T("高中一年级"),_T("高中二年级"),_T("高中三年级")};
CBookInfo::CBookInfo(void)
{
id=0;
bookId=_T("");
bookName=_T("");
catalogId=0;
bookCoverPath=_T("");
bookTextPath=_T("") ;
//bookType=Book_Type::None;
bookState=Download_None;
recentNo=0;
noteid=0;
notesCount=0;
resCount=0;
exist = 1;
strSubjectId = _T("");
strDownloadUrl = _T("");
strDownloadSize = _T("");
strFileSize = _T("");
iTerm =0;
iGrade =0;
orderNo = 0;
strCoverDigest = _T("");
strFileDigest = _T("");
unionId=0;
applicableTerm = _T("0");
startPage = 0;
lastPage=0;
nIsHoistory=0;
nIsMoved=0;
bIsSelect=false;
nResource=0;
nDiandu=0;
nExercise=0;
strSecurityKey="None";
//Add By Ray 2020-07-14
bookType = PDF_Book;
}
CBookInfo::~CBookInfo(void)
{
}
bool CBookInfo::CompareBookInfo(CBookInfo booInfo,int id)
{
return(id==booInfo.id);
}
int CBookInfo::GetTerm()
{
if(iTerm==0)
{
iTerm=1;
CBookDal dao;
CString catalogName=dao.GetFullCatalogName(catalogId);
if(catalogName.Find(_T("第二学期"))>=0)
{
iTerm=2;
}
}
//iTerm=1;
return iTerm;
}
int CBookInfo::GetGrade()
{
if(iGrade==0)
{
CBookDal dao;
CString catalogName=dao.GetFullCatalogName(catalogId);
if (catalogName.GetLength() > 0)
{
CString strTemp = _T("");
int iPos = catalogName.Find(_T("年级"));
if (iPos != -1 && iPos >= 1)
strTemp = catalogName.Left(iPos + 2);
for(int i=0;i<13;i++)
{
if(CatalogListItems[i]==strTemp)
{
iGrade=i;
break;
}
}
}
}
return iGrade;
}
bool CBookInfo::ComparPdfInfoByOrder(CBookInfo lhs,CBookInfo rhs)
{
return (lhs).orderNo<(rhs).orderNo;
};
\ No newline at end of file
#pragma once
enum RESOURCE_TYPE
{
RESOURCE_MP3,
RESOURCE_MP4,
RESOURCE_FILE
};
struct RESOURCE_INFO
{
int x;
int y;
int page;
CString fileName;
CString itemName;
int nType;
int nPageHeight;
int nPageWidth;
};
struct EXERCISE_INFO
{
int x;
int y;
int w;
int h;
int page;
CString fileAct;
CString itemIcon;
int pageheight;
int pagewidth;
};
typedef std::vector<RESOURCE_INFO> ListResource;
typedef std::vector<EXERCISE_INFO> ListExercise;
enum Book_State
{
Download_Not_Exist = -3,
Download_Fail = -2,
Download_None = -1,
Download_OK = 0,
Download_Wait = 1,
Download_Pause = 2,
Download_Continue = 3,
Download_Cover_Import = 4,
Download_Cover_OK = 5,
Download_Doing = 6,
Download_Book_OK = 7
};
//Add By Ray 2020-07-15
enum CompoundRes_State
{
CompoundRES_Download_None = -1,
CompoundRES_Download_Pause = 2,
CompoundRES_Download_Doing = 3,
CompoundRES_Download_OK = 1
};
enum Book_Type
{
None = 0,
PDF_Book = 1,
EPUB_Book = 2,
TXT_Book = 3,
ALL_Book = 4,
PDF_TOOL_BOOK = 5,
//Add By Ray 2020-07-14
PDF_COMPOUNDS_RES_BOOK=6
};
enum Book_Grade
{
GRADE1=1,
GRADE2=2,
GRADE3=3,
GRADE4=4,
GRADE5=5,
GRADE6=6,
GRADE7=7,
GRADE8=8,
GRADE9=9,
GRADE10=10,
GRADE11=11,
GRADE12=12,
};
enum Book_Term
{
TERM1=1,
TERM2=2,
TERM3=3,
TERM4=4,
};
static CString Book_Grade_Name[]=
{
L"无",
L"一年级",
L"二年级",
L"三年级",
L"四年级",
L"五年级",
L"六年级",
L"七年级",
L"八年级",
L"九年级",
L"十年级",
L"十一年级",
L"十二年级"
};
static CString Book_Term_Name[]=
{
L"无",
L"第一学期",
L"第二学期",
L"第三学期",
L"第四学期"
};
struct BOOK_GRADE_CLASS
{
CString strBookId;
CString strGradeName;
CString strClassName;
int grade_order;
int term_order;
};
struct BOOK_CLOUDNOTE_COUNT
{
CString strBookId;
int nCloudNoteNum;
};
class CBookInfo
{
public:
CBookInfo(void);
~CBookInfo(void);
bool CompareBookInfo(CBookInfo booInfo,int id);
int GetTerm();
int GetGrade();
int id;
CString bookId ;
CString bookName;
int catalogId;
CString bookCoverPath;
CString bookTextPath ;
Book_Type bookType;
Book_State bookState;
long recentNo;
long noteid;//打开位置
int notesCount; //笔记数目
int resCount; //资源数目
int exist;
CString strSubjectId;
CString strDownloadUrl;
CString strDownloadSize;
CString strFileSize;
int orderNo;
CString strCoverDigest;
CString strFileDigest;
int unionId;
CString applicableTerm;//书籍可用学期
int startPage; //图书正起始页文
//Add By Ray 2018-06-11
CString updatetime;
CString strFileName;
int nNoteNum;
int nIsMoved; //是否在书桌显示
CString strYear;
//1=True 0=False
int nDiandu;
int nExercise;
int nResource;
CString strDiandu_URL;
CString strExercise_URL;
CString strPageExerciseURL;
CString strGrade;
int lastPage;
CRect DrawPos;
float BookPos;
int nIsHoistory;
std::vector<BOOK_GRADE_CLASS> m_grade_list;
string strSecurityKey;
bool bIsSelect;//当前是否被选中
CString strShortName;//书籍简称
static bool ComparPdfInfoByOrder(CBookInfo lhs,CBookInfo rhs);
private:
int iTerm;//书所在的学期
int iGrade;
};
#include "stdafx.h"
#include "CompoundResDownload.h"
#include "BookDal.h"
#include "curl/CURL_download.h"
#include "Function.h"
#include "MyReader-DUI-MFC.h"
CCompoundResDownload::CCompoundResDownload(void)
{
m_strDBPath = _T("");
StartDownLoad();
}
CCompoundResDownload::~CCompoundResDownload(void)
{
}
// download book list
//static std::vector<COMPOUNDRES> g_DownloadCompoundResList;
COMPOUNDRES g_MainDownloadCompoundRes;//当前正在下载
LONGLONG CCompoundResDownload::m_downloaded_filesize = 0;
LONGLONG CCompoundResDownload::m_last_size = 0;
CBookDal* CCompoundResDownload::m_pBookDal = NULL;
CCompoundResourceMap* CCompoundResDownload::m_pCompoundResMap =NULL;
static int ProgressCallback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
if (CCompoundResDownload::m_pCompoundResMap->GetSizeOfMap() == 0)
return -1;
bool bDownload = false;
//////////////////////////////////////////////////////////////////////
COMPOUNDRES* Temp_CompoundResData;
if(CCompoundResDownload::m_pCompoundResMap->FindResData(g_MainDownloadCompoundRes.strResID,*Temp_CompoundResData))
{
Temp_CompoundResData->nStatus =CompoundRes_State::CompoundRES_Download_Doing;
bDownload = true;
}
//////////////////////////////////////////////////////////////////////
/*std::vector<COMPOUNDRES>::iterator iter = g_DownloadCompoundResList.begin();
for (; iter != g_DownloadCompoundResList.end(); ++iter)
{
if ((*iter).strResID ==g_MainDownloadCompoundRes.strResID)
{
if ((*iter).nStatus == CompoundRes_State::CompoundRES_Download_Doing)
{
bDownload = true;
break;
}
}
}*/
if (!bDownload)
{
CCompoundResDownload::DownloadStatus(-1, -1);
return -1;
}
if ( dltotal > -0.1 && dltotal < 0.1 )
return 0;
//if (CDownloadBooks::m_end)
{
CCompoundResDownload::DownloadStatus(dlnow+CCompoundResDownload::m_downloaded_filesize, dltotal+CCompoundResDownload::m_downloaded_filesize);
}
return 0;
}
BOOL CCompoundResDownload::InitialPath()
{
m_strDBPath = theApp.m_strUserDbPath;
CreateDirectory(m_strDownloadDir, NULL);
CCompoundResDownload::m_pBookDal = new CBookDal;
CCompoundResDownload::m_pCompoundResMap = new CCompoundResourceMap ;
if (CCompoundResDownload::m_pBookDal == NULL)
return FALSE;
::InitializeCriticalSection( &m_cs);
//m_Log.WriteLog(_T("m_strDownloadDir is %s"), m_strDownloadDir);
return TRUE;
}
void CCompoundResDownload::DownloadStatus(unsigned long ulDownloadSize, unsigned long ulFileSize)
{
if (ulDownloadSize == -1 && ulFileSize == -1)
{
// ::PostMessage(CDownloadBooks::m_hParentWnd, WM_UPDATE_DATA_PROGRESS, (WPARAM)-1, (LPARAM)CDownloadBooks::m_sBookInfo.id);
return;
}
//CDownloadBooks::m_alive = TRUE;
//////////修改内存/////////////////////
COMPOUNDRES* Temp_CompoundResData =new COMPOUNDRES;
if(CCompoundResDownload::m_pCompoundResMap->FindResData(g_MainDownloadCompoundRes.strResID,*Temp_CompoundResData))
{
Temp_CompoundResData->llDownloadedSize =ulDownloadSize;
Temp_CompoundResData->llFileSize =ulFileSize;
}
////////////////////////////////////////
if (ulDownloadSize == ulFileSize)
{
// bookDal.UpdateBookInfoExistById(CDownloadBooks::m_sBookInfo->id, 1);
CCompoundResDownload::m_pBookDal->UpdateCompoundResDownloadSizeById(g_MainDownloadCompoundRes.strResID,ulDownloadSize,ulFileSize);
CCompoundResDownload::m_pBookDal->UpdateCompoundResStateById(g_MainDownloadCompoundRes.strResID, CompoundRes_State::CompoundRES_Download_OK);//下载完成
//::PostMessage(CDownloadBooks::m_hParentWnd, WM_UPDATE_DATA_PROGRESS, (WPARAM)strSize.AllocSysString(), (LPARAM)CDownloadBooks::m_sBookInfo.id);
}
//更新全局下载数值
if (g_MainDownloadCompoundRes.strResID != "")
{
// CDownloadBooks::m_pBookDal->UpdateBookDownloadSizeByBookId(CDownloadBooks::m_sBookInfo->bookId, strDownloadSize, strFileSize);
unsigned long span = ulFileSize/20;
if ((ulDownloadSize-CCompoundResDownload::m_last_size)>span)
{
//:PostMessage(CDownloadBooks::m_hParentWnd, WM_UPDATE_DATA_PROGRESS, (WPARAM)strSize.AllocSysString(), (LPARAM)CDownloadBooks::m_sBookInfo.id);
CCompoundResDownload::m_last_size = ulDownloadSize;
}
}
}
//下载策略线程
int funDownLoadProc()
{
Sleep(100);
//CCompoundResDownload *pCU = (CCompoundResDownload*)lpParameter;
TCHAR dir[256] = {0};
TCHAR zip[256] = {0};
CCompoundResDownload::m_last_size = 0;
CURL_download curl_down;
CFunction fun;
CString strZipName = g_MainDownloadCompoundRes.strURL;
CString strName = _T("");
int pos = strZipName.ReverseFind('/');
if (pos > 0)
{
strName = strZipName.Right(strZipName.GetLength() - pos - 1);
CString strTempType = strName.Mid(strName.GetLength()-4,4);
if(strTempType!=L".dcz")
{
int tempPos =strName.Find(_T(".dcz"));
if(tempPos>=0)
{
strName =strName.Mid(0,tempPos+4);
}
else
{
return FALSE;
}
}
}
else
{
return FALSE;
}
CString strBookid = g_MainDownloadCompoundRes.strBookUuid;
CString path=theApp.m_strPublic_Path+strBookid+L"\\";
wsprintf(dir, path);
//TCHAR *sId = strBookid.GetBuffer(strBookid.GetLength());
path+=strName;
if (strName.GetLength() > 0)
wsprintf(zip, path);
long lRet = curl_down.download(fun.UnicodeToAscii(g_MainDownloadCompoundRes.strURL), fun.UnicodeToAscii(zip), 60, ProgressCallback);
}
//下载队列
DWORD WINAPI funDownLoadList(LPVOID lpParameter)
{
CCompoundResDownload* pDownloadLists = (CCompoundResDownload *)lpParameter;
//pDownloadBooks->m_Log.WriteLog(_T("DownloadListManager Start!"));
int count = 3;
while (TRUE && !g_bExit)
{
//if (g_bExit) break;
if(pDownloadLists==NULL)
{
continue;
}
if (CCompoundResDownload::m_pCompoundResMap->GetSizeOfMap()==0)
{
Sleep(1000);
continue;
}
// CBookInfo bookinfo = g_DownloadList.front();
//CDownloadBooks::m_iStep = 0;
//pDownloadBooks->m_Log.WriteLog(_T("Download book Start "));
//取出要下载的
if(CCompoundResDownload::m_pCompoundResMap->GetFirstNeedDownLoadData(g_MainDownloadCompoundRes))
{
//下载
funDownLoadProc();
}
//pDownloadBooks->m_BookInfo = &CCompoundResDownload::m_pCompoundResMap->;
// if (pDownloadBooks->m_BookInfo == nullptr)
// continue;
// if (pDownloadBooks->m_BookInfo && pDownloadBooks->m_BookInfo->bookState != Download_Doing)
// continue;
//PostMessage(pDownloadBooks->m_hWnd, WM_WRITE_LOG, 0, (LPARAM)OP_DOWNLOAD_BOOK_START);
//pDownloadBooks->m_Log.WriteLog(_T("Download book Start 1, bookid='%s' "), pDownloadBooks->m_BookInfo->bookId);
// pDownloadBooks->m_strPdfName = _T("");
// ResetEvent(pDownloadBooks->m_hDownloadEvent);
// CDownloadBooks::m_sBookInfo = *pDownloadBooks->m_BookInfo;
// CDownloadBooks::m_alive = FALSE;
//PostMessage(pDownloadBooks->m_hWnd, DOWNLOAD_BOOK_COMPLETE, (WPARAM)(pDownloadBooks->m_BookInfo->bookId.AllocSysString()), 0);
//pDownloadBooks->m_DownloadHandle= pDownloadBooks->StartDownloadThread(pDownloadBooks);
/*if (NULL!=pDownloadBooks->m_DownloadHandle)
{
//pDownloadBooks->m_Log.WriteLog(_T("Download book OK bookId=%s"), CDownloadBooks::m_sBookInfo.bookId);
Sleep(1000);
const BYTE TOTAL = 3;
count = TOTAL;
DWORD ret = WAIT_TIMEOUT;
while (count>0)
{
ret = WaitForSingleObject(pDownloadBooks->m_hDownloadEvent, 2*60*1000); //2分钟
if (WAIT_OBJECT_0==ret)
{
break;
}
if (CDownloadBooks::m_alive)
{
count = TOTAL;
CDownloadBooks::m_alive = FALSE;
}
else
{
count--;
}
}
if (WAIT_OBJECT_0!=ret)
{
// 当前下载出问题了
//pDownloadBooks->m_Log.WriteLog(_T("downlaod thread error!"));
pDownloadBooks->m_pCurDownload->m_end = TRUE;
::TerminateThread(pDownloadBooks->m_DownloadHandle, 0);
}
// pDownloadBooks->UpdateDownloadCompleteStatus();
PostMessage(pDownloadBooks->m_hWnd, DOWNLOAD_BOOK_COMPLETE, (WPARAM)(CDownloadBooks::m_sBookInfo.bookId.AllocSysString()), 0);
}
//PostMessage(pDownloadBooks->m_hWnd, WM_WRITE_LOG, 0, (LPARAM)OP_DOWNLOAD_BOOK_END);
//pDownloadBooks->m_Log.WriteLog(_T("download thread end"));
//pDownloadBooks->DeleteDownloadBookFromListByIndex(0);
pDownloadBooks->m_BookInfo = NULL;
// CDownloadBooks::m_sBookInfo = NULL;
}
PostMessage(pDownloadBooks->m_hWnd, DOWNLOAD_BOOK_COMPLETE, 0, 1);
*/
}
::DeleteCriticalSection(&pDownloadLists->m_cs);
//pDownloadBooks->m_Log.WriteLog(_T("DownloadListManager End!"));
return 0;
}
//开始下载
void CCompoundResDownload::StartDownLoad()
{
m_h_thread=CreateThread(NULL,0,funDownLoadList,this,0,NULL);
}
//暂停下载
//更换策略
#pragma once
#include "BookDal.h"
#include "CompoundResourceMap.h"
class CCompoundResDownload
{
public:
CCompoundResDownload(void);
~CCompoundResDownload(void);
static CBookDal* m_pBookDal;
CString m_strDownloadDir;
static LONGLONG m_downloaded_filesize;
static LONGLONG m_last_size;
CRITICAL_SECTION m_cs;
HANDLE m_h_thread;
CString m_strDBPath;
BOOL InitialPath();
static CCompoundResourceMap* m_pCompoundResMap;
void StartDownLoad();
static void DownloadStatus(unsigned long ulDownloadSize, unsigned long ulFileSize);
};
#include "stdafx.h"
#include "CompoundResource.h"
#include "BookDal.h"
#include "MakeReqData.h"
CCompoundResource::CCompoundResource(void)
{
CheckDB();
}
CCompoundResource::~CCompoundResource(void)
{
}
void CCompoundResource::CheckDB()
{
m_BookDal.CheckCompoundResourceTable();
}
/*void CCompoundResource::SetCompoundResourceToDB()
{
}*/
void CCompoundResource::MergeCompoundResource()
{
if(m_vc_BookCompoundRes.size()>0)
{
//比对数据源与本地库ResID 若存在 则比较MD5 相同不处理,不同则删除原先数据后插入新数据
//vector<COMPOUNDRES> Vector_LocalCompoundResData =LoadCompoundResourceFromLocalDB();
for(int nSize =0;nSize <m_vc_BookCompoundRes.size();nSize++)
{
COMPOUNDRES SearchRes;
if(SearchResIDInDB(m_vc_BookCompoundRes.at(nSize).strResID,SearchRes))
{
//如果本地有相同ResID,判断MD5-- 不同 则删除该笔后 插入新数据
if (SearchRes.strMD5.Compare(m_vc_BookCompoundRes.at(nSize).strMD5)!=0)
{
DeleteResDataByResID(SearchRes.strMD5);
InsertResData(m_vc_BookCompoundRes.at(nSize));
}
}else
{
//无ResID则新增
InsertResData(m_vc_BookCompoundRes.at(nSize));
}
}
}
}
/*vector<COMPOUNDRES> CCompoundResource::LoadCompoundResourceFromLocalDB()
{
}*/
void CCompoundResource::DeleteResDataByResID(CString strResID)
{
m_BookDal.DeleteResDataByResID(strResID);
}
void CCompoundResource::InsertResData(COMPOUNDRES ResData)
{
m_BookDal.InsertCompoundResourceData(ResData);
}
BOOL CCompoundResource::GetAllCompoundResourceByBookID(vector<CBookInfo>BookInfos)
{
BOOL bRet =FALSE;
vector<CString> str_Vc_ResIDs;
vector<COMPOUNDRES> CompoundResourcesData;
//筛选出BookType=复合型教材的书籍
for(int nSize=0;nSize<BookInfos.size();nSize++)
{
CBookInfo bookInfoTemp;
bookInfoTemp =BookInfos.at(nSize);
if(bookInfoTemp.bookType ==Book_Type::PDF_COMPOUNDS_RES_BOOK)
{
str_Vc_ResIDs.push_back(bookInfoTemp.bookId);
}
}
//取得复合型教材书籍资料
std::string strRetData;
GetCompoundResouecesFromServer(str_Vc_ResIDs,strRetData);
//解析数据并放入 m_Vector 中
if(ParseCompoundsResData(strRetData,CompoundResourcesData)==TRUE)
{
bRet =TRUE;
}
return bRet;
}
void CCompoundResource::GetCompoundResouecesFromServer(vector<CString>ResIDs,std::string& strRetData)
{
}
BOOL CCompoundResource::SearchResIDInDB(CString strResID,COMPOUNDRES &Res)
{
BOOL bRet =FALSE;
if(m_BookDal.SearchResIDInDB(strResID,Res)==TRUE)
{
bRet =TRUE;
}
return bRet;
}
BOOL CCompoundResource::ParseCompoundsResData(std::string strResData,std::vector<COMPOUNDRES>& CompoundResourcesData)
{
BOOL bRet =FALSE;
return bRet;
}
#pragma once
#include "BookDal.h"
#include <vector>
#include "BookInfo.h"
class CCompoundResource
{
public:
CCompoundResource(void);
~CCompoundResource(void);
CBookDal m_BookDal;
void CheckDB();//检查表是否存在
BOOL GetAllCompoundResourceByBookID(vector<CBookInfo>BookInfos);//1.取得所有Type=复合型教材的数据
//vector<COMPOUNDRES> LoadCompoundResourceFromLocalDB();//2.取得所有本地复合型教材的数据
void MergeCompoundResource();//
// void SetCompoundResourceToDB();
//DB
BOOL SearchResIDInDB(CString strResID,COMPOUNDRES &Res);
void DeleteResDataByResID(CString strResID);
void InsertResData(COMPOUNDRES ResData);
void GetCompoundResouecesFromServer(vector<CString>ResIDs,std::string& strRetData);
BOOL ParseCompoundsResData(std::string strResData,std::vector<COMPOUNDRES>& CompoundResourcesData);
std::vector<COMPOUNDRES> m_vc_BookCompoundRes;
};
#include "stdafx.h"
#include "CompoundResourceMap.h"
#include "BookInfo.h"
#include "Function.h"
#include <string>
CCompoundResourceMap::CCompoundResourceMap(void)
{
for(int n=0;n<3;n++)
{
vector<COMPOUNDRES*> vc_temp;
int nRand=0;
for(int nn=0;nn<2;nn++)
{
COMPOUNDRES* aa =new COMPOUNDRES;
nRand =nn+n;
CString strnum=L"";
strnum.Format(L"RES10%d",nRand);
aa->strResID =strnum;
if(nn==0)
{
aa->nStatus =CompoundRes_State::CompoundRES_Download_OK;
}else
{
aa->nStatus =CompoundRes_State::CompoundRES_Download_None;
aa->llDownloadedSize =300;
aa->llFileSize = 3000;
}
vc_temp.push_back(aa);
}
CString strBookId=L"";
if(n==0)
{
strBookId.Format(L"UUid99%d",n);
}else
{
strBookId.Format(L"UUid00%d",n);
}
AddResData(strBookId,vc_temp);
}
COMPOUNDRES* bb = new COMPOUNDRES;
GetFirstNeedDownLoadData(*bb);
if(bb->strResID !="")
{
AfxMessageBox(bb->strResID);
}
DeleteResData(L"RES003");
}
CCompoundResourceMap::~CCompoundResourceMap(void)
{
}
BOOL CCompoundResourceMap::AddResData(CString strKey,vector<COMPOUNDRES*> v_pCompoundRes)
{
//判断是否有KEY 存在则Erase 后再新增
//for(int nSize=0;nSize<v_pCompoundRes.size();nSize++)
//{
// if(strKey == )
//}student.insert(map<int,string>::value_type(1,"liMing"));
CFunction fun;
std::pair<std::unordered_map<std::string,vector<COMPOUNDRES*>>::iterator,bool>ret;
ret =m_map_CompoundResData.insert(std::unordered_map<std::string,vector<COMPOUNDRES*>>::value_type(fun.UnicodeToAscii(strKey),v_pCompoundRes));
//ret =m_map_CompoundResData.insert(pair<CString,vector<COMPOUNDRES*>>(strKey,v_pCompoundRes));
return ret.second;
}
void CCompoundResourceMap::ClearAllData()
{
BOOL bRet=FALSE;
if(!m_map_CompoundResData.empty())
{
//FirstRes =m_map_CompoundResData.at(0);
std::unordered_map<std::string,std::vector<COMPOUNDRES*>>::iterator it;
for (it = m_map_CompoundResData.begin(); it != m_map_CompoundResData.end(); it++)
{
std::string strBookId = it->first;
std::vector<COMPOUNDRES*> vc_AllResTemp =it->second;
for(int nSize=0;nSize<vc_AllResTemp.size();nSize++)
{
COMPOUNDRES* p_CompoundResData= vc_AllResTemp.at(nSize);
if(p_CompoundResData)
{
delete p_CompoundResData;
p_CompoundResData=NULL;
}
}
vc_AllResTemp.clear();
}
m_map_CompoundResData.clear();
}
}
int CCompoundResourceMap::GetSizeOfMap()
{
return m_map_CompoundResData.size();
}
BOOL CCompoundResourceMap::GetFirstNeedDownLoadData(COMPOUNDRES& FirstRes)
{
BOOL bRet=FALSE;
//找到第一笔 待下载的资源
if(!m_map_CompoundResData.empty())
{
//FirstRes =m_map_CompoundResData.at(0);
std::unordered_map<std::string,std::vector<COMPOUNDRES*>>::iterator it;
for (it = m_map_CompoundResData.begin(); it != m_map_CompoundResData.end(); it++) {
std::string strBookId = it->first;
std::vector<COMPOUNDRES*> vc_AllResTemp =it->second;
for(int nSize=0;nSize<vc_AllResTemp.size();nSize++)
{
COMPOUNDRES* p_CompoundResData= vc_AllResTemp.at(nSize);
//判断下载状态
if((p_CompoundResData->nStatus!=CompoundRes_State::CompoundRES_Download_OK)&&(p_CompoundResData->llDownloadedSize<p_CompoundResData->llFileSize))
{
//需要下载的资源
FirstRes = *p_CompoundResData;
return TRUE;
}
}
}
bRet =TRUE;
}
return bRet;
}
BOOL CCompoundResourceMap::FindResData(CString strResID,COMPOUNDRES& FindRes)
{
//对所有Map 查找
BOOL bRet=FALSE;
//找到符合的资源
if(!m_map_CompoundResData.empty())
{
//FirstRes =m_map_CompoundResData.at(0);
std::unordered_map<std::string,std::vector<COMPOUNDRES*>>::iterator it;
for (it = m_map_CompoundResData.begin(); it != m_map_CompoundResData.end(); it++)
{
std::string strBookId = it->first;
std::vector<COMPOUNDRES*> vc_AllResTemp =it->second;
for(int nSize=0;nSize<vc_AllResTemp.size();nSize++)
{
COMPOUNDRES* p_CompoundResData= vc_AllResTemp.at(nSize);
if((p_CompoundResData->strResID==strResID))
{
//查找的资源
FindRes = *p_CompoundResData;
return TRUE;
}
}
}
}
return bRet;
//返回改笔数据
}
void CCompoundResourceMap::DeleteResData(CString strResID)
{
//对所有Map 查找
BOOL bRet=FALSE;
//找到符合的资源
if(!m_map_CompoundResData.empty())
{
//FirstRes =m_map_CompoundResData.at(0);
std::unordered_map<std::string,std::vector<COMPOUNDRES*>>::iterator it;
for (it = m_map_CompoundResData.begin(); it != m_map_CompoundResData.end(); it++)
{
std::string strBookId = it->first;
std::vector<COMPOUNDRES*> vc_AllResTemp =it->second;
std::vector<COMPOUNDRES*>::iterator it2 =vc_AllResTemp.begin();
for(it2 = vc_AllResTemp.begin(); it2 != vc_AllResTemp.end(); it2++)
{
COMPOUNDRES* p_CompoundResData= *it2;
if((p_CompoundResData->strResID==strResID))
{
//需要删除的资源
if(p_CompoundResData)
{
delete p_CompoundResData;
p_CompoundResData=NULL;
}
vc_AllResTemp.erase(it2++);
return;
}
}
}
}
}
#pragma once
#include <unordered_map>
#include <vector>
#include<hash_map>
using namespace std;
struct CharLess : public binary_function<const char*, const char*, bool>
{
public:
result_type operator()(const first_argument_type& _Left, const second_argument_type& _Right) const
{
return(stricmp(_Left, _Right) < 0 ? true : false);
}
};
struct COMPOUNDRES
{
int nType;
CString strURL;
CString strLocalPath;
CString strMD5;
LONGLONG llFileSize;
LONGLONG llDownloadedSize;
CString strDesc;
int nStatus;
CString strResID;
CString strBookUuid;
int nPage;
};
struct StringHasher {
size_t operator()(const std::string& t) const {
//calculate hash here.
return true;
}
};
/*unsigned int JSHash(const char *str)
{
unsigned int hash = 1315423911;
while(*str)
{
hash ^= ((hash<< 5) + (*str++) + (hash>>2));
}
return (hash & 0x7FFFFFFF);
}
struct StrHash
{
size_t operator()(const string &s) const
{
return JSHash(s.c_str());
}
};*/
struct StrCompare
{
bool operator()(const string &a, const string &b) const
{
if(a.compare(b))
{
return true;
}
else
{
return false;
}
}
};
//template<class T>
/*struct pair_hash: public std::binary_function<T, T, bool>
{
bool operator()(T lhs,T rhs) const
{
return true;
}
};*/
class CCompoundResourceMap
{
public:
CCompoundResourceMap(void);
~CCompoundResourceMap(void);
//查询大小
int GetSizeOfMap();
//返回第一笔待下载数据
BOOL GetFirstNeedDownLoadData(COMPOUNDRES& FirstRes);
//新增数据
BOOL AddResData(CString strKey,vector<COMPOUNDRES*> v_pCompoundRes);
//查询指定ResID数据
BOOL FindResData(CString strResID,COMPOUNDRES& FindRes);
//更新数据
void UpdateResData(CString strResID);
//删除数据
void DeleteResData(CString strResID);
//清空数据
void ClearAllData();
private:
std::unordered_map<string,std::vector<COMPOUNDRES*>,StringHasher> m_map_CompoundResData;
};
#include "Base64.h"
#include "pgmspace.h"
const char PROGMEM b64_alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
/* 'Private' declarations */
inline void a3_to_a4(unsigned char * a4, unsigned char * a3);
inline void a4_to_a3(unsigned char * a3, unsigned char * a4);
inline unsigned char b64_lookup(char c);
int base64_encode(char *output, char *input, int inputLen) {
int i = 0, j = 0;
int encLen = 0;
unsigned char a3[3];
unsigned char a4[4];
while(inputLen--) {
a3[i++] = *(input++);
if(i == 3) {
a3_to_a4(a4, a3);
for(i = 0; i < 4; i++) {
output[encLen++] = pgm_read_byte(&b64_alphabet[a4[i]]);
}
i = 0;
}
}
if(i) {
for(j = i; j < 3; j++) {
a3[j] = '\0';
}
a3_to_a4(a4, a3);
for(j = 0; j < i + 1; j++) {
output[encLen++] = pgm_read_byte(&b64_alphabet[a4[j]]);
}
while((i++ < 3)) {
output[encLen++] = '=';
}
}
output[encLen] = '\0';
return encLen;
}
int base64_decode(char * output, char * input, int inputLen) {
int i = 0, j = 0;
int decLen = 0;
unsigned char a3[3];
unsigned char a4[4];
while (inputLen--) {
if(*input == '=') {
break;
}
a4[i++] = *(input++);
if (i == 4) {
for (i = 0; i <4; i++) {
a4[i] = b64_lookup(a4[i]);
}
a4_to_a3(a3,a4);
for (i = 0; i < 3; i++) {
output[decLen++] = a3[i];
}
i = 0;
}
}
if (i) {
for (j = i; j < 4; j++) {
a4[j] = '\0';
}
for (j = 0; j <4; j++) {
a4[j] = b64_lookup(a4[j]);
}
a4_to_a3(a3,a4);
for (j = 0; j < i - 1; j++) {
output[decLen++] = a3[j];
}
}
output[decLen] = '\0';
return decLen;
}
int base64_enc_len(int plainLen) {
int n = plainLen;
return (n + 2 - ((n + 2) % 3)) / 3 * 4;
}
int base64_dec_len(char * input, int inputLen) {
int i = 0;
int numEq = 0;
for(i = inputLen - 1; input[i] == '='; i--) {
numEq++;
}
return ((6 * inputLen) / 8) - numEq;
}
inline void a3_to_a4(unsigned char * a4, unsigned char * a3) {
a4[0] = (a3[0] & 0xfc) >> 2;
a4[1] = ((a3[0] & 0x03) << 4) + ((a3[1] & 0xf0) >> 4);
a4[2] = ((a3[1] & 0x0f) << 2) + ((a3[2] & 0xc0) >> 6);
a4[3] = (a3[2] & 0x3f);
}
inline void a4_to_a3(unsigned char * a3, unsigned char * a4) {
a3[0] = (a4[0] << 2) + ((a4[1] & 0x30) >> 4);
a3[1] = ((a4[1] & 0xf) << 4) + ((a4[2] & 0x3c) >> 2);
a3[2] = ((a4[2] & 0x3) << 6) + a4[3];
}
inline unsigned char b64_lookup(char c) {
if(c >='A' && c <='Z') return c - 'A';
if(c >='a' && c <='z') return c - 71;
if(c >='0' && c <='9') return c + 4;
if(c == '+') return 62;
if(c == '/') return 63;
return -1;
}
/*
* Copyright (c) 2013 Adam Rudd.
* See LICENSE for more information
*/
#ifndef _BASE64_H
#define _BASE64_H
/* b64_alphabet:
* Description: Base64 alphabet table, a mapping between integers
* and base64 digits
* Notes: This is an extern here but is defined in Base64.c
*/
extern const char b64_alphabet[];
/* base64_encode:
* Description:
* Encode a string of characters as base64
* Parameters:
* output: the output buffer for the encoding, stores the encoded string
* input: the input buffer for the encoding, stores the binary to be encoded
* inputLen: the length of the input buffer, in bytes
* Return value:
* Returns the length of the encoded string
* Requirements:
* 1. output must not be null or empty
* 2. input must not be null
* 3. inputLen must be greater than or equal to 0
*/
int base64_encode(char *output, char *input, int inputLen);
/* base64_decode:
* Description:
* Decode a base64 encoded string into bytes
* Parameters:
* output: the output buffer for the decoding,
* stores the decoded binary
* input: the input buffer for the decoding,
* stores the base64 string to be decoded
* inputLen: the length of the input buffer, in bytes
* Return value:
* Returns the length of the decoded string
* Requirements:
* 1. output must not be null or empty
* 2. input must not be null
* 3. inputLen must be greater than or equal to 0
*/
int base64_decode(char *output, char *input, int inputLen);
/* base64_enc_len:
* Description:
* Returns the length of a base64 encoded string whose decoded
* form is inputLen bytes long
* Parameters:
* inputLen: the length of the decoded string
* Return value:
* The length of a base64 encoded string whose decoded form
* is inputLen bytes long
* Requirements:
* None
*/
int base64_enc_len(int inputLen);
/* base64_dec_len:
* Description:
* Returns the length of the decoded form of a
* base64 encoded string
* Parameters:
* input: the base64 encoded string to be measured
* inputLen: the length of the base64 encoded string
* Return value:
* Returns the length of the decoded form of a
* base64 encoded string
* Requirements:
* 1. input must not be null
* 2. input must be greater than or equal to zero
*/
int base64_dec_len(char *input, int inputLen);
#endif // _BASE64_H
#ifndef __PGMSPACE_H_
#define __PGMSPACE_H_ 1
//#include <inttypes.h>
#include <stdint.h>
#define PROGMEM
#define PGM_P const char *
#define PSTR(str) (str)
#define _SFR_BYTE(n) (n)
typedef void prog_void;
typedef char prog_char;
typedef unsigned char prog_uchar;
typedef int8_t prog_int8_t;
typedef uint8_t prog_uint8_t;
typedef int16_t prog_int16_t;
typedef uint16_t prog_uint16_t;
typedef int32_t prog_int32_t;
typedef uint32_t prog_uint32_t;
#define memcpy_P(dest, src, num) memcpy((dest), (src), (num))
#define strcpy_P(dest, src) strcpy((dest), (src))
#define strcat_P(dest, src) strcat((dest), (src))
#define strcmp_P(a, b) strcmp((a), (b))
#define strstr_P(a, b) strstr((a), (b))
#define strlen_P(s) strlen((const char *)(s))
#define sprintf_P(s, f, ...) sprintf((s), (f), __VA_ARGS__)
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
#define pgm_read_dword(addr) (*(const unsigned long *)(addr))
#define pgm_read_float(addr) (*(const float *)(addr))
#define pgm_read_byte_near(addr) pgm_read_byte(addr)
#define pgm_read_word_near(addr) pgm_read_word(addr)
#define pgm_read_dword_near(addr) pgm_read_dword(addr)
#define pgm_read_float_near(addr) pgm_read_float(addr)
#define pgm_read_byte_far(addr) pgm_read_byte(addr)
#define pgm_read_word_far(addr) pgm_read_word(addr)
#define pgm_read_dword_far(addr) pgm_read_dword(addr)
#define pgm_read_float_far(addr) pgm_read_float(addr)
#endif
#include "stdafx.h"
#include "BookDir.h"
#include <direct.h>
#define TYPE_USER 0
#define TYPE_PUBLIC 1
CBookDir::CBookDir(std::string uid,std::string bookid,int nType/*User目录或Public目录*/)
{
//Add Comment By Ray 2018-05-29
//调用时检查BOOKID DIR 是否存在
m_current_uid=uid;
m_current_bookid =bookid;
m_nType =nType;
std::string user_root_path="";
std::string book_root_path="";
if(nType==TYPE_USER)
{
std::string rootPath=getCurrentDir().append("\\source\\user\\");
user_root_path.append(rootPath);
user_root_path.append(uid);
user_root_path.append("\\");
book_root_path=book_root_path.append(user_root_path);//取得rootpath+userId
book_root_path.append(bookid);
book_root_path.append("\\");//取得完整rootpath+userId+bookId
}else if(nType==TYPE_PUBLIC)
{
std::string rootPath=getCurrentDir().append("\\source\\public\\");
user_root_path.append(rootPath);
book_root_path=book_root_path.append(user_root_path);//取得rootpath
book_root_path.append(bookid);
book_root_path.append("\\");//取得完整rootpath+bookId
}
//增加书籍ID
if(!isFileExist(book_root_path,0))//检查BOOKID DIR 是否存在
{
if(creatBookRootDir(book_root_path))//创建书籍根目录
{
m_user_book_path=book_root_path;
}
}
else
{
m_user_book_path=book_root_path;
}
//若非Pubic Type判断数据库是否存在
if(nType==TYPE_USER)
{
if(m_user_book_path.length()>0)
{
std::string FilePath=m_user_book_path;
FilePath.append("PrivateNote.db");
if(!isFileExist(FilePath,1))
{
if(CopyUserBookNoteDbFile(FilePath))
m_user_book_PrivateNote_db_path=FilePath;
//创建数据库文件
}
else
m_user_book_PrivateNote_db_path=FilePath;
}
}
}
CBookDir::~CBookDir(void)
{
}
std::string CBookDir::getCurrentDir()
{
char szFilePath[MAX_PATH + 1]={0};
GetModuleFileNameA(NULL, szFilePath, MAX_PATH);
(strrchr(szFilePath, '\\'))[0] = 0; // 删除文件名,只获得路径字串
string path = szFilePath;
return path;
}
bool CBookDir::creatBookRootDir(std::string rootPath)
{
bool bRet=false;
if (_mkdir(rootPath.c_str()) == 0)
bRet=true;
return bRet;
}
bool CBookDir::isFileExist(std::string dir,int type)
{
DWORD dwAttrib = GetFileAttributesA(dir.c_str());
if(type==0)
return INVALID_FILE_ATTRIBUTES != dwAttrib && 0 != (dwAttrib & FILE_ATTRIBUTE_DIRECTORY);
else
return INVALID_FILE_ATTRIBUTES != dwAttrib && 0 == (dwAttrib & FILE_ATTRIBUTE_DIRECTORY);
}
std::string CBookDir::getBookRootPath()
{
return m_user_book_path;
}
std::string CBookDir::getBookNoteDbPath()
{
return m_user_book_PrivateNote_db_path;
}
bool CBookDir::CopyUserBookNoteDbFile(std::string path)
{
//Add By Ray 2018-05-30
//Cpoy Original DB from OrgDB Dir
bool bRet=false;
CStdioFile file;
CString strPath=(CString)path.c_str();
std::string rootPath=getCurrentDir().append("\\source\\user\\");
rootPath.append("orgDB\\PrivateNote.db");
bRet = CopyFileA(rootPath.c_str(),path.c_str(),TRUE);
DWORD a= GetLastError();
return bRet;
}
#pragma once
/*
@功能:登陆用户本地文件夹书籍结构的创建维护
@构造:传入登陆用户的id,BookID ,Public 或 User库Flag
*/
class CBookDir
{
public:
CBookDir(std::string uid,std::string bookid,int nType);
~CBookDir(void);
private:
std::string m_current_exe_path;//应用程序根目录
std::string m_current_uid;//用户的id
std::string m_current_bookid;//书籍的id
std::string m_user_book_path;//
std::string m_user_book_PrivateNote_db_path;//用户书籍DBpath(PrivateNote.DB)
int m_nType;
bool creatBookRootDir(std::string rootPath);//创建用户的某本书籍数据根目录
bool isFileExist(std::string dir,int type);//文件或者文件夹是否存在 type==0 判断文件夹 type==1 判断文件
std::string static getCurrentDir();
bool CopyUserBookNoteDbFile(std::string path);//创建用户的书籍笔记DB,复制From OrgDB
public:
std::string getBookRootPath();
std::string getBookNoteDbPath();
};
# cmake file for duilib
#Author Qi Gao(monkgau@gmail.com)
#Created: 2012/09/16
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} Root_src)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/Control Control_src)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/Core Core_src)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/Layout Layout_src)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/Utils Utils_src)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Control)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Core)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Layout)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Utils)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
add_library(duilib SHARED ${Control_src} ${Core_src} ${Layout_src} ${Utils_src} ${Root_src})
add_definitions(-DUILIB_EXPORTS)
target_link_libraries(duilib riched20 comctl32)
set_target_properties(duilib PROPERTIES OUTPUT_NAME "duilib")
add_custom_command(TARGET duilib POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_BINARY_DIR}/lib/duilib.dll ${PROJECT_SOURCE_DIR}/bin/duilib.dll)
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
B^D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\STDAFX.CPP
B^D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\STDAFX.CPP
#v4.0:v110_xp:false
Release|Win32|D:\YDJL\Sourcecode\SHgeniusPC - 複製 (2)\ShanghaiObject\|
 XUnzip.cpp
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1137,5): warning MSB8012: TargetPath(D:\YDJL\Sourcecode\SHgeniusPC - 複製 (2)\ShanghaiObject\DuiLib\DuiLib\.\Build\Release\DuiLib.dll) does not match the Linker's OutputFile property value (D:\YDJL\Sourcecode\SHgeniusPC - 複製 (2)\ShanghaiObject\DuiLib\bin\DuiLib_u.dll). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1139,5): warning MSB8012: TargetName(DuiLib) does not match the Linker's OutputFile property value (DuiLib_u). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
Creating library ../Lib/DuiLib_u.lib and object ../Lib/DuiLib_u.exp
DuiLib.vcxproj -> D:\YDJL\Sourcecode\SHgeniusPC - 複製 (2)\ShanghaiObject\DuiLib\DuiLib\.\Build\Release\DuiLib.dll
^D:\YDJL\Sourcecode\SHgeniusPC - 複製 (2)\ShanghaiObject\DuiLib\DuiLib\DuiLib.vcxproj
D:\YDJL\Sourcecode\SHgeniusPC - 複製 (2)\ShanghaiObject\DuiLib\Lib\DuiLib_u.lib
D:\YDJL\Sourcecode\SHgeniusPC - 複製 (2)\ShanghaiObject\DuiLib\Lib\DuiLib_u.exp
B^D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\STDAFX.CPP
This diff is collapsed.
B^D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\CIRCLEPROGRESSUI.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\STB_IMAGE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\STDAFX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIACTIVEX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIBASE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIBUTTON.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICHECKBOX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICHILDLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICOLORBUTTON.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICOMBO.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICOMBOBOX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICONTAINER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICONTROL.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIDATETIME.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIDELEGATE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIDLGBUILDER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIEDIT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIFLASH.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIHORIZONTALLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UILABEL.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UILIB.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UILIST.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIMANAGER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIMARKUP.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIOPTION.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIPROGRESS.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIRENDER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIRICHEDIT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UISCROLLBAR.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UISLIDER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UISLIDERTABLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITABLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITEXT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITILELAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITREEVIEW.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIVERTICALLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIWEBBROWSER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UTILS.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\WINIMPLBASE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\XUNZIP.OBJ
B^D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\CIRCLEPROGRESSUI.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\STB_IMAGE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\STDAFX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIACTIVEX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIBASE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIBUTTON.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICHECKBOX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICHILDLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICOLORBUTTON.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICOMBO.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICOMBOBOX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICONTAINER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICONTROL.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIDATETIME.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIDELEGATE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIDLGBUILDER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIEDIT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIFLASH.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIHORIZONTALLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UILABEL.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UILIB.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UILIST.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIMANAGER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIMARKUP.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIOPTION.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIPROGRESS.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIRENDER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIRICHEDIT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UISCROLLBAR.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UISLIDER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UISLIDERTABLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITABLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITEXT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITILELAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITREEVIEW.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIVERTICALLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIWEBBROWSER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UTILS.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\WINIMPLBASE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\XUNZIP.OBJ
B^D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\CIRCLEPROGRESSUI.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\STB_IMAGE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\STDAFX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIACTIVEX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIBASE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIBUTTON.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICHECKBOX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICHILDLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICOLORBUTTON.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICOMBO.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICOMBOBOX.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICONTAINER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UICONTROL.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIDATETIME.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIDELEGATE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIDLGBUILDER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIEDIT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIFLASH.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIHORIZONTALLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UILABEL.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UILIB.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UILIST.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIMANAGER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIMARKUP.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIOPTION.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIPROGRESS.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIRENDER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIRICHEDIT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UISCROLLBAR.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UISLIDER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UISLIDERTABLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITABLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITEXT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITILELAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UITREEVIEW.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIVERTICALLAYOUT.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UIWEBBROWSER.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\UTILS.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\WINIMPLBASE.OBJ|D:\YDJL\SOURCECODE\SHGENIUSPC - 複製 (2)\SHANGHAIOBJECT\DUILIB\DUILIB\BUILD\RELEASE\XUNZIP.OBJ
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment