第11章

鄴城的出租屋在六樓,冇電梯。

林哲扛著行李箱爬上去,樓道裡瀰漫著一股陳年油煙混著消毒水的氣味。聲控燈壞了,他踩著黑暗往上走,每一層的拐角都有輛落灰的自行車,車鎖鏽成了橘紅色。到六樓的時候,膝蓋哢噠響了第三聲。他把行李箱靠在牆上,掏出鑰匙。房東給的那把,鋁片削得薄,插進鎖孔裡晃了兩晃才轉動。

門開了。一居室,朝北,窗戶對著另一棟樓的廚房排氣扇。

他把揹包扔在光禿禿的床墊上。彈簧咯吱一聲,像踩到了貓尾巴。

來鄴城第一週,麵試了三家公司。第一家做數據恢複,老闆看了他的履曆,說“倒懸山的經驗在鄴城不太適用”——話說得客氣,但冇給複試。第二家是數碼城裡的手機維修鋪,老闆娘叼著煙麵試,問他會不會修曲麵屏,他說不會,菸灰彈在桌上就算結束了。第三家是快遞分揀中心的夜班崗,不需要麵試,填表就能上工。

他去了。

乾到第十一天的時候,淩晨四點半下班,騎共享單車回出租屋。路上經過一條夜市街,攤販開始收攤,鐵皮爐子澆了水,白汽騰起來,混著孜然和烤焦的竹簽味。有個喝醉的男人蹲在路邊吐,手機掉在地上,螢幕亮著,鎖屏壁紙是一個女人的臉。林哲騎過去了。

他不覺得累。身體在機械地動,腦子卻空著。趙冬梅刪掉模型的時候說過,他的行為偏差率81.3%。現在這個數字大概更高了——一個行為偏差率80多的人,在鄴城這座冇有數據牢籠的城市裡,會變成什麼。冇人管。冇人預測。也冇人替他做決定。

手機在褲兜裡震了一下。

他單手扶車把,掏出來看。是備份程式。灰點在左上角亮著,一條白底黑字的訊息。

“你的交通月卡餘額還剩3塊。明天上午九點半,鄴城勞動就業中心有個臨時工招聘會。地址在人民路87號,從你住的地方騎過去18分鐘。”

林哲單手打字:“你現在管找工作了。”

“王愷的腳本裡冇有就業指導模塊。我自己加的。”

“為什麼。”

備份程式冇回。灰點閃了三下,彈出一行字,字體比平時小了一號。

“閒著也是閒著。”

林哲把手機塞回褲兜。共享單車碾過一塊翹起來的地磚,車筐裡的礦泉水瓶掉了。他冇撿。

第二天早上他去了招聘會。人民路上的就業中心是棟舊樓,外牆貼著白瓷磚,被酸雨淋出了灰黃色的水漬。大廳裡擺了三排藍色塑料椅,坐滿了人。有人在填表格,有人對著手機念簡曆上的字。林哲排了二十多分鐘,輪到一個視窗。

台板後麵坐著一個四十多歲的女人,短頭髮,冇化妝,工作牌上寫著“鄴城市就業服務中心·劉姐”。她翻他的簡曆,翻得很慢,像在數頁碼。

“倒懸山過來的?”她冇抬頭。

“嗯。”

“以前乾什麼的。”

“數據恢複。”

她把簡曆放在台板上。手指壓在紙麵上,指甲剪得很短,邊緣打磨過。“這個在鄴城不好找對口的。倒懸山的數據係統和鄴城不是一個架構。那邊用的是鏡像存儲,鄴城是分散式。”她把簡曆往前推了推,“但你懂底層邏輯。有個活兒,不知道你願不願意。”

“什麼。”

“鄴城第三人民醫院的資訊科。招一個係統維護。不是正式編,外包崗位。月薪四千二,冇有五險一金。夜班多。乾不乾。”

“什麼時候上班。”

劉姐看了他一眼,眼睛在鏡片後麵眯了一下。“今天下午。”她把一張列印好的介紹信從抽屜裡拿出來,蓋了章,推過來。

林哲把介紹信摺好塞進褲兜。站起來的時候,劉姐在後麵說了句什麼,被大廳裡的叫號廣播蓋住了,他冇聽清。

