From 67a3fb8bf212b154441a6ebdd49f31d13c22b605 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Mon, 28 Jul 2014 12:44:46 +0200 Subject: [PATCH] Compression as a user option (fixes #446) --- auto/gui.files.go | 6 +++--- cmd/syncthing/gui.go | 1 + cmd/syncthing/main.go | 2 +- config/config.go | 7 ++++--- gui/app.js | 2 +- gui/index.html | 12 ++++++++++++ gui/lang-en.json | 1 + integration/h1/config.xml | 2 +- integration/h2/config.xml | 4 ++-- protocol/protocol.go | 32 +++++++++++++++++++------------- 10 files changed, 45 insertions(+), 24 deletions(-) diff --git a/auto/gui.files.go b/auto/gui.files.go index 93bac785..9c0a1045 100644 --- a/auto/gui.files.go +++ b/auto/gui.files.go @@ -28,7 +28,7 @@ func init() { bs, _ = ioutil.ReadAll(gr) Assets["angular.min.js"] = bs - bs, _ = hex.DecodeString("1f8b080000096e8800ffec7c7173dbb692f8fffe1478fae53d528e4c39497f9d77519c5eeaa6effc9a269938e9dd8cebce502224b1a64895006d6b127ff7db05400a20008a8ad3dcbb99d3b48e042c168bc562b1bb58603c26a7c57a53a68b2527e1e9903c3e7ef40df9677c554cc9f745b920719e0044cecb745af1a26424649412bea4e4f4cdebf7efcebefff0fecdbb73324f333a8c0e00dd8b2c23021d232565b4bca649443e304a8a39344b19614555ce2899150925f073515cd332a709996ea033f2f3d9fb23c63719455c593aa339c3ee624e66503ba5645e5440529a0b1a5e9d9dbe7c7dfe52741f1d1c8c0f7f67599a73322d8b1be8fb29e1654547d057ced3bca2f5ef755631fc5ffe26876368b9c88a699c91074fc93cce1800c5f9a2cae252fd46a083a0822f0c7831e3c1e4e0e03a2e09dbe4331856be2027758b6855245546c3a0a90b46e42258c76c1667eb92ce963ce2659cb32ce634b81c4e04a2aacca631a03f2101f00df163e9759ca5c92b40cca0e2224828a00a682efe32fc3b2ff1ef9ae35f761d5c02594db7118c7b9e2ec2790505699193f0c192f3f5dbb2b84e135a8ec883868cba6c483e1e10f818805142e771957116ddb272fe1f3486b2d7f14ad0fa5f47a7e7ef7e3c7a5f5c0155935d6d4f8be22aa5755ba3a56c6a111401cbcf79ccd3d98f30c7ec55819d879248fc003fe7e9ed531264c0a4a360d454b06a2e2ba2df599107a2fc0e788dff9b2ce2659165803438af4b4f7999014335beb159b106991043d3f906dfb362162354cd3a9c36a0eafa07a886511e4f9ad205e56f7e822214ba6d29ce765c72294242d66a66884e91c29c0a3a50063ede4d5a9530c376f96a73f603b238304a73587342902e1d48ce721cbf419eaa5f97052f664576ba041ec34a6dc8d4606859a276b07083b6c85f629d4d0d2c139ad9a497745d38468ac52507a6c6bebab7c0f494de38c9abd68b1224e72c9f17aaf95654239897502dbf8783310ad26018b16a36a38c698b072b583dcbf5ec61e1a42999c338432c4ec5ccc33fcf04048b329a2ff8124a1e3ed451e00701005cc05da49713a3329d23c25a0944699ed0db377341cb903c874edad8cc6584cb47024f2ca86949e32bb3f8eec0fc76373444f14191878346e0a5389c4b3e0df4e5e262128cb06909521197b365388c4cf6e160e5c8cc31758fe7ae59db86ac539abcd82e9b063a28570168851f68a6290b284cd252959310be0ff55a541758890b442fe745355b62c5877582ba5c56ddb5c9389b798828e90a763f271d76554d4452dce419a841272131e3b44cd955438af8a799199074315f34a189314bc8f9bf08fd64f15e8e23cd531eb684e84118fcbf9cf29ba2bc124b3c18e29a8eb3305882ea0e5ad0b6f6db32ab2661ab0bf72463dbb09b088465cb8a2313bb215d6ad924dac1dc1f63d8a46ccefa8755525e95b98f1dee09f171fde3349e5d2565b106396062cb843dec8a6ea6455c26ca8cb9f34c4ad7001b253b87712c11d8b9d02d5d4a1e9260cc362091abc0a54f61c9c4edc199023a718980c40864607b8de4a1dc834237750a793d417abbedf737d3df61a78d80672cd477a361048afd650c1a6b8b3c4ddae871c6f8664dc1d0d577b88b34b9242727b0fd81e10ac60ad8ba814b6983bdfb9a822d4ce694cf96681053e895dacaddc967d1d57748ed4900053447fbfac3bbb3d362b52e729a7324b8ef2cb438ae0da3c5741713c56f42d16676ec4c7ee2c7307606247de941e0b4607da4f093e7d6b8ea2a1f8aafccf6bdd9ef9b86a67cf78439d7837bcc9a41da7b5da3159017689ba1590c86e84d381c19101cedca10618e1af37948c6e4d1f1f1b10999266aa7af3f9ab50dedcd81098b2c150ea38fe562ef1312b28cd99b9b1c5c8f352df9464c9d678a6a8fd2b114ac125e6e3c58b053217f693e5da385f073cc97d12abe0d8f47e4efe450f252409ce5df6f3865ef0b0e4eea91c337b0a090793cf1484483b7a8f8aeaedf54bc4fdf0698b7f33bf0e341bd9190fa586b31e5b8ef101c80771e29c78fd3bf6a6f2abb1683f47b7aaf83b6b7e4eeee6e72d0766fd007ae98b1f96271dbd270ed3f08b77307928608425ce5681be9b680d1838d1a264a7828e42fd8851733e3c57a0d3d3b31d740a8441d3da03943bdbc39cd62f615589382f3f827f025412faa74231611262e555b0fded4b4a826d0264d32ea9f1129b281cffcdca241df43d8d61e4ceb325dc5e5c689c9c1bed61c22f6b7b49cc176192fe89f3e91b0a3f846ec60af8c0b0acd26f05b0eb71bab3185eb1987510104e855a79ca06329bb18bb00341a266dbe0abd3dcf0ab07ca11bb702c1b80f3aa1066bb1f074be68fbeaa80ed157b795bc6a10bd466c3f5c9a2287802e8318cb23b486322aba451602235ccabf1694e22ae8694dd62d946bd26ed6a56856b07b33b7388a715a2ae55f965df62aeec5337bc9eee4997f05e3585f2449f99539a608134cc3ee810d5d1ae8bb8ef9d658fe3f36048d08302dfedaa94dfd43f985ee9c0624c6a454089a163bf690a92094bbe4a2efcf644f96c20ef18bbfef1df30c9b42821d5bdc31878b2358a18d2a42e57ae41c30649cea1106a4b7ee36dfb29248ac13c37ec4212abc2a1a0c860179e41971b38b750c5461bb38bef40a833a6ad9290d6a4f55b53d37d2c1c0b78f36f30cdd7b1aeb201d63342506acec29e325fa28dfbab73a3c627ced1a787b8a732909ad66616bc234bef4654aa84c68d168d8c9a25dfce9c39cde9ca149cacf29c72824f372663c0683e28a9298607c11839fd076b3f58114b756eb37ebda63aa4f3d1130344e942205a43b516d04d187772ff3789a8963a5d055fd02b6b73587fae7607bb930fde3c359371900a037c410b0e243dfd829c6ac3dce198baf61f750a77035532d699be1a222ff3c7ff33ac2f3e37c91ce5b546a14628362cdc591c1529cb6b2a7e46380c7f0a0008fde834c8a58ff7a9da5f240652cce38efeedadeeaba6056ec06fa82b1014123d189cb73b5bc565f1c08708dc5b9c43e212ef7a9a308c0e8652dc3c411b275cc446f016755097f8a159587f73379b469ce5973dcf9975ab8e81f559c31b7948f6ce11e924f9face1cb4f374a90d89129e12dbda4686bb317d33996747685301543674a1e8de210973123534a7342d57a2b4a92a44c7cb7ecd0ae75fab7bf399771b34e9ff94e25bb1a0933f7d869c38af8dc7d0842c5b13739478fda96b197d3f5f938b949b38ce0891fe105e6aad4120442a88e805a8cb6a73dfac0e8fb57e72266600880aaf00fc43ea5374fdadc8378014a640334df905a27123ca5cdb2cd81a30f53e23d5a5793ff490712bfdab624de4b41f42a65a01395ed6fd89c36d4392f23062a9387c108157fbcd694d5ad66c9dd46a0a257600a6c0f955b546c95be719474d0bdc90cf09c71e08bf109f9f0ea2de338d29c58130340bc4f7986b6cde05d5334f0437f5f241b046eb25f302b6b5b1d0d8c41390e5af73d77f46c4d0a7360eff1cefc145da39fdfa41853bea1d335eabc663dc2daccc551a2a63b43f77219dae7150d1a30fb90e4a0250b1dcbd75ea56d6496bf6ee206d9799fae6851f1706b53d84bff065c9ae2266af22ab45eeaafad6e4642cf7ac4ba33d1475229fe9aa2ab726bfc07c35ef9fc205a7e86785675c3af269d6a904e43c7b6e0bd6bb5ff103524690edb09a63ba29a56beb736f01e27df7d53247c9695ca98f82cede4e6a79684d1c3fe74656dec3bb1773d158b63fce83a3923072d4fba465b952518eaaac58388dec2ee93841f61f1d58d2c52b00b60dfcb5bd8aa3a94bc023ba7d95c1e97b68238460cc71eef96b03a5e46196c8be4a4f1b39be2e8f722cd434c2bb5f120f04ba0a428a307a0a9de968268c379c629abd9f605bcacd48edc188c87ded2e40f2d03892d8b9bc08d2b4e762073cde2479d5f9885b5c9e315d07fd763265b4ad439956e98afcfe8846694d39dccb67ab454896eb5b758b23b09cac5877ed1386728a55e1f9a51ad2f0559db435308c8361dda56ba4dff140907460a91fb2058d48953ec16ea56458fc1de63c0ed41db13601bbc0ee7bb536aea98db29061e9222a723924e0ef614aa263ee9189505b5d5652efd765f6f008760af5b996eb24dfe3504b6230758f3b905ec457aa947e64d3ddfe15cd78db7239e58a08a72db30c1cf8ea460737923268f60cb11af2bb60ced3dcfb3c02356943cac8f63e2927eee3aec2bb4051855658dcb67d9e8071f5ec5d35befe0c6bcd3deaaa3d19d8b29056ba2ad7b3e43f2f2161b9d19e879cf63227df07e21728c38ceb2ee79a8d58736ebdbd90b5b2a42099e15dbd7c0b4083a73db7c685263e0a0a768c8941e5b367cf17d1aa183b74d466c2e4aec948e5946e3f2659d41d469c3e8b72f0c3a2f4caad579d411797429c8da69be8b76634189c7ca9a972918bdd9c69e56c64b9d54d79d89bec2bb0dad778a3013262efcc56d358b67349c35ca74d43e2ec3baa175bd409b39c0e309e1ac8b3e0253c39929c65ec7e31d54efe778a8164668cdeb78686d405c323ae334a9e7eca36dddeae0ca32b152a32dd364575717b57eb9b4ef07b44c4a072a75228cb6f63612ec0688f0ec4428b1014bf1b07dd087540189d7cfb49e3a1c7bbbed4f94aea1c5c36edadec665bc62d11500bba46f17f6eefa4f9fc8ffff5ca71305b4a71782dd7e012f045c344bec77cafb4743a69e82f47ebe73f6f5878cc64ae798e55dc175b1c38036c8b10c6885c0292e165463665d5cda75e602d66c027b0d371a5ea645a06be4c4e2328adddde5b5b638917db9ed106d10d220f828b5cc5345484712fcd6cc17feb09bde89690e37300e7d611b0112d6d028f61882faac57e20c463684d41a0063b716f5a84e1003668f9a14a25eb011b632a64d0eb5b9e118698f063f991ace95a9d66ae7426f3b11d267aedb484954bf7c8e04ca3dc3659e0a41f76dcdfbbbc34b705f586b3dd71262d9b56075f89699778fc5e492b6298f780cd3b7b1696aa34ca540855ae6c870e809924a74c2277318cea252c4080723e239d492b3d8adc97ba9ad2f134c524265488b63d73412d3be92b850fee2edd94f7463f069668a0adaac0d5419e749b13a17b924e193e31179f2d81339cd53eecb4c71e775a813867def34d4d7ab5c971a76f4b8e725c19a69ee8b801a84ba052f524b6cc77b07512a55664fa29a0bf95ea27c67d33b4eaf55e0ca08cb7b032f16aed75b3fd705ef8abcb880ebbbf9f8efcff13af4af0e2f0291a91db6ab75d3de1cbd9e94e1492c198fc95947be4b4e538c1490b8c69363e60b9d6598c6676f8080ed86929b38e798c511b32b71f45631c000bf57323b6eb62cd2198dc8f715476830c7022edab8d0613248b540342b9254a53cd20325166778ce5bad47841588057e206af14606b901a29dc880188e9103f19e0a25f3b40497f33a05c647e43f973457afa5482c29c3db718cba09c3c75d1a7c00ba2a4af1d84a8eafac9464097f188917c508a9539c70e1f9a3a24c9c3f1f58b5b8bf09127f410a715d14b36a05f44492c2c6231f87df3d85ff7efb141d4e7e6587c36d23f8f5eb09fc092f7e9b5c1e0ea3c307c34fbfc1df31ec3b0f1e0d1c97ccc476b145e0bd6966928247b0db462703d002dbcb8af0633059c5b7472064a2eac9f1e1e36f0e9f7cdb4e5ac28f37f9be26eea1c692677a2f4744e23c14a7f46e04f8c16db3badfd5ef86d85d26e0fe4a73bf9c40f7616c473e600f3aa41ad89704e38d91bd77b1ae14818e4ecda749f6bed4eec4a2076e7c2eb6d0861fdeedf4b1fdea58a6eca1027815970bd48fa83a50a164f81bd412adfd6cc9d93a7961b77d242a4d19378c42cbd014dafc7ea3d133febe1461780cfd9aca541aefa5b67a2716a94ae2852347ea8d7cf601213e27d8e093dac11871ca0bec03f7057641ed9e322d09edb2825a837507fdda171a9a275d0c768ab7c75a2ed5fc0769eb9f906f8effeddb49ab2e2dc1892f4ab4a31f7dfbe4efdfb41c798131fa318b178cfc0df04b5c0fb7ed86431179705478ee47ca675d2c9fd7ee4ca134f0fb91f6c3b8254e22dd45ac7c4c668783dedc3e434ddf0e57b68fd960d99769d27db3d379d030504f43d4183e4f50bddabeb14577085e3c2d2a7f581f57a680e8957da2bf600306df59ce69790d6d4ca2649ade71fd5e59d3b166a287f1884c6b3ab4bb2ab1b835222f1d6f6fab60685c014c9d00ed1b410acd33053e74cdbeae3155916af65c35532c38d0b0ca18a0c06b9d66b7f0ca765bccb2e9f3a6297047e38d089978781347db458f5d3b174177ef5b04cf7504360de81865355e719b4cdb9133472cc7380e5b5d9475e84a91a184a5bef465772842102bbdc74c8b26b59252567a67998c16ad30d164a88f3a931ea1c652938acca402f6df7485d71840924724af0c62927491723642a03a64aa5e35b32f542bf4c7352de21f89809ce8779dc5d7ac58c82ff154743dc467279a9a47c775640b7b26e61317402318db12b3393449a6c1633dd692d11c640b5b1d48b2a79236f1cfa74fe489da6dc4259e8a4bc77e301861f2e6797d7278b304154d42595f9fbe3e23f045aeb32d4364ab9a784949388c78a1c81194440c5fca0c1f6b9a4c75fdf0446150203072c985340f5585ec7d447064c01283a6263668ac0505c28b57c50d2d4f4155a342bbd39f5554c7e0411e438bd87c4cb19e6f854d7b52295f577c24dfbc740885a8865e7f4c6f6912362267b4daeadcd63b8f3541d334c75bcffde969eb45512804b7d19dbe8df498789f5690589e83967ffc0d39d4ffb10e4104e4f8c4013a71f5dacda5c743f46403f28f741fd2fad0740f627eee474c2715f7e8fe2777f7fafb0a253e3a5bcb03b60976c9d98ae233b1ff4272261e9fd0fee9e0661bf43e72b60f657d48ba8f98f5a2a593887bf47ef5270819989925ff4c193388775e1ef6741a6737f186bdae56535a7e15f976bed6a293df8b4d6f81c55f985c17b1fa9d787189282e8579a0f82c124ec717bf8e7ffdf572dc3ee092b06043882f8d5970429e7838a38ddec99d41144563f49624426902e8c88f1e0fd519de78b07beb848d1e8ffdfe7772d1fbd2c22e260a341706d71e5deee21566c6e5f75b99aeb70405e83664fed7f162842f4bf9a8498493925ed3302844c44ba6b474d1a593215f3a7f4a82532df14075ae9e526f8ac50bbdb3ac4aac1ae1d7b6d313d4dd48c07da2be6a5ddc6968e96a8deffe02e033293ce8c49e0c38bde503922f8e447ce06460c6f52e14ce08dc9ac1f36763d1f279fd266e179baa3cfda31227d61a93ba78f447058d81ba7cf13352a28d224bf3aba75b1c820d2342b3d588c49c97e010cd7899b58512cba207206d8c962caa72b64ce7da1d407ce0fa97387367bc8837bbfa9c91d71f79d405eab1ca123cc012363470db092c2903cefe825029dfb4b825f2702656532d30a59fbb3703b9ec200e43c9082ee3c88cc45949e364f359e48970aa9fbedd34e0b54381f08b72c72a5132d6f0c76c736725a6768ab398508c95a4892ecf22d6f67f42ed9e369367dd52eda6c07d3c940b94dfa5c949f0703b6247b81214efda37b89a2308238f86ba207b8dd0b7307a0db5fef8ee18895c0120354dfc1df4a2d2330f0d91ce1ad791e79fbce2440078ef0df665606f791fca0c6a04be68c957d917df83395ec3862efebd9556c8c453a38e8a14765947f12c2b980b8f38046c95dfd5efd22307ff1b0000ffff010000ffff0a471d467d660000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffec7c7173dbb692f8fffe1478fae53d528e4c39497f9d77519c5eeaa6effc9a269938e9dd8cebce502224b1a64895006d6b127ff7db05400a20008a8ad3dcbb99d3b48e042c168bc562b1bb58603c26a7c57a53a68b2527e1e9903c3e7ef40df9677c554cc9f745b920719e0044cecb745af1a26424649412bea4e4f4cdebf7efcebefff0fecdbb73324f333a8c0e00dd8b2c23021d232565b4bca649443e304a8a39344b19614555ce2899150925f073515cd332a709996ea033f2f3d9fb23c63719455c593aa339c3ee624e66503ba5645e5440529a0b1a5e9d9dbe7c7dfe52741f1d1c8c0f7f67599a73322d8b1be8fb29e1654547d057ced3bca2f5ef755631fc5ffe26876368b9c88a699c91074fc93cce1800c5f9a2cae252fd46a083a0822f0c7831e3c1e4e0e03a2e09dbe4331856be2027758b6855245546c3a0a90b46e42258c76c1667eb92ce963ce2659cb32ce634b81c4e04a2aacca631a03f2101f00df163e9759ca5c92b40cca0e2224828a00a682efe32fc3b2ff1ef9ae35f761d5c02594db7118c7b9e2ec2790505699193f0c192f3f5dbb2b84e135a8ec883868cba6c483e1e10f818805142e771957116ddb272fe1f3486b2d7f14ad0fa5f47a7e7ef7e3c7a5f5c0155935d6d4f8be22aa5755ba3a56c6a111401cbcf79ccd3d98f30c7ec55819d879248fc003fe7e9ed531264c0a4a360d454b06a2e2ba2df599107a2fc0e788dff9b2ce2659165803438af4b4f7999014335beb159b106991043d3f906dfb362162354cd3a9c36a0eafa07a886511e4f9ad205e56f7e822214ba6d29ce765c72294242d66a66884e91c29c0a3a50063ede4d5a9530c376f96a73f603b238304a73587342902e1d48ce721cbf419eaa5f97052f664576ba041ec34a6dc8d4606859a276b07083b6c85f629d4d0d2c139ad9a497745d38468ac52507a6c6bebab7c0f494de38c9abd68b1224e72c9f17aaf95654239897502dbf8783310ad26018b16a36a38c698b072b583dcbf5ec61e1a42999c338432c4ec5ccc33fcf04048b329a2ff8124a1e3ed451e00701005cc05da49713a3329d23c25a0944699ed0db377341cb903c874edad8cc6584cb47024f2ca86949e32bb3f8eec0fc76373444f14191878346e0a5389c4b3e0df4e5e262128cb06909521197b365388c4cf6e160e5c8cc31758fe7ae59db86ac539abcd82e9b063a28570168851f68a6290b284cd252959310be0ff55a541758890b442fe745355b62c5877582ba5c56ddb5c9389b798828e90a763f271d76554d4452dce419a841272131e3b44cd955438af8a799199074315f34a189314bc8f9bf08fd64f15e8e23cd531eb684e84118fcbf9cf29ba2bc124b3c18e29a8eb3305882ea0e5ad0b6f6db32ab2661ab0bf72463dbb09b088465cb8a2313bb215d6ad924dac1dc1f63d8a46ccefa8755525e95b98f1dee09f171fde3349e5d2565b106396062cb843dec8a6ea6455c26ca8cb9f34c4ad7001b253b87712c11d8b9d02d5d4a1e9260cc362091abc0a54f61c9c4edc199023a718980c40864607b8de4a1dc834237750a793d417abbedf737d3df61a78d80672cd477a361048afd650c1a6b8b3c4ddae871c6f8664dc1d0d577b88b34b9242727b0fd81e10ac60ad8ba814b6983bdfb9a822d4ce694cf96681053e895dacaddc967d1d57748ed4900053447fbfac3bbb3d362b52e729a7324b8ef2cb438ae0da3c5741713c56f42d16676ec4c7ee2c7307606247de941e0b4607da4f093e7d6b8ea2a1f8aafccf6bdd9ef9b86a67cf78439d7837bcc9a41da7b5da3159017689ba1590c86e84d381c19101cedca10618e1af37948c6e4d1f1f1b10999266aa7af3f9ab50dedcd81098b2c150ea38fe562ef1312b28cd99b9b1c5c8f352df9464c9d678a6a8fd2b114ac125e6e3c58b053217f693e5da385f073cc97d12abe0d8f47e4efe450f252409ce5df6f3865ef0b0e4eea91c337b0a090793cf1484483b7a8f8aeaedf54bc4fdf0698b7f33bf0e341bd9190fa586b31e5b8ef101c80771e29c78fd3bf6a6f2abb1683f47b7aaf83b6b7e4eeee6e72d0766fd007ae98b1f96271dbd270ed3f08b77307928608425ce5681be9b680d1838d1a264a7828e42fd8851733e3c57a0d3d3b31d740a8441d3da03943bdbc39cd62f615589382f3f827f025412faa74231611262e555b0fded4b4a826d0264d32ea9f1129b281cffcdca241df43d8d61e4ceb325dc5e5c689c9c1bed61c22f6b7b49cc176192fe89f3e91b0a3f846ec60af8c0b0acd26f05b0eb71bab3185eb1987510104e855a79ca06329bb18bb00341a266dbe0abd3dcf0ab07ca11bb702c1b80f3aa1066bb1f074be68fbeaa80ed157b795bc6a10bd466c3f5c9a2287802e8318cb23b486322aba451602235ccabf1694e22ae8694dd62d946bd26ed6a56856b07b33b7388a715a2ae55f965df62aeec5337bc9eee4997f05e3585f2449f99539a608134cc3ee810d5d1ae8bb8ef9d658fe3f36048d08302dfedaa94dfd43f985ee9c0624c6a454089a163bf690a92094bbe4a2efcf644f96c20ef18bbfef1df30c9b42821d5bdc31878b2358a18d2a42e57ae41c30649cea1106a4b7ee36dfb29248ac13c37ec4212abc2a1a0c860179e41971b38b750c5461bb38bef40a833a6ad9290d6a4f55b53d37d2c1c0b78f36f30cdd7b1aeb201d63342506acec29e325fa28dfbab73a3c627ced1a787b8a732909ad66616bc234bef4654aa84c68d168d8c9a25dfce9c39cde9ca149cacf29c72824f372663c0683e28a9298607c11839fd076b3f58114b756eb37ebda63aa4f3d1130344e942205a43b516d04d187772ff3789a8963a5d055fd02b6b73587fae7607bb930fde3c359371900a037c410b0e243dfd829c6ac3dce198baf61f750a77035532d699be1a222ff3c7ff33ac2f3e37c91ce5b546a14628362cdc591c1529cb6b2a7e46380c7f0a0008fde834c8a58ff7a9da5f240652cce38efeedadeeaba6056ec06fa82b1014123d189cb73b5bc565f1c08708dc5b9c43e212ef7a9a308c0e8652dc3c411b275cc446f016755097f8a159587f73379b469ce5973dcf9975ab8e81f559c31b7948f6ce11e924f9face1cb4f374a90d89129e12dbda4686bb317d33996747685301543674a1e8de210973123534a7342d57a2b4a92a44c7cb7ecd0ae75fab7bf399771b34e9ff94e25bb1a0933f7d869c38af8dc7d0842c5b13739478fda96b197d3f5f938b949b38ce0891fe105e6aad4120442a88e805a8cb6a73dfac0e8fb57e72266600880aaf00fc43ea5374fdadc8378014a640334df905a27123ca5cdb2cd81a30f53e23d5a5793ff490712bfdab624de4b41f42a65a01395ed6fd89c36d4392f23062a9387c108157fbcd694d5ad66c9dd46a0a257600a6c0f955b546c95be719474d0bdc90cf09c71e08bf109f9f0ea2de338d29c58130340bc4f7986b6cde05d5334f0437f5f241b046eb25f302b6b5b1d0d8c41390e5af73d77f46c4d0a7360eff1cefc145da39fdfa41853bea1d335eabc663dc2daccc551a2a63b43f77219dae7150d1a30fb90e4a0250b1dcbd75ea56d6496bf6ee206d9799fae6851f1706b53d84bff065c9ae2266af22ab45eeaafad6e4642cf7ac4ba33d1475229fe9aa2ab726bfc07c35ef9fc205a7e86785675c3af269d6a904e43c7b6e0bd6bb5ff103524690edb09a63ba29a56beb736f01e27df7d53247c9695ca98f82cede4e6a79684d1c3fe74656dec3bb1773d158b63fce83a3923072d4fba465b952518eaaac58388dec2ee93841f61f1d58d2c52b00b60dfcb5bd8aa3a94bc023ba7d95c1e97b68238460cc71eef96b03a5e46196c8be4a4f1b39be2e8f722cd434c2bb5f120f04ba0a428a307a0a9de968268c379c629abd9f605bcacd48edc188c87ded2e40f2d03892d8b9bc08d2b4e762073cde2479d5f9885b5c9e395a01fa376580378d4107a4c6e4baf3a67d70df3f5799fd08c72ba93ff568f9676d10df9164b76e745b9f8d02f40e78caed44b46b3b3f5d5216b7b280f01d9a643db5db719a12207c1c82a729f0d8b3a71b0dd42ddaae831d87b0cb83d687b026c1bd8e18f774a4d1d863bc5584452e47444d2c9c19e42d5842c1da3b2a0b6eacda5f2eeeb20e010ec752b3350b6f9c086c076a4056b6eb880bd482ff560bda9fa3bfcedbaf176c4130b54516edb2af8d991276c2e6fc4e4116c39e275c596a1bd0d7a1678c48a9287f5094d5cd2cf5d877d85b6003babac71f98c1dfd2cc4ab787aeb1ddcab779a607580ba7331a56060b475cf67485ede62a333293def7972a40fde2f448e11c759d63d0fb5fad0667d3b7b614b4528c1b3c2fd1a981654676e3310ad6c8c25f4140d99e563cb862fe44f23f4f9b6f989cddd899dd231cb685cbeac938a3acd1afd428641e78549b53aa23a228f2e05593b2d7ad16e2c28f1185ef332053b38dbd8d3ca78a993eaba46d15778b7d1f64e1166c2ea85bfb8ad66f18c86b346998eda27685837b46e1c683307783c519d75d147606a3833ebd8eb8bbc83eafd7c11d5c288b6797d11ad0d884b46679c26f59c7db4ad5b1d5c592656b6b4659aeceaeaa2d62f97f695819649e940a50e89d1d6de0687dd00111ea708253660299ebf0ffa902a20f1469ad65387af6fb7fd89d235b478d84ddbdbb88c572cba026097f4edc2de5dffe913f9ff9feb87a280f6f442b0db2fe08580d76689fd4e79ff68c8d45390decf77cebefe90d158e91cb3bc3eb82e7618d006399601ad1038c5c5826accac8b4bbbce5cc09a4d60afe146c3cb4c09748d9c585c46b1bbbbbcd61627b22fb71da20d421a041fa59679aa08e9c88bdf9af9c21f76d33b31cde106c6a12f6c2340c21a1ac51e43501fff4a9cc1c886905a0360ecd6a21ed50962c084529342d40b36c25612b5c9a136371c23edd1e02753c3b992d75aed5ce86d2742facc751b2989ea97cf9140b967b8cc5321e8bead797f777809ee0b6bade75a422cbb16ac0edf32f3eeb1986fd236e5118f61fa36364d6d94a9aca8504b26190e3d7153894ef8640ec359548ab0e160443ce75c7216bb35792fb5f56582494aa80c6971ec9a46aeda571217ca5fbc3dfb896e0c3ecd4c51419bb5812ae33c2956e722bd247c723c224f1e7b82a979ca7dc92aee540f75e8b0ef3587fac695eb9ec38e1ef7bc375833cd7d3750835017e345b689ed78ef204a65cfec49547347df4b94efb87ac781b60a5c19917a6fe0c5c2f57aebe7bae05d911717707d5d1ffffd395e87fed5e1452092b7c376b56eda9ba3d7f3343cb926e33139eb4881c9698a910212d778724c86a1b30c33fbec0d10b0dd507213e71c133b6276254ee32a0618e0f74a26cccd96453aa311f9bee2080de658c0451b173acc0fa91688664592aa94a77ca0c4e20c8f7eabf588b002b1c00f442d9ecd203740b4131910c33172209e58a1649e96e0725ea7c0f888fce792e6ea011589256578618e513761f8de4b830f40574529de5fc9f1e195922ce10f23f1a21821758a132e3c7f54948923e903ab16f73741e22f4821ae8b6256ad809e4852d878e4e3f0bba7f0df6f9fa2c3c9afec70b86d04bf7e3d813fe1c56f93cbc36174f860f8e937f83b867de7c1a381e3de99d82eb608bc97cf4c52f05476dbe864005a607b7f117e0c26abf8f608844c543d393e7cfccde1936fdb794cf8f1e6e3d7c43dd458f24cefe588489c87e2e0de8d003fb86d56f7bb0dde10bbcb04dc5f69ee9726e83e9fed4811ec41875403fb92603c3bb2f72ed69535d0d1a9f95ac9def7dc9d58f4c08dcfc516daf0c3bb9d3eb65f1dcb2c3e5400afe27281fa1155072a940c7f835aa2b59f2d395be733ecb68f44a529e3865168199a429bdf6f347a12e097220c4fa65f53995de3bde756efc4227b493c7ae4c8c6912f4120c4e7041b7c523b18234e79a77de0bed32ea8dd53a625a15d56506bb0eea05ffb8e43f3ca8bc14ef11c59cba59aff206dfd13f2cdf1bf7d3b69d5a52538f1458976f4a36f9ffcfd9b96232f30463f66f18291bf017e89ebe1b6dd7028220f8e0acf9549f9d28be5f3da9d2994067e3fd27e18b7c449a4bb8895efcbec70d09b0b69a8e9dbe1caf6311b2cfb324dba2f7b3a0f1a06eab5881ac3e709aa57db37b6e80ec18ba745e50febe3ca1410bd1252f4476dc0e03bcb392dafa18d4994ccdc3bae9f306b3ad64cf4301e91694d87767d25161749e43de4ed05160c8d2b80a913a07d4948a179a6c087aed9d735a62a52cd9eab668a05071a5619031478add3ec165ed96e8b59367dde3405ee68bc1121130f6fe268bbe8b16be722e8ee7d8be0b98ec0a6011da3acc62b2e98693b72e688e518c761ab8bb20e5d293294b0d4f7c0ec0e450862a5f79869d1a45652ca4aef2c93d1a215269a0cf55167d223d4586a52919954c0fe9baef0660348f288e495414c922e52ce460854874cd54367f61d6b85feb8a645fc23119013fdfab3f89a150bf9259e8aae87f8124553f3e8b88e6c61cfc47cf5026804635b62368726c93478acc75a329a836c61ab0349f654d226fef9f4893c51bb8db8d75371e9d80f0623cce73caf4f0e6f96a0a24928ebebd3d76704bec875b665886c55132f290987112f1439829288e1e399e1634d93a9ae1f9e280c0a04462eb990e6a1aa90bd8f088e0c5862d0d4c4068db5a04078f1aab8a1e529a86a546877fa4b8bea183cc86368119bef2bd6f3adb069af2ce5eb8a8fe433980ea110d5d0eb8fe92d4dc246e48c565b9ddb7afab126689ae67811ba3f3d6dbd280a85e036bad3b7911e13ef6b0b12cb73d0f28fbf2187fa3fd62188801c9f384027ae5ebbb9f478889e6c40fe91ee435a1f9aee41cccffd88e9a4e21eddffe4ee5e7f72a1c477686b79c036c12e395b517c39f65f48cec47b14da3f1ddc6c83de47cef6a1ac0f49f711b35eb47412718fdeaffe04210333b3e49f296306f1cefbc49e4ee3ec26deb0d7d56a4acbaf22dfce075c74f27bb1e92db0f80b93eb2256bf262fee15c5a5300f149f45c2e9f8e2d7f1afbf5e8edb075c12166c08f1a5310b4ec8130f67b4d13bb93388a2688cde9244284d001df9d1e3a13ac31b0f766f9db0d1e3b1dfff4e2e7a1f5fd8c54481e6c2e0daa3cb5dbcc2ccb8fc7e2bd3f5bca000dd86ccff3a5e8cf0b1291f35897052d26b1a06858878c994962eba7432e4e3e74f4970aa251ea8ced5ebea4db178b4779655895523fcda767a82ba2e09b84fd457ad8b3b0d2d5dadf12960007c2685079dd89301a7b77c40f2c591880f9c0cccb8de85c219815b3378fe6c2c5a3eaf9fc9ed625395a77f54e2c45a6352178ffea8a03150972f7e464ab45164697ef5748b43b0614468b61a9198f3121ca2192fb3b6506259f400a48dd1924555ce96e95cbb16886f5eff1267ee8c17f18c579f33f2fa238fba403d5659820758c286066e3b812565c0d95f102ae59b16b7441ecec46aaa05a6f473f76620971dc4612819c1651c9991382b699c6c3e8b3c114ef5d3b79b06bc8928107e51ee58254ac61afe986deeacc4d44e7116138ab19234d1e559c4dafe4fa8ddd366f2ac5baadd14b88f877281f2bb3439091e6e47ec085782e25dfb0657730461e4d1501764af11fa1646afa1d61fdf1d23912b00a4a689bf835e547ae6a121d259e33af2fc93579c0800efbdc1be0cec2def4399418dc0172df92afbe27b30c79bd9d0c5bfb7d20a99787dd45191cef0d6a3553ccb0ae6c2230e015be577f553f5c8c1ff060000ffff010000ffff43f0f7aa90660000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["app.js"] = bs @@ -73,7 +73,7 @@ func init() { bs, _ = ioutil.ReadAll(gr) Assets["favicon.png"] = bs - bs, _ = hex.DecodeString("1f8b080000096e8800ffec7d697bdc3692f0f7fc0ab8278734afd82dd98e27af2269578733510e5b8f244f369b273b0f9a44371191040d80927b14cd6fdf2a80f7d164ebb266271f6c3549b05028d40da0b8f3ece8ede1f9cf27af89afc360ef939d678ef3c964420e45bc907cee6bb276b84e9e6f6ebd24dfd10b31250742ce098d3c681169c9a78916529135c518d13e23876fdf9c9f1e1fbc3b7f7b7a46663c60eb6304b71f04c480534432c5e425f3c6e49d6244cce035ae88128974197185c7085ccec5259311f3c874019d911f8fcf1da517014358017759a4b03baa890b4fa78ccc440228f1c8e0f0c3f1e1eb3767af4df7e34f1c0746858323018de6bb23168d483477681cef8ed42272a1fb686e6eb9382211044cee8eceb227875a0623e20654a9dd11360a04bd18214846bdbd4f08d90999a6c4f5a9544cef8e123d73be1a150f7cad6387bd4ff8e5eee8bf9c77fbcea10863aaf9346000167a6411bc75fc7a977973567a2fa221db1d5d7276150ba94b4dafb8a7fd5d8f5d02191c73b10103e79ad3c0512e0dd8eed678b301c863ca953cd65c4425588d6634d1be908d16018f2e60e202a0183cd66ea2097711922fd96c7734a39778398e81907b9fe00b9aeb80ede54424bf93eb6b9ce73730bf6fa0a7b5f59b9b9d896d957760814d85d04a4b1a4f5ca526f9d538e4d118ee8c523c901b94cf98b6189a6ba217310c42b30f1a5f364f08990a6f41aecd4f4262ea79809033155a8b709bfc6533fef075fa6c0683766634e4c1629b8cbe65c125d3dca5e40d4bd86883e43736c8be046a6f104523e50037f3990571f389f99304ffcfff32ef31a472ce23478b789b6c8dbf6461a5ed18917542110915531080eb365c7e64512036c88f22a22efc05c953021872838c0e416c389380e215609883a9754181d990bb3d941b6f4f1bd6d5720f59a7f914e9d5fd740613d2fd3487ec2d85dcfa3487ece554980ae93169691789a836ae40cc458dccdb64f3ebea4c97ee1830ce97c584c7427194886de42990c9cb7a075c692712ce3401a5a0f3aecc6dc3700e329c45adf6220c2c48c2287fc7e32a0e28cc258f80d799330d847b91e101ac6d2519f831e38f9c718cda04d6291e4ca97b3197a8f1b0172101fdf974edf98b571be4f9cb4dfc6f6bfdeb2a0525f578a2b6c98bd2e033fa6cc51fc8cbe27e46c8e770fb7976fba63e2e60b368ec51501c353e0fd80cb0dd2c18bd32bcadcde2b6e17c1af039d21f07f9753fad3202678ab8495f9c0bf28c87a83569a45b24016c44feda95cf35738ccce0ab57a0682adae08a59eabfdcdc6c85e435148b1dff73502b7d58786315d220702a54ec44287df93f43e6714ad642fa21a5e95f5efd25feb09e0348e50aac6c0c6a02587acfde294b5fde9890c99f81f7c1d66a4249ae6b0958328d6a9b8de7e3edbc2df9331045829699826125b10f94562054040621ae084ed554327aa1d00e07025e972c9602de098005270a2c2418f42baefd3244cb4f6a4cfe3cc96fd78820814cd9acdce4ecb8333122089678624df1273b6684c6fe801743ce450ca222093a00782fa297b91da797f8c4fe41f592fdf4d88c2601985bf0039869c7e7d4184d6b4b763c9e03411b4961d0327d865608a4a2da873395e02c8df6767838cf9ea0de1a11255d34630e5e395bcfbf32d69358eb3e7af11c6cabe13dfb7bb2477263ba63d82603e6730f14a8f301ac5db57f6b5812cda0f7df8158f068afd50a1b707b698b6c2449501a47469dd24f23b0f9c08d0547178a83014fe239a81b761ccdc438625725fa9886e0316a11a5a6da5ee4fed554475907f813fe153362bd03eba8810b789177b4b65eeda04c8479b0887df44d48fecb717d7629e16f128fb2517fce42950b7e0104642152601858f1cbb9a44102ff33a9802b7647d7d7e5e1620ba56f6e467befec5d604272fd59dafab39b2a914d47134b8212252701afd2351d8b2745ec89aba83a5a9a12e64fa37a3be0ebf91cbd4c5430e945194a6d8c7baf3dae2d82ef3f8fa6408f9d69ceea20ba1aa935857fb4d27fc12879bf218b920a9266187b39aae53904ad79ca628173d83b71bee7d566ac3e847dcf23080eccba908bb429625c256a1f46281f833002aa5c314b991eac10641f3e3921f925f7506c56c01aac823eb35a5b0d42dd15f31eb43370b723231f4ec5f712c3be3e6c7cb031c7470f4943e5271a197810d26236ebc5d882bb1dfdc0806b2af540369c4173bf079f530bf1212948a722198632986ca91d16c67ad1273d087309d23b932468d79ec5939d098cc6c48913302fd61de8b0e4b63dfa0fdf70a9343802571b4444c18240e87b15113e2311739952542ebe26294dc91595113a4ca9af91824f0de233803fe3f3e3084d78aea60170e1385490099cd0038fa06c5d4bcf810e2c20e67f27edb66a11ea6d91d69e69b5e3bf28d9b44a1b138a8f321e81789279cc03cfeac55e4ebbee0ed0efaa2bfcb83485e73e667690068934de14f1a92253c6208ea09798e54934f879e083ba1084c11bdeb870774898e034a488a1bb993632b91e7030aaa0c73b93b8ca1ebde863e059f35206f829e89ca8b0eca39018e2c4d4337a5449aebb100d960a40da66fcc3a86532ab372a97a58bf4674338d83c09c091065eaeb17e85c93378f862619e4d1c4dd6d0fbc6a069bd80d02a10af96c98383f1703c22dc437aa73d70a6964b462a45d7d7f8ca213e58c35fe3e323708ccd14c225a3dac2c4b006fffe0068d77ccea5525769072d4108db44afd6ccb87615cf0de810d058650e5d0c3e1966e8fe54196fe60de24d18d8a73cf2d80774481be00778ca65878b582a8d8fb864ae99bedf8949069e50eddfdcf4812f448314110b52584140e8fa96c2679aeaa4988356a49bbe790ec4b9f219b8e44974111907f79dfdd174ba87c352c09d31465067f6c79d60b934b2dafa2cfdd50fad0103b4621b5375e06032b03d1d11b2767d8d704f987481a3e89c95a4e0b3f576ec56c69c7bad4cde8ef631347e449cbb9ed4621d7b0b4c6255f2eb2a355506992a2a4b6155f0338126b964377a1b626aeb0deb09a076d9b749a8f22ba496914daf9596dc88403b516d5aa96b5eb5ec7a840ffd7e830853db6b0c7383520a0f00f6928ebd4a9224cd65a40aeef8c82c4d789d639a740feaeee3b5c93247c42cea19f737a6e53d0c38d7e8771a77e6ec8610ca05bfa494fc75cca34b1af02eee194c96d4d175149ff7d1e5b594e28e64691fc3c7648b7920a67d11f25fa10d0ddaf21ff74184b981fe0d0f9802cb4f832bba506f9270cae4cd4d437f730d18a6dd6f900e58070b6d604d794491f90e3e1e797d11f651f707e13e1c7103047e3fb435a09e1069dd40249e83799040d0befcdd5b8803dfce4cec7717fa76b7a71d6a2a8278d7d27f8f6c567342e20a83e1c229cdd21ecd592c80dc75121152cb1c36bc91d2c832a76be9e0767761747b9b3de86c9283e5ce97e1998fc44fb816d8c3453f5205f1bc91d507e1a256571fe96e287e0a71dfdb28002fed67a6fae8d809ea590dd61bf174a724895c9fb917ac4fba8fe791908c80cf1e72850b22ea234c8f45027150f7314315704f7992ccf2ab4383bec58a33bb4cfb13d7fedd4c9ce95099c51da4d4fa6ddd2778d21562c023b3b4dd12b835623273bb3d23d11e20d18e645f2c79080ab96d411217618a010f48f78197eff2a0cfa1cdd7e5ea8b6fbdb87a349a33396ad54fe4f3cfc9502b88bbf124f7588b15ecd70ef110c39f76400e7d44592d1b6fbb8cb585e1b74876965395b880554a521a5eb9b72c6504c087a527f315f0523e12df3e9ccd3125f94bb6a2bfb6feebd3494adae165d948bc7210cf212b43655f1c5ca328dbac908ed928923be6650a7c7a323240e03f9232cda44cef02c5fe8fe49de601ff875993b9a32159803b178ee1cfd38868345517aa87008727efee9d006e9ca4e9ce5a7c019711d589a4c1f6d6cdcd67ff22b1de51da8c9cc2d5dd08047d47cc4542ab5fbed042d3e00bccda4c63e4989081acb8373778b5d6d1f63832d1d6395e96996cfd63d37290f17c173f241d45a287131202f8fba764e6bea4720028ef479180a883bdfd9e3cdb2509e8c6198f3ad5e1609ae33e5f5fc8be0c63d63b39c3830c77ca35f6861dd9660cdc236a5e54898bbb0f46cb88d2dcdbf5d6eca4cd311d16f234faaeb993cf06f63d9badd0f9c7d4eb7d4b0d7fb3fbf8ee2664e966c0a71c0edd36f6315e68e6a63d50f87367ef7f80c76d9d4ebb21a0f03abb1c70a17d2671e8ea29ed0a6871c0efba1da0bedbb10546abbbded757ebde809eb565d43f650b94f636c679c050164f5905ccec35dadd255b9b9b83d79edfc5b8c9e8a830a6640d5ebfcb3af80ab8eeac846a7575bf6e94bbbbb9c3b27e330db6a4cbd1de1157e9f3657b271e6cfdbdcef67facbf571e0e49b7f3a82fddbeef7930d83be572adda40409528ffa3f9de220c418bf6654a41fa7c29a27b89f106ea87fac2d2bf79b057a7d48098affeca1fa15f2f55874480f5771e2410fcd770f0911400e8ce9aec0f4fff01f3fcc54f9beb9f54b730e32db39148b56fe967f8cc6e041e072c9a6bdf2e997cdcbdfd6d01449dc86f84e66ea12ceeb2c1bf140e013d30142a91057b36070bafafe1eef89c870cd400c4286c7bf4ed76186e2b35bab9d9ce8e1f42e430939c455eb0b0a114be6466c0c8cfc36fe92f0521edbbfbcb226036d45bfe187658a8cf877afbfd47d9cc5f9180fc144c7e62166f1f984209c30ed266e720d24b40927969a5854664d77392b6ebfc69f5c869497fa54d8cbf9a2a2d2cbdb13d8121420c9248c5c679b98f71c4f4a4291b67498c07b6c9847c236412761e3a1ad4b382aee75cfbc9740cfee4c4a541e84f720c2692c13c2aa69a58fc600e919253dbe06e482c19be0bddcc855c4c3ce126e8eea6e79c9bae5be9f18392842b95b411e420597208f11e3a6e61045b8de6b0fbd0e6f2b36566f598e92b212fac4ec49576f0833209b2572642b5ad8c2e1911650e4060cad5265a51798072fd00a30b0dfded065862743b1e3efee230f7c1acbdfa02946c3e8e3cd153398d958ea03860a518e8244c7a4c19417f7e8300c298d432a5782889a50067233447f7c90248438e238de57934295cc03130ac960b80f7b9cf8280a7c7a953d5bd3331432ea8931e6132e7bb3a4823f3261921b2d351c5f88b36e7780b43fc8c863c9a897cf87be5a60760cd5af6e49d1879235734f742b291740d223be1d93984ec446936003c349a239867f2d3d1e4d0d2788fb54d5e316bc5113a78cfccdbb80bcfe3a34e0cb9f71ef82ca0720e182c306358a11fc89550d9133b86f4b46e8907cd3e8963d0ee9acfb86bf8b4c686e4f3d0a3caffba9c1f2cb62dac177c5a320a57407b82ffa11dae55c93197b8128a26e3fa3a5cd84dfb8585c36a0bd9664878985b79fb8ead2842a091033a219c46147c535b90e1bd9c64f0469356629ad1a20fdc90ea2ceb9439c879afb6d98c7aac659ce6a1e3711a8854169c60deea3dda876969a60e0fd2b641afb05e77c17f593b9be48babddd1334416d8e9f507f0da8ca85500a54e647182dd7f3900e82098e8edb700adfb308db1357cd19d9990615ab0037f8ed25a56c869afcd3c2dc9cae30bd9b61ce3df99bbd75f80743946737f8115483240e3c884b7e34fd32301b887aae5a9c7a55e3493ec3b019d827b5f100c3ab7680287ee59293a022383ad1aeff228c643b269d2b541e162c8c8ed59eeb3c4f966a06985b39a388d4a75b30c15ccb630109644e262022296c6f5587ceb7dc27183a019bf839d700f2ca341af357d9a454c1d3cb144cc4d5ea2814345d04b7dc5194450dab195f0b6446d7b16bb6512ed04fffe7bdb0443748ca3000cf1687364670e2da8512fc498ceb6ca7423c3f47b242d663022a9d80bfbd8ac2419706372861450a6d21eaa4efc094085a9e006ca648d9b8da7defab83379de1c69bbc82313afdd920010fcfce4830db2c58fc057c0f3d8d868835c3016e3b8430e4330b5fa4ca13f432c73a41b8803af012b5546af7017a01662957175cca091df71ceb14b64b53a8f783a5318fca6018d2eee0d1343d0374662fa91319c0458674879822973463e10e2c24adf981c6b3c839b049e2126f9f2b9a943485d64425c378029717111c2ceb39811702be09965abc8e490d586f5eb5483dfa6ccbc94725c07156aa179f7724c53df0e548f14b7031ae5886ec372f518073008df1c8cdb1d7d2bc26c8b46aa1111549b3e1ca400a9dd96d8aee8e2665d85b21a3ab3a52322a5c130e33ca4ca3ed30b6e90283b67e87bd54b18dc3f51a95db2c1606b3ffbb90265bd059092bb8654105e622ad26b3317b8f46add2f247fd1e96de720c7f54ccb5bcfc56ba3a271898742e41383b86810b3118fb76da1cd1c4d8c828aa182728f9934ae064db4c070cc2526b606fe5ad83aa62c7b79c00cee4c10d60a7e4f4b4a6b508d8a3c935b3ad4442f595a9da73a852595f4697e72f3eed9ad33e86f497e6bd030f22c9cd9e60028e319929436830a6b84e2b2ef8cdf21063b03106d776950a767b6f58c05b351cf804c8c6f6b8660fd8bf20401e743fc37b8801298d8a46f47ea9101d939b89e5c6125699895f1e88f82b0d5938b82568c7d06d6186b0646ab85436d8b217dfddc5fac84e73a7a63a5f2aa46dbf3b6d58db6764362ae02a131feacc55c2d4f3b622ed3b7b581c6f2d9e64d72b7571168b58806641a8ee5c4432357b59169da54d5546c8319b23a111db15a8f5d3cb507724a815912f1f709ee3f010185e631458f2fda1d4dfee717eafc63dff9ef4de7ff3b7f1fff7abdb5f1eae5cda7934e436ac6392caa324ddbbde196a9ca038b966745647586c565803a36ad049a7266b39224af77b318931fd34002ef2b980c8c256c714ceb50995d709d0efc6a685b27de92d72836e3a7cb32e3e4818d6d75af1d97e3982efe6f43696834731b9c52e65a15a53cfcb31584ca93bcf6ea6511c318172c007f6abd3d8cd9c8621813b6200fe03f0f46bb365edf30710c5973d6cd53dc242e95a92fbff6f7f54a1f51b0584295862b676fb6afb3df4dcb6129a5657ace3eefd774356f3f7b7554d6727863150567005455dc3f27478592cbd4986d774b4596972229f4d9a36a274be02efd649f161a0aaf312ea82aa52c9d610a31609c01c83339263f71d04bc0f4ae6426e2e033c27511d63334086382c2a239d0b714c9affd733dcb2625b82f90aa4c72b010ff2caf76427690bd8b0343060ea6cbccedf19de9d2ab874afcd910fb1889355c170d97ba211b426ee5c7bc1aeec6b48ea00c11cfc74fc5872ee6ec1443f3d48aa2959e1c5287041515031aeb5b25e1b71512965a8225aaa15df7f547def66831a6316309b12cee092633294264753cf44b42ac982ca2521e14543cd686ac3728328957a954293c1697cb22989734204f1d816640be64244f7e922b45079ac5d3baca2c3cea4463b624ed9f4cb9b6f39e26ad09968433894cb4e7e8d7a5139c7e132622dfec9f9bcfb7584dd6924f5982df2ad3d7b922a346b61282298460d2755d09b27a9795c92b1f17e9392b52c5e95ef84441cc8f52663a345b348b9df9f5a31aede7341e863fce0c5eb67e2ba286826bca4558c12e590d4c4daf30f9ed37ff8fa876c5715b00ca56ba4dd56c5d6988bf11bea2c5c753f29870f3706a71d31fa6b6c318d70d2d66e62311948c95ce6fd8d2775637000ba0a7e96100609361e65350c50ea67bf2cacdd19c3e1a0f71dfed8bdf33167739f0e5162bbbf0c5cba33dfc3f9be0a54aa9ecc29700d89d29a5eb25ceba8daf9673a40592bb85218f76475b8f975528d3b5cd732f3fafaddbdad3f3e02900e7158c091c8b6b971b68c1ec37c4ee1632971158ea423738a48e668e621140a70f31c2bddf40bf89354c6c3fc23f8bc46267967fa926b8a90abcb18865d8dfd2e9bf85d75f5f624935c1905d302dabda85556a5fdb66a49243c4ad73265a43a7949742216eecdd9c191f776a8e5446699e0aa3bf85d19d2eee44039f16bf4f75c9ccf41aaa8654bb3ec48a1018068bfc6dcc786599aeee1dc08fb0a8947ecaa39af12c31cc1f8b4aab2e2add791169f0d7553ec22252f685918e15a4f42b54eac9ad20351ca0ca4a4ef1dd947b5eabe9cb683cbcdfdbea9be0790f16992579dc9d4a4e20b817d021b10f48df0e0303d9fa2a38eb05b855b2883a8cdf9a9d2a6a5cc2e7d142c61fe987331679df4f6310a1b7899e0b341c782c0fa810724dd6bee70713b53e8c046568ab7967253254507a34429c322c736ff68783a63f335f14c1dc657687ac0d25421dd2ad09d140e9118991ee8fafd023bd772b9234e0dd812a4ddc1e8d30275482cfc28253708499d2c0a0c0ad04e406a2c4c8f85cd993618469c0bb35599a983da60eb1d50fadc822454c2c6f6f5a65b2aa1a2901bc8b2229e3f5a4b3a8f5a354660de628dba595af9394ac0db6d88fa2d791f156474b72316513537bebbed22b0fc55a19be27b8c3ad4e15827707e411ca3efdb325c4a8d0f5c47ebcfa96ac57c5fb5f89f3d262fccb58cf365999f71aaf3d21e67b286adaa1927727d1490b21f1f66a342cbff1a0e4eb485e3c92679e7adea3bdbfbe3bbea5379e8158d117870ec779ef8fa6e6de290cd670b0fb89f6714f893d8d86ab4a72d8780d885b0cd676fd880e945257427aada3cd1e0ef59d5250cb461de78d1a232f5079ba1aa551364531f2edf9f9c999597c8451b46915c5ce7f38eb5128e9d463c37f03357c663ec17820c59562b28564e679fa78a026aebc72cf246cdef7e5a4edf6aad2d8dc137c724cbe67b9915fdba125811d741a5f4f2e379daf9cad970e8db973c1166af2e2c59723e0543a6778f87ca9cf3fecd82c9ea7cb74f3c931e08b2b252367d471a2ce40ceb2a8c597b0877f0fb3921d66daf6b966315807cdc522264de1a2b692170f3c8f0f2522fb918816a14814313367d604cca1f3360d73baa2d772fad17c9627777c65a56f5dff9bac25ac9a7eb71c2a0d8776a4e013f9b193ef84060cd033ffe7c58f574bc8ef0781b8229d92f91f774bd437be74cc22572e62dcb1909409cc95dda4e6511e2cccd1cdf20aa1a4ee853994064c110328942eb561de258aff233d9949e3385f040610b37ceba9c4ee4ca16650b408d86ea8f2b05c47be472e9622347899039f66ab4d3a63744e79edcbc9957d1ef92fe7920609731219148555b0dbaa35b3ebd6743e976c6ef6bae2b9465ccf72d3ed7fc914243958107a09c430a11dd5e4fa1ac0d68a3dad687fca86275dd9b5d43991ec92b3abea67994b0fc82e7491e09edef4bacc232d9216cbca9a79d14151f5cade3fc239f99dfca66cc567fb108628d923e8ce72adf0ec0bed7027d6ef4eef476ffe5cfa52cb6dd56651533c5fb774b15ef8401c07e9cd37e2de94a6fd32badd9cb8a4aa0f365a5657c5d652a9d5d024e56a2b697d15fc249eb09fc4039dc1c2bc7e566701d9b4606cbd9c6ca18d6d45fd6c6be20c37326408234f471cee529008bcb96f8afbaccdcabb154b950f0d3f3ba801064cd5f535423cc6a31cbfd05fb1e84be92b2f795ff659b56422f698d79b9999b3d8f87af61beb4b5250aee676f3cd8c46799546d2443b15e6d9f80c94ada9e567a09babca5747b2ca905ec1335901c75255c646d598fda948ea46b6e0178a4fabec5266852aeba48430103366f0b72aa3cc4ae3983a38a6ae8dd20e287ae16c3dff6a1ce3b602a5170805ac09e60d0287067c1e6d1367eb550cfee715f7b4bf3b7af572447c862433bf277b45d5a89d29f8e0b9b22b15b5cf549cbf95e1963beb15537928e2859d8dcf5df8f93579beb9f5927c472fc4941c0839cfcff4cc04da6f5c143ac4a404070916526de776a26b6b7fdfd799928aa78c75c4f6a904863de06c6ad245bcf13cf224d886a324f269d8da406a3f9164ff031e373c7dfd133973fd1048d9da36f124076fe420d117603b5cf8ddd6ec8045e48c7bbe68edf000c8e961cac7e7018f6b008a1a654d45b7326dbe03e152786a08cf4c6121b82632df819e21479c85edd4b338c60c8982059665eb784f17208d674910f04bdadacbdf18d31c10a1118d583470c4e59f1dfc5854d6e2911b24665b7285fb9498e92b53844512e33a9acd8258eb45cc4adc58609096a6abc4ff731180c11b037f4fac97f457811b26e692862176f2033c4dd02462ccbf41da84e43949dfc3b41f48c2b85297aede277a6853aea7897bc1b4e9f7824a70fb22a126a0613e800aa9dd58d6f3118d38f036202062f030d980cef1f0d1782ec43c60a6f85e3c5111f8b10b672e8004f9efee5eb7cc78cf6cc355865daaf867c93e31090197429c3dda2b7e4f02997477ff02488dc893e3c85da9cfdf92df9209263802dc0132daab5e7777f8921cc26444a895c90fda5ba94f70c33d2d71b8ec9205de14085cbbb364763740ee24889f476542ce25c75f115da5fb4b0e5e7434794f71b9ae74d1d1e9aa7c8cb20136f23795cacfbebdfeeeac7b509b8ea1a89dc28dfe39c4f1303d05871bdc281a9b518df60eb2eb255c6a3b3a87d80a3464bda74c31157e015e28173c356d0d743a36dc653bfecdeec3334ff73a1a3ab9e6bac52b0eba9b6c4067bfbd4f985c38cfc79be317fdad73b24d7e53938286fdf8c571ad01f8e9a6f435b8113a0472fd2f000000ffff010000ffff50785766a79a0000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffec7d697bdc3692f0f7fc0a9893439a57ec966cc79357917a578733510edb8f244f369b273b0f9a44772322091a0025f7289adfbe5500efa3c9d665cf4e3ed86a92205055a81b4071efc9f1eba3f39fdfbc240b1d06934ff69eb8ee27e3313912f152f2f942938da34df2747be739f98e5e88293914724e68e4438b484b3e4db4908a6c28c6885e3072f4fad5f9e9c9e1dbf3d7a76764c603b639c2ee0e828098ee14914c3179c9fc1179ab181133788d2ba244223d463ce13302977371c964c47c325dc260e4c7937357e965c0b0af807b2c52381cd5c483a7534666220190786460f8e1e4e8e5abb39766f8d127ae0b58217224a0d17cdf619143a2b94be378df51cbc883e1a3b9b9e52146220898dc77ceb227475a060ef102aad4be838d02412f1cec92517ff209217b21d394780b2a15d3fb4ea267ee574ef160a175ecb27709bfdc77fecb7d7be01e8930a69a4f0306ddc2882c82b74e5eee337fce4aef453464fbce256757b190bad4f48afb7ab1efb34b20836b2eb60071ae390d5ce5d180edef8cb61b1df94c7992c79a8ba8d457a3194df442c8468b804717307101500c1e6b2fd1847bd8d342b2d9be33a39778398a8190934ff005cd75c0263911c9efe4fa1ae7f915ccef2b186963f3e6666f6c5be503d8cea64268a5258dc79e52e3fc6a14f26804779c140ee406b5604c5b08cd35d1cb1890d0ecbdc697cd1342a6c25f926bf3939098fa3e00e44e85d622dc257fd98edf7f9d3e9b01d2ee8c863c58ee12e75b165c32cd3d4a5eb184395b24bfb1450e24507b8b281a2917b899cf6c17379f983f49f0ff165fe6238654ce79e46a11ef929dd1972cacb41d21b06e2822a1620a0270dd06cb8f2c0ac416f95144d483bf20794a00436e11e708c4863309205e01847937b52128301b72b78f72e34fb4615d2d27c83acda748afeea7339890eea779cffeca9e5b9fe63dfb3915a642fa4c5ada4522aae11588b9a89179976c7f5d9de9d21dd38dfb6531e1b1501c256217790a64f2b23e0057da8d843b4d4029e87c2873db309c8b0c6741abbd0888054918e5eff85cc50185b9e411f03a73a781f02e323880b5ad24033f66fc91338e519bc03ac58329f52ee612351e8e2224803f9f6e3c7df6628b3c7dbe8dffed6c7e5da5a0a43e4fd42e7956423ea3cf4efc9e3c2fee67847c0ab79f66b76fea78019b45239f82e2a8f179c06600ed76c1e815f476b68bdb86f369c0e7487f44f2eb7e5a6504ce147193be3817e4090f516bd248b74802d888fcb5ab05d7cc353283af5e81a2a968832b66a9ff7c7bbbb527bfa1582cfe4f41adf441e18f544883c0ad50b113a0f4e5ff0c99cf29d908e9fb94a67f79f197f8fd66de412a576065635013c0d2137ba72c7d796342c67f06de075bab0925b9ae2560c934aa6d369a8f76f3b6e4cf4014095a660a8695c40ba0b402a1228084b822385553c9e885423b1c08785db2580a782700161c2bb09060d0afb85e947bb4fca446e4cfe3fc768d0812c894cdca4dce8e7b6323826089c7d6147fb2673034f607bc18722e62101549d001c07b11bdcced38bdc427f60faa97eca7cf663409c0dc821fc04c3b3ea7c6685a5bb2e7f3bc13b491149096e933b4422015d531dca90467c999ecf1709e3d41bde510253d34632e5eb93b4fbf32d69358ebee3c7b0ab6d5f09efd3d9e90dc98ee19b6c93a5b701f14a8fb1eac5d757c6b5812cd60f4df8158f068d26a854d7793b44586491294f0c8a853fa69043647dc587074a13818f0249e83ba6127d14c8c227655a28f69081ea316516aaaed45ee5f4d75940d803fe15f3123d63bb08e1ab88017f9401b9bd501ca449807cb7881be09c97fb9de825d4af89bc44e86f5e72c54b9e0179d802c440a0c032b7eb9973448e07f261570c5be737d5d46175b287d73e34cdedabbc084e4fab3b4f5673755229b81c69604254a8e035ea56b8a8b2f45ec8baba88a2d4d09f327a7de0ef87a3e472f13154c7a51eea586e3e4a5cfb505f0dde7d114e8b137cd591d445723b5a6f08f56c62f18251f3764515201d2a031c9412dcf2168cd53160b9cc3de895bf87e6dc6ea281cf83ec1eec0ac0bb94c9b22c455a2f64184f2310822a0ca15b394e9810abbec83272724bfe43e8acd1a508355d067566bab41a07b62de0376d6ddedc8c88753f19dc4b0af0f9a05d89893e387a4a15a241a197810d06236eb85d876773bfa8101d754ea816c3883e68b1e784e6d8f0f49413a15c93090c1644bedb230d6cb3ee9c13e5700bd374e8276ed593cd91b0336264e1c8379b1ee408725b7edd17ff8864ba5c111b8da22220a960442dfab88f0198998c794a272f93549694aaea88cd0614a7d8db4fbd4203e81fe677c7e12a109cfd534745c380e15600237f4c123285bd7d273a0030b88f9df4d87ad5a847a5ba4b56f5aed2d9e956c5aa58d09c59d8c47209e643ef3c1b37a36c969d73d00fa5d75851f97a6f07c81991da441228d374516549129631047d04bccf2241afc3cf0413d08c2e00d7f54b83b244c701a52c0d0dd4c1b995c0f3818d5ae477be3b8ca1ebde063e059f35206f829e89ca8b0eca39018e2c4d4337a5449aebb100d960a40da66fcbdd33299d51b95cbd245fab3211c6c9e04e048032fd758bfc2e4597ff862619e4d1c4d36d0fbc6a069b3e8a155205eac920717e3e1d821dc477aa72370a6564b462a45d7d7f8ca113ed8c05fa39363708ccd14c225a3daf689610dfefd01c0aef99c2ba5aed20e5a8210b6895ead9971ed2a9e1bd021a0b1ca1cba187c32ccd0fda9826fe60de24d40ec531ef9ec3d3aa48dee0778ca65878b582a8d8eb9649e99bedf894906bea17a7173d3d77d211aa4885890c20a02426f61297ca6a94e8a396805bae99be79db8570b062e79125d44c6c17d6b7f349deee17d29e0ce1823a833fbe34e7d7934b2dafa2cfdd5df5ba30fd08a6d4cd50183c9c0f60c44c8c6f535f6fb86490f388ace59490a3edb6c876e6dc8b9dfcae4ed609f40e34784b9eb492dd6b1b7c0245625bfae52536590a9a2b21456053f1368924b7663b421a6b6deb09e006a977d9b842abf426a19d9f45a69c98d08b413d5a695bae655cbae47f870d16f10616a7b8d616e504ae101f4bd6260bf9224497319a9823b39364b137e274ee36ea4ee8eaf4d96b92266510fdedf9896f78070aed1ef8477e6ec8610ca05bfa494fc75c4a34b1af02eee194c96d4d175159ff7d1e5a594e28e6469c7e143b2c53c10d3be08f9afd086066df98ffb20c2dcf4fe0d0f9802cb4f832bba54af9270cae4cd4d437f730d10a6c36f918ebe0e97daf435e51145e63bfc70e45d88b08fba3f08efe1881b60e7f7435bd3d547445a2f1089ef621e2410b42f7ff71ae2c0d73313fbdd85bedded69879a8a20deb5f49f90ed6a4e485c61305c38a559daa3398b4527779d44eca9650e1bde4809b3cce95a89dcfe3e6037d9ee01679b1cae76be0ccf7c207ec2b5c01e2efa912a88e78dac3e0817b5bafa487743f15388fb5e470178693f33d547c7ceae9ed4fa7a253ede2949226fc1bc0bd627dd27f3484846c0670fb9c20511f501a6c7028130a8fb98a14a771ff32499e55797067d8b15677699f627ae17773371664065167790529bb7759fe0495788018fccd2764be0d688c9ccedf68c447b80443b927db1e42128e4b605495c8429101e90ee032fdfe3419f439bafcbd517df7a61f5693467d269d54fe4f3cfc9502b88bbf124f7598b15ecd70ef110c39f0e408e1608b25a856fbb8cb585e1b74876965395b880554a521a5eb9b72c65049d0f4b4fe62be0a57c24be7d349b634af2976c457f63f3d78f272969d1cbb29178e5229c435686cabe38b84651b65921c5d928923be6650a787a323240e03f9232cda44cef02c5c18fe4ade601ff875993b9a32159823b178ee0cfc711d168aa2e540f018edebcbd7702787192a63b6bf1055c4654279206bb3b37379ffd8bc47ac76933720a577723108c1d310f09ad7ef9420b4d832f306b338d91634206b2e2dddce0d54647db93c8445be7785966b2cd0f4dcb41c6f36dfc907414891e4e4808e0ef9f9299fb92ca01807c104502a20ef6fa7bf2649f24a01b673cea548783698efb7c1742f66518b3d1c9191e64b853aeb137ecc83663e01e51f3a24a3cdc7de0ac224a736fd76bb39336877458c8d318bbe64e3e1938f66cb6c6e01f52aff72d35fccdeee3bb9b90a59b013fe670e8b6b18ff1423337ed81c29f3b7bff033c6eeb74da0d0185d7d9e5800bbd601251571fd3ae801607fcaedb01eabb1d5bfa6875d7fbc66add1bd0b3b68cfaa76c81d2d146380f18cae229ab8099bd46fbfb64677b7bf0daf3db1837191d17c6946cc0eb7759075f03d6bdb540adaeeed78d72f7307758d66fa6c1560ce94c8eb94a9fafda3bf160ebef75b6ff63fdbdf27048ba9d477de9f603df0764ef94cbb56a033baa44f91fccf71661085ab42f530ad2b79022ba97186fa07ea82f2c7dc8600fa0c279ef4dfbe331dfa3b4f13a746aa89a8c2ea5ce9c366a9aac7e37593a7a7f32b47bccf2ff3b47d875f61c1068d75ff923deeea5ea90b0bbfece8344dfff1a511592023abab3f9f823bc7ac0c595e2a75d601957f78de32db37b4bb59fa360f8cceebe1e052c9aeb855da7fab0072adaa2b63a915f09cdbd4259dce554452906057a60fc59220b8e6c4e735e5fc3ddd1390f19a801080cd9aef3ed6e18ee2ae5dcdcec66673e215c9b49ce223f58daf8155f323360e4e7e1cf519422bff62315651130a7182c7f0c3ba1d5e7b8befefe839ca0a848407ef4283fa68cb70f4d758a61a797b3c327e92500c9fcb4bc45239cee39bedc75e8b77aceb7a4bfd2262648489516d63bd91d038a10f82552b1515e636514313d6ecac65912e329793226df0899849d27bd068dac60e839d78b643a02ff74ecd1205c8c7308c692c13c2aa69a50fc604eee9253dbe06e40ac40df8361e6422ec7bef0128c31d2c3e54dd7adf4f84149c2954ada087298ac38f9790f03b730822d0174d47d5276f5813eb364cff49590175627e2f606f0833209b257262d605b195de210654e9d609edb66b7517980727d0fd88586fe76d73131ba1d4f7c7f7194fb60d65e7d014a36c723cfae558ec0a51814a7da14039d8499a62923e8cf6f1100183389a6fe1125b114e06c84a65e02590269c849a4b1269226850b380286d57209fd7dbe6041c0d333eca9eade1b1b940beaa4e7c6cca1ba0ed2c8bc494688ec485a817fd1e61c6f615e25a3218f6622477f526e7a08d6ac6523e41b236fe48ae65e4886491712d9b1da4e14b263bc190278523707305f3e49b1c97b4b836cd63679c5ac15e716e13d336fa32e384f8e3b21e4fe3be0b380ca3940b0c4346d857e205742654f2c0ee911e9120f9acd2927a0dd359f71cff0698d0dc9e7a14fd5e2eb7252b6d82bb259f069c9285c01ed09fe8776b8569ac85ce2f2339a8cebeb70694f4a14160e4b5c643b50e1616ee5ed3bb68c0b81462ee884701a51f04d6d158c77729cf5e78c5b8969b0451fb821d559aa2f7390f3516db319f5590b9ee6a1eb731a885416dc60deea3dda87693dac0e0fd2b641afb05eec62f1bc76206c21aef69d27082cb0d3cbf7e0b51951ab74943a9145d980c5f3019d0eea13bdfd964eeb3e4c03b7862fba3713324caba4e04f272d20869cf6d2ccd38aa5107c21db0b65fc3b73f7fa0b902ed768ee2fb0ec4bd6d12832e1ede8d3f41c066e5c6b79ea73a997cd958dbd804ec1bd2f0806835b30814327568a8ec1c860abc6bb3c8af164729a206a50b84019b93d4b389738df209a9695ab8993532a5666a860f6e281b02412577010b034aec78a67ef128ebb320dfe2e0ec27db08c06bcd69c75163175f0c40a31377989060c15412f8d15673d82d28ead84b765c7db970e5a26d14ef0efbfb74d3044c788054088e7c9233b7368418d7a21c674b69503740cd34f485a41c221a9d80bfbd82cdf99ee46e40c29a04c7943549df8133a15a66c1e28930d6e76fbfa9ba3ce158b26a6ed228f4cbc714b0240f0f3d3026c90ad3805be021e82c7465be482b118f10e39a0600a249aea8a8658e61c3d10075e0356aa60af70eba516621dbc3a66d0c8ef28e7d815b25a9d473c122b0c7cd3804617f7068921e82b2331fdc0184e02a833a07cc194294c10087161a56f444e341e7c4e02df10937cf9d4147fa41e32212ed6c09478b8f263e759cc08b815f0ccb2556412f76acbfa75aac16f53665e4a39ae830ab5d0bc7b0daca96f07aa478a7b308d7244b761b57a8c034062614e23ee3bdf8a30db17936a44ecaa4d1f0e5280d4ee056d577471b39845590d9dd97a1d91d26098711e52659fe9052f48949d33f4bdea7523ee9fa8d4ae9361b07590fd5c83b2fe1248c93d432a082f3115e9b7990b5cefb6ee1792bf18f4b67390c37aa6e5ade7e2a551d1b8ae4621f289415c348899c3e35d5bdd340713a3a0025550ee3193c6d5a08916188e79c4c4d6c05f4b5b3c96652fdfeb0c96132578b8652adeb719b6d6d92bcda0256fde430789cb2b4e93e68684d6f5b3962c743b2b0d4add2229d670075b327d83eaa5e409eed2013b7ac9d24a5155ce2e69ea4ff353c4774ffa9dc1782bd27e83d0c8939366cb0d808ce79952da0c2af2128acbbef3a64718030e00b4ddd3435397b91c672c98393d0899d487ad5f83b558ca1304dc0a61f1e0625ee079247dbba38f4d979dc8f5a4502bb9d4aca44c7f7088ad3ebae070cd907060bdbb66bcb85e94d8b646d437cefd859078c6a837842c2ff6b43d6f5bf4696b3724142d001ae1cf5a28daf2b4231435635bd7c03804b67993dced152dfa4c4d413cb4fd55d721cd26ab9a8a6d304356b3a42384ed71174eede1b052bc9a44fc5d827ba14040a1794cd1118ef69df1fffc42dd7f1cb8ffbdedfe7ff7efa35faf77b65e3cbff974dce95f183c87059ba6697b90d0325579bcd5f2ac0838cfb0d01150c766db4053ce6cb296e4b5979623f2631a5fe17d05938121962dd46afd4cb323b333ae590f6c1bdb58f21ac566c21759669c3cdeb3adee75e07278d7c5ff6d200d0df26e0353ca5ceb829447c5b69a557992375e3c2f423be39906e0826db647775b596867a239e401fce703b61ba3cd2d13de910d77d33cc5030b52996f1d6cfc7db33246142c5750a5e1e1da9beddb0feea6e5b0acd72a3d679ff76bba5a1094bdea94b51cde5847c1990eaa2aee9fe3e342c9656accb6bba522cbcbe214faec51b5932570977eb24f0b0d85d7182e55955296e531454130fc02e0991c919f38e825607a4f321388f119e1bac8763034082382c2a239d0b794e0d8f8e76696644b708f2a5599e4e047216679e51db287ec5d1c5e33fd6016d1dc1edd992ebd7aa8c49f0db18f9158c375d170a91b126cddca8f7931dc8d69c56058386b9a768aa1793a30ac3dad56af68c4b425e1b7d53a565a8215aaa15df7f52724ec3177cceec6126259dc9f4e665284c8ea78009d8458bd5b44a5f430a878ac535a6f502458af52a9527844339745302f699e2275049a798a15987cf4935c2980d12ce4d755f2e351271a9348e9f864cab59df734974fb03ca1c9efa23d47bf2e9de0f4fb4411f9e6e0dc7c4ac86ab29634d30af8d699bece852ae5d8aa1ca62887c96276e50deb435626af7c74a9e7dc5215a67be11305313f4a9919d0ec5c2d4e89d48f0db59f197a18fe383370d95ac2081a0aae295d6205bb64353063bfc6e4b7dffc3fa2da15c7dd12285be9ee5db3a3a721fe46f88a161f4ec963c2cdc7a9c5bd9098f10f635c4eb590990f965032523abf61cb305add002c809ea68f01804d8699cf92151bbbeec92b37c7c4fa683cc47db72f7ecf58dce5c0975bacedc2172f3b13fc3f9be0954aa9ecc2973ab01b764ad72b9c751b5fade648db49ee16863cda77761e2fab50a66b9be75e7e5e5bceb6951cc05300ce2b181338169774b7d082d9efd9dd2d642e03b0d2856e70481dcc1cc422804e1f62847bbf817e136a98d87e807f168985ceac8a534d70af19786311cba0bfa5d37f0f4b2ca92618b239a865b1bfb04aed4bfe8c547288b8a3d0446be894f25228c48dbd9b33e3e34ecdf1de28cd5361f4b734bad3c30d7ae0d3e2b7d22e99995e43d5906a6f01b1220486c1327f1b335e59a6ab7b63f4232c2aa59f95a9663c4b0cf3c7a2d2ba8b4a775e441afca59f0fb088947deda6630529fd229afae856901a0e506525a7f886cf3dafd5f465341edeef6df54df0180c8bcc4e05dcb44bde40702f6040621f90be8d17a667ebabe0ac17ddad9345d461fcda6ce051a3123c8f1632fe48df9fb1c8ff7e1a8308bd4ef45ca0e1c0d38a4085906bb2f13d3f1cabcd612428f7b69e7756224305a44723c429c34f2e986df3a0e9cfccd76d307799dd211b438950efe9d6846880f488c4488f0d54e891debb15491afddd812a4dd81e8d306fa8049f8505a7e00833a58141815b09c80d448991f1b9b227c308d3e8efd6646942f6983ac456e2b4228b1431b1bcbd6995c9ba6aa4d4e15d144919ae8f3a8b5a3f6166d6608eb3cd6bf93a49c9da608b83287a19196fd559918b299b98da5bf7955e7928d6cae07d831bffea54217877401ea1ecd33f59418c0a5ddfd80fa9df92f5aa70ff2b715efa618855ac679baccd7b8dd73e22e67b286a5a54c9db37d19b1642e2edf568587ee341c9d791bc7824cf3cf5bc9dc95fdf9edcd21bcfba58d317870147f9e88fa6e6de2a0cd610d983442f704f893da487ab4a7218bea68b5b206b877e44074aa92b21fd566cb387437da7b4ab5558c779a306e605281faf4669dbdefdedf9f99b33b3f80858b46915c5ce7f38eb5128e9d463c37f03357c663e077a28c59562b28564e679fa78a026aebc72cf246cde5fc871dbed75a5b1b927f8cd09f99ee5467e638f9604765091023dbedc76bf72779ebb34e6ee055baaf1b3675f3ac0a974cef04cfe4a9f7fd869623c6698e9e63727002fae9438aed371d0d0f49c6551736cd6f8366b253bccb41d73c342b0099a8b454c9a7a4e6d95401e781e1f4a440e22112d4391286266ceac0998b3f86d1ae6744dafe5f483f92c1fddf195b5bebbfe6fb296b06efadd72a8341cda91824fe4874ebe131a3000cffc9f17e25e2f217f1004e28a744ae67fdc2d51dff8ea368b3cb98c71c7425226305776939a4f79b034275acb2b84927a17e6ac1e30450c5da174a92df32e51fc1fe981551ac7f922307431cbb79e4a1cce140d07458b1ddb0d553e5631c9f7c8c55284062e730ed66cb549678cce29af7dc5bbb2cf23ffe55ed220616e2283a2de0c0e5bb56676dd9acee792cdcd5e573cee89eb595ebafd2f998224074b422f811826b4a39a5c5f43b7b51a586bda9fb2e14957762d75de4876c9d955f513e1a507641f8648704f6f7a5de69116498b6565cdbc18a0280666ef1fe39cfc4e7e53b6fab87d08284af608bab35cb73ec59ac29d58bf3dbd1fbdf973e9ab41b7559b457dfb7cddd2c3daf503611ca4375f897b539af62bfd7673e28a6247d86855b9195b62a6565a94948bd0a46567f0f38cc27e9e1174060bf3b2629dc58cd3e2c5f5d2c68536b65f77c8b626ce7023430630f274c4e12e0589c09b07a6e6d1c6acbc5bb15410d2f0b38b1a60c0545d5f638f277894e317fa2bd6c2297d71281fcb3eab569234c563b3323c3373441d5fcf7e63d94d0acad5dc6ebe99d1282f5e499a60a7c23c1b9d81b235250e4defe6aaf2059cac60a65ff04c56d7b254acb2514ce7602a92ba912df885e2d32abb9459a1ca3a29214c8f19332c762a586615834c792053ee47691714bd70779e7e358a715b81d24bec05ac09e60d0297067c1eed1277e7450cfee715f7f562df79f1dc210b862433bfc793a298d6de147cf05cd9953eb090a9b8c54e065beeac574ce591889776363ef7e0e7d7e4e9f6ce73f21dbd10537228e43c3fd3331368bf7151e80893121c245848b59bdb89aeadfd7d5f0a4b2a9e3296573ba01218f690b3a94917f1c6f3c897601b8e936841c3d606522f12490edee371c3d3973f91336f1102295bdb26bee4e08d1c26fa026c8707bfdb9a1db2889c717f215a073c0472fa98f259f080c7b50e8ad26d4d45b7366dbe03e152786a08cf4ce189f82630df819e21c79c85edd4b330c60c8982c5be652bbea74b90c6b32408f8256d1de56f8c690e80d088462c1a8871f967073f1605c778e40589d9965ce13e2566facad4a691c4b88e66b32096c011b312371610a415fb2af1ff5c0460f046c0df63eb25fd55e08689b9a4618883fc004f13348918f36f913621794ad2f730ed079230aa94ebab8f891eda94eb69e25d306dc6bda012dcbe48a8316898f7a0426a37568d7c4c230ebc0d0088183c4c3660703c7c349a0b310f98a949188f55047eecd29d0b2041febb7bd41d83ef996db80edaa5428896ec639310f028c4d9cea4f83d0e64d23dfc332035024f4e226fad317f4b7e4bc698e00870078833a95e770ff89c1cc16444a895c90fda5f6b4c70c37d2d115d76c9027f0a04aedd5931bb5b207712c4cfa73221e792e3af88ae33fc25072f3a1abfa3b85c57bae818745d3e46d9001bf99b4ae5e7c05e7f77d68dd4b66b286aa770ab7f0e111fa6a7e070831b456383953339ccae5770a91de81c622bd090f59132c554f80578a13cf0d4b435d0296eb8cb76f49bdd87679e4e3a1abab9e6bac52b2eba9b6cc060bfbd4b985cba4f47dba367fdad73b28d7f53e38286fdf0c571ad01f8e9a62238b8113a0472fd2f000000ffff010000ffff99e692f5339d0000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["index.html"] = bs @@ -88,7 +88,7 @@ func init() { bs, _ = ioutil.ReadAll(gr) Assets["lang-de.json"] = bs - bs, _ = hex.DecodeString("1f8b080000096e8800ffd459ef6e1cb90dff7e4f411838c006dcbdf47aed877c299ca4b9ba499c4562370860a0d08e34bb8267a43949b39b3dc3459fa6405fa38fd227294949f36f77e3dc9fe4920fc96ac81f258a222952befd0a008ecee6e7f04c6d8f1ef6c3d3c858d8363099078928255c58a9989ec73deb956aacd7c1ba6d060c281dcc29ef139f8723861ab254c7ac2abb813363cdb6b6ad872b2f968a2777419be59f59e63e4c9aca18db9a42c16be5d6cab1e484948107668a22879851f851bbe48df06f243d9e5fc155d095fe51046d0d71a7a404acac670bc74122da66ebf47215e0bfff816f1ffcfe3bf89bb8b10b7864dd12849110560a4a4b36402de0b135c1e9458b96f70f79ae5f221f5578a22a1558b1344a64ed0b6b8c2a8292cc1c7e27882dda5a99d06d7c4cc8a08da9ac409f116995112182fe22353b25fff6a4ce29fb8f0173ec965352021ab1a8145ccdcd9c4183cf0c08ca4161eb5a80578d70a89484eb23dd3ca4a3bf3e02919d16ac4386dc1a51eb0219c142a35c695d0d022d5ae3ae0b906426f4b62dd8928d9fc46771f94fb558da9c739643210e22f1a9460bfc5d398f6794dc7e4a1a0071d15a7b62c042070fc229d04b631d2abe59290395b537e45aa81a142b6196cacf307a14a0c4d3b34b287116bff541d5d1061f61d65edd38538d3691643189f6051f44dde0f73aeecf83362060e64347c0f890782ebcb0534d250a84e3c292e341c2620b7e6b8ab0428dba3d7c8aa5a61b6b9c0d1c80503a5b67c3402d241bc6a20b38301826fe1430c8770038ad673e6c7455c10235c66825f5c979d0734276a4a26ad1b86eb2dbdf60fd6402361b2b134791fcfdd5399cb58837180d9c74602ebcdf58c729eb7dec8313a093b903c2ccea059f6b54d1c0e886db4b4f22ca28977260374eacca2e44054f723833644a1b41c7b96f9718c1e7b2e2e5f8379138ca60de0520abbd871ae1cf946a726660e4981041cf71279e926fa544bce2269404b3c5749353d25e20cc3137ee4147fa50646c951d5a84be10e4594c27d4f03303de0167a9c7ecbe7c4fc1f133fde81b7f1225dec3efa778d906cc0746521a7ba57e68d1203e8befe545d10bd6eac2769f182de74f222d0e078c0b51ab8ec51f99894e9b383c8ae497cf8884ffa7cfb2acb461581e2686e9e86648c6907e59c26b4c50cc1b7c7680a5e53d91499eeb1aafe481e1dec74e13e0b93a2db369d95e3bb4089d8bb0ea33473ee3986514de1f74f678d3362da5117893f24de114dfb9ba045c5c5a45f928807a87313b834b94c4ba0dd7c2cce544418e71fccf13288421e1d6a3a4c054087e85ae57e0fecb78bf7e3eca24e370dcc146c4b26af899004eadb5da8cca5c46eea3479157672fa685ee9494802a158a704ef5ce1af77e1c1de000278b75768bfe3e26ec8062e04e8089b803a6039a409994819eacbaabee2eb91308225a2c0f470cb8504ac6ba794289b0d762cde1c5bf89844be57aac1b2716a651b419b9125faee4697e4517325fa80387dbe8b0e23bfba78ae48502353b3ece90c689c5c26f10cc7578844c6903a8647a874a9f19805e0518d278b5961add9aaabc71e8cce0051600e4e744f798d9289804c64daa0ce2b6e25e7fc5e93a0537c909f3b06718acea50041b18ac55524ea6426f50b6502118da4ebb9f2492176a8344c138431a27966d1d36b58f536b34fc4c00f6b747ce6e5229332664906d9ae8a17998186d43410fdfc053ebda9a0113520262de87395684b6b0d5de62e81e443fcdca61dfd1a79529a907e6f848c39ec10533ac301f2e142ee2d16440369b65f861c074126df048386446adb3b765d890bfa373f1a30095f354f02a5b3e1caff2b36698aae115f63614b6e8b4a4e82944afa64e89b23ed6e2d8cad61cbfb045278879ca282cbb6392c5f96798c283dbe27cfffbd7bfc74a7e84f9e316e8de12cba5534bbedcc8aff1e475915a887651e9a2da82580b5d71372e02dcdeb6aebabb230d7f8978af00aa58ea65eb62e1de1fbba0768d5a13ba68f14ed56b5a6506bd5d6a4a142e256d344f06c55c8a57e368ea5956f9d32dd86f5299c26d1bb252cbd7b5e3eb9a8e8fdb2a8916c2cc77ce142e17a842c14ae2869f20504dec3f033d2960bb46b2e0f58fd4e9192c2c9aa6eb62718ab2cba78e96c366971e3078e2d8e3497291aeab43dfa9592f761ebe71a416955de2c90add1bedcbddc0f010302a1069525aefca387ac2002c1bb4e42d6095d656922617f0c76f07359d0f8edc004fd993a3e3102f890a6f5fd49eb762da7a81e3d3a88c6f4491f628855f297234166ac83d443530eee7a6586fb4ac13d53996efe54525cc4da7fb41feee14e812bc53e0d4958ae3d2b6a846ba61afe3dbe075fbe0c11f14a40bfdfa289f682ad2fbc70b0cce9dad70da4e1b81e3f45475b2a3ef6fabccc0387c32745eb61a3c47a17a37d8bf9fd2fb1b3fa1f51bf860817d8b74f83a5559223349eb8387fc73e57b15dcb04538b8d03da843d3f5caf8698579fca7effa40e1b7da0a6b9a93fdb1729a03a57b90a77f1275389e9d9cf2a1c2f1ef4e988b9e82c082dce9f81f27a3350ce6c2fd3bfa1c15bdcfa8add13fb4ea9e0d65d0dec91aeab93fe0c8f7e3e29457e6c6a42a3b0f13a321df7f929eeb065f99bd74f4a67969e1f6ebe4bd5fdf4568cfb94d9cae32b96a467f09197e26005d83cce241262af8ebe5e5fc353736df5f9d47c09418c1e9698e207918196fe8c959487e72125c57507a39e5f8a6e4546b3e731106afb49d634949cfd4c3dce4e9452658cb16ff68731f52bd3fdefd8b28183d1e8cea073df00ecd9df152f1b20b153654b3c55690de5fb69c6a0b7a3bc1820425f45ab1f7b3f2b508c50ad43bf47b2c48b33435957d6ffaa5aa1e0dff36f6716fbb66ed2dd6483c016b8efad2c352c0d3533987f3ae3f041627d4f4171c128983afeefe0f0000ffff010000fffff97a48b0bf1e0000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffd459ef6e1cb90dff7e4f411838c006dcbdf47aed877c299ca4b9ba499c4562370860a0d08e34bb8267a43949b39b3dc3459fa6405fa38fd227294949f36f77e3dc9fe4920fc96ac81f258a222952befd0a008ecee6e7f04c6d8f1ef6c3d3c858d8363099078928255c58a9989ec73deb956aacd7c1ba6d060c281dcc29ef139f8723861ab254c7ac2abb813363cdb6b6ad872b2f968a2777419be59f59e63e4c9aca18db9a42c16be5d6cab1e484948107668a22879851f851bbe48df06f243d9e5fc155d095fe51046d0d71a7a404acac670bc74122da66ebf47215e0bfff816f1ffcfe3bf89bb8b10b7864dd12849110560a4a4b36402de0b135c1e9458b96f70f79ae5f221f5578a22a1558b1344a64ed0b6b8c2a8292cc1c7e27882dda5a99d06d7c4cc8a08da9ac409f116995112182fe22353b25fff6a4ce29fb8f0173ec965352021ab1a8145ccdcd9c4183cf0c08ca4161eb5a80578d70a89484eb23dd3ca4a3bf3e02919d16ac4386dc1a51eb0219c142a35c695d0d022d5ae3ae0b906426f4b62dd8928d9fc46771f94fb558da9c739643210e22f1a9460bfc5d398f6794dc7e4a1a0071d15a7b62c042070fc229d04b631d2abe59290395b537e45aa81a142b6196cacf307a14a0c4d3b34b287116bff541d5d1061f61d65edd38538d3691643189f6051f44dde0f73aeecf83362060e64347c0f890782ebcb0534d250a84e3c292e341c2620b7e6b8ab0428dba3d7c8aa5a61b6b9c0d1c80503a5b67c3402d241bc6a20b38301826fe1430c8770038ad673e6c7455c10235c66825f5c979d0734276a4a26ad1b86eb2dbdf60fd6402361b2b134791fcfdd5399cb58837180d9c74602ebcdf58c729eb7dec8313a093b903c2ccea059f6b54d1c0e886db4b4f22ca28977260374eacca2e44054f723833644a1b41c7b96f9718c1e7b2e2e5f8379138ca60de0520abbd871ae1cf946a726660e4981041cf71279e926fa544bce2269404b3c5749353d25e20cc3137ee4147fa50646c951d5a84be10e4594c27d4f03303de0167a9c7ecbe7c4fc1f133fde81b7f1225dec3efa778d906cc0746521a7ba57e68d1203e8befe545d10bd6eac2769f182de74f222d0e078c0b51ab8ec51f99894e9b383c8ae497cf8884ffa7cfb2acb461581e2686e9e86648c6907e59c26b4c50cc1b7c7680a5e53d91499eeb1aafe481e1dec74e13e0b93a2db369d95e3bb4089d8bb0ea33473ee3986514de1f74f678d3362da5117893f24de114dfb9ba045c5c5a45f928807a87313b834b94c4ba0dd7c2cce544418e71fccf13288421e1d6a3a4c054087e85ae57e0fecb78bf7e3eca24e370dcc146c4b26af899004eadb5da8cca5c46eea3479157672fa685ee9494802a158a704ef5ce1af77e1c1de000278b75768bfe3e26ec8062e04e8089b803a6039a409994819eacbaabee2eb91308225a2c0f470cb8504ac6ba794289b0d762cde1c5bf89844be57aac1b2716a651b419b9125faee4697e4517325fa80387dbe8b0e23bfba78ae48502353b3ece90c689c5c26f10cc7578844c6903a8647a874a9f19805e0518d278b5961add9aaabc71e8cce0051600e4e744f798d9289804c64daa0ce2b6e25e7fc5e93a0537c909f3b06718acea50041b18ac55524ea6426f50b6502118da4ebb9f2492176a8344c138431a27966d1d36b58f536b34fc4c00f6b747ce6e5229332664906d9ae8a17998186d43410fdfc053ebda9a0113520262de87395684b6b0d5de62e81e443fcdca61dfd1a79529a907e6f848c39ec10533ac301f2e142ee2d16440369b65f861c074126df048386446adb3b765d890bfa373f1a30095f354f02a5b3e1caff2b36698aae115f63614b6e8b4a4e82944afa64e89b23ed6e2d8cad61cbfb045278879ca282cbb6392c5f96798c283dbe27cfffbd7bfc74a7e84f9e316e8de12cba5534bbedcc8aff1e475915a887651e9a2da82580b5d71372e02dcdeb6aebabb230d7f8978af00aa58ea65eb62e1de1fbba0768d5a13ba68f14ed56b5a6506bd5d6a4a142e256d344f06c55c8a57e368ea5956f9d32dd86f5299c26d1bb252cbd7b5e3eb9a8e8fdb2a8916c2cc77ce142e17a842c14ae2869f20504dec3f033d2960bb46b2e0f58fd4e9192c2c9aa6eb62718ab2cba78e96c366971e3078e2d8e3497291aeab43dfa9592f761ebe71a416955de2c90add1bedcbddc0f010302a1069525aefca387ac2002c1bb4e42d6095d656922617f0c76f07359d0f8edc004fd993a3e3102f890a6f5fd49eb762da7a81e3d3a88c6f4491f628855f297234166ac83d443530eee7a6586fb4ac13d53996efe54525cc4da7fb41feee14e812bc53e0d4958ae3d2b6a846ba61afe3dbe075fbe0c11f14a40bfdfa289f682ad2fbc70b0cce9dad70da4e1b81e3f45475b2a3ef6fabccc0387c32745eb61a3c47a17a37d8bf9fd2fb1b3fa1f51bf860817d8b74f83a5559223349eb8387fc73e57b15dcb04538b8d03da843d3f5caf8698579fca7effa40e1b7da0a6b9a93fdb1729a03a57b90a77f1275389e9d9cf2a1c2f1ef4e988b9e82c082dce9f81f27a3350ce6c2fd3bfa1c15bdcfa8add13fb4ea9e0d65d0dec91aeab93fe0c8f7e3e29457e6c6a42a3b0f13a321df7f929eeb065f99bd74f4a67969e1f6ebe4bd5fdf4568cfb94d9cae32b96a467f09197e26005d83cce2412652795f375436a70a794aea817fbdbc9cbfe60ee8fbabf30c1d132338bde111240f23e30dbd4d0bc96f53820b10ca43a79c08288bd59a9d4384c1736ee78152d27bf63089797aba09d6f2d17cb4b90fa9defbc1fe45148c5e194685861eb891e6167aa978d9850a1b2aee62cf480f355bcec9053db260e582127aad384c58f95a846205ea1d060856ae599abacfbe89fd52558f867f1b1bbeb75d57f7168b299e8035477de9052ae0e9a99cec79d71f028b136afa530f89c4c15777ff070000ffff010000ffff15606253e81e0000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["lang-en.json"] = bs diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go index e55bc568..446c4019 100644 --- a/cmd/syncthing/gui.go +++ b/cmd/syncthing/gui.go @@ -288,6 +288,7 @@ func restPostConfig(m *model.Model, w http.ResponseWriter, r *http.Request) { nm := newCfg.NodeMap() for k := range om { if _, ok := nm[k]; !ok { + // A node was removed and another added configInSync = false break } diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 8d61b6fb..9c026527 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -654,7 +654,7 @@ next: wr = &limitedWriter{conn, rateBucket} } name := fmt.Sprintf("%s-%s", conn.LocalAddr(), conn.RemoteAddr()) - protoConn := protocol.NewConnection(remoteID, conn, wr, m, name) + protoConn := protocol.NewConnection(remoteID, conn, wr, m, name, nodeCfg.Compression) l.Infof("Established secure connection to %s at %s", remoteID, name) if debugNet { diff --git a/config/config.go b/config/config.go index 5466d6d7..d7ff4428 100644 --- a/config/config.go +++ b/config/config.go @@ -93,9 +93,10 @@ func (r *RepositoryConfiguration) NodeIDs() []protocol.NodeID { } type NodeConfiguration struct { - NodeID protocol.NodeID `xml:"id,attr"` - Name string `xml:"name,attr,omitempty"` - Addresses []string `xml:"address,omitempty"` + NodeID protocol.NodeID `xml:"id,attr"` + Name string `xml:"name,attr,omitempty"` + Addresses []string `xml:"address,omitempty"` + Compression bool `xml:"compression,attr"` } type OptionsConfiguration struct { diff --git a/gui/app.js b/gui/app.js index 11aa5e6a..ce9150d3 100644 --- a/gui/app.js +++ b/gui/app.js @@ -372,7 +372,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca }; $scope.addNode = function () { - $scope.currentNode = {AddressesStr: 'dynamic'}; + $scope.currentNode = {AddressesStr: 'dynamic', Compression: true}; $scope.editingExisting = false; $scope.editingSelf = false; $scope.nodeEditor.$setPristine(); diff --git a/gui/index.html b/gui/index.html index 5afb12bb..1433a1d4 100644 --- a/gui/index.html +++ b/gui/index.html @@ -313,6 +313,11 @@ Synchronization {{connections[nodeCfg.NodeID].Completion | alwaysNumber}}% + + Use Compression + Yes + No + Download Rate {{connections[nodeCfg.NodeID].inbps | metric}}bps ({{connections[nodeCfg.NodeID].InBytesTotal | binary}}B) @@ -428,6 +433,13 @@

Enter comma separated "ip:port" addresses or "dynamic" to perform automatic discovery of the address.

+
+
+ +
+