久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

GDF文件資源解包打包與版本差分實(shí)戰(zhàn)

GDF文件資源解包打包與版本差分實(shí)戰(zhàn) 簡(jiǎn)介面向想深入研究《夢(mèng)幻古龍》游戲數(shù)據(jù)格式與資源管理的開(kāi)發(fā)者這份源代碼包聚焦 GDF 文件的解包、打包與流式讀寫(xiě)適合具備 C 與面向?qū)ο蠡A(chǔ)、希望理解游戲資源壓縮存儲(chǔ)機(jī)制的讀者參考。壓縮包共 8 個(gè)文件由 5 個(gè)頭文件和 3 個(gè) cpp 源文件組成整體約 21KB涵蓋文件對(duì)象封裝、批量資源管理及數(shù)據(jù)流處理等核心模塊便于按類(lèi)梳理接口與調(diào)用關(guān)系。已有 585 人學(xué)習(xí)說(shuō)明該主題在游戲資源修改與工具開(kāi)發(fā)圈中具備一定關(guān)注度。通過(guò)閱讀可實(shí)現(xiàn)單個(gè) GDF 文件的打開(kāi)、數(shù)據(jù)塊讀取與解壓也能借助管理類(lèi)完成多文件批量處理并從中體會(huì)壓縮算法與 I/O 設(shè)計(jì)的結(jié)合方式代碼未附圖形界面更適合作為二次開(kāi)發(fā)與自制解包工具的基礎(chǔ)素材。1. 一個(gè)幾百 MB 的資源包為什么不能直接改里面的圖拿到夢(mèng)幻古龍的客戶端資源目錄里躺著一堆.gdf貼圖、模型、配置表、腳本全被塞進(jìn)同一個(gè)文件文件名躲在索引里數(shù)據(jù)區(qū)是壓縮過(guò)的二進(jìn)制。想換一張 UI 圖或者改一條數(shù)值在十六進(jìn)制編輯器里動(dòng)一個(gè)字節(jié)后面所有偏移就全錯(cuò)位客戶端輕則白屏重則閃退。GDF 文件資源解包打包這套源碼要解決的就是這件事按索引把 GDF 解包成正常的目錄樹(shù)改完再按原格式打包回去客戶端照樣認(rèn)。適合做資源替換、界面漢化、數(shù)值調(diào)試、格式研究的人也適合想弄明白“打包文件到底怎么組織”的初學(xué)者。門(mén)檻不高會(huì)一點(diǎn) Python、能看懂struct和文件偏移就行。2. 摸清 GDF 的三段式結(jié)構(gòu)文件頭、索引表、數(shù)據(jù)區(qū)在寫(xiě)循環(huán)之前先干一件看起來(lái)很笨但省時(shí)間的事把.gdf拖進(jìn) HxD 或者 010 Editor看前 64 個(gè)字節(jié)。GDF 這類(lèi)打包格式絕大多數(shù)是同一個(gè)套路——定長(zhǎng)文件頭、變長(zhǎng)索引表、連續(xù)數(shù)據(jù)區(qū)三段首尾相接。你把這三種段的邊界找對(duì)了解包腳本半小時(shí)能跑通邊界找錯(cuò)后面調(diào)一天都是亂碼。我一般會(huì)先看頭部四個(gè)字節(jié)是不是可打印字符再看第 5 到第 8 字節(jié)像不像一個(gè)小整數(shù)版本號(hào)通常是個(gè)位數(shù)到幾十第 9 到第 12 字節(jié)往往是條目數(shù)量緊跟著一個(gè)偏移值指向索引起點(diǎn)。這幾個(gè)數(shù)能對(duì)上格式基本就摸到了。2.1 文件頭里哪幾個(gè)字段必須先確認(rèn)下面這套頭部布局在同類(lèi) GDF 資源里出現(xiàn)頻率很高我手上這份源碼也是按它實(shí)現(xiàn)的。字段順序不一定完全一致但四個(gè)核心信息跑不掉魔數(shù)、版本、條目數(shù)、索引偏移。偏移長(zhǎng)度字段說(shuō)明0x004magic常見(jiàn)為GDF\0或GDF1用來(lái)快速識(shí)別格式0x044version版本號(hào)決定索引項(xiàng)是否帶額外字段0x084count文件條目總數(shù)0x0C4index_offset索引表在文件中的起始位置先用一段最小的代碼把頭部讀出來(lái)確認(rèn)字段是否講得通import struct # 小端序魔數(shù)4字節(jié)、版本4字節(jié)、條目數(shù)4字節(jié)、索引偏移4字節(jié) HEADER_FMT 4sIII HEADER_SIZE struct.calcsize(HEADER_FMT) # 16 def peek_header(path): with open(path, rb) as f: raw f.read(HEADER_SIZE) magic, version, count, index_off struct.unpack(HEADER_FMT, raw) print(magic , magic) print(version , version) print(count , count) print(index_offset , index_off) return magic, version, count, index_off peek_header(sample.gdf)如果打印出來(lái)的count是幾萬(wàn)甚至上百萬(wàn)或者index_offset大于文件本身大小說(shuō)明字段順序或者字節(jié)序不對(duì)先把換成再試一次。大端序在老資源里不是沒(méi)有。這里的每個(gè)常量都不是拍腦袋定的HEADER_FMT一旦確認(rèn)下來(lái)后面解包和打包必須共用同一份定義不要在兩處各寫(xiě)一遍改了一處忘了另一處是最常見(jiàn)的事故來(lái)源。2.2 索引項(xiàng)是變長(zhǎng)的文件名長(zhǎng)度決定了怎么跳索引表不是定長(zhǎng)數(shù)組絕大部分 GDF 的索引項(xiàng)是“長(zhǎng)度 內(nèi)容”的變長(zhǎng)結(jié)構(gòu)先一個(gè) 2 字節(jié)的文件名長(zhǎng)度接著是文件名本身然后是數(shù)據(jù)偏移、壓縮后大小、原始大小、壓縮標(biāo)志。因?yàn)槲募L(zhǎng)度不固定你不能用count * 固定長(zhǎng)度去算索引總長(zhǎng)只能一條一條順序讀。# 索引項(xiàng)文件名長(zhǎng)度(H) 數(shù)據(jù)偏移(I) 壓縮后大小(I) 原始大小(I) 標(biāo)志位(B) ENTRY_FMT HIIIB ENTRY_SIZE struct.calcsize(ENTRY_FMT) # 15這里最容易翻車(chē)的是文件名編碼。國(guó)產(chǎn)老資源十有八九是 GBK直接decode(utf-8)會(huì)在某個(gè)帶漢字的路徑上拋異常而且往往不是第一條是跑到幾千條的時(shí)候突然炸。穩(wěn)妥寫(xiě)法是給一個(gè)編碼回退鏈優(yōu)先 GBK失敗再試 UTF-8最后用 latin-1 兜底保證不中斷def decode_name(raw: bytes) - str: for enc in (gbk, utf-8, latin-1): try: return raw.decode(enc) except UnicodeDecodeError: continue return raw.decode(latin-1, errorsreplace)還有一類(lèi) GDF 不用變長(zhǎng)文件名而是每條索引固定留 64 字節(jié)或 128 字節(jié)的文件名區(qū)不足補(bǔ)\0。這種結(jié)構(gòu)讀起來(lái)更簡(jiǎn)單但寫(xiě)回去時(shí)必須把整塊清零再寫(xiě)否則殘留的舊字符會(huì)串到新文件名后面。判斷方法很直接看索引區(qū)總長(zhǎng)度是不是count的整數(shù)倍。2.3 數(shù)據(jù)偏移的基準(zhǔn)點(diǎn)決定了你解出來(lái)的是圖還是亂碼索引里那個(gè)偏移值可能是相對(duì)于文件開(kāi)頭的絕對(duì)偏移也可能是相對(duì)于數(shù)據(jù)區(qū)起點(diǎn)的相對(duì)偏移。這兩種情況在十六進(jìn)制里長(zhǎng)得一模一樣但解包結(jié)果天差地別。判斷辦法是拿第一條記錄的偏移和index_offset比一下如果偏移值明顯大于索引起點(diǎn)基本是絕對(duì)偏移如果偏移值從 0 或幾十開(kāi)始那就是相對(duì)數(shù)據(jù)區(qū)起點(diǎn)的。def resolve_base(first_offset, index_offset, header_size): # 偏移大于索引起點(diǎn)視為絕對(duì)偏移基準(zhǔn)為 0 if first_offset index_offset: return 0 # 否則視為相對(duì)數(shù)據(jù)區(qū)起點(diǎn) return index_offset # 也有格式以 header_size 為基準(zhǔn)需實(shí)測(cè)對(duì)齊也值得看一眼。有些包要求每個(gè)文件的數(shù)據(jù)區(qū)起點(diǎn)按 4 字節(jié)或 16 字節(jié)對(duì)齊中間填\0。解包時(shí)對(duì)齊無(wú)所謂打包時(shí)不補(bǔ)對(duì)齊客戶端讀出來(lái)的貼圖會(huì)花屏——它按對(duì)齊后的偏移去取你少填了幾個(gè)字節(jié)后面全錯(cuò)位。判斷有沒(méi)有對(duì)齊看相鄰兩條記錄的offset packed_size和下一個(gè)offset之間有沒(méi)有固定的小間隙有就是對(duì)齊填充。3. 解包腳本落地從索引還原出完整目錄樹(shù)結(jié)構(gòu)確認(rèn)完解包腳本本身不復(fù)雜核心就三步讀頭、遍歷索引、按偏移取數(shù)據(jù)寫(xiě)盤(pán)。但要把這三步寫(xiě)扎實(shí)得處理幾個(gè)邊界索引讀完之后文件指針在哪、壓縮標(biāo)志為 0 時(shí)要不要跳過(guò)解壓、路徑里帶..或者絕對(duì)路徑時(shí)怎么清洗。下面這份是能直接跑的實(shí)現(xiàn)把前面確認(rèn)過(guò)的常量接進(jìn)去即可。3.1 讀頭部并做一次基本校驗(yàn)校驗(yàn)不是形式主義。資源包被截?cái)?、下載不完整、或者你拿錯(cuò)了版本都會(huì)在這里暴露而不是等到寫(xiě)了幾千個(gè)文件之后才發(fā)現(xiàn)全是壞的。import os import struct import zlib HEADER_FMT 4sIII HEADER_SIZE struct.calcsize(HEADER_FMT) ENTRY_FMT HIIIB ENTRY_SIZE struct.calcsize(ENTRY_FMT) def read_header(f): raw f.read(HEADER_SIZE) if len(raw) ! HEADER_SIZE: raise ValueError(文件頭不完整可能被截?cái)? magic, version, count, index_off struct.unpack(HEADER_FMT, raw) if magic[:3] ! bGDF: raise ValueError(f魔數(shù)不匹配: {magic!r}) return version, count, index_offmagic[:3] ! bGDF這里只比前三個(gè)字節(jié)是因?yàn)榈谒奈辉诓煌姹纠锟赡苁荺0、1、2。如果你手上的包魔數(shù)完全不是這幾個(gè)字符那就把這行判斷去掉改成打印出來(lái)人工確認(rèn)別硬套。3.2 遍歷索引逐條讀出元信息索引區(qū)一次性讀進(jìn)內(nèi)存比逐條seek快得多幾萬(wàn)條記錄的索引通常也就幾 MB。讀進(jìn)來(lái)之后用一個(gè)游標(biāo)pos往前走每次讀完固定部分再按name_len跳過(guò)文件名。def read_index(f, count, index_off): f.seek(index_off) buf f.read() entries [] pos 0 for _ in range(count): name_len, offset, packed_size, raw_size, flag struct.unpack_from( ENTRY_FMT, buf, pos ) pos ENTRY_SIZE name decode_name(buf[pos:pos name_len]) pos name_len entries.append({ name: name, offset: offset, packed_size: packed_size, raw_size: raw_size, flag: flag, }) return entriespacked_size和raw_size的關(guān)系能幫你判斷壓縮標(biāo)志是否可信兩者相等時(shí)大概率沒(méi)壓縮packed_size明顯小于raw_size才是壓縮過(guò)的。有些包的flag字段根本不準(zhǔn)這時(shí)候以大小關(guān)系為準(zhǔn)更穩(wěn)。3.3 寫(xiě)盤(pán)路徑清洗、目錄創(chuàng)建、重名處理寫(xiě)盤(pán)這一步看著簡(jiǎn)單坑都在路徑上。資源包里可能混著\和/兩種分隔符可能有大小寫(xiě)只差一個(gè)字母的兩個(gè)文件在 Windows 上會(huì)互相覆蓋也可能有..這種試圖跳出輸出目錄的路徑。統(tǒng)一處理成/、按段拆分、過(guò)濾掉..和空段是必須做的。def safe_join(out_dir, name): parts [p for p in name.replace(\\, /).split(/) if p and p ! ..] return os.path.join(out_dir, *parts) def unpack(src_path, out_dir): with open(src_path, rb) as f: version, count, index_off read_header(f) entries read_index(f, count, index_off) # 用第一條記錄判斷偏移基準(zhǔn) base resolve_base(entries[0][offset], index_off, HEADER_SIZE) for e in entries: f.seek(base e[offset]) data f.read(e[packed_size]) if e[flag] 1 and e[packed_size] ! e[raw_size]: try: data zlib.decompress(data) except zlib.error: pass # 標(biāo)志位不準(zhǔn)時(shí)保留原始數(shù)據(jù)避免整批失敗 dst safe_join(out_dir, e[name]) os.makedirs(os.path.dirname(dst), exist_okTrue) with open(dst, wb) as w: w.write(data) print(f解包完成: {count} 個(gè)條目 - {out_dir})resolve_base用的是 2.3 節(jié)的判斷邏輯。try/except zlib.error那層兜底很關(guān)鍵——我遇到過(guò)整包里flag字段全是 1、但實(shí)際只有一半數(shù)據(jù)壓縮過(guò)的情況沒(méi)有這層兜底腳本跑到一半就停了。3.4 解包完做一次完整性核對(duì)解包腳本跑完不報(bào)錯(cuò)不代表解出來(lái)的東西是對(duì)的。核對(duì)三件事文件數(shù)量是否等于count、每個(gè)文件的實(shí)際大小是否等于raw_size、隨機(jī)抽幾個(gè)文件看文件頭是不是正常的圖片或文本格式。def verify(out_dir, entries): bad [] for e in entries: p safe_join(out_dir, e[name]) if not os.path.exists(p): bad.append((e[name], missing)) continue size os.path.getsize(p) if e[raw_size] and size ! e[raw_size]: bad.append((e[name], fsize {size} ! {e[raw_size]})) print(f異常條目: {len(bad)}) for name, reason in bad[:20]: print( , name, reason)raw_size為 0 的條目要跳過(guò)大小比較有些包對(duì)空文件不寫(xiě)這個(gè)字段。這一步跑完還是零異?;究梢哉J(rèn)為解包是干凈的可以進(jìn)入改資源、替換、再打包的流程了。4. 打包回寫(xiě)偏移計(jì)算、壓縮策略和頭部回填打包比解包難難在順序。文件頭里要寫(xiě)索引偏移索引里要寫(xiě)每個(gè)文件的數(shù)據(jù)偏移而這兩個(gè)值都得等數(shù)據(jù)寫(xiě)完才知道。常見(jiàn)做法是兩遍寫(xiě)第一遍先占位寫(xiě)頭部、再寫(xiě)數(shù)據(jù)區(qū)、最后寫(xiě)索引第二遍seek(0)回去把頭部真實(shí)值填上。這套流程只要偏移算對(duì)一次就能成功。4.1 先收集再排序保證偏移可復(fù)現(xiàn)打包前先把源目錄里所有文件收集成一個(gè)列表按相對(duì)路徑排序。排序不是為了好看是為了讓同樣的輸入每次都產(chǎn)出字節(jié)完全一致的包方便做版本對(duì)比和差分。def collect_files(src_dir): items [] for root, _, files in os.walk(src_dir): for fn in files: full os.path.join(root, fn) rel os.path.relpath(full, src_dir).replace(os.sep, /) items.append((rel, full)) items.sort(keylambda x: x[0]) return itemsos.path.relpath拿到的分隔符在 Windows 上是\統(tǒng)一替換成/存進(jìn)索引跟原包保持一致。這一步不做打出來(lái)的包在客戶端里可能整個(gè)目錄樹(shù)都找不到。4.2 壓縮策略什么時(shí)候壓、級(jí)別定多少不是所有文件都值得壓縮。貼圖、音頻這類(lèi)本身已經(jīng)壓過(guò)的格式再用 zlib 壓一遍體積可能不降反升還白搭 CPU。常見(jiàn)做法是設(shè)一個(gè)閾值原始大小小于 1KB 的直接不壓壓完比原文件還大的也回退成不壓。def maybe_compress(raw: bytes, level6, min_size1024): if len(raw) min_size: return raw, 0 packed zlib.compress(raw, level) if len(packed) len(raw): return raw, 0 return packed, 1level6是速度和壓縮比的平衡點(diǎn)。如果你只是改了幾個(gè)文件做測(cè)試用level1更快如果是發(fā)布用的完整包level9能再省一點(diǎn)體積但打包時(shí)間會(huì)翻倍。返回值第二個(gè)元素直接就是索引里的flag壓縮標(biāo)志和數(shù)據(jù)必須同源產(chǎn)生不能一處判斷一處寫(xiě)死。4.3 先寫(xiě)數(shù)據(jù)、再寫(xiě)索引、最后回填頭部這是整個(gè)打包流程的主干。注意文件指針的位置數(shù)據(jù)區(qū)從HEADER_SIZE開(kāi)始寫(xiě)每個(gè)文件前用f.tell()取當(dāng)前偏移寫(xiě)完后這個(gè)偏移就是索引里要填的值。def pack(src_dir, dst_path, level6): items collect_files(src_dir) entries [] with open(dst_path, wb) as f: f.write(b\x00 * HEADER_SIZE) # 頭部先占位 for rel, full in items: with open(full, rb) as r: raw r.read() packed, flag maybe_compress(raw, level) offset f.tell() f.write(packed) entries.append({ name: rel, offset: offset, packed_size: len(packed), raw_size: len(raw), flag: flag, }) index_off f.tell() for e in entries: name_bytes e[name].encode(gbk) f.write(struct.pack( ENTRY_FMT, len(name_bytes), e[offset], e[packed_size], e[raw_size], e[flag], )) f.write(name_bytes) f.seek(0) f.write(struct.pack( HEADER_FMT, bGDF\x00, 1, len(entries), index_off )) print(f打包完成: {len(entries)} 個(gè)條目 - {dst_path})幾個(gè)參數(shù)要盯住bGDF\x00必須跟原包一致客戶端可能校驗(yàn)?zāi)?shù)版本號(hào)1如果原包是別的值照抄原包的值文件名編碼gbk要跟解包時(shí)探測(cè)到的編碼一致。這三處任何一個(gè)對(duì)不上客戶端都會(huì)判定文件損壞。4.4 拿解包腳本當(dāng)反向測(cè)試用例打包完最省事的驗(yàn)證方式就是用第 3 章的unpack把剛打出來(lái)的包重新解開(kāi)再跟源目錄逐文件比對(duì)哈希。這一步跑通說(shuō)明頭部、索引、數(shù)據(jù)區(qū)三段自洽。import hashlib def sha1(path): h hashlib.sha1() with open(path, rb) as f: for chunk in iter(lambda: f.read(65536), b): h.update(chunk) return h.hexdigest() def diff_dirs(a, b): bad [] for rel, full in collect_files(a): other safe_join(b, rel) if not os.path.exists(other) or sha1(full) ! sha1(other): bad.append(rel) return bad先unpack(new.gdf, verify_out)再diff_dirs(src_dir, verify_out)返回空列表才算通過(guò)。這個(gè)測(cè)試用例的價(jià)值在于它不依賴(lài)客戶端純本地就能判斷包結(jié)構(gòu)是否正確改代碼之后的回歸成本幾乎為零。5. 避坑與排查五個(gè)讓腳本當(dāng)場(chǎng)翻車(chē)的細(xì)節(jié)5.1 解出來(lái)全是亂碼多半是偏移基準(zhǔn)搞反了現(xiàn)象很典型文件數(shù)量對(duì)得上文件名也對(duì)得上但打開(kāi)每個(gè)文件都是亂碼或者圖片頭PNG變成了別的字符。原因基本是索引里的偏移是相對(duì)數(shù)據(jù)區(qū)起點(diǎn)的腳本卻按絕對(duì)偏移去seek讀到的位置整體偏了index_offset那么多字節(jié)。解決辦法是把resolve_base的兩個(gè)分支各跑一次看哪一次解出來(lái)的文件頭正常。判斷依據(jù)很直接正常 PNG 前四字節(jié)是\x89PNG正常 XML 開(kāi)頭是?xml一眼就能認(rèn)出來(lái)。5.2 中文路徑在幾千條之后才炸現(xiàn)象是腳本前面跑得好好的突然在某一條上拋UnicodeDecodeError而且每次炸的位置還不一樣。原因是包里文件名編碼混用大部分是 GBK個(gè)別是 UTF-8甚至同一個(gè)包里兩種都有。硬編碼一個(gè)編碼必然翻車(chē)。解決辦法是用 2.2 節(jié)的decode_name回退鏈先把所有文件解出來(lái)再統(tǒng)計(jì)哪些名字命中了 UTF-8 分支心里有個(gè)數(shù)。打包回去時(shí)如果改了文件名編碼也要跟著原包走別解包用 GBK、打包用 UTF-8。5.3 壓縮標(biāo)志位不可信解壓失敗要能降級(jí)現(xiàn)象是zlib.decompress拋Error -3 while decompressing data腳本中斷后面的文件一個(gè)都沒(méi)解出來(lái)。原因是索引里的壓縮標(biāo)志寫(xiě)的是 1但數(shù)據(jù)區(qū)那一段其實(shí)沒(méi)壓。這類(lèi)包通常是工具鏈不同版本混著打出來(lái)的。解決辦法是解壓外面包一層try/except失敗就原樣輸出同時(shí)在日志里記一筆解完之后再人工看那幾個(gè)文件是不是正常。整批任務(wù)不能因?yàn)橐粭l記錄異常就全停這是批量處理的基本原則。5.4 包能打出來(lái)客戶端就是不認(rèn)現(xiàn)象是自制的包用解包腳本能完整解開(kāi)但客戶端加載時(shí)直接報(bào)資源損壞或者黑屏。原因通常有三個(gè)魔數(shù)或版本號(hào)寫(xiě)錯(cuò)、索引項(xiàng)沒(méi)有按原包順序排列、文件名大小寫(xiě)跟原包不一致。前兩個(gè)查頭部和索引就能發(fā)現(xiàn)第三個(gè)最隱蔽——Windows 上不區(qū)分大小寫(xiě)解包時(shí)文件名被規(guī)范化了打包回去就變了而客戶端在別的平臺(tái)上按精確匹配找文件。解決辦法是解包時(shí)保留原始字節(jié)別經(jīng)過(guò)任何大小寫(xiě)轉(zhuǎn)換打包時(shí)用的就是解出來(lái)的原始名字。5.5 覆蓋原包之前沒(méi)留后悔藥現(xiàn)象是打包腳本參數(shù)寫(xiě)反輸出路徑指向了源包幾百 MB 的原文件瞬間被覆蓋客戶端直接報(bào)廢。原因不是技術(shù)問(wèn)題是流程問(wèn)題但沒(méi)有這個(gè)習(xí)慣遲早出事。我的做法是打包函數(shù)入口強(qiáng)制檢查目標(biāo)文件已存在時(shí)先重命名成.bak再寫(xiě)或者干脆要求輸出目錄必須跟輸入目錄不同。多花兩行代碼省一次重下客戶端的麻煩。6. 批量解包加版本差分找出兩個(gè)包里到底改了什么單包解包跑通之后真正省時(shí)間的用法是做版本對(duì)比。手上同時(shí)有新老兩個(gè)客戶端是常事想知道某次更新動(dòng)了哪些資源靠人工翻目錄不現(xiàn)實(shí)。把兩個(gè)包分別解到old/和new/按相對(duì)路徑做并集逐個(gè)算 SHA1輸出一張變更表就行。狀態(tài)含義后續(xù)動(dòng)作added只在 new 里存在新增資源重點(diǎn)關(guān)注配置和腳本removed只在 old 里存在被刪資源檢查是否有引用殘留modified兩邊都有但哈希不同改動(dòng)內(nèi)容優(yōu)先看配置表和 UI 圖same哈希一致忽略def diff_packs(old_dir, new_dir, out_csvdiff.csv): old_map {rel: full for rel, full in collect_files(old_dir)} new_map {rel: full for rel, full in collect_files(new_dir)} names sorted(set(old_map) | set(new_map)) rows [] for rel in names: if rel not in old_map: rows.append((rel, added)) elif rel not in new_map: rows.append((rel, removed)) elif sha1(old_map[rel]) ! sha1(new_map[rel]): rows.append((rel, modified)) else: rows.append((rel, same)) with open(out_csv, w, encodingutf-8-sig) as f: f.write(path,status\n) for rel, status in rows: f.write(f{rel},{status}\n) return rowsencodingutf-8-sig是為了讓表格軟件直接打開(kāi)不亂碼這點(diǎn)小細(xì)節(jié)在交付給別人時(shí)很加分。collect_files復(fù)用第 4 章那份路徑分隔符已經(jīng)統(tǒng)一過(guò)兩邊能直接對(duì)上。跑完之后按status過(guò)濾modified里優(yōu)先看.ini、.txt、.lua這類(lèi)文本資源改動(dòng)往往就藏在那里added里如果有新目錄基本能推斷出這次更新加了什么系統(tǒng)。更進(jìn)一步的做法是增量打包只把modified和added的條目重新壓進(jìn)去其余條目從原包里按偏移直接拷貝字節(jié)不做解壓再壓縮。這樣打一個(gè)幾百 MB 的包只需要幾秒而不是幾分鐘。實(shí)現(xiàn)上就是在寫(xiě)數(shù)據(jù)區(qū)時(shí)判斷該條目是否在變更集合里在的話走maybe_compress不在的話seek到原包對(duì)應(yīng)偏移讀packed_size字節(jié)原樣寫(xiě)出索引里的字段也照抄原值。這套邏輯我第一次寫(xiě)的時(shí)候沒(méi)做偏移基準(zhǔn)的統(tǒng)一結(jié)果拷過(guò)來(lái)的數(shù)據(jù)整體錯(cuò)位解出來(lái)一半文件是壞的——從那以后我每次寫(xiě)增量打包都強(qiáng)制先用差分腳本跑一遍全量對(duì)比確認(rèn)變更集合和字節(jié)偏移都對(duì)得上再動(dòng)手改包。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
易易A毛视频| 69av一区二区三区| 精品少妇人妻av久久免费| 色蜜AV| 亚洲综合大片| 逼逼逼逼操操操操操操操操操午夜剧场 | 精品97精品97| 午夜爽爽爽在线观看永久入口姬片| 五月婷婷无码| 亚洲AV不卡在线观看| 亚洲精品一区二区精华| 天天爽爽爽爽| 人妻精品一区二区| 大香蕉色十月| 999综合网| 97高清啪啪| 国产成人自拍视频在线| 精品无码少妇| 精品性爱一二三区| 色婷婷久久综合超碰| 在线综合网| 国产精选三级在线观看| 91在线/欧洲| 小视频国产| 91嫩草欧美| 久久久久白虎| 色色色999| 午夜亚洲| 婷婷色综合| 91A欧美电影网站| 日韩久久激情精品| 91 丝袜在线观看| 中国乱伦一区二区| 91亚洲丝袜熟女| 91丨熟女丨丰满熟女| 天综合网欧美| 噜噜在线| 日韩无码视频黄色| 亚洲老司机123专区| 国产精品剧情| 久九干| 亚洲中文字幕熟女| www.高清无码诱惑一区.com| 久草尤物| 伊人久大| 亚洲人妻一区二区三区| 国产在线播放成人免费| 青青操97| 性爱精品一区| 四虎免费在线观看| 青青草大香蕉在线视频| 操逼视频免费日韩无码| 中文视频在线观看| 亚洲熟女乱熟乱熟妇综合网二区| 乱伦图一区| 夜夜免费视频| 好淫网一二三视区| www..com操老师| 2020中文字幕在线| 免费网站观看www在线观| 成人乱人伦一区二区| 夜夜操一区二区| 先锋色眉乱伦资源| 啊啊啊好大好深| 97日本超碰综合| 超碰无码加勒比| 久久华人网| 久久久蜜桃一区二区三区| 欧美色999| 国产精品天干天干综合网麻豆| 99精品久久久久久久婷婷蜜桃| 熟女久久久| 乱精品一区字幕二区| 视频一区二区免费在线| 熟妇女伦乱视频视频 | 婷婷丁香五月天综合东京热| 久操操AV电影| 中文字幕无码不卡啪啪| 久久久久一本一区二区青青蜜月| 亚洲欧美日韩综合在线尤物| 91熟女丨91老女人| 韩国轻伦国内自拍一区| 免费啪啪啪网站18岁| 国产区在线| 色天堂综合| 色官网在线| 在线观看一级α片刺激高潮视频| 青青操在线视频| A啊啊在线观看| 99热精品在线| 欧美经典一区二区三区| 国产h小视频在线观看免费| 精品久久在线区一区| 中文字幕美女91| 97中文字幕一区| 日本999精品视频| 久久久五月天| 久久激情亚洲精品无码?V| 人人操人人色网| 天天综合网合集91| 久久久久ab| 激情六月天| 欧美日韩不卡a片| …中文字幕亚洲乱,97人妻无码费视…| 刺激性视频黄页| 成视频在线观看免费看| 国产精品成人无码a v毛片| 久肏视频字幕| 久久女女| 日日日色色色色色| 成人午夜小视频手机在线看| 中文字幕精品免费一区二区| 欧美人黑A片无码免视费| 日韩电影免费网站麻豆视频| 日本男人插女人的逼黄色| 国产热RE99久久6国产精品首| 丰满人妻一区二区三区四区| 色波多| 九九热三级片| 超碰久超碰久| 中文字幕一区二区无码成人 | 看黑丝美女操逼青青网站| 99久久久| 综合网色| 六月婷婷综合| 色婷婷av在线观看| 激情无码日韩| 蜜乳AV一区二区三区四| 亚洲第一狼人丝袜美女另类| 国产操伦| 国产精品一区二区手机看片| 国产精品黑人一区二区三区| 中日韩免费看男女操逼大全| 蜜臀AV秘一区翔田千里| 亚洲成aⅴ人片不卡无码| 欧美激情 亚洲色图| 99热这里都是精品| 大香蕉淫人| 欧美姓爱综合网| 91日韩网站| 夜夜国自区| 欧美亚洲清纯| 亚洲限制级| 97er欧美性| 丝袜熟女2P| 午夜福利久久久噜久噜久久综合| 精品熟女一区=区三区| 国内精品999| 国产精品久久久久综合| www.色婷婷| 射 色综合| 青青草密桃在线播放| 九九香蕉网| 欧美日韩操操操| 最新日韩黄片| 炮色五月| 美女诱惑在线一区| 久久久九九| 精品无码久久| 91无码西班牙视频在线| 人妻一二三区| 熟女字幕| 高清有码一区二区| 国产第12页| 国产成人免费观看在线视频| 丁香六月婷婷久久综合| 啊啊啊在线观看免费视频| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 日韩亚洲精品一区二区| 丝袜熟女一区二区三区| 一级性爱aaaa| 久久精品一区二区三区不卡| 97露脸精品丝袜| 操死我了啊啊啊| 欧美综合色| 少妇久久久| 大香蕉一区二区在线观看.| 熟女色综合久久| 口爆综合网| 丝袜视频一区二区在线播放国产中文| 另类图片五月天| 欧美日韩资源| 2021久久国产综合精品青草| 99亚亚热| 精品人妻一区二区三区蜜桃视频| 欧美人与动性人交a| 色综合久| 中亚精品极乱| 欧美综合97www| 91麻豆va国产精品| 天天爽夜夜欢视| 亚洲偷91色| 国产精品视屏| 亚洲图片婷婷五月天| 欧美操逼熟女| 丝袜内射| 天天看片青娱乐| 人人操人人插人人摸人人干| 97超碰jingpin| 久久久精品视频欧州站| 国产精品麻豆成人av| 97最新在线播放视频| 97亚洲一区| 日日干夜夜骑| 黄色av网站在线播放| 男男H黄动漫啪啪无遮挡网站| 久九干| 欧美特黄视频网站| 久久久久久久伊人精品| 你草精品在线视频| 日韩免费av片高清无码| 欧美在线伊人色| 亚洲色图日韩丝袜制服一区二区五月在线| 人妻 制服 日韩 中文 在线| 久久亚洲天堂| 亚州,欧美在线| 色九九九综合| 亚欧高清| 婷婷五月天av| 日夜干射色啊| 在线免费观看高清无码视频| 综合五月天| 性高潮久久久| 岛国艾薇凹凸视频天堂| 97超色| 国产家庭乱伦性爱视频| 九九久久精品| 欧美综合色,www| 久久一级无码精品毛片6| 好看的久久不射无码影视影院| 99久久99久久免费精品蜜臀| 大香樵伊人网| 呻吟 欧美 日本 中出| 亚洲人妻五月丁香婷婷| 国产兽交视频在线播放| 亚洲影院小综合| 久久一区二区蜜桃| 性欧美另类高清| 欧美亚洲特P| 粉嫩在线一区二区懂色| 在线黄色污污网站| 日韩性爱小视频| 97视频网站在线观看| 中日韩久久久免费看| 一级性爱啪啪视频| 久久熟妇五十路一区| 67914在线兔费成人视频| 欧美大香蕉同搞| 91天天综合网,天天综合网| 97亚洲欧美| 91 亚洲 欧洲| 999999精品| av天天在线观看| 神马久久久久久| 久久综合18p| 欧美一区二区三区不卡高清视频| 男人天堂.AB| 中文AV制服乱伦| 妇女视频网站| 天天色综亚洲91污| 亚洲精品人体| 久久超碰亚洲人| 天天躁日日躁AAAAXXXX国产 | 口爆综合网| 97se亚洲综合自| 欧美中文字幕一区| 欧美亚男人的天堂| 操死我干死我| A V少妇特黄三级| 蜜乳AV一区二区三区四| 亚洲天堂,男人| 日韩欧美女求操每天更新| 欧美日韩亚洲高清不卡一区二区三区| 精品成人动漫一区二区| 日本不卡一二区| 96精品久久久久中文字幕| 精品人妻一区二区视频| 97久久超碰日韩精品| 免费看污网站| 中文操嬖片。| 91色拍| 久久人爽| 精品国产乱码久久久久久影片| 欧 美 自 拍 偷 拍| 亚洲玖玖爱| 97干色天堂| 久久香蕉国产线看观看猫咪av| 九九九九九九视频免费| 爱妻综合网| 99re6国产精品99re在线| 日韩Va亚洲va欧美Ⅴa久久| 日韩小电影| 98福利在线视频| 欧美久久草熟女| 8050午夜少妇无码| 成人a v在线播放免费| 国产视频97| 久久超碰大香蕉| 亚洲成人一二三区| 91久久久老司机| 久久成人东京热人妻| 高潮综合网| 被窝影院午夜看片无码| 快灬快灬 一下爽蜜桃在线观看| 久久久久久久久久黄色网 | 九九热免费视频| 日韩国产不卡在线视频| 在线午夜成人无码视频| 葡萄牙性视频一二区| 久久精品综合| 国产精品久久久久999| 久久久久久性爱视频| 国产亚洲综合欧美一区| 天天色综亚洲91污| 国产欧美精选自拍一区| 手机午夜电影神马久久| 国产在线综合网| 97在线免费看视频| 青青草这里只有精品| 国产精品激情久久久久久久| 性色AV网站| 欧美天天弄| 麻豆av一区二区| 欧美高潮| 4虎在线视频| 都市激情人妻一区二区青青操视频 | 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 国产农村妇女一区二区| 五月丁香影视| 色婷婷基地| 男女一级A片大黄,一进一出| 丁香婷婷啪啪| 丁香久久| 久久熟女人| 91人妻视频在线| 国模限制级电影| 丰满欧美少妇| 久久做97| www.男人天堂| 区自美91| 欧美92| 91亚洲综合在线| 男人的天堂在线有码| 欧美日韩大陆黑人少妇99| 色波多| 99这里有精品视频| 欧美色97| 国产一区二区三区影片| 人妻熟女一区二区三区视频| 夜夜操二区| 欧美另类精品xxxx| 福利操逼| 一区二区三区无卡视频在线观看| 九九热免费国产视频婷婷伊人五月 | 欧美三级中文字幕hd| 999亚洲国产视频| 亚洲第一黄色av网站 | 欧美少妇内射| 福利一级版子| 少妇熟女视频一区二区三区| 午夜精品久久久久久久久久久久久| 精品欧美乱码久| 欧美亚洲情色| 久草免费福利在线播放| 91在线无码精品秘 软件| 99热18| 大香蕉在线视频15| 舔舔啊| 狠日欧美| 日韩在线一区高清在线| 日韩欧美国产高清视频| 少妇一线天久久久久久| 日本天天干天天搞一区| 99在线观看视频在线高清| 色网色网色网色网色网色| 内射夫妻三片| 日本123区操B视频| 久久久久日本视| 美女AV一区二区| 国产熟女高潮一区二区三区| 大学生美女口爆| 国内毛片无遮挡国产| 熟女色综合久久| 亚洲日韩一区电影| 日本好吊色视频| 日韩九九九| 久久双插| 激情综合五月| 日韩午夜国产| 一区二区影视| 国产日韩欧美亚洲精品95| 欧美顶级黄片AAAAA在线免费看| 久久av一级av少妇av高潮 | 成·人免费午夜在线观看| 欧美九九99久久精品| av日韩国产一区二区| 大香蕉99999| 麻豆激情综合| 丝袜夫妻自拍| 久久欧美性爱视频| 日韩激情毛片一级久久久| 99这里只有精品| 嗯嗯啊啊啊好舒服| 五月婷婷六月色| 手机在线播放国产福利| 亚洲爽图| 91色婷婷综合久久中文字幕二区| 加勒比少妇AV婷婷六月天超碰超碰| 黄色网址久久精品欧美喷水| 草莓精品视频| 亚洲成人无码影院| 一级@啪啪视频| 大香蕉欧美| 久久老熟女| 国产AV人人夜夜澡人人爽麻豆| 91在线美女| av中文在线| 亚洲图片欧洲图片aⅴ| 伊人一区二区在线播放| 国内毛片欧美香蕉精品| 日韩在线国产字幕| 日韩小电影| 精品国产乱码久久久| 欧美性视频二区三区| 亚洲色资源| 欧美亚洲AN| 日韩精品99久久久久久中文字幕 | 综合色图亚洲欧美| 亚州伊人色综台| 五月天社区| 天天爽夜夜操| 天美AV片| 91九色丨国产丨爆乳| 色呦呦、国产精品| 无码人妻丰满熟妇奶水区毛片| 欧美日韩免费专区在线| 人人澡综合涩| 九九九精品一区二区无码| 久久婷婷欧美| 色婷婷日韩精品一区二区三区| 熟女久久| 亚洲色图综合| 免费啪啪av| 日韩亚洲中文有码视频| 欧美成va视频网站| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | se吧提供91精品国产91久久久久久| 激情色图| 欧美经典一区二区三区| 人妻嗯啊啊在线播放| 少妇被玩视频二三区| 97精品国产精品免费观看| 热热色国产一二区AV| 老熟妇91| 人妻一区视频| 亚州色交| 9ⅰ久久久天天| 天天做天天爱| 看一级特黄a大一片| 日日操天天操| 天天舔天天日天天射| 操熟女91| 国产成人免费观看在线视频| 9/A片| 久久久精品久久| 九九九久久久| 久操大香蕉| 99www.bibizy香蕉资源国产一区二区三区高清| 欧美日本视频一区| 久久欲| 久久久久免费少妇| 国内成人圈中文字幕无码视频| 校园春色五月天| 91动漫操逼视频| 久久av网| 国产又粗又大硬免费色网视频| 亚洲欧美日韩精品久久久一区二区 | 欧美激情精品| 日本熟女中文| 精品二区三四区五电影| 7777奇米影视久久| 亚洲情色1区| 免费国产视频| 久久国产三区| 国产精品熟女一区二区三区| 婷婷亚洲综合| 天天操天天干美女网址导航| 最新中文字幕在线亚洲| 一二三四视频在线社区中文字幕| 国产在线视频二区| 抽插爽| 熟妇xxxxx性春色| 91原创在线观看| 加勒比海色香蕉婷婷| 99热官网| 久久人妻| 国产亚卅97| 国产高清精品一区二区三区毛片 | 欧亚 另类 久| 欧美九9 9 9| 91啪啪| 欧美精品在线观看| 国产美女口爆吞精视频| 亚洲色资源| 色一色综合网| 欧综合网| 亚洲激情 欧美色图| 亚洲一区二区三区不卡国产欧美| 91久久久老司机| 国产一区二区三区影片| 91亚洲人| 久久日本熟女精品一区| 强奸乱亚洲| 一区在线精品中文字幕| 99热这里只有是精品10| 夜夜草网站| 久久狠狠色噜噜狠狠狠狠97| 人人 操人人 操人人| 国产精品电| 亚洲日韩AV视色| 久久中文字幕一区不卡| 亚洲清纯综合| 夜夜騷av、一區二區| 全球成人中文在线| 日韩国产精品人妻无码久久久| 久久综合女优| 精品国产乱码久久久| 情色五月天久久久| 久久伊人大香蕉| 999精品国产高清一区二区| 综合情欲网| 色女99一级片在线观看| 丁香五月天激情| 国产对白刺激视频| 综合欧美亚洲| 超碰欧美97资源| 夜夜爽妓女| 9色在线| 精品亚洲国产成人精品| 欧美组图日韩亚洲中文字幕| 加勒比综合在线| 日日噜噜夜夜久久亚洲一区二区| 美女啊啊啊啊pc| 成功精品影院| 九月婷婷综合| 精品人妻一区| 中文字幕成人乱码熟女精品国50| av九九| 97视频观看| 一区二区 电影 亚洲| 久九九九九九九九热| 久久性爱大全| 97就爱干| 99久久精品国产高潮| 日欧毛片久久| 人人操人人插人人摸人人干| 欧美日本久久精品一区 | 99青草| 啊啊啊好多水| 伊人991| 一区二区激情国产熟女| 午夜.DJ高清在线观看免费7| 偷偷人人精品女女久久| 99蜜桃臀久久久欧美精品网站| www.久久| 国产热RE99久久6国产精品首| 日韩强奸av| 欧美一级二级三级| 午夜精品久久久久久久99| 啪啪91| 久久久久久久人妻| 国产福利影视| 3d成人精品一区二区| 大香蕉综合网| 丁香五月天堂网| 亚洲性爱电影| 国产动漫操逼视频| 久啪| 91国模| julia国产在线| 亚热日本熟女| 97超碰天天爱天天爱| 五月天社区| 日本网色| 久久婷婷热| 国产又色又爽又舒服的三级视频| 青娱乐国产盛宴视频| 国产色综合亚洲色综合吹潮| 操国产逼| 久久久久久99AV无码免费网站| 欧美在线天堂| 亚欧成人一级片在线播放| 翔田千里AⅤHD无码| 九月丁香综合网| 亚洲图片欧美制度| 蜜臀Av一区二区三区| 亚欧性爱无码| 极品粉嫩一区二区| 欧美性爱一区二区三区| 成人性爱美曰韩| 欧美另类自拍| 亚洲密乳AV| 日韩欧美女优电影| 91痴汉| 亚洲欧美自拍偷拍| 亚洲精品天天影视综合网 | 日韩成人性爱AV| 久草色悠悠在线视频| 国产精品农村妇女| 91/欧美| 蜜臀99久久精品久久久懂爱| 农村妇女一级二级三级视频| 偷拍2020| 欧洲综合色图| 日韩Va亚洲va欧美Ⅴa久久| 国产剧情AV不卡在线观看| 啊啊啊好爽快点啊啊啊嗯嗯| 后入式在线免费观看60秒| 亚洲视频1区| 97资源超碰| 亚洲 欧美综合| 九九亚洲视频| 亚洲成人ab| 五月激情小说| 97久久网| 国产SV一线| 亚洲一区中文精品| 中文字幕日产av人| 精品无码欧美三级| 日韩激情视频| 欧美强奸乱能| 久久婷婷苹果| 清柠毛片| 人人看人人插| 亚洲涩图欧美| 久99热| 欧美日韩超碰在线| 大象AV在线| 91网站18在线| 五月丁香社区婷婷日韩欧美精品影院| 国偷自 一区| 激情婷婷丁香| 亚洲日韩精品久久久久一区壹牛| 日本一天色道久久久精品视频| www.91理论| 91性网| 中文字幕久久精视频久久大全| 在线免费观看日韩一区| 久久97视频| 狠肏骚人妻| 丰满人妻一区二区三区大胸懂色| 96麻豆精品一区二区三区| 亚洲天堂另类小说男人| 强奸乱伦动态污图免费| 免费试看60秒| 久艹99| 成人影 天天操 亚洲| 久久久久久国产精品免费网站| 大香蕉草草| 91精品丝袜久久久久久无码人妻| 女人高潮抽搐喷水视频网站| 级做a爱无码性色永久免费| 熟妇高潮二区三区| 天天综合网91入口| 婷婷综合五月天| 一区操逼日比视频| 久久精品国产精品一区| 肥臀熟女一区二区三区视频| 麻豆激情综合| 久久久久久久久久久久久9999| 91狼人| 人干人人人操人人摸| 久久久久久久强迫| 97视频免费播放| …中文字幕亚洲乱,97人妻无码费视…| 日韩美脚一区二区网站| 岛国精品视频在线观看 | 日日夜夜摸| 激情在线青青操| 亚洲天堂少妇| 日韩欧美~中文字| 后入福利视频| 大但人体久久久久| 欧美最大综合网| 五月开心久久AV官网| 伊人伊人LD| 欧美夜色| 超碰在97| 骚日日av| 97亚洲综合在线| 欧美亚洲特P| 久久99国产精品| 东京热天堂网| 午夜小电影在线插入淫高潮| 超碰成人人人爽人人爽| 国内亚洲高清无码| 欧美 日韩 亚洲 春色| 日韩欧美大力操| 先锋激情∨在线视频播放| 日韩国产欧美伦理在线| 成人5码视频| 黄网在线播放| 精品国产乱码久久久久久影片| 美女诱惑1区2区| 美女裸体麻豆天美蜜桃91| 久久綜合很很很| 精品妇操一区二区三区| 日韩内| 欧美不卡在线一区二区| 亚欧视频在线| 色色色综合| 亚洲精品天天影视综合网| 操曰本熟女| 狠狠爱夜夜| 收看日本人日bb| 我要看免费韩日黄片| 久久大香蕉手机高清视频| 国产熟女| 91麻豆天美传媒在线| 青娱乐老司机视频| 女人被添高潮免费视频| 国产性感在线观看| 九九九不卡| 久久精品国产亚洲AV高清演员表| 激情综合婷婷| 老鸭窝黄色视频网站| 快灬快灬 一下爽蜜桃在线观看 | 97精品国产97久久久久久户外免费| 六月婷婷一区二区三区| 国产又黄又爽| 色婷婷九月| 无码男人天堂| 亚洲日韩精品久久久久一区壹牛| 国产热RE99久久6国产精品首| 亚洲成人精品久久久| 国产精品一区二区三区免费视频| 亚洲欧美综合区自拍另类| 91人妻丝袜无码| 亚洲美女精品九九视频| 人人插人人搞人人操| 不卡一区视频| 操婢日韩| 九九久久国产精品| AAAA级日本片免费视频| 盗摄 精品 另类 一区| 欧美图片校园春色| 亚卅熟女乱色| 亚洲 中文 欧美 日韩 在线| 日韩亚洲国产视频| 女人的天堂大香蕉网| 岛国A V在线免费看| 亚洲熟妇图片| 中文?日韩?免费?精品| 日韩欧美女优电影| 中文字幕99999| 超碰97欧美在线| 中文一区二区三区影院| 在线啊啊啊啊| 日韩熟女操逼| av天天在线| 久久亚洲AV无码专区首页| 亚洲欧美日韩国产丝袜自拍中文| 99久久婷婷丁香| 熟女久久久| 超碰在线看| 天天综合网91| 在线黄色污污网站| 中文字幕五区| 麻豆天天躁天天揉揉AV| 神马久久69| 2019久久久久久久久福利| 亚洲的天堂网| 精彩国产视频播放1区2区| 欧美精品999| 欧美成人A天堂片在线观看| 欧美激情久操网| 超碰人妻97| 懂色Av一区二区三区| 91网站18+| 941超碰| 97精品国产手机| 欧亚第一综合网| 爱欲AV| 怡红院怡春院| 人妻密肉在线观看| 午夜精品99久久久久传媒| 婷婷丁香六月| 蜜臀国产AV中文字幕| 性吧在线视频| 九月色婷婷| 色色热| 大香蕉宗合网在线| av中文字幕在线熟女| 日本人体九九九九九九| 精品视频久久久久九九九九9999| 97在线视频观看| 伊人网av| 久久理论字幕视频| 久久伊人网视频一区二区三区| 白丝AV网站| 91九九九小逼| 经典丝袜一区| www.acm成人黄色毛片| 91网站18+| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 婷婷五月天无码| 天天看高清麻豆| 狠操91,com| 67914在线兔费成人视频| 日日干日日摸| 9久久久久| 欧美精品精品一区二区| 午夜激情成人在线观看| AAAAAAAAA黄片| 手机看av网站在线看| 亚洲综合在线视频| 久久精品视频久久久| 亚洲色图a| 新精精品久久精品| 亚洲女优有码无码高清| www亚洲欧美| 欧美日韩国产一区二区小黄片大全| 精品国产无码中文| 手机在线人成免费视频| 玖玖色综合| 一区=区三区视频| 色娱乐色呦呦夜夜夜夜av| 亚洲欧美内射| 精品人妻一区二区免费蜜桃视频| 91大神精品长腿在线观看网站| 中文字幕一区电影在线观看| 一区二区娱乐网站| 伊人97色天使| 久操影视| 白丝AV| 亚一综合久久久久久久久久| 9久久精品| 国产福利夜| 97情超碰色| 懂色aV一区二区天美传媒| 九月丁香婷婷色| 99ri精品| 在线视频一区二区传媒| 美女上床网站| 狠狠久久手机视频精品| 蜜桃av综合网发布| 天堂日本亚洲欧美| 97视频在线观看网站| 97欧美精品| 欧美顶级黄色大片免费| 2001天天操| AV色五月天| 男人的天堂 在线一区| 超碰成人最新最好看| 97超碰国产精品| 91视频综合在线| 精品91| 国产18精品亚洲精品| 中文字幕片| 蜜桃臀av一区二区| 色黄污美女啪啪啪免费网站| 激情五月综合网| 日本黄色裸日本黄色裸体| 天天综合-91入口| 久久毛卡| 情色五月天久久久| 久久久久久九九九| 国产精品无码在线| 欧洲乱码视频| 亚洲人妻久久| 国产欧美一区激情交| 日本999精品| 麻豆久久精品亚洲精品88| 国产乱伦一二三区| 日日夜夜模| 视频一区二区三区精品| 五月天色综合| 久久精品综合| 国产精品一级毛片不卡视| 丰满少妇人妻久久久久久| 女人香蕉久久毛毛片精品| 搡老女人老妇女AAA一VU麻豆| 97玖玖人妻| 97chaopengongkai| 欧美特大黄一级片片免费| 91精品国久久久久久无码| 一起草三级AV电影在线观看 | 91成人久久| 日韩极品无码B| 国产精品一区二区在钱播放| 欧美精品庄| 欧美日韩第一页| 男人的天堂日韩| 中文字幕一二区二三区人妻专区| 蜜桃久久久久久久| 亚洲国产综合视频| 91色综| 91制服丝袜中文字幕| 97久久超碰| 亚洲图片欧美另类综合免费视频大大香| 亚洲精品尤物yw在线影院| 日本午夜福利视频| 国产乱伦视频污| 91xingse| 97欧美在线| 性欧美另类高清| 91另类| 久无码| 久久久久9999| 夜夜高潮夜夜爽高清视频一| 欧美91在线| 内射日韩大臀美女| 久久只有精品| 久极品在线观看| AAAA欧美日韩| 久久综合中文国产| 欧美性生活男人的天堂| 射欧美综合| 伊人一区二区在线播放| 超碰天天久久79| 豆花视频操逼网址| 亚洲限制级| 色天使亚洲综合在线观看| 一本一首道人妻少妇免费久久| 国产成年女人免费视频播放a| 青青草手机在线免费观看| 无码137片内射在线影院| 天天夜夜久久| 青青久久手机线视频| 91无摭挡| 97啪啪| 亚洲欧美黄| 北条麻妃99精品青青久久| 亚洲日韩在线a不卡99精品| 少妇人妻无码| 亚洲 自拍偷拍 欧美| 色妇91| 亚洲图片偷拍视频区| 日本不卡一二区| 91九久| 操逼片国产| 色天天野狼综合社区| 五月激情综合网| 亚洲一区日韩精品中文字幕| 久久男人网| japan日本高清乱xxxx| 青青草在线视频播放器| 久久久久久久一级黄色打同平台| 欧美 精品国产制服第一页| 超碰天天操| 中文字幕 国产区| 亚洲国产精品成人久久蜜臀| 久久精品老司| 超碰成人国产| 加勒比综合| 精品一区二区三区四区外站| 亚洲精品视频在线播放| 国产色产精品在线观看| 亚洲欧洲久久天堂| 啊视频在线| 色色毛片| 91网站18+| 精品久久久久,69国产成人精| 亚洲激情综合另类男同| 香蕉国产97| 国产四虎在线| 内射老妇BBWX0C0CK| 色欲久久久久综合网| 国产一区二区三区高清视频| 亚洲 欧美 日韩 国产一区二区| 天天噜| 国产一区二区成人av在线播放| 最新日日夜夜天天干干| 国语国产操逼伊人AV网| 日韩有码专区| 综合大香蕉美。| 丁香色五月 97干| 精品丰满人妻一区二区三区免费观| 天天色综合图片| 欧美综合色站| 亚州国产成人精品女人久久| 91丝袜人妻| 伊人欧美大香蕉视频| 精品乱码久久久久| 久久69| 操逼逼中文字幕| 青青草原香蕉日本Ap| 久久精品一区二区三区不卡| 亚洲自拍天堂| 加勒比综合| 久久久久久久综合,国产| 亚洲精品色| 99熟女| 国产高清26uuu| 中文字幕一区二区视频在线观看| 粉嫩av一区二区三区四季| 97亚洲国产影视| 91|九色|国产熟女| 变态乱伦伪娘灌肠一区二区| 亚洲国产综合图区中文字幕 | 欧美亚洲激情小说| 不卡啪啪视频| www.91理论| JIZZJIZZ亚洲女人被躁| 久9九综合在线| 人妻无码一区二区三区久久99| 色综合加勒比四四季| 久久人妻视频网| 国产AV久久久蜜爱影集| 久久人人爽爽人人爽人人片αV| 91色拍| 97在线视频网站| 一本大道久| 黄色十八禁| 老汉网| 综合激情97| 色av中文字| 97电影院超碰| 色情五月丁香| 久精品无码av一区二免费国产在线观看 | 日韩av在线播放不卡| 五月天加勒比啪| 亚州男人天堂| 久久直播国产| 9精品在线| 女人被男人桶爽视频网站| 欧美另类自拍 | 亚洲国产综合久久天堂| 国产内射爽爽大片| 久久思思热| 国产69精品久久久久99尤物| 日本亚洲嫩草影院啪啪| 欧美激情一| 免费亚洲国产精品久久一区| 密臀视频一区二区三区| 射欧美综合| 精产国品一区二三产品| 日韩一级二级在线| 亚洲男人天堂网久久| 九色 人妻 大香蕉| 欧美天天拍| 国模限制级电影| 91亚洲不卡一区| 日本亚洲vr欧美不卡高清专区| 欧美黑人猛交春色影视大全| 久久色人体 | 51一区二区三区| 亚洲色棕合| 国产97/欧美| 国产黑白丝在线| 欧美草草高清日韩视频| 91n处女在线观看| 97亚洲精品超碰| 黑人综合网| 婷婷超| 欧美成人性爱视频在线播放| 四虎午夜影院| 岛国激情视频软件| 丝袜剧情| 日韩欧美国产高清视频| 高清在线偷拍自拍视频| 9色在线| 色色五月婷婷| 免费av高清无码| 久久久9 9 9精品| 欧美亚洲国产自久久| 簧片免费看视频| 婷婷丁香九月| 97啪啪| suv精产一二三区| 久久久久久久久久久精| 日韩噜噜69| 一区二区三区网站日日骚| 日韩三级天堂在线观看| 中文字幕精品三级久久久| 国产AB视频| 欧美东京热青青草| 国产免费黄色一级大片| 啪啪视频亚洲第一| 婷婷AV一区二区三区| 五月婷婷综合网| 九九英色视频| 91AV天美在线视频| 99热这里都是精品| 高清有码一区二区| 东北丰满熟女国产一区| 婷婷亚洲色| 爱干爱射网啊啊啊| 校园春色欧美| 午夜精品久久久久久久久久久久久| 黄色免费网| 亚欧Av| 天天色悠悠激情| 久久亚洲色图中文字幕| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 97久久超碰国产网站| 精品9999| 日本人妻丰满熟妇久久久久久| 操逼啊啊啊91| 在线黄页看毛片| 亚洲性综合| 啊啊啊想要| 综合影视国产无码| 91亚州日韩高清| 青操影院| 思思久热在线精品66| hd成人一区二区在线| 91在线美女| 热久久无毒不卡| 国产精品国产亚洲区艳妇糸列| 欧美精品久久久久久久久88| 亚洲精品丝袜| 欧美日韩精品久久久久东北老熟妇| 热思思免费视频| 欧美国产日韩高清在线| 亚洲免费日韩在线一区二区| 插插综合网天天影视网| 国产Av超碰| 欧美色图天堂在线| 少妇丝袜在线观看AV| 日本一级特级毛片视频| 亚洲黄网在哪免费看| 久久超碰免费的| 香蕉99秘 一区精品蜜桃臀| 91社操逼| 国产大片精久久久久久| 四虎av在线| 男人高清无码一区二区| 91精品电影18| 色老大| 在线观看色视频| 99精品热| 亚洲熟妇一,二,三期| 久久老子无码午夜伦不卡| 裸体美女久久久| 91人妻人人澡人人爽人人精品| 丁香五月天堂网| 亚洲欧美综合网站| 成人乱人伦一区二区| 91在线视频免费中出| 肥佬影院91| 国产粉嫩出水在线播放| 日韩精品作爱导航| 久久丁香久草综合网| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 观看视频图片一区二区三区| 精品国产一区二区三区久久久蜜臀 | 测评在线观看AV| 狠狠爱综合网| 中文字幕色AV| 亚洲精品无码久久AV| 伊人久久大香线综合无码| 天天日天天干天天操| 97电影院超碰| 超碰97国产欧美| 五月色网| 欧美日韩系列| 亚洲第一无码播放立川理惠| 亚洲资源网| 丰满人妻一区二区三区四区|