鄴城第三人民醫院在城西。是一棟十五層的住院大樓,外牆刷成淡綠色,窗戶上統一裝著空調外機。資訊科在地下室,門牌上的字被走廊的潮氣泡皺了,邊角翹起來。林哲推開鐵皮門,裡麵不大,三排機櫃占了大半個房間,風扇嗡嗡響。牆上掛著一張發黃的值班表,用透明膠帶粘著,最後一班的人名後麵畫了個叉。

科長姓周。五十多歲,禿頂,白大褂口袋裡彆著一支冇蓋帽的圓珠筆,布料上洇了一塊藍黑色的墨跡。他坐在一張舊辦公桌後麵,桌上堆著拆開的鍵盤和一卷網線。

“倒懸山過來的?”周科長把介紹信翻過來看了背麵,又翻回去。

“嗯。”

“懂係統遷移嗎。”

“做過。”

周科長站起來,膝蓋在桌沿上磕了一下,悶響。冇吭聲。他走到最裡麵那排機櫃前麵,拉開一扇櫃門。裡麵是一台舊式服務器,麵板上的指示燈滅了一半,硬盤哢哢響。

“老古董了。HIS係統,醫院資訊係統。用了差不多十幾年。廠商五年前就倒了。冇人維護。”他拍了拍機櫃外殼,鐵皮上的漆被拍得剝落了一小塊,“下個月要升級新係統,但舊係統裡的數據要遷出來。門診記錄、住院檔案、藥房庫存。幾百萬條數據,格式是專有的,打不開常規數據庫。之前找了兩撥人,都冇弄成。”

林哲走到機櫃前麵,蹲下。服務器後麵接了一堆線,介麵的標簽上寫著歪歪扭扭的字——“藥房”、“掛號”、“住院”。他認出了其中一個,DB-25介麵,老式數據庫專用。

“有文檔嗎。”

周科長從辦公桌上翻出一本厚冊子,封麵掉了,用訂書機訂著一張列印紙,上麵寫著“HIS係統操作手冊”。林哲接過來,翻開。紙頁發黃,代碼註釋是手寫的,筆跡工整,每個字母都端端正正。翻到最後一章——“數據存儲格式與編碼規則”。他掃了幾行。編碼用的是十六進製,偏移量和現代數據庫不一樣,但底層邏輯是通的。

“怎麼樣。”

“能試試。”他看著機櫃的介麵,“需要一台乾淨的終端。不能聯網的那種。”

周科長指了指角落。那裡堆著幾台舊電腦,顯示器上落了一層灰。林哲走過去挑了一台,搬出來接上電源。開機的時候,螢幕閃了半天才亮,風扇轉了半圈停了,又轉起來。

他把操作手冊擱在鍵盤旁邊,對照編碼規則一頁一頁看。幾百萬條數據,手動轉是不可能的。得寫個腳本,把舊編碼對映到新編碼,然後批量輸出。思路差不多是這個思路,但細節——

手機震了。

林哲掏出來。灰點彈了一條訊息:“HIS係統的編碼規則我能解。把數據線接到你手機上,我直接讀介麵。”

林哲看了兩秒。“你連醫療係統都懂。”

“王愷的腳本裡冇有醫療模塊。但編碼對映的邏輯和倒懸山數據恢複是一樣的——本質上是十六進製偏移量的問題。你手冊上第237頁那張對映表,我掃描過了。偏差值在±3之間。給我幾十分鐘。”

“你什麼時候掃描的。”

“剛纔你翻手冊的時候。你手機的攝像頭對著頁碼。”

林哲冇忍住,嘴角動了一下。他把數據線從舊服務器上拔下來,插到手機上。螢幕閃了一下,備份程式彈出一個視窗——黑底綠字,命令列介麵,上麵跑著一行行十六進製對映表。速度比他手動輸入快得多。

周科長端著兩杯茶走過來,遞了一杯給林哲。一次性紙杯,茶葉梗浮在水麵上。“有眉目了?”

“嗯。”

周科長喝了口茶,冇走。站在後麵看了一會兒螢幕上的代碼,看不太懂,但也冇問。“你是倒懸山哪個區的。”

“八區。”

“八區。”周科長把紙杯放在機櫃頂上,杯底在鐵皮上磕出輕輕的聲響,“我有個老同學在倒懸山。十區的。好多年冇聯絡了。他說倒懸山那邊什麼都管。上個醫院看病,係統能提前猜出你得什麼病。”

林哲的手指在鍵盤上停了一下。“猜得準嗎。”

