diff --git a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3GlobalReferences.asset b/Assets/Plugins/Easy Save 3/Resources/ES3/ES3GlobalReferences.asset index a0425544..77b768e1 100644 --- a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3GlobalReferences.asset +++ b/Assets/Plugins/Easy Save 3/Resources/ES3/ES3GlobalReferences.asset @@ -1819,7 +1819,6 @@ MonoBehaviour: - {fileID: 1524686825098782564, guid: 46049d3ff4dad4821bedf56d617ca43d, type: 3} - {fileID: 1121734563517916470, guid: 46049d3ff4dad4821bedf56d617ca43d, type: 3} - {fileID: 593245589465948632, guid: 46049d3ff4dad4821bedf56d617ca43d, type: 3} - - {fileID: 2800000, guid: f20112bdeec2e8d4d9f80e8390e37263, type: 3} - {fileID: 4785562013637215009, guid: c5aa08cd10a80df4d910e84592e8d29c, type: 3} - {fileID: 4649969390340602616, guid: c5aa08cd10a80df4d910e84592e8d29c, type: 3} - {fileID: 1343749204177564612, guid: c5aa08cd10a80df4d910e84592e8d29c, type: 3} @@ -2361,7 +2360,6 @@ MonoBehaviour: - {fileID: 3528006045498041885, guid: 1eef181acaca89841a32060c68923043, type: 3} - {fileID: 7500112046719515624, guid: 1eef181acaca89841a32060c68923043, type: 3} - {fileID: 7493294112363221826, guid: 1eef181acaca89841a32060c68923043, type: 3} - - {fileID: 2800000, guid: ee148e281f3c41c5b4ff5f8a5afe5a6c, type: 3} - {fileID: 11500000, guid: bf69cfa06c48dba428c5c4d626d57ab7, type: 3} - {fileID: 3181541828967505747, guid: 2b134afea6d3d41b6989a409a5bcb2f3, type: 3} - {fileID: 10306, guid: 0000000000000000f000000000000000, type: 0} @@ -2370,4 +2368,51 @@ MonoBehaviour: - {fileID: 8828428123186639208, guid: 2b134afea6d3d41b6989a409a5bcb2f3, type: 3} - {fileID: 5926976348826933642, guid: 2b134afea6d3d41b6989a409a5bcb2f3, type: 3} - {fileID: 2018703855695848494, guid: 2b134afea6d3d41b6989a409a5bcb2f3, type: 3} - _Values: 526a8851fe85233e7cc810cd2b8a733faa68e71a62b99912cf2f06228873853005edfb00aa354575a31cc8ad1ac7b966f52afefc8351b636e2b71574be99675b6400dfc3607f0069e96d5112b3681f5fcf550a7f3749f10c2c006f2e23d1db370e64801184e106752a681216ffa3837998b5a5688fe7245230fcd93d5728ea479cf46b8ba7516b16ed2e96b5bbb6e20e0c6272c125d7806f67cd366983232521642549cf9088373b29cf12c86a843666a9d2726c53c784328db49f8d499d2140c6bf413c35ce7d12821326d7a7c36313210e18f42f147d60db1f64f3ada3bb2d6666d31a094491222bbde8f495825a4e2f05ece33b3881253ca117543370bf2531ac8ebf10b7f565a03ac9712b88ca589b67c1400d671936d84e972e95f1f208f318fcbd24a42f1a1594d13a0cca1e4d0b9a28c0e4238a4cd5432183fe0a3d37c5600352a5affe32a0f1cca64d60c95d6de43a2f1ab3ec2f8dafe7e182ac1c0b579975acc6cca75b9cf61ff356e4ff757ac4f0e2446c5178b3cc3b0938e3500b2c3eb04c15e369388d95cb10d3df8656069a951142fc403ed6b4a90102e5146519f66f6d35134e18b132d9ec6c3ec954f282992fe09c9f2a9752fc7c47b5d52b06e06eab61a6d10e4d7cc274d62caa67eb540f7f4be5844b6a66281ce82d2f664f7483a3a0ebff69576b98633aaa8921a5ddbe04814bd97aac297cdb1235373261c4cec06828ec556592c57c95cb2c5c853ad052230733029b09f8776f245772a3ca0276dcc8b833ca146a1411560f76a926a9289a1bf169092fa58ddf9c3a7517c82635364a7f4df403890f9d1ef144fb812196cd7f0c77286780f491baec2cdaf4fd482fda400ba6f61b9da4000716c29e6ca1845b5768bcaf0ecfc98bbb39185d35a921a8142041153dc39aaa1c286f97b630278db035fff6d32e0ef214326ce60b1f02d1fa3100beb18fe2b7e76ee911c7c76ae00c14c122f29acc03601a51f08a4016e1082f6d7eea356c2d4766a7c4e03aa5e33455a9d65f214d9d8402a2681f2dbdd87b070a985bebf6d6a81097a7bf6f1b653f6d44ca68c07e191e3105186bfcf1e65731b726cef277b7a02e2f4f8ba6de14e73c29b17188403b8622b78df10f42a4017cfff026423332e5732a39eecea4c4101a0158da5ca71f8e0cacf1a805a8b07076b2f15811115bf709cdfeb27a2a54c77a62f3f016365a2b209de610da2415e4793787e44c9401f65bb01b6f5693eb1d01b923a2b5bf5a3f57c537732b4a1ce41e1dd3bc5c8f84196316b39ae5142b724ec80f2101722eba6ec83b11cc7422a66c365139bf2fc07134f6c0358c0bda930f573d9dc4051c541157fd8ac87b1d9952a64ba6e19ca69e2499417fddbe2caa24c1a561f21387762d2def8c67a4f06e2bc76e0cb0d75f9409b22d34593aa82d7ba7ae89207f8b652d5f423bce6076d56121e00caac4b88c2c7dcb083a94c883285aa4d5c6ce0a8162bfdd6753d123843ddced44e075745b023dbb7e5b896e8269c01328054c9b302a1ab4da484855f13539de7736f3892f04d9f6479188c48f2cd00d4fa9d9c99a7201753abb270b443240a506dad2e62f21bcf924dbc733497deec366e53a852b5d6e466fed752cfb7898b19bdc423679483d7065d2ed753932d34255148ed5933b2f9bb6e6a9e268170b63bcea6793c524c3515736dfa68f07f4c3e5cd2819166dba29f321139f0d5a074dc689b94fcb3f83cf281fd236e5292abdda6dc835402586d5d0c1605cee625fb13d2d6d18c0428f254a59f1f69a0ef2e209aa3a5f6e2ef35ef170e07360261e3a3ede074843437e1dfbee809a1671c43e2f82acbcd800430f3a0f274f621bc623782b35791639d9b3d6a7a4a251738a9dcae15d1d2c629ec1dee87cac94318016b3a41242a73e5469a8f9e5305b1a9e52653be5bb871d51da8e739a2dbc794808278eefad6148f68c8cf374337c311ef987ce12cf173b716a0b132fe4277edbdd4e22f732d40ef01d45592e93a97ca93fa95e5a129817e09c00a6478b8824b30bce51819f29142579bf2f14716a04ec784291717a27138999bca5ced2397ca56aa623c557fa0aea6b7c2b2d37d36ecd046c4031e66938e3bac7e8e2834609b33cd57e178eca6b83c7852308adbe3e94d428359a07b5400093c0f470edd76c4e79870e9eaba95c32283d069372be6e79067bb6ab7ca454796a807a3129056bd4516d76698e182e2bcd6bccd4d0d55bd256e985ffc3c546e2bb353081161d28e9f2b17c68842a61ffbca8999ef095525156bae067ce736817b45824c349af41156b1c1de1a70c577fb57abce4d3570d25e2df2a5b3cc1489ae5994cd4f9624895167ccd2c878e56b79ca0e2b6cfb2425d4b4aa628d99c27562c7d03f23f7d7819c328ce578ae1527135e0f7dda3ff6a97dca81f440971457a5478000a8b6376e1d8360c581b142d9608e7a1456bfa07b651858937153a686575e98014203e3e284564acf772d0414ace1d3510e7224a5ade01287e0be64f896976eb354cd453dd6c74b85fa2e828b9d4c8b9fdf7d24683ea1f5d51667f1d5e15238dfce40c6aa371127c5bdaaa470b279155bdd3ad6d9730674a2c76017713a8a6b681a4d32ac75e5c6e094fa25e94676779f8d5da313d6e0934833ec218748a6ab334f3c665ab98e2e4d0e388478e09b6c50e887e177c2785ed64615806e08b1e6b46aa6d77d33232a00d0a9e1f09ae3d730b78d804f67dd0a3864c364a40dbc45b01f48e388ad267be45e0da793a5a1c4adc1a0557652262c47b11fe1e96831e163005de15e0fb03221f68b5285849dde06880275b1fe340dba9ac4b77d44955c8fff1aa3ec7ce951ee81cc70492c6e23b11207815a53ccaebba464132d331f694d66968042f655630447ceb4524f930ad89858d64d39f505d3e46807a1100bbe767782751b8dbae93ee5fc7226db8ffaccc4a5544bcb047a020454d5b3229c26b55bebe32232d20cceb1df107ea74ef6b3011a50761a6801b71d94a7d2c046a22d1333431a134bf8204e4ed2af4022af362109e2f2bef44313d81ec1a66a47b3c19c878470a55a2690825a356561e72b38fd7ae01ae4a6e96bb747f192505286ef155af188deaeb8cd4eec2232870ac4269fb76048416d70ae562427dd5bc4403fc346500705927a4eb212c63f36e41d3df3e7d298f24eada7da53229579148e75640d90c0cacd20fd3d11862168be888de916169c0e48b27b6757d3627fefc7d6914ba33b8b137cc9492aa430c88f1098dba073930de2672b5b1567fd6f7162a2a64072a451ccf2c5994d52e5bbfe973432468198e568f78da72731274c4468ee18fc367d4dc573e3c894702f74d106b78d3cd639abd3cfef63523231af4bf491b069c3f6fa51cfe8a26f82a3862d4b8df032e395b7650edaecae8507bfae382678d6e456f60c0820b69a968c953246344f2490055701c155611592b394b9a3c1ee2f55a1bf1f247ccd2d2694ad889b2a6521d6ef8a3102955feb74a8770a5d5a1229266ec4babb2d341af68b75b7f20341902746809447bd2cc041cc65840a4d302386b6bef9ff2fdcf41490c571f4e8127805e731a6c98de179420d656ef8a3a32d12f111d50acd2e01727d13d91114c1fc636929d3615656a0a7bbc9bffa1e8fa965da8113e79c5a1a532ea7e69180454e3301d79c190e8d37329dca220b7df4ecc352b1196c41eb28f0f07fbff1c2bdc8067b8cfbd62bc27462b9e145567c25c1264b234edf3be1e113122b8fe0f916a78044273957140d5010ea7ddc4fa9baa221fb56a55f91470e032c3ed7b7ac540e3304aa888e7b67a23199892ea67d8a8886e3c1377a78f0b3b603c0fdb93fa5c2e4a7d24561caa96003a473b91a75a470a6a98d8a779cf888976dfb7c7ef7a257b79309bde95c7ed4c3e31f237a3cd6f326f0a0bcfdefe65af544078f6f57d7bd96bb14684e8d850aa19c651a98b6a058644e66f933b98d3f00b2986bcc9080f6c13622ba77a1bc4cc0bcdd33418335b655093c331b81c194e667a0d386610db497d85bc8c077879970f0f788481ef1da14bf438ddcf86935441de988d54da39ba18e886f1c49546fc655bb9abaac6878c5c94128d280185080d674ae51107ece948329c69750e65e03bf4c85e45f9d5f44230b5c90e524e0b3bb3cbf2f392c067444ffa037bccaf833cc7382a1dcc2e985810164f89baa0c11e6db27652245a744ccf5d09012d86897f338cd68b7928087b339ae27b70de891043de1680da2a9e6dc2da8aeb7d87841910cf4ee764334c589bab7b57cc374f33e8b0b4bff010953f3aa8bd48d085bc6c8f107a773d9bd8085ae78680199d8806d542fb322c3bd701c5f052438afb772099171a234e388e4c2754e52869eaa729cf3be1ed7e1066351884c3d112e46d5e6f651930b7ab540e30b7f427a95067244828744e1a89a15782afc42d049fa043e686b803d1777123e6d31c36058ddf691518771690e1bb19c4c1ae08e7270a3159380d2f096af52e49ae98b99394ae0b30a5bee3e9482c38bf2dc0f03696c440c8eb8e3d9b0f7256ddb7321eb7fe79589046c8721a11e50ff42a8e2455fb084deb57827e23eba63fe7ea3e5f84b41043a71961f0ce5126253061b78e7fb1fe1dafe4090f80f77b5b5f77a5faafbb6b40194bcb6f5cf81c67325c4fc13417bf66e95cafa0ab01c2616a42b0ba08de2b15cef7a8ca7d6d7a48c7a140dd473d9076360c11520bcb94177895fbe6b89da010779b0bc3910b1657d6f8d809c1e51a2db23983fccdd809677340ac188e6c6f65425065ac31cde52b0b4684ec0d74a95cb12999f1219ddd6091a34f505efdc96a778c388f7f92041aada8f9eca2098a1717f73748fa9f7920d239e571826b330710ef76803c19dc1d267e4578a3f1bd652d666756341165281418be46ac9298418b0e234c6df62403e5e6dd84a5ff83207c7f9fe8d2893c21ab6192dca5698e6d19fcfb4debf52d37bf9b8fb2cb1f7d12632035d30c5091144a44a00b64485e7ca8909556fccaca71aed62a36f98955353140f88e2c72327c9afae1cbeb46af062f3ee5210169112a5ced08811d51173c1498e218ad380442564a0d94d4a7b01976a0d20c469d880ac65d0dea36916d6cd4439108b966e8286445e5c71c857105ab9d738398585c3b235fc67b358fcb4e3e5b38030c80505f8c1b790f545aaf2aded7ea8238e50f2c6133d4e7d39ca10cefcc763eb292062b112c088221b218375064a6f285b279584b0b643f553733108693df771b8e887022ea8ff32272f413070803712d5ee33e24caeb90be938541ff778b61706a531b2580bce919456724969712e6917d19124948bd6ed2e296715c1f97ad1bcd5769330f2656a56bd27e5e798a6a7fcbc427626e326103d6f779089f8329ad839369736893d3d7b9a515c1c36dc4f81cd00dac6395520e1a3741c3fe060f90aeac4987b19c151667416f40f7684def3ef65fc13512f827c6c3729fd495d6c0b4a5709048b555461adb4423269305828430000b9ab1a5634bdd40ef2ab5ebfc172f7451f7dc38f44ca559a53229fecc4110240ca800cede208b3074f4ce53ff24fd0595c81e74014cd75e59579ae6381f0b32b56455eba24a932d91e4d3616cc5e57e068a30d4ca1f8f4dd6899052f7f44a01adb6a64188ce3e684fecc49a919d5d1f913a3f667a40ea6299d2f8f8b46bb74c636f7e7e392f295b8a12b2f554ce9500eaa57737e24bd950156c11dd818e75022a8e9ab75fa21a594f2e8a3b57e369743587910b5c8b361888b5ccc634dda04674e22ba04c32db0587acd350e64fa6454d80847622460d718e44af390f09c167649684afb7e531381087a00e5ac9367d20fc133249add740a062c3a29f6c351c651b747a894e2067f1cde6ed0971e14a41bbf0aade71675dae7b56c1aa440b2e024144bbc135ba3fb4c3492055d86e526ebdcff41324d423a86547c714c35042a23df12748362346bbd7c659ed7b8a0360e41da91826af4f35de0077eeab2966d89a0daa850e790cae6031888835886e5e29b6c7b7f308009da3c217da7df95673ba9d5fee78c30ee65f0ee602b9d47fb09db1bce5ee0a00123a1ea71ade021dd042c7772fb63c7ab09d30cddad64d6efa88a9abd063e55014502f07a1d6253da6fa99d2b4b6af48eebab31fb028e06c822ffba2e9a7ff45b6e493aae93bbb6f9af1e14ba87bef34fcf2e794bffc0d745c69ab821abdbe49752385bf4695c3063fc69ddc8e930546d71f0753e63e8923ce681e206d4ef360a8110ae281cdba383d5decb893f8ef4b47017b606217370815c42d58377d100bcc33c15c77f25205e4babd3577630b3ed440168219f64f42c9a61eba5969004fb9ee2c789492242a1c80b06ff717be50646f6dc5641d077c6b5456923870ea2450ae18c8858c6c08b028f297d8dcc13793a408bfc606a2618009ba1fd68ee62a599175b6053ff61dbd380e95ad88c353e90b1981dd745c46fd649e9ba661cb2c3aa6c78588bcf956d6d27a6970de5f345dcab9b453163936788019aad29804233d2d5cdc06bd407044620013b013f659b495675b43d2402af8c75519d8cf4c115bb9b078eba1e25d0388c73f926d054a6c9e8c6e7f3b03478abd53ea3f23a95b209c5d9296adc737f70d848c97dd1009046820267c915b6bbb8c6a783139812631a21057bc30274e8c5e5a747ee13f6c86ddfcd1f6e82b4b6bd2468e28296901adbe560ac6716d0a5d4876ea0471c4019e5abf58082c97032fa9050c49353a01f6a1c74f47aefd354919b3373616445ccdab782e4a6a120a78d513294d19791340174152c0174e5e4c345e794d13ed33566936366fb9b255767c9f03f14739566925554f5f218e6271da857b3c542541e747b7479dacc820cceff4fd96cccc1d5543f00a5e6f4c0d57638c02646c1535a3e0eb38ff80f3425c351b4e158bf83da6a3cf7f452f9f566d3b10c6df394437fbd5a54a1f6ce22c51ae66938a9b22336b4e5bc19c95f02e8142ccc4702c636a7a525340e6ae1e3ac0a2d0f39533e02ee723ced16bf92b661b89349ec75962234bfc0edcee621943302100f9c5fc984b23faab93fa35d57f26ed5a6fe3bc011a05f43e9241bd1c4ac4ee5eb606ce5e1622807bccadcf2815d871fc234276d97320e6f4d1be06091f18f6d00cd61e780bb48e6e9cc732372be4ac462f3f07f739c8d2d6ecc230d4278a9bb5b7fe1c3e08e907d7d0e5753b52e3df4b95b3c7a1100169bbfcb774b77c46b8edd3837fd3396e3e1946dec81e3df1d7f51d1bc08b3dceaaec1a66c03614a16a1771cff409698427fa5248fdda77454a0a5cd01af12c13cfd85bb1677d2f550510a9164da141a98a7574396c8e2e308aa04e356c1a43a5bc7c61339be514a429a74d0d848d0856374bba5b830d5abf55d4d839d10618ebcc055ad1400e0d5a9ee69cec23c44b19a9a46cb8d49f27cad6208970be4d2cdd71c72675172669bba7a043638e92636f760e1d8a8d2e16d2216f05e07a631815ed87a215153e00843bb211345bc43b45bd1bf9af30a24f43b0f897872b49350bb82f7606ef4e58c8f266b125e31d2ee5aa499d965dc71b4b385f641da77957f27d077b2c4e34546fc2c1a196537425ce277d3175e7cb677fb5d4317015c46f6cbda2a2ea985b33df9e0c581f69b208c53a96f52a47e2094e60051edd993b7b88310d54f61610667d4feeec0bdb7915fe330a555345654ca0ac538a933d56456390e0507706ff52d6d08c86c931ea721a10e4ef5c6f3042333e0b5c956505400857778404d76103cca3d4dc2d14ea6e3f1e5c5bdeba5d2de66211e085c9c552961aacfcfe5ee93292fde55d0708af69d224e50c4b614d14e4e6e6a61d506675d74849db0d1bb0646112b9f17f5bdc224d574d55512d62347f8214402bb6de6227903a0b07b9a46e10669c6161acd20a2d9cc6dba4801f0b5941de172b9aa27fcab738c0cd60f93646942401c87bf669f9f9983d7592ac258f1fcf312c96a754f7e3d5e71b6c287295fd2138a421d4224b751f3101650a36f5edcd526e38f5501230f51b5af0b2732ed92c8d4c1a35500b0e1948898aad6e266123f6c6851e5df92fda8bd446373b28935fdb929783254982b99fe15338777d780b0732445257bbcf867cf4c12452bbab8fe31576ff41e5483f493ebd3e5a089df1a4c4cff71c420897611eff1a09a80ce436c45561057ac9ec7b839b9602902b7357cf808e75a3aca10ddf9e231b6248f14ba2751e5efef61d8dbc72a05a7394f1497371d92865a56ce84cabda24592e2133731e5a1bf4eba7279dff46154dfc9b4bacdaa82b2119e5fd083612531cf9338d516ce76f11f3aa78354d7464ec8134484625d1342ab2eda6c7a2ed2a0205bc69cd2b9946e40a5c9f8420612c5c7eef79fe36f309d80049fca572c94c202b8acf6ef4683f1811d3ae7d8e4709ae3eb4b74c8bd338073abe328b6a1371411080599591bd6717af61ec62458c4946bf551bd87e6754013c36cbcac94b53019e9293f1128c40fc1ccefbedbf9b3e518a86b440d0b540872aa52d3776ce1f044a11fe28e0c53433141fbcb06b6741a0f77a3f4296123117aef33893a0f7794daef7a2ad9d1671c552812bb0f88f1bc3648c3ffc8fdc6dc81fea292c02382b0b996f0274c493031ff7850fea187e0e3e0ffbf72d3676412f76953278c061377652e0e877725801d0895df314ec58505f2414e3f9bf0142f14ecf14a63a845d6ab26567c7696835b7fac8b69469561ad0e5919cd5453034abdd07d65cbba50bf344769d790f760abbdf99f387b8d779f8b445c0a8e788501d6543169d6d2772602c3baf0c465e3f708657b4df24bc0cfa7132efff9a4c0a44da7fec349f9329faf36ca583d8933ded7baede6f2b8e07aa361c2c3b37730588b994cd388df50e1b80bbebb8178921210b2385b7d585184b77966bbbbf643e7f99e236bc3afa7b70bdf8f0e77abf6daefa4d475bf8bc5cc052e74fdb9e3526e6f96b51f9c0de18ef57eb06236bce2fb72918b60dac9978aac18a96ac54602e88d2d6e0e5116613e3cba7fcf249c62c211697b2867e186d6d1c58c8c9b89365f7bc8ff542af1559c205d242059c850c7849473c13ec4b0ab96973c9b89e492bc9be0c502644912ed50e107f5429972f974c4f807057511cf7665054dc21ed244458f43c562acd432589eedd0335a11c005dcd93b1364420f0d7b8726a19f40afd343bfb345bd93e1993a5f9462f1f2cf892acc6107f290c14d42c2de240ae3e82071f310659175b848eac45dc3e663f497495023a45e57df4d1189fd154a359be1c88c0f011da5156f8bc7e2d1bcf2a6fede56eaaab0338ec9c3c3541788a27330587bfb5a54e379b4458320263aa26fe12f241c6eefc121a50ad8c4d0f92226d95b032a38ee03761522c99ad2eca4fb99ccdac95341244f68b599a073d16754dc95f68eb223673f329a2181a95bf471bfcd4b042e58c5ea7f53c18344530233cb64ce4ce616325d440b96c91f92a734aa1b50412c6b733ab413e091ae1c0385ac654d1e2a4167c61f9dd012b20cc5e1fafcd938f2c1075ff188f10a06d3f0e818112cba5599111b832640ca4b85f758a1fd63650ac377929362f05ccd8e232c6137f55f2ff46791186b6301b3c5f2a26212624c5156a3f0cf90cb59ea3515c7dd63cc2ce7f8e2b0eb6510ee4edb411c4853aefae55483ce9c5d5db45dc254cd812b445ff9d5c59af51150ec45b5b1e45fbf1186961ad2ee186536baa968f329005e6f6a1f911611f6cbfa3c0c6877196486ab615f31d393f1dd9790f38fc18c2e37ebf75647c4b1670c92adeae1158f23afe0cffb9b87bdedf487ce068ad5697279a5bbbb81805c6b6a1a429f25a112f316a493608187c9cf99c55adf82c533d8d3df9b793ec55acfcb8b6e7ecad148636ab12d2f78d710f1dbfc11cc35741e3f4e2b62f53c863bbeb62c6af9e6b4f4c87dae4a43e2534e65115662cd5c6165b886623319bbb316e4757e694c7c15277f08a6b178d6220e5e82e22c29dc81b264c6b2637471e18bdf3ad1469f3371e6f3c0fc4b5a500322746091acaddf30b1073c1485b9a1a2ed371af23df4eb626204db2858e036635b362ff0ec1fbb121005efb09cd113d09563e97265423112790e33a17907999122609044166d60f31dc2edcc2b63f0c0ef057d0b093c01f7051d79ea536c8b279f80ee2c40cfba37f2f654a26474f7030f0492739a9e97f182974f08e3869fb137c62c9a85d48021405af1f06f5ba47019a916a800f14dd1e73046568f4ebb93a96c9561a7a382d38b4c3c1a6f67af26fd311d8352b84dc6fc117e49d5295f70f97a56340ef9d84619bcdcb2d2a7bea13f7d495e313830e111218a59dac701949452fc26322cda1358d77d0f95009993c03f7a67eff14fc1368adacf7bcddf22a4d7d8ea6c2b2ca29cd9fa9644cea3f1c4f1e5f5ce867b63033aecbcf7998f26a6afaadd27bf27a50d382b460429fa07e6e8f45db3d4e121b38a28cec19044f656eec31b868ee675b5bf0d094e3e98c2db0b6c2f7213258470ec80a1e7f666a31334ece2fd158e65cf7a07f4c7d7d384f155e3b634258445f4679ab9fe349dc3d5b0261941b5d5c58cf650080b20cc975025933dea2cd74250a6e744a0385404084420f84e45bcc48fe1c6c23a73b5352bddf6176ea026528768789ace911544a25bf03f51b4e595a72141f799eaf8246c1c68d2323ca557aa937fb6be579310e8e49b798c0b6926e7af8fc291c1475380543eb228330265b977761acb63bbf14452deb55f7e9850a341e9d1cc67f976c3d3d8fd69bab6d5ddea3d0c8e7c1da3ec61890b5ff35cf1b431f119b6cf56b1510ceeaf3ca95b0664072cd6445b20d0af9db55aeeee26c086d7318bbbd08ca18c74447e729198c5cc8f6f57203346170edf96bb7b4e6fb0e3cf2613eae6c23483de62c8af9f533204ff8e5f7edfa0538ee57323c62ed9c1e4938221b7aca0b34e7c151169f13961d2f813f059e6b342fa0d5159fc30d391566ff5f447dea9c7ac83ccfc8ec611221bb04331c4b96497043b23255c4a67f191dba3c629b6b423ec3f4f31141e07f0da9f7328743d69d2c3956c790313e0a38958e062baf626036ba26ad32bd84a705d36690bb1af263056cfe9b761e374d529e25520342f46a2f1527de36e78b234aafc16398cfc6525d2b01c0b0c7e9180e74ffd0e3d6ab4821039f580decd2e120dc5026e09ae6216379afd94034ba682bf0305519a4f9de04b01b92c5bd221b03f565081080c4f9175490be2b82298645f00e6b57100340420e58a2c078558b466cb5ca52b624f11405f7a5393b49e0290d51b201f435834593f8bc5b2b6bfa7afc8f31a467ae29034596141dac03be1b1ab623948b61d64d3255a4874220037d0d0b4482494dcb703ba076e18e8e055d9980a331a55b1d573a2d4f01a7455e05b2a5867f1d54046a65c44a80257a583ea5fe123d822d284dededbc779dcd170bbd8f6bcceb7a8545c1c6f52624358c65b970aefb7201680586aa7039c85377484be253c5424b626f7c7d27a25cc7c274a29ea858678d9a45038a08ad7f6666008e21cb0a19cfb231d60e54113f577a42f7bcf901e4550d0d48e6a6d7e4914a3bacbf1d200a43f97d3d3446174d53316ffe6047bb4caac55d30247f7b811a5432463bee4d24865642954cb9617714d773586e53e110b0f500fabf512ec275ff577687a277bd806b7b4876af669bd82a1bb4f42c1092c9bc0930ee46e4d885040b4b10eaf0725fb5282631d578a0a3642d15928432b7103b3fbd54b930c5785c3c8f5be57411c55613ab5436c39e35a9738a18ce4500d2533a2c545338e719126173eef8047626c024e997dd0c47ffde79ac45bbde46a13d6150dfb6428de1d46e43d451b03ca4fc4e270ca4970ab80c2acd33735ea1cce52f4f68aba922fc4d073d91b1e4ae714a06b69348c5025aa908141e8aa5918a330eba81ffa550a57123a553a587f8d8833e838658f17ce0d30bbfa2bc4187f2994ea15dd5d28e5b495c046c1fafb5210f145d36ddf4cdbe6d26aef464f362b2ab4cba56e59b02b1b022d0b4f6e80082c0626d571cafea5b7f1d11517f7d40c24048e9930aa1c38bee537a443b7e4aa9d82acbfe79f46a039d152bfc54abcfd29d0c8c52ff9387e1611f69c835a52000d26686abb7c1c3ca4c13cedf8839c8bc7b59a82e0a9ca96bb21664a5a3ccc6bcc9292bed327a895fd03dfb143b57a6d7a925458efef2f635bd0da232db9692e62574574e9c4911091d48a2335d6bcfa490746271a6e2cf774503c8d3a5213cc08213f71ee693acde2f63c410a0ddc25f112302bbc4ad9035870489fbea6f362e06418f4b74fdfae40b7cbebc591fe7dd3969c28222f8852fa33e97e21da8c99f996a0a5f4e77eb142919f9061ec65d46537df480134ab71e796640225157631bc309671356f98c67215bf721b492e01e312d4e024384d7c63f515aa2a457ea00382343142e709c4d0973a148ad699519795e876ac9dac0ad3a3605a296ce63ceff409e14c14ecc7a9748985b7577f84cc064e8ff940f8935b92b29dc7e86e4da3531e07cba3b9865c35864a083f5b51dd95089f1d76834d62a2cceec77a9f81d2c726e5967846d7a344dc3ed732ab8aee146b6cffcf302cdfc4aa8e66dacee1a5f45b6299bf50a7c2e1b17483d96f7866e1366d4b4a635eb2d59316ea6cd13baf91bc2e1b9640ea5a6130d18aa16cc20d00d2b23d92af82c4d63ee0c822a7c22373f3481aafcad1e1452d8bc70f43b968f15c9ca6a657cde1c249a93fa1375fb6711ca21fec66dd38535a7db70716b3c20075fb4a55764835f562f1ae7acd6f5d80bbaca88c27ffec56f4306262178dc9972a0b54a05f0e4e04eee35b2553eb0c30868111123e4057c688f870fae8eeeb15087ac62212c429608e11f3cb8fb5417232ad79a54fc6a6849a4620b5890a64543ce09224e316da555383b17cd6730c905dc85354cbaed9120a7b33453fabfba69778d3425444cbb78d2dec8dd4c140d0b5fad79abfb90fb7a74d48185dd90f8338530e31b0b5fb66db406b78784e26b0a9ae5d13baeee250c844ae35b96036a71a08d06728ec83649f99bed4f15d2e36d68771fc36134e16a0cd79f564312044f9b452711e9de982f5077bcedff2908562e51f31ee3a7102c908e9848d620fa19989eeb5bf9f55775210f8d15880b9435e1f584940523330b35fa815b464f58307da3849d156350245896c00ccada4b63de32d6335b71e0746cdf90f477b2bb7069be932b90324a44b957c2919cd9be0fba1bc787d973741183f909f4f4459b5b24b05bf4b8e02d54e992edb233721145625fc5a315cb680bb57e5076c3c1c774bb676cec7eca5665491c9f4686c1de090a4f919480f74559474f3e3a90b691555b616e9adefdc367085fec316aaf9277a4a6948bcfcd0b3b2112a42e8c1cd400520b13dbacbcd408ee0673dff4ec1167bdc6de364b1c25735632bbf1a2f2f313751420a06449355f85636236a5d4b80d240b71c53e9db536e59f31de78c5aa04eda09420348ffd0605c24e174611322aecc915ad63b95212cb5686047a14d84048a2b6fac067276bf29536ff133283082ea435be24a79859f2a7ea8b1601810f16f12f5ca4c7967b5d5643327dad00682c82292a21e6e35ff5a31397ae4d7e0ce9b9eafa9d1f520ac44ee38514352844a7825e93d857ee2f0dcf6601b4ffcd10d73649c4c305ca0cd1e09a2cfda1b53f86310fd31115cb6d3545123147afa93a802c5221149b7e5e49ae9c470ee5d2507c59781af15ede13fe4806f7e703ab20c89f522fb06cd415b3b18b6379845f4f73c2b6ed368e49204f3f24cb94867644fd84ef51c8fefe172e8e683fd37a997916487bdab2411557178c81106e5f552b3b4660fd74b117713f314058d9f6b32c91be04fbd763fe1f25545ba7282e5943798f07fdeed08e333d2b93a137c6c24d9fd8eca9bc4571412240939facb6b80d6620addb941af040d02fc6fc085fa95f910e074f42b0874202491f2f632edf788d7ac4e8e618477a19532672818bc63d69cbf2625097344a67952322c5df5b01f2c0767ddb6dba55ab7d976a28063c767d1d3868c382d80a467a8250f525b538129cb7d3ffca21605aada0e318c3c473677fc89f1496a07bc95f7102847b613880cc869fc554f57b5a21f74885d21f349ef2d76cedfef158c2cdf560a7e124214d68634b3d25ad437443f8358ee80009403da17752cd257ebfde62934955223a4619fc1c6ed4f63c60e40856f944352543e48d5ec21afa359acd84581be2876b4865176dc4cf857957c39fcb0af7421e8e7dda89469779448ef5d3174c1eba73a0ec4a79453ac06fef5d3562f701db50132d7d0feea646356cd3e4e2ec92b870d1232b799bc961065beb55aa1d3f5b6bf2a5255e2b0e3206b7a2a21ac263493b37e7d0ee86e42c050623d8f69ddf07542f4ff0466d5a4521cb6f1efaefb50e0d87e09cb019d65c685608158d8cfd3123a2af44b8156a7276a5e63df301fdbb7abf1d32b2090ac57fd6c8e863663b3136531255ff144f6a53c58fce6fca7e19538c3b7122ad2a231fe98bad405a84f614e9be9f084b3a9479a16b6129923d941fa554335438e44327f0361788a129f93f6646a776e2dd613ad1ebc4188b4cb12620cc9b0651a2dc31fe38077daee2e43464a0c24c961d3d7d4a917cb3e0d4635c7b0e972a710d110808907c2b0ffebc3df6e6af1de16fed2d639b074285f159578eba28bda822986ba96abb70518f6b79352bcb74a20bd94beb46b749d8a58c07ebd3bac9267ae62cb3bb8c884c83232cd172884e433106659374d2626a4f9303bb613d1980af006e69e3194a2ddb4b47ce555d9b4c4897024f8f66ffde47760513cd0aa46f1fe61b7463f8873648d50208bf98efeaffb24e15472d17ecda1c795d9f0fd34b40451678ff767e6840eb704a56a50c739925781084c4884c4f833f7a1eaf26d994676054b327876db0f42aa5439fbd80d613083c771d30fa319c3783b6044a90c49622be05b9bf719e0b5e6f651bf74f394050cf479dae4e68a52218f00a23b53fbb68253d0084e2ab68639340609fb36b78498b4be6289dba8f546197a88194e7a850e07b2eeec744927950febe7037ba2a7c695499695892cb1f174e80d06599ee46ba6d789c79ff8b1ac22518404e3ff84c4ff044e3d6f432656653afeb192fa633e1ff3b780237c928a9ccdfa9212de25160215c4379eea9426a87fd2847469c30795ddc6f1b380e6d37014b3b8ce9ac0cab077fb4ed3a4748029fec56d5f46659427235e4eec5d93f5bdb8f44da9abd41650e06e64b38e11b2f405ca575ba8609ab6d7be476279358d01675ecca6b9a428b83f2d1fddbcb132e66ee797362295f55869a6d1fd8cb73a25e1535c2f45066a81b55be0ff2e33313de4e9ba8bf8e27efc81fe4d600a45cf93f74f753c262181a66036bad620e37607c2ecc8e4e11455edbdc3d2510a2457bb4434fd1bf320ad00fd5b1e6b0ca169b76d03f10983a436a127eca9e6d12093b420f06e1419a5fb5db038086a0a05212c5d99ce0e15612f086e6be41676c62033412d7402f085a248f76ca6a4543094c2f46276b89d61c9822f5672858a11db99a83ad7236ed4031cc87ae95745756bc22f58f516c327aa30ac1e2c65fce7c319412d0c295967d1c86f69e01288723366054fa9dee3424cefd0b68740b796e9b03de2987271952b97372ca7694783593e5ac660ad3de429f11fd3b75d1f728009bfc01b6a1635d35fb82621fcded5c83bbf91793aa3465dd9babe68e67b91d2e9afe9ed1a2a311c09dc41012991a424cb4fa403694546f9dd3dd001bf86163b4a08fbacc8c2d1f18e858f6e52352427e96652592861867b970fe023b5c0a39c39e3a4dd72bf128e319284e3c5d89787f65814da1790a2e79d7ffa372d41c740d6e467ca15fe552a53d07acae66a317f97682d5dabc974a6cf33951d46b650d024ba3555bfae5207f2ea864715d7f2084e86217a90db051d6fce795983727105dea569c3db24401916256ac1433d836735ad6bdce7cb60b9a527f5f125087480697c05cb41c5d37d49b79b948fbc25d23b108f30de5df20de044dd24122aa16f08c58c4a390ef5f2d9a4a7d9611d65179e7ee151671a373d36249674d03845f2de7fcf721e5e73bfab5b34eae36c45b505595e4f7120861d0330fbeb978ee2f1fa9ab7d0dce725dcf2a0fcb24f222629ded17f76d9f671ade9bc755f4a5f472a4e26d58e142691fc8f3b22122d48522ee53a4587019624112c65ca895c75274e17d8ff9a085bb5a84f72e7aec45f709eb5a995efe64fd7580d4965860ed4b6f452740a5448c816869b62b861518aa57419941c5d10c8a457b0578741c13bb72be61cb3afbad3b76dd02f54838765f67d6c06605d0efbf396404d5c0ecf3b37c739ec9b34d705b102b485e2cfd2d820e65df9e5cadb6a153dffb280927857516b18629665253e646e489d0e6b214c83582c725cb910f2a28bfe26db7669bc750418b227ba8179e1107a8c0c87977fa0c3da1751055be573e50ad598f19d11f7eaedfd7c2c8bc216799c93a16b09e5037dd79f30710d8a5001e9f34aa8fd1d53577be88a6b1422b073d2355e10691111251a2cc5a4770bf50868e281f0a22d15d389ae80411d52c260319527729f17345644ebb85649a4527e20e1f163f87006e20244398ddc9c17a76a65e60c2367a76fe927ba622a93d2d20ef19df0abd997c18e3974e350c222e1035fb0af8a5ea19899618ad0b5a4c376f4d96ecad32347afc00a98b5a138f41699f4f593a10ee4eba2e4ad31e91e75242263dbec35f896aa733d1e2f7fad82c4c373e2e7953d47ffa89e1a930ea346a06427d21d2f57d0771ba0403d3a92502cd89fb405f32bf483c7c77714204a403c7627c0fd0e3f434c3548706eea5e25dafe477b9e674ca38fe3aa2b09211b66ceafe35cadacb2c4e82d083f45447a6699d1bf0eddaac381d47d6c8e90e2a1c461ff4e9870e700f47181ccd6942df38230935926f37934411e202dea595ff9e3d9fac136d43c0c00e2b38d4bedeceda689ea4f244bc8b7d75502896eeb04a2219277507f10c5a8114eb45c0b1fabb622bc4bb3b5c26eddd521882c73b43300c240fb5672dacc40d37fe7b8523423ef21dd8322d511e24ed404035fd58f5dd621a52e4c0af2290d800ae035aa2730094578c1b9deffc44fa1539d9931e3d9ad31fe6952ea281bd0568ca55cdd940731e0d155488b603463d482a8544212d0d2948038e0e80c2531b4f64179e9ee3493741f8a2c24abd1c654a31f08f3c83f6da281758cf8fed2222238bb032cc67e35145726af656944d9b2dfd2fb1fd619a666fe1064b897bb3c122c22fa170150e6d775d7eac62b5a3d81a3d6e3673fd5c442518a2ae6d2fdac040a8d418c3ef0c420b63d7a51fb837da7a21993a1616cae065aaf4c9088a794d5670ea39b495c6a41cfd32e37b8b2c900c1fcfc4e9c4d50d0f7fae615c039a9a0573b5d491cbd8067815f2e2d392a4af37f6de2d22eb89d16522d6cbbcd7ffdf68331711befede270829c32b2e0cc68224a26699da9387e6151d90910af2b55f132db5f9564a91c918f349eb69e9d4ce4c64679d5706544363b0ce3646744b632394c881d9efffd926f3a7eec2d607ae7bc25b400a0f2f1c7463f16167b7f33e0d1867fb20d7aded160d347e3764a81903a819b64aefa1527b912d8ef9594ec4278ec25884fa88e4778010f1ea106cfd6d984dee91a697ab162fc3487b2e42755263fcc87bc93bf405ebce4e9e4fcbbc19b295960da2a79c3c6633e6f6c4cad60c1299e185121f236a6ca0345bd131a1392262e52480bd94631ecbfc389755a6648ea8ec4420dd962fb900a10272416b3392add561e5b28c302e45674622ebd23eb9661686e119a60107eb9480e46d0e5f3630c9452a074940341c16db764f0d5b2c1f4427a80eea5554d669d0460c153ec9f8f00ede72eb4ee42aae3afc357448dd3853c528e6b72746749801711a8741cfaa5b91bfe4c660f56cf52c42daad1e9ddf51809f2598504fe7aaadf5124002b3ef6c52d9e2883dfeb4ba95dce46a2122b66391c807a10c43abe1a78e735607adf77a526d5b447f678f81eb6b02736b7d898b3eaeae3a466e86f0d2fe1e50720ac142d45ebd8f7d051cd6c77a495f45204d2417ff94b65bce3f3e0bb3e98248c2f01f554060f23f07f2bd347bfe3f471bc90db4bc978e61779d051f7e84ca1261e1f976d5f6fa405be4110cd781df338279da8208c9fa299d41322299ee4175bdcf955cf8b51d10c54e5ad785818a067d39a0f85e4c1a2a25dc276b3b275948d979b0f8147dc433a336424590dc5c1f35c75a9fb2b7e909153fc7e4724e2a63f511b1ff31821a008c92aad7f52a66003a473774cdba966e62b9e2d4b5dfc0540bde39a18e5b514d53a5ebe0f3eeeb405b37e2467a60cf397b4261eb64efb66aac001d2b9cf7706b677a388d5a899e74cea22eedc107ce6cae731cd0bd3cb242a5a9cc0d2e405b52a94daef4985d9403e2d6b9061ea32c5a31b17d28dba0ae2bc8f5310355aba30efe80950fb5c3040cf9e04d6c09479f017e713edfbd842d48032642717067a6738638fb60c6c3f06dac7120bbed1b350f6ccd7f38157c347d5221f4717f6c646087c1f3414200c74063ac8c2ea5e93617f033dc3ee6df88036c78b2e8b761ec182a7fbd50f188ad6b063ed669f005d868ebdd61b249a24766b60951444d4f073c665bfbd9d41ada79e0474325b5f2f471501ad394c39f6278395706fadaf2b8554612cf4c00b13c05b8db9391e66c1b3cec1f0bcd838d8638077deed4de2bab2c00986bc8c140720257d84c9e32f35f34c435f04418142e477468ba7c3c97d9733067927ed7e4fe2b6ef1dba326da9405dd2299131bf0451397dcaba67a0a3940012731667a22f457cde329d8c775de662d4ba6a1ce12703ede811704c7a84e792b1ca44d0cfb80452f424638c76c4c2002ba85d09b678e12b7f344fb3af81e7533a204e3192b722734138c7333c7884a33c7fdf2dc81223c726dfb00bf837f35dc2efada9797f82ed452637725e5217e8370368d04d3674e80c772ab3071674793c29605ccaeb2353fd4e075e155e973b3827bcf45f2c5093954a5a0f65ba161ec1c0be77b264b2abd014d30f2f16c2ab2e55fb2ec368d5f0472c2deacacd4658abd9e019f2f1125325aeebb5a6ae9293e2f10ef04108b4b71531bf79b93826ad5b2bab0906ec97e2bc57e6db72efb677667e223423c9665b7158d0db5f73f3bde59900d2499ba306592c33f921d9442a84b7fcc4fa1d8661c55f87be1bcc93386434a10bf088b10deed414f87a82c667fb54aff88f4753b8129297992351156c98fb84ed383834fd88fee615f88df3a815ff99707c8bc7bb98691e93205a257dceb1917617b3901c665d707f9ec2307b511040ed056a200d33d944cf19a1d23334586746ec7d90367042f5e0e4a7e329d75ccdefe6b793172e51461f0790c2b48b4393f7297767cea0775d485000f1ebbc7e96766fc213833ab19ab23c50c1f115ba7c284bda53414b637fa1fb14871d6f6a52890a5c54c92000bc77eca5924fa56e5e0a7d1a27893e2ac503bd8e67e62a7d52c20e48e4adf0cab7b36924d4a5d12ffc9cc67ca04542cbb725115876ae78964d7f42c04163964ff64d9d8be2530f6ad4dd7af4a04232e270cd6e30735844193ad2e7655300ee90130662edd2d151f5eb73d2abe682c9606ddabee1354a33616e59394ac5a4dde5cc1b17a6b510c55f7b78550f8500103273a83cc2302fc568d3017f79956344795a13103494e2cb4d256f65cce0c2e67e696bbe6de7fbb59be08089c6903ef4eebcce6998104b38af0300532f359259902b011029a4d68155b8ac15156714cce67a870022538e9eae331f6ad7a12b3e8d25e61e6ea0e17c6ca030af33a61337f7cd39a9cc92742c538d8e097a84465b628278007f031ba76bf36cd29420aaf81fe7731a67816e15560d8e13c10516f0f67c11c61e23a915272efa3ff0b17832e8862951f750a303f462aa718507c9a915a236efbd94d9fc307831967ba1f4b4855b2b4aebb717b8d0fa457f31d7702f68a35592e867ef829fda6d906dc69069a20a13d623748b3346103f5815a6c1f807af00e10871b3d285521549eb57e6a78abf113beb564d12d7dda337d7679846ac45981cc7716dfc39cebf2e90b51ebe0997cd669595fcc16c23b8d614f404e24631526a40336f0c2124f22c97144e7053f254b18240c937ba2f719b7fc5f455a10b31991b72f7196b172f483d60367a0e2fcce97b66d83b736fc14ed5d1df7185da583d75d2533d2858306896b718fcad574b04465535b5dce9ea444e45f3cf2aa558d7d677173d26fbca40329683356419ac29f9404fb365728b3382939fd648c4984e6736aac0ae79274b60e2487ae5a57253ebd3b58c940c089201c19caac3b33d290f8643d912b41e044514c73b0c1d68c1c456290415efe4b754218f084b897fcdae048835abd66c899d80f53ff4a2dec58f41a8be95437b9c3c611b18f2f5d6fb3d911eadfaa61d045be7868943eb126d0ed687062f4ec7a56714622ce1858c8357f5f2639430dae934a46d62461b2fd88c87e7d97cdd1a7c58b40b00f7d61a2e9bf3116ded75f13fb160253c5e9a90a41b666fa652aa0fcaef860ad02bdbd10abe9139ad063e14f979579add07ee2dce1360f391ba4f7eca0d13cd7380d15b8d31358dbd50f3addd51762304e0dd3cfea7b3434517c0bf90ed90501d848775b54cd7ee3d60606d2fc31640441273bada40b13bed9e26757075f15af143ab61d8fbd24818eb6a6f18106307c1ff0c5c9eb4c5ae55bba8172662715351c57bdc17a46747dfc43c3a54dfa3bd3b1e376f724df3c2bc00bb180afd17ada9cb30cea4f45595b05ae6c8e0f2b29cc2b3753d0200960b39481ef166a001623e7671ebc408823fed1a369919b4c5a89028fb27f70904ee2f7ae0569398649bd8862013235073aa417c8cfa6c55f58d1f9e2d2281d6e607e231d0ff0f2f737a812d9e601b17241f536a968c79f0a1d68aa2a9de3a78e250a3c81aaace8d5680fff2794ec78567d6d24c75fc6d7281cd2c457ba37a6ac4f600110c1cce211210c1159c77776312002a730bfdf2e5e31eb9b838ebf70606853d7f3ed88184a76ec599428cf0f6c5b6dc844212893d030a3dead68669fe0644f0f8b607dbc671af3a7ac38c3860023d1d805774b7e6e1958db6f99394d237339f876de9accd84f62292e81e7976d1b227668716596e72f5e8df65eb3311f5b7bc68d44022041624eaae9deb013ce406f53bcafb694d95c11477f0dd57a9c6cb6760251da4ee201350523bbac087e4bbfb6cd07eece11106016cd455fcb722b0e7d273a107c6542c9421b43476bf60838cbb2e0536a8117784eac2fe1443b424141678728229858ea7c9519b9ef9315198506f768aee224961605d3ddf9110ce524af8022c5e25e5a3bc828aa1d713b9b6cc135022f8d6d5f42f0121cc47b1d8fa135944012f22167649d2de6b97a78a5c96e4aba470e4a9742e065b6f47b6ac0abb74b52067b787ba09d66ccbb5359c8786c535530622a507f0102cd72955c21f892c5fed1d9614df6c45ae4751724f0872d2e61cebf70488dfbd20479aa1236f946d3288e5b66af32faa094f8ba2498230eab5f3b415239220d8bccac652bb44d6f214415b261d4387fd02ce0234048206a28875572057fb2ea4ba79f9015eb6788488aa131178a2e9fc0e8b7740dc344cc210bf42221ca2f2e96a56c4248f4e0d73d716796559695caaf4842815ad085f95d211bc052589cee689d4e4a58c3a32d94ded7eb77c212679dd22417250754c52cabaa9624fb8a214a04ba051b1fdc135beb138307667d63f04cdd7f7d4deb900deb88fb170d089069f8367b7c1883bdaf3772101a27326cd6f1788e1ef65c680fb4edf85728d5980b5c13ff62f9e007d09a2fb5252589cbe10a2df67b98ae739bcd6bc729749a779d26fa413ace3022ee8f417c24138e353eb9d9625433ec8b52609c6a65a7315bffb718ff2ab86e51c4af1af555cdb176c1c9768f4e033396c6901026699c8896c09d7bdc2a719f79b577625b4ee2e084af25a99c31a10d02ebafc5bb58b718d6d87bca4849735fb0d6032529658fe5a87195d58f4425c861ab7ec7d954e421fe5f8c83d21768c4de7ba68dca38ca98856b91d21273a71afc432cf4c755865bba252488f1124740f52f08ec6169fe29e2e5416dc248cd8e488e7971155b8d33f54ad2a51440a773b3d2c8417b44476dbea9295269179a71589540629847aaae43c31e53c458eb5dc03245107f751303470cb26b323acbddb0604c7e00432593d7e50247d90d56996a78ec64a256f2ce833d1b8c943d84f606bf5c9cf46aa2fbf34dc7658c5add54634cd6ab262f81076f7efbc2284ed9eb9ef4bee54f45a5001ae858f01d74bdd79f39d6b7992f1c363f640c7265212d5a8a2439676408051df1d7c50f8770db1cc32d9d9edb707b31ee0bda4cae329af9bafd66f93b5672963df3a970f52c434f771051c77c7181e557f887a6d150cc2472bfca84d61de16dba0660e7c60b3bc24d29c3be8462752c7d4b5033dd19688ebfcde2b5f6417959f1be8182d168539dccb50b05eb76a9d435f602226e51715f612ed706d67934f35ee250bd1c07fde5f8b367270e625db789491513bc551460b1dede5d6f5a7445e8ff63cdc61448d10c18e4de46686fc4d2207c8d641f3808f6b06efae65f8a61c0dec1f0002a82616e19df2bc63619494ca32f8fd701aa08366cc476834249945eb961dad67ec4a8a2defb7dff63d02cc9b747898e18c63d7636d893110b23d49e8b757f680c20ca67d732b5fd28079a3bf1403b8a410645809f510d5657baaebc27df73ed4f3b4328ed0f99b511c0b1d1c1a8e0345da02079d00036442d21be90e07124077b878ab6fd129c3261046d2060c36a512785a137001242b005fefacb5008d4a01b46b3b6cd69ce900312e7346cea1b96486d695bd0ed076845dab0fe17d1e1583033fae5ef4c7b4249103312fa771cef1a9114e39f79cf2e3e4a71f2b8d078320d40653aef35a6fc16555b40460a9131423f1b7943024749012a243abe6efa1967010539dc57de5038f0050b2bf08ab623a335f7ebf1760f081c38c6116c3ea85943d9470fca0e9a1d944eab02c4e2ee616f1661a4f2055875f531f890a561a44f5eb2e91643a7584ecf1557a3ca0c43022728a255dc04673c7f2dfb03f9d53d32a95c6076cb04a538bf1373075dfc3f1713094932fb05d4594bac9570a25c480629da06925333c92b322468366fa0207ba7e9bd2823e8ff64e20bfd2449322e0c9ef703692bc2ad363f80271d5055067c1e56bef2e8900076d4292e17eeccd93cb60334bd9394e6735e2d106a1fbf57136319d85f5cf92558e17965f55fe27e0c100aa674c8e13f2ba0a50036b973343fcd355ec0117a2043212322e5d10eeb4154e3a6ebe71db4435a04bfb7f8ef9e6c4625c295403f1d6aea6352a4be5a5a519241e2d6cd495815e9a11a1539d73b113e71d5092e7e7e143ac42ab490a7fe4ca0eeda49f23761043253801da6cc5b13d8be1ed0d09c7f123c31ee6e8cf359425d328bb4020de1752d26c47d0063456e68178c4fc5ce1c3d6dec0cc148f3773ef93e7ad857101636dea8fdf660fc1227147ffa8a99f5822ab137dd10e55d423aae8583c1e96d165701562c6ecb129e6a02cb2a3812fd27103f5bd9dfcdfaae3a15c85a197f2bef7e96518bef21f1f661678cee4f7785b353536bffbbb90ada04fb99a6fc477b152cbba9a2c07138ee4d657778400c5fc2647bae6ceb2baa387588780a77b505e61478c194cee3f2e11a834ea8be6e660765d74278f5e7005765e31749ea4266036aa27236b5340b7e6e8f8667dc017a06228f5ab108822303766a2eebcba9f6d71651131bfb2f52301dc1e6856e6834675c1f6c5be8b4fbe7398b52e09c08b6e7795e7d8bee5e0af31e8ccf479b9e940e35387053c264109e4d05aa797dcd32d90aff0ccde6c055bb29a085a21b4cb3640abc542a86f655214d21c10cf77b8f1358f73d9c92c72875712c7d21df6d8301470f8439215d5f0054d1e53a01b63c512f6704ee76af092d1bc99c5a793342df5c3dac1709aa0e04683d4864ac62762810d50eb98d8e880805571eebfab9798870fb213bf5dab77a74f6a8c6985b7f47403b95b2be0392153ab41c5fc9f9ff223cc1f3b1413b33351c6cbb7cc8b15f9f2a662cbf24c6ca6c680d00a9f717436e087a76a7b0ce7784079f69d540f12113557d352e25be46030a8849353a893d044f298442280750f911a8b8c3309fad592deb008ab28d6b383f7bb1298542497e226e24176cdfeb4e2d3c1dcd760a34a926f107258ac8b6dc41b5fd5d468681ac5d3aa09ec4c4c60d00b25d756f9ec23551a4b06bc4db0ba524ffa7df23b76a4c4137d44f552d92152afb253d262c4ce07633aeeb36ed703945b93c3ae21916b61daab7a673118a7e36c595bf0049cc514e39970ff780e9ab3a9c090e69ccf8431024a42e1b0dac77422e22fc822f3a8e121514567ef840623ef493f1e46617fd422730235b62cabe73e133db5d1ad195618403aa485e3ae764f992f05f62a4561525ba5cff1632af4a56e39ec465052422fe90686ac245a061188863d0da5f113cdec5386075964a48b3f49d42d8acca0c92319e2ec413ac20e60517713021900ad361e79fccc4ac67badfe2481d1cc53cad8f9cf301c0fe0e7359477baebb786e6492143a9369d85722f98c1ace9cfc3640dbc3a0849c096c9f09d38d82ce46755850e48a088aa843b74515fa4c19dd295e10bb897f19f33888a89b89964bd40f4001721f80873e4ace7f16c079f0e07a2ca9eb9389cff571431c0260ef1fad6c7106394e8cfca9292d8f4300fccd417978eaa213a0bf7a0f081b9c637661c513d27dce80d5d1f92f00c166fa8cf57476db88d7d9c1c00c3080b7ba8f9fb94d3437d0d280003f5c481b2dec9eda8b6413a62687ee89eb51128f620073747730460e9a305cc7f5761a1cdf426b2b92aa0a1ccd35c6403bbd2222e4f19e3ee9d46ca2cd70bfa5f7b34eaf6d09682dbd3d034809a859be95fa4aa8ad825318eaa6320cd5ca5e21ea6424e6188a51bad9b02023f5e648912d2b36c8bb18f77560356511b7e0e757d772720a142bf26427e34a37e87a5fd9cc2344b765b47145dace1f439a8b505a33bd0dd312b4402744200a76ccff6cae86db446d646142731c471ae34bafc99b92f0032f110236cbcabf1e19f20b54d5326e29848d8f83fd4a7d6a4cd4a80302bd4d4c41710f290f63d84c38f12163b2261336dc9c309cc1a43367176436234c0567538591b05b6cb9d95c661f0b97109cda3ea5c526d32d697d335203557adddc5247166db917a5d1fe720f0e575d58b2dd19699e7cffa9f6341bec82f6969ca08075cdc3ac7d56f1e3773d673be1ede02560dbc4efc19fad620ba2d52c22db67d5508fcd90940660c37746fac3eecee9f60ba26944274e40297a25b71f2b1d06522b92eb70bb70b9663a7898835b168cc24721df3bbb5402604e5dea91b1bf68a64bb210a21d86c4645b46c1236de9bba81f7fc2abab26d9d54822fdcd818bcffc4e24179e71751146049cff60bd6403060c75e13de69e6d2d3baeee3754d32b5c21180428468aa3a5684cf5159666a9c70c13385236602ff32c105e0d55324b2a70a43ed5682b4d962ec42b6556a8692a56b644670b7d928116f004aa164e0564681f8539a47f2f3860ce81f98c9449d45935b79feee31ef310424187d95c801f4138028ad15c30291a7dc8dafe8c0dab3926fc1e689a8a7b3d784a623da85f044e9f47ac6e40fd03651f458ee4bb0b7b50143f4d9f9d495951864c5912ceeb712333d79fbb9ec30723ff834954fb97826c32edae17535c135511a50a73a9eacb33d46ab1e46cc0b12947709f2192ad4d103613bc4365768870eaf4a9f9b8947915b7168090e59e000ea0d8d0e2bdf1c241f21aa8bda70f984bf322f97716b87125154b2656d2220a2c15cba48da5a5b3234a14f9621443925783ca623c5b7707574af6f7081818132ff0832d8d4cd90f66d51cc02bb2d33958dd7ed89d85478762c44c44afaeaa0a30fe358d6eeafbf457bcfc127837330a1c3150e697f1b0b4360c90c900955fb87fd90fd383ba34911d8981588159ff9a6f43287f5dc4733e51cd93f2ec54bea60120eb9c1d7c99463a5e4186f5b98c4c15f305bca421b64139144f5bc270d51471a534818e59ad8e43a87b822195f90e5920f720a685b4dd2ad22af5d3c17b3634b7f9d180e4abd419b1ec13898922800837c2915d995fc957b54ceca84f451a315ce171a6cff84877d347b29ae558433995ad0910b9e7797c3288ee24bec6840af8ba1a956bd8283e + - {fileID: 11500000, guid: 3e79381d3474441e48f55f95bcf8ec65, type: 3} + - {fileID: 503414748754392078, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 3199647190746388131, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 4253774854872856982, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 1864694405006936346, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 3462221589685567211, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 9199103466573495050, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 7450326411141902741, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 5410295728114590775, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 7849468037921349748, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 6108546402767822149, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 8383194892584020960, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 8469535554499026381, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 1240682343910317699, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 6873862450655451041, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 3644860481507880248, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 1489859041288366674, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 9024548813321701438, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 28135759441123670, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 7904806204557817479, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 7920762743793120445, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 524222864678847538, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 7109394236268994084, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 1057536139067032015, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 2986888925985654052, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 7372195850322016627, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 2292947842607679055, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 1854977653579841788, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 8205589132100119377, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 1583307516500988033, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 551846834705592840, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 3608665235498700255, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 8707094069137646333, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 6487201069751892291, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 3917407936232711292, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 6969977284634394973, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 2652355617230950690, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 2159118815575014413, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 5599388192872588209, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 8457520438632136860, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 7060295131274341572, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 3910719139516211015, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 3434946290445229165, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 3425940885622124840, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 4312400622441358281, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 8021405171998557075, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + - {fileID: 7722623036288387984, guid: f3b40a60628cd4583bd8f92cacf1ba3e, type: 3} + _Values: 526a8851fe85233e7cc810cd2b8a733faa68e71a62b99912cf2f06228873853005edfb00aa354575a31cc8ad1ac7b966f52afefc8351b636e2b71574be99675b6400dfc3607f0069e96d5112b3681f5fcf550a7f3749f10c2c006f2e23d1db370e64801184e106752a681216ffa3837998b5a5688fe7245230fcd93d5728ea479cf46b8ba7516b16ed2e96b5bbb6e20e0c6272c125d7806f67cd366983232521642549cf9088373b29cf12c86a843666a9d2726c53c784328db49f8d499d2140c6bf413c35ce7d12821326d7a7c36313210e18f42f147d60db1f64f3ada3bb2d6666d31a094491222bbde8f495825a4e2f05ece33b3881253ca117543370bf2531ac8ebf10b7f565a03ac9712b88ca589b67c1400d671936d84e972e95f1f208f318fcbd24a42f1a1594d13a0cca1e4d0b9a28c0e4238a4cd5432183fe0a3d37c5600352a5affe32a0f1cca64d60c95d6de43a2f1ab3ec2f8dafe7e182ac1c0b579975acc6cca75b9cf61ff356e4ff757ac4f0e2446c5178b3cc3b0938e3500b2c3eb04c15e369388d95cb10d3df8656069a951142fc403ed6b4a90102e5146519f66f6d35134e18b132d9ec6c3ec954f282992fe09c9f2a9752fc7c47b5d52b06e06eab61a6d10e4d7cc274d62caa67eb540f7f4be5844b6a66281ce82d2f664f7483a3a0ebff69576b98633aaa8921a5ddbe04814bd97aac297cdb1235373261c4cec06828ec556592c57c95cb2c5c853ad052230733029b09f8776f245772a3ca0276dcc8b833ca146a1411560f76a926a9289a1bf169092fa58ddf9c3a7517c82635364a7f4df403890f9d1ef144fb812196cd7f0c77286780f491baec2cdaf4fd482fda400ba6f61b9da4000716c29e6ca1845b5768bcaf0ecfc98bbb39185d35a921a8142041153dc39aaa1c286f97b630278db035fff6d32e0ef214326ce60b1f02d1fa3100beb18fe2b7e76ee911c7c76ae00c14c122f29acc03601a51f08a4016e1082f6d7eea356c2d4766a7c4e03aa5e33455a9d65f214d9d8402a2681f2dbdd87b070a985bebf6d6a81097a7bf6f1b653f6d44ca68c07e191e3105186bfcf1e65731b726cef277b7a02e2f4f8ba6de14e73c29b17188403b8622b78df10f42a4017cfff026423332e5732a39eecea4c4101a0158da5ca71f8e0cacf1a805a8b07076b2f15811115bf709cdfeb27a2a54c77a62f3f016365a2b209de610da2415e4793787e44c9401f65bb01b6f5693eb1d01b923a2b5bf5a3f57c537732b4a1ce41e1dd3bc5c8f84196316b39ae5142b724ec80f2101722eba6ec83b11cc7422a66c365139bf2fc07134f6c0358c0bda930f573d9dc4051c541157fd8ac87b1d9952a64ba6e19ca69e2499417fddbe2caa24c1a561f21387762d2def8c67a4f06e2bc76e0cb0d75f9409b22d34593aa82d7ba7ae89207f8b652d5f423bce6076d56121e00caac4b88c2c7dcb083a94c883285aa4d5c6ce0a8162bfdd6753d123843ddced44e075745b023dbb7e5b896e8269c01328054c9b302a1ab4da484855f13539de7736f3892f04d9f6479188c48f2cd00d4fa9d9c99a7201753abb270b443240a506dad2e62f21bcf924dbc733497deec366e53a852b5d6e466fed752cfb7898b19bdc423679483d7065d2ed753932d34255148ed5933b2f9bb6e6a9e268170b63bcea6793c524c3515736dfa68f07f4c3e5cd2819166dba29f321139f0d5a074dc689b94fcb3f83cf281fd236e5292abdda6dc835402586d5d0c1605cee625fb13d2d6d18c0428f254a59f1f69a0ef2e209aa3a5f6e2ef35ef170e07360261e3a3ede074843437e1dfbee809a1671c43e2f82acbcd800430f3a0f274f621bc623782b35791639d9b3d6a7a4a251738a9dcae15d1d2c629ec1dee87cac94318016b3a41242a73e5469a8f9e5305b1a9e52653be5bb871d51da8e739a2dbc794808278eefad6148f68c8cf374337c311ef987ce12cf173b716a0b132fe4277edbdd4e22f732d40ef01d45592e93a97ca93fa95e5a129817e09c00a6478b8824b30bce51819f29142579bf2f14716a04ec784291717a27138999bca5ced2397ca56aa623c557fa0aea6b7c2b2d37d36ecd046c4031e66938e3bac7e8e2834609b33cd57e178eca6b83c7852308adbe3e94d428359a07b5400093c0f470edd76c4e79870e9eaba95c32283d069372be6e79067bb6ab7ca454796a807a3129056bd4516d76698e182e2bcd6bccd4d0d55bd256e985ffc3c546e2bb353081161d28e9f2b17c68842a61ffbca8999ef095525156bae067ce736817b45824c349af41156b1c1de1a70c577fb57abce4d3570d25e2df2a5b3cc1489ae5994cd4f9624895167ccd2c878e56b79ca0e2b6cfb2425d4b4aa628d99c27562c7d03f23f7d7819c328ce578ae1527135e0f7dda3ff6a97dca81f440971457a5478000a8b6376e1d8360c581b142d9608e7a1456bfa07b651858937153a686575e98014203e3e284564acf772d0414ace1d3510e7224a5ade01287e0be64f896976eb354cd453dd6c74b85fa2e828b9d4c8b9fdf7d24683ea1f5d51667f1d5e15238dfce40c6aa371127c5bdaaa470b279155bdd3ad6d9730674a2c76017713a8a6b681a4d32ac75e5c6e094fa25e94676779f8d5da313d6e0934833ec218748a6ab334f3c665ab98e2e4d0e388478e09b6c50e887e177c2785ed64615806e08b1e6b46aa6d77d33232a00d0a9e1f09ae3d730b78d804f67dd0a3864c364a40dbc45b01f48e388ad267be45e0da793a5a1c4adc1a0557652262c47b11fe1e96831e163005de15e0fb03221f68b5285849dde06880275b1fe340dba9ac4b77d44955c8fff1aa3ec7ce951ee81cc70492c6e23b11207815a53ccaebba464132d331f694d66968042f655630447ceb4524f930ad89858d64d39f505d3e46807a1100bbe767782751b8dbae93ee5fc7226db8ffaccc4a5544bcb047a020454d5b3229c26b55bebe32232d20cceb1df107ea74ef6b3011a50761a6801b71d94a7d2c046a22d1333431a134bf8204e4ed2af4022af362109e2f2bef44313d81ec1a66a47b3c19c878470a55a2690825a356561e72b38fd7ae01ae4a6e96bb747f192505286ef155af188deaeb8cd4eec2232870ac4269fb76048416d70ae562427dd5bc4403fc346500705927a4eb212c63f36e41d3df3e7d298f24eada7da53229579148e75640d90c0cacd20fd3d11862168be888de916169c0e48b27b6757d3627fefc7d6914ba33b8b137cc9492aa430c88f1098dba073930de2672b5b1567fd6f7162a2a64072a451ccf2c5994d52e5bbfe973432468198e568f78da72731274c4468ee18fc367d4dc573e3c894702f74d106b78d3cd639abd3cfef63523231af4bf491b069c3f6fa51cfe8a26f82a3862d4b8df032e395b7650edaecae8507bfae382678d6e456f60c0820b69a968c953246344f2490055701c155611592b394b9a3c1ee2f55a1bf1f247ccd2d2694ad889b2a6521d6ef8a3102955feb74a8770a5d5a1229266ec4babb2d341af68b75b7f20341902746809447bd2cc041cc65840a4d302386b6bef9ff2fdcf41490c571f4e8127805e731a6c98de179420d656ef8a3a32d12f111d50acd2e01727d13d91114c1fc636929d3615656a0a7bbc9bffa1e8fa965da8113e79c5a1a532ea7e69180454e3301d79c190e8d37329dca220b7df4ecc352b1196c41eb28f0f07fbff1c2bdc8067b8cfbd62bc27462b9e145567c25c1264b234edf3be1e113122b8fe0f916a78044273957140d5010ea7ddc4fa9baa221fb56a55f91470e032c3ed7b7ac540e3304aa888e7b67a23199892ea67d8a8886e3c1377a78f0b3b603c0fdb93fa5c2e4a7d24561caa96003a473b91a75a470a6a98d8a779cf888976dfb7c7ef7a257b79309bde95c7ed4c3e31f237a3cd6f326f0a0bcfdefe65af544078f6f57d7bd96bb14684e8d850aa19c651a98b6a058644e66f933b98d3f00b2986bcc9080f6c13622ba77a1bc4cc0bcdd33418335b655093c331b81c194e667a0d386610db497d85bc8c077879970f0f788481ef1da14bf438ddcf86935441de988d54da39ba18e886f1c49546fc655bb9abaac6878c5c94128d280185080d674ae51107ece948329c69750e65e03bf4c85e45f9d5f44230b5c90e524e0b3bb3cbf2f392c067444ffa037bccaf833cc7382a1dcc2e985810164f89baa0c11e6db27652245a744ccf5d09012d86897f338cd68b7928087b339ae27b70de891043de1680da2a9e6dc2da8aeb7d87841910cf4ee764334c589bab7b57cc374f33e8b0b4bff010953f3aa8bd48d085bc6c8f107a773d9bd8085ae78680199d8806d542fb322c3bd701c5f052438afb772099171a234e388e4c2754e52869eaa729cf3be1ed7e1066351884c3d112e46d5e6f651930b7ab540e30b7f427a95067244828744e1a89a15782afc42d049fa043e686b803d1777123e6d31c36058ddf691518771690e1bb19c4c1ae08e7270a3159380d2f096af52e49ae98b99394ae0b30a5bee3e9482c38bf2dc0f03696c440c8eb8e3d9b0f7256ddb7321eb7fe79589046c8721a11e50ff42a8e2455fb084deb57827e23eba63fe7ea3e5f84b41043a71961f0ce5126253061b78e7fb1fe1dafe4090f80f77b5b5f77a5faafbb6b40194bcb6f5cf81c67325c4fc13417bf66e95cafa0ab01c2616a42b0ba08de2b15cef7a8ca7d6d7a48c7a140dd473d9076360c11520bcb94177895fbe6b89da010779b0bc3910b1657d6f8d809c1e51a2db23983fccdd809677340ac188e6c6f65425065ac31cde52b0b4684ec0d74a95cb12999f1219ddd6091a34f505efdc96a778c388f7f92041aada8f9eca2098a1717f73748fa9f7920d239e571826b330710ef76803c19dc1d267e4578a3f1bd652d666756341165281418be46ac9298418b0e234c6df62403e5e6dd84a5ff83207c7f9fe8d2893c21ab6192dca5698e6d19fcfb4debf52d37bf9b8fb2cb1f7d12632035d30c5091144a44a00b64485e7ca8909556fccaca71aed62a36f98955353140f88e2c72327c9afae1cbeb46af062f3ee5210169112a5ced08811d51173c1498e218ad380442564a0d94d4a7b01976a0d20c469d880ac65d0dea36916d6cd4439108b966e8286445e5c71c857105ab9d738398585c3b235fc67b358fcb4e3e5b38030c80505f8c1b790f545aaf2aded7ea8238e50f2c6133d4e7d39ca10cefcc763eb292062b112c088221b218375064a6f285b279584b0b643f553733108693df771b8e887022ea8ff32272f413070803712d5ee33e24caeb90be938541ff778b61706a531b2580bce919456724969712e6917d19124948bd6ed2e296715c1f97ad1bcd5769330f2656a56bd27e5e798a6a7fcbc427626e326103d6f779089f8329ad839369736893d3d7b9a515c1c36dc4f81cd00dac6395520e1a3741c3fe060f90aeac4987b19c151667416f40f7684def3ef65fc13512f827c6c3729fd495d6c0b4a5709048b555461adb4423269305828430000b9ab1a5634bdd40ef2ab5ebfc172f7451f7dc38f44ca559a53229fecc4110240ca800cede208b3074f4ce53ff24fd0595c81e74014cd75e59579ae6381f0b32b56455eba24a932d91e4d3616cc5e57e068a30d4ca1f8f4dd6899052f7f44a01adb6a64188ce3e684fecc49a919d5d1f913a3f667a40ea6299d2f8f8b46bb74c636f7e7e392f295b8a12b2f554ce9500eaa57737e24bd950156c11dd818e75022a8e9ab75fa21a594f2e8a3b57e369743587910b5c8b361888b5ccc634dda04674e22ba04c32db0587acd350e64fa6454d80847622460d718e44af390f09c167649684afb7e531381087a00e5ac9367d20fc133249add740a062c3a29f6c351c651b747a894e2067f1cde6ed0971e14a41bbf0aade71675dae7b56c1aa440b2e024144bbc135ba3fb4c3492055d86e526ebdcff41324d423a86547c714c35042a23df12748362346bbd7c659ed7b8a0360e41da91826af4f35de0077eeab2966d89a0daa850e790cae6031888835886e5e29b6c7b7f308009da3c217da7df95673ba9d5fee78c30ee65f0ee602b9d47fb09db1bce5ee0a00123a1ea71ade021dd042c7772fb63c7ab09d30cddad64d6efa88a9abd063e55014502f07a1d6253da6fa99d2b4b6af48eebab31fb028e06c822ffba2e9a7ff45b6e493aae93bbb6f9af1e14ba87bef34fcf2e794bffc0d745c69ab821abdbe49752385bf4695c3063fc69ddc8e930546d71f0753e63e8923ce681e206d4ef360a8110ae281cdba383d5decb893f8ef4b47017b606217370815c42d58377d100bcc33c15c77f25205e4babd3577630b3ed440168219f64f42c9a61eba5969004fb9ee2c789492242a1c80b06ff717be50646f6dc5641d077c6b5456923870ea2450ae18c8858c6c08b028f297d8dcc13793a408bfc606a2618009ba1fd68ee62a599175b6053ff61dbd380e95ad88c353e90b1981dd745c46fd649e9ba661cb2c3aa6c78588bcf956d6d27a6970de5f345dcab9b453163936788019aad29804233d2d5cdc06bd407044620013b013f659b495675b43d2402af8c75519d8cf4c115bb9b078eba1e25d0388c73f926d054a6c9e8c6e7f3b03478abd53ea3f23a95b209c5d9296adc737f70d848c97dd1009046820267c915b6bbb8c6a783139812631a21057bc30274e8c5e5a747ee13f6c86ddfcd1f6e82b4b6bd2468e28296901adbe560ac6716d0a5d4876ea0471c4019e5abf58082c97032fa9050c49353a01f6a1c74f47aefd354919b3373616445ccdab782e4a6a120a78d513294d19791340174152c0174e5e4c345e794d13ed33566936366fb9b255767c9f03f14739566925554f5f218e6271da857b3c542541e747b7479dacc820cceff4fd96cccc1d5543f00a5e6f4c0d57638c02646c1535a3e0eb38ff80f3425c351b4e158bf83da6a3cf7f452f9f566d3b10c6df394437fbd5a54a1f6ce22c51ae66938a9b22336b4e5bc19c95f02e8142ccc4702c636a7a525340e6ae1e3ac0a2d0f39533e02ee723ced16bf92b661b89349ec75962234bfc0edcee621943302100f9c5fc984b23faab93fa35d57f26ed5a6fe3bc011a05f43e9241bd1c4ac4ee5eb606ce5e1622807bccadcf2815d871fc234276d97320e6f4d1be06091f18f6d00cd61e780bb48e6e9cc732372be4ac462f3f07f739c8d2d6ecc230d4278a9bb5b7fe1c3e08e907d7d0e5753b52e3df4b95b3c7a1100169bbfcb774b77c46b8edd3837fd3396e3e1946dec81e3df1d7f51d1bc08b3dceaaec1a66c03614a16a1771cff409698427fa5248fdda77454a0a5cd01af12c13cfd85bb1677d2f550510a9164da141a98a7574396c8e2e308aa04e356c1a43a5bc7c61339be514a429a74d0d848d0856374bba5b830d5abf55d4d839d10618ebcc055ad1400e0d5a9ee69cec23c44b19a9a46cb8d49f27cad6208970be4d2cdd71c72675172669bba7a043638e92636f760e1d8a8d2e16d2216f05e07a631815ed87a215153e00843bb211345bc43b45bd1bf9af30a24f43b0f897872b49350bb82f7606ef4e58c8f266b125e31d2ee5aa499d965dc71b4b385f641da77957f27d077b2c4e34546fc2c1a196537425ce277d3175e7cb677fb5d4317015c46f6cbda2a2ea985b33df9e0c581f69b208c53a96f52a47e2094e60051edd993b7b88310d54f61610667d4feeec0bdb7915fe330a555345654ca0ac538a933d56456390e0507706ff52d6d08c86c931ea721a10e4ef5c6f3042333e0b5c956505400857778404d76103cca3d4dc2d14ea6e3f1e5c5bdeba5d2de66211e085c9c552961aacfcfe5ee93292fde55d0708af69d224e50c4b614d14e4e6e6a61d506675d74849db0d1bb0646112b9f17f5bdc224d574d55512d62347f8214402bb6de6227903a0b07b9a46e10669c6161acd20a2d9cc6dba4801f0b5941de172b9aa27fcab738c0cd60f93646942401c87bf669f9f9983d7592ac258f1fcf312c96a754f7e3d5e71b6c287295fd2138a421d4224b751f3101650a36f5edcd526e38f5501230f51b5af0b2732ed92c8d4c1a35500b0e1948898aad6e266123f6c6851e5df92fda8bd446373b28935fdb929783254982b99fe15338777d780b0732445257bbcf867cf4c12452bbab8fe31576ff41e5483f493ebd3e5a089df1a4c4cff71c420897611eff1a09a80ce436c45561057ac9ec7b839b9602902b7357cf808e75a3aca10ddf9e231b6248f14ba2751e5efef61d8dbc72a05a7394f1497371d92865a56ce84cabda24592e2133731e5a1bf4eba7279dff46154dfc9b4bacdaa82b2119e5fd083612531cf9338d516ce76f11f3aa78354d7464ec8134484625d1342ab2eda6c7a2ed2a0205bc69cd2b9946e40a5c9f8420612c5c7eef79fe36f309d80049fca572c94c202b8acf6ef4683f1811d3ae7d8e4709ae3eb4b74c8bd338073abe328b6a1371411080599591bd6717af61ec62458c4946bf551bd87e6754013c36cbcac94b53019e9293f1128c40fc1ccefbedbf9b3e518a86b440d0b540872aa52d3776ce1f044a11fe28e0c53433141fbcb06b6741a0f77a3f4296123117aef33893a0f7794daef7a2ad9d1671c552812bb0f88f1bc3648c3ffc8fdc6dc81fea292c02382b0b996f0274c493031ff7850fea187e0e3e0ffbf72d3676412f76953278c061377652e0e877725801d0895df314ec58505f2414e3f9bf0142f14ecf14a63a845d6ab26567c7696835b7fac8b69469561ad0e5919cd5453034abdd07d65cbba50bf344769d790f760abbdf99f387b8d779f8b445c0a8e788501d6543169d6d2772602c3baf0c465e3f708657b4df24bc0cfa7132efff9a4c0a44da7fec349f9329faf36ca583d8933ded7baede6f2b8e07aa361c2c3b37730588b994cd388df50e1b80bbebb8178921210b2385b7d585184b77966bbbbf643e7f99e236bc3afa7b70bdf8f0e77abf6daefa4d475bf8bc5cc052e74fdb9e3526e6f96b51f9c0de18ef57eb06236bce2fb72918b60dac9978aac18a96ac54602e88d2d6e0e5116613e3cba7fcf249c62c211697b2867e186d6d1c58c8c9b89365f7bc8ff542af1559c205d242059c850c7849473c13ec4b0ab96973c9b89e492bc9be0c502644912ed50e107f5429972f974c4f807057511cf7665054dc21ed244458f43c562acd432589eedd0335a11c005dcd93b1364420f0d7b8726a19f40afd343bfb345bd93e1993a5f9462f1f2cf892acc6107f290c14d42c2de240ae3e82071f310659175b848eac45dc3e663f497495023a45e57df4d1189fd154a359be1c88c0f011da5156f8bc7e2d1bcf2a6fede56eaaab0338ec9c3c3541788a27330587bfb5a54e379b4458320263aa26fe12f241c6eefc121a50ad8c4d0f92226d95b032a38ee03761522c99ad2eca4fb99ccdac95341244f68b599a073d16754dc95f68eb223673f329a2181a95bf471bfcd4b042e58c5ea7f53c18344530233cb64ce4ce616325d440b96c91f92a734aa1b50412c6b733ab413e091ae1c0385ac654d1e2a4167c61f9dd012b20cc5e1fafcd938f2c1075ff188f10a06d3f0e818112cba5599111b832640ca4b85f758a1fd63650ac377929362f05ccd8e232c6137f55f2ff46791186b6301b3c5f2a26212624c5156a3f0cf90cb59ea3515c7dd63cc2ce7f8e2b0eb6510ee4edb411c4853aefae55483ce9c5d5db45dc254cd812b445ff9d5c59af51150ec45b5b1e45fbf1186961ad2ee186536baa968f329005e6f6a1f911611f6cbfa3c0c6877196486ab615f31d393f1dd9790f38fc18c2e37ebf75647c4b1670c92adeae1158f23afe0cffb9b87bdedf487ce068ad5697279a5bbbb81805c6b6a1a429f25a112f316a493608187c9cf99c55adf82c533d8d3df9b793ec55acfcb8b6e7ecad148636ab12d2f78d710f1dbfc11cc35741e3f4e2b62f53c863bbeb62c6af9e6b4f4c87dae4a43e2534e65115662cd5c6165b886623319bbb316e4757e694c7c15277f08a6b178d6220e5e82e22c29dc81b264c6b2637471e18bdf3ad1469f3371e6f3c0fc4b5a500322746091acaddf30b1073c1485b9a1a2ed371af23df4eb626204db2858e036635b362ff0ec1fbb121005efb09cd113d09563e97265423112790e33a17907999122609044166d60f31dc2edcc2b63f0c0ef057d0b093c01f7051d79ea536c8b279f80ee2c40cfba37f2f654a26474f7030f0492739a9e97f182974f08e3869fb137c62c9a85d48021405af1f06f5ba47019a916a800f14dd1e73046568f4ebb93a96c9561a7a382d38b4c3c1a6f67af26fd311d8352b84dc6fc117e49d5295f70f97a56340ef9d84619bcdcb2d2a7bea13f7d495e313830e111218a59dac701949452fc26322cda1358d77d0f95009993c03f7a67eff14fc1368adacf7bcddf22a4d7d8ea6c2b2ca29cd9fa9644cea3f1c4f1e5f5ce867b63033aecbcf7998f26a6afaadd27bf27a50d382b460429fa07e6e8f45db3d4e121b38a28cec19044f656eec31b868ee675b5bf0d094e3e98c2db0b6c2f7213258470ec80a1e7f666a31334ece2fd158e65cf7a07f4c7d7d384f155e3b634258445f4679ab9fe349dc3d5b0261941b5d5c58cf650080b20cc975025933dea2cd74250a6e744a0385404084420f84e45bcc48fe1c6c23a73b5352bddf6176ea026528768789ace911544a25bf03f51b4e595a72141f799eaf8246c1c68d2323ca557aa937fb6be579310e8e49b798c0b6926e7af8fc291c1475380543eb228330265b977761acb63bbf14452deb55f7e9850a341e9d1cc67f976c3d3d8fd69bab6d5ddea3d0c8e7c1da3ec61890b5ff35cf1b431f119b6cf56b1510ceeaf3ca95b0664072cd6445b20d0af9db55aeeee26c086d7318bbbd08ca18c74447e729198c5cc8f6f57203346170edf96bb7b4e6fb0e3cf2613eae6c23483de62c8af9f533204ff8e5f7edfa0538ee57323c62ed9c1e4938221b7aca0b34e7c151169f13961d2f813f059e6b342fa0d5159fc30d391566ff5f447dea9c7ac83ccfc8ec611221bb04331c4b96497043b23255c4a67f191dba3c629b6b423ec3f4f31141e07f0da9f7328743d69d2c3956c790313e0a38958e062baf626036ba26ad32bd84a705d36690bb1af263056cfe9b761e374d529e25520342f46a2f1527de36e78b234aafc16398cfc6525d2b01c0b0c7e9180e74ffd0e3d6ab4821039f580decd2e120dc5026e09ae6216379afd94034ba682bf0305519a4f9de04b01b92c5bd221b03f565081080c4f9175490be2b82298645f00e6b57100340420e58a2c078558b466cb5ca52b624f11405f7a5393b49e0290d51b201f435834593f8bc5b2b6bfa7afc8f31a467ae29034596141dac03be1b1ab623948b61d64d3255a4874220037d0d0b4482494dcb703ba076e18e8e055d9980a331a55b1d573a2d4f01a7455e05b2a5867f1d54046a65c44a80257a583ea5fe123d822d284dededbc779dcd170bbd8f6bcceb7a8545c1c6f52624358c65b970aefb7201680586aa7039c85377484be253c5424b626f7c7d27a25cc7c274a29ea858678d9a45038a08ad7f6666008e21cb0a19cfb231d60e54113f577a42f7bcf901e4550d0d48e6a6d7e4914a3bacbf1d200a43f97d3d3446174d53316ffe6047bb4caac55d30247f7b811a5432463bee4d24865642954cb9617714d773586e53e110b0f500fabf512ec275ff577687a277bd806b7b4876af669bd82a1bb4f42c1092c9bc0930ee46e4d885040b4b10eaf0725fb5282631d578a0a3642d15928432b7103b3fbd54b930c5785c3c8f5be57411c55613ab5436c39e35a9738a18ce4500d2533a2c545338e719126173eef8047626c024e997dd0c47ffde79ac45bbde46a13d6150dfb6428de1d46e43d451b03ca4fc4e270ca4970ab80c2acd33735ea1cce52f4f68aba922fc4d073d91b1e4ae714a06b69348c5025aa908141e8aa5918a330eba81ffa550a57123a553a587f8d8833e838658f17ce0d30bbfa2bc4187f2994ea15dd5d28e5b495c046c1fafb5210f145d36ddf4cdbe6d26aef464f362b2ab4cba56e59b02b1b022d0b4f6e80082c0626d571cafea5b7f1d11517f7d40c24048e9930aa1c38bee537a443b7e4aa9d82acbfe79f46a039d152bfc54abcfd29d0c8c52ff9387e1611f69c835a52000d26686abb7c1c3ca4c13cedf8839c8bc7b59a82e0a9ca96bb21664a5a3ccc6bcc9292bed327a895fd03dfb143b57a6d7a925458efef2f635bd0da232db9692e62574574e9c4911091d48a2335d6bcfa490746271a6e2cf774503c8d3a5213cc08213f71ee693acde2f63c410a0ddc25f112302bbc4ad9035870489fbea6f362e06418f4b74fdfae40b7cbebc591fe7dd3969c28222f8852fa33e97e21da8c99f996a0a5f4e77eb142919f9061ec65d46537df480134ab71e796640225157631bc309671356f98c67215bf721b492e01e312d4e024384d7c63f515aa2a457ea00382343142e709c4d0973a148ad699519795e876ac9dac0ad3a3605a296ce63ceff409e14c14ecc7a9748985b7577f84cc064e8ff940f8935b92b29dc7e86e4da3531e07cba3b9865c35864a083f5b51dd95089f1d76834d62a2cceec77a9f81d2c726e5967846d7a344dc3ed732ab8aee146b6cffcf302cdfc4aa8e66dacee1a5f45b6299bf50a7c2e1b17483d96f7866e1366d4b4a635eb2d59316ea6cd13baf91bc2e1b9640ea5a6130d18aa16cc20d00d2b23d92af82c4d63ee0c822a7c22373f3481aafcad1e1452d8bc70f43b968f15c9ca6a657cde1c249a93fa1375fb6711ca21fec66dd38535a7db70716b3c20075fb4a55764835f562f1ae7acd6f5d80bbaca88c27ffec56f4306262178dc9972a0b54a05f0e4e04eee35b2553eb0c30868111123e4057c688f870fae8eeeb15087ac62212c429608e11f3cb8fb5417232ad79a54fc6a6849a4620b5890a64543ce09224e316da555383b17cd6730c905dc85354cbaed9120a7b33453fabfba69778d3425444cbb78d2dec8dd4c140d0b5fad79abfb90fb7a74d48185dd90f8338530e31b0b5fb66db406b78784e26b0a9ae5d13baeee250c844ae35b96036a71a08d06728ec83649f99bed4f15d2e36d68771fc36134e16a0cd79f564312044f9b452711e9de982f5077bcedff2908562e51f31ee3a7102c908e9848d620fa19989eeb5bf9f55775210f8d15880b9435e1f584940523330b35fa815b464f58307da3849d156350245896c00ccada4b63de32d6335b71e0746cdf90f477b2bb7069be932b90324a44b957c2919cd9be0fba1bc787d973741183f909f4f4459b5b24b05bf4b8e02d54e992edb233721145625fc5a315cb680bb57e5076c3c1c774bb676cec7eca5665491c9f4686c1de090a4f919480f74559474f3e3a90b691555b616e9adefdc367085fec316aaf9277a4a6948bcfcd0b3b2112a42e8c1cd400520b13dbacbcd408ee0673dff4ec1167bdc6de364b1c25735632bbf1a2f2f313751420a06449355f85636236a5d4b80d240b71c53e9db536e59f31de78c5aa04eda09420348ffd0605c24e174611322aecc915ad63b95212cb5686047a14d84048a2b6fac067276bf29536ff133283082ea435be24a79859f2a7ea8b1601810f16f12f5ca4c7967b5d5643327dad00682c82292a21e6e35ff5a31397ae4d7e0ce9b9eafa9d1f520ac44ee38514352844a7825e93d857ee2f0dcf6601b4ffcd10d73649c4c305ca0cd1e09a2cfda1b53f86310fd31115cb6d3545123147afa93a802c5221149b7e5e49ae9c470ee5d2507c59781af15ede13fe4806f7e703ab20c89f522fb06cd415b3b18b6379845f4f73c2b6ed368e49204f3f24cb94867644fd84ef51c8fefe172e8e683fd37a997916487bdab2411557178c81106e5f552b3b4660fd74b117713f314058d9f6b32c91be04fbd763fe1f25545ba7282e5943798f07fdeed08e333d2b93a137c6c24d9fd8eca9bc4571412240939facb6b80d6620addb941af040d02fc6fc085fa95f910e074f42b0874202491f2f632edf788d7ac4e8e618477a19532672818bc63d69cbf2625097344a67952322c5df5b01f2c0767ddb6dba55ab7d976a28063c767d1d3868c382d80a467a8250f525b538129cb7d3ffca21605aada0e318c3c473677fc89f1496a07bc95f7102847b613880cc869fc554f57b5a21f74885d21f349ef2d76cedfef158c2cdf560a7e124214d68634b3d25ad437443f8358ee80009403da17752cd257ebfde62934955223a4619fc1c6ed4f63c60e40856f944352543e48d5ec21afa359acd84581be2876b4865176dc4cf857957c39fcb0af7421e8e7dda89469779448ef5d3174c1eba73a0ec4a79453ac06fef5d3562f701db50132d7d0feea646356cd3e4e2ec92b870d1232b799bc961065beb55aa1d3f5b6bf2a5255e2b0e3206b7a2a21ac263493b37e7d0ee86e42c050623d8f69ddf07542f4ff0466d5a4521cb6f1efaefb50e0d87e09cb019d65c685608158d8cfd3123a2af44b8156a7276a5e63df301fdbb7abf1d32b2090ac57fd6c8e863663b3136531255ff144f6a53c58fce6fca7e19538c3b7122ad2a231fe98bad405a84f614e9be9f084b3a9479a16b6129923d941fa554335438e44327f0361788a129f93f6646a776e2dd613ad1ebc4188b4cb12620cc9b0651a2dc31fe38077daee2e43464a0c24c961d3d7d4a917cb3e0d4635c7b0e972a710d110808907c2b0ffebc3df6e6af1de16fed2d639b074285f159578eba28bda822986ba96abb70518f6b79352bcb74a20bd94beb46b749d8a58c07ebd3bac9267ae62cb3bb8c884c83232cd172884e433106659374d2626a4f9303bb613d1980af006e69e3194a2ddb4b47ce555d9b4c4897024f8f66ffde47760513cd0aa46f1fe61b7463f8873648d50208bf98efeaffb24e15472d17ecda1c795d9f0fd34b40451678ff767e6840eb704a56a50c739925781084c4884c4f833f7a1eaf26d994676054b327876db0f42aa5439fbd80d613083c771d30fa319c3783b6044a90c49622be05b9bf719e0b5e6f651bf74f394050cf479dae4e68a52218f00a23b53fbb68253d0084e2ab68639340609fb36b78498b4be6289dba8f546197a88194e7a850e07b2eeec744927950febe7037ba2a7c695499695892cb1f174e80d06599ee46ba6d789c79ff8b1ac22518404e3ff84c4ff044e3d6f432656653afeb192fa633e1ff3b780237c928a9ccdfa9212de25160215c4379eea9426a87fd2847469c30795ddc6f1b380e6d37014b3b8ce9ac0cab077fb4ed3a4748029fec56d5f46659427235e4eec5d93f5bdb8f44da9abd41650e06e64b38e11b2f405ca575ba8609ab6d7be476279358d01675ecca6b9a428b83f2d1fddbcb132e66ee797362295f55869a6d1fd8cb73a25e1535c2f45066a81b55be0ff2e33313de4e9ba8bf8e27efc81fe4d600a45cf93f74f753c262181a66036bad620e37607c2ecc8e4e11455edbdc3d2510a2457bb4434fd1bf320ad00fd5b1e6b0ca169b76d03f10983a436a127eca9e6d12093b420f06e1419a5fb5db038086a0a05212c5d99ce0e15612f086e6be41676c62033412d7402f085a248f76ca6a4543094c2f46276b89d61c9822f5672858a11db99a83ad7236ed4031cc87ae95745756bc22f58f516c327aa30ac1e2c65fce7c319412d0c295967d1c86f69e01288723366054fa9dee3424cefd0b68740b796e9b03de2987271952b97372ca7694783593e5ac660ad3de429f11fd3b75d1f728009bfc01b6a1635d35fb82621fcded5c83bbf91793aa3465dd9babe68e67b91d2e9afe9ed1a2a311c09dc41012991a424cb4fa403694546f9dd3dd001bf86163b4a08fbacc8c2d1f18e858f6e52352427e96652592861867b970fe023b5c0a39c39e3a4dd72bf128e319284e3c5d89787f65814da1790a2e79d7ffa372d41c740d6e467ca15fe552a53d07acae66a317f97682d5dabc974a6cf33951d46b650d024ba3555bfae5207f2ea864715d7f2084e86217a90db051d6fce795983727105dea569c3db24401916256ac1433d836735ad6bdce7cb60b9a527f5f125087480697c05cb41c5d37d49b79b948fbc25d23b108f30de5df20de044dd24122aa16f08c58c4a390ef5f2d9a4a7d9611d65179e7ee151671a373d36249674d03845f2de7fcf721e5e73bfab5b34eae36c45b505595e4f7120861d0330fbeb978ee2f1fa9ab7d0dce725dcf2a0fcb24f222629ded17f76d9f671ade9bc755f4a5f472a4e26d58e142691fc8f3b22122d48522ee53a4587019624112c65ca895c75274e17d8ff9a085bb5a84f72e7aec45f709eb5a995efe64fd7580d4965860ed4b6f452740a5448c816869b62b861518aa57419941c5d10c8a457b0578741c13bb72be61cb3afbad3b76dd02f54838765f67d6c06605d0efbf396404d5c0ecf3b37c739ec9b34d705b102b485e2cfd2d820e65df9e5cadb6a153dffb280927857516b18629665253e646e489d0e6b214c83582c725cb910f2a28bfe26db7669bc750418b227ba8179e1107a8c0c87977fa0c3da1751055be573e50ad598f19d11f7eaedfd7c2c8bc216799c93a16b09e5037dd79f30710d8a5001e9f34aa8fd1d53577be88a6b1422b073d2355e10691111251a2cc5a4770bf50868e281f0a22d15d389ae80411d52c260319527729f17345644ebb85649a4527e20e1f163f87006e20244398ddc9c17a76a65e60c2367a76fe927ba622a93d2d20ef19df0abd997c18e3974e350c222e1035fb0af8a5ea19899618ad0b5a4c376f4d96ecad32347afc00a98b5a138f41699f4f593a10ee4eba2e4ad31e91e75242263dbec35f896aa733d1e2f7fad82c4c373e2e7953d47ffa89e1a930ea346a06427d21d2f57d0771ba0403d3a92502cd89fb405f32bf483c7c77714204a403c7627c0fd0e3f434c3548706eea5e25dafe477b9e674ca38fe3aa2b09211b66ceafe35cadacb2c4e82d083f45447a6699d1bf0eddaac381d47d6c8e90e2a1c461ff4e9870e700f47181ccd6942df38230935926f37934411e202dea595ff9e3d9fac136d43c0c00e2b38d4bedeceda689ea4f244bc8b7d75502896eeb04a2219277507f10c5a8114eb45c0b1fabb622bc4bb3b5c26eddd521882c73b43300c240fb5672dacc40d37fe7b8523423ef21dd8322d511e24ed404035fd58f5dd621a52e4c0af2290d800ae035aa2730094578c1b9deffc44fa1539d9931e3d9ad31fe6952ea281bd0568ca55cdd940731e0d155488b603463d482a8544212d0d2948038e0e80c2531b4f64179e9ee3493741f8a2c24abd1c654a31f08f3c83f6da281758cf8fed2222238bb032cc67e35145726af656944d9b2dfd2fb1fd619a666fe1064b897bb3c122c22fa170150e6d775d7eac62b5a3d81a3d6e3673fd5c442518a2ae6d2fdac040a8d418c3ef0c420b63d7a51fb837da7a21993a1616cae065aaf4c9088a794d5670ea39b495c6a41cfd32e37b8b2c900c1fcfc4e9c4d50d0f7fae615c039a9a0573b5d491cbd8067815f2e2d392a4af37f6de2d22eb89d16522d6cbbcd7ffdf68331711befede270829c32b2e0cc68224a26699da9387e6151d90910af2b55f132db5f9564a91c918f349eb69e9d4ce4c64679d5706544363b0ce3646744b632394c881d9efffd926f3a7eec2d607ae7bc25b400a0f2f1c7463f16167b7f33e0d1867fb20d7aded160d347e3764a81903a819b64aefa1527b912d8ef9594ec4278ec25884fa88e4778010f1ea106cfd6d984dee91a697ab162fc3487b2e42755263fcc87bc93bf405ebce4e9e4fcbbc19b295960da2a79c3c6633e6f6c4cad60c1299e185121f236a6ca0345bd131a1392262e52480bd94631ecbfc389755a6648ea8ec4420dd962fb900a10272416b3392add561e5b28c302e45674622ebd23eb9661686e119a60107eb9480e46d0e5f3630c9452a074940341c16db764f0d5b2c1f4427a80eea5554d669d0460c153ec9f8f00ede72eb4ee42aae3afc357448dd3853c528e6b72746749801711a8741cfaa5b91bfe4c660f56cf52c42daad1e9ddf51809f2598504fe7aaadf5124002b3ef6c52d9e2883dfeb4ba95dce46a2122b66391c807a10c43abe1a78e735607adf77a526d5b447f678f81eb6b02736b7d898b3eaeae3a466e86f0d2fe1e50720ac142d45ebd8f7d051cd6c77a495f45204d2417ff94b65bce3f3e0bb3e98248c2f01f554060f23f07f2bd347bfe3f471bc90db4bc978e61779d051f7e84ca1261e1f976d5f6fa405be4110cd781df338279da8208c9fa299d41322299ee4175bdcf955cf8b51d10c54e5ad785818a067d39a0f85e4c1a2a25dc276b3b275948d979b0f8147dc433a336424590dc5c1f35c75a9fb2b7e909153fc7e4724e2a63f511b1ff31821a008c92aad7f52a66003a473774cdba966e62b9e2d4b5dfc0540bde39a18e5b514d53a5ebe0f3eeeb405b37e2467a60cf397b4261eb64efb66aac001d2b9cf7706b677a388d5a899e74cea22eedc107ce6cae731cd0bd3cb242a5a9cc0d2e405b52a94daef4985d9403e2d6b9061ea32c5a31b17d28dba0ae2bc8f5310355aba30efe80950fb5c3040cf9e04d6c09479f017e713edfbd842d48032642717067a6738638fb60c6c3f06dac7120bbed1b350f6ccd7f38157c347d5221f4717f6c646087c1f3414200c74063ac8c2ea5e93617f033dc3ee6df88036c78b2e8b761ec182a7fbd50f188ad6b063ed669f005d868ebdd61b249a24766b60951444d4f073c665bfbd9d41ada79e0474325b5f2f471501ad394c39f6278395706fadaf2b8554612cf4c00b13c05b8db9391e66c1b3cec1f0bcd838d8638077deed4de2bab2c00986bc8c140720257d84c9e32f35f34c435f04418142e477468ba7c3c97d9733067927ed7e4fe2b6ef1dba326da9405dd2299131bf0451397dcaba67a0a3940012731667a22f457cde329d8c775de662d4ba6a1ce12703ede811704c7a84e792b1ca44d0cfb80452f424638c76c4c2002ba85d09b678e12b7f344fb3af81e7533a204e3192b722734138c7333c7884a33c7fdf2dc81223c726dfb00bf837f35dc2efada9797f82ed452637725e5217e8370368d04d3674e80c772ab3071674793c29605ccaeb2353fd4e075e155e973b3827bcf45f2c5093954a5a0f65ba161ec1c0be77b264b2abd014d30f2f16c2ab2e55fb2ec368d5f0472c2deacacd4658abd9e019f2f1125325aeebb5a6ae9293e2f10ef04108b4b71531bf79b93826ad5b2bab0906ec97e2bc57e6db72efb677667e223423c9665b7158d0db5f73f3bde59900d2499ba306592c33f921d9442a84b7fcc4fa1d8661c55f87be1bcc93386434a10bf088b10deed414f87a82c667fb54aff88f4753b8129297992351156c98fb84ed383834fd88fee615f88df3a815ff99707c8bc7bb98691e93205a257dceb1917617b3901c665d707f9ec2307b511040ed056a200d33d944cf19a1d23334586746ec7d90367042f5e0e4a7e329d75ccdefe6b793172e51461f0790c2b48b4393f7297767cea0775d485000f1ebbc7e96766fc213833ab19ab23c50c1f115ba7c284bda53414b637fa1fb14871d6f6a52890a5c54c92000bc77eca5924fa56e5e0a7d1a27893e2ac503bd8e67e62a7d52c20e48e4adf0cab7b36924d4a5d12ffc9cc67ca04542cbb725115876ae78964d7f42c04163964ff64d9d8be2530f6ad4dd7af4a04232e270cd6e30735844193ad2e7655300ee90130662edd2d151f5eb73d2abe682c9606ddabee1354a33616e59394ac5a4dde5cc1b17a6b510c55f7b78550f8500103273a83cc2302fc568d3017f79956344795a13103494e2cb4d256f65cce0c2e67e696bbe6de7fbb59be08089c6903ef4eebcce6998104b38af0300532f359259902b011029a4d68155b8ac15156714cce67a870022538e9eae331f6ad7a12b3e8d25e61e6ea0e17c6ca030af33a61337f7cd39a9cc92742c538d8e097a84465b628278007f031ba76bf36cd29420aaf81fe7731a67816e15560d8e13c10516f0f67c11c61e23a915272efa3ff0b17832e8862951f750a303f462aa718507c9a915a236efbd94d9fc307831967ba1f4b4855b2b4aebb717b8d0fa457f31d7702f68a35592e867ef829fda6d906dc69069a20a13d623748b3346103f5815a6c1f807af00e10871b3d285521549eb57e6a78abf113beb564d12d7dda337d7679846ac45981cc7716dfc39cebf2e90b51ebe0997cd669595fcc16c23b8d614f404e24631526a40336f0c2124f22c97144937ba2f719b7fc5f455a10b31991b72f7196b172f483d60367a0e2fcce97b66d83b736fc14ed5d1df7185da583d75d2533d2858306896b718fcad574b04465535b5dce9ea444e45f3cf2aa558d7d677173d26fbca40329683356419ac29f9404fb365728b3382939fd648c4984e6736aac0ae79274b60e2487ae5a57253ebd3b58c940c089201c19caac3b33d290f8643d912b41e044514c73b0c1d68c1c456290415efe4b754218f084b897fcdae048835abd66c899d80f53ff4a2dec58f41a8be95437b9c3c611b18f2f5d6fb3d911eadfaa61d045be7868943eb126d0ed687062f4ec7a56714622ce1858c8357f5f2639430dae934a46d62461b2fd88c87e7d97cdd1a7c58b40b00f7d61a2e9bf3116ded75f13fb160253c5e9a90a41b666fa652aa0fcaef860ad02bdbd10abe9139ad063e14f979579add07ee2dce1360f391ba4f7eca0d13cd7380d15b8d31358dbd50f3addd51762304e0dd3cfea7b3434517c0bf90ed90501d848775b54cd7ee3d60606d2fc31640441273bada40b13bed9e26757075f15af143ab61d8fbd24818eb6a6f18106307c1ff0c5c9eb4c5ae55bba8172662715351c57bdc17a46747dfc43c3a54dfa3bd3b1e376f724df3c2bc00bb180afd17ada9cb30cea4f45595b05ae6c8e0f2b29cc2b3753d0200960b39481ef166a001623e7671ebc408823fed1a369919b4c5a89028fb27f70904ee2f7ae0569398649bd8862013235073aa417c8cfa6c55f58d1f9e2d2281d6e607e231d0ff0f2f737a812d9e601b17241f536a968c79f0a1d68aa2a9de3a78e250a3c81aaace8d5680fff2794ec78567d6d24c75fc6d7281cd2c457ba37a6ac4f600110c1cce211210c1159c77776312002a730bfdf2e5e31eb9b838ebf70606853d7f3ed88184a76ec599428cf0f6c5b6dc844212893d030a3dead68669fe0644f0f8b607dbc671af3a7ac38c3860023d1d805774b7e6e1958db6f99394d237339f876de9accd84f62292e81e7976d1b227668716596e72f5e8df65eb3311f5b7bc68d44022041624eaae9deb013ce406f53bcafb694d95c11477f0dd57a9c6cb6760251da4ee201350523bbac087e4bbfb6cd07eece11106016cd455fcb722b0e7d273a107c6542c9421b43476bf60838cbb2e0536a8117784eac2fe1443b424141678728229858ea7c9519b9ef9315198506f768aee224961605d3ddf9110ce524af8022c5e25e5a3bc828aa1d713b9b6cc135022f8d6d5f42f0121cc47b1d8fa135944012f22167649d2de6b97a78a5c96e4aba470e4a9742e065b6f47b6ac0abb74b52067b787ba09d66ccbb5359c8786c535530622a507f0102cd72955c21f892c5fed1d9614df6c45ae4751724f0872d2e61cebf70488dfbd20479aa1236f946d3288e5b66af32faa094f8ba2498230eab5f3b415239220d8bccac652bb44d6f214415b261d4387fd02ce0234048206a28875572057fb2ea4ba79f9015eb6788488aa131178a2e9fc0e8b7740dc344cc210bf42221ca2f2e96a56c4248f4e0d73d716796559695caaf4842815ad085f95d211bc052589cee689d4e4a58c3a32d94ded7eb77c212679dd22417250754c52cabaa9624fb8a214a04ba051b1fdc135beb138307667d63f04cdd7f7d4deb900deb88fb170d089069f8367b7c1883bdaf3772101a27326cd6f1788e1ef65c680fb4edf85728d5980b5c13ff62f9e007d09a2fb5252589cbe10a2df67b98ae739bcd6bc729749a779d26fa413ace3022ee8f417c24138e353eb9d9625433ec8b52609c6a65a7315bffb718ff2ab86e51c4af1af555cdb176c1c9768f4e033396c6901026699c8896c09d7bdc2a719f79b577625b4ee2e084af25a99c31a10d02ebafc5bb58b718d6d87bca4849735fb0d6032529658fe5a87195d58f4425c861ab7ec7d954e421fe5f8c83d21768c4de7ba68dca38ca98856b91d21273a71afc432cf4c755865bba252488f1124740f52f08ec6169fe29e2e5416dc248cd8e488e7971155b8d33f54ad2a51440a773b3d2c8417b44476dbea9295269179a71589540629847aaae43c31e53c458eb5dc03245107f751303470cb26b323acbddb0604c7e00432593d7e50247d90d56996a78ec64a256f2ce833d1b8c943d84f606bf5c9cf46aa2fbf34dc7658c5add54634cd6ab262f81076f7efbc2284ed9eb9ef4bee54f45a5001ae858f01d74bdd79f39d6b7992f1c363f640c7265212d5a8a2439676408051df1d7c50f8770db1cc32d9d9edb707b31ee0bda4cae329af9bafd66f93b5672963df3a970f52c434f771051c77c7181e557f887a6d150cc2472bfca84d61de16dba0660e7c60b3bc24d29c3be8462752c7d4b5033dd19688ebfcde2b5f6417959f1be8182d168539dccb50b05eb76a9d435f602226e51715f612ed706d67934f35ee250bd1c07fde5f8b367270e625db789491513bc551460b1dede5d6f5a7445e8ff63cdc61448d10c18e4de46686fc4d2207c8d641f3808f6b06efae65f8a61c0dec1f0002a82616e19df2bc63619494ca32f8fd701aa08366cc476834249945eb961dad67ec4a8a2defb7dff63d02cc9b747898e18c63d7636d893110b23d49e8b757f680c20ca67d732b5fd28079a3bf1403b8a410645809f510d5657baaebc27df73ed4f3b4328ed0f99b511c0b1d1c1a8e0345da02079d00036442d21be90e07124077b878ab6fd129c3261046d2060c36a512785a137001242b005fefacb5008d4a01b46b3b6cd69ce900312e7346cea1b96486d695bd0ed076845dab0fe17d1e1583033fae5ef4c7b4249103312fa771cef1a9114e39f79cf2e3e4a71f2b8d078320d40653aef35a6fc16555b40460a9131423f1b7943024749012a243abe6efa1967010539dc57de5038f0050b2bf08ab623a335f7ebf1760f081c38c6116c3ea85943d9470fca0e9a1d944eab02c4e2ee616f1661a4f2055875f531f890a561a44f5eb2e91643a7584ecf1557a3ca0c43022728a255dc04673c7f2dfb03f9d53d32a95c6076cb04a538bf1373075dfc3f1713094932fb05d4594bac9570a25c480629da06925333c92b322468366fa0207ba7e9bd2823e8ff64e20bfd2449322e0c9ef703692bc2ad363f80271d5055067c1e56bef2e8900076d4292e17eeccd93cb60334bd9394e6735e2d106a1fbf57136319d85f5cf92558e17965f55fe27e0c100aa674c8e13f2ba0a50036b973343fcd355ec0117a2043212322e5d10eeb4154e3a6ebe71db4435a04bfb7f8ef9e6c4625c295403f1d6aea6352a4be5a5a519241e2d6cd495815e9a11a1539d73b113e71d5092e7e7e143ac42ab490a7fe4ca0eeda49f23761043253801da6cc5b13d8be1ed0d09c7f123c31ee6e8cf359425d328bb4020de1752d26c47d0063456e68178c4fc5ce1c3d6dec0cc148f3773ef93e7ad857101636dea8fdf660fc1227147ffa8a99f5822ab137dd10e55d423aae8583c1e96d165701562c6ecb129e6a02cb2a3812fd27103f5bd9dfcdfaae3a15c85a197f2bef7e96518bef21f1f661678cee4f7785b353536bffbbb90ada04fb99a6fc477b152cbba9a2c07138ee4d657778400c5fc2647bae6ceb2baa387588780a77b505e61478c194cee3f2e11a834ea8be6e660765d74278f5e7005765e31749ea4266036aa27236b5340b7e6e8f8667dc017a06228f5ab108822303766a2eebcba9f6d71651131bfb2f52301dc1e6856e6834675c1f6c5be8b4fbe7398b52e09c08b6e7795e7d8bee5e0af31e8ccf479b9e940e35387053c264109e4d05aa797dcd32d90aff0ccde6c055bb29a085a21b4cb3640abc542a86f655214d21c10cf77b8f1358f73d9c92c72875712c7d21df6d8301470f8439215d5f0054d1e53a01b63c512f6704ee76af092d1bc99c5a793342df5c3dac1709aa0e04683d4864ac62762810d50eb98d8e880805571eebfab9798870fb213bf5dab77a74f6a8c6985b7f47403b95b2be0392153ab41c5fc9f9ff223cc1f3b1413b33351c6cbb7cc8b15f9f2a662cbf24c6ca6c680d00a9f717436e087a76a7b0ce7784079f69d540f12113557d352e25be46030a8849353a893d044f298442280750f911a8b8c3309fad592deb008ab28d6b383f7bb1298542497e226e24176cdfeb4e2d3c1dcd760a34a926f107258ac8b6dc41b5fd5d468681ac5d3aa09ec4c4c60d00b25d756f9ec23551a4b06bc4db0ba524ffa7df23b76a4c4137d44f552d92152afb253d262c4ce07633aeeb36ed703945b93c3ae21916b61daab7a673118a7e36c595bf0049cc514e39970ff780e9ab3a9c090e69ccf8431024a42e1b0dac77422e22fc822f3a8e121514567ef840623ef493f1e46617fd422730235b62cabe73e133db5d1ad195618403aa485e3ae764f992f05f62a4561525ba5cff1632af4a56e39ec465052422fe90686ac245a061188863d0da5f113cdec5386075964a48b3f49d42d8acca0c92319e2ec413ac20e60517713021900ad361e79fccc4ac67badfe2481d1cc53cad8f9cf301c0fe0e7359477baebb786e6492143a9369d85722f98c1ace9cfc3640dbc3a0849c096c9f09d38d82ce46755850e48a088aa843b74515fa4c19dd295e10bb897f19f33888a89b89964bd40f4001721f80873e4ace7f16c079f0e07a2ca9eb9389cff571431c0260ef1fad6c7106394e8cfca9292d8f4300fccd417978eaa213a0bf7a0f081b9c637661c513d27dce80d5d1f92f00c166fa8cf57476db88d7d9c1c00c3080b7ba8f9fb94d3437d0d280003f5c481b2dec9eda8b6413a62687ee89eb51128f620073747730460e9a305cc7f5761a1cdf426b2b92aa0a1ccd35c6403bbd2222e4f19e3ee9d46ca2cd70bfa5f7b34eaf6d09682dbd3d034809a859be95fa4aa8ad825318eaa6320cd5ca5e21ea6424e6188a51bad9b02023f5e648912d2b36c8bb18f77560356511b7e0e757d772720a142bf26427e34a37e87a5fd9cc2344b765b47145dace1f439a8b505a33bd0dd312b4402744200a76ccff6cae86db446d646142731c471ae34bafc99b92f0032f110236cbcabf1e19f20b54d5326e29848d8f83fd4a7d6a4cd4a80302bd4d4c41710f290f63d84c38f12163b2261336dc9c309cc1a43367176436234c0567538591b05b6cb9d95c661f0b97109cda3ea5c526d32d697d335203557adddc5247166db917a5d1fe720f0e575d58b2dd19699e7cffa9f6341bec82f6969ca08075cdc3ac7d56f1e3773d673be1ede02560dbc4efc19fad620ba2d52c22db67d5508fcd90940660c37746fac3eecee9f60ba26944274e40297a25b71f2b1d06522b92eb70bb70b9663a7898835b168cc24721df3bbb5402604e5dea91b1bf68a64bb210a21d86c4645b46c1236de9bba81f7fc2abab26d9d54822fdcd818bcffc4e24179e71751146049cff60bd6403060c75e13de69e6d2d3baeee3754d32b5c21180428468aa3a5684cf5159666a9c70c13385236602ff32c105e0d55324b2a70a43ed5682b4d962ec42b6556a8692a56b644670b7d928116f004aa164e0564681f8539a47f2f3860ce81f98c9449d45935b79feee31ef310424187d95c801f4138028ad15c30291a7dc8dafe8c0dab3926fc1e689a8a7b3d784a623da85f044e9f47ac6e40fd03651f458ee4bb0b7b50143f4d9f9d495951864c5912ceeb712333d79fbb9ec30723ff834954fb97826c32edae17535c135511a50a73a9eacb33d46ab1e46cc0b12947709f2192ad4d103613bc4365768870eaf4a9f9b8947915b7168090e59e000ea0d8d0e2bdf1c241f21aa8bda70f984bf322f97716b87125154b2656d2220a2c15cba48da5a5b3234a14f9621443925783ca623c5b7707574af6f7081818132ff0832d8d4cd90f66d51cc02bb2d33958dd7ed89d85478762c44c44afaeaa0a30fe358d6eeafbf457bcfc127837330a1c3150e697f1b0b4360c90c900955fb87fd90fd383ba34911d8981588159ff9a6f43287f5dc4733e51cd93f2ec54bea60120eb9c1d7c99463a5e4186f5b98c4c15f305bca421b64139144f5bc270d51471a534818e59ad8e43a87b822195f90e5920f720a685b4dd2ad22af5d3c17b3634b1ec13898922800837c2915d995fc957b54ceca84f451a315ce171a6cff84877d347b29ae558433995ad0910b9e7797c3288ee24bec6840af8ba1a956bd8283e46db87948ec85551786dedfe7bce20378bf91bb62b0ed02122cd305e97ea435481c5c30ae5247b5c9d0e3ece3a3d7140d196f94e8b475530f9007e8499247b62b1417db60a1551658241e5e230fe19603e718c00f0f4c8371cf412e5a6f7c27794db1ef9c0ba3618e85fcc4a6172ff09e6203df54f84ac5bf64a65e9fc944079fda289f3e3eddf06a7a41891287dd571f41bccc734b7c717778610f4dfe0eb54e2adb9fb030c132b00434dab6b1b33788c0c22e79ff75144dc726b6afed4e638b8c472d537d17518f75f3887fa8d7c5c539780ec02d3f3165d751f91a0a92d2bd6790d5857a2be5c833adffe30d83e69efc8bd9654d33b1a30a3cd530ff9475e749ba28c642a4b0956dc6e3db2f2477c37b6a2d8eb97d702c20cd64c2b95b3770c7e746bca4dfb3b7db3ec304279cd2115b6e2a6a9908d23c4a04e710197353e29f730347edcb17c4e21a4c755593f3bdaf83775b20ccd7cf1502e6b9b6d3d1b8152a5c555fe5f39fc99a778133a311d1f75b30631550e1c diff --git a/Assets/Prefabs/BasePrefabsCollection.asset b/Assets/Prefabs/BasePrefabsCollection.asset index 43536c8b..1b89fb43 100644 --- a/Assets/Prefabs/BasePrefabsCollection.asset +++ b/Assets/Prefabs/BasePrefabsCollection.asset @@ -78,6 +78,8 @@ MonoBehaviour: type: 3} emissionColorPicker: {fileID: 8936320662031972394, guid: d00706ed05d0c4a55943214fad99b6cd, type: 3} + generalSecondaryWindow: {fileID: 6108546402767822149, guid: f3b40a60628cd4583bd8f92cacf1ba3e, + type: 3} compositeParameterWindow: {fileID: 8976586735561836907, guid: 6d98a93f5b5c14ef5b7b125e407ce17d, type: 3} inputFieldUnit: {fileID: 4259592601424320053, guid: 54e97fa10b53c45caa973223dfe8418c, diff --git a/Assets/Prefabs/DynamicUI/GeneralSecondaryWindow.prefab b/Assets/Prefabs/DynamicUI/GeneralSecondaryWindow.prefab new file mode 100644 index 00000000..ca6832f9 --- /dev/null +++ b/Assets/Prefabs/DynamicUI/GeneralSecondaryWindow.prefab @@ -0,0 +1,1017 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1240682343910317699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5599388192872588209} + - component: {fileID: 3199647190746388131} + - component: {fileID: 503414748754392078} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5599388192872588209 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1240682343910317699} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 28135759441123670} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3199647190746388131 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1240682343910317699} + m_CullTransparentMesh: 1 +--- !u!114 &503414748754392078 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1240682343910317699} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: X + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &3425940885622124840 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3917407936232711292} + - component: {fileID: 5410295728114590775} + - component: {fileID: 7060295131274341572} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3917407936232711292 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3425940885622124840} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3644860481507880248} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 325, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5410295728114590775 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3425940885622124840} + m_CullTransparentMesh: 0 +--- !u!114 &7060295131274341572 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3425940885622124840} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: MOVABLE WINDOW + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: fa328c1ae3ffb6b4583cf371153b0be6, type: 2} + m_sharedMaterial: {fileID: 21918420405216288, guid: fa328c1ae3ffb6b4583cf371153b0be6, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 30 + m_fontSizeBase: 30 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 16 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 5 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 1} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &3434946290445229165 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 28135759441123670} + - component: {fileID: 1057536139067032015} + - component: {fileID: 7920762743793120445} + - component: {fileID: 4312400622441358281} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &28135759441123670 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3434946290445229165} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5599388192872588209} + m_Father: {fileID: 3644860481507880248} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 215, y: 0} + m_SizeDelta: {x: 60, y: 45} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1057536139067032015 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3434946290445229165} + m_CullTransparentMesh: 1 +--- !u!114 &7920762743793120445 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3434946290445229165} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4312400622441358281 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3434946290445229165} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 7920762743793120445} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &3608665235498700255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3644860481507880248} + - component: {fileID: 7372195850322016627} + m_Layer: 5 + m_Name: Dragger + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3644860481507880248 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3608665235498700255} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1854977653579841788} + - {fileID: 3917407936232711292} + - {fileID: 28135759441123670} + m_Father: {fileID: 2159118815575014413} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 60} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &7372195850322016627 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3608665235498700255} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 15 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &4253774854872856982 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3910719139516211015} + - component: {fileID: 2292947842607679055} + - component: {fileID: 1489859041288366674} + - component: {fileID: 524222864678847538} + m_Layer: 5 + m_Name: List + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3910719139516211015 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4253774854872856982} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 551846834705592840} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &2292947842607679055 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4253774854872856982} + m_CullTransparentMesh: 0 +--- !u!114 &1489859041288366674 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4253774854872856982} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 10 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &524222864678847538 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4253774854872856982} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &6108546402767822149 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2159118815575014413} + - component: {fileID: 8457520438632136860} + - component: {fileID: 2986888925985654052} + m_Layer: 5 + m_Name: GeneralSecondaryWindow + m_TagString: Untagged + m_Icon: {fileID: 2800000, guid: f87b5805002ec9649bcb1b96d8a16ba9, type: 3} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2159118815575014413 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6108546402767822149} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8021405171998557075} + - {fileID: 6487201069751892291} + - {fileID: 3644860481507880248} + - {fileID: 8469535554499026381} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 550, y: 400} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &8457520438632136860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6108546402767822149} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7847a689c7721eb4dba4344e727ab715, type: 3} + m_Name: + m_EditorClassIdentifier: + dragArea: {fileID: 0} + dragObject: {fileID: 2159118815575014413} + topOnDrag: 1 +--- !u!114 &2986888925985654052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6108546402767822149} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3e79381d3474441e48f55f95bcf8ec65, type: 3} + m_Name: + m_EditorClassIdentifier: + windowRect: {fileID: 3910719139516211015} + closeButton: {fileID: 4312400622441358281} + title: {fileID: 7060295131274341572} +--- !u!1 &6873862450655451041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6487201069751892291} + - component: {fileID: 7849468037921349748} + - component: {fileID: 9199103466573495050} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6487201069751892291 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6873862450655451041} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2159118815575014413} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7849468037921349748 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6873862450655451041} + m_CullTransparentMesh: 0 +--- !u!114 &9199103466573495050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6873862450655451041} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.1764706, g: 0.25490198, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 5e16c7aea118d68498053518146c9cf9, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 5 +--- !u!1 &7109394236268994084 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1854977653579841788} + - component: {fileID: 2652355617230950690} + - component: {fileID: 7450326411141902741} + - component: {fileID: 6969977284634394973} + m_Layer: 5 + m_Name: Trigger + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1854977653579841788 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7109394236268994084} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3644860481507880248} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2652355617230950690 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7109394236268994084} + m_CullTransparentMesh: 0 +--- !u!114 &7450326411141902741 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7109394236268994084} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.37254903, g: 0.40784314, b: 0.4509804, a: 0} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 5e16c7aea118d68498053518146c9cf9, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 10 +--- !u!114 &6969977284634394973 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7109394236268994084} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &7722623036288387984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 551846834705592840} + - component: {fileID: 3462221589685567211} + - component: {fileID: 8205589132100119377} + - component: {fileID: 9024548813321701438} + - component: {fileID: 1583307516500988033} + m_Layer: 5 + m_Name: Scroll Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &551846834705592840 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7722623036288387984} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3910719139516211015} + m_Father: {fileID: 8469535554499026381} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3462221589685567211 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7722623036288387984} + m_CullTransparentMesh: 0 +--- !u!114 &8205589132100119377 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7722623036288387984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11854753, g: 0.17248131, b: 0.2264151, a: 0.39215687} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 5e16c7aea118d68498053518146c9cf9, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 6 +--- !u!114 &9024548813321701438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7722623036288387984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 3910719139516211015} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.01 + m_Inertia: 1 + m_DecelerationRate: 0.05 + m_ScrollSensitivity: 100 + m_Viewport: {fileID: 0} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 0} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 1 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1583307516500988033 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7722623036288387984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 1 +--- !u!1 &7904806204557817479 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8469535554499026381} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8469535554499026381 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7904806204557817479} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 551846834705592840} + m_Father: {fileID: 2159118815575014413} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -30} + m_SizeDelta: {x: 0, y: -60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &8383194892584020960 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8021405171998557075} + - component: {fileID: 8707094069137646333} + - component: {fileID: 1864694405006936346} + m_Layer: 5 + m_Name: Shadow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8021405171998557075 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8383194892584020960} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.00008, y: 1.00008, z: 1.00008} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2159118815575014413} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 24, y: 24} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8707094069137646333 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8383194892584020960} + m_CullTransparentMesh: 0 +--- !u!114 &1864694405006936346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8383194892584020960} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.5882353} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 0755a77d5bd80d94eaba57a2d5d0f55e, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 5 diff --git a/Assets/Prefabs/DynamicUI/GeneralSecondaryWindow.prefab.meta b/Assets/Prefabs/DynamicUI/GeneralSecondaryWindow.prefab.meta new file mode 100644 index 00000000..9dc5e1ac --- /dev/null +++ b/Assets/Prefabs/DynamicUI/GeneralSecondaryWindow.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f3b40a60628cd4583bd8f92cacf1ba3e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIButton.cs b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIButton.cs index 7784b831..2725a51f 100644 --- a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIButton.cs +++ b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIButton.cs @@ -18,11 +18,14 @@ namespace Ichni.Editor this.buttonText.text = buttonText; if(!hasTitle) title.gameObject.SetActive(false); } - + public void ApplyFunction(UnityAction function) { button.onClick.AddListener(function); - button.onClick.AddListener(connectedBaseElement.Refresh); + if (connectedBaseElement != null) + { + button.onClick.AddListener(connectedBaseElement.Refresh); + } } } } \ No newline at end of file diff --git a/Assets/Scripts/DynamicUI/Inspector/CompositeParameterWindow.cs b/Assets/Scripts/DynamicUI/Inspector/CompositeParameterWindow.cs index 43d26cbc..e0f189df 100644 --- a/Assets/Scripts/DynamicUI/Inspector/CompositeParameterWindow.cs +++ b/Assets/Scripts/DynamicUI/Inspector/CompositeParameterWindow.cs @@ -17,14 +17,14 @@ namespace Ichni.Editor public string parameterName; public UnityAction ApplyParameters; - public void Initialize(IBaseElement baseElement, string title, string parameterName) + public void Initialize(IBaseElement baseElement, string titleText, string parameterName) { transform.localScale = Vector3.zero; this.connectedBaseElement = baseElement; this.parameterName = parameterName; - this.title.text = title; unitList = new List(); - closeButton.onClick.AddListener(Quit); + + InitializeWindow(titleText, ApplyParameters); StartCoroutine(WindowAnim.ShowPanelOnScale(gameObject)); } diff --git a/Assets/Scripts/DynamicUI/Inspector/IHaveInspection.cs b/Assets/Scripts/DynamicUI/Inspector/IHaveInspection.cs index 01133270..24d0008c 100644 --- a/Assets/Scripts/DynamicUI/Inspector/IHaveInspection.cs +++ b/Assets/Scripts/DynamicUI/Inspector/IHaveInspection.cs @@ -56,7 +56,7 @@ namespace Ichni.Editor DynamicUIButton button = Object.Instantiate(EditorManager.instance.basePrefabs.button, container.rect) .GetComponent(); button.SetText(buttonText, title != "null"); - button.Initialize(baseElement, title, "null"); + button.Initialize(baseElement, title, string.Empty); button.ApplyFunction(function); container.dynamicUIElements.Add(button); return button; diff --git a/Assets/Scripts/DynamicUI/Inspector/InspectorSecondaryWindow.cs b/Assets/Scripts/DynamicUI/Inspector/InspectorSecondaryWindow.cs index 8bee1aa9..6bf7fd97 100644 --- a/Assets/Scripts/DynamicUI/Inspector/InspectorSecondaryWindow.cs +++ b/Assets/Scripts/DynamicUI/Inspector/InspectorSecondaryWindow.cs @@ -11,24 +11,15 @@ namespace Ichni.Editor public RectTransform WindowRect { get; set; } public List Containers { get; set; } - public void Initialize(GameElement gameElement, string title) + public void Initialize(GameElement gameElement, string titleText) { StartCoroutine(WindowAnim.ShowPanelOnScale(gameObject)); WindowRect = windowRect; Containers = new List(); connectedGameElement = gameElement; - this.title.text = title; - closeButton.onClick.AddListener(Quit); - - } - public void Quit() - { - Destroy(gameObject); - //StartCoroutine(WindowAnim.HidePanel(gameObject, true)); + InitializeWindow(titleText); } } - - } \ No newline at end of file diff --git a/Assets/Scripts/DynamicUI/MainUI/GeneralSecondaryWIndow.cs b/Assets/Scripts/DynamicUI/MainUI/GeneralSecondaryWIndow.cs deleted file mode 100644 index 03176c9a..00000000 --- a/Assets/Scripts/DynamicUI/MainUI/GeneralSecondaryWIndow.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class GeneralSecondaryWIndow : MonoBehaviour -{ - // Start is called before the first frame update - void Start() - { - - } - - // Update is called once per frame - void Update() - { - - } -} diff --git a/Assets/Scripts/DynamicUI/MainUI/GeneralSecondaryWindow.cs b/Assets/Scripts/DynamicUI/MainUI/GeneralSecondaryWindow.cs new file mode 100644 index 00000000..889bcc11 --- /dev/null +++ b/Assets/Scripts/DynamicUI/MainUI/GeneralSecondaryWindow.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace Ichni.Editor +{ + public class GeneralSecondaryWindow : MovableWindow + { + public RectTransform WindowRect { get; set; } + public List Containers { get; set; } + + public void Initialize(string titleText, UnityAction closeAction = null) + { + WindowRect = windowRect; + Containers = new List(); + + InitializeWindow(titleText, closeAction); + } + + public DynamicUIContainer GenerateContainer(string title) + { + DynamicUIContainer container = + Instantiate(EditorManager.instance.basePrefabs.dynamicUIContainer, WindowRect) + .GetComponent(); + container.title.text = title; + Containers.Add(container); + return container; + } + + public DynamicUIContainer GenerateContainer() + { + DynamicUIContainer container = + Instantiate(EditorManager.instance.basePrefabs.dynamicUIContainer, WindowRect) + .GetComponent(); + Destroy(container.title.gameObject); + Containers.Add(container); + return container; + } + + public DynamicUIInputField GenerateInputField(DynamicUIContainer container, + string title, string defaultText = "") //不与参数绑定的InputField + { + DynamicUIInputField inputField = Instantiate(EditorManager.instance.basePrefabs.inputField, container.rect) + .GetComponent(); + inputField.Initialize(null, title, string.Empty); + inputField.SetDefaultValue(defaultText); + container.dynamicUIElements.Add(inputField); + return inputField; + } + + public DynamicUIButton GenerateButton(DynamicUIContainer container, string buttonText, + UnityAction function, string title = "null") + { + DynamicUIButton button = Instantiate(EditorManager.instance.basePrefabs.button, container.rect) + .GetComponent(); + button.SetText(buttonText, title != "null"); + button.Initialize(null, title, string.Empty); + button.ApplyFunction(function); + container.dynamicUIElements.Add(button); + return button; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/DynamicUI/MainUI/GeneralSecondaryWIndow.cs.meta b/Assets/Scripts/DynamicUI/MainUI/GeneralSecondaryWindow.cs.meta similarity index 100% rename from Assets/Scripts/DynamicUI/MainUI/GeneralSecondaryWIndow.cs.meta rename to Assets/Scripts/DynamicUI/MainUI/GeneralSecondaryWindow.cs.meta diff --git a/Assets/Scripts/DynamicUI/MainUI/ToolBar/ClipManagementWindow.cs b/Assets/Scripts/DynamicUI/MainUI/ToolBar/ClipManagementWindow.cs deleted file mode 100644 index dbb6523a..00000000 --- a/Assets/Scripts/DynamicUI/MainUI/ToolBar/ClipManagementWindow.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using Ichni.RhythmGame; -using TMPro; -using UnityEngine; -using UnityEngine.UI; - -namespace Ichni.Editor -{ - public class ClipManagementWindow : MovableWindow - { - public TMP_InputField clipNameInputField; - public Button applyClipButton; - - public void InitializeAsSaveClip() - { - GameElement currentElement = EditorManager.instance.operationManager.currentSelectedElement; - - if (currentElement == null) - { - LogWindow.Log("No Game Element selected.", Color.red); - return; - } - - if (!OpenWindow()) - { - return; - } - - InitializeWindow("Save Clip: " + currentElement.elementName); - - clipNameInputField.text = currentElement.elementName; - applyClipButton.onClick.RemoveAllListeners(); - applyClipButton.onClick.AddListener(() => - { - EditorManager.instance.projectManager.beatmapClipManager.Save(clipNameInputField.text); - gameObject.SetActive(false); - }); - } - - public void InitializeAsLoadClip() - { - if (!OpenWindow()) - { - return; - } - - InitializeWindow("Load Clip"); - - clipNameInputField.text = ""; - applyClipButton.onClick.RemoveAllListeners(); - applyClipButton.onClick.AddListener(() => - { - EditorManager.instance.projectManager.beatmapClipManager.Load(clipNameInputField.text); - gameObject.SetActive(false); - }); - } - - private bool OpenWindow() - { - if (EditorManager.instance.uiManager.mainPage.toolBar.clipManagementWindow.gameObject.activeSelf) - { - LogWindow.Log("Clip Management Window is already active."); - return false; - } - - gameObject.SetActive(true); - return true; - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/DynamicUI/MainUI/ToolBar/ClipManagementWindow.cs.meta b/Assets/Scripts/DynamicUI/MainUI/ToolBar/ClipManagementWindow.cs.meta deleted file mode 100644 index 58aaaba9..00000000 --- a/Assets/Scripts/DynamicUI/MainUI/ToolBar/ClipManagementWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 98c54627a956d42e8af1eb21c396109a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/DynamicUI/MainUI/ToolBar/ToolBar.cs b/Assets/Scripts/DynamicUI/MainUI/ToolBar/ToolBar.cs index c1fc146b..33ae4f53 100644 --- a/Assets/Scripts/DynamicUI/MainUI/ToolBar/ToolBar.cs +++ b/Assets/Scripts/DynamicUI/MainUI/ToolBar/ToolBar.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using Ichni.RhythmGame; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.UI; @@ -18,20 +19,80 @@ namespace Ichni.Editor public Button clipLoadButton; [Title("Windows")] - public ClipManagementWindow clipManagementWindow; + public GeneralSecondaryWindow clipManagementWindow; protected override void Start() { base.Start(); saveButton.onClick.AddListener(EditorManager.instance.projectManager.saveManager.Save); exportButton.onClick.AddListener(EditorManager.instance.projectManager.exportManager.Export); - clipSaveButton.onClick.AddListener(clipManagementWindow.InitializeAsSaveClip); - clipLoadButton.onClick.AddListener(clipManagementWindow.InitializeAsLoadClip); + clipSaveButton.onClick.AddListener(GenerateSaveClipWindow); + clipLoadButton.onClick.AddListener(GenerateLoadClipWindow); } } public partial class ToolBar { - + private void GenerateSaveClipWindow() + { + GameElement currentElement = EditorManager.instance.operationManager.currentSelectedElement; + + if (currentElement == null) + { + LogWindow.Log("No Game Element selected.", Color.red); + return; + } + + if (clipManagementWindow != null) + { + LogWindow.Log("Clip Management Window already exists.", Color.red); + return; + } + + GeneralSecondaryWindow saveClipWindow = + Instantiate(EditorManager.instance.basePrefabs.generalSecondaryWindow, + EditorManager.instance.uiManager.mainPage.mainCanvas.GetComponent()).GetComponent(); + clipManagementWindow = saveClipWindow; + saveClipWindow.Initialize("Save Clip: " + currentElement.elementName, () => clipManagementWindow = null); + + var container = saveClipWindow.GenerateContainer(); + var clipNameInputField = saveClipWindow.GenerateInputField(container, "Clip Name", currentElement.elementName); + var applyClipButton = saveClipWindow.GenerateButton(container, "Apply", () => + { + EditorManager.instance.projectManager.beatmapClipManager.SaveClip(clipNameInputField.GetValue()); + }); + } + + private void GenerateLoadClipWindow() + { + GameElement currentElement = EditorManager.instance.operationManager.currentSelectedElement; + + if (currentElement == null) + { + LogWindow.Log("No Game Element selected.", Color.red); + return; + } + + GameElement loadTarget = currentElement == EditorManager.instance ? null : currentElement.parentElement; + + if (clipManagementWindow != null) + { + LogWindow.Log("Clip Management Window already exists.", Color.red); + return; + } + + GeneralSecondaryWindow loadClipWindow = + Instantiate(EditorManager.instance.basePrefabs.generalSecondaryWindow, + EditorManager.instance.uiManager.mainPage.mainCanvas.GetComponent()).GetComponent(); + clipManagementWindow = loadClipWindow; + loadClipWindow.Initialize("Load Clip", () => clipManagementWindow = null); + + var container = loadClipWindow.GenerateContainer(); + var clipNameInputField = loadClipWindow.GenerateInputField(container, "Clip Name"); + var applyClipButton = loadClipWindow.GenerateButton(container, "Apply", () => + { + EditorManager.instance.projectManager.beatmapClipManager.LoadClip(clipNameInputField.GetValue()); + }); + } } } \ No newline at end of file diff --git a/Assets/Scripts/DynamicUI/MovableWindow.cs b/Assets/Scripts/DynamicUI/MovableWindow.cs index 23de3759..e380b8e6 100644 --- a/Assets/Scripts/DynamicUI/MovableWindow.cs +++ b/Assets/Scripts/DynamicUI/MovableWindow.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; +using UnityEngine.Events; using UnityEngine.Serialization; using UnityEngine.UI; @@ -12,13 +13,16 @@ namespace Ichni.Editor public RectTransform windowRect; public Button closeButton; public TMP_Text title; + public UnityAction onCloseWindow; - protected void InitializeWindow(string titleText) + protected void InitializeWindow(string titleText, UnityAction closeAction = null) { title.text = titleText; + onCloseWindow = closeAction; closeButton.onClick.AddListener(() => { - gameObject.SetActive(false); + onCloseWindow?.Invoke(); + Destroy(gameObject); }); } } diff --git a/Assets/Scripts/EditorGame/Animations/AnimationBase.cs b/Assets/Scripts/EditorGame/Animations/AnimationBase.cs index 9df644ad..70f2bd59 100644 --- a/Assets/Scripts/EditorGame/Animations/AnimationBase.cs +++ b/Assets/Scripts/EditorGame/Animations/AnimationBase.cs @@ -18,7 +18,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); - submoduleList.Add(timeDurationSubmodule); } /// diff --git a/Assets/Scripts/EditorGame/Animations/Color/BaseColorChange.cs b/Assets/Scripts/EditorGame/Animations/Color/BaseColorChange.cs index 09e2cdaf..7bcdb69f 100644 --- a/Assets/Scripts/EditorGame/Animations/Color/BaseColorChange.cs +++ b/Assets/Scripts/EditorGame/Animations/Color/BaseColorChange.cs @@ -38,7 +38,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); - submoduleList.Add(timeDurationSubmodule); } protected override void UpdateAnimation(float songTime) diff --git a/Assets/Scripts/EditorGame/Animations/Color/EmissionColorChange.cs b/Assets/Scripts/EditorGame/Animations/Color/EmissionColorChange.cs index 28f75ac1..61f92763 100644 --- a/Assets/Scripts/EditorGame/Animations/Color/EmissionColorChange.cs +++ b/Assets/Scripts/EditorGame/Animations/Color/EmissionColorChange.cs @@ -38,7 +38,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); - submoduleList.Add(timeDurationSubmodule); } protected override void UpdateAnimation(float songTime) diff --git a/Assets/Scripts/EditorGame/Animations/Track/TrackTotalTimeChange.cs b/Assets/Scripts/EditorGame/Animations/Track/TrackTotalTimeChange.cs index 6040fb24..85835266 100644 --- a/Assets/Scripts/EditorGame/Animations/Track/TrackTotalTimeChange.cs +++ b/Assets/Scripts/EditorGame/Animations/Track/TrackTotalTimeChange.cs @@ -33,7 +33,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); - submoduleList.Add(timeDurationSubmodule); } protected override void UpdateAnimation(float songTime) diff --git a/Assets/Scripts/EditorGame/Animations/Transform/LookAt.cs b/Assets/Scripts/EditorGame/Animations/Transform/LookAt.cs index 4e253d1b..a9105044 100644 --- a/Assets/Scripts/EditorGame/Animations/Transform/LookAt.cs +++ b/Assets/Scripts/EditorGame/Animations/Transform/LookAt.cs @@ -41,7 +41,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); - submoduleList.Add(timeDurationSubmodule); } protected override void UpdateAnimation(float songTime) diff --git a/Assets/Scripts/EditorGame/Animations/Transform/Scale.cs b/Assets/Scripts/EditorGame/Animations/Transform/Scale.cs index 497fb844..366e55f0 100644 --- a/Assets/Scripts/EditorGame/Animations/Transform/Scale.cs +++ b/Assets/Scripts/EditorGame/Animations/Transform/Scale.cs @@ -36,7 +36,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); - submoduleList.Add(timeDurationSubmodule); } protected override void UpdateAnimation(float songTime) diff --git a/Assets/Scripts/EditorGame/Animations/Transform/Swirl.cs b/Assets/Scripts/EditorGame/Animations/Transform/Swirl.cs index 6370bb06..45d71e3f 100644 --- a/Assets/Scripts/EditorGame/Animations/Transform/Swirl.cs +++ b/Assets/Scripts/EditorGame/Animations/Transform/Swirl.cs @@ -38,7 +38,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); - submoduleList.Add(timeDurationSubmodule); } protected override void UpdateAnimation(float songTime) diff --git a/Assets/Scripts/EditorGame/Base/GeneralSubmodules/ColorSubmodule.cs b/Assets/Scripts/EditorGame/Base/GeneralSubmodules/ColorSubmodule.cs index f6f81922..f8b8fc44 100644 --- a/Assets/Scripts/EditorGame/Base/GeneralSubmodules/ColorSubmodule.cs +++ b/Assets/Scripts/EditorGame/Base/GeneralSubmodules/ColorSubmodule.cs @@ -55,6 +55,8 @@ namespace Ichni.RhythmGame this.baseColorDirtyMark = false; this.emissionColorDirtyMark = false; + + (attachedGameElement as IHaveColorSubmodule).colorSubmodule = this; } public ColorSubmodule(GameElement attachedGameElement, Color originalBaseColor, bool emissionEnabled, @@ -71,6 +73,8 @@ namespace Ichni.RhythmGame this.baseColorDirtyMark = false; this.emissionColorDirtyMark = false; + + (attachedGameElement as IHaveColorSubmodule).colorSubmodule = this; } public override void SaveBM() diff --git a/Assets/Scripts/EditorGame/Base/GeneralSubmodules/EffectSubmodule.cs b/Assets/Scripts/EditorGame/Base/GeneralSubmodules/EffectSubmodule.cs index 320cee63..62d58063 100644 --- a/Assets/Scripts/EditorGame/Base/GeneralSubmodules/EffectSubmodule.cs +++ b/Assets/Scripts/EditorGame/Base/GeneralSubmodules/EffectSubmodule.cs @@ -34,6 +34,8 @@ namespace Ichni.RhythmGame effectCollection.Add("Bad", new List()); effectCollection.Add("Miss", new List()); } + + (attachedGameElement as IHaveEffectSubmodule).effectSubmodule = this; } public EffectSubmodule(GameElement attachedGameElement, Dictionary> effectList_BM) : base(attachedGameElement) @@ -49,6 +51,8 @@ namespace Ichni.RhythmGame } effectCollection.Add(effect.Key, effectList); } + + (attachedGameElement as IHaveEffectSubmodule).effectSubmodule = this; } } diff --git a/Assets/Scripts/EditorGame/Base/GeneralSubmodules/TimeDurationSubmodule.cs b/Assets/Scripts/EditorGame/Base/GeneralSubmodules/TimeDurationSubmodule.cs index 0ed2fe1b..0f09e7b2 100644 --- a/Assets/Scripts/EditorGame/Base/GeneralSubmodules/TimeDurationSubmodule.cs +++ b/Assets/Scripts/EditorGame/Base/GeneralSubmodules/TimeDurationSubmodule.cs @@ -18,7 +18,8 @@ namespace Ichni.RhythmGame isOverridingDuration = false; startTime = -32767;//TODO: 换为-delay endTime = 32767;//TODO: 换为songLength - + + (attachedGameElement as IHaveTimeDurationSubmodule).timeDurationSubmodule = this; } public TimeDurationSubmodule(GameElement attachedGameElement, bool isOverridingDuration, float startTime, float endTime) : base(attachedGameElement) @@ -26,6 +27,8 @@ namespace Ichni.RhythmGame this.isOverridingDuration = isOverridingDuration; this.startTime = startTime; this.endTime = endTime; + + (attachedGameElement as IHaveTimeDurationSubmodule).timeDurationSubmodule = this; } public bool CheckTimeInDuration(float time, float offset = 0.2f) diff --git a/Assets/Scripts/EditorGame/GameElements/ElementFolder/ElementFolder.cs b/Assets/Scripts/EditorGame/GameElements/ElementFolder/ElementFolder.cs index 4b0bc4a3..7716145c 100644 --- a/Assets/Scripts/EditorGame/GameElements/ElementFolder/ElementFolder.cs +++ b/Assets/Scripts/EditorGame/GameElements/ElementFolder/ElementFolder.cs @@ -25,9 +25,6 @@ namespace Ichni.RhythmGame { transformSubmodule = new TransformSubmodule(this); timeDurationSubmodule = new TimeDurationSubmodule(this); - - submoduleList.Add(transformSubmodule); - submoduleList.Add(timeDurationSubmodule); } } diff --git a/Assets/Scripts/EditorGame/GameElements/GameCamera/GameCamera.cs b/Assets/Scripts/EditorGame/GameElements/GameCamera/GameCamera.cs index 05f1838c..eaaa3292 100644 --- a/Assets/Scripts/EditorGame/GameElements/GameCamera/GameCamera.cs +++ b/Assets/Scripts/EditorGame/GameElements/GameCamera/GameCamera.cs @@ -60,7 +60,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { transformSubmodule = new TransformSubmodule(this); - submoduleList.Add(transformSubmodule); } } diff --git a/Assets/Scripts/EditorGame/GameElements/GeneralEffects/TimeEffectsCollection.cs b/Assets/Scripts/EditorGame/GameElements/GeneralEffects/TimeEffectsCollection.cs index 0f4b644c..3ab2122b 100644 --- a/Assets/Scripts/EditorGame/GameElements/GeneralEffects/TimeEffectsCollection.cs +++ b/Assets/Scripts/EditorGame/GameElements/GeneralEffects/TimeEffectsCollection.cs @@ -26,7 +26,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { effectSubmodule = new EffectSubmodule(this); - submoduleList.Add(effectSubmodule); } private void Update() diff --git a/Assets/Scripts/EditorGame/GameElements/Notes/NoteObjects/NoteBase.cs b/Assets/Scripts/EditorGame/GameElements/Notes/NoteObjects/NoteBase.cs index f2f836d3..e732014d 100644 --- a/Assets/Scripts/EditorGame/GameElements/Notes/NoteObjects/NoteBase.cs +++ b/Assets/Scripts/EditorGame/GameElements/Notes/NoteObjects/NoteBase.cs @@ -58,9 +58,6 @@ namespace Ichni.RhythmGame { timeDurationSubmodule = new TimeDurationSubmodule(this); noteJudgeSubmodule = new NoteJudgeSubmodule(this); - - submoduleList.Add(timeDurationSubmodule); - submoduleList.Add(noteJudgeSubmodule); } private void Update() @@ -135,27 +132,15 @@ namespace Ichni.RhythmGame } public override void SetUpInspector() { - //我想把时间放在第一层菜单所以 + base.SetUpInspector(); + IHaveInspection inspector = EditorManager.instance.uiManager.inspector; - var container = inspector.GenerateContainer("Element Info"); - var nameInputField = inspector.GenerateInputField(this, container, GetType().Name + "'s Name", nameof(elementName)); - var guidText = inspector.GenerateParameterText(this, container, "Element GUID", nameof(elementGuid)); - var tagsListButton = inspector.GenerateButton(this, container, "Tags List", () => - { - inspector.GenerateCompositeParameterWindow(this, "Tags List", nameof(tags)).SetAsStringList(); - }); + var container = inspector.GenerateContainer("Note Info"); var exactJudgeTimeInputField = inspector.GenerateInputField(this, container, "exactJudgeTime", nameof(exactJudgeTime)); exactJudgeTimeInputField.AddListenerFunction(_ => UpdateNoteInTrack()); var noteScreenPositionText = inspector.GenerateHintText(this, container, () => "Note Screen Position: " + noteScreenPosition); - - foreach (var submodule in submoduleList) - { - submodule.SetUpInspector(); - } - - } } diff --git a/Assets/Scripts/EditorGame/GameElements/Notes/NoteVisual/NoteVisualBase.cs b/Assets/Scripts/EditorGame/GameElements/Notes/NoteVisual/NoteVisualBase.cs index 6d142a94..7ce9ef17 100644 --- a/Assets/Scripts/EditorGame/GameElements/Notes/NoteVisual/NoteVisualBase.cs +++ b/Assets/Scripts/EditorGame/GameElements/Notes/NoteVisual/NoteVisualBase.cs @@ -20,7 +20,6 @@ namespace Ichni.RhythmGame { base.SetDefaultSubmodules(); effectSubmodule = new EffectSubmodule(this, EffectSubmodule.EffectSubmodulePreset.Note); - submoduleList.Add(effectSubmodule); } } } \ No newline at end of file diff --git a/Assets/Scripts/EditorGame/GameElements/SubstantialObject.cs b/Assets/Scripts/EditorGame/GameElements/SubstantialObject.cs index 3c8f1142..eebe11f6 100644 --- a/Assets/Scripts/EditorGame/GameElements/SubstantialObject.cs +++ b/Assets/Scripts/EditorGame/GameElements/SubstantialObject.cs @@ -46,10 +46,6 @@ namespace Ichni.RhythmGame transformSubmodule = new TransformSubmodule(this); timeDurationSubmodule = new TimeDurationSubmodule(this); colorSubmodule = new ColorSubmodule(this); - - submoduleList.Add(transformSubmodule); - submoduleList.Add(timeDurationSubmodule); - submoduleList.Add(colorSubmodule); } } diff --git a/Assets/Scripts/EditorGame/GameElements/Track/PathNode.cs b/Assets/Scripts/EditorGame/GameElements/Track/PathNode.cs index 6d5b33e4..1730424b 100644 --- a/Assets/Scripts/EditorGame/GameElements/Track/PathNode.cs +++ b/Assets/Scripts/EditorGame/GameElements/Track/PathNode.cs @@ -47,10 +47,6 @@ namespace Ichni.RhythmGame transformSubmodule = new TransformSubmodule(this); timeDurationSubmodule = new TimeDurationSubmodule(this); colorSubmodule = new ColorSubmodule(this); - - submoduleList.Add(transformSubmodule); - submoduleList.Add(timeDurationSubmodule); - submoduleList.Add(colorSubmodule); } diff --git a/Assets/Scripts/EditorGame/GameElements/Track/Track.cs b/Assets/Scripts/EditorGame/GameElements/Track/Track.cs index f103a47d..ef9af9dd 100644 --- a/Assets/Scripts/EditorGame/GameElements/Track/Track.cs +++ b/Assets/Scripts/EditorGame/GameElements/Track/Track.cs @@ -34,9 +34,6 @@ namespace Ichni.RhythmGame trackPathSubmodule = null; trackTimeSubmodule = null; trackRendererSubmodule = null; - - submoduleList.Add(transformSubmodule); - submoduleList.Add(timeDurationSubmodule); } private void Update() diff --git a/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/CrossTrackPoint.cs b/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/CrossTrackPoint.cs index 8a98faaf..d336fe28 100644 --- a/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/CrossTrackPoint.cs +++ b/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/CrossTrackPoint.cs @@ -39,7 +39,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); - submoduleList.Add(timeDurationSubmodule); } private void Update() diff --git a/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/TrackHeadPoint.cs b/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/TrackHeadPoint.cs index fc742425..77f73f51 100644 --- a/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/TrackHeadPoint.cs +++ b/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/TrackHeadPoint.cs @@ -33,7 +33,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); - submoduleList.Add(timeDurationSubmodule); } public void Update() diff --git a/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/TrackPercentPoint.cs b/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/TrackPercentPoint.cs index d6b6627e..3c78305c 100644 --- a/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/TrackPercentPoint.cs +++ b/Assets/Scripts/EditorGame/GameElements/Track/TrackPoints/TrackPercentPoint.cs @@ -45,7 +45,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { timeDurationSubmodule = new TimeDurationSubmodule(this); - submoduleList.Add(timeDurationSubmodule); } public void Update() diff --git a/Assets/Scripts/EditorGame/GameElements/Track/Trail.cs b/Assets/Scripts/EditorGame/GameElements/Track/Trail.cs index 3893e109..e871f568 100644 --- a/Assets/Scripts/EditorGame/GameElements/Track/Trail.cs +++ b/Assets/Scripts/EditorGame/GameElements/Track/Trail.cs @@ -46,7 +46,6 @@ namespace Ichni.RhythmGame protected override void SetDefaultSubmodules() { transformSubmodule = new TransformSubmodule(this); - submoduleList.Add(transformSubmodule); } } diff --git a/Assets/Scripts/Manager/BasePrefabsCollection.cs b/Assets/Scripts/Manager/BasePrefabsCollection.cs index 6e6299bb..aa156151 100644 --- a/Assets/Scripts/Manager/BasePrefabsCollection.cs +++ b/Assets/Scripts/Manager/BasePrefabsCollection.cs @@ -52,6 +52,7 @@ public class BasePrefabsCollection : SerializedScriptableObject public GameObject baseColorPicker; public GameObject emissionColorPicker; [Title("DynamicUI相关-Composite")] + public GameObject generalSecondaryWindow; public GameObject compositeParameterWindow; public GameObject inputFieldUnit; public GameObject animatedFloatUnit; diff --git a/Assets/Scripts/Manager/ProjectManager.cs b/Assets/Scripts/Manager/ProjectManager.cs index 9005b2f9..01766185 100644 --- a/Assets/Scripts/Manager/ProjectManager.cs +++ b/Assets/Scripts/Manager/ProjectManager.cs @@ -195,24 +195,24 @@ namespace Ichni public class BeatmapClipManager { - public void Save(string clipName) + public void SaveClip(string clipName) { LogWindow.Log("Start Saving Clip..."); GameElement selectedElement = EditorManager.instance.operationManager.currentSelectedElement; - if (selectedElement is not ElementFolder folder) + if (selectedElement is null) { - LogWindow.Log("Please select a folder to save the beatmap clip.", Color.red); + LogWindow.Log("Please select a Game Element to save the beatmap clip.", Color.red); return; } - SaveClip(folder, clipName); + _SaveClip(selectedElement, clipName); LogWindow.Log("Save Clip Complete", Color.green); } - public void Load(string clipName) + public void LoadClip(string clipName) { LogWindow.Log("Start Loading Clip..."); @@ -222,25 +222,25 @@ namespace Ichni return; } - LoadClip(clipName); + GameElement selectedElement = EditorManager.instance.operationManager.currentSelectedElement; + + if (selectedElement is null) + { + LogWindow.Log("Please select a Game Element to load the beatmap clip.", Color.red); + return; + } + Debug.Log(selectedElement.elementName + " " + selectedElement.elementGuid); + + _LoadClip(selectedElement, clipName); LogWindow.Log("Load Clip Complete", Color.green); } - public void SaveClip(ElementFolder folder, string clipName) + private void _SaveClip(GameElement element, string clipName) { List clip = new List(); - - folder.SaveBM(); - folder.matchedBM.attachedElementGuid = Guid.Empty; - clip.Add(folder.matchedBM); - folder.submoduleList.ForEach(s => - { - s.SaveBM(); - clip.Add(s.matchedBM); - }); - folder.GetAllGameElementsFromThis(false).ForEach(e => + element.GetAllGameElementsFromThis().ForEach(e => { e.SaveBM(); clip.Add(e.matchedBM); @@ -255,7 +255,7 @@ namespace Ichni ES3.Save("Clip", clip, filePath, ProjectManager.SaveSettings); } - public void LoadClip(string clipName) + private void _LoadClip(GameElement target, string clipName) { List GetAllAttachedBaseElements(GameElement_BM gameElement, List clip) { @@ -274,9 +274,23 @@ namespace Ichni string filePath = Application.streamingAssetsPath + "/Clips/" + clipName + ".json"; List clip = ES3.Load>("Clip", filePath, ProjectManager.SaveSettings); + + //对于第一个元素,需要特殊处理,将它放入目标物体的子物体列表中 + GameElement_BM first = clip[0] as GameElement_BM; + List firstAttaches = GetAllAttachedBaseElements(first, clip); + first.elementGuid = Guid.NewGuid(); + GameElement_BM.identifier.TryAdd(first.elementGuid, first); + firstAttaches.ForEach(e => { e.attachedElementGuid = first.elementGuid; }); + + //将目标物体(临时)存入读存档的Dictionary中 + target.SaveBM(); + GameElement_BM.identifier.TryAdd(target.elementGuid, target.matchedBM as GameElement_BM); + (target.matchedBM as GameElement_BM).matchedElement = target; + first.attachedElementGuid = target.elementGuid; - foreach (BaseElement_BM element in clip) + for (var index = 1; index < clip.Count; index++) { + var element = clip[index]; if (element is GameElement_BM gameElement) { List attachedElements = GetAllAttachedBaseElements(gameElement, clip); @@ -285,8 +299,13 @@ namespace Ichni attachedElements.ForEach(e => { e.attachedElementGuid = gameElement.elementGuid; }); } } + + first.ExecuteBM(); - clip.ForEach(e => e.ExecuteBM()); + for (var index = 1; index < clip.Count; index++) + { + clip[index].ExecuteBM(); + } } }