From 377568484af2db68a7b9047588517717abd30afe Mon Sep 17 00:00:00 2001 From: "DESKTOP-KFV16CV\\cyt" <2268162076@qq.com> Date: Tue, 30 Nov 2021 14:59:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=8A=A0=E5=AF=86=E4=B8=BA?= =?UTF-8?q?=E9=80=9A=E7=94=A8=E5=AF=86=E9=92=A5+=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=AF=86=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scene/MainScene_New.unity | Bin 83640 -> 83520 bytes Assets/Scripts/SmartX1/SmartController.cs | 152 ++++++------ Assets/Sky/Materials/azure[Sky].mat | Bin 5192 -> 5192 bytes 加密文件/SmartController.cs | 285 ++++++++++++++++++++++ 加密文件/SmartXProject.XML | 152 ++++++++++++ 电子沙盘合成文档.docx | Bin 559850 -> 559827 bytes 6 files changed, 511 insertions(+), 78 deletions(-) create mode 100644 加密文件/SmartController.cs create mode 100644 加密文件/SmartXProject.XML diff --git a/Assets/Scene/MainScene_New.unity b/Assets/Scene/MainScene_New.unity index 61403a93d3164665d6a83fda1c992b076636a24e..00cb6cdf5462ddff976277b38ad4ef1ff9ce9a07 100644 GIT binary patch delta 2838 zcmY+FPiS0a6vf|1Cz+Q>hv{UJOxmP*(KK!Tb}~tuNn2$QaaAEpL6Nu<1sPEB4=%=? z6qSL%eA*Tq|JLOc7ZK@VKq@Y~7F@V1Dmcq5TzJ0w&dKBjhMe==`|i8%cQ5b#^yx_d zlaV-z?)(wC=NtFq2b~w1^(e|mQS`;;!?*D-`t8dodI$e=_}%7NqZ>uv!sE*54$mIr z>_hlb{GR>gX1FAJ?cj``czW4uQ4)k|nEt2pB6UvU+qb!^*6&f{K0joLI?{6)agnkyUpVS2SkD zN|vl($qI_BEM;#_tYpcmHm!WQMj`qYV}N!GdVZk~S=9Ly`6%T+t5J zo=cXrVM!Z`v@NCklxWMQv^$F@VZ)Jib5WF_Qc4IG{9lWNBuCQ43xwpMNE#~ktqa5y z0%pl6SrR8Ga@xO`;bhi0LB;;RC2^7^Cs-~x6iYQPWlEW~QczgeODZMHQm{l0MdZEZ zOewQxm+_jh7jk1+$f1ZFDXap;Dyxm&xZa52ZM&xRmgVTWYwqK;r{+3ZEUxQ=0Lx{9Vo#QmY^Wz$_SD+Q^aRUw z8f>sB55=w!E%?_jt1DS{)xL~8BL&5Uf{Hs;5VW@(9oMNF&g~@!#U1EvW(OCn?EnH; z#ZB#iEO!7_)7w0rUM)3Z3JjV78DNG%m;naIf#Gt$Kd^0@#<;RDNjI((7A7_|W|G<#8`J2v zX@P{Mr>%)%zwE+=rVCw|M$_0O%s)`n9Z6kGcP^Ty&zZUB@Seqx+zaQO=lq`czVEr` z3{Sp1^ysTYJ%(}fFN2+a^q}YQH}CC5hS6;p#&`C!EBIx+vt<|`*zz62xQ1~Tu6O@9Bc>QHHjnbmTNi&YjO!R3!gVV7WDhZ^{(JatOMUT2!?+5K zaC()*_BK}p0cKL|oE`fV0%H%c8;ROYV)dW*oxCL0++BaiQ8uGkR@vn%;~agY@`3uy{n?$p=+BqUm0eus>jZ-4h2X-(>V(5&r&ExsCQN-?Rb%c zR$>O~oh3>4<#aw2ioZBQ`L!J7H*>PyjvZU52gIm%j-Z!DbTkwSy_TowjS-5*2=&gh zY`Z9)8=DTlF~UYgkd!;GF-2QHQ&W?+R+5PsjJ&WA$r7pEw{Hc9!-NtHTwD>LR0 zV}(x=^wN}$hC-p&N)&CCkZfa$wDZgda_J)#+)hpq>rUr9>a^vFUiqR|p6rz; zD;Qa}=#?jW().isSmartX1Exit = true; Application.Quit(); - return false; } } - - bool CheckExist() + void CheckExist() { try { Rtn = smart.SmartX1CheckExist(keyHandles[0]); if (Rtn != 0) { - //Debug.Log("SmartX1 not exist!" + Rtn.ToString()); IsQuit = true; + } + + if (IsQuit) + { t1 = DateTime.Now; t2 = DateTime.Now; t11 = DateTime.Now; - return false; } - //Debug.Log("SmartX1Exist!"); - return true; } catch (Exception ex) { - //Debug.Log(keyHandles[0]); - //Debug.Log("异常" + ex.Message); - GameObject.Find("Application").GetComponent().isSmartX1Exit = true; + Debug.Log("异常" + ex.Message); Application.Quit(); - return false; } } - private GUIStyle tipStyle; private int timer = 5; void OnGUI() @@ -123,25 +129,24 @@ public class SmartController : MonoBehaviour if (IsQuit) { t2 = DateTime.Now; - if(t2-t11>new TimeSpan(0,0,1)) + if (t2 - t11 > new TimeSpan(0, 0, 1)) { - if(timer>0) + if (timer > 0) timer--; t11 = t2; } - GUI.Label(new Rect(Screen.width / 2 - 150, Screen.height / 2 - 75, 300, 150), "密钥验证失败,程序将在"+timer+"秒后退出!", tipStyle); - + GUI.Label(new Rect(Screen.width / 2 - 150, Screen.height / 2 - 75, 300, 150), "密钥验证失败,程序将在" + timer + "秒后退出!", tipStyle); + if (t2 - t1 > new TimeSpan(0, 0, 5)) { - //Debug.Log("程序退出!"); - GameObject.Find("Application").GetComponent().isSmartX1Exit = true; + Debug.Log("程序退出!"); Application.Quit(); } } } - - // Update is called once per frame - void Update () { + // Update is called once per frame + void Update() + { if (IsQuit) return; t2 = DateTime.Now; @@ -150,48 +155,37 @@ public class SmartController : MonoBehaviour t1 = t2; CheckExist(); } - } + } + //xml文件加密解密 - void ControlXML() + + string ControlXML(string originalFile, string encodeFile, string decodeFile) { - if (File.Exists(original_filepath))//证明这次是第一次运行该程序,获取当前配置文件 + var id = ""; + if (File.Exists(originalFile))//证明这次是第一次运行该程序,获取当前配置文件 { - appid = GetAppID(original_filepath); - //StartCoroutine(GenerateEncodeXML()); - GenerateEncodeXML1(); + id = GetAppID(originalFile); + fileEncryption(originalFile, encodeFile); + if (File.Exists(encodeFile)) + { + File.Delete(originalFile); + } } else { - if (File.Exists(encode_filepath)) + if (File.Exists(encodeFile)) { - fileDcryption(encode_filepath); - if (File.Exists(decode_filepath)) + fileDcryption(encodeFile, decodeFile); + if (File.Exists(decodeFile)) { - appid = GetAppID(decode_filepath); - File.Delete(decode_filepath); + id = GetAppID(decodeFile); + File.Delete(decodeFile); } } } - } - - IEnumerator GenerateEncodeXML() - { - yield return new WaitForSeconds(1.0f); - fileEncryption(original_filepath); - if (File.Exists(encode_filepath)) - { - File.Delete(original_filepath); - } - } - - void GenerateEncodeXML1() - { - fileEncryption(original_filepath); - if (File.Exists(encode_filepath)) - { - File.Delete(original_filepath); - } + //Debug.Log("--------->" + id); + return id; } //加密xml文件 @@ -248,8 +242,11 @@ public class SmartController : MonoBehaviour string encode_filepath = ""; string decode_filepath = ""; + //string original_filepath2 = ""; + //string encode_filepath2 = ""; + //string decode_filepath2 = ""; //举例,对某个XML文件加密 - private void fileEncryption(string filename) + private void fileEncryption(string originalFile, string encodeFile) { RijndaelManaged key = new RijndaelManaged(); //设置密钥:key为32位=数字或字母16个=汉子8个 @@ -257,29 +254,28 @@ public class SmartController : MonoBehaviour key.Key = byteKey; XmlDocument xmldoc = new XmlDocument(); xmldoc.PreserveWhitespace = true; - xmldoc.Load(original_filepath);//想要加密的xml文件 + xmldoc.Load(originalFile);//想要加密的xml文件 Encrypt(xmldoc, "SmartX1", key);//需要加密的节点 if (key != null) { key.Clear(); } - xmldoc.Save(encode_filepath);//生成加密后的xml文件 + xmldoc.Save(encodeFile);//生成加密后的xml文件 } - //举例,对某个xml文件解密 - private void fileDcryption(string filename) + private void fileDcryption(string encodeFile, string decodeFile) { RijndaelManaged key = new RijndaelManaged(); byte[] byteKey = Encoding.Unicode.GetBytes("1111111111111111"); key.Key = byteKey; XmlDocument xmldoc = new XmlDocument(); xmldoc.PreserveWhitespace = true; - xmldoc.Load(encode_filepath);//加载要解密的xml文件 + xmldoc.Load(encodeFile);//加载要解密的xml文件 Decrypt(xmldoc, key); if (key != null) { key.Clear(); } - xmldoc.Save(decode_filepath);//生成解密后的文件 + xmldoc.Save(decodeFile);//生成解密后的文件 } } diff --git a/Assets/Sky/Materials/azure[Sky].mat b/Assets/Sky/Materials/azure[Sky].mat index af017f0c9fc8acd9ccf012870a97a9a448b12edd..f0cb87696c9b88f49d5e745e653287d0ffb86d3b 100644 GIT binary patch delta 15 WcmX@1aYAE5fe;h7+2$glYm5LdTm@tR delta 15 WcmX@1aYAE5fe@3d*XAOjYm5LeQU!_t diff --git a/加密文件/SmartController.cs b/加密文件/SmartController.cs new file mode 100644 index 0000000..3c09fe9 --- /dev/null +++ b/加密文件/SmartController.cs @@ -0,0 +1,285 @@ +using UnityEngine; +using System; +using System.Xml; +using System.IO; +using System.Text; +using System.Security.Cryptography; +using System.Security.Cryptography.Xml; +using System.Collections; +using SmartX1Demo; + +public class SmartController : MonoBehaviour +{ + int[] keyHandles = new int[8]; + int[] keyNumber = new int[8]; + private int Rtn = 0; + SmartApp smart = new SmartApp(); + private bool IsQuit = false; + private DateTime t1, t2, t11; + string appid = "AXKC"; + + // Use this for initialization + void Start () { + t2 = DateTime.Now; + t1 = DateTime.Now; + DontDestroyOnLoad(GameObject.Find("SmartX1")); + tipStyle = new GUIStyle(); + tipStyle.fontSize = 40; + tipStyle.normal.textColor = Color.red; + + original_filepath = Application.streamingAssetsPath + @"/xml/SmartXProject.xml"; + encode_filepath = Application.streamingAssetsPath + @"/xml/enSmartXProject.xml"; + decode_filepath = Application.streamingAssetsPath + @"/xml/deSmartXProject.xml"; + + ControlXML(); + + //检测加密狗是否存在 + FindSmartX1(); + } + + public string GetAppID(string filepath) + { + if (File.Exists(filepath)) + { + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.Load(filepath); + XmlNode root = xmlDoc.SelectSingleNode("SmartX1"); + XmlNodeList nodeList = root.ChildNodes; + foreach (XmlElement elem in nodeList) + { + if (elem.Name == "BaseInfo") + { + foreach (XmlElement zq in elem.ChildNodes) + { + if (zq.Name == "AppID") + { + return zq.InnerText; + } + } + } + + } + } + return ""; + } + + bool FindSmartX1() + { + try + { + Rtn = smart.SmartX1Find(appid, keyHandles, keyNumber); + if (Rtn != 0) + { + IsQuit = true; + t1 = DateTime.Now; + t2 = DateTime.Now; + t11 = DateTime.Now; + return false; + } + Debug.Log("SmartX1Find Successfully"); + return true; + } + catch (Exception ex) + { + Debug.Log(keyHandles[0]); + Debug.Log("异常" + ex.Message); + GameObject.Find("Application").GetComponent().isSmartX1Exit = true; + Application.Quit(); + return false; + } + } + + bool CheckExist() + { + try + { + Rtn = smart.SmartX1CheckExist(keyHandles[0]); + if (Rtn != 0) + { + //Debug.Log("SmartX1 not exist!" + Rtn.ToString()); + IsQuit = true; + t1 = DateTime.Now; + t2 = DateTime.Now; + t11 = DateTime.Now; + return false; + } + //Debug.Log("SmartX1Exist!"); + return true; + } + catch (Exception ex) + { + //Debug.Log(keyHandles[0]); + //Debug.Log("异常" + ex.Message); + GameObject.Find("Application").GetComponent().isSmartX1Exit = true; + Application.Quit(); + return false; + } + } + + private GUIStyle tipStyle; + private int timer = 5; + void OnGUI() + { + if (IsQuit) + { + t2 = DateTime.Now; + if(t2-t11>new TimeSpan(0,0,1)) + { + if(timer>0) + timer--; + t11 = t2; + } + GUI.Label(new Rect(Screen.width / 2 - 150, Screen.height / 2 - 75, 300, 150), "密钥验证失败,程序将在"+timer+"秒后退出!", tipStyle); + + if (t2 - t1 > new TimeSpan(0, 0, 5)) + { + //Debug.Log("程序退出!"); + GameObject.Find("Application").GetComponent().isSmartX1Exit = true; + Application.Quit(); + } + } + } + + // Update is called once per frame + void Update () { + if (IsQuit) + return; + t2 = DateTime.Now; + if (t2 - t1 > new TimeSpan(0, 0, 0, 10, 0)) + { + t1 = t2; + CheckExist(); + } + } + + //xml文件加密解密 + void ControlXML() + { + if (File.Exists(original_filepath))//证明这次是第一次运行该程序,获取当前配置文件 + { + appid = GetAppID(original_filepath); + //StartCoroutine(GenerateEncodeXML()); + GenerateEncodeXML1(); + } + else + { + if (File.Exists(encode_filepath)) + { + fileDcryption(encode_filepath); + if (File.Exists(decode_filepath)) + { + appid = GetAppID(decode_filepath); + File.Delete(decode_filepath); + } + } + } + } + + IEnumerator GenerateEncodeXML() + { + yield return new WaitForSeconds(1.0f); + fileEncryption(original_filepath); + if (File.Exists(encode_filepath)) + { + File.Delete(original_filepath); + } + } + + void GenerateEncodeXML1() + { + fileEncryption(original_filepath); + if (File.Exists(encode_filepath)) + { + File.Delete(original_filepath); + } + } + + //加密xml文件 + private void Encrypt(XmlDocument doc, string ElementName, SymmetricAlgorithm key) + { + XmlElement elementEncrypt = doc.GetElementsByTagName(ElementName)[0] as XmlElement; + EncryptedXml eXml = new EncryptedXml(); + byte[] encryptElement = eXml.EncryptData(elementEncrypt, key, false);// + EncryptedData edElement = new EncryptedData(); + edElement.Type = EncryptedXml.XmlEncElementUrl; + string encryptionMethod = null; + + if (key is TripleDES) + { + encryptionMethod = EncryptedXml.XmlEncTripleDESUrl; + } + else if (key is DES) + { + encryptionMethod = EncryptedXml.XmlEncDESUrl; + } + + if (key is Rijndael) + { + switch (key.KeySize) + { + case 128: + encryptionMethod = EncryptedXml.XmlEncAES128Url; + break; + case 192: + encryptionMethod = EncryptedXml.XmlEncAES192Url; + break; + case 256: + encryptionMethod = EncryptedXml.XmlEncAES256Url; + break; + } + } + edElement.EncryptionMethod = new EncryptionMethod(encryptionMethod); + edElement.CipherData.CipherValue = encryptElement; + EncryptedXml.ReplaceElement(elementEncrypt, edElement, false); + } + + //XML文件解密 + private void Decrypt(XmlDocument doc, SymmetricAlgorithm Alg) + { + XmlElement encryptedElement = doc.GetElementsByTagName("EncryptedData")[0] as XmlElement; + EncryptedData edElement = new EncryptedData(); + edElement.LoadXml(encryptedElement); + EncryptedXml exml = new EncryptedXml(); + byte[] rgbOutput = exml.DecryptData(edElement, Alg); + exml.ReplaceData(encryptedElement, rgbOutput); + } + + string original_filepath = ""; + string encode_filepath = ""; + string decode_filepath = ""; + + //举例,对某个XML文件加密 + private void fileEncryption(string filename) + { + RijndaelManaged key = new RijndaelManaged(); + //设置密钥:key为32位=数字或字母16个=汉子8个 + byte[] byteKey = Encoding.Unicode.GetBytes("1111111111111111"); + key.Key = byteKey; + XmlDocument xmldoc = new XmlDocument(); + xmldoc.PreserveWhitespace = true; + xmldoc.Load(original_filepath);//想要加密的xml文件 + Encrypt(xmldoc, "SmartX1", key);//需要加密的节点 + if (key != null) + { + key.Clear(); + } + xmldoc.Save(encode_filepath);//生成加密后的xml文件 + } + + //举例,对某个xml文件解密 + private void fileDcryption(string filename) + { + RijndaelManaged key = new RijndaelManaged(); + byte[] byteKey = Encoding.Unicode.GetBytes("1111111111111111"); + key.Key = byteKey; + XmlDocument xmldoc = new XmlDocument(); + xmldoc.PreserveWhitespace = true; + xmldoc.Load(encode_filepath);//加载要解密的xml文件 + Decrypt(xmldoc, key); + if (key != null) + { + key.Clear(); + } + xmldoc.Save(decode_filepath);//生成解密后的文件 + } +} diff --git a/加密文件/SmartXProject.XML b/加密文件/SmartXProject.XML new file mode 100644 index 0000000..3db3b74 --- /dev/null +++ b/加密文件/SmartXProject.XML @@ -0,0 +1,152 @@ + + + + admin + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + YuAnguanli + SmartX1 + + FFFFFFFFFFFFFFFF + 0 + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/电子沙盘合成文档.docx b/电子沙盘合成文档.docx index 8867e2c1bc6ba2068a02283f354bec6f5fc716fb..7928d6499d7c19894632115db98e9166baa12c8f 100644 GIT binary patch delta 13010 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 KUkK>mlKv0ruAK(} delta 13044 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 L;Z{Nb|GfVn*C5`-