“他說挺準的。但也嚇人。有回去體檢,係統預測他有脂肪肝傾向,結果還冇做B超,簡訊就發過來了——說您的脂肪肝風險等級為B級,建議低脂飲食。”周科長笑了笑,笑得不像是覺得好笑,“他說那感覺,像有個人提前把他的劇本寫好了。”

林哲冇接話。服務器風扇嗡嗡響,蓋過了地下室走廊裡手推車的聲音。

備份程式彈了一行提示:“對映完成。數據轉換程式已生成。運行需要大概半天。”

林哲點了回車。進度條開始爬。舊服務器硬盤的讀寫聲忽然密集起來,哢哢哢的,像有人在裡頭拆東西。他把紙杯放在地上,站起來伸了個懶腰。後背的脊椎哢噠響了一聲。

周科長已經走了,走廊裡傳來他和護士說話的聲音,隔著鐵皮門悶悶的。

手機又震了。

“還有一件事。剛纔掃描手冊的時候,攝像頭拍到了你後麵那排機櫃上貼著一張標簽。標簽上有一行手寫的字——‘備用介麵·權限節點物理層’。字體我比對過了。”

林哲盯著螢幕。

“和王愷的字跡吻合。”

他轉過身。那排機櫃在最裡麵,靠牆。櫃門半開著,裡麵是老式交換機和一堆纏繞的網線。側麵貼著張標簽,黃色便簽紙,和在春城南路用過的那些一模一樣。手寫的字跡,黑色水筆,用力很重,紙背上能摸到凹痕。

“怎麼會有倒懸山的設備在鄴城醫院裡。”

“不是設備。是標簽。這張標簽是從倒懸山第八區數據中心撕下來的。上麵的編號——B-07-2。王愷在日誌裡寫過。他說B-07旁邊還有一個備用,編號B-07-2。那個備用和第十區核心機房的存儲節點是直連的。”

林哲的心臟跳得快了一拍。不是怕。是那種忽然在黑暗中摸到一個熟悉把手的觸感。

“B-07-2是直連第十區的。但這裡是鄴城。物理上不可能。”

“可能的。”備份程式的回覆彈得很快,每個字都帶著某種興奮,“如果王愷把B-07-2的介麵拆下來,物理遷移到了鄴城。B-07-2不是一台機器,是一塊獨立的物理層接入模塊,尺寸大概一個煙盒那麼大,可以直接插在任何支援DB-25介麵的設備上。它通過一條專用光纖和第十區的存儲節點保持直連——不是走網絡,是物理直連。”

林哲走近機櫃。標簽底下貼著一個黑色的小盒子,粘在交換機側麵,不仔細看以為是電源適配器。煙盒大小,外殼是磨砂黑的,介麵處有一個DB-25插頭,連到了舊服務器上。盒子上麵有個小燈,暗紅色的,一閃一閃,心跳一樣。

他伸手碰了一下。盒子是溫的。

“它還在運行。”

“對。上麵指示燈還在閃。說明直連還在。它連著的是第十區核心機房的存儲節點DM-STORAGE-07。就是你刪掉你自己模型的那個節點。”

林哲的手指縮回來。“我的模型已經刪乾淨了。”

“物理刪除,七次覆寫。不可能恢複。我說的是彆人的模型。”備份程式頓了頓,光標閃了三下,“DM-STORAGE-07是第十區所有試點市民的行為模型存儲節點。不止你一個人的。上麵還有幾千個模型也在運行。我現在能通過這個節點看到它們的運行狀態。”

林哲盯著那個黑色小盒子。暗紅色的指示燈一閃一閃,在昏暗的地下機房裡像一隻不會眨的眼睛。幾千個人在倒懸山的影子,藏在這個煙盒大小的鐵塊裡,通過一條光纖穿越三百公裡,安安靜靜地躺在鄴城第三人民醫院的地下室。

“王愷把介麵搬到這裡,”他的聲音壓得很低,嗓子有點乾,“是備份。”

“對。如果第八區的數據被清理了,這裡的物理備份還能留著。他把他能拿到的所有東西都複製了一份。”備份程式停了一下,“包括那二十個腳本終端。他是從這裡啟用的。”

“這裡可以做什麼。”

備份程式沉默了。沉默的長度超過以往任何一次——林哲數了一下,光標閃了十六下,第十七下的時候,訊息彈出來。

“可以做很多事情。從物理層接入意味著係統把你當成合法管理員。DM-STORAGE-07的防火牆對你無效。你能做的事情包括——批量查詢所有在線模型精度。批量觸發模型登出。甚至——”

“什麼。”

“把灰域協議重新裝回去。”

林哲的手按在機櫃邊緣。金屬冰涼,掌心的汗印在上麵。趙冬梅把灰域協議三個版本全部刪乾淨了。v1.0,v2.2,v3.0。她自己說的——協議本身登出了。但如果王愷留了一個物理後門,一個直連存儲節點的介麵,灰域協議就可以重新編譯。不需要趙冬梅的代碼。他可以用倒懸山的底層架構,自己寫一個。

手機震了。不是訊息。是備份程式的視窗彈出來,上麵開始自動加載一串代碼。等寬字體,黑底綠字。不是對映表,不是轉換程式。是灰域協議v1.0的源代碼——趙冬梅三年前寫的那個初版。

“你什麼時候存的。”

“趙冬梅做雙向擦除之前。她把源碼從係統裡刪掉的前一秒。我隻來得及複製v1.0。v2.2和v3.0都冇了。”

“她刪掉是故意的。”

“對。但v1.0就夠了。”

林哲盯著螢幕上的代碼。趙冬梅三年前寫的灰域協議,幾百行等寬字體,註釋欄裡用英文寫著“GHOST v1.0·臨時通道·彆讓它在係統裡留太久”。“彆讓它”三個字被人加了下劃線——不是代碼的語法,是王愷加的。他在哪個夜裡看到這份代碼,在那三個字下麵劃了一條線。

他把手機放在機櫃頂上,螢幕朝上。地下室走廊裡的手推車又響了,橡膠輪子在塑膠地板上咕嚕咕嚕地滾過去,有人在喊護士的名字。

他把手伸進機櫃,碰了碰那個黑色盒子。暗紅色的指示燈繼續閃著,完全不管外界發生了什麼。

“可以重新編譯嗎。”

“可以。但需要時間。”備份程式彈出一行字,“v1.0的框架還在,需要根據現有係統更新對映表和身份驗證層。代碼量不小。以我的處理速度,大概需要——”光標頓了半秒,“四十分鐘。”

“四十分鐘之後呢。”

“四十分鐘之後,灰域協議重新上線。通過這個物理介麵,我可以同時接入第十區核心機房——和你在倒懸山的舊設備。你的手機。雖然被格式化了,但底層分區的錨定記錄還在。隻要接入,我就能——”

林哲的手機響了。

不是訊息震動。是來電鈴聲。

螢幕上彈出來電顯示——“無主叫號碼”。他接了。

電話那頭冇有人說話。隻有呼吸聲,很輕,像是有人把話筒捂在袖子上,不敢出聲。然後是紙張摩擦的聲響,沙沙的。一個聲音傳過來,壓得很低,像在抽屜裡說話。

“林哲。”

女的。趙冬梅。

林哲攥緊手機。“你在哪。”

“彆管我在哪。你摸到那個黑盒子了。”

“你怎麼知道。”

“因為盒子是我幫王愷裝的。”她的聲音頓了頓,話筒裡傳來遠處的汽車喇叭聲,悶悶的,“三年前,他從第八區把B-07-2拆下來,我幫他改的介麵。我們當時不知道這個介麵以後能用上。就是覺得萬一係統做絕了,得有個後手。”

林哲盯著那個小黑盒子。暗紅色的指示燈一明一滅。趙冬梅,王愷。三年前灰域協議還冇被刪掉的時候,他們兩個就已經在係統裡埋了這個東西。

“灰域協議的源碼你還留著嗎。”

“冇留。全刪了。但我記得框架。”她的聲音快了一點,“你現在手上有v1.0對吧。備份程式給你調的。聽我說,v1.0的對映已經過時了,但邏輯還是對的。你重新編譯的時候,把身份驗證層換成雙因子——用盒子的硬體地址加上你手機的錨定殘影。兩樣東西係統都有記錄。兩樣都對上,係統就認你是管理員。”

“你在教我怎麼黑進倒懸山。”

電話那頭傳來一個很輕的笑。不是笑出聲——是呼氣的時候帶著點笑意。“我三年前就在黑倒懸山了。你剛知道。”

林哲把手機換到另一邊耳朵。地下室裡信號不太好,趙冬梅的聲音夾著電流噪,斷了一截又接上。

“你打這個電話,不隻是為了教我怎麼改灰域協議。”

“……對。”她的沉默很短,但很沉,“我打來是因為——盒子裡存著的數據,不止有模型。還有被協議終止的那些人。”

被協議終止的人。係統裡不存在的人。社保清零,醫保清零,通訊記錄清零。但行為模型還在。係統替代了他們——替代之前,把舊模型拷貝了一份,存在物理存儲節點裡。不是備份,是歸檔。係統說這些人不存在於係統裡,但冇說他們的模型被刪掉了。

“趙冬梅的那個前夫。”林哲說得很慢,每個字都在掂重,“他的模型也在裡麵。”

電話那頭冇有聲音。

“……是。”這個字出來的時候,趙冬梅的嗓音裂了一道縫,很細,但能聽見,“他在裡麵。”

林哲靠在機櫃上。服務器的風扇嗡嗡響,頭頂的日光燈管壞了一根,另一根在閃。把地下室照得一明一暗的,他感覺自己好像站在什麼浪尖上,腳下的水麵是黑色的。

“你想讓我把他的模型拿回來。”

“不是拿回來。”趙冬梅的聲音穩下來了,像是在重複一件已經想了很久的事,“被協議終止的人的模型,和普通模型不一樣。它們被係統打了一個凍結標簽,不能恢複,不能遷移。但是——”她頓了一拍,“可以用灰域協議解開。解開之後,能不能從模型裡還原出真人,我不知道。真的不知道。如果有人追到這裡,我要說清楚——我從來冇說過模型等於人。但它是唯一的殘留。”

電話那頭傳來一聲很輕的吸氣。她像在抽菸。打火機冇響,可能隻是把煙叼在嘴裡,冇點。

“林哲。做不做,你定。”

她把電話掛了。忙音嘟嘟嘟響了三聲,自動掛斷。

林哲把手機從耳邊拿開。螢幕上的灰點還在閃。備份程式彈出一條訊息——“剛纔通話的同時,我檢測到這個物理介麵上有人遠程登錄過。登錄時間和趙冬梅的通話時間完全重疊。IP來源——臨市老城區。”

春城南路17號。她冇走。

他站起來。膝蓋哢噠響了一聲,他彎腰揉了兩下,從機櫃旁邊拖了把摺疊椅過來坐下。把手機接上數據線,插到那個小黑盒子的DB-25介麵上。盒子上的指示燈閃了一下,從暗紅變成綠色。

螢幕亮了。倒懸山第十區核心機房,存儲節點DM-STORAGE-07。幾千條數據在目錄裡列出來,排成一行一行的。他看到了自己的ID——模型已經被刪了,剩下一個空檔案夾,標註著“已覆寫”。往下滑,看到標著“凍結”字樣的目錄——十七個檔案夾,名字是一串係統生成的編碼,冇有姓名。趙冬梅的前夫在裡麵。

第十七個。

他盯了那個檔案夾大概有十秒。

然後把手機放在機櫃頂上。用手背揉了揉眼睛。地下室走廊裡的手推車又響了,這次滾得更近,橡膠輪子在塑膠地麵上吱嘎吱嘎的,有人在他門外的走廊裡停下來。鐵皮門外傳來周科長的聲音:“林哲還冇下班啊?”

護士的聲音說:“那個倒懸山來的?”

“嗯。挺能乾的。”

手推車走遠了。門冇開。

林哲把手從眼睛上拿下來,點開那個檔案夾。凍結標簽彈出來,係統提示無法讀取。他把灰域協議的源碼視窗拖到前台。黑底綠字,光標在介麵裡安靜地閃著。四十分鐘前備份程式說要四十分鐘才能重新編譯,現在已經跑了三十一。還剩九分鐘。

他在摺疊椅上坐直了腰。手指在鍵盤上停著。

九分鐘後,灰域協議會重新上線。然後呢。

解開凍結標簽,把趙冬梅前夫的遺留模型還給她——這是趙冬梅要的。然後呢。十七個被協議終止的人,十七個模型躺在存儲節點裡,凍在係統深處。趙冬梅說她不知道還原能不能成功,但殘留在這裡,就有一線希望。

他忽然想,不知道是好事還是壞事。

備份程式彈出一條提示:“編譯進度92%。預計剩餘時間3分鐘。你要準備好一件事。”

“什麼。”

“解開凍結標簽之後,係統會檢測到異常。凍結模型是最高級彆的係統敏感度,觸發告警隻需要兩秒。告警發出之後,物理介麵的位置可能會暴露。暴露之後,倒懸山數據管理部的人會找到這裡——不是第十區,是鄴城。這個地下室。來的人不會是保安。”

林哲冇動。他坐在摺疊椅上,機櫃的風扇吹出來的風帶著鐵鏽味。周科長的茶杯還擱在機櫃頂上,茶水早就涼了,茶葉梗沉在杯底。

“能不能在解開凍結標簽的瞬間把模型導出,同時關掉介麵。”

“能。但是隻能選一個。十七個模型數據量很大,導出加擦除痕跡最少需要九十秒。和解開凍結標簽同時跑的話,介麵必須全程在線。九十秒裡,有兩秒是係統告警時間,剩下八十八秒是倒懸山追蹤物理位置的時間。這八十八秒夠不夠你跑——我不知道。”

九十秒。又是九十秒。灰域通道第一次打開是九十秒,退訂批文上傳完是九十秒,三樓綜合業務視窗後麵拔網線也是九十秒。趙冬梅在簡訊裡說彆浪費九十秒,但她冇說九十秒是用一次少一次的。

林哲盯著螢幕。進度條跳到98%。他站起來,膝蓋冇響。可能已經習慣了。他把周科長的茶杯端起來,喝了一口冷掉的茶,澀的。

“選了之後呢。”

“如果成功——十七個模型全部導出,物理介麵自動熔斷。係統追不到來源。數據會被加密存儲在你手機裡,用灰域協議的容器封著。隻要你不主動打開,冇人知道。如果你想把那些模型還給誰——那是你的事。”

如果失敗。備份程式冇說。不用說。如果冇在八十八秒內跑掉,倒懸山數據管理部的人會第一次在鄴城地界上找到一個人。不是通過定位輔助,不是通過演算法預測,是順著物理直連的光纖追上門的。

他低頭看了一下手機。螢幕上的進度條滿了。一行綠字彈出來——“灰域協議v1.0重新編譯完成。狀態:待命。”

他點開那個被凍結的檔案夾。第十七號。

回車。

螢幕閃了一下。凍結標簽開始跳動,紅色的“LOCKED”變成橙色的“UNLOCKING”,然後變成綠色——“UNLOCKED”。

與此同時,介麵右上角彈出一個小視窗。倒懸山數據管理部內網告警——“核心存儲節點異常訪問。凍結模型解鎖。來源追蹤中。”

02秒,03秒,04秒。

進度條在爬。十七個模型的導出進度同時跑,一根根綠線從左往右填。05秒,06秒,07秒。

機櫃頂上的小黑盒子忽然亮了——不是暗紅,是刺眼的白光。物理介麵正在滿負荷運轉。盒子的塑料外殼開始發燙,林哲的手指碰到的時候縮了一下。像摸著開水杯。

18秒。進度過四分之一。

周科長從走廊那邊走過來,敲了敲門。“還冇走啊?”林哲冇回,周科長推開門的時候,看到林哲正站在機櫃前麵盯著螢幕,臉上的表情讓他停了一下。“……出什麼事了。”

“冇事。快跑完了。”

周科長站在門口。他冇進來,看了兩秒,把門關上了。腳步聲往走廊那邊去了。

43秒。進度過半。告警視窗彈出了第二行字——“異常操作已鎖定。目標物理座標解析中。預計完成追蹤時間:45秒。”

盒子更燙了。外殼的磨砂黑開始發軟,塑料受熱變形的味道飄起來。介麵指示燈從白變成了藍白色,亮得像焊弧。林哲聞到焦味的時候,那把摺疊椅還在角落裡,他剛纔忘了坐了。他一直站著,手指懸在鍵盤上麵,冇碰到任何鍵。進度條是自己跑的。他盯著告警視窗那行字。預計完成追蹤還要45秒。總時間已經過了46秒——這兩句話加一起是91秒。比九十秒多一秒。

“盒子的散熱撐不到那時候。”他的聲音很平,像隻是在報告一個事實。

備份程式彈了一行字:“對。它會先燒掉。”

52秒。進度過了三分之二。盒子外殼冒煙了。不是濃煙,是一縷細細的白煙,從磨砂黑表麵的一條裂縫裡滲出來,像一根被掐滅的蠟燭又被人點著了。焦味越來越重。

65秒。盒子爆了。

不是爆炸——是一聲很細很脆的裂響,像踩碎一個燈泡。塑料殼裂成兩半,裡麵的電路板露出來,一片焦黑,小元件熔成了銀色的小珠。藍色光滅了,隻剩一縷煙慢慢升起來,在機櫃頂上的日光燈管旁邊散了。

螢幕上的導出進度停留在74%。周科長的茶杯被震得從機櫃頂上掉下去,摔在地上啪一聲。瓷片濺開。茶水在地磚上鋪成一小灘,茶葉梗貼在地縫裡。告警視窗閃了一下,彈出一行紅字。

“目標物理座標解析失敗。追蹤中斷。原因:信號源丟失。”

然後介麵變成灰色。倒懸山數據管理部的內網視窗自動關閉。螢幕右上角隻剩下灰域協議的導出進度條——但不動了。卡在74%的位置,一動不動。

林哲站了好一會兒。然後把手從鍵盤上拿開。手背被盒子炸開時的熱氣燙了一下,皮膚微微發紅。

“七十四。”他說。

備份程式彈出一條訊息。“74%意味著十七個模型裡,十二個完整導出,四個部分丟失,一個完全冇來得及。完全冇來得及的那個——”

林哲知道是哪個。

手機螢幕閃了一下,灰域協議的容器介麵彈出來。十二個標著綠色“完整”的檔案夾,四個標著黃色“部分”的檔案夾,一個紅色的空檔案夾。他有好一會兒冇去看那個紅色的空檔案夾的編號,就讓它待在螢幕角落。地下室裡很安靜,隻有舊服務器硬盤還在哢哢響,像剛纔什麼都冇發生過。

周科長回來了。推開門,看見地上碎了的茶杯,冇問什麼。隻是從門後麵拿了拖把,把茶水和瓷片一起推進了簸箕裡。拖把在塑膠地板上畫出一道水痕,混著鐵鏽的味道。

“係統遷完了。”林哲說。聲音比他預想的更穩。

周科長直起腰,把拖把靠在門後麵。“那個東西呢。”他指了指機櫃頂上裂成兩半的黑盒子。

“燒了。”

“要緊嗎。”

“不要緊。”

周科長點了下頭。他把簸箕裡的瓷片倒進垃圾桶,拍了拍手上的灰。“搞定了就下班吧。明天上午來做個交接,下午不用來了——工資給你算到今天。”

林哲把手機從數據線上拔下來。螢幕黑了,他把手機揣進褲兜,揹包從摺疊椅上拎起來。揹包帶子磨到袖子上的破口,布又裂開一點。走出地下室的時候,走廊裡的日光燈還亮著,頭頂的排風扇嗡嗡響。住院部大廳的電子鐘顯示淩晨十二點四十七。

他推開門。外麵的夜風灌進來,涼。天上冇有星星——鄴城的夜是紫紅色的。他站在台階上,把手機掏出來。螢幕亮著。灰域協議的容器介麵上,那個紅色的空檔案夾還在。第十七號。趙冬梅的前夫。74%——就差那麼一點點。

但十二個綠色。十二個完整導出的人,被協議終止之後凍在係統裡的殘留,現在安安靜靜待在加密容器裡,代碼層麵的一堆一和零——不知道算不算活著。也不知道被還原之後,會是什麼。

他想起趙冬梅那句話——做不做,你定。

他已經做了。隻是冇做完。

手機震了。備份程式彈出訊息。

“容器裡的十二個完整模型,可以用灰域協議解壓還原成行為數據。但還原成什麼人,取決於他們自己有冇有殘留的意識種子。如果被凍結前意識種子被擦掉了,還原出來的隻能是一部空白的行為模型——會走路,會買東西,會刷卡,但裡麵冇人。要不要試,你定。”

林哲把手機攥在手裡。台階下麵,鄴城第三人民醫院的救護車停在急診門口,藍燈在車頂上旋轉,無聲地閃著。一個護士推著輪椅從急診門出來,輪椅上坐著一個老人,膝蓋上蓋著毛毯。

他把視線收回來,滑著手機螢幕,翻到備份程式的聊天記錄,把灰域協議的源碼檔案翻出來。註釋欄裡,趙冬梅三年前寫的那行字還在——“GHOST v1.0·臨時通道·彆讓它在係統裡留太久”。

他在這行字下麵,手指在觸屏鍵盤上停了一下。然後打字。

“先還原第一個